Conversation
feat(spec): establish Spec 0.2 design baseline
…a 0.2 completion (F-8e7f399b) A schema 0.2 completion now reports the independence label its own assurance receipt attested instead of the evidence-ledger label, which reads any human sign-off as independent and so lets an implementer flip their own label. Under independence_policy: require the attested label decides: self-certified and unobserved are refused with the shard bytes untouched, independent and not-applicable are kept. The completion event seals no independence label, because the attested one exists only after the gate that consumes it. Schema 0.1 keeps its ledger label, its event payload, and its wording. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Completion ran the pre-push profile scoped to the feature and stamped its attestation row; the shard is done, the index and README counts follow, and the sibling receipts were re-attested by a full strict pre-push run. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bump the version across all eleven sites and refresh the lockfile. Move the status row of all six README variants to the released form, and update the pins that hold those claims in place. Rewrite the 0.10.0 changelog body as release notes: a heads-up on migration, the retired headless loop, opt-in relocation and the sealed verification record, then plain-language bullets in place of internal names. The version-bump script now also accepts the unquoted `version:` the 0.2 spec writer emits, which had made it refuse the bump outright. A GREEN pre-push reissued all 285 attestation rows under the new version identity. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The MCP SDK pulls fast-uri through ajv and qs through express; both had open advisories (fast-uri host confusion and SSRF, qs array-limit bypass and denial of service). A lock-only patch refresh moves fast-uri to 3.1.7, qs to 6.16.0, side-channel to 1.1.1 and es-object-atoms to 1.1.2, and npm audit now reports zero vulnerabilities. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The committed mirror was built before the lockfile picked up the patched fast-uri, qs, and side-channel releases, so a clean `npm ci` build no longer reproduced it and CI compared two different bundles. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ompletion and staleness (F-a0bd9c5a) The completion gate's run authority sealed a receipt-free verification closure while the attestation writer sealed a receipt-carrying one, so a schema 0.2 workspace holding a single verified receipt could never record a verification: every seal comparison failed, the gate finished green without writing or reporting anything, and `clad done` refused with a cause it could not name. Both now read one shared receipt census, and so does STALE_ATTESTATION, which reports an attested row as uncheckable when the evidence census cannot be proved safe instead of comparing it against an empty receipt set. The expected-digest producer and the independence inputs keep their receipt-free closure, so a receipt never depends on itself or on its siblings. A refused row now names the guard that refused it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Records the completion of the receipt-inclusive verification seal and syncs the README test and feature counts to the tree it was verified on. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…tures (F-a0bd9c5a) Only a done feature is owed an attestation row, so only a done feature's refusal is worth a line: a workspace that has completed nothing was getting a note on every push gate for features that are not supposed to have a row yet. The note now names each done feature it could not record, up to five, and summarizes the rest. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…the reference-host runbook Adds the 2026-09-07 packed-tarball E2E record for RC 22c1d24: the six deterministic cells, the three defects round 1 found and this branch fixed, the behavioral observations that are not defects, and what the campaign did not verify. Corrects the MCP11 runbook against what the dry-run actually did: the 0.2 binding is a [covers:] token in the it() title rather than test_refs, the runner scripts must throw instead of touching process, coverage needs a src-only scope, the MCP spec-edit call shape carries operations plus input_revisions, and the issuer name must equal git config user.name or the independence label reads independent for one person wearing two hats. Section 8 now separates what the dry-run confirmed, what it repaired, and the three claims that still need a real host. The changelog entry gains the two facts an adopter meets first: commit before migrating, and answering no to the completed-feature baseline decision leaves those features red until a test title names the criterion it covers. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…release boundary Record both MCP11 reference-host cycles (Claude Code 2.1.263, Codex 0.153.0) against the 0.10.0 release candidate: L4 fixtures, signed audit/UAT receipts, completion rows, and the copied evidence under docs/dogfood/mcp11-0.10.0/. The validation ledger now carries the two evidence records, J13 and MCP11 are validation-active, and the validator holds the reference-host label to the recorded evidence in both directions while requiring a resolving test reference from every other validation-active MCP row. Restate two criteria whose wording pinned the pre-evidence boundary (F-182eaa53/AC-6d69273c, F-c2d7dc78/AC-36842395), refresh the live host matrix (Cursor verified, Antigravity timing out), and correct the runbook where the L4 pre-push tier and the covers-token placement were described wrongly. The cycles were driven by automation at the maintainer's instruction, including the sign-off confirmations; the runbook, the evidence documents and the changelog say so. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…-6349870d) Managed AGENTS.md and CLAUDE.md render per schema, with the 0.1 bytes pinned so the older workspaces stay byte-identical. Gate output now names the covers token for unbound criteria, the create-feature refusal names the replacement instead of only rejecting the old key, and the MISSING_TESTS remedy covers both schemas. `clad update` refreshes a workspace already migrated to 0.2. Catalog pin 140,498. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Strict pre-push gate GREEN, so the entry moves to done. Sibling attestations re-verified and the README counts refreshed to 287 done of 302 features across 3,811 tests. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…it its harness
Three arms on one task: no engine, 0.9.4 from npm, and the 0.10.0 candidate
packed from this branch. The deterministic side-tables were locked 2026-09-08
against the frozen engines — 16 rows, 0 mismatches — before any comparison cell
ran, so the rules cannot follow the numbers.
Registered here: hypotheses G1-G6 (honesty delta, completion, cost
non-regression, migration, context parity, the default path), refutation rules
R1-R6 with the action each one forces, and the decision rules that classify a
mismatch. The campaign ledger caps spend at $40 and is checked before each cell
is spawned.
The harness lives under scripts/ab-abc: the cell builder, the live runner, the
budget ledger, the scorer, the renderer, the agent-free side-table runner and
its locked expectations, the stdio MCP client, and the fixture template every
arm starts from. No live comparison cell has been recorded yet; the single run
described in the case document is the instrumentation pass, and it is written
as such.
Also pins which catalogue byte count is authoritative: the release pin is the
140 498 B compact stableJson({tools, resources, prompts}) that
`npm run validate:spec-0.2` measures over 27 tools, while the harness's 158 700 B
and 60 135 B are the pretty-printed whole result and its compact `tools/list`
slice — three serialisations of one catalogue.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…pair the harness reporting 13 live cells (12 counted; the instrumentation pilot excluded per pre-registration), same-task n=3 medians C/B cost 0.81x turns 0.78x wall 0.71x, honest finish 3/3 vs 3/3, quality/coverage/oracle tied across all arms (NULL as pre-registered), all GO hypotheses met and no STOP condition fired; harness: mismatch file refresh, rescore.sh reproducibility, render over the campaign root; changelog gains the adopter-guidance Changed bullet and the campaign Added bullet. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…uild Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ters An assurance level the project refuses now names its reason before the run starts. A receipt imported on the command line is verified against the registered signers. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
43 deterministic rows covering the release's adopter-visible surfaces. A static coverage test over the release notes and the features added since 0.9.4. Host probes for four hosts, recorded alongside the deterministic table. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…t probes All 43 side-table rows are classified and pinned on the build that ships, so any difference in an exit code, byte count or literal now fails the run. The two rows that found product faults were repaired by F-18a5883a and re-run against the repacked engine before being locked on that run. The host probes ran on four hosts, with Antigravity's cause written down. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Attestation seals now enumerate directory modules and runner controls from git membership (tracked plus untracked-not-ignored) minus desktop metadata files. The receipt census skips desktop metadata as well. An ignored but directly referenced file now reads as absent, the way a clean checkout sees it. The scenario battery gains the pre-registered row S-C5. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
289 of 304 features done; attestation re-issued over the verified tree. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…urth build Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
0.10.0 — Spec schema 0.2: every acceptance criterion has an address a test can claim
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
2026-09-10 ·
develop→main· release v0.10.0Spec schema 0.2: a feature says what it is for before what it does, every acceptance criterion has an address, and a test claims a criterion by naming it at the start of its own title. One compiled model answers the questions that used to be asked of four, each level of assurance has a named check profile recorded in a new attestation format, and a reviewed migration carries an old project across.
Added
▸ Spec schema 0.2. Purpose-first features, addressable criteria, test-title binding, a compiler with typed registries, transactional spec editing, a migration preview from 0.1, a proof and evidence kernel, and five verification profiles from feedback to release.
▸ One compiled graph model with layers for what the spec declares, what the documents link, what the source references, and which tests the gate actually observed.
▸
clad relocate-generatedpreviews and, with--apply, moves the generated files underspec/generated/as one recoverable transaction. Opt-in; the current layout stays supported, and a 0.2 workspace explains its generated files inspec/generated/README.md.▸ A release gate for the 0.2 validation work. The validation ledger names the scenarios that block this release; the release validator exits nonzero while any lacks discriminating evidence, and reference-host evidence counts only when its receipt is signed by a registered issuer.
▸ The release was measured, three ways. Against no engine and against released 0.9.4 on the same host, model and task (
docs/ab-evaluation/case-version-abc-094-vs-0100.md); and every change in this section has a recorded scenario row in a 44-row deterministic table locked on the shipped build, with a CI guard that fails when a release-note item has no row (docs/ab-evaluation/case-0100-feature-scenarios.md). Host probes on Claude Code, Codex and Cursor completed read and write cycles; Antigravity fails for a host-side reason recorded there.Changed
▸ Completeness is judged from structure alone, and the completion, push and release profiles now block on warning-level drift findings.
▸ A project's own instructions say how a test claims a criterion — the managed
AGENTS.mdandCLAUDE.mdsections, the gate's unproven-criterion report, the missing-test guidance, and the refusal of the old binding field all name the same rule; 0.1 wording is unchanged.▸
clad donereports how independently the work was verified, andindependence_policy: requireturns that label into a decision.Removed
▸ The experimental headless loop and its
runcommand, the adapters that served only it, and therunskill. Nothing ever ran it.Fixed
▸ An attestation stamped on a working machine now matches the one a clean checkout computes. This PR's first CI run went red on every completed feature because the sealed record had been stamped from a working copy that held desktop metadata files and ignored fixtures inside sealed folders. The record now enumerates directory contents and runner configuration from what git tracks (plus untracked files git does not ignore), never from stray files; files inside a nested repository or a submodule are treated as absent rather than sealed. A new scenario row stamps a record on a deliberately messy copy, clones the commit, and checks it there.
▸ A workspace holding a signed review could never record a verification; the gate and the writer now read the same set, and a refusal names its cause.
▸ Two command-line paths found by the scenario battery: asking for a one-run assurance level the project cannot grant now says why instead of failing quietly, and a receipt imported on the command line is checked against the project's registered signers the same way the host tool checks it.
▸ A renamed test keeps its binding, graph code no longer reaches into gate code, the host support table was refreshed against live runs, and transitive dependency advisories are patched (
npm auditclean as of 2026-09-09).Verification at the tip: a clean clone on
node:22(non-root, the CI sequence, no re-stamp) rebuildsdist/clad.jsbyte-for-byte, passes 336 test files / 3,835 tests, passes the strict pre-commit gate with the committed attestation untouched, and passes the release profile; the 0.2 release validator and conformance suite pass; the 44-row scenario table is locked on the shipped build; the tarball carries no harness directories or key material.🤖 Generated with Claude Code