docs(v2): add parity matrix, launch order, behaviour-spec schema, and #748 design - #834
docs(v2): add parity matrix, launch order, behaviour-spec schema, and #748 design#834tomdps wants to merge 1 commit into
Conversation
…748 design Planning artifacts for epics #643 and #665, produced 2026-07-29 against Node baseline 50c5b00. - docs/v2/parity-matrix.md: 281 capability rows (183 control + 98 engine), each classified implemented/replaced/excluded/absent-in-node and mapped to an owning #665 issue. Provisional against 50c5b00 with a delta log, per the decision that Node keeps shipping and freezes later. Input artifact for #691. - docs/v2/m1-launch-order.md: wave structure and launch rule for milestone "M1 - Certified embeddable backend" (11 issues, 8 waves deep). - docs/v2/behavior-spec-schema.md: scenario schema for the dual-binary suite that runs one spec file against both zeroshot and zeroshot-rust. - docs/v2/748-typescript-client-design.md: ownership design gating #748. Section 7 of the parity matrix records 71 unowned capabilities, tiered by risk. These are deliberately not filed as individual issues; this document is the record. Tier 1 includes the finding that the V2 product has no configuration write path at all. Also corrects four stale claims in CLAUDE.md: the enforce-main-pr-source CI job does not exist, dev was deleted so PRs target main, pre-commit does not validate that a test file exists, and conductor classification does not live in src/conductor-bootstrap.js. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0133YEUjbWi2sNj85gmqt4hm
| "overrides": { | ||
| // per-binary divergence, class=replaced only | ||
| "rust": { | ||
| "reason": "#665 mandates canonical JSON export; Node defaults to an HTML transcript", | ||
| "expect": { "stdout": [{ "isJson": true }] }, | ||
| }, | ||
| }, |
There was a problem hiding this comment.
Example violates override constraint
When a conformance-suite implementer copies or validates this canonical example, it combines class: "implemented" with overrides, even though the field rules allow overrides only for replaced scenarios, causing a conforming validator to reject the scenario or requiring the harness to relax the documented contract.
| { | ||
| "id": "run.worktree.creates-isolated-branch", // stable, dotted, never renamed | ||
| "title": "run --worktree leaves the main working tree clean", | ||
| "parityRow": "isolation.worktree", // FK into the parity matrix |
There was a problem hiding this comment.
When the dual-binary harness validates the required parityRow linkage, isolation.worktree cannot resolve because the matrix exposes descriptive capability cells rather than this stable identifier, causing scenario validation to fail or leaving the coverage claim untraceable.
|
|
||
| ## 7. UNOWNED capabilities | ||
|
|
||
| **74 capabilities across both surfaces have no owning #665 sub-issue.** These are what will be silently lost. Ranked by risk; grouping merges near-duplicate rows from the two surface audits. |
There was a problem hiding this comment.
Unowned capability totals diverge
When maintainers use §7 as the ownership record, its total of 74 does not reconcile with the 46 control rows and 35 engine rows reported as touching UNOWNED; the explanation accounts for only three of the seven-item difference, causing capabilities to be omitted from ownership triage and the downstream parity audit.
Greptile SummaryThis PR adds V2 planning and design documentation and corrects repository guidance.
Confidence Score: 3/5The PR should not merge until the behavior-spec contradictions and the parity matrix's unreconciled ownership total are corrected. The canonical behavior scenario cannot satisfy its own override rule or resolve its parity-row reference, and the consolidated ownership count can omit capabilities from the planning record. Files Needing Attention: docs/v2/behavior-spec-schema.md, docs/v2/parity-matrix.md
|
| Filename | Overview |
|---|---|
| docs/v2/behavior-spec-schema.md | Defines the dual-binary scenario format, but its canonical example violates the override rule and references a parity-row key that the matrix does not expose. |
| docs/v2/parity-matrix.md | Catalogs control and engine parity ownership, but the consolidated unowned total does not reconcile with the two surface tallies. |
| docs/v2/m1-launch-order.md | Adds an explicit milestone launch rule, dependency waves, and known sequencing hazards. |
| docs/v2/748-typescript-client-design.md | Specifies request ownership, bounded subscriptions, connection lifecycle, package boundaries, and verification gates consistently with the cited protocol and Rust-client behavior. |
| docs/v2/README.md | Adds navigation entries for the new V2 planning artifacts. |
| CLAUDE.md | Corrects stale trunk, CI-enforcement, pre-commit, and conductor-routing guidance. |
Reviews (1): Last reviewed commit: "docs(v2): add parity matrix, launch orde..." | Re-trigger Greptile
Planning artifacts for epics #643 and #665, produced 2026-07-29 against Node baseline
50c5b00. Docs only — no code, no behaviour change.What lands
docs/v2/parity-matrix.mdimplemented/replaced/excluded/absent-in-nodeand mapped to an owning #665 issue. Input artifact for #691.docs/v2/m1-launch-order.mdM1 — Certified embeddable backend.docs/v2/behavior-spec-schema.mdzeroshotandzeroshot-rust.docs/v2/748-typescript-client-design.mdWhy the parity matrix matters
The Node test suite cannot serve as the V2 regression net: 159 of 214 test files
require()asrc/lib/climodule directly, and onlytests/e2e(10 files) drives the real binary. #665 additionally forbids the Rust product from importing Node, so no shared harness is possible. This matrix plus the protocol conformance vectors are the actual net.It is provisional, not pinned — Node keeps shipping and freezes later, so §9 carries a delta log that every Node feature PR must append to until the freeze.
Findings worth reviewing
excluded by decisionfromexcluded by consequence. The second kind is the dangerous one: nobody decided, it fell out of another constraint, and no owner recorded the loss.CLAUDE.md corrections
Four claims were false and are fixed: the
enforce-main-pr-sourceCI job does not exist in.github/workflows/;devwas deleted ine94b6c2so PRs targetmain;.husky/pre-commitdoes not validate that a test file exists; and conductor classification does not live insrc/conductor-bootstrap.js. The "Where to Look" table re-pads because one entry got longer — prettier reflow, not a content change.🤖 Generated with Claude Code
https://claude.ai/code/session_0133YEUjbWi2sNj85gmqt4hm