core/docs/handoff/PARALLEL-WORK-PLAN-2026-05-29.md
Shay b1416814ea
docs(adr-0180): propose CRDT-sharded vault concurrency substrate (#457)
* docs(handoff): parallel-work plan post-GB-3a (CP-1 / scale / EX-3 tracks)

Three disjoint-file tracks dispatchable in parallel with Claude's serial Gap-B
line; records the hard constraint that GB-3b/4/5 are serial on compose.py.

* docs(adr-0180): propose CRDT-sharded vault concurrency substrate

Drafts ADR-0180 (Proposed) for a Delta-CRDT sharded substrate to support
forthcoming multimodal ingestion (vision, kinematics) without serializing
on a global Vault lock.

§1.5 grounds the proof obligation against the existing single-threaded
Python ingest path (sensorium → ingest/gate → field → vault/store →
compute_trace_hash) and enumerates four pre-refactor test obligations
(T-1..T-4) that must be green on main before any change to
core-rs/src/vault.rs lands, per CLAUDE.md work-sequencing item 5.

§1.5.5 explicitly fences out: approximate recall (exact CGA recall is
non-negotiable), hidden background execution (Merge Kernel must be
explicitly mounted with telemetry), and MLX/UMA hardware optimization
(deferred to a follow-up ADR; CPU-only Rust path lands first).

Proposed only — no code changes to core-rs, sensorium, or field.
2026-05-29 09:42:01 -07:00

90 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Parallel work plan — post-GB-3a (2026-05-29)
Dispatch-ready briefs for operators (Opus / Sonnet / Gemini) to run **in parallel
with** Claude's serial Gap-B line. Each brief touches a **disjoint file set** so
PRs cannot conflict. One sub-phase = one PR. Do **not** merge — Claude verifies
(lane-SHA + CLI) and merges.
> **The hard constraint (learned this session):** GB-3b → GB-4 → GB-5 all edit the
> **same** files (`compose.py`, `clauses.py`). They are **serial** — never dispatch
> two of them in parallel. The four ADR-0179 EX PRs each rewrote one file off main
> and cost a full reconciliation. Parallelism is only safe across the *disjoint*
> surfaces below.
The `wrong=0` rule, the sealed/serving boundary, and "no grammar templates"
(ADR-0165) from `docs/handoff/CHATGPT-REMOTE-BRIEF.md` §1/§2/§6 apply verbatim to
all three. Never touch `chat/**`, `generate/math_roundtrip.py`, `algebra/**`,
`field/**`, `vault/**`, CI files, or any currently-green test.
---
## Track A — CP-1 cue-precision ledger substrate (ADR-0177) · Opus/Sonnet
**Files (only):** new package `generate/cue_precision/` (e.g. `ledger.py`) + new
`tests/test_adr_0177_cp1_ledger.py`. **Read:** `docs/decisions/ADR-0177-cue-precision-learning.md`
§"Sub-phases" CP-1, and `core/reliability_gate/ledger.py` (mirror its `ClassTally`
counts-only, refusals-excluded discipline).
**Scope:** the `(cue, op, unit_shape)` ledger + credit assignment **mechanism only**
— record per-pattern committed/correct counts from gold-checked practice chains.
**Do not wire it into the gate or any scorer** (that is CP-2). No reliability-based
resolution (CP-3). It is inert substrate with tests, exactly like
`core/reliability_gate/` shipped before its consumer.
**Acceptance:** deterministic; counts-only (no float thresholds invented);
refusals never counted as commitments; serving untouched; the package is imported
by nothing outside its own tests.
**Dispatch:** `Read docs/handoff/PARALLEL-WORK-PLAN-2026-05-29.md, do Track A (CP-1 ledger substrate) exactly as written. New generate/cue_precision/ package + its test only. Inert (no gate/scorer wiring). One PR. Do not merge.`
---
## Track B — scale the sealed practice case set (ADR-0163 §F) · Sonnet/Codex
**Files (only):** `evals/gsm8k_math/practice/**` data/case files (and a loader if
one is needed) — **not** `train_sample/v1/cases.jsonl` (that is the pinned serving
lane; do not touch it). **Read:** `evals/gsm8k_math/README.md`,
`evals/gsm8k_math/practice/v1/runner.py`.
**Scope:** add more GSM8K practice cases (additive only) so the practice/learning
signal has volume — 50 is mechanism-demonstration, not enough for cue-precision to
learn. Pure data + scoring; the sealed lane gold-checks attempts, so more cases
can only add eliminations/correct, never a *served* wrong.
**Acceptance:** deterministic ordering; cases are well-formed (id/question/answer);
the serving `train_sample` lane and its pinned SHA are **untouched**; `build_search_report`
still runs. State the new case count in the PR body.
**Dispatch:** `Read docs/handoff/PARALLEL-WORK-PLAN-2026-05-29.md, do Track B (scale the practice case set) exactly as written. Only evals/gsm8k_math/practice/** ; never touch train_sample. Additive. One PR. Do not merge.`
---
## Track C — EX-3 redo: tight multi-word units (ADR-0179) · Sonnet (or Gemini research)
**Files (only):** `generate/derivation/extract.py` + `tests/test_adr_0179_extract.py`.
**Read:** `docs/handoff/AUDIT-ADR-0179-EX-RECONCILE.md` §"Why EX-3 was deferred"
(the exact trap), and the `extract.py` module docstring.
**Scope:** a **tight** multi-word-unit rule that does **not** cross connectives and
does **not** regress GB-2. The deferred greedy version read `"6 apples and 4 apples"`
as unit `"apples and"` and broke `test_same_unit_list_sums`. The replacement must:
(a) keep `"12 jumping jacks"``"jumping jacks"` only where tight; (b) leave
`"6 apples and 4 apples"` as two `apples` quantities; (c) keep **every** test in
`test_adr_0178_gb1_clauses.py`, `test_adr_0178_gb2_compose.py`,
`test_adr_0178_gb3_referent_guard.py`, `test_adr_0179_extract.py` green. If no rule
satisfies all of (a)(c) without a grammar template, **write a note and ship no
code** — a refusal is fine.
**Acceptance:** all listed test files stay green; lexeme-level only (ADR-0165);
serving untouched. *Safe to run alongside GB-3b: Gap-B edits `compose.py`/`clauses.py`,
not `extract.py`.*
**Dispatch:** `Read docs/handoff/PARALLEL-WORK-PLAN-2026-05-29.md, do Track C (tight multi-word units) exactly as written. Only extract.py + its test. Must not regress any GB-1/2/3 test. If impossible without a grammar template, write a note and ship no code. One PR. Do not merge.`
---
## What Claude keeps (serial, do NOT dispatch)
GB-3b (cross-clause chaining consuming GB-1, referent-safe) → GB-4 (held
hypotheses + eliminate) → GB-5 (DAG/0033-class). All on `compose.py`/`clauses.py`,
all `wrong=0`-critical. One at a time.