V1 Completion Sequence — the ordering board (HISTORICAL)
V1 Completion Sequence — the ordering board (HISTORICAL)
Section titled “V1 Completion Sequence — the ordering board (HISTORICAL)”⚠ HISTORICAL — frozen at S462 (2026-07-11). Do NOT read this as current state or update it. The forward surface for what remains of v1 is
v1-closeout.md(lean, load-bearing-only, finishing with the ID-45 first-client ingest); post-v1 planning lives in the initiatives ledger + the Intent workspace. Known drift since freeze (see the closeout doc): ID-145 is DONE, the OKF chain (id-131/133/134/135/136) landed, bl-106/OQ-45-1 was long RATIFIED (cv 13, S377), and ID-45 gained subtasks {45.7}–{45.11}. This board is retained for its S299→S462 ordering history.
READ FIRST each session. This is the live “where are we / what’s next” surface for the canonical-pipeline → first-client re-ingest → V1 launch. It is ordering-first and edited in place (never append-a-block-per-session — that is what made the predecessor unreadable).
- History + architecture + per-stage write model:
canonical-pipeline-sequencing.md(its S272→S298 refresh stack is frozen as historical; this doc supersedes it as the forward map).- cocoindex 1.0.3 write constraints + live-ops/burn runbook:
cocoindex-write-model.md.- On-prem deploy + rollback + backup/monitor runbook:
docs/runbooks/onprem-b1-deploy.md.- V1.1 / V2 / post-launch deferrals:
deferral-register.md.- Deployment topology (servers, DBs, OKF layers, goose, per-client rollout):
reference/deployment-architecture.md(authoritative, S436).Last updated: S462 (2026-07-11). S462 headline — procurement form-first pivot (ID-145) + house-in-order: ID-130 is CLOSED (S458, 30/31; {130.18}→bl-435) — its “12-step migration before ID-45 GO” gate is SATISFIED — but DR-038 (S452) + the owner ruling (2026-07-11) supersede its workspace-umbrella half: a procurement item IS one form instance. → ID-145 opened (procurement form-first re-architecture,
must, FULL spec chain; RESEARCH consolidated S462 atspecs/id-145-procurement-form-first/RESEARCH.md; owner OQ register gates PRODUCT) — runs as its own track on the/procurementworktree. ID-145’s DDL batch (bl-435 re-key + workspace-layer retirement) must land BEFORE ID-45 GO — same pre-launch model-cement window that governed id-130. id-128 is PAUSED excl {128.3} (owner ruling S462) until ID-145 lands — {128.10}/{128.14} e2e + snapshot work would otherwise encode the legacy UI. id-127 is 30/36 (remaining: {127.18} CRON-secret split in_progress → its webhook-completion fix also unblocks {127.34} [title reworded S462: the pipeline route-tag manifest.kh-workspace-map.json, NOT an app-side concept]; {127.20} private-ingress task-close blocker; {127.24}; {127.35}; {127.19} deferred). id-132 29/30 ({132.15} publish finale runs in a parallel session). Manifest claim corrected (S462):.kh-workspace-map.jsonsurvives ONLY as an empty-mappings mandatory walk guard —route:"forms"is now a load-time ManifestLoadError and qa_sidecar is superseded-pending under id-131; plan full retirement together. Prod verified S462: id-58 citations DDL + the {57.9} clamp are both ON PROD (stale “rides ID-45” / “rides parity batch” status notes corrected).Prior (S436, 2026-07-02) — the OKF re-architecture landed/advanced: id-131 L-records refactor (eliminates
content_items; embeddings →record_embeddings, freshness/governance →record_lifecycle; umbrella MERGED to main, PR #110) → id-132 producer/L-concepts + id-133 ontology linter + id-134 promotion-confidence release gate (the {127.4} reframe) + id-135 search surfaces; forms are manual-upload app-side (DR-014). Authoritative topology:reference/deployment-architecture.md. The S419 detail below is retained as prior context.Prior (S419, 25/06/2026): V1.0.0 IS CUT; the only remaining client v1 gate is still the re-ingest (ID-45, unchanged in_progress — {45.3} TECH/{45.4} PLAN unwritten + bl-106/OQ-45-1 + Liam GO). ID-127 (Platform pipeline standup) is essentially COMPLETE — 15/16 subtasks done: the two-server split is LIVE (Server A
88.208.255.178= client pipeline · Server B87.106.72.59= platform pipeline + the single Coolify 4.1.2 control-plane that manages both), both platform cocoindex apps run :healthy on Server B (ca-pipeline-platform-production→ prod DB zjqbr ·ca-pipeline-platform-staging→ staging DB rbwqew), the E2E confirmation walk is PROVEN on BOTH staging + prod (POST /walk → 202 →pipeline_runs; prod created genuinely-new content [ref_items 2→3], idempotency + converge-by-walk-2 backlink proven, item_failures 0, DB isolation held — closed 127.11+127.13), and LMDB→S3 backups are armed + self-healing (a Coolifyforce_docker_cleanuphad pruned the backup-tools sidecar off BOTH hosts → silent no-op nightlies; rebuilt, re-proved, added a build-if-missing guard, PR #89524bb4f6; datapath-watch monitor wired). Only the id-134 promotion-confidence E2E gate remains — the S436 reframe of the old “{127.4} synthetic corpus + manifest” task ({127.4} is now CANCELLED in the ledger; the manifest’s forms-sense is removed per DR-014, though the route-tag.kh-workspace-map.jsonitself is KEPT) — plus the deferred v1.1.0 release-tag re-pin (below). ID-130 (procurement / form domain-model) is now in ACTIVE IMPLEMENTATION (a parallel session) — amust-priority pre-launch lane whose 12-step staging-first migration must land before ID-45 GO. Supabase types regenerated from the Platform DB (S419,78ffe6b0) — now carries the id-130 form-domain schema (form_outcome_types,form_questions.form_template_id) that had drifted onto staging. main HEAD →78ffe6b0. Deferred to next session: cut v1.1.0 + re-pin client-prod to it (client-prod currently on an INTERIMsha-b92aee5epin, not a release tag — finishing the id-127 “correct release tag tracked by the client” goal), held back to avoid racing ID-130.
- v1.0.0 RELEASED: tag
v1.0.0@cb3c5919+ branchrelease/v1.0.0(origin + local); ghcrkh-cocoindex-pipeline:v1.0.0aliased fromsha-cb3c5919(no rebuild); AGPL LICENSE + THIRD-PARTY-NOTICES; release crib +runbooks/per-client-release-pins.md. ID-113 (per-client release/version pinning) DONE.- ID-68 DONE (S372–S375): the migration squash landed (143 migs → single baseline
20260617130000; identity-guard now GREEN); the history purge was EXECUTED via repo delete-recreate intoai-solution-hub/canonical(S373); the repo is PUBLIC; theknowledge-hub→canonicalrename is complete; the client project-ref scrub shipped (refs are runtime-only viascripts/lib/project-refs.ts+.env.local/PLATFORM_PROJECT_REF— never committed). (ID-68 Task + all subtasks now flipped done in the ledger (S379) — the prior in_progress/HELD lag is cleared.)- ID-104 (eval engine) DONE → ID-71 Waves 2/3 unblocked (Wave-1 already on canonical,
2f169545b, surface 58→42 + bid→forms rename; W2/3 not yet built). The old “id71-id104 FF carries two unapplied migrations” debt is RESOLVED (absorbed into the squash baseline).- Lane B carried (still accurate): ID-57 done (question_match RPCs prod-promoted), ID-58 closed, ID-59 core + corpus-promotion on prod/canonical ({59.19} route-i flipped DONE S378; {59.15} UC8 still gated); ID-95 closed-out.
- ID-112 (worker-side HTML/URL extraction cutover) SHIPPED (S379): impl wave {112.5}–{112.12} — shared Trafilatura
extract.py+POST /extractpure-cleaner endpoint, worker HTML branch re-pointed to in-processclean_html,reference_ingestserver-sideextraction_methodderivation, manual-URL route rewired,normaliseUrlrelocated, golden-fixture parity — recovered from the S378 subo-112 worktree, cherry-picked to main, both migrations applied foreground to the Platform DB. Only {112.13} (DELETION set: drop firecrawl/readability/jsdom + dead Vercel Surface A/B tiers) remains, deferred/gated on ID-45. ★S382 correction: the cutover shipped to code/main but the on-prem worker deployment lagged — the/extractTraefik route +EXTRACT_API_TOKEN+ a/extract-capable image were never released to the Coolify staging/prod pipeline, so deployed URL-ingest extraction 503’d until S382 released it (deploy branchesstaging/release/v1.0.0synced from main: staginge1785490, prod8b2bdab8; Coolify+Vercel env set both envs; image→sha-b92aee5e; both redeployed + verified). bl-346 tracks the drift root cause.★- Pre-reingest DB hardening (ID-116, S378): tryQuery refactor + 8 RLS policies wrapped in initplan select-form + 11 FK indexes (advisors
auth_rls_initplan8→0,unindexed_foreign_keys11→0). New infra backlog BL-342/343/344/345 (advisory follow-ups; BL-345 =auth_insufficient_mfa_options, the still-red Supabase-advisors lane — re-baselining declined, accept or resolve MFA to clear it).- The Spine is unchanged and still the gate: re-ingest (ID-45) is PENDING — {45.1}/{45.2} done, {45.3} TECH + {45.4} PLAN still UNWRITTEN, {45.5}/{45.6} cutover-wiring pending, bl-106/OQ-45-1 ingestion_source list still awaiting Liam ratification. Prior (S404→S419, id-127 arc): S413/S414 greenfield two-server split (old IONOS box cancelled → 2 hardened VPS; client apps on Server A, platform wave on Server B) · S417/S418 Coolify env-topology fix (staging apps into dedicated
stagingenvs, NEW app UUIDs) + realEXTRACT_API_TOKENwired platform prod+staging + prodpipeline_runswebhook unblocked (CRON_SECRET aligned) · S419 E2E walk both envs + LMDB backup fix (PR #89) + types regen. Note a platform-prod redeploy fragility (BACKLOG-candidate): the 10.7 GB cocoindex image re-pull on the 4 GB Server B failed mid-redeploy (→ transient prod 503; recovered by pre-pull). ID-129 PullMD full decommission DONE (S413). Older: S402 ID-120 CODE wave + bl-301→ID-127 promoted + ID-126 closed · S400/S401 CI-green baseline · S382 (ID-111 +/extractincident) · S349 canonical→main · S336 (S0a prod cutover) · S323 (ID-75 closed) · earlier sessions → §0.
Deploy topology — TWO targets (do not conflate)
Section titled “Deploy topology — TWO targets (do not conflate)”Older docs say “prod” as if there is one. There are two distinct deploy targets, and the v1 work splits cleanly along them:
- PLATFORM —
kh.aisolutionhub.co.uk· Vercel projectcanonical-platform· tracksmain· Platform Supabase DB pair (prodzjqbr+ stagingrbwqew— the id-127 standup feeds them separately). This is our own dev / CI / showcase instance — NOT a client. Platform now HAS its own ingestion pipeline (ID-127 — bothca-pipeline-platform-{production,staging}cocoindex apps live :healthy on Server B87.106.72.59, E2E-proven S419, 15/16 done). - CLIENT (Phew, first client) —
kh.phew.org.uk· Vercel projectcanonical-phew· production tracksrelease/v1.0.0· its own client DB pair (prod + staging). The on-prem Coolify cocoindex stack is the client’s pipeline, now on its own dedicated Server A88.208.255.178(ca-client-pipeline[-staging].aisolutionhub.co.uk; domain flips at handover); ID-45 re-ingest fills THIS client’s DB. (One Coolify 4.1.2 control-plane on Server B manages BOTH servers.)
Implication for the Spine: “cut over to prod as the client handover DB” means the client DB, fed
by the on-prem (client) pipeline. The Platform DB never “goes live” for a client — clients live on
client DBs, each receiving migrations via a deliberate per-release supabase db push (never auto-push).
ID-127 (Platform’s own ingestion, ex-bl-301) is parallel and post-client-launch, not a Spine gate.
0. You are here
Section titled “0. You are here”- S306 — Task 82 DONE: fixed the preview-branch migration replay + re-ingest branch-creation strategy (the blocker that gated the ID-62/64 cutover). Prod cocoindex rolled to the pandoc-capable image. (ID-72/73/74/77/78/79/81 cocoindex hardening wave also landed across S304–S307.)
- S308 — BRANCHES ALIGNED at
2f70f766(canonical-pipeline-setup→mainFF →stagingFF). The months-long held-branch hold is released; the pandoc durability caveat is resolved (main now carries the pandoc layer). Schema parity verified perfect (staging + prod both migration-complete, byte-identical to repo). ID-66.11/66.12/66.13 done. ID-76 ratified (Option A). Verified headline: PullMD/ID-75 does NOT gate the re-ingest cutover (only {62.10} + new-URL/RSS ingest need it); the run-record webhook is best-effort observability, NOT a content-cutover gate (content writes viaCOCOINDEX_DB_DSNregardless; prod observability proven {66.16}). - S309 — ID-76 DONE (
'cancelled'is now a first-classpipeline_runs.status; migration #10620260604113356applied + verified on staging AND prod → both at 106, parity held). bl-224 fixed inline (PipelineRunRowSchema/PipelineRunRownow admit'in_progress'— the row schema matched to the DB constraint). ID-66.14 (LMDB→S3 backup) + ID-66.15 (datapath monitor) DONE → ID-66 is now fully complete (all 23 subtasks done); the two new artefacts are built + runbooked but activation is operator-gated (S3 creds/schedule for 66.14; schedule/alert sink for 66.15). bl-222 done (staging on-prem Coolify deploy arm) · bl-218 done (cocoindex idle-boot skipif guard) · bl-221 spec authored (docs/specs/bl-221-cocoindex-walk-trigger/TECH.md,ready). ID-71 (MCP) RESEARCH kicked off (Liam handover in progress). - S311 — ID-66.15 datapath monitor ARMED as a Vercel cron
(
app/api/cron/datapath-watch,*/15; reuses the testeddetectStallspredicate; Sentry-fallback sink) — live on next prod deploy; Gotcha-A resolved (migration #106 → condition A live). ID-66.14 backup target = Supabase Storage (corrected the stale “Coolify DB-bucket” premise — Coolify manages 0 DBs; creds host-stored, never the public repo); bucket + S3 keys provisioned by Liam, remaining = host cron + tooling container + one test run. bl-221 → ID-83 DONE (walk-trigger decoupled: lifespan-only boot + bearer-gatedPOST /walk+ single-flight; 5 subtasks, Checker PASS, cherry-picked; OQ-1 Coolify scheduled-task cadence = operator step). New backlog: bl-224 (IONOS de-co-locate), bl-225 (de-Cloud-Run sweep). 5 superseded test files removed (Liam). - S312 — ID-66 FULLY CLOSED: {66.14} LMDB→S3 backup ARMED + verified — the
mdb_copyhot design is unusable (cocoindex’s bundled LMDB rejects every distromdb_copy,MDB_VERSION_MISMATCHon 0.9.24+0.9.31, though the data file is standard LMDB magic0xBEEFC0DE), so it pivoted to a cold snapshot (stop→cp→start→ship;lmdb-backup-cold.sh+kh-lmdb-backup-toolssidecarrestore-verify.sh; host cron30 3 * * *, bucketonprem-backups, restore round-trip verified). OQ-1/walkCoolify scheduled task created — disabled both envs (enable at cutover).COCOINDEX_SOURCE_PATHset on both Coolify apps (burn-safe; boot-never-walks). bl-225 done (de-Cloud-Run sweep, 8 files). Spec chains authored (parallel planners): ID-75 {75.1} RESEARCH (Option A — cocoindex custom-source — empirically viable; B2 fallback not triggered), ID-80.2 forms/content separation architecture, ID-52.22 catalogue-idempotency design (found a realtemplate_version-NULL bug that defeats the upsert). Next-session recon written:s312-id62-readiness.md+s312-id61-bl45-reconcile.md.
- S313 — ID-62 advanced + ID-61 decomposed + housekeeping: {62.7}
verify_driver.py(stage-only loopback/stagePOSTer; no-Supabase-import AST-enforced) + {62.6} ID-83-corrected manifest seed (server.main()seeds{schema_version:1,mappings:[]}before the firstPOST /walk; the retired boot-watch framing was NOT implemented) both DONE (Checker PASS_WITH_NOTES;5caf05bb/e3685a3e). Fixed 2 ID-83 stale docs (server.py/stagedocstring dropped thewalk_dir(live=True)watcher claim;cocoindex-write-model.md§6 burn-valve → boot is burn-safe regardless of SOURCE_PATH). ID-61 DECOMPOSED → 8 subtasks (61.1–8; PRE-reingest 61.1 prompt-cache / 61.2 tracked-changes DOCX / 61.4 bl-165 error-class / 61.8a/walkcadence; POST-cutover 61.3/61.5/61.6/61.7; statusimp_deferred; bl-166 struck — closed S309). bl-45 RETIRED (already-shipped — SECDEF→INVOKER batch-5 migration20260507134407applied pre-#106; recon wrongly assumed it unwritten). KH_SMOKE_TEST dead Cloud-Run env path struck fromingest.py(--smoke-testCLI kept;663c7162). New bl-225 =/walknon-JSON-body regression test (Curator, from the {62.6}import jsonlatent-NameError fix). {62.9} (build-ready: trigger +/walkthreading) and {62.10} (blocked on ID-75) remain. - S314 — ID-61 PRE-reingest set DONE ({61.1} prompt-cache passthrough on the 3 extractors [cache-usage
log added — observable on first live run]; {61.2} tracked-changes DOCX regression [no production leak found —
resolver correct]; {61.4} bl-165 fine Pydantic error-class →
pipeline_runs.result.error_detail+ the ID-63.8taxonomyMissessilent-strip FIXED as a rider [route BodySchema was dropping it]; {61.8a}/walkcadence DECIDED = nightly0 2 * * *→ sign-off register authored). ID-62 {62.9} DONE (deploy/onprem/verify/live-verify.sh: driver → bearerPOST /walk→ Vitest go-live tier with a WALK PUMP [Tier-1/2 files self-stage mid-run]; Tier-3 2 live / 6 deferred-with-evidence; Tier-1b 0/3 [incomplete substrates → bl-227]; Inv-29 marker committed; live proof operator-gated). ID-80 fork architecture SHIPPED: {80.2} ratified (OQ-A zero content rows for forms / OQ-B manifest route tag / OQ-C completed+item_failures) → {80.6} route tag, {80.7} branch extraction, {80.8} the fork (forms skip Markdown+LLM entirely), {80.9} per-item isolation (bl-224 cascade inverted;itemFailuresin the run record), {80.10} 8-row test sweep — all Checker-PASS; {80.11} runbook note in flight; {80.12} versioning investigation done (option (b)superseded_bypointers; 10 decision points PENDING Liam). ID-75 {75.2} PAUSED — Liam reframe: what shouldcontent_itemsMEAN post-pivot (client-canonical knowledge vs external-source material; cross-activity availability for the item-06 tooling surface) — options paper atdocs/research/s314-id75-reframe-options.md(5 options); D1/D2 NOT ratified. Curator: bl-226 (worktree tooling gap), bl-227 (9 live-tier test substrates), bl-228 (ontology doc drift). - S316 — Liam decision queue LANDED: {80.12} versioning RATIFIED option (b) (pointer columns
superseded_by/superseded_at/superseded_reasonoutsideFORM_TEMPLATES_SCHEMA; currency derived; linear chains; hidden-by-default +include_superseded; heuristic v1.1 suggest-only; no auto catalogue effect; family = Path-C catalogue [mechanism 3]; operator new-file contract ratified + ID-56.12 cross-ref; implementation = NEW v1.1 Task — deferral V11-11/V11-12; investigation doc §11). ID-75 reframe DECIDED O4 (reference layer + explicit adoption/derivation; D4 client-adopted knowledge; client subjects get the one-canonical-record practice, external gets one reference per URL; two retrieval surfaces; external global/ workspace-less + extensible beyond URL/RSS; decision records314-id75-reframe-options.md§7) → {75.2} PRODUCT RESUMED under O4. {52.22} hold RELEASED (sentinel collision structurally impossible under (b); design doc §8 re-review note; executor dispatchable). Execution same session: {52.22} DONE (UPSERT on the natural key + ‘v1’ sentinel; ID-52 all 22 subtasks done — end-of-task passes pending); {75.2} PRODUCT authored + Checker PASS_WITH_NOTES (nit fixed) + OQ-75-1..4 ratified, OQ-75-5 items 1+3 (item 2 → TECH with the pre-live alignment steer); SPINE S1 re-smoke run TWICE — round 1 FAILED and surfaced three real defects (D1 stage-5 cross-op collision; D2 forms memo-hit data loss; D3 tally gap = deployment skew), fix wave {80.13}/{80.14} shipped-checked-merged + image rebuilt + round 2 PASS 4/4 (two-walk protocol; memo-hit rows survive); {80.15} deferred (tally re-verify at align); {62.11} opened (live-verify.sh unrunnable as shipped: buildpack python3 PATH + fixtures-not-in-image). - S318 — ID-75 LANDING PATH CODE-COMPLETE in one session: {75.3} TECH ratified (reference_items M1
- two-step RPC M2 + WP-A..G; OQ-T1 CV-13 re-homing / OQ-T2 poller nudge + hourly fallback / OQ-T3 ingestion_source all ratified) + {75.4} PLAN (11 subtasks) + Waves 1-4 shipped-checked-merged: {75.5} M1 staging · {75.6} M2 RPCs (REVOKE-FROM-PUBLIC discovery → bl-231) · {75.7} parity modules · {75.8} url_source (memo-over-frozen-dataclass verified on real engine) · {75.9} adapters (epoch memo + localfs HTML retired) · {75.10} ingest_url (8-step) · {75.11} app_main wiring · {75.14} ontology register entry. Also: {56.18} NO-GO ratified (no AST metadata in cocoindex 1.0.3; keep-nullable stands) · {62.11} live-verify defects fixed · {62.12} opened. ingest_url mounted but undeployed at session end.
- S319 — THE ALIGN LANDED + ID-75 LIVE-PROVEN: main/staging FF’d, 4 deploy surfaces rolled; three
Tasks closed: ID-52 (form-extraction, 23/23), ID-80 (Path-B fork, with {80.15}/{80.16} riding the
align), ID-84 (post-align CI restoration — opened and closed same session). {62.10} O4 landing-set
proof GREEN on B1: DRIVER_EXIT=0 (seed → walk → sd+ri landed → Inv-9 round-trip → idempotency walk) +
Vitest live suite 9/9 + §5 SQL set green, two evidence pairs. Live discoveries fixed same session:
{75.16} engine consumption contract (watch() must update_all-then-mark_ready) + {75.17} backlink
deferred-flush race (FK-tolerant, converge-by-walk-2) + pullmd static-bearer bootstrap
(
PULLMD_AUTH_TOKEN) + driver/s/:idheader contract. {62.12} + {75.12} (cadence ops) done. {75.13} gate OPENED. Curator: bl-232..238 + bl-223 priority raised (gates nudge delivery). - S321 — ALIGN ×2 (
cad10004+d9b86aeemini-align) + ID-62 CLOSED (end-of-task passes complete; bl-227 re-homed as standalone backlog follow-on) + ID-86 opened-and-closed (bl-236 in-job change detection — live-proven on the align push: 1,500+-file compare,relevant=true, no silent skip) + ID-87 opened-and-closed (advisors security review: 27 findings dispositioned; REVOKE migration20260607121924closed the PUBLIC-inheritance EXECUTE exposure ongrant_standard_public_table_access/rls_auto_enable, verifiedfalse×6 on staging AND prod; baseline 29 records green-by-construction) + {75.18} persistence PROVEN through a full Coolify recreate + {75.15} ALL scope verified live (ID-75 now 18/18 — Task close awaits end-of-task passes) + staging deploy leg GREEN for the first time since S309 (bl-248:COOLIFY_BASE_URLsecret value was the defect) + S319 burn root-caused (align-CI integration jobs — Sonnet 4.6 + Haiku 4.5 — NOT memo re-burn; hourly walks 4–5 s, zero LLM; bl-239 evidence, bl-246 opened). - S331 — LANE-A + LANE-B canonical track LANDED ON STAGING (prod-push Liam-gated):
{64.14}+{64.16} bid→form rename COMPLETE (tables +
search_for_bid_response+ allget_bid_*→get_form_*RPCs; staging-applied, Checker-verified; {64.14} REVOKE re-verified —snapshot_form_response_historyhas no PUBLIC EXECUTE) · ID-58 citations polymorphic REPLACE COMPLETE ({58.5}–{58.12}: polymorphiccitationstable [cite-target enum + one-of CHECK + per-kind partial-unique indexes + RLS + REVOKE-anon] + native-Anthropic span cols +update_citation_count()trigger + 4 win-rate RPCs re-pointed + draft-stream per-CitationEntry cardinality +cite_contentargbid_response_id→form_response_id+ GDPR-export key rename + DROP content_citations; staging-applied, 14/14 live-staging checks PASS) · ID-59 per-UC write-back CORE COMPLETE ({59.5}–{59.13}:edit_intent/arbitration_inputsstorage + purearbitrate()/coerceIntent()module + items-route + UC6 Q&A-route stamps + file-first write-back adapter with compensating restore + source-less guard [bl-266] + UC3 sweep + whole-sweep rollback + minimal user-edit Diff-UI; {59.14} UC5 promotion UNBLOCKED-deferred, {59.15} UC8 still GATED) · ID-101 specs authored ({101.2} PRODUCT 16 invariants + {101.3} TECH 7 PCs — cocoindex entity-relationship + holder-rule extraction PARITY, a C1 pre-re-ingest gate for ID-45; {101.4} PLAN deferred to impl; key risk surfaced: the TS + Python canonicalisers DIVERGE today — must be built into agreement before re-ingest, not merely verified). All this session’s DDL is STAGING-ONLY — prod-push handoff (in order):20260609185728({64.16}) →20260609192337({58.5}) →20260609195444({59.5}) →20260609201651({58.11} DROP); breaking app↔DB contract → the TS deploy must land WITH the DDL. - S336–S341 — S0a prod cutover COMPLETE (S336): 7 canonical-track migs on prod WITH the TS deploy; main
FF’d; parity restored; first full-CI-on-main surfaced bl-285 (→ ID-105, fixed) + bl-286 (C1/C2 → {59.18}).
S337–S340 (subo wave + reconciliation): ID-101 impl cherry-picked ({101.5}–{101.8} done); ID-102 string-id
flag-day + ID-90 server-ledger DONE and operational; ID-103/ID-105 done; clash-free ledger-write protocol
encoded after a 3-way backlog-id collision. S341 (this refresh): ID-93 decision queue fully dispositioned
(OQ-64-2/7/9 closed; bl-106 + ID-57 spec-slice are the residuals); historic-doc review distilled into
historic-reingest-doc-review.md; bl-273/274 promoted to {59.16}/{59.17}; bl-286-C1/C2 + bl-282 fixes dispatched ({59.18}/{92.24}). - S348 — canonical-pipeline SPEC FAN-OUT (5 cmux sub-orchestrators): ID-57/45/46/109/110 specs
authored + Checker-gated + Liam-ratified (19 OQs); docs-site
cv13pushed. ID-46 scope COLLAPSED (core already deleted under ID-68.23). ID-108 platform tail DONE. 3 greenlit build items held for go:{57.5}G6 landing ·{110.2}/{109.2}PRODUCT · ID-46{46.5}–{46.10}deletions. - S349 — INTERIM BASELINE · canonical→main LANDED: PR #80 admin-override merged (96 commits
S337–S348 → main
659829241+ prod deploy; only required check on main =identity-guard, gated on id-68 de-ID). docs-sitecv13merged→main (branch deleted). Canonical-introduced CI reds FIXED: lint (require→import), knip (dead-orphan sweep — baseline restored), Supabase types parity ({95.11}content_propagation_versionregen). IP leak removed (main_session_output.mdtranscript; full history purge stays id-68.10). Workflow fixes:imp_deferred→deferred(id-46 TECH), cmux per-SIDfinal_report(SKILL.md), sandbox github-host allowlist. id68-p23 worktree+branch removed (superseded); id-68 status_note refreshed; 19 OQs verified persisted in ledger. bl-106 = OPEN (read-sideingestion_source8→9 canonical-list ratification, OQ-45-1, Liam — NOT closed by 107.3, which narrowed the write-side enum for security). Overridden reds (gated/pre-existing): identity-guard (id-68 de-ID), E2E (bl-240), eval l3/l4 (bl-242→id-71), Quality-precheck pytesttest_lifespan_only_boot(FLAKY real-engine → de-flake backlog). - S-canonical-baseline (15/06/2026) — SOLID BASELINE + spec/build fan-out. Canonical CI green again after
the {59.25} type-only build fix (
717a4b201). ID-101 {101.9} parity CLOSED proven-artifact (S348) — no longer an ID-45 gate. ID-57 done ({57.6}/{57.7} RPCs prod-promoted). ID-59 {59.22}→{59.25} done (corpus-promotion loop + CAS + embed-decouple/self-heal + active-retirement + admin/editor HTTP route) — the S359 cutover blocker is cleared. id71-id104 FF’ing canonical (ID-71 Wave-1 surface 58→42 + bid→forms rename on canonical2f169545b; ID-104 {104.5} contract = the ID-71 W2/3 unblock + {104.6}/{104.7}/{104.8} — the id104 eval-engine migration20260615170612lands + needs type-regen on the FF/merge; W2/3 hard-gated on ID-104 build). ID-95 closed-out (only {95.8} prod-redeploy confirm + cutover remain). ID-42 closed → ID-112 (worker-side HTML/URL cutover). ID-113 / ID-114 spec chains advancing ({113.3}/{114.3} TECH authored, awaiting Liam ratify; neither flip-blocking). ID-45.5/45.6 cutover-wiring subtasks added (promoteCorpusExtractions auto-invocation host; alternate_question_phrasings source via ID-94.1). - S371–S377 — SQUASH · ID-68 FLIP · v1.0.0 CUT (these supersede the forward-looking claims in the older
§0 bullets above): S371 native migration squash (143 migs → single baseline
20260617130000) — this greened identity-guard (red→green) and absorbed the previously-”unapplied” {104.6}/{71.13} migrations, dissolving the id71-id104 FF db-push/type-regen debt; ID-104 DONE → ID-71 Waves 2/3 unblocked. S372–S373 the ID-68 history purge was EXECUTED via repo delete-recreate intoai-solution-hub/canonical(not force-push). S374–S375 flip readiness shipped: repo is now PUBLIC;knowledge-hub→canonicalrename complete; client project-ref scrub landed (refs runtime-only); the Platform DB stood up as the DEV/CI target (seeded client-clean, auth triggers installed, schema_migrations ledger repaired on Platform + client-prod + client-staging). S377 v1.0.0 CUT (tagv1.0.0@cb3c5919+ branchrelease/v1.0.0; ghcr imagev1.0.0aliased fromsha-cb3c5919; AGPL LICENSE + THIRD-PARTY-NOTICES; release crib +runbooks/per-client-release-pins.md); ID-113 DONE. - S378 — pre-reingest hardening + Lane B/spec wave: ID-116 DONE (tryQuery refactor + 8 RLS initplan-wraps +
11 FK indexes; advisors
auth_rls_initplan8→0 /unindexed_foreign_keys11→0; migrations applied to Platform). ID-59 {59.19} corpus-promotion route-i flipped DONE (verify-done-first: {59.21}–{59.25} already shipped + ancestor of main). ID-71.16 ledger/spec amend (file-backed create viastageAndWalk; OQ-71.16-1 ratified). ID-111 reference-UI spec chain PRODUCT+TECH+PLAN complete — {111.5}–{111.11} added, impl deferred (Liam). {59.15} investigated → DEFER (Spike#10 + UC8 ratification pending). New infra backlog BL-342/343/344/345. Session died at an API socket failure with the ID-112 worker mid-flight (commits made, not yet merged). - S379 — ID-112 cutover wave LANDED + ledger reconciliation: recovered the S378 subo-112 worktree (8 unmerged
commits {112.5}–{112.12}), cherry-picked to main, fixed a migration-timestamp collision with the parallel 116 wave
(both picked
20260619120000/120100→ renamed the 112 pair to130000/130100), applied both foreground to the Platform DB (CHECK extension +reference_ingestderivation), gate GREEN (tsc + Vitest 13840 + pytest 1337). Task 112 CLOSED (only {112.13} deletion tail deferred). ID-68 Task + subtasks flipped done (ledger lag cleared). - S382 — ID-111 CLOSED + on-prem
/extractPROD incident fixed: recovered the S381 interrupt ({111.10} was on main + Checker-PASS but its ledger flip never ran → reconciled), then closed {111.11} = bl-119 create→read E2E (un-skipped + round-trip; 5/5 green). Task 111 DONE ({5}–{11}); pushed to origin/main. ★The E2E surfaced a silent PROD incident: the ID-112/extractworker cutover was never released to the on-prem pipeline — deployed URL-ingest extraction 503’d (Traefik “no available server”) on staging AND prod (3 stacked gaps: stale deploy-branch compose, unsetEXTRACT_API_TOKEN, pre-/extractimage). Released both envs via Coolify API + git: compose sync tostaging(e1785490) +release/v1.0.0(8b2bdab8); distinctEXTRACT_API_TOKENon Coolify+Vercel both envs;COCOINDEX_IMAGE_TAG→sha-b92aee5e(latest/extract-capable image, no build needed); redeployed both Coolify apps + the prod Vercel app; verified/extract200 (verdict warn) + 401-fail-closed on both FQDNs. Root cause (deploy branches don’t auto-sync from main) → bl-346 (infra: CI parity guard + token runbook).★ P5 = Option C (born-in-DB provenance = typed record-lineage; recorded on {45.2}, feeds ID-45 — lands last). Next track (Liam): ID-59 Q&A-sidecar impl wave ({59.26}–{59.33} decomposed; {59.26} freeze__qa__/= the ID-45 walk gate, dispatch-ready). - S383–S399 — ID-59 Q&A-sidecar wave + ID-120 framing: the {59.26}–{59.32} Q&A-sidecar set landed (FK-less
q_a_pairs.source_document_idcol live on the Platform DB,__qa__/freeze + a 3rd walk branch, shared helpers, corpus+user-direct emit, re-walk mark-stale, round-trip golden fixture; {59.33} DEFERRED on UC8+Spike#10; follow-up bl-350). ID-120 (cross-workspace Q&A dedup) FRAMING CORRECTED (S391): workspace ≠ tenant (1 DB/client = the tenant boundary) — dedup is INTRA-tenant across a client’s workspaces & forms, cross-tenant is never-v1; OQ-120-2a resolved; specs/glossary/ontology/prompt updated and {120.3} TECH unblocked. ID-115/116/117/125 hygiene- DB-hardening tasks closed across this arc.
- S400–S401 — consolidation + CI-green baseline: all open PRs merged, branch reset to a CI-green
main; a clean baseline re-established before the ID-120 code wave. - S402 — ID-120 CODE wave shipped + Platform-pipeline standup promoted: the ID-120 implementation set shipped to
main ({120.5}
q_a_pair_dedup_proposalstable+RLS+migration · {120.6} Python proposer post-pass + pipeline attach · {120.7} approve/reject API routes +mergeDedupPair· {120.8} curator review surface [admin pages + components + query keys]). bl-301 promoted → ID-127 (Platform pipeline standup; theme 3, linked). ID-126 test-audit tier CLOSED. Interim merges (PRs #58–62): ID-70 opaque-Json RPCs → typed RETURNS TABLE (+2 drops) — DONE; jscpd dedup Wave-5 C2 (drafting-loop extraction + bl-361 seed--resetfold); ID-126 DB/prod test-audit tier (S399); QaDedupResolveResult type-drift rebaseline; ID-115 {115.15} grant-guard baseline repair. main →a1986bb6. - S403 (23/06/2026) — ID-120 CODE-COMPLETE + ID-127 PRODUCT/TECH + jscpd/hygiene: {120.9} (PR #68,
800c0a71) theapi.q_a_pair_dedup_proposalssecurity_invoker view + types regen → ID-120 CODE-COMPLETE ({120.5}–{120.9} shipped; Task close pending end-of-task passes) + cleared the inheritedsupabase-types-paritydrift. ID-127 PRODUCT ratified + {127.3} TECH authored (NEXT was {127.4} PLAN). jscpd Wave-5/6 +intelligence-guide-generatorrename + test-hygiene merged. No Spine movement. - S404→S419 — id-127 standup BUILT + PROVEN (the LANE PLATFORM arc); ID-130 opened + driven into impl:
two-server greenfield split (S413/S414) — old IONOS box cancelled, 2 hardened VPS (Server A
88.208.255.178client · Server B87.106.72.59platform + the single Coolify 4.1.2 control-plane); client + both platform cocoindex apps stood up; ID-129 PullMD full decommission DONE. {127.4} PLAN→impl wave (S415→) built 127.1–3/5–16 (composes, seed scripts, parity guards, runbooks, deploy parameterisation). Coolify env-topology fixed (S417/S418) — staging apps moved to dedicatedstagingenvs (NEW UUIDs), realEXTRACT_API_TOKENwired platform prod+staging, prodpipeline_runswebhook unblocked. S419: E2E confirmation walk PROVEN both envs (POST /walk → 202 →pipeline_runs; prod made genuinely-new content, idempotency + backlink + isolation proven → closed 127.11+127.13); LMDB backup defect fixed (sidecar pruned off both hosts byforce_docker_cleanup→ silent no-op nightlies; rebuilt + self-heal guard, PR #89524bb4f6); types regen from Platform DB (78ffe6b0, folds in the id-130 form-domain schema). id-127 now 15/16 done — only the id-134 promotion-confidence gate (the reframed/CANCELLED {127.4} corpus work — DR-014) + the deferred v1.1.0 re-pin remain. ID-130 (procurement/form domain-model): spec chain RESEARCH/PRODUCT/TECH ratified (S411/S416) → in active impl ({130.5}/{130.6} done, {130.7} in_progress). - Next critical-path session — finish id-127 (cut v1.1.0 + re-pin client-prod off the interim
sha-b92aee5eto the release tag; the id-134 promotion-confidence corpus [reframed {127.4}]), let ID-130 land its 12-step staging-first migration (the timing gate before ID-45 GO), then drive the cutover spine (below). The squash, ID-68 flip/purge, v1.0.0 cut, ID-101 parity (S0b), ID-64 {64.7}/{64.8}, and ID-56→{56.12} are all DONE — the cutover is no longer gated on any of them. The remaining gates before ID-45 are exactly: (a) {45.3} TECH + {45.4} PLAN (cutover mechanism — still UNWRITTEN), (b) bl-106 / OQ-45-1 (canonicalingestion_sourcelist) — NB the ID-45.1 ledger journal records this RECONCILED/ratified as cv13 at S377, but the standing forward-map framing still lists it as a Liam residual; confirm before GO, (c) explicit Liam GO, and (d) ID-130’s migration landed. Then spec + execute ID-45 (T7) full-corpus re-ingest into a fresh CLIENT Supabase target → cut over as the client (Phew) handover DB. (S0a ✅ S336 · S0b ✅ S348 · S1 ✅ S319.)
V1 completion = a clean full-corpus re-ingest (ID-45/T7) runs end-to-end on the on-prem (client) cocoindex
stack into a fresh CLIENT Supabase target; every stage writes correctly; schema is migration-complete; the
result is cut over as the client (Phew) handover DB (NOT the Platform DB — see the Deploy topology block
above). ID-46/T14 (retire the OLD scripts/kb_pipeline/) is the final cleanup. Single tenant (Phew) for V1.
Current pipeline truth: Path-A content write = GREEN, live-proven. Path-B blank-FORM write =
DONE (ID-80 closed S319) — forms route via the manifest route tag down a dedicated branch (zero
content rows, zero LLM calls, per-item failure isolation); smoke gate satisfied S316, tally skew resolved
at the align. URL/reference path (ID-75) = ✅ DONE — Task 75 CLOSED (S323) —
reference_items + two-step RPCs + FeedUrlSource + ingest_url, live-proven on B1 since S319.
bl-239 file-branch memo re-burn proven SAFE. On-prem host (ID-66) = DONE.
Schema = migration-complete on staging AND prod, PARITY RESTORED (S336): the canonical-track set —
20260609185728 (bid→form tables/RPCs incl. {64.16} get_form_*), 20260609192337 (citations polymorphic
REPLACE + span cols), 20260609195444 (edit_intent/arbitration_inputs storage), 20260609201651 (DROP
content_citations) + the {64.17} G5 pair (20260609225144/20260609230521) — landed on prod WITH the TS
deploy in the S336 cutover window. Advisor baseline green-by-construction (ID-87, S321).
Pre-re-ingest parity GAP — CLOSED: ID-101 is DONE (S348) — {101.9} adjudicated proven-artifact (Liam):
post-{101.10} (point-of-use client entity_aliases generation, fail-closed at pipeline deploy) coco holder=self
matches legacy + prod-doc ground truth; residual = a benign predicate-label synonym (holds/complies_with, same
endpoints/holder); the pre-registered symmetric like-for-like gate is blocked by a harness gap (legacy --path is a
persisted-row reader vs the destructive --mode=run) → bl-300. ID-101 is no longer an ID-45 gate — relationship
triples + holder metadata are captured and proven at parity on the cocoindex path.
Cocoindex bytes/Docling/embedding/max-tokens/Stage-5-stability bugs = all fixed (ID-72/74/78/79/81).
CI (S377): canonical main is fully GREEN. The S371 migration squash (143 migs → single baseline
20260617130000) deleted the migration that named the superseded client hook, so identity-guard is now GREEN
(red→green first time in many sessions); the ID-68 flip/purge is DONE. The old “id71-id104 FF carries two
AUTHORED-but-UNAPPLIED migrations” debt is RESOLVED — those migrations were absorbed into the squash baseline.
Remaining push-CI reds (gated/pre-existing, none required): bl-240 E2E seed, bl-242 eval TE-02, Integration
(real-API), + a FLAKY pytest test_lifespan_only_boot (real cocoindex-engine/threading — de-flake backlog).
1. The lane board
Section titled “1. The lane board”Six lanes. Only the Spine gates cutover. Everything else is parallel, after-cutover, or hygiene. Mode tags: FOCUS = Liam + me direct (live-ops/decisions) · MONITOR = cmux sub-orchestrators end-to-end.
SPINE — re-ingest critical path · FOCUS · the only cutover gate
Section titled “SPINE — re-ingest critical path · FOCUS · the only cutover gate”| # | Item | Status | Next action |
|---|---|---|---|
| S0a | Canonical-track prod DDL push + TS deploy ({64.16} rename + ID-58 citations + ID-59 edit_intent + {64.17} folds) | ✅ DONE (S336) — the 7-mig push landed on prod WITH the TS deploy; main FF’d + deployed; parity restored | — none. (First full-CI-on-main fallout tracked: bl-285→ID-105 fixed; bl-286 C1/C2→{59.18}) |
| S0b | ID-101 cocoindex relationship + holder-rule extraction parity (C1 pre-re-ingest gate) | ✅ DONE — Task 101 CLOSED (S348). {101.9} adjudicated proven-artifact (Liam): after {101.10} (point-of-use client entity_aliases generation at pipeline deploy, fail-closed) coco holder=self matches legacy + prod-doc ground truth; residual = a benign predicate-label synonym (holds vs complies_with, same endpoints/holder). The S340 holder defect (coco=supplier/null) was root-caused to the canonicaliser shipping baseline aliases only, never loading DB entity_aliases — FIXED. | — none. The symmetric like-for-like gate needs a --legacy-fresh harness leg (bl-300, backlog); the internal-function holder coverage gap (7e511dbc class) re-homed to ID-109. No longer an ID-45 gate. |
| S1 | ID-80 Path-B form-write productionise + live-smoke (form_templates/form_template_fields) | ✅ DONE — Task 80 CLOSED (S319). Smoke gate satisfied S316 (re-smoke PASS 4/4, two-walk protocol; {80.13} memo round-trip + {80.14} stage-5 cross-op collision fixed live); {80.15} tally skew + {80.16} rider resolved at the S319 align; end-of-task passes complete. {80.12} RATIFIED (option (b); impl → v1.1 V11-11/12) | — none. Versioning implementation is v1.1 (V11-11/12) |
| S2 | Re-ingest target (OQ-64-8) — the CLIENT DB (Phew), NOT Platform | the client Coolify cocoindex stack EXISTS (runs under the aisolutionhub domain today; domain flips at handover) | Wire a fresh Supabase Preview branch off the client DB into the Coolify cocoindex env at re-ingest time (Task 82 proved the git-integrated preview-branch path replays guarded repo migrations cleanly) |
| S3 | {64.7} retention export/re-link | ✅ DONE (ID-64 CLOSED S352). OQ-45-1 keep-set = v2 source-driven (the keep-set is the source corpus, NOT gated on the full ingestion_source enum — that list ratification is the pending Liam residual below); retention runbook authored (retention-export-relink-plan.md) — keep-set = source corpus for the cocoindex walk (RE-WALK qa_import 440 / url_import 55 / python_markdown 23; MIGRATE-CARRY in-KH manual ~23; DROP-58); content_items + q_a_extractions truncated pre-walk (INV-6), regenerated fresh; clears ID-45 INV-7 | — none. (bl-106 / OQ-45-1 canonical ingestion_source ratification remains a Liam residual — read-side Zod narrowing, pending next session, see the s361 packet; does not block the runbook, keep-set is source-driven) |
| S4 | {64.8} readiness surface + types regen + cutover runbook | ✅ DONE (ID-64 CLOSED S352) — readiness surface authored (reingest-readiness-surface.md, 28-gate go/no-go board) + cutover-mechanism runbook (reingest-cutover-runbook.md, hybrid-c: schema via migration-replay + data via pg_dump --data-only); gates: G1 ✅ · G2 dropped · G3 ✅ · G4 ✅ · G5 ✅ (bl-106 ratification pending — Liam, s361 packet) · G6 ID-58/59 ✅ prod + ID-57 ✅ now prod-promoted | — none. The ID-56→{56.12} chunking-UI folder-drop wrapper (the last board RED) is now DONE. Board residual: bl-106/OQ-45-1 canonical ingestion_source ratification (Liam, next session — see the s361 packet). types-parity GREEN. The cutover gen types is the clean regen window (Lane C ID-70) |
| S5 | ID-45 (T7) full-corpus re-ingest — into the CLIENT DB (Phew) | in_progress — S0b ({101.9}) gate CLEARED; S3/S4 DONE; UNCHANGED through S419 | The headline run; with S0b + S3/S4 + ID-56/{56.12} all cleared, the open gates are now (a) {45.3} TECH + {45.4} PLAN (cutover mechanism — still UNWRITTEN, not near-ready), (b) bl-106/OQ-45-1 ingestion_source (the ID-45.1 ledger journal records this RECONCILED as cv13 at S377; the standing forward-map prose still lists it a Liam residual — confirm before GO), (c) explicit Liam GO, (d) NEW: ID-130’s 12-step domain-model migration must land first (pre-launch model-cement window). {45.1} RESEARCH + {45.2} PRODUCT done (33 invariants); {45.3} TECH/{45.4} PLAN still deferred. {45.5}/{45.6} cutover-wiring subtasks pending (promoteCorpusExtractions auto-invocation host — the {59.25} 10s webhook cannot host a full-corpus batch, fn EXPORTED for ID-45 to wire async/service-role; alternate_question_phrasings source via ID-94.1). Deps ID-28 (done) + ID-36/41/69. Spec inputs: quality-gate seed = the first-arc 8-dimension must-pass profile (historic-reingest-doc-review.md §3) |
| ops | ID-66 on-prem host (this is the CLIENT pipeline — domain flips at handover) | ✅ DONE — all residuals ARMED (S312) | {66.14} LMDB→S3 backup ARMED (cold-snapshot pivot — mdb_copy can’t open cocoindex’s LMDB; host cron 30 3, bucket onprem-backups, restore-verified) · {66.15} datapath monitor live (Vercel cron, S311) · OQ-1 /walk task created disabled both envs · COCOINDEX_SOURCE_PATH set both envs · bl-221→ID-83 done. Nothing operator-pending. NB: Platform has no ingestion pipeline of its own — that is ID-127 (in_progress, ex-bl-301), separate from this client stack. |
LANE P — parallel pre-cutover (in-flight tasks; land before launch; do NOT block re-ingest)
Section titled “LANE P — parallel pre-cutover (in-flight tasks; land before launch; do NOT block re-ingest)”| Task | What remains | Status | Mode |
|---|---|---|---|
| ID-62 fixture-staging live-test harness | ✅ CLOSED (S321) — end-of-task passes complete: simplification 647da484 (2 cleanups) + quality-review PASS_WITH_NOTES with both nits fixed 90614d0c (named-400 content-type guard + explicit client_max_size). bl-227 re-homed: stays ready as a standalone follow-on (Curator S321) | done | — |
| ID-75 wire PullMD into cocoindex (remote URL/feed) | ✅ CLOSED (S323) — end-of-task passes complete: gate-1 simplification NO-OP PASS (20-commit surface clean across all four hunt areas); gate-2 quality-review PASS_WITH_NOTES (20/20 per-commit PASS; CRON_SECRET guard nit fixed 13c9a6fb; fyi findings curated bl-250/bl-251). Live-proven on B1 since S319; {75.15} prod scope verified S321; {75.18} persistence proven through full Coolify recreate | done | — |
| ID-9 docs-site + docubot | ✅ DONE — docs-site live (the private-docs bridge is the working corpus home) | done | — |
| ID-68 repo private→public + IP separation | ✅ DONE (S372–S375) — migration squash landed (143→1 baseline 20260617130000); history purge EXECUTED via repo delete-recreate into ai-solution-hub/canonical (S373); repo is PUBLIC; knowledge-hub→canonical rename complete; client project-ref scrub shipped (refs runtime-only via scripts/lib/project-refs.ts + .env.local/PLATFORM_PROJECT_REF). (ID-68 Task + all subtasks flipped done in the ledger S379 — lag cleared.) | done | FOCUS (irreversible) |
| ID-95 per-client Supabase/infra topology + ownership boundary | CLOSED-OUT — {95.1}–{95.7}, {95.9}–{95.16} done (tenant_config table + RLS + prebuild branding fetch + re-seed manifest + PI-18 fan-out worker + deploy runbook to tenant_config model + demo-bootstrap archived); only {95.8} (AC-E3 prod-redeploy confirm) remains, Liam-gated/optional. Task close pending {95.8} + cutover (ID-45/68). | done (close pending) | MONITOR (subo) |
LANE A — pre-re-ingest schema cleanup (window BEFORE S2 Preview-branch wiring — cleanest)
Section titled “LANE A — pre-re-ingest schema cleanup (window BEFORE S2 Preview-branch wiring — cleanest)”ID-93 intent-gap evaluation (S-untracked, 07–08/06/2026) ratified 4 additions — register:
specs/ID-93-pre-reingest-intent-gap/RESEARCH.md(decision queue §6, gates G1–G6 written into{64.8}details). Headline: the whole bid_* surface was at 0 rows on prod → rename window open until UAT/promotion.
| Item | Fold target | What | Re-ingest |
|---|---|---|---|
| bl-189 A+B | → ID-64 {64.12}/{64.13} | ✅ DONE (S348). {64.12} dropped 5 AI-telemetry token cols + rewrote lib/provenance/item-provenance.ts (kept classification_model/embedding_model); {64.13} dropped 4 orphan cols (notes/parent_id/source_bid/source_document) + rewrote ~8 display readers. Migs 20260612101132/20260612102255, staging+prod parity. | pre — done |
| OQ-64-3 RATIFIED | → ID-64 {64.14}+{64.16} | ✅ DONE — ON PROD (S336). bid→form rename: bid_responses/bid_response_history/bid_questions tables + search_for_bid_response RPC + all get_bid_*→get_form_* RPCs ({64.16}) + consumers; Checker-verified; {64.14} REVOKE re-verified. content_citations excluded (ID-58 owns — also DONE, on prod). Migration 20260609185728. | pre — landed inside the window |
| ID-94 (new Task) | standalone, gated G4 in {64.8} | ✅ DONE. Q&A alternate-phrasings capture at ingest (QAFormExtraction + q_a_extractions.alternate_question_phrasings text[]) — ratified capture-at-ingest over post-hoc batch | pre (must be in the run) |
| ID-101 (new Task) | C1 pre-re-ingest gate for ID-45 — also Spine S0b | ✅ DONE — Task 101 CLOSED (S348). {101.9} proven-artifact (see Spine S0b); {101.10} point-of-use entity_aliases generation (fail-closed) landed the fix live. Residual symmetric-gate harness leg → bl-300; internal-function holder gap → ID-109. | pre — gate cleared |
| bl-92/93 port-check | → {64.8} gate G1 | ✅ G1 SATISFIED (08/06) — bl-93 recall guidance ported to ENTITY_MENTION_PROMPT (df4463cd; truncation half already satisfied); bl-92 N/A on the cocoindex path — ID-101 supersedes it as the C1 gate; both backlog items retired | pre — done |
| bl-42 / bl-43 / bl-106 | → Lane-A batch, {64.8} gate G5 | bl-42 + bl-43 ✅ DONE via {64.17} (coercion INSERT-OR-UPDATE + PK rename; migs 20260609225144+20260609230521, on prod S336). bl-106 ESCALATED — no canonical ingestion_source list ratified (8 observed values); pending Liam | pre — bl-106 is the G5 tail |
| bl-74 → {64.15} | → before ID-45 promotion step, {64.8} gate G3 | ✅ DONE. q_a_pair_history snapshot superseded_by + source_workspace_id lineage cols — history append-only; late = lineage lost | pre-promotion |
| ✅ partially closed (S309 bl-224) | The PipelineRunRow/PipelineRunRowSchema in_progress omission is fixed. Any remaining as PipelineRunStatus narrowing cast is an ID-61 fold-in. | hyg (done for the read schema) | |
| bl-169 | → ID-61 (parked) | Re-target the error_class/monitoring note Cloud Run → Coolify ({66.15}/{64.8}) | hyg |
LANE B — parallel feature build (zero second-re-ingest risk — verified; build alongside cutover prep)
Section titled “LANE B — parallel feature build (zero second-re-ingest risk — verified; build alongside cutover prep)”The pipeline writes
q_a_extractions(derived cache), neverq_a_pairs(guardflow.py). ID-57/58/59 are downstream ofq_a_pairs→ they capture nothing at ingestion → building them after re-ingest forces no re-run. S-canonical-baseline update: ID-58 CLOSED, ID-57 DONE (RPCs prod-promoted), ID-59 core + corpus-promotion ({59.5}–{59.13}, {59.16}–{59.25}) ON PROD/canonical. ID-59 tail: {59.14} UC5 done · {59.15} UC8 gated · {59.19} route-i promotion flipped DONE (S378) · {59.20} TECH done · Q&A-sidecar wave {59.26}–{59.32} DONE (S383→) — FK-lessq_a_pairs.source_document_id,__qa__/freeze + 3rd walk branch, corpus+user-direct emit, re-walk mark-stale, golden fixture; {59.33} DEFERRED (UC8+Spike#10).OQ-64-5 RESOLVED 08/06/2026 ({64.8} gate G6): handover DB = structurally complete, based on ratified specs. S336: ID-58’s schema slice (polymorphic
citationsREPLACE + DROPcontent_citations) and ID-59’s edit_intent storage slice APPLIED ON PROD (S0a cutover). S-canonical-baseline: ID-57’s question_match RPCs ({57.6}/{57.7}, the G6 schema slice + WP2) are now PROD-PROMOTED — G6 fully satisfied. ID-60 stays post-cutover (alt mechanism via ID-71). ID-58 owned thecontent_citationsdisposition — DONE.
| Task | What | Status | Fold-ins (consume at spec time) |
|---|---|---|---|
| ID-57/T10 question_matches + retrieval + scoring (1st) | spec chain {57.1}–{57.4} done; {57.5} table (G6 slice) staging+prod; {57.6} writer question_match_recompute + {57.7} reader question_match_search RPCs — PROD-PROMOTED + types regen (was staging-only, now applied to prod this session); B7-hardened (anon EXECUTE revoked) + 20/20 live tests | done ({57.8} ts_rank calib deferred post-T7 corpus) | bl-76 (ts_rank) → {57.8} |
| ID-58/T11 citations polymorphic REPLACE + native-Anthropic spans | Polymorphic citations table (cite-target enum + one-of CHECK + per-kind partial-unique indexes + RLS + REVOKE-anon) + span cols + update_citation_count() trigger + 4 win-rate RPCs re-pointed + draft-stream per-CitationEntry cardinality + cite_content arg rename + DROP content_citations | ✅ DONE — Task 58 CLOSED (12/12); ON PROD (S336) | bl-74, bl-136 |
| ID-59/T9 per-UC write-back + Diff-UI sidecar re-point | Core ({59.5}–{59.13}) on prod S336; {59.14} UC5 promote + {59.16} Q&A history route + {59.17} UC4 citation re-anchor + {59.18} /api/items 500 fix all DONE. Corpus-promotion (route-i) {59.19} PRODUCT + {59.20} TECH + {59.21}–{59.25} BUILT this session: idempotency index + eligibility RPC, promoteCorpusExtractions() loop + atomic CAS, embed-decouple/self-heal, active-retirement pass, admin/editor HTTP route (/api/q-a-pairs/promote-corpus) + INV-23 assertion. {59.25} next build/tsc break fixed type-only (717a4b201). | in_progress (Task open on {59.15}/{59.33} only). {59.19} route-i FLIPPED DONE (S378) — verify-done-first found {59.21}–{59.25} already shipped + ancestor-of-main; {59.19} was the parent acceptance subtask. Q&A-sidecar wave {59.26}–{59.32} DONE (S383→): FK-less source_document_id col (live on Platform DB) + __qa__/ freeze + 3rd walk branch + corpus/user-direct emit + re-walk mark-stale + round-trip golden fixture; follow-up bl-350. Remaining: {59.15} UC8 dedup + {59.33} (GATED on Spike#10 + UC8 ratification + bl-74). ID-45 auto-invocation host for promoteCorpusExtractions ESCALATED → ID-45.5 (the 10s cron webhook cannot host a corpus batch; fn EXPORTED for the cutover) | — |
| ID-120 cross-workspace Q&A dedup (UC8 substrate) | Intra-tenant (1 DB/client = tenant boundary) dedup across a client’s workspaces & forms, cross-tenant never-v1 (framing corrected S391). Substrate = the cocoindex Stage-5 pgvector pass repointed to q_a_pairs as a walk-time PROPOSER (post-pass BESIDE cocoindex), merge fires only on curator approval. {120.5} q_a_pair_dedup_proposals table+RLS+migration · {120.6} Python proposer + pipeline attach · {120.7} approve/reject API + mergeDedupPair · {120.8} curator review UI · {120.9} api.q_a_pair_dedup_proposals security_invoker view + types regen (PR #68, cfc4fff3 — also cleared the inherited supabase-types-parity drift on q_a_pairs.source_document_id from ID-59.27) | ✅ CODE-COMPLETE (S402–S403); all {120.5}–{120.9} shipped to main. Ledger Task still in_progress ({120.9} flip + parent close handled by the orchestrator on main) | — |
| ID-130 procurement / form domain-model + IA | Resolved the form-vs-workspace altitude via the C/Hybrid model (S411/S416). Built + live on all four DBs: form_templates engagement columns + per-form workflow_state, form_outcome_types CV (counts_toward_win_rate), win-rate engine rewrite, form_type picker, forms POST/PATCH + advisory-lock mint, Q&A promotion lineage. | ✅ DONE — Task 130 CLOSED (S458, 30/31; {130.18} cancelled → bl-435). The pre-ID-45 migration gate is SATISFIED. ⚠️ Its workspace-umbrella half is SUPERSEDED (DR-038 S452 + owner ruling 2026-07-11) — spec files bannered S462; per-form machinery is the keeper. Successor: ID-145. | ID-61 Unit F (copy half re-opened under ID-145) |
| ID-145 procurement form-first re-architecture ⚠️ pre-ID-45-GO gate (DDL) | Retire the workspace umbrella from procurement UX: item = ONE form instance. Keep id-130 per-form machinery; retire procurement_workspaces roll-up + umbrella routes + workspace-keyed question reads (bl-435, now must); build the missing pieces (DR-014 manual form-upload UX — never built, id-136 was pipeline-retirement only; form-first create path — POST currently mints formless workspaces, the “Couldn’t load the drafting session” root cause; dashboard re-wire; question_matches callers — zero production callers; Unit F copy sweep; MCP re-key/rename). | OPENED S462 (must, pending). {145.1} RESEARCH done (S462 dossier: specs/id-145-procurement-form-first/RESEARCH.md — keeper/retire/missing inventories, error root-causes, 12-item owner OQ register gating PRODUCT). {145.2} PRODUCT → {145.3} TECH → {145.4} PLAN on the /procurement worktree track. DDL batch lands BEFORE ID-45 GO. | bl-435 (must), bl-370/bl-349/bl-420, UNIT-F-SCOPE-MAP §1(a)/(g) |
LANE C — after-cutover (need a real corpus, or the post-cutover types-regen)
Section titled “LANE C — after-cutover (need a real corpus, or the post-cutover types-regen)”| Item | What | Gate |
|---|---|---|
| ID-60/T12 Mempalace KG | needs one clean re-ingest observation window (ID-53 dep already done) | after cutover; consumes bl-74, bl-127 |
| ID-70 opaque-Json RPC (bl-27, Tier 1+2, theme 8) | 5 RPCs migrated opaque-Json → typed RETURNS TABLE (+2 drops); none on the re-ingest read-path | ✅ DONE (S402, PRs #58/#60) — landed ahead of the cutover gen types window (the “wait for {64.8} regen” gate was advisory, not blocking; types-parity held). dep ["64"] |
| {52.22} (bl-204) Path-C catalogue idempotency | ✅ DONE (S316) — UPSERT on the natural key + ‘v1’ sentinel + resolveRequirementEmbedding; ID-52 CLOSED (S319), all 23 subtasks + end-of-task passes | shipped |
| bl-165 pydantic error-class persistence | Option B fold-in for ID-61 (Option-D PII redaction already LANDED) | → ID-61; low-pri observability |
LANE D — final cleanup (LAST — hard-gated on T7 re-ingest complete + stable)
Section titled “LANE D — final cleanup (LAST — hard-gated on T7 re-ingest complete + stable)”| Task | Scope | Note |
|---|---|---|
| ID-46/T14 cocoindex absorption cleanup | retire scripts/kb_pipeline/ (core ~5.8k LOC already gone under ID-68.23) + lib/extraction/ + procurement-library-ingest + dedup + batch-reclassify CLI scripts + OLD markdown-import path | spec chain {46.1}–{46.3} done; deletions {46.5}–{46.8} + {46.10} + {46.11} (markdown_batch ~11k LOC) DONE (S351, ff-merged). Remaining: {46.9} (retire lib/extraction/{og-metadata,extraction-result}.ts) now couples to {112.13} (ID-112’s deletion tail; ID-112’s cutover wave SHIPPED S379, {112.13} deferred/gated on ID-45), NOT ID-42; {46.11}→{56.12} fold pending |
| ID-112 (new Task, ex-ID-42) | Worker-side HTML/URL extraction cutover — in-house Trafilatura cleaner (extract.py + POST /extract), worker HTML branch in-process, reference_ingest derives extraction_method server-side; then ({112.13}, deferred) retire Vercel Surface A (content-extractor.ts tiers + feed-poller Firecrawl) + Surface B (extraction/url.ts HTML branch + html.ts) + deps (firecrawl/readability/jsdom; verify unpdf) | ✅ CUTOVER WAVE DONE — Task 112 CLOSED (S379). Specs {112.1}–{112.4} + impl {112.5}–{112.12} shipped to main; both migrations (CHECK extension 130000 + reference_ingest derivation 130100) applied foreground to the Platform DB; gate GREEN (tsc + Vitest 13840 + pytest 1337). Only {112.13} DELETION set remains, deferred/GATED on ID-45 (drop the dead extractors only once re-ingest proves the in-house path on a stable corpus). Substrate from url_source.py (ID-75 WP-C). Cross-links ID-110/bl-298 + ID-45 |
AI-tooling rationalisation — ID-71 + eval engine ID-104 (theme 6/4) · parallel pre-launch · not a re-ingest gate
Section titled “AI-tooling rationalisation — ID-71 + eval engine ID-104 (theme 6/4) · parallel pre-launch · not a re-ingest gate”Outcome-first redesign of the full AI-consumption layer (58 MCP tools + resources + prompts + apps + commands + skills),
verdicts attached to OUTCOMES not tool names. Spec chain {71.1}→{71.4} COMPLETE + Liam-ratified (S354/S356); 23 impl
Subtasks {71.6}–{71.28}. Wave-1 code COMPLETE on canonical (2f169545b): surface 58→42 (ONE find + get/assign/
find_duplicates one-or-many + where_are_we_exposed five-layer + whats_in_my_queue faceted queue + ontology-grounding)
and the bid→forms AI-surface rename (code symbols + MCP literals + plugin bundle + queue form_draft_all + fixtures/evals).
{71.15} M-DOCS client-doc refresh pending (next session, docs-site/docubot lane); Waves 2/3 now UNBLOCKED
(the ID-104 build gate has cleared — ID-104 is DONE) and not yet built;
{71.16} M-CREATE create-into-store leg coupled to ID-59. Absorbed bl-186/bl-26 (outputSchema).
ID-104 (eval engine, theme 4) — DONE. The bottom-up “evaluate everything” substrate that was HARD-UPSTREAM of
ID-71 Waves 2/3. Spec chain {104.1}→{104.4} ratified; {104.5} lib/eval/contract.ts (AgentEvalContract) shipped;
{104.6} eval-engine migration (4 tables + outcome_signal enum), registry/recordAiCall/baseline-store/graduation, and
{104.7}/{104.8} severity→exit + variance regression all landed. The {104.6} migration was absorbed into the S371
squash baseline — no separate db-push/type-regen FF debt remains. With ID-104 done, ID-71 Waves 2/3 are unblocked.
LANE H — hygiene, closeable anytime (low-risk)
Section titled “LANE H — hygiene, closeable anytime (low-risk)”Large ready/parked backlog of test/lint/runbook hygiene (see product-backlog.json). Non-gating.
S383→S403 closures (all DONE, none on the Spine): ID-115 (Data API schema isolation — public unexposed
→ api exposed PostgREST isolation; {115.15} grant-guard baseline repair, PR #62) · ID-117 (unified
document/revision diff surface over the extend-ui viewers) · ID-125 (ESLint 10 toolchain fix unblocking
lint + eslint-rules CI) · ID-126 (test-audit DB/prod deferred tier, S399 WS1–WS4) · the jscpd dedup waves
(roadmap 13: Wave-5 C2/C3 + Wave-6 S0 intelligence-guide-generator rename) + bl-356/bl-75 test-hygiene.
S-canonical-baseline additions: bl-323/bl-324 (q-a-pairs follow-ups, kept as backlog) · bl-325 (citations
stale flag — its migration is to be TIMED with the ID-45 re-ingest zero-row window; cutover-coordinated, see §2) ·
bl-326 (parked) · bl-327 (narrowed bl-282 ledger-server leg-2 port; leg-1 superseded by bl-296) · bl-300
(--legacy-fresh eval harness leg for the ID-101 symmetric parity gate).
bl-221 → ID-83 DONE (S311) — cocoindex SOURCE_PATH boot-walk burn-valve retired: lifespan-only boot +
bearer-gated POST /walk (single-flight, one-shot update_blocking(live=False)); 5 subtasks Checker-PASS,
cherry-picked to canonical. OQ-1 scheduled task CREATED (disabled) both envs S312 — enable (pick cadence / event-driven) at cutover.
bl-223 (ready, priority RAISED S319) — DNS/SSL HTTPS ingress for the on-prem cocoindex host:
now also gates {75.13}/{75.15} walk-nudge delivery (worker port 8080 ufw-closed; nudges undeliverable
until it lands — hourly fallback bounds latency to 1h). Operator task, not a cutover gate.
LANE PLATFORM — our own (kh.aisolutionhub.co.uk) ingestion + dev/CI · parallel · NOT a client v1 gate
Section titled “LANE PLATFORM — our own (kh.aisolutionhub.co.uk) ingestion + dev/CI · parallel · NOT a client v1 gate”Two on-prem cocoindex stacks now run on a two-server split (S413/S414): the client’s pipeline on Server A
88.208.255.178, and Platform’s own pipeline on Server B87.106.72.59(one Coolify control-plane on B manages both). Platform (our dev/CI/showcase instance, tracksmain) now has its own ingestion path — id-127 is 15/16 done, E2E-proven both envs (S419); only the id-134 promotion-confidence gate (the reframed {127.4} synthetic-corpus work — CANCELLED in the ledger, DR-014) + the deferred v1.1.0 re-pin remain.
| Item | What | Status |
|---|---|---|
| ID-127 (was bl-301) Platform pipeline standup | Platform-owned cocoindex deployment feeding the Platform DB. AMENDED model (S408+, BUILT): prod + staging on a two-server split — Server A 88.208.255.178 = client pipeline · Server B 87.106.72.59 = platform pipeline + the single Coolify 4.1.2 control-plane managing both; ca-named composes; PullMD retired (cocoindex /extract, ID-129 DONE); promote via the shared kh-cocoindex-pipeline GHCR image (ID-113 substrate). Origin ID-108 (S348); promoted from bl-301 (S402); AMENDMENT ratified S408. | 15/16 done (standup essentially COMPLETE). Two-server split LIVE (S413/S414); both platform apps :healthy on Server B (ca-pipeline-platform-production→zjqbr prod · ca-pipeline-platform-staging→rbwqew staging); env-topology fixed S417/S418 (staging→staging env, NEW UUIDs); real EXTRACT_API_TOKEN + prod webhook wired; E2E /walk PROVEN both envs (S419) → 127.11+127.13 closed; LMDB→S3 backups armed + self-healing (PR #89 524bb4f6) + datapath-watch monitor wired. Remaining: the id-134 promotion-confidence E2E gate (S436 reframe of “{127.4} synthetic corpus + manifest”; {127.4} CANCELLED in the ledger, manifest forms-sense removed per DR-014, route-tag .kh-workspace-map.json KEPT; gate truth in specs/id-134-promotion-confidence-e2e/TECH.md [bannered stale] + the {134.6}/{134.7} journals + DR-014 + BL-392) + deferred v1.1.0 release-tag re-pin (client-prod on interim sha-b92aee5e; cut v1.1.0 + re-pin next session, held off ID-130). New backlog: the OKF chain has landed/advanced (id-131 L-records refactor [umbrella MERGED, PR #110] → id-132 + id-133 + id-134 + id-135) — it supersedes the old bl-367 “OKF spike” placeholder; bl-368/image-rename; platform-prod redeploy fragility (10.7 GB image on 4 GB box). Parallel, post-client-launch — NOT a Spine gate. |
| Platform-seed follow-up | seed-platform-from-staging.ts / propagateAllToTarget excludes client-provenance tables but not client-provenance rows in canonical tables, so a re-seed re-introduces the scrubbed client taxonomy → filter provenance='client' (or stop propagating taxonomy; baseline = ontology). | backlog (non-blocking) |
2. Cross-lane dependency notes
Section titled “2. Cross-lane dependency notes”- S1 (ID-80 Path-B smoke) is independent of S3/S4 — it can run as soon as the productionisation lands + a form file is staged; it does not wait on the retention list. Do it early to de-risk the form half.
- Lane A bl-189 ({64.12}/{64.13}) ✅ DONE (S348) — the telemetry/orphan
content_itemscolumns are dropped on prod, so the fresh corpus writes into the cleaned schema (zero backfill). - Lane B feature build neither blocks nor is blocked by the Spine — fully parallel. S-canonical-baseline: ID-58 CLOSED, ID-57 done (RPCs prod-promoted), ID-59 core + corpus-promotion on prod/canonical. Their schema slices landed pre-cutover (OQ-64-5 gate G6 fully satisfied — ID-57 question_match RPCs now on prod).
- Spine gates status (unchanged through S419): S0a ✅ (prod cutover S336) · S0b ✅ (ID-101 CLOSED proven-artifact S348) · S1 ✅ (S319) · S3/S4 ✅ (ID-64 CLOSED S352) · ID-56→{56.12} chunking-UI ✅ DONE. The headline ID-45 run now awaits {45.3} TECH + {45.4} PLAN (unwritten), bl-106/OQ-45-1 (cv13-reconciled per the ID-45.1 journal; prose still lists it a Liam residual — confirm), explicit Liam GO, and NEW: ID-130’s domain-model migration landing first (pre-launch model-cement window).
Lane C ID-70 must wait for S4’s— ID-70 is DONE (S402); it landed ahead of the cutover regen with types-parity held, so the double-regen concern did not materialise.gen types- ID-60 (Lane C) is the only feature gated after cutover (observation window).
- Lane D ({46.9} + ID-112 {112.13} deletion tail) is the terminal step — ID-112’s cutover wave SHIPPED (S379); the dead-extractor deletions stay hard-gated on a stable re-ingested corpus.
- bl-325 (citations stale flag) migration must be TIMED with the ID-45 re-ingest zero-row window — coordinate its DDL with the cutover so it lands while the affected tables are quiescent.
- The migration history is now a single squashed baseline
20260617130000(S371). The schema_migrations ledger was repaired (143 pre-squash rows → the single baseline) on all three DBs: Platform, client-prod, and client-staging (S374/S375). The old “id71-id104 FF carries two AUTHORED-but-UNAPPLIED migrations” parity debt is RESOLVED — those migrations were absorbed into the squash baseline. Going forward each client DB receives migrations via a deliberate per-releasesupabase db push(never auto-push); the re-ingest itself targets a fresh client DB. Alwayscat supabase/.temp/project-reffirst before any CLIdb pushto confirm which DB you are pointed at (client vs Platform).
3. Recommended near-term planning order
Section titled “3. Recommended near-term planning order”⚠️ S436 lynchpin — ahead of the ID-45 Spine. Current critical path is the OKF/id-131 landing, not yet re-ingest: deploy the id-131-lockstep cocoindex image → re-walk both Platform DBs → {131.11} G-SEARCH → dispatch id-135; id-134 {134.6} validates after the re-walk. Goose track (id-71) re-established via
continuation-prompt-ca-s435. The ID-45 re-ingest (items 1–8 below) sequences AFTER this. Seereference/deployment-architecture.md§10. Also S436: ID-127 gained a hardening wave {127.17-19} (walk rate-limit, CRON_SECRET split, rotation runbook) and a task-close blocker {127.20} (private ingress — tunnel/mTLS before multi-client GA, DR-015), so the “15/16 done” framing in this doc reads 16/20 with task close gated on {127.20}.
- Drive the cutover spine — all the prior gates are DONE: ✅ S0a (S336) · ✅ S0b (ID-101 CLOSED S348) · ✅ S1 (S319) · ✅ S3/S4 (ID-64 CLOSED S352) · ✅ ID-56/{56.12} chunking-UI · ✅ migration squash (S371) · ✅ ID-68 flip/purge (S375) · ✅ v1.0.0 cut (S377). The remaining gates in front of ID-45 are exactly three: (a) {45.3} TECH + {45.4} PLAN (cutover mechanism — still UNWRITTEN), (b) bl-106/OQ-45-1 canonical ingestion_source ratification (Liam, s361 packet), (c) explicit Liam GO. Then author {45.3} TECH + {45.4} PLAN and execute ID-45 (T7) full-corpus re-ingest (S5) into a fresh client Preview-branch target — wiring in the new {45.5} promoteCorpusExtractions auto-invocation host (async/service-role, NOT the 10s webhook) + {45.6} alternate_question_phrasings source — then cut over as the client (Phew) handover DB. (NB: the S383→S403 arc moved Lane B / LANE PLATFORM / hygiene only — the Spine is untouched and these three gates are exactly as they were at S382.)
- ID-71 AI-tooling + ID-104 eval engine — spec chains COMPLETE + ratified (S354/S356). ID-71 Wave-1 code
landed on canonical (
2f169545b, surface 58→42 + bid→forms rename); ID-104 is DONE (eval engine landed; its migrations were absorbed into the S371 squash baseline — no separate FF/db-push debt remains). Next: ID-71 Waves 2/3 are now UNBLOCKED (the ID-104-build gate cleared) and not yet built.reference/platform-direction.mdis read-at-session-start for both. - ✅ ID-61 PRE-reingest set DONE (S314) — {61.1} prompt-cache (+ live cache-usage log), {61.2}
tracked-changes DOCX regression (resolver verified leak-free), {61.4} bl-165 error-detail persistence (+
ID-63.8 taxonomyMisses strip fixed), {61.8a}
/walkcadence nightly0 2 * * *. POST-cutover remain: 61.3 terminology audit, 61.5 runbook re-target (fold the now-decided cadence into checklist item (f)), 61.6 case-align, 61.7 bl-70 defer-rename, 61.8(d) once-live kill-switch drill. Operational pre-decisions (a)–(d) sign-off register (61.8;/walkcadence DECIDED 05/06/2026 = nightly0 2 * * *, enable at cutover):operational-pre-decisions-register.md. - Lane B feature build — ✅ ID-58 CLOSED · ID-57 done (RPCs prod-promoted, G6 fully satisfied) · ID-59 core + corpus-promotion on prod/canonical ({59.5}–{59.13}, {59.14}, {59.16}–{59.25}) + Q&A-sidecar wave {59.26}–{59.32} DONE (S383→) · ID-120 cross-workspace Q&A dedup CODE-COMPLETE (S402–S403, {120.5}–{120.9} shipped to main). ID-59 tail = {59.15} UC8 + {59.33} (gated). ID-101 (parity, S0b) is CLOSED — no longer a Lane-B or pre-re-ingest gate.
- ID-46 cleanup + ID-112 deletion tail — ✅ spec chain {46.1}–{46.3} done + deletions {46.5}–{46.8}/{46.10}/{46.11} executed (S351, ff-merged); ✅ ID-112 cutover wave SHIPPED (S379). Remaining {46.9} + ID-112 {112.13} (drop the dead firecrawl/readability extractors + Vercel tiers) stay gated on a stable re-ingested corpus.
- ✅ ID-66 residuals — DONE (S312) ({66.14} cold-backup armed + {66.15} Vercel cron + OQ-1 walk task
created disabled + SOURCE_PATH set). This is the CLIENT on-prem stack. At cutover: enable the
/walkscheduled task (pick cadence / event-driven) + setINGESTION_EXPECTED=trueso the {66.15} monitor’s silence-condition (C) goes live. - PLATFORM ingestion pipeline (ID-127, 15/16 done — essentially COMPLETE) — both platform cocoindex apps run
:healthy on Server B feeding the Platform DBs (zjqbr prod / rbwqew staging), E2E /walk PROVEN both envs (S419), LMDB→S3
backups armed + self-healing. Remaining: the id-134 promotion-confidence gate (reframed {127.4}; CANCELLED in the ledger, manifest forms-sense removed per DR-014, route-tag KEPT) + cut v1.1.0 +
re-pin client-prod off the interim
sha-b92aee5eto the release tag (finishing the “correct release tag tracked by the client” goal — deferred to next session to avoid racing ID-130). New backlog: the OKF chain (id-131 [umbrella MERGED, PR #110] → id-132 + id-133 + id-134 + id-135) supersedes the old bl-367 OKF-spike placeholder; bl-368/image-rename; platform-prod redeploy fragility. Parallel and post-client-launch — NOT a Spine gate. - ID-130 procurement/form domain-model — ✅ DONE (Task CLOSED S458, 30/31). The pre-ID-45 migration gate is SATISFIED (12-step staging-first migration landed; per-form machinery live on all four DBs). Superseded on its workspace-umbrella half by DR-038 + the owner ruling 2026-07-11 — spec files bannered S462.
- ID-145 procurement form-first re-architecture (
must, OPENED S462) — the NEW pre-ID-45-GO DDL gate. Item = ONE form instance; retire the workspace layer (bl-435 re-key nowmust; procurement_workspaces/rollup retirement; domain_metadata drop), build DR-014 manual form-upload UX + form-first create path + dashboard re-wire + question_matches callers + Unit F copy sweep + MCP re-key. {145.1} RESEARCH done (S462 dossier with the 12-item owner OQ register gating PRODUCT); {145.2}/{145.3}/{145.4} authored on the/procurementworktree track. Its DDL batch must land before the ID-45 first-client re-ingest cements the live model (pre-launch = cheapest window — the same logic that governed id-130). id-128 stays PAUSED excl {128.3} until ID-145 lands (owner ruling S462).