OKF Forward Task Graph (S448) — ID-132 / 133 / 135 / 136
Prepared for the team lead. Context: ID-131 is mid-endgame (legacy content_items
retirement onto the OKF L-records model); ID-138 (corpus byte-transport / writer-fence)
is integrated with an owner-gated tail. All reads are slice reads.
Q1 — Start-readiness of ID-132, ID-133, ID-135
Section titled “Q1 — Start-readiness of ID-132, ID-133, ID-135”| Task | Title | Status | Spec chain | Ledger deps | Theme | Can START next session? | Blocker |
|---|---|---|---|---|---|---|---|
| 132 | OKF L-concepts layer + 2-pass producer | in_progress | {132.1 PRODUCT}✓ {132.2 TECH}✓ {132.3 PLAN}✓ — impl {132.4-17} all pending | [“131”] (hard) | 1 (KB foundations) | PARTIAL | Hard dep on 131. Identity-neutral prep can start; record-coupled + publish-gated work blocked. |
| 133 | OKF ontology three-layer pass + semantic linter | in_progress | {133.1 TECH}✓ {133.2 PLAN}✓ (no RESEARCH/PRODUCT stage — started at TECH); impl mixed | [] none | 1 | PARTIAL — most startable | No ledger dep, but content_items-coupled items gated on 131. |
| 135 | Human search/browse + SD provenance UI | pending | {135.1 RESEARCH}✓ {135.2 PRODUCT}✓ {135.3 TECH}✓ {135.4 PLAN}✓ + {135.19 SPEC-RECONCILE}✓ — impl {135.5-22} pending | [] none (but DR-012 = Task-level 131 dep) | 1 | Spec-complete; impl blocked on 131 | Reads hybrid_search + source_documents + q_a_pairs — needs 131’s L-records read surface live. |
Detail per task:
-
ID-132 — Spec chain fully authored (PRODUCT/TECH/PLAN done); 14 implementation subtasks {132.4-17} pending. Hard ledger dep on 131. The description itself allows parallel start of the ADK→Anthropic agent-loop port and scaffolding. So identity-neutral work CAN start: {132.5} G-LOOP (Anthropic tool-use loop port), {132.6} G-PASS1a (resource_uri builder), {132.14} G-VIEWER (viewer lift-and-shift). BLOCKED: {132.4} G-SOURCE (L-records Source adapter needs a stable SEED-CONTRACT + record uuids + EMB-STORE from 131); {132.13} G-PUBLISH-GATE first-publish (BI-20/21) blocks on 138’s promotion-boundary + identity contract, per DR-024 clause (i) + DR-026 (encoded in {138.3}). Also gated by 133’s concept linter (concept-frontmatter validator) and sequenced AFTER 133 per the corpus-reframe path (§7 step 3). No dependency on 138’s UPLOAD leg specifically — the 138 coupling is the promotion-boundary/identity contract, not byte transport.
-
ID-133 — No RESEARCH/PRODUCT stage (task opened at TECH); {133.1 TECH}+{133.2 PLAN} done. Done: {133.3} (README + 3-layer CV), {133.7} (entity/relationship CVs docs), {133.10} (retire loader.ts), {133.11} (baseline schema + parity, code). STARTABLE now (131-independent, and 132-gating): {133.8} 37-concept-type CV + {133.12}
concept-schema.tsConceptFrontmatterSchema — these ARE the concept linter that gates 132’s concept writes; building them unblocks 132. BLOCKED on 131’s content_items retirement: {133.4} BI-3 decompose 04-content-type (coordinate Task B), {133.5}/{133.6} BI-4 re-home column CVs, {133.9} content_items prose sweep, {133.13} content_type fixture trim. Description confirms: “homes-dependent items (3,4,8) after B.” Verdict: the concept-linter half can and should start; the re-home/decompose half waits on 131. -
ID-135 — Status
pendingbut spec chain is COMPLETE and reconciled: RESEARCH, PRODUCT, TECH, PLAN all done, plus {135.19} SPEC-RECONCILE re-verified against S436/S437 platform truth (a deliberate pre-impl dispatch gate). 17 implementation subtasks pending. Per DR-012, {135.11} was dropped and thesource-documentsroute re-point + thederived_pairscontract are a Task-level id-131 dependency — so implementation reads the L-records surface (hybrid_search + source_documents + q_a_pairs) that 131’s content_items elimination produces. Per DR-013 the surfaces are net-new-by-design (leaf/pattern reuse only). Corpus-reframe path sequences 135 LAST in the concept-layer chain (§7 step 3: 133→132→134→135). No 138 upload-leg dep. Verdict: dispatch-ready on spec, but implementation should wait for 131 to land the q_a_pairs/source_documents read surface.
Cross-task sequencing (from corpus-reframe §7 + DRs): 131 (content_items kill) → 133 linter → 132 producer/first-bundle → 134 gate → 135 search/browse. 138’s promotion-boundary contract gates 132’s first publish.
Q2 — Can ID-136 flip to done?
Section titled “Q2 — Can ID-136 flip to done?”Verdict: NOT yet on the ledger’s own terms — but very close. All work is done and the PR is merged; only the deferred end-of-task verification wave remains, and it is light.
(a) All subtasks done? YES. Subtasks {136.3-11} are all status=done (there are no {136.1}/{136.2} — the task opened at TECH {136.3}). Each carries an S442 executor-commit journal + a Checker PASS / PASS_WITH_NOTES per-subtask verdict.
PR status: MERGED. PR #113 (“ID-136: Retire the corpus forms route”) merged to main 2026-07-03T21:07:14Z (head e311fe47, 8 commits). The S442 merge-gate is closed. The constraint “re-walk corpus ONLY after merge” is now satisfiable — confirm operationally that the post-merge re-walk ran (not a subtask gate; not evidenced in the ledger).
(b) code-simplification (Executor) + quality-review (Checker) end-of-task passes? NO — explicitly DEFERRED. {136.10} journal: “end-of-task simplification + quality-review passes DEFERRED per parent close-out steer (per-subtask gates already run).” status_note: “Simplification+quality passes deferred (light).” Per-subtask Checker gates DID run; the two END-OF-TASK wave passes did not.
(c) Curator triage of out-of-scope findings? None run, and likely none needed. No out-of-scope findings were parked. {136.11} was an IN-SCOPE post-hoc subtask (a T1-T23 touch-point undercount found at the {136.10} gate), not a curator item. DR-021 governs disposition; nothing indicates an out-of-scope finding surfaced.
Minimal wave to close 136 (the owner is right that it is straightforward):
The diff is overwhelmingly DELETIONS (RouteKind forms, flow.py fork, form_extractors/
2,235 LOC, 2 vendored binaries, ~23 test touch-points). The only NON-deletion edit surface
— the sole thing a quality/simplification pass can act on — is small:
scripts/cocoindex_pipeline/workspace_resolver.py(RouteKind narrowing + docstrings)scripts/cocoindex_pipeline/flow.py(fork collapse + BranchCounter shape)scripts/seed-synthetic-corpus.ts(buildManifest →{schema_version:1,mappings:[]}+--emit-manifestsimplification)- re-pointed/extended tests: 4 Python routing/gate files +
platform-corpus-shape.test.ts
Recommended MINIMAL close: ONE task-checker (variant=quality-review) pass scoped to PR #113’s edited (non-deleted) files above; the code-simplification Executor pass over the same 3–4 edited files is near-empty (parent already judged it “light” — a deletion PR has almost no simplification surface). Dispatch a Curator ONLY if quality-review surfaces an out-of-scope finding (DR-021); else no-action. Also confirm the post-merge corpus re-walk happened. If quality-review is clean → flip {136} to done. Caveat: #113 is already merged, so any simplification edit would be a follow-up PR — the owner may reasonably judge a merged deletion PR does not warrant a retroactive edit pass and close on a clean quality-review read alone.
Q3 — Retro signal (S444 / S445 / S446, canonical-pipeline)
Section titled “Q3 — Retro signal (S444 / S445 / S446, canonical-pipeline)”Bearing on 131/132/133/135/136 or on how to run the next session:
- Deletion-heavy merges need
dangerouslyDisableSandbox(S446 failed-assumption). “ff-merge just works” is FALSE under sandbox — file DELETES hit “Operation not permitted”, leaving a half-applied merge (HEAD unchanged, tree mutated); recovery =reset --hard+ retry with bypass. Directly relevant to 136 (already deletion-heavy, merged) and to any 131/133 content_items-deletion merges next session. - Idle-without-report recurring (S444/S445/S446 — 3rd/4th session). Dispatched agents idle after finishing without surfacing work; the SendMessage nudge is normalised, not root-caused (Agent-tool wake-on-inbox / report-before-idle still missing). Plan for manual nudges when running the 132/133/135 implementation waves.
- Worktree isolation still broken (id-137 unbuilt) (S444/S446). DR-031 subo-launch recipe doesn’t cleanly compose; {137.1} auto-wiring unbuilt → S446 hand-rolled launch. S444: executors direct-to-main (serialized single-writer, no worktree) worked cleanly — the proven pattern while isolation is broken. Choose dispatch topology accordingly for next-session waves.
- Parent can’t rescue a subo’s sub-executors (S446). A stuck/long executor can only be rescued by its owning subo; no parent-side primitive. Affects deep dispatch trees.
- Post-apply full-surface verification should be a standing GO-gate (S445 workflow-improvement). The 63-table public-vs-api diff caught a live break the scoped audit missed, and caught the id138 re-break before prod push. Relevant to the 131/138 migration endgame.
- Migration-authored ≠ client-reachable; api exposure is separate ownable work (S445 → DR-032). id138 fns were PostgREST-unreachable (no api wrappers). Relevant to any new 132 RPC (EMB-STORE / concept embeddings) and 131/138 endgame.
- DR-032 enforcement is documentation-only (S445 unresolved). Should a CI check / migration-linter gate the companion-migration rule mechanically? Open.
- Deploy-provenance gap (S445 unresolved). Who applied 20260703160000/170000 to prod before S445? No ledger/diary record; owner eyeball requested.
- test:integration masked-red cadence (S444/S445 unresolved). Weeks between runs → a per-GO triage tax (12 reds; 4 were rate-limit flakes). Needs a cadence decision + rate-limit-aware runner.
- ledger-cli budget papercuts (S444 unresolved). description ≤250 / testStrategy ≤300 rejected 4+ add-subtask attempts. Relevant to authoring 132/133/135 impl subtasks.
- Continue-the-agent beats fresh-spawn when the follow-on builds on the trace (S444 workflow-improvement). Reuse the executor via SendMessage for chained subtasks.
- Capture full test output to a scratchpad FILE, tail the file (S445 lesson). Bounding
a background run with
tail -30lost 10 of 12 failures.
(workflow_improvements treated as observations, not ratified rules.)
Q4 — In-force decision-register entries + corpus-reframe direction
Section titled “Q4 — In-force decision-register entries + corpus-reframe direction”In-force (accepted, non-superseded) DRs relevant to 131/132/133/135/136:
| DR | Ruling (one line) | Bears on |
|---|---|---|
| DR-014 (S434) | Forms are manual-upload; the corpus forms-route is retired. | 136 charter |
| DR-013 (S434) | id-135 surfaces are net-new-by-design, not id-111/117 reuse. | 135 |
| DR-012 (S434) | id-135’s source-document route re-point belongs to id-131; {135.11} dropped; derived_pairs = Task-level 131 dep. | 135 / 131 |
| DR-016 (S436) | OKF bundle medium = client-owned git repo; human edits are producer overrides re-applied on regen. | 132 |
| DR-018 (S436) | OKF producer trigger chained off a successful walk ({132.16}), not scheduled. | 132 |
| DR-019 (S436) | OKF conformance = documented deliberate superset of OKF v0.1; keep the name/extensions. | 132 |
| DR-020 (S436, restated by DR-025) | Corpus admission = two-tier gate; id-133 owns ONLY the semantic tier (linter over extraction + concept writes); document gate = {131.24}. | 133 / 131 |
| DR-021 (S438) | Finding disposition: an active ID-N owns its in-scope findings (subtask/journal); backlog only if unowned. | 136 curator triage |
| DR-023 (S440, refined by DR-025) | Corpus durable home = source-binding model; per-binding retention classes. Impl = ID-138. | 138 |
| DR-024 (S440; clause (ii) superseded by DR-026, clause (i) stands) | Record identity minted at admission (not path-derived); first bundle publication (132 BI-20/21) blocks on the identity contract. | 132 / 138 |
| DR-025 (S441) | The corpus reframe: sources are evidence; authority is earned at promotion. Two gates (light binding + knowledge-admission). | strategic / all |
| DR-026 (S441) | Promotion boundary replaces the record-curation RETAIN store; pipeline writes stop at staging; changes to promoted records arrive as proposals; encoded in {138.3}. | 138 / 131 / 132 |
| DR-027 (S441) | Ontology CVs: effective ontology ships in the bundle; base source-of-truth moves to the canonical repo; id-133 owns the register-medium change. | 133 |
| DR-029 (S443) | Won-bid KB integration HYBRID RETIRE; the 4 non-QA content types re-enter only as id-132 CONCEPT-proposals ({132.17}), never a content_items rebuild. | 132 / 131 |
| DR-030 (S444) | api.* views MUST be regenerated on any base-column rename. | 131 endgame |
| DR-032 (S445) | Every api-surface change ships its companion exposure migration in the SAME batch. | 131 / 138 |
DR-031 (S444, retired — superseded by the S497 WorktreeCreate hook: nested .claude/worktrees/ is the provisioned default) / DR-033 (S446, retired but hazard live — see the gitnexus-refactoring skill) | Parallel worktree isolation needs a top-level sibling worktree; non-dry-run gitnexus mutations banned from agent worktrees. | dispatch topology |
Corpus-reframe review (.lavish/corpus-reframe-review.html, S441 pre-wave strategy) —
what it says is in-flight + direction of travel, cross-referenced to the graph:
- The reframe (ratified as DR-025/026/027): “source file” conflated three things now
separated — evidence (bytes; kept/discarded per retention class), the provenance
register (
source_documentsrows, never deleted; citations degrade to it, never orphan), and authoritative artefacts (promoted records + OKF bundle = platform OUTPUTS, durable via DB backups + bundle changelog). The gate MOVED from the front door (which files may enter) to the sign-off desk (promotion): a light binding gate + the real knowledge-admission gate. Authority is earned at promotion, not inherited from a folder. - Two loops: ingestion (evidence→sieve→proposals→promoted records) + curation (records→concept producer→OKF bundle). Push-back ①: the bundle is NEVER pipeline input — a separate consumption indexer reads it (id-132’s EMB-STORE). Push-back ②: ingest-once needs a deliberate “what survives the engine” contract per record class — the load-bearing ID-138 TECH decision (→ DR-026).
- “Most pieces almost in place” — confirmed as a reframing + spec-steering exercise, not a rebuild. Inventory maps: cocoindex incremental walk (live), q_a_extractions staging (live), id-59 promotion loop (built), id-120 dedup (built), id-134 confidence gate (in flight), id-131 L-records refactor (in flight — “the wave ready to dispatch today”), id-132 producer (spec’d), id-133 linter (in flight), id-59 write-back (built).
- Direction of travel (§7 path): step 0 ratify + amend DR-023/024 + re-brief 138 (done — DR-025/026/027 landed S441); step 1 dispatch the “unaffected” waves 131 + 136 in parallel (136 DONE/merged; 131 mid-endgame); step 2 ID-138 TECH under the corrected model (source-binding register, promotion-boundary contract, what-survives-the-engine, citation degradation, erasure cascade, demoted bucket) — this spec blocks first bundle publication, the point of no return (138 integrated, owner-gated tail); step 3 the concept layer: id-133 linter → id-132 producer + first bundle → id-134 gate → id-135 search/browse + bundle consumption indexer; step 4 first-client onboarding ingest (id-45) reframed as one-time ingest-once; step 5 post-v1 the refinery grows inlets (roadmap themes 15/16 — connectors, discovery agent, PDF quick-win, guides+coverage).
Net cross-reference: the review’s §7 is the authoritative sequencing for the forward graph — after 131/138, run 133 → 132 → 134 → 135, with 138’s promotion-boundary contract gating 132’s first publish. This confirms the Q1 read: 133’s concept-linter half should lead, 132 follows (record-coupled parts gated on 131 + publish gated on 138), and 135 is last.
Ledger drift — 05/07/2026
Section titled “Ledger drift — 05/07/2026”- [status-changed]
ID-136isdone(S448 reconcile;ledgers/tasks/ID-136.md) — the Q2 “NOT yet on the ledger’s own terms” verdict was actioned and the deferred close-out wave resolved. - [status-changed]
{133.8}(37-concept-type CV) and{133.12}(ConceptFrontmatterSchema) aredone(S449;ledgers/tasks/ID-133.md) — the Q1 “startable now, 132-gating” items have landed; the concept-linter gate on ID-132’s concept writes is in place. - [status-changed] The ID-131 endgame advanced past the Q1 snapshot:
{131.17}final shipped (gate greenrg==0),{131.21}/{131.24}/{131.38}done,{131.19}GO addendum (detect_reupload DROP), and{138.18}done (S449;ledgers/tasks/ID-131.md,ledgers/tasks/ID-138.md).
Ledger drift — 11/07/2026
Section titled “Ledger drift — 11/07/2026”- [status-changed] The first Platform OKF bundle has published (11/07/2026 — repo
canonical-okf-showcase(pre-rename: canonical-okf-platform), first commit3f66483, 18 concepts) via{132.15}(done;ledgers/tasks/ID-132.md). The Q1 detail (“{132.13}G-PUBLISH-GATE first-publish … blocks on 138”), the Q1 cross-task line (“138’s promotion-boundary contract gates 132’s first publish”), and the Q4 §7-path framing (“this spec blocks first bundle publication, the point of no return”) all describe 132’s first publish as a still-future gate — for the Platform bundle that first-publish has now occurred. Taskid-132itself remainsin_progress({132.15}publish finale being finalised in a parallel session), and client bundles remain future, so the sequencing frame is only partially overtaken. - [status-changed]
id-134(promotion-confidence gate — the “134 gate” step in the Q4 §7 concept-layer chain133 → 132 → 134 → 135) isdone(closed S452, validated live-green on Platform;ledgers/tasks/ID-134.md). The graph carries it as an unbuilt downstream gate.
Ledger drift — 20/07/2026
Section titled “Ledger drift — 20/07/2026”- [status-changed]
ID-131isdone(CLOSED S451, 07/07/2026, commit3bfd644f,ledgers/tasks/ID-131.md). The 11/07 drift bullet above listed ID-131 subtask completions ({131.17}/{131.21}/{131.24}/{131.38}/{131.19}) but predates — and did not note — the parent task close; Q1’s “ID-131 is mid-endgame” framing (line 25) is now fully overtaken (39/39 subtasks, M6 GO applied both envs S450, simplification pass + quality-review PASS_WITH_NOTES). - [status-changed]
ID-138isdone(CLOSED S452, 08/07/2026, commitd915778e,ledgers/tasks/ID-138.md). The 11/07 drift bullet noted{138.18} donebut not the parent close; Q1’s “integrated with an owner-gated tail” framing (line 26) is overtaken — the tail is resolved, 18/18 subtasks, full regression green. DR-026’s promotion-boundary contract remains in force (ratified) and still gates 132’s first client bundle publish per{45.9}. - [status-changed]
ID-133isdone(CLOSED S452, 08/07/2026, commitd915778e,ledgers/tasks/ID-133.md). The 11/07 drift bullet covered subtasks{133.8}/{133.12}done but not the parent close; Q1’s row for ID-133 still showsin_progress(line 35) — 14/14 subtasks, vitest 11853. - [status-changed]
ID-135isdone(CLOSED S485, 17/07/2026, commit3af440e6,ledgers/tasks/ID-135.md). The 11/07 drift section did not cover ID-135 at all; Q1’s row for ID-135 still showspending(line 36) — long overtaken (flippedpending→in_progress11/07, thenin_progress→done17/07; 31 subtasks done,{135.21}deferred+re-homed to id-162 per owner Option 2). - [status-changed]
{132.48}G-PUBLISH-TRANSPORT and{132.49}G-CONCEPT-GRAPH-UNION aredone(S488, commit37536da0/666d74ad;ledgers/tasks/ID-132.md) — the first live publish-lane verification landed (commitfe4e3542) and the deployment- level union concept graph is in. ID-132 itself remainsin_progress(unchanged since the 11/07 drift), but the Q1/Q4 framing of “first bundle publication” as a still-future gate is further overtaken for the Platform lane.