Skip to content

Venue metadata and remaining identity closeout — September 5, 2026

Status: Review Last reviewed: 2026-09-05

Outcome and boundary

This continues the owner's Naver-led validity, classification and metadata audit after the original 00598 deployment. It prepares three additional category corrections and two same-facility aliases, repairs lossless hours/fee editing, and adds an evidence-bound metadata refresh mechanism. It does not claim that every venue is independently verified or that this continuation has been deployed. Claude owns push, database rollout coordination and OTA.

The execution record defines scope and ownership. The generated business-only evidence packet contains every requested source ID, dated page hashes and business projections, all 193 pair decisions, both verdicts for the 123 flagged venues, five operator corroboration records and the metadata hold register. No review authors, user profiles, bookmarks or user-history rows are included. Raw page HTML is not committed.

Current source checkpoint

The frozen generation contains 3,484 open venues and 8,259 active observations. It is a set of paged reads, not a transaction-consistent production snapshot. Read-only deployment checks confirmed hosted head 00598; the earlier repair must not be run again.

All 2,325 exact known Naver Place IDs were attempted. The final checkpoint at 10:29:44 UTC has 2,324 captured pages and one retryable exact-identity failure, with no unattempted IDs. Supplemental HTTP 429 responses first caused a checkpointed pause; normal access resumed after a 30-minute cooldown using the same manifest and request identity. No alternate identity or route was used to bypass a restriction.

테니스스트링개러지, Place 1080516232, repeatedly returns HTTP 200 with a parsed, exact-request Apollo result of null and no business entity. This establishes unavailable evidence, not a provider-declared 404, permanent closure or duplicate. It stays retryable, so the source completeness flag remains false. Do not present the capture as a fully verified nationwide refresh. The bounded alternative check of the exact business name/ID and the previously recorded operator blog found no accessible primary announcement explaining the missing page. The operator blog could not be retrieved; secondary directory results were not treated as authority. The reason therefore stays unknown, with no inferred closure or replacement Place attachment.

The final non-executable preview has 2,021 eligible venue patches. The remaining 1,463 rows are held: 986 lack a unique existing Place observation, one has unavailable source evidence, 288 intersect unresolved identity pairs, 140 fail attachment, 26 have indexed-resource scope, nine are human-protected, seven belong to the separate fixed repair, four lack the exact canonical anchor, and two have operator/address conflicts. These counts describe this captured generation and overlapping concerns are represented by the first applicable hold.

prepare-business-refresh.mjs refuses executable input while the source cohort is incomplete. --preview emits preview.json, not the owner helper's {manifest,rows} input. It also refuses to reuse a directory containing executable input, preventing an older file from being mistaken for the current preview. No bulk metadata data migration has been generated from this partial capture. Retry the remaining ID through the same frozen manifest when source evidence changes; do not switch identities, silently shrink the requested cohort or weaken the attachment test to make the batch pass.

Identity and classification decisions

All 193 pairs have individual dispositions. Twenty-nine repeated-name pairs have separate, fitting Naver identities at separate source locations. Six were duplicate candidates; two now have a reviewed fixed repair after exact source and empty-history checks. Four still need physical-scope evidence. The other 158 remain holds: 41 pin/attachment conflicts, 13 indexed resources, five human-owned cases, 70 source gaps, 16 corroborator-only identities and 13 nearby scope ambiguities. No transitive clustering or distance-only merge is authorized.

00601_venue_reviewed_identity_and_kind.sql contains exactly seven guarded endpoints:

ChangeEvidence and preservation
어시스트링: practice → shopExact Naver sports-goods/stringing identity; lessons are secondary. Shop capability array becomes empty.
아난티코드 라켓클럽: practice → full courtPublished weekday/weekend hourly court-use menus; preserve lessons and add the full-court capability.
유캠프: practice → full courtNamed indoor/outdoor hard-court rentals are distinct from its practice-bay menu; preserve lessons and add full court.
Government 금병공원 → anchored 금병공원Same exact Place 15503210, 2.2 m between rows, matching facility identity, no indexed scope.
Government 서운체육공원 → anchored 서운체육공원Same exact Place 16943198, 18.2 m between rows, no indexed scope.

Both alias pairs have zero rows in all eight protected relation tables and no incoming aliases in the read-only inventory. All 19 source observations and provider references remain on their original records. The aliases are soft-closed, not deleted. Court counts remain NULL. Exact business snapshots, source hashes/timestamps, references, human/audit protections and relation inventories are rechecked atomically; changed or partial cohorts abort. Bounded recovery captures only changed business fields. Do not deploy while venue writers are running.

The dual review covered the 123 currently flagged venues, not every venue anew. Fourteen pinned kind disagreements require the owner to reopen the prior audit decision; fresh menus do not override that ownership. Fourteen judge disagreements remain tennis-scope evidence gaps, not proof that multipurpose government or evacuation-designated sites lack tennis courts.

Five previously ambiguous pinned full courts gained operator corroboration: Sky Brothers, JK, J Field 1977, Upstream and Korea Tennis Park. Upstream's photos are historical; Korea publishes inconsistent indoor counts and proposed price tables. Keep the kinds, but do not import an operator's count as the originating canonical inventory. The venue-data canon still requires an authoritative government or actual court roster for that scalar.

Gumi Star's outdoor business photo contradicts a confident lesson-only downgrade but proves no court dimensions. Its sign's lot 308-7 conflicts with page text 308-2; retain both for review. 조이테니스's singles-court page cannot supply whole-facility metadata. 패스트랠리 publishes a closure-intent note; 테니스라운지 publishes an operator-transfer label. Neither automatically authorizes permanent closure or a successor merge. The government record named lacks its original identity, and OSM 테니스장7-8 / 테니스장12-14 lack parent-scope proof. Preserve them as unresolved; do not invent names or turn index ranges into court totals.

Metadata and editor contracts

00599 validates hours and fees at submission and again at approval, including old pending drafts. Missing groups/units remain unknown; closed days, holidays, notes, menu labels, exact zero prices and legacy aliases survive. Empty fees clear to unknown, not free. The latest actual human approval wins for hours/fees instead of an older popular schedule. Other correction fields retain their existing approval rules. No public RPC signature changed.

00600 adds an owner-only partial business-refresh helper, not a public API. It checks exact canonical snapshots and original observation hashes/times, requires strict name plus 150 m pin agreement, protects human evidence and runs without the broad classification resolver. Canonical values must equal the captured source, except documented normalization and narrowly checked unsupported false→unknown retractions. Genuine true amenities and independently sourced boolean facts cannot be erased. Raw day schedules and menu captions remain available when the canonical groups cannot express them. Old review/photo timestamps are not relabelled as freshly checked.

Both producer paths now use exact Place-scoped Apollo entities, positive-only amenity evidence, complete uniform hours groups and exact menu prices. Percentages, price ranges, discounts, starting-price captions, caption/price conflicts and quantities are not guessed into fees. A source numeric zero becomes a zero fee only with explicit free/zero-price wording; advertising placeholders stay raw. This does not restrict validated human zero-price edits. Raw schedules preserve breaks and exceptions; equal endpoints do not prove 24-hour opening. The immutable capture-v1 advisory projection is distinct from the strict production/canonical projection. Independent C1–C10 audits still do not import producer classification/projection code.

The venue-only phone validator now accepts the eight-digit 15/16/18 representative-number family alongside its prior ordinary numbers. Exact Naver values 1522-8802 and 1660-0753 exposed the old leading-zero regex error. KT's contact directory and representative-number form corroborate that business-number shape. This does not change personal phone or auth verification.

Verification and release handoff

Rollback-only database suites cover hours/fees, the owner refresh and the fixed repair. A separate local database contains schema plus all 3,484 public venue rows and 8,259 sanitized business observations, zero auth users and no personal relations. The final 2,021-row preview rehearsal changes zero non-target venues, zero kinds and zero court counts. Its observation hashes are explicitly rebound to sanitized fixtures; it is not an exact hosted-payload replay or live write. The combined 005990060000601 rehearsal then applied the same preview in one rollback transaction: exactly three category changes, two aliases, 2,021 metadata recovery rows and seven fixed recovery rows. All 19 fixed observations, five references, 8,259 original observation timestamps, court counts and unrelated venues were unchanged. Rollback restored baseline digests exactly. The SQL suites pass 47, 142 and 50 assertions respectively.

Production Chromium verifies category filtering, detail readback and hours/fee local edits followed by close/reopen. That walkthrough found a hidden draft surviving dismissal; the modal now routes close through its existing reset path. Reopened original values leave Submit disabled. All browser backend traffic is intercepted synthetic data, with no submitted corrections or bookmarks. Web prerequisites add explicit animation dependencies and the existing confirmation provider. Native-device behavior and the development-only React Native Web modal portal remain separate runtime checks; production success is not evidence for them.

The narrow-screen follow-up found fee controls clipped at 430 px. The composer now separates the exact amount input, full-width stepper and wrapping unit choices; 14 fee/modal tests pass. After Claude fixed the shared-UI token type, a fresh production build passed all 44 static pages. The 360/430 px browser runs verified positive bounds within the panel/viewport and pointer receiveability for all nine fee controls, then repeated the successful edit/discard round trip. The runs used 42/40 synthetic backend requests respectively, with zero mutation attempts or browser errors. All audit-owned servers were stopped. Native and typography limits still apply.

Final command results and the small-screen follow-up are recorded in the execution record. Local implementation commit 403cf3f8 contains the 58 venue-owned paths; it was not pushed. Claude's concurrent flat-detail/shared-UI work is not part of this venue repair. The pre-existing-in-flight Pressable dependency hunk is frozen for explicit shared-path handoff. Claude must include that nine-added/four-removed-line hunk in packages/ui/src/pressable.tsx when committing his shared-UI paths: [scale, opacityValue] supplies the web-without-plugin animation dependencies required by the verified venue workflow. Codex does not stage that Claude-owned path. A later full integration run also exposed his two profile consumers still using the removed SectionBlock.meta prop. After those consumers changed, the follow-up whole workspace typecheck passed (exit 0, 5m 18s); final docs checks and venue-owned-source lint also passed. Re-run the release-wide gate after Claude's remaining feature edits settle.

Recovery is a reviewed forward repair from the private snapshots, not a source-code revert. Before recovery, recheck current human decisions, references and new history; do not blindly restore older facts over later user edits. Before deployment, rerun exact preflights under a writer pause, apply 005990060000601, and smoke-test canonical aliases and metadata corrections. The bulk refresh remains gated on complete source capture and a separately reviewed exact-input artifact. Push, OTA and hosted deployment were not performed in this continuation.

Markdown remains the source of truth. Run yarn docs:check before handoff.