rfc(0001): v0.7.0 — ward_hash leaf payload + role-scoped recompute MUST; fail-closed vector coverage (threads-8gg, threads-df9) - #13
Conversation
There was a problem hiding this comment.
Pull request overview
Updates RFC-0001 to v0.7.0 with a normative clarification that makes ward_hash recomputation well-defined (by defining the leaf payload and tying it to the reference construction), scopes the cross-implementation recomputation MUST by hash role, and hardens the audit-record conformance lane to fail closed if worked-vector companions are missing.
Changes:
- Define the
ward_hashMerkle leaf payload (thread:v2) and add a normative reference tocoven-threads-core. - Rescope cross-implementation verification requirements so
ward_hashrecomputation is required only for verifiers who possess the committed authority state. - Make
validators/check-audit-records.jsfail closed unless at least one.entryand.surfacecompanion vector is found and verified per run; sweep version references to v0.7.0 and add an RFC v0.6.0 snapshot.
Reviewed changes
Copilot reviewed 15 out of 16 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| validators/validate.js | Updates validator banner version to v0.7.0. |
| validators/README.md | Updates validator documentation references to v0.7.0. |
| validators/check-audit-records.js | Enforces fail-closed worked-vector coverage across the audit-record lane. |
| tests/conformance/README.md | Updates conformance suite version references to v0.7.0. |
| tests/conformance/audit-records/README.md | Documents the new fail-closed companion-vector guarantee. |
| SPEC.md | Updates pointer to the current normative RFC (v0.7.0). |
| schemas/ward.schema.json | Updates schema description string to reference v0.7 subset. |
| rfcs/RFC-0001-v0.6.md | Adds the historical snapshot of the v0.6.0 RFC text. |
| rfcs/RFC-0001-familiar-contract.md | Bumps RFC to v0.7.0 and introduces the ward_hash leaf payload definition + role-scoped recompute MUST. |
| rfcs/README.md | Updates the RFC index to v0.7.0 and adds the v0.6.0 snapshot row. |
| README.md | Updates top-level “current version” badge and usage text to v0.7.0. |
| PRIMER.md | Updates primer references to the v0.7.0 normative spec. |
| package.json | Bumps package version to 0.7.0. |
| package-lock.json | Bumps lockfile package version entries to 0.7.0. |
| docs/faq.md | Updates FAQ references to RFC-0001 v0.7.0. |
| CHANGELOG.md | Adds the 0.7.0 changelog entry describing the normative + conformance changes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…ST; fail-closed vector coverage (threads-8gg, threads-df9) Closes both findings of the v0.6.0 post-merge review. threads-8gg (§5.6.1 completeness): - Define the ward_hash Merkle leaf payload: the thread:v2 leaf commitment (surface path, writer id, sorted covered-channel tags, full tension-state commitment bytes, sorted strand commitment bytes; all fields BE-u64 length-prefixed), with the reference implementation (coven-threads-core) adopted as the normative definition of the payload bytes — restores the design-basis D-2 delegation dropped in the v0.6.0 transposition; adds the §10.1 normative reference. Previously ward_hash was not recomputable from the RFC alone. - Rescope the cross-implementation recompute MUST by hash role: diff_hash/entry_hash from log + surfaces alone; ward_hash from the committed authority state it commits to. Verifiers lacking that state MUST NOT treat missing inputs as a recomputation mismatch. §9 gap bullet rescoped to match. threads-df9 (conformance-machinery fail-open): - check-audit-records.js now fails closed unless at least one .entry and one .surface companion vector was found and verified per run; a deleted/renamed vector file breaks the suite instead of silently skipping the §6.1 worked-vector demonstration. Mutation-tested. Release mechanics: draft minor v0.7.0 under the v0.5.0 §6.3 rule (unchanged through v0.6.0); §6.3 untouched. Byte-exact v0.6 snapshot; version sweep; CHANGELOG + §11 entries with migration impact (none; v0.6.0-conformant directories remain conformant) + security rationale. Suite: 7/7 positive, 38/38 negative, audit-records READY, examples pass. Beads: threads-8gg, threads-df9 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
5c5d8a2 to
370b875
Compare
Fresh-context review — v0.7.0 (ward_hash recomputability + vector coverage)Independent reviewer (fresh context, reviewer ≠ author), posted for the record per repo precedent. Reviewed head Findings: Blocking — none. Should-fix — 1 (fixed before merge). Nits — none.
Verification evidence (reviewer-run):
VERDICT: SIGN-OFF RECOMMENDED — single cosmetic finding, fixed pre-merge; all constructions fact-checked against the reference implementation. Beads: threads-8gg, threads-df9 · Session: 86c62915 |
What
Closes both findings of the v0.6.0 post-merge review, as one draft minor (v0.7.0) under the §6.3 rule ratified in v0.5.0 (unchanged through v0.6.0; §6.3 untouched, so §6.3.1 is not in scope).
ward_hashwas not recomputable from the RFC alone; and the cross-implementation recompute MUST overclaimed its inputs forward_hash(its preimage includes weave state absent from "the audit log and the surface bytes it references").check-audit-records.jsrecomputed worked vectors only opportunistically: deleting/renaming a companion.entry/.surfacefile silently disabled the §6.1 vector demonstration while the suite stayed green.Normative changes
ward_hashleaf payload defined — the thread'sthread:v2leaf commitment: surface path, writer id (UTF-8), count + sorted deduplicated covered-channel tags, full tension-state commitment bytes, count + lexicographically sorted strand commitment bytes; every field BE-u64 length-prefixed per the framing rule. The reference implementation's construction is adopted as the normative definition of the payload bytes (restores the design-basis D-2 delegation sentence dropped in the v0.6.0 transposition — "The existing implementation is adopted as the reference construction; its domain tags version it"); a change to the payload construction MUST change its embedded tag.coven-threads-core(weave.rsthread_leaf_bytes,manifest.rsmerkle_root).diff_hash,entry_hash): recomputable from log + referenced surface bytes alone, unchanged. Structural commitments (ward_hash): recomputation requires the committed authority state the hash commits to (threads/strands/tension), which the log references but does not embed; an implementation holding that state MUST recompute regardless of writer; a verifier holding only log + surfaces MUST verify the textual encoding and MUST NOT treat missing committed state as a recomputation mismatch. Tamper-evidence sentence unchanged. §9 gap bullet rescoped to match.Conformance machinery
validators/check-audit-records.js— fails closed unless ≥1.entryand ≥1.surfacecompanion vector was found and verified per run. Mutation-tested: hiding01-memory-entry-admitted.entrynow yieldsFAIL … no .entry companion vector found and verified+ exit 1 (previously: silent green).audit-records/README.mddocuments the guarantee.Release mechanics
rfcs/RFC-0001-v0.6.md— byte-exact snapshot of tagv0.6.0(diff-verified).tag v0.6.0 (main cade5a0)+ citations), package{,-lock}.json.thread:v2practice; the rescoped MUST relieves an undischargeable obligation; v0.6.0-conformant directories remain conformant; consumers pinning v0.6.0 unaffected) and security rationale (unrecomputable commitments invite trust-not-verify; role-scoping prevents false tamper alarms; vector-coverage assertion closes a fail-open in the conformance machinery itself).Verification
Gates
Fresh-context review to follow as a PR comment. Merge + tag
v0.7.0is Val's gate.Refs: threads-8gg · threads-df9 · v0.6.0 review record (PR #12 comment) · design doc #9