ci: advance the released suite pin to the rc.9 release commit - #46
Merged
Merged
Conversation
ivanopcode
force-pushed
the
task/TASK-260824-1n98b3-released-suite-rc9
branch
from
August 24, 2026 19:47
9db6d90 to
2385181
Compare
RELEASED_SUITE_PIN moves from 0c81c1f8 (protocol 1.0.0-rc.6) to
0ed5c691, the v1.0.0-rc.9 release commit on curator-spec main. That
revision publishes the schema-8 suite this manager already qualified
against on all three runners.
The pin does not move alone, because nothing in this repo lets it. Three
independent places authenticate the released identity before reading a
byte of it, and each is advanced here:
- tests/test_protocol_conformance.py binds the manifest digest and
protocol_version, the release record it reads (now
release/1.0.0-rc.9.json and its claim_v5 block instead of rc.6's
claim_v3), and the qualification vector's protocol_version, which
rc.9 moved in lockstep;
- tests/test_build_metadata.py binds the same manifest digest before
reading the marker-v2 writer golden;
- the Windows shard verifier pins the protocol revision itself, plus
the sha256 of every audited test file and an ordered node-id
baseline.
Leave any one of them behind and the run goes red at collection rather
than silently re-baselining onto a different suite. That is the point.
rc.9 is a strict superset of rc.6 -- no file removed, 6 changed, 243
added -- so the only effect on collection is 8 more
test_rc6_generated_schema_case_is_consumed parametrisations, from the
eight invalid-v8 cases rc.9 adds under agent-skill-v6 and csk-skill-v6.
The Windows baseline therefore grows 1045 -> 1053. The new nodes inherit
the footprint, atomic cluster and shard of the 102 existing rows of that
same function, which are uniform; no other node changes shard or
footprint, and only source_line shifts, because the audited file gained
lines above them. The audit revision records that, with the previous and
new digest of the audited file.
The test names keep their rc6_ prefix deliberately. They are the ordered
node-id contract the shard manifest and the isolation classification are
keyed on; renaming them would rewrite every row of both for no
behavioural gain.
One detail worth naming: the digest is not repeated in ci.yml. Now that
rc.9 publishes the qualified candidate's bytes, the released manifest
digest and the candidate declaration's digest are the same string, and
test_no_rc6_literal_survives_outside_the_declaration forbids that string
from appearing in the workflow. The comment says so rather than
weakening the gate.
The comment above that binding is advanced with it: it named the rc.6
candidate suite as the source of the writer golden, which stopped being
true the moment the digest below it moved. It now names the released pin
the same way test_protocol_conformance.py does, so neither file claims a
revision it no longer reads.
ivanopcode
force-pushed
the
task/TASK-260824-1n98b3-released-suite-rc9
branch
from
August 24, 2026 20:10
2385181 to
6d7f473
Compare
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.
Landing-order step 9, cocoaskills side (TASK-260824-1n98b3).
RELEASED_SUITE_PINmoves from0c81c1f8d5321d822be2a2817b05aea03e656e15(protocol1.0.0-rc.6) to0ed5c691e9208eea52f21db2fc05e226ce3516fd— thev1.0.0-rc.9release commit oncurator-specmain. That revision publishes the schema-8 suite this manager already qualified against on all three runners (run 32756144649, six candidate jobs,csk-schema8-results.xmltests=183 failures=0 errors=0 skipped=0).The pin cannot move alone
Three places authenticate the released identity before reading a byte of the suite. Leave any one behind and the run goes red at collection rather than silently re-baselining — which is the property worth keeping, so all three advance in the same commit:
tests/test_protocol_conformance.pyprotocol_version, the release record it reads, the qualification vector's versionsha256:803918bf…,1.0.0-rc.9,release/1.0.0-rc.9.json+claim_v5tests/test_build_metadata.pysha256:803918bf….research/TASK-260803-2ol7ok_*0ed5c691, new digest, 1053 nodesCollection delta: 8 nodes, and only 8
rc.9 is a strict superset of rc.6 — 0 files removed, 6 changed, 243 added — so the only effect on
--collect-onlyis eight moretest_rc6_generated_schema_case_is_consumedparametrisations, from the eightinvalid-v8-*cases rc.9 adds underagent-skill-v6andcsk-skill-v6:p00-contract-and-registryp01…p05The eight new rows inherit the footprint, atomic cluster and shard of the 102 existing rows of that same function — verified uniform before copying, not assumed. No other node changes shard, cluster or footprint. What makes the classification diff large is
source_line: it is re-measured from the current file for every row, and the audited file gained lines above most of them.audit_revisionsrecords the change with the previous and new digest.Test names keep the
rc6_prefixDeliberately. They are the ordered node-id contract that the shard manifest and the isolation classification are keyed on; renaming them would rewrite every row of both for no behavioural gain. The module comment says so, and says what the module actually authenticates.
One deliberate omission
The released manifest digest is not repeated in
ci.yml. Now that rc.9 publishes the qualified candidate's bytes, the released digest and the candidate declaration's digest are the same string, andtest_no_rc6_literal_survives_outside_the_declarationforbids that string from appearing in the workflow. The comment explains the situation rather than weakening the gate.Local evidence (darwin, py3.14)
Run directly, real exit codes:
mypy—Success: no issues found in 75 source files, exit 0pytest tests/test_protocol_shards.py tests/test_protocol_shard_audit.py tests/test_ci_workflow.py tests/test_candidate_suite.py— 74 passed, exit 0pytest tests/test_builds_go_v1.py tests/test_build_metadata.pyagainst the rc.9 root — 228 passed, exit 0merge_protocolruns it — real--protocol-checkoutat0ed5c691(clean), clean source checkout, fresh--collect-onlyoutput — exit 0 for all six shard ids:{"ok": true, "baseline_nodes": 1053, "classified_nodes": 1053, "gap": 0, "overlap": 0, "protocol_checkout_head": "0ed5c691…"}, selections summing to 1053tests/test_protocol_conformance.pyagainst the rc.9 root — result recorded in the PR thread; this is the suite the decisive Windows shards run post-merge, so it is run locally before merge rather than discovered after it