Re-ingest Readiness Surface (ID-64 {64.8} go/no-go board)
Re-filed S504 (ruling R10), from runbooks/: a go/no-go decision board (ID-64 {64.8}) — reference material, not a procedure.
Re-ingest Readiness Surface — pre-cutover go/no-go board
Section titled “Re-ingest Readiness Surface — pre-cutover go/no-go board”What this is. The single board that aggregates every pre-re-ingest gate for the clean full-corpus re-ingest (ID-45), each with its owner and a live GREEN / RED / N-A status. It is a living status snapshot: a RED gate is reported as RED (correct and expected) — this surface does not block on RED, it makes the blockers legible so Liam can call the cutover at the right moment.
What this is NOT. It is not the cutover mechanism — that is the Re-ingest Cutover Runbook, which this board’s GREEN status gates (INV-29 is the join point). It does not re-implement the per-gate work; it observes it.
Gate groups
Section titled “Gate groups”- A-gates — ID-64’s own schema / FK / write-path migrations. These are the DDL that must be on prod before the corpus writes a single row.
- B-gates — Task-level dependencies (ID-56 / ID-62 / ID-63). Reference-only: their GREEN status is a precondition this board observes; the work is owned elsewhere.
- C-gate — the data-retention export + re-link plan ({64.7}).
- D-cutover — the cutover runbook exists and contains the prod-ref safety check.
- G1–G6 — the ID-93 “pre-reingest intent-gap” additions (ratified 08/06/2026), as amended by the 08/06, 10/06 (S332) and later journal updates.
The board
Section titled “The board”| Gate | Owner | Status | Evidence / blocker |
|---|---|---|---|
A — {64.2} origin_kind value rename derived_from_bid_response → derived_from_form_response | ID-64 | 🟢 GREEN | subtask done |
| A — {64.3} drop 5 cross-target FKs (cocoindex per-target autocommit) | ID-64 | 🟢 GREEN | subtask done |
| A — {64.4} remaining real-missing FKs (excl. op_id) + form_template* | ID-64 | 🟢 GREEN | subtask done |
| A — {64.5} confirm role-based single-tenant RLS model + RESEARCH framing | ID-64 | 🟢 GREEN | subtask done |
| A — {64.6} entity_aliases FK / retention disposition (OQ-64-4) | ID-64 | 🟢 GREEN | subtask done |
| A — {64.9} content_items primary_domain/primary_subtopic NOT NULL + unique | ID-64 | 🟢 GREEN | subtask done |
| A — {64.10} content_items write-path reconciliation (content rename + title) | ID-64 | 🟢 GREEN | subtask done |
| A — {64.11} source_documents write-path reconciliation (content_hash rename) | ID-64 | 🟢 GREEN | subtask done |
| A — {64.12} drop 5 AI-telemetry token cols + rewrite item-provenance consumer | ID-64 | 🟢 GREEN | subtask done (commit c310adba7) |
| A — {64.13} drop 4 orphan content_items cols + reader rewrites | ID-64 | 🟢 GREEN | subtask done (commit 5c02dc08a) |
| A — {64.14} bid→form rename (bid_responses + history + bridge) | ID-64 | 🟢 GREEN | subtask done |
A — {64.16} rename get_bid_* RPCs → get_form_* (completes {64.14}) | ID-64 | 🟢 GREEN | subtask done |
A7 — types-parity regen database.types.ts after the last DDL; supabase-types-parity CI | ID-64 | 🟢 GREEN | last DDL = eebb5c325 (ID-95.5); regen 05b100440 post-dates it; git log 05b100440..HEAD -- supabase/migrations/ is empty → parity current, no regen pending |
| B — ID-62 fixture-staging live tier (HARD gate) | ID-62 | 🟢 GREEN | task done |
| B — ID-63 ontology / CV integration | ID-63 | 🟢 GREEN | task done |
| B — ID-56 chunking (Variant B ratified) | ID-56 | 🟢 GREEN | task done (CLOSED S353 — {56.12} folder-drop landed; was the board’s last RED gate) |
| C — {64.7} retention export + re-link plan (content_items keep-set, feed_articles relink) | ID-64 | 🟢 GREEN | subtask done; plan doc present (specs/id-64-pre-reingest-readiness/retention-export-relink-plan.md), source-driven model bl-106 v2 RATIFIED S350 |
D — cutover runbook exists + cat supabase/.temp/project-ref before any prod push | ID-64 | 🟢 GREEN | runbook present; project-ref check confirmed at runbook L128 (precondition, MUST read prod ref rovrymhhffssilaftdwd), L215 (re-confirm before restore), L119–121 (relink-to-prod only at deliberate cutover step) |
| G1 bl-92/93 classifier-fix porting → cocoindex extraction prompt | ID-64 / ID-93 | 🟢 GREEN | SATISFIED 08/06 (commit df4463cd): bl-93 table-heavy recall ported into ENTITY_MENTION_PROMPT, truncation half already satisfied (content_text fed unbounded). bl-92 N/A — cocoindex path has no entity-relationship extraction (S203 holder-rule surface was the removed kh_pipeline; N/A-retirement superseded by ID-101). Both backlog items retired. |
| G2 zero-row re-check on bid_questions/bid_responses/content_citations | — | ⚪ N-A | DROPPED 08/06 — platform not live, surface cannot gain rows pre-run. Caveat (S332 re-review): if bid-testing UAT begins on the renamed form_* tables before the ID-45 run, the zero-row premise lapses → revisit {64.7} re-link extension (content_citations.content_item_id + bid_questions.matched_content_ids uuid[] — array, no FK, silent orphaning). |
G3 bl-74 q_a_pair_history superseded_by + source_workspace_id (pre ID-45 promotion) | ID-64 {64.15} | 🟢 GREEN | subtask done; history is append-only — landed before the promotion step so lineage is preserved |
| G4 ID-94 alternate-phrasings capture-at-ingest | ID-94 | 🟢 GREEN | task done (was “in flight” at last journal; now complete) |
| G5 Lane-A folds: bl-42 empty-string coercion + bl-43 PK rename + bl-106 ingestion_source | ID-64 {64.17} | 🟢 GREEN | bl-42/bl-43 landed via {64.17} (done; migs 20260609225144 + 20260609230521). bl-106 escalated S332, v2 RATIFIED S350 (source-driven keep-set, model-independent) — cutover runbook + retention plan stand through the correction. |
| G6 — ID-58 (T11 citations) schema slice ratified pre-cutover | ID-58 | 🟢 GREEN | task done; spec chain (PRODUCT/TECH/PLAN) present + ratified |
| G6 — ID-59 (T9 write-back) schema slice ratified pre-cutover | ID-59 | 🟡 GREEN¹ | task in_progress but the schema slice is ratified (PRODUCT/TECH/PLAN present; {59.14} UC5 promotion DDL landed 83ffc1d3d). Full feature build is intentionally post-cutover; only the schema slice gates cutover, and it is in. |
| G6 — ID-57 (T10) — C5-decoupled, no pre-cutover action | ID-57 | ⚪ N-A | task in_progress but C5-decoupled (no cutover action required); {57.5} question_matches DDL already landed 5dde22500 as an opportunistic G6 slice |
| G6 — ID-60 (T12 KG) — no pre-re-ingest action (alt mechanism via ID-71) | ID-60 | ⚪ N-A | task spec_needed, no spec dir — deliberately deferred; KG path goes via ID-71, not the re-ingest |
| Gate-zero — bl-252 cocoindex 1.0.7 | ID-64 | 🟢 GREEN | DONE (commit 7ed1821c) |
¹ ID-59 GREEN-with-note: the gating condition for cutover is the schema slice
ratified (per OQ-64-5 “structurally complete, based on ratified specs”), not full task
completion. The schema slice is ratified and its DDL has landed; the task’s in_progress
status reflects post-cutover feature work that does not gate the re-ingest. Treated GREEN
for cutover purposes.
Can we cut over?
Section titled “Can we cut over?”Verdict (22/07/2026): board fully GREEN/N-A on its own terms — but the board itself is STALE and needs a full gate refresh before any cutover call. Every gate above is GREEN or N-A (ID-56 closed S353 cleared the last RED). However, per the ledger-drift section below:
- DR-025 (S441) reframed ID-45 — the run is now a one-time onboarding ingest
(ingest-once, no ongoing watch), not the “clean full-corpus re-ingest” this board was
authored for, and added
{45.7}fence wiring. - ID-131 retired
content_itemsand re-parented the five extraction tables tosource_document_id— the A-gate rows{64.9}/{64.10}, the C-gate retention keep-set, and the G2 caveat all reference retired/renamed surfaces. - The A7 types-parity evidence is dated 13/06 and predates the ID-95.5 + ID-131 migration waves.
Do not call the cutover from this board as-is — re-derive the gate set against the
DR-025 framing + post-ID-131 schema first. The G2 caveat (silent orphaning of
bid_questions.matched_content_ids uuid[] — no FK) still deserves a zero-row re-check
immediately before the run, against whatever the post-ID-131 equivalent surfaces are.
The cutover step itself
Section titled “The cutover step itself”When the board is GREEN, execute the cutover via the
Re-ingest Cutover Runbook — specifically the D2 relink
step (runbook §3, L119–121): re-ingest to the verified non-prod Preview branch → spot-verify
(classification parity, embedding presence, FK integrity, USING(true) single-tenant RLS) →
only then cat supabase/.temp/project-ref (re-confirm prod ref rovrymhhffssilaftdwd) and
relink to prod for the in-place data restore. The post-cutover DB state is the client-handover
state.
Cross-references
Section titled “Cross-references”- Re-ingest Cutover Runbook — the D-lane mechanism this board gates (§1 INV-29 preconditions = this board’s GREEN status; §3 the hybrid-(c) sequence; §8 the relationship to this surface).
- ID-64
{64.7}retention plan —../specs/id-64-pre-reingest-readiness/retention-export-relink-plan.md(C-gate input; source-driven keep-set, bl-106 v2). - ID-93 register §6/§8 —
../specs/id-93-pre-reingest-intent-gap/RESEARCH.md(G1–G6 origin). - ID-64
phase-a-findings.mdITEM4 (hybrid-(c) recommendation) +historic-reingest-doc-review.md§3/§4 —../specs/id-64-pre-reingest-readiness/. supabase/CLAUDE.md(KH repo) — thecat supabase/.temp/project-refbefore-any-push gotcha.
Ledger drift — 05/07/2026
Section titled “Ledger drift — 05/07/2026”- [status-changed]
ID-56isdone(CLOSED S353,{56.12}folder-drop landed;tasks/id-56.md). The board’s single RED gate and the “NOT-READY” verdict hang on{56.12}pending— on the board’s own terms it is now fully GREEN/N-A. - [status-changed]
ID-64isdone(closed S352;tasks/id-64.md). The A7 types-parity row’s “no regen pending” evidence is dated 13/06 and predates the ID-95.5 and ID-131 migration waves (S445 GO#2 applied 9+2 migrations to staging+prod). - [status-changed]
ID-45was reframed byDR-025(S441,reference/decision-register.md): the run is now a one-time ONBOARDING ingest (ingest-once, no ongoing watch — status_note S441/R4), plus a new{45.7}fence-wiring subtask (S443;tasks/id-45.md). The board’s “clean full-corpus re-ingest” framing predates the corpus reframe. - [spec-section-changed]
ID-131(upstream added to this board 05/07/2026;tasks/id-131.md) retiredcontent_items({131.17}final shipped S449, gate greenrg==0) and re-parented the five extraction tables tosource_document_id({131.8}M2, S429). The A-gate rows{64.9}/{64.10}, the C-gate retention keep-set, and the G2 caveat’scontent_citations.content_item_idre-link all reference retired or renamed surfaces — the board needs a full gate refresh before any cutover call.
Ledger drift — 13/07/2026
Section titled “Ledger drift — 13/07/2026”- [status-changed]
ID-45scope has expanded beyond the{45.7}fence-wiring subtask recorded in the 05/07 drift section:{45.8}(re-baseline PRODUCT keep-set filter post-M6- DR-025 R4),
{45.9}(client OKF bundle production + first publication),{45.10}(new-client-deploy ontology-seeding + platform→client promotion runbook), and{45.11}(entity-canonicalisation dedupe pass before first client bundle) were added S463/S465 (ledgers/tasks/ID-45.md). None are represented on this board; several (notably{45.9}and{45.11}) are pre-first-client-bundle gates.DR-060(MEMO-DELTA, OKF-aligned config invalidation, ratified S469) further bears on the cutover’s config-invalidation surface — not cited by this board and does not supersede the citedDR-025(stillaccepted).
- DR-025 R4),
Ledger drift — 20/07/2026
Section titled “Ledger drift — 20/07/2026”- [status-changed]
ID-131itself is nowdone(CLOSED S451, commit3bfd644f,ledgers/tasks/ID-131.md); status_note records 39/39 subtasks, M6 GO applied both envs S450, simplification pass + quality-review PASS_WITH_NOTES. The 05/07 drift bullet above flaggedcontent_itemsretirement and the gate-refresh call but predates the parent task close — the L-records refactor is no longer “mid-endgame” but closed, so the A-gate refresh the 05/07 bullet called for now lands against a closed ID-131, not an in-flight one. No change to the board’s gate table (no-rewrite rule); recorded as evidence only.