Skip to content

Venue data closeout — September 5, 2026

Status: Active Last reviewed: 2026-09-05

Goal and ownership

Complete the owner's remaining venue-validation work: verify the deployed repair, review remaining identity candidates, refresh incomplete Naver evidence, fill only supported facts, and make hours/fee corrections preserve their meaning. Naver leads under venue-data canon; human curation stays protected. An explicit unknown with its missing-source reason is a valid evidence outcome, not a verified negative fact. This is a user-authorized continuation of venue-data audit work, not approval for direct booking, an ownership inference from legacy flags, or unrelated R1–R9 feature expansion.

Codex owns the data audit, implementation integration and local commits. The second coding agent owns the bounded hours/fees contract slice after its read-only diagnosis. Claude owns push and OTA. No agent should repeat a deployment already performed by the release owner. New hosted mutations require a reviewed exact input set, recoverability and writer coordination; the source-capture stage is read-only.

Current evidence floor

Starting source is cb89fc6a, clean and upstream-synced. Claude's ff54fdd2 records the original chain and guarded edge deployment plus preview OTA. Independent read-only checks at 08:03 UTC confirm hosted head 00598, the successor write guard, thirteen identity-recovery snapshots, 445 quarantined observations and 3,484 open venues. The original rollout is no longer a blocker.

The new immutable working generation is .audit/venue-closeout-20260905/corpus/ (paged reads, not a transaction snapshot): 3,484 venues, 8,259 open-venue observations and 249 divisions. The independent checker reports 123 flagged venues / 124 findings, 193 identity candidate pairs over 341 venues, one missing pin, no exactly equal pin group, and fourteen differently named pairs within 50 m. These are review signals, not automatic corrections.

There are 2,325 unique known Place IDs across canonical anchors and active observations. Of 2,376 active Place observations, 47 have independently checkable pins and 2,329 are legacy name-only evidence. Naver evidence is absent on 762 venues. Only 253 venues have explicit indoor evidence and two have explicit lighting evidence; legacy false/public defaults are not verified absence or ownership. A fresh post-repair capture must replace these baseline counts.

Ordered executable slices

SlicePrimary artifactBounded input / startAcceptance proofState
V0Post-deploy audit generationDeployed 00598; public venue business projectionCounts, active guards and residual queues are reproducibleVerified
V1Exact-Place source capture2,325 known IDs, identity/flagged rows first; probe current Apollo shapesEach requested ID has dated/hash-bound evidence or a specific terminal/unavailable outcome; no partial-success claimAll attempted; 2,324 captured, one retryable exact-identity failure
V2Identity decision registerAll 193 pairs in V0 plus their exact provider evidenceEvery pair has retain-separate / confirmed-duplicate / wrong-attachment / explicit evidence-hold reasoning; no transitive mergesReviewed; two fixed aliases prepared in 00601; remaining holds explicit
V3Guarded metadata repair inputV1/V2 accepted attachments, existing government/roster evidence, 123 flagged venuesOnly proven values change; protected rows and changed snapshots abort; unknowns and old evidence remain recoverableFinal 2,021-row preview passes combined rollback rehearsal; executable bulk input source-gated
V4Lossless hours/fees correction contractCurrent composer → adapter → SQL → readback; measured live payload shapesMenu/package labels, scope, duration, closed/unknown days and free prices survive edits; malformed values rejectImplemented; focused app and SQL tests pass
V5Venue workflow verification packetRepaired local contracts and deployed alias behaviorDetail/source reads, stale references, editor round trips and nearby-map interactions have real tests or explicit device-access limitsProduction filtering, round trips and 360/430 px fee-control checks pass; native limits recorded
V6Final residual and release handoffPrior slice evidenceFresh counts distinguish corrected, valid exceptions, unavailable evidence and owner/device gates; local commits are scopedRepair package committed locally; source and owner/device release gates remain

Scope and verification contracts

V1 owns scripts/audit/refetch-exact-places.mjs, a pure business-source projector under scripts/audit/lib/, focused script tests, and ignored raw capture artifacts. It imports the existing Apollo envelope parser. Probe identity, coordinates, menus, hours, amenities and homepage shapes before full extraction; never retain review-author profiles or review text. Serial paced reads stop on access/rate responses and repeated schema failures; checkpoints allow later resumption without changing the requested ID set. Empty/unpublished fields remain unknown. Capture hashes/timestamps describe the actual page, not the canonical venue row.

V2 owns its decision register and targeted read-only relation checks. A name or nearby pin is not sufficient to merge; indexed courts and branches retain source labels. Human/audit records, different owner histories, scope conflicts and unstable provider identities stay out of automatic repair. Kind changes require independent confirmation under the audit's existing two-judge rule.

V3 owns a separately reviewed exact repair artifact and regression fixtures. Do not edit deployed migrations. Use the existing guarded observation/resolver interfaces, preserve source authority, and rehearse against captured business data before proposing any live writes. Source revert is not database rollback; snapshot/archive plus forward repair is the recovery contract. Unavailable facts and legitimate source conflicts belong in the residual register, not guessed values.

V3 implementation is now frozen to an owner-only 00600 partial business-refresh helper and rollback-only pgTAP (assigned to the completed first review agent), plus Codex's preparation script and later generated exact-input migration. The helper verifies each canonical snapshot and existing observation hash/time, locks parents, protects human-owned records, validates a strict 150 m attachment, backs up only changed business fields, and accepts only source-equal metadata patches. It must not invoke a broad resolver that could recategorize venues or change court inventory. Kind, roster count, closure and successor are post-write invariants. Original observation timestamps remain on unrefreshed photos/reviews; separately dated field evidence describes the refresh. This is not a general public write API or live-deployment approval.

The reviewed V3 refinement permits retracting an invented canonical parking/shower/shop false to unknown only when the exact old Naver payload asserted that false, the source field is being removed, no other observation carries a boolean fact for it, and all human-protection guards pass. It never clears a true value or interprets a missing amenity as false. Recovery includes the old canonical value and attribution.

V2's additional fixed 00601 cohort is limited to the three source-confirmed kind repairs below and two empty-history alias pairs: government 금병공원 → the anchored cross-verified 금병공원, and government 서운체육공원 → the anchored cross-verified 서운체육공원. Fresh exact Naver pins are 2.2 m / 18.2 m from their counterparts; no indexed scope appears; all eight relation tables and incoming aliases are empty in the read-only inventory. Preserve every observation on its original row, soft-close aliases, and never run a broad resolver. Seven exact snapshots, source hashes and reference inventories must still match at execution. The shop has empty capabilities; the two full courts preserve lessons and add full_court, as required by the existing row invariants. Court counts remain unknown. Any new human/audit ownership aborts this cohort.

V4 is assigned to the second agent: the hours/fees entity and correction adapter, composer, detail formatting/sections/pending-value rendering, associated i18n and tests, and forward migration 00599_venue_metadata_correction_contract.sql with pgTAP. Missing schedules and units stay unknown; closed groups, menu notes and exact 0–2,000,000 KRW amounts survive. Both submission and approval validate, including old pending values. No editor redesign, booking model, pricing policy or unrelated correction field changes. SQL extension calls follow AGENTS DATA-14.

The live shape probe also authorizes a necessary V1 producer seam owned by Codex: shared Naver business-metadata helpers, scripts/lib/providers.mjs, scripts/scrape-naver-place.mjs, their focused tests and the explicit test:scripts command. This closes recurrence of first-number price parsing, first-weekday hours compression, missing-amenity false assertions and unscoped Apollo entity selection. It must not change classification policy or weaken attachment gates. The independent C1–C10 checker continues to import no producer projection code.

Two fresh blind judges agree that 어시스트링's primary retail category must not become a lesson-only practice venue, and that 아난티코드 라켓클럽 / 유캠프's explicit court-use or named outdoor hard-court rental menus must not disappear behind their lesson menus. Codex's producer scope therefore includes the narrow classifyNaverCapabilities corrections and regressions for those demonstrated patterns. The floor veto, human/audit pins and unknown court inventory remain unchanged; this does not approve broad reclassification.

For every code slice: targeted tests during iteration, yarn check, strict lint and explicit-path PI/extension checks at integration. Database tests use isolated or rollback-only fixtures; never test by editing real users' bookmarks or club records. Docs use yarn docs:generate, yarn docs:check and git diff --check. One agent owns generated docs and final local commits.

