Venue pipeline integration review — 2026-09-07
Status: Active · Branch: integrate/venue-pipeline-20260907 (main 427024f7 + codex/venue-pipeline-20260906 at 2394990f, 13 commits, 923 files)
Claude's independent integration of the Codex venue worktree, per the closeout handoff (venue-closure-2026-09-07.md). Nothing here is merged to main yet, and no hosted migration, Edge deploy or OTA was performed.
Merge and conflict resolution
Seven conflicts, exactly the set Codex's merge preview named.
| File | Resolution |
|---|---|
venue-finder-browse-list.tsx | Union — Codex's viewport callback (onVisibleVenueIdsChange) + main's SCROLL_CONTENT.list inset |
venue-search-results-list.tsx | Codex's rewrite (curated groups + certification proof) + main's SCROLL_CONTENT import; the inset use had auto-merged |
directory-venue-detail-screen.tsx | Main's hero-canon structure kept; Codex's ownership action, courts onEdit, handleReport, VenueContributionLinks re-applied; the retired correction modal / report sheet imports dropped as Codex intended |
docs/README.md, current-project-state.md | Regenerated after the merge |
docs/history/rebuild-log.md | Union, both histories retained (Claude's entries first) |
docs/workflows/multi-agent-operating-model.md | Codex's version of the coordination notice |
Two follow-up fixes the merge itself required:
venue-contribution-links.tsxusedHairlineList, which main retired under the divider law (e2774b95); ported toRowList(ListRow peers are spacing-only).create-club-screen.tsxcrossed the 600-line size gate (608) with Codex's venue-viewport hook; four comment blocks compressed, now 596.- Six Codex files carried middle-dot joins (
@twomore/no-middle-dot-join, owner ruling 2026-09-06): enumerations became comma lists (테니스장, 연습장), joined distinct facts becamelabel: valueor comma-separated accessibility labels — 18 sites ini18n/{ko,en}/venue-contributions.ts,contribution-changes.tsx,contribution-row.tsx,fact-confirmation-picker.tsx,claim-history.tsx. - Six of Codex's script tests rendered main's real components against a
@twomore/uistub that predates main's layout constants: the stubs now carrySCROLL_CONTENT,CONTENT_INSETandSEAM, and the detail-screen fixture carries thetrustsummary main's screen reads (showSources = state.trust.total > 0). Likewisevenue-search-takeover.test.tsx's Jest mock gainedHAIRLINE/SEAM/SCROLL_CONTENT. Test intent unchanged.
Verification on the merged tree
yarn typecheck: green.yarn check(docs, cycles, sizes, migration lint, typecheck, every Jest workspace, 786 script cases, 205 queue cases) andyarn lint:strict: green after the fixes above.- pgTAP (
supabase db reset+supabase test db, local stack, migrations 00001–00631): fails, and the same failures reproduce from Codex's own worktree, so they pre-date the merge:
| File | Failures | Cause |
|---|---|---|
venue_refresh_ledger.test.sql | 5 / 37 | Counts whole-table rows (prepare creates one protected job per venue expects 4, gets 7); migration 00382_owner_venue_corrections.sql inserts three real venues (스포타임 · 코오롱스포렉스 · 대치유수지) with six observations, so any count not scoped to the test's own IDs is off by those |
venue_refresh_apply.test.sql | 1 / 48 | Same — expects 0 observations before application, finds the six from 00382 |
venue_maintenance_raw.test.sql | 1 / 41 | Same |
venue_refresh_outcomes.test.sql | aborts | INSERT … SELECT 'old_source', to_jsonb(o) FROM venue_source_observations assumes exactly one observation exists; six rows violate the temp table's primary key |
venue_owner_claim_integration.test.sql | aborts | private.venue_owner_history_guard() raises invalid owner history redaction time during anonymize_withdrawn_profiles() — a guard/redaction ordering fault, not fixture pollution |
venue_owner_claim_authenticated_finish.test.sql, venue_owner_claim_ledger.test.sql | 2 / 23, 3 / 39 in the worktree run only | Order- or time-dependent; not yet diagnosed |
Seeding is not the variable: the failures are identical with --no-seed. CI's pgTAP job (supabase db start then supabase test db) applies the same migrations, so these would fail there too. Codex's handoff cites yarn check receipts but no supabase test db receipt; the pgTAP claims in the earlier audit docs were not reproducible on this machine.
pgTAP closed (same day)
All seven files fixed in supabase/tests/ only; no migration changed. Full suite: Result: PASS, 116 files, 2,934 tests.
- The four count-based venue tests now delete the three 00382/00383 curated venues (by
import_hash) inside their own transaction, andvenue_refresh_outcomesscopes its observation snapshot to its own venue. - The owner-claim integration abort did not reproduce once the fixture pollution was gone; the redaction stamp is a fresh
clock_timestamp()per call andOLD.redacted_at IS NULLshort-circuits the guard, so no guard defect. venue_owner_claim_authenticated_finish,venue_owner_claim_ledgerandvenue_contribution_ledgerfailed deterministically on PostgreSQL 17.6, which attaches an EnglishHINTto plain grant-denial errors; the test helpers had relied on "no hint" to separate those from the codebase's domain errors (SQLSTATE 42501 + snake_case hint). The helpers now trust only hints matching the identifier convention. This is the likely reason Codex's environment reported green: an older Postgres carries no such hint.
Merged and released (same day, owner: "let's do what we can to merge")
- Merged to
mainat67314279; pgTAP fixes and the 00601 deferral followed atfae9f6bfand146fe66d. - Migrations: the hosted ledger stopped at 00598.
supabase db pushapplied 00599 and 00600, then 00601 failed closed at its whole-cohort preflight: 서운체육공원테니스장 (fa3c4d7d), one of the two KSPO duplicates the migration merges, had gained a kakao witness (17558027), a telephone andsource_count2 on 2026-09-05 18:15 UTC — after Codex's snapshot. Verified row by row through the data API (six of seven rows still match byte for byte). Per the closeout's own release rule the seven-row repair is deferred: 00601 now installs the recovery table and function but no longer executes the cohort; a later migration binds a fresh, re-reviewed cohort to the current baseline. The second push applied 00601–00631. Ledger and local chain agree at 00631. - Edge functions: corroborate-venues, enrich-venues, ingest-venues, search-venues, venue-maintenance (verify_jwt false per config), export-user-data deployed to
llhvhhpbjnnrfwcczizc. - OTA: preview channel published from
146fe66d; both release guards passed (clean tree, no native-sensitive change since the 6d5c3f05 baseline). - Still to prove on the released environment (handoff §Release boundary): submission, review and restart; court identity retention; closure and reopening; owner certification and revocation; the operator prepare-capture-apply-retry path; and the account-queue upgrade behavior (one-time cold-start cache clear). Browser, device, real authentication and live provider results remain distinct from the local fixtures.