Repository navigation
v0.26.0: Spec v0.3.0 and Runtime v0.39.0 pins; dialect document checks aligned (#86); dispatch admission acceptance (#147); the 0.3.0 recording set (#174) - #187
Conversation
…ntime v0.39.0 The installed retained-column/1 tuple moves from the v0.3.0-rc.2 candidate (bcac15b7) to the published v0.3.0 (27cb29bf, the signed tag). Schema and corpus are byte-identical; the leaf corpus moves to testdata/v0.3.0 with the final archive's release identity and retained-column inventory. The rc.2 directory is removed: no test needs the candidate's bytes. The candidate's handwritten selection vector stays, and a new test holds that its identity is refused by the selector, by a capability report and by the public route. The retained-column companion pin moves from v0.39.0-alpha.2 to v0.39.0 (12793d2d), whose selector is retained-column/1@27cb29bf. Tests that named RC2 are renamed TestSelectedLeaf*; the partitions, must-run lists and the CI evidence configuration follow. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
The shared fixtures (vectors/preparation, the specification's dialect vectors) go through the pinned Runtime v0.39.0 document tools and the Runner's reader: every document, version 2, version 3 bound and version 3 published unbound, is valid to both with the same canonical bytes and digest, and that digest is the identity each fixture records (the preparation's mappingDigest, the binding's published digest, a named dialect's release identity). Five malformed changes are refused by both. Document validity is kept apart from readiness: kinds http, sql and web are encoded by the Runtime, refused by its validator and refused by name by the Runner; valid operation and research documents are not prepared without installed profiles, binding at import or source records. The Runner calls no Runtime document tool at run time; the boundary and its alternatives are recorded in docs/design/dialect-document-checks.md. The three tests must run and pass in chain-tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
Six tests, each named for an acceptance case, run governed manual runs
against the real Runtime with a transport peer standing in for the anchored
authority: omitted-dependency substitution (a caller-supplied closure, a
substituted release dependency, an omitted lock/config/Pack, a substituted
Runtime), withdrawal/enqueue/dispatch races (before enqueue, between enqueue
and dispatch, before the start commitment, after it with a sibling queued),
lost admission responses (reserve and start), worker restart and fencing (a
new epoch fences the old reservation; another epoch's reply, stale-epoch and
an epoch written as a JSON number are refused), identity revocation, and
pre-withdrawal restore (a restored intent answered recovered or refused, a
restored queue after withdrawal). No case needed a new mechanic.
The fence is described in ADR-0025's names ({resource, owner, epoch}) in
docs/design/manual-admission-gate.md; the manual-gate step requires the six
tests to run and pass.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
-rc.N is a candidate of the complete milestone; -alpha.N is a scoped cut for a named consumer that never graduates, as the development kit's release policy defines them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: kikashy <35789537+kikashy@users.noreply.github.com>
|
Verdict: MERGE AND RELEASE — 0 HIGH, 1 MEDIUM (cured by the v0.26.0 notes, no code change needed), 6 LOW. Depth 2: every material PR in v0.25.0..8a1ef95 has its own review record. Clean-room review: runner PR #187 (v0.26.0 final prep), plus the pre-release pass over v0.25.0..8a1ef95
Depth 1: PR #1871. Pins
2. #86, the dialect document checks
3. #147, the dispatch admission acceptance cases
4. docs/releasing.md
ProbesAll the probe code was a test-only file in
MutantsEach mutant was applied to the room's clone and reverted. The tests ran against the pinned Runtimes.
Findings
No HIGH. All the pinned bytes are exact and verifiable, rc.2 is admitted nowhere, every #147 safeguard held under the race it names (including real-concurrency probes), and the range has no security-boundary defect. Depth 2: the pre-release pass over v0.25.0 (604c1b7)..8a1ef95
No material PR in the range is unreviewed, so no extra depth-2 probes were needed. Public changes for the release notes
What was not established
|
The v0.26.0 final's pull request: the Spec
v0.3.0and Runtimev0.39.0pins, and the rows #86, #147 and #174 of the milestone. Release notes and the tag are separate.Pins
v0.3.0. The installedretained-column/1tuple moves from thev0.3.0-rc.2candidate (bcac15b7…) to the publishedv0.3.0at its signed tag's commit27cb29bf13e4a2d58d69fe19c7ebfeb762b014fc. Schemasha256:0cb49f23…and corpussha256:17b16ff7…are byte-identical to rc.2. The leaf corpus is re-imported from the verified archive (sha256:6469a866…) intointernal/retainedcolumns/testdata/v0.3.0/, with the archive'srelease-identity.jsonandreleases/v0.3.0.retained-column.json(filesha256:c8e489b2…) asrelease-inventory.json. The rc.2 directory is removed: no test needs the candidate's bytes. A new handwritten selection vector names the final tuple; the rc.2 one is kept as history.v0.39.0. The retained-column companion pin inscripts/checks/build-pinned.shmoves fromv0.39.0-alpha.2(57c854ab…) tov0.39.0(12793d2d…, the signed tag's commit), whose selector isretained-column/1@27cb29bf…. Both selected real-Runtime lifecycles pass against it. The ordinary, earlier-Runtime, old-Runner and Gateway pins do not move.TestSelectedLeaf*; the unit partitions, the chain-test must-run list,tools/test_ci_evidence.pyand.github/ci-evidence.jsonfollow. New:TestSelectedLeafRefusesTheCandidateIdentityholds that the rc.2 identity is refused by the transport selector, by a capability report and by the public route before any body is read.This is a change to a public surface:
/v1/health's andverify-preparation's reported conversion capability now name Spec0.3.0at27cb29bf…; a caller still selecting the candidate tuple is refusedcapability-unsupported.#86 — dialect document checks aligned with the Runtime's tools (bounded)
internal/runner/dialect_tools_test.go, run inchain-tests(must run and pass) against the pinned Runtime v0.39.0:vectors/preparation, which the Spec publishes as its dialect vectors: 47 vectors, version 2, version 3 bound, version 3 published unbound) isdocument-validto the Runtime and read by the Runner, with identical canonical bytes and digest; that digest is each fixture's recorded identity (the preparation'smappingDigest, the binding's published digest), and a named dialect's is the release identity the Runner records. Existing v2 and bound/unbound v3 fixtures keep their identities.http,sqlandwebsources are encoded by the Runtime, refused by its validator and refused by name by the Runner; valid operation and research documents are not prepared without installed profiles, binding at import or source records.docs/design/dialect-document-checks.md: the Runner keeps its in-process reader and calls no Runtime document tool when it runs anything (no dependency cycle, no per-stage subprocess, no second validator); CI holds the two together. The Runtime's document tools are pinned to Specb7cc8906…(notv0.3.0); the tests name that revision and fail if the Runtime moves it.#147 — dispatch admission acceptance
internal/runner/manual_admission_acceptance_test.go, six tests named for the acceptance cases, against the real Runtime, required by themanual-gatestep: omitted-dependency substitution, withdrawal/enqueue/dispatch races, lost admission response, worker restart and fencing, identity revocation, pre-withdrawal restore (20 subtests). No case revealed a missing mechanic, so no production change. The fence is described in ADR-0025's names (owner,expiry,epoch, fence{resource, owner, epoch}) indocs/design/manual-admission-gate.md; the Runner reads an epoch only as a canonical decimal string, and a JSON number is refused (tested). The agent package is not a dependency.#174 — the 0.3.0 recording set: not published
The set is not generated in this pull request. All 47 scenarios are ordinary mapped-source runs (mapping v2, dialect v3 bound/imported, research, endpoint scope). The Runtime v0.39.0 evaluates Core
0.3.0, but the Runner admits Core0.3.0only on the selected retained-column path: an ordinary release is evaluated, and its report checked, under0.2.0-draft(supportedEvaluatorSpec,expectedEvaluatorSpec). Producing the 47 recordings under0.3.0needs an ordinary Core0.3.0admission in the Runner first, an admission change no row of this milestone names, so all 47 scenarios are blocked for that one reason. No claim of0.3.0producer coverage is made. The historical0.2.0-draftset is unchanged.Also
docs/releasing.mdnames the two prerelease forms:-rc.Na candidate of the complete milestone,-alpha.Na scoped cut for a named consumer that never graduates.Safeguards and mutants
Each new safeguard test was run against a broken copy of the code it guards and failed:
TestSelectedLeafRefusesTheCandidateIdentityand the installed-identity test fail;webkind refusal removed → the readiness test fails; the dialect digest taken without canonicalization → the agreement test fails;Checks
jpdev check --changed origin/main(devkit v0.11.0), locally:Builder review: same-vendor (Claude Opus build); not a cross-vendor claim.
🤖 Generated with Claude Code