Skip to content

V1 Closeout — load-bearing remainder

This doc closes v1 planning. It carries ONLY the load-bearing remainder — the items that still stand between here and the ID-45 first-client ingest, which finishes v1 — each with its justification. The 30-session ordering board it supersedes (v1-completion-sequence.md) is frozen as historical; do not update it. Post-v1 planning lives in the initiatives ledger + the Intent workspace, not here.

V1 completion = the ID-45 (T7) first-client corpus ingest runs end-to-end into the client (Phew) target and is cut over as the client handover DB. Under DR-025 R4 this is a one-time ONBOARDING ingest (ingest_once; ingest-once, no ongoing watch) — not the old walk-based re-ingest framing.

Ledger is truth. Verify any row here with bun scripts/ledger-cli.ts show task 45 (and per-item ids below) before acting.

Gates the old board still showed open that are now CLOSED (pointers only):

  • bl-106 / OQ-45-1 (canonical ingestion_source list) — RATIFIED = cv 13 from the ontology (S377, owner; recorded on the {45.1} journal). Backlog record retired.
  • ID-145 procurement form-first re-architecture — DONE (51/51). The pre-ID-45-GO DDL gate (bl-435 re-key + workspace-layer retirement) is SATISFIED.
  • ID-130 form domain-model (S458) · ID-101 extraction parity (S348) · ID-64 readiness/retention (S352) · S0a/S0b/S1/S3/S4 spine gates · migration squash + ID-68 flip/purge + v1.0.0 cut — all done; history in v1-completion-sequence.md.
  • OKF re-architecture core — id-131 (L-records), id-133 (ontology linter), id-134 (promotion-confidence gate), id-135 (search/provenance UI), id-136 (forms manual-upload, DR-014) all DONE.

2. The remainder — pre-GO gates (in order, finishing with ID-45)

Section titled “2. The remainder — pre-GO gates (in order, finishing with ID-45)”

Every row is load-bearing: remove it and the first-client ingest either cannot run, runs against the wrong model, or cannot be cut over. All are ID-45 subtasks unless noted.

#ItemWhy load-bearingState (S491)
1{45.8} Re-baseline PRODUCT keep-set filter (post-M6 + DR-025 R4){45.2}‘s 33 invariants pre-date the OKF re-architecture and the ingest-once ruling; TECH authored against the stale keep-set would spec the wrong corpuspending — explicitly pre-{45.3}
2{45.3} TECH — cutover mechanismThe run/cutover spec is still UNWRITTEN; nothing downstream can be sequenced without it. Must reconcile the old at-cutover ops list (walk cadence, INGESTION_EXPECTED) against DR-025 R4 ingest-once — several of those steps may now be moot. ({45.4} PLAN is retired per DR-089 — decomposition happens on the Intent workspace spec-note, not a PLAN.md)unwritten
3{45.7} Onboarding bulk-load acquires the ID-138 writer fence ({138.9})The corpus-writer fence is the concurrency contract for corpus writes; a bulk onboarding load outside it can corrupt the curated store. Carries the {138.11} holder-parity gate (S446): ingest_once skips derive_holder_metadata and one-shot means no re-walk heal — resolve before the runpending
4{45.11} Entity-canonicalisation dedupe pass before the first client bundleSSCM near-dup class would be cemented into the client’s first published bundle. Owner flag (S469): reconcile with archived {49.5} — same target, don’t build twicepending
5{45.9} Client OKF bundle c1 production + first publicationThe client bundle IS the handover deliverable under the OKF model. Gated on the OKF lane closing: id-132 (48/48 built, close blocked on Task-B uuids/EMB-STORE/SEED-CONTRACT) + id-163 baseline bundle; first publish blocks on DR-024(i)+DR-026 via {138.3}pending
6{45.10} New-client-deploy ontology-seeding + platform→client promotion runbook sectionWithout it the client target starts from an unseeded/wrong ontology and the ingest classifies against nothing. Scope add (2026-07-15, owner-ratified Option A on bl-463): starter theme-map file seedingpending
7{45.5} promoteCorpusExtractions auto-invocation hostQ&A promotion is part of the ingest’s definition of done; the 10s cron webhook cannot host a corpus-wide batch (fn exported for exactly this wiring)pending
8{45.6} alternate_question_phrasings source (ID-94.1 column)The dedicated column ships empty unless the ingest populates it; retrofitting after the corpus lands means a second pass over everythingpending
9Explicit owner GO → run ID-45The run itself, into the client target, cut over as the handover DBin_progress (2/9)

3. Post-GO tail (rides the run or a stable corpus — still v1 scope)

Section titled “3. Post-GO tail (rides the run or a stable corpus — still v1 scope)”
  • {57.8} ts_rank normalisation calibration — owner-HELD to after the ingest (needs the real T7 corpus).
  • {112.13} + {46.9} deletion set — drop firecrawl/readability/jsdom + dead Vercel extraction tiers + lib/extraction/{og-metadata,extraction-result}.ts; hard-gated on the in-house path proving out on a stable corpus. Terminal v1 cleanup.
  • bl-325 durable stale-citation marker migration — its DDL is to be TIMED with the cutover zero-row window (spec_needed; cheapest while the affected tables are quiescent).
  • v1.1.0 release-tag re-pin — client-prod pipeline image still on the interim sha-b92aee5e pin (no upgrade row in runbooks/per-client-release-pins.md §2); fold the re-pin into the cutover release cut. Owner verify — deferred since S419.

4. Explicitly out — post-v1 (owned elsewhere; listed so their absence is deliberate)

Section titled “4. Explicitly out — post-v1 (owned elsewhere; listed so their absence is deliberate)”
  • ID-127 close-blockers ({127.18} re-smoke · {127.38} qa_sidecar write-half · {127.20} private ingress, DR-042..046) — Platform pipeline / multi-client GA lane, never a first-client v1 gate.
  • ID-128 pre-launch test-CI integration — un-paused S485, runs parallel; not an ID-45 gate. Flag to the owner if launch should wait on it.
  • ID-71 Waves 2/3, ID-132/163 OKF lanes beyond the {45.9} bundle dependency, ID-146/147 and later — post-v1 planning surfaces (initiatives ledger).