Stop and re-scope if source IDs expand, source schema repeatedly fails, two agents require the same write path, a current source contradicts a proposed identity, or a write needs unavailable authority. This does not stop independent safe slices. No API keys, auth users or personal relations belong in captured evidence committed to Git.

Progress and deferred boundaries

The source-shape probe succeeded for five exact public Naver pages, including a practice academy's lesson packages and a shop's stringing menu. It confirms keyed PlaceDetailBase, string x/y coordinates, nested newBusinessHours, nullable conveniences and homepage representation. The shop demonstrates different Saturday/Sunday hours, weekday breaks and temporary closures that cannot truthfully be reduced to one weekend range. The fee/hour diagnosis has reproduced destructive round trips and permissive SQL validation; it is an implementation blocker, not merely cosmetic UI work.

The combined 005990060000601 plus final 2,021-row metadata preview rehearsal passed in a separate database containing sanitized business fixtures. It produced three intended kinds and two aliases, preserved all court counts, original observation timestamps, fixed-cohort sources and references, and unrelated venues. Auth users and all eight personal/history relations stayed empty. Rollback restored the baseline venue/observation digests exactly. The three SQL suites pass 47, 142 and 50 assertions respectively. This is not an exact hosted-payload replay. The earlier 1,652-row rehearsal is retained separately; the final receipt is bound to preview SHA-256 45d3b165b182be8130b2e9529316fc9f6ba6d2e2881511bef337ab98a8ba3c28 and all three migration hashes inside the versioned evidence packet.

Production browser checks pass category filtering and local metadata edit/discard/readback. The discarded-draft regression is fixed. A subsequent phone-width review found clipped fee controls; the responsive composer repair passes 14 focused tests. After Claude corrected the shared-UI token type, the rebuilt production app passed at both 360 and 430 px: all nine fee controls fit inside the panel and receive clicks, and edit/discard restores original values with Submit disabled. There were zero browser exceptions and zero mutation attempts. Native runtime checks require a device; none is attached. The development-only modal-portal failure and headless Korean font fallback remain separate from production functional behavior.

yarn check completed with exit 0 (not the earlier interrupted wrapper): all typechecks, 235 app suites / 3,910 tests, 22 sessions suites / 236 tests, all other workspace tests, and 81 script tests passed with two explicitly container-gated PostgreSQL scenarios skipped. The separate SQL suites above cover the new migrations. Strict lint completed with exit 0. The final script command passes 93 tests with the same two explicit skips. The strict source-price and evidence-packaging follow-up passes 28 real subtests, including rejection of discount/starting-price captions, unsupported source-zero notices, incomplete dual reviews, stale summaries and stale rehearsal hashes.

A later integration check encountered Claude's in-progress profile consumers still passing meta to the changed SectionBlock API. That shared-UI/profile repair belongs to Claude; the earlier clean gate is not represented as proof for every subsequent concurrent edit. After those consumers changed, the follow-up yarn typecheck completed with exit 0 in 5m 18s. Final yarn docs:check and exact-owned-source ESLint also completed with exit 0. Claude still owns the release-wide gate after his remaining feature edits settle.

Local version-control handoff

403cf3f8 (fix(app): preserve venue metadata and guard Naver repairs) contains exactly the 58 venue-owned implementation, test, migration, evidence and documentation paths. Normal format/schema/commit-message hooks ran; no verification bypass, push, OTA or hosted write was used. Claude's profile/record/session/shared-UI work and unrelated staged/unstaged changes were preserved. The previously authored Pressable dependency hunk remains in his shared path for explicit inclusion in his commit; the verified web workflow requires it.

The final business packet records 2,324 captured pages, one retryable page, 193 pair dispositions, 123 dual reviews, 2,021 proposed rows and 1,463 holds. Its combined rehearsal receipt matches the exact preview and all three migration hashes. This is a local delivery with explicit evidence holds, not a claim that every venue is valid or that the data repair has been applied.

See the release handoff for source counts, residual decisions, rollout and recovery boundaries. Production web builds and rollback-only local tests have run. No new hosted venue mutations, push, OTA or real user-history rewrites have run here.

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