Repository navigation
039: realize amend-factory-mcp-conformance-auth-profile tasks § 2 (hosted authorization block, offline checks, contract-v4.1) - #1289
Conversation
…change task 2.1) Specify, clarify (no question: the ratified packet decides every material question; accepted by the lane's coordinator), plan, seven requirements-quality checklists at maximum coverage, tasks and analyze round 1 for the realization of the ratified change amend-factory-mcp-conformance-auth-profile (#1274, landed 93d13d6). The spec indexes the ratified delta's 19 scenarios and adds only the realization decisions the packet delegates (research R-1 to R-17). Analyze D1 (constitution IV) adds one README Documentation-index bullet. No schema, validator, example or test byte moves in this commit. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tests only: no schema, example or validator byte moves. Run against main's validator and schema at this commit, every new refusal fails (main refuses any block as schema_oneOf at /service and the auth concern as schema_enum, and the deployed example does not exist yet). The characterization tests pass on main: a not-deployed service carrying auth (schema_oneOf at /service), a block-free stdio declaration, the two M5 classification tests and the two per-domain vocabulary tests. Two existing tests are amended because the ratified change reverses their premise (design Compatibility: "A deployed declaration without the block, which is valid today, becomes invalid (hosted_auth_missing)"): test_resource_identity_without_optional_format_checker and test_resource_uri_is_https_without_fragment_or_userinfo now give the deployed service a valid issuer-assigned block (research R-15). Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…task 2.2) verification.md sections 3 and 4: the test commit run against main's validator and schema (every new refusal red, the six characterization tests green), and the two classification tests red against a mutant of main's validator with check_mapping's comparison removed, green against main's own (design D8). Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (change task 2.3)
contracts/factory-mcp/declaration.schema.json: an optional, closed auth object
in the deployed branch of service (issuer, algorithms, audience {binding,
value}, metadata_path, evidence_ids, gap_ids; design D1, research R-1, R-4,
R-12), and the auth key in the evidence and gap concern vocabularies
(design D5). No format keyword on the new strings: their rules are semantic
checks (research R-4). schema_version stays 1 (OQ-5).
contracts/factory-mcp/examples/declaration-deployed.example.json: the
not-deployed example made deployed, with a gap-supported block over reserved
.test names only (research R-16).
Lane: openxfactory-5 (openXfactory-5)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sk 2.4) scripts/validate-factory-mcp.py: check_service, called where check_catalog already checked the service, reports for a deployed service invalid_resource_uri (unchanged), auth_resource_query (a ? before any #, research R-5) and hosted_auth_missing; check_auth reports invalid_issuer, auth_rs256_missing, auth_algorithm_forbidden, auth_algorithm_unadmitted, auth_audience_unbound, auth_metadata_path_mismatch (RFC 9728 3.1, skipped while the URI is invalid, research R-6) and unsupported_auth, at the locations design D7 gives. The tools' citation loop is shared as cite(), so the block's ids resolve exactly as a tool's (missing_support_reference, duplicate_support_reference at /service/auth/...; design D5). tests/factory-mcp: 108 passed, 300 subtests passed (venv from CI's lock). Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs/factory-mcp-conformance.md: the amending change in its Governed by line; the deployed example's command and expected result; a Hosted authorization block section (shape, the stdio rule, issuer, algorithms, audience, metadata path, support, and the code table of design D7); the narrowed reading of Unavailable dependency (an error-inventory code is an execution failure, a result status a completed evaluation); the per-domain error-vocabulary statement; the engineering and operations domains' positions; and links to feature 039's records. The release paragraph moves at the cut (task 2.6). Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
verification.md section 5: tests/factory-mcp after each implementation commit (108 passed, 300 subtests at the validator and runbook commits), the starting-point probes re-run, and the check that no touched file is a member of the contract-v4.0 release inventory. The cut, the gates and the full suite follow the version claim on #630 row 4. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he first time with its authorization block; the clearing family joins the inventory at its floor (change task 2.6) The candidate commit of contract-v4.1, claimed as row 4 on #630 (comment 6086467830), for amend-factory-mcp-conformance-auth-profile task 2.6 (Speckit 039). One atomic commit: - contracts/manifest.yaml: contract_bundle_version contract-v4.1, and the factory-mcp-declaration row (schema_version 1, per-file sha256 5e3cf502...), a registered row and not a release-inventory member; - contracts/factory-mcp/declaration.schema.json: the title no longer says "Unreleased" (the row's digest is of these bytes); - contracts/releases/contract-v4.1.digests.yaml: built by scripts/validate-contract-release.py build from these bytes. Against contract-v4.0: 283 -> 342 entries, 59 added (the clearing family at CLEARING_RELEASE_FLOOR (4, 1), byte-unchanged since contract-v4.0), 0 removed, 8 digests moved, each attributed in the changelog; - contracts/CHANGELOG.md: the contract-v4.1 entry; - contracts/README.md: two native-index rows for the declaration and its validator; - tests/intent-compliance/test_release_boundary.py: FEATURE_SUCCESSOR_13 in both match arms and the measured boundary paragraph (zero intent paths moved since contract-v4.0); the inventory was built after this edit; - docs/factory-mcp-conformance.md: the unreleased wording moves to contract-v4.1. No tag is published: the annotated tag follows the landing, on its own word. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes #1284 (035 PR-1, council-convening foundation). One conflict, in contracts/README.md: both sides appended native-index rows after the chain-anchoring rows; both kept, main's council-convening rows first. contracts/manifest.yaml auto-merged: 185 per-file digests verify. #1284 moved two release-inventory members (contracts/manifest.yaml and contracts/README.md), so the forward-only re-cut of contract-v4.1 follows in the next commit. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
) (change task 2.6) #1284 landed on main after the first candidate (38c7881, cut from 93d13d6) and moved two release-inventory members, contracts/manifest.yaml (the signed-execution-chain-digest-construction row's sha256, 0dfc2e8e -> ef157d88: two digest subjects added) and contracts/README.md (the council-convening native-index rows). Main was merged in (24699ca, never a rebase); this commit rebuilds contracts/releases/contract-v4.1.digests.yaml with scripts/validate-contract-release.py build from the merged bytes and re-attributes the contract-v4.1 CHANGELOG entry by inventory diff and by a manifest row diff against the contract-v4.0 tag: - inventory vs contract-v4.0: 283 -> 342, 59 added (clearing family at its floor, byte-unchanged), 0 removed, 8 digests moved, each attributed; - manifest rows vs contract-v4.0: 202 -> 204 (factory-mcp-declaration, this cut; openxwallet-pin, #1026), one changed (digest-construction, #1284); - the number stays contract-v4.1 (claimed on #630, 6086467830). No tag is published. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on the branch and main, the full suite and the out-of-tree check; tick T025 to T027 (change task 2.7) - Section 6: the contract-v4.1 number and its #630 row-4 claim; the first candidate 38c7881 and its checks; the forward-only re-cut 6300772 after #1284 merged into main as 9a272c6 (inventory rebuilt by the tool, re-attributed by inventory diff); release-tag-gate on emulated merge trees; no tag published. - Section 7: every gate CI runs, at 6300772 and at main 9a272c6, in the same clone kind. Two non-zero rows explained: release-tag-gate on the bare branch tip (CI judges the merge tree, which passes) and verify-commit on main (seven members main moved since contract-v4.0, which the cut closes). doc-health: the branch drops main's seven release-inventory drift findings and adds none. - Section 8: tests/factory-mcp 108 passed, 300 subtests; the full suite 1 failed / 9546 passed vs main 1 failed / 9526 passed, the same environmental failure and the same 7 skips, the +20 all factory-mcp; doc-health-py314's command under Python 3.14, equal on both sides. - Section 9: the out-of-tree engineering check by --snapshot only, with the expected hosted_auth_missing and auth_rs256_missing signals; no codex bytes, paths or names in this tree. - Section 10: git diff --check, the closing-keyword scan and the public-repository scan, all clean. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@codex review |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
🔵 Needs a closer look
The security-sensitive authorization contract and atomic bundle release require final human validation of semantics and release provenance.
0 open findings
What changed in this PR
Implements feature 039’s hosted Factory MCP authorization profile and cuts the additive contract-v4.1 release.
Changes:
- Adds the closed authorization schema, offline validation rules, diagnostics, and synthetic deployed example.
- Adds comprehensive conformance tests and Speckit implementation records.
- Registers the contract and updates release inventory, changelog, and documentation.
| File | Description |
|---|---|
README.md |
Indexes feature 039. |
contracts/CHANGELOG.md |
Records the v4.1 release. |
contracts/README.md |
Indexes the schema and validator. |
contracts/factory-mcp/declaration.schema.json |
Defines the authorization block. |
contracts/factory-mcp/examples/declaration-deployed.example.json |
Adds a deployed example. |
contracts/manifest.yaml |
Registers v4.1 and the schema. |
contracts/releases/contract-v4.1.digests.yaml |
Pins the release inventory. |
docs/factory-mcp-conformance.md |
Documents authorization behavior. |
scripts/validate-factory-mcp.py |
Implements offline authorization checks. |
specs/039-factory-mcp-auth-profile/spec.md |
Defines feature requirements. |
specs/039-factory-mcp-auth-profile/plan.md |
Records implementation planning. |
specs/039-factory-mcp-auth-profile/research.md |
Records design decisions. |
specs/039-factory-mcp-auth-profile/data-model.md |
Documents the data model. |
specs/039-factory-mcp-auth-profile/contracts/interface.md |
Documents interface changes. |
specs/039-factory-mcp-auth-profile/quickstart.md |
Provides validation commands. |
specs/039-factory-mcp-auth-profile/tasks.md |
Tracks implementation tasks. |
specs/039-factory-mcp-auth-profile/verification.md |
Records test and gate evidence. |
specs/039-factory-mcp-auth-profile/checklists/acceptance.md |
Captures acceptance checks. |
specs/039-factory-mcp-auth-profile/checklists/compatibility.md |
Captures compatibility checks. |
specs/039-factory-mcp-auth-profile/checklists/contract.md |
Captures contract checks. |
specs/039-factory-mcp-auth-profile/checklists/diagnostics.md |
Captures diagnostic checks. |
specs/039-factory-mcp-auth-profile/checklists/governance.md |
Captures governance checks. |
specs/039-factory-mcp-auth-profile/checklists/outcomes.md |
Captures outcome checks. |
specs/039-factory-mcp-auth-profile/checklists/requirements.md |
Captures specification checks. |
specs/039-factory-mcp-auth-profile/checklists/security.md |
Captures security checks. |
tests/factory-mcp/test_factory_mcp_conformance.py |
Tests authorization behavior. |
tests/intent-compliance/test_release_boundary.py |
Advances the release boundary. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Takes #1290, #1287 and #1288 for the landing round. None of them touches the release surface: contracts/manifest.yaml, contracts/releases/, contracts/CHANGELOG.md and contracts/README.md are unchanged, and no contract-v4.1 inventory member moved. The three manifest rows whose files moved (openspec-cli-pin, openxwallet-pin, domain-factory-conformance-validator) carry no per-file sha256. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes #1294 so the landing merge CI validates is the tree that lands. #1294 touches no release file: contracts/manifest.yaml, contracts/releases/, contracts/CHANGELOG.md and contracts/README.md are unchanged, no contract-v4.1 inventory member moved, and no submodule gitlink moved. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…landing heads (change task 2.7) Answers Copilot's review thread on the verification record at cb9b27f: change task 2.7 asks for every gate and the full suite at the head that lands, and sections 6 to 10 stopped at the verification head 6300772. Section 11 records the landing round on the realization word ("Land when green, waive Codex (Recommended)"): the two merges of main (07623c7 at 841e86f, cb9b27f at 33d2a56), why no re-cut (no release file or inventory member moved; the inventory rebuild is byte-identical at both heads), every gate at both heads, the local full suite at 07623c7, CI's pytest-suite at cb9b27f (run 38100661463: 10195 passed, 0 failures), and what the head that lands adds (this record only, re-checked by CI's required checks before landing). Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes #1295 and #1296, which landed after the 33d2a56 merge, so the landing merge CI validates is the tree that lands. Neither touches a release file: contracts/manifest.yaml, contracts/releases/, contracts/CHANGELOG.md and contracts/README.md are unchanged, no contract-v4.1 inventory member moved, and no submodule gitlink moved. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the head that lands (change task 2.7) main moved to 978e9cb (#1295, #1296) after the section was written, and 0d37508 merged it in. Section 11 now lists all three merges, adds the 0d37508 column (every gate 0, inventory rebuild byte-identical, verify-commit PASS, release-tag-gate on the recreated merge tree 1609bed1 with no error and no warning, doc-health the cb9b27f set, tests/factory-mcp 108 passed), and states the head that lands (0d37508 plus the record) and how CI judges a later merge of main before landing. Lane: openxfactory-5 (openXfactory-5) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Lane: openxfactory-5 (openXfactory-5) LANDING — lane openXfactory-5, session bbe4d255-02db-4578-840b-09924442e544@Eagle, 2026-10-11T02:17:26Z, PR #1289 into opensoft/openxFactory main |
|
Sorry @brettheap, your pull request is larger than the review limit of 150,000 diff characters |
|
Lane: openxfactory-5 (openXfactory-5) LANDED — lane openXfactory-5, session bbe4d255-02db-4578-840b-09924442e544@Eagle, 2026-10-11T02:17:46Z, PR #1289 into opensoft/openxFactory main → merge b27ae7a; 039: realize amend-factory-mcp-conformance-auth-profile tasks § 2 (hosted authorization block, offline checks, contract-v4.1) |
…into the Phase 5 binding branch PR-2 and PR-3 have landed. This merge takes main's code and corpus as landed, and Phase 5's own files: - resolution.py: the order keeps A4 after step 5, then PR-2's `declared = _council_and_class(...)`; - the README keeps PR-3's snapshot row and Phase 5's corpus and binding rows; the two test files keep both sides; evidence.md is main's, followed by § Phase 5; - every vector under vectors/assignment and vectors/resolution that main carries is main's, byte for byte. The retry vectors are PR-3's builder output, and Phase 2's admission vectors are PR-2's. Phase 5's binding is NOT yet on them: the next commits re-author Phase 2's through scratch author_admission_vectors.py and regenerate the retry vectors from the builder (`tests/council_convening/assignment_vectors.py`), never by hand. At this commit the self-test reports those vectors as identity-map-missing, as expected; - openXwallet moves to main's pin 815b86cef (#1290). Lane: codexfactory-2 (codeXfactory-2) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ration PR-2 (#1294, 33d2a56) and PR-3 (#1296, 978e9cb) landed; their branches are deleted, so main is the source for Phases 2 and 3 from here on. Main also brings #1287, #1288, #1295 and #1289. Resolution: - resolution.py: the admission order keeps Phase 5's A4 (`_workflow_revision`) and Phase 2's final step 9, which reads the `declared` projection entry `_council_and_class` returns. - The invocation-directory check takes main's separator-terminated prefix (the PR-1 follow-up) and keeps the mode name, so `select` says so. - The family README gains Phase 3's snapshot and assignment row beside Phase 5's binding row; the corpus contract's `issued` row carries both Phase 4's `public_key` amendment and Phase 3's live-snapshot soundness note. - evidence.md: Phase 3's final records go at the end of § Phase 3, before § Phase 4 (as merged from 03cb77e) and § Phase 6. - Tests: Phase 3's final assignment-area docstring (snapshot half shared, retry vectors the consumer's) inside Phase 6's all-areas test; Phase 3's pre-review `check` tests kept beside Phase 4's and Phase 5's. - refusal_code is unchanged: 92 codes, one copy each of binding_unresolved and broker_capability_insufficient, at Phase 4's position. - The conformance index is regenerated: 641 vectors. Lane: codexfactory-2 (codeXfactory-2) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>




Lane: openxfactory-5 (openXfactory-5)
DRAFT: realization of
amend-factory-mcp-conformance-auth-profile, tasks § 2 (Speckit feature 039)This pull request realizes the ratified change's tasks § 2 as Speckit feature
specs/039-factory-mcp-auth-profile.It covers the hosted authorization block on a deployed factory MCP service and
the validator's offline checks of it. It also carries the narrowed Unavailable
dependency reading (M5), the per-domain error vocabularies and the contract
cut
contract-v4.1.The realization word is given (task 3.2). Brett Heap, 2026-10-10
(23:2xZ), chose the option labelled "Land when green, waive Codex
(Recommended)". That option merges
maininto the branch, re-cutsforward-only if
mainmoved the release files, and lands by merge commit oncethe pull request is green with Copilot clean at the final head. Codex is
waived. The lane's coordinator lands the pull request and publishes the
contract-v4.1tag after the merge. This pull request edits no file underopenspec/changes/. Ticking the packet's task boxes and archiving the changeare landing bookkeeping, done after the landing.
Authority, verbatim
option labelled "Ratify, OQs as recommended (Recommended)". The packet
landed as amend-factory-mcp-conformance-auth-profile: auth block with an RS256 baseline, M5 narrowed to error codes, per-domain error vocabularies (ratified) #1274 (
93d13d6c) on his words "Land all three, waive Codex(Recommended)" and "land amend-factory-mcp-conformance-auth-profile: auth block with an RS256 baseline, M5 narrowed to error codes, per-domain error vocabularies (ratified) #1274 and Add the OpsxFactory-Gateway-Install row to the estate repository inventory (refs #1259) #1276 when green".
typed "usage reset, resume all. read handoff and resume and fan out wide and
do as much as possible in parallel". He then chose the option labelled
"Start both now (Recommended)".
labelled "Land when green, waive Codex (Recommended)".
contract-v4.1is claimed as row 4 on Shared substrates — claims #630 (comment6086467830, 2026-10-09T18:02:11Z).Traceability
a8e91bf8bd76faf4verification.md§§ 3-4)5ffbd7b2authblock on the deployed branch, and theauthconcern; the synthetic deployed examplebcdf2235hosted_auth_missing,invalid_issuer,auth_rs256_missing,auth_algorithm_forbidden,auth_algorithm_unadmitted,auth_audience_unbound,auth_metadata_path_mismatch,auth_resource_query,unsupported_auth3245c0c3docs/factory-mcp-conformance.md3335da43verification.md§ 5), T002-T024 ticked31d5c50acontract-v4.1cut, one commit: manifest row with the schema'ssha256,contract_bundle_version,CHANGELOG.mdentry,contracts/releases/contract-v4.1.digests.yaml, schema title, runbook release paragraph, two index rows, release-boundary advance38c78817mainat9a272c6d(#1284), never a rebase24699ca56300772bcc9e1441mainat841e86f0(#1290, #1287, #1288), never a rebase. No release file moved, so no re-cut07623c7amainat33d2a56a(#1294), never a rebase. No release file moved, so no re-cutcb9b27f3cb9b27f3)76944137mainat978e9cbc(#1295, #1296), never a rebase. No release file moved, so no re-cut0d3750830d375083merge and the head that landsaed40d2dThe requirement-to-test witness map is in
tasks.md§ Witness map, and therealization decisions the packet delegates are in
research.md.Red first (task 2.2)
bd76faf4, beforeany schema or validator byte moved. Run there, against
main's validator:93 failed, 97 passed, 176 subtests.
mainand stay green: undeployedservice with a block, stdio, the two M5 classification tests, and the two
per-domain vocabulary tests.
mainwithcheck_mapping'sclassification comparison removed, the two classification tests FAILED
(failures=4). Against
main's own validator they are OK.tests/factory-mcp/passes, 108 tests and 300 subtests(
main: 88 tests, 203 subtests).Gates at the landing head
aed40d2d(landing round)The head is
aed40d2d, which is0d375083plus the verification record's§ 11.
mainwas merged in three times, never by rebase:07623c7amerges841e86f0(Group 6 of split-openwallet-neutral-core: consume openXwallet xwallet-v1.0 through the nested openWallet chain #1290, Exclude .browser-ui-repair-source from the domain secret scan #1287, retire-codexfactory-sibling-currency-dispositions: delete the two canon-moved codexFactory dispositions ahead of their re-derivations (draft, parked at ratification) #1288);cb9b27f3merges33d2a56a(035 PR-2: agree on membership before work #1294);0d375083merges978e9cbc(Archive retire-codexfactory-sibling-currency-dispositions: realized at 841e86f0, no spec delta, successor rows 5.1-5.3 kept open #1295, 035 PR-3: frozen assignments and retry identity #1296).None of those six pull requests touches a release file:
contracts/manifest.yaml,contracts/releases/,contracts/CHANGELOG.mdand
contracts/README.mdare unchanged.contract-v4.1inventory member moved, and no submodule gitlink movedafter Group 6 of split-openwallet-neutral-core: consume openXwallet xwallet-v1.0 through the nested openWallet chain #1290.
(
openspec-cli-pin,openxwallet-pin,domain-factory-conformance-validator)carry no per-file
sha256.So no re-cut was needed. At every head, rebuilding the inventory with
validate-contract-release.py build --tag contract-v4.1gives bytes identicalto the committed
contracts/releases/contract-v4.1.digests.yaml(342entries). The number is still free: no
contract-v4.1tag exists, and #630'slatest comment is this lane's row-4 claim.
The gates ran in a full clone with the submodules initialized as CI does,
including #1290's scoped nested openXwallet chain. They were run again at
aed40d2d, which adds only the record: every gate was 0, and doc-health gavethe
cb9b27f3set.0d375083cb9b27f307623c7a--all --strict(and--no-cache)openXwallet/openWallet,openWallet/code), openXdox, openDox, openRepoShape pins--ledger-diff), code surface, target releasevalidate-contract-release.py verify-commit --commit HEADcontract-v4.1inventory)validate-release-tag-gate.py .on a recreated merge tree (main+--no-ffhead)1609bed1(978e9cbc+0d375083): no error, no warning;TAG OWEDnotice2a38806b(33d2a56a+cb9b27f3): no error, no warning;TAG OWED: contract-v4.1noticee2ca4121(841e86f0+07623c7a): the same--single-repocb9b27f3set07623c7a's findings plus 17 staged topic untouched 30 days warnings. Those are clock-driven: the 17 staging topics were last touched on 2026-09-11 and crossed the 30-day mark, and the merge touches noideation/filecc9e1441's apart from the clocktests/factory-mcp/pytest tests/ -q -m "not postgres")pytest-suite, on this pull request at the landing headpytest-suite(run38100661463): 10195 passed, 6 skipped, 338 deselected, 724 subtests, 0 failuressetsid: 1 failed, 9556 passed, 7 skipped, 338 deselected, 703 subtests; the one failure is the environmentaltest_tag_hygiene_pinned_targets.pytest thatmainfails identically in the same clone kind (note below)Gates at the verification head (task 2.7)
Branch
6300772b(the tree the verification ran on;cc9e1441adds only therecord) and
main9a272c6dwere run in the same clone kind, under anenvironment built from the CI lock with
--require-hashes. Full detail is inverification.md§ 7.main--all --strict(and--no-cache)--ledger-diff), code surface, target releasevalidate-contract-release.py verify-commit --commit HEADcontract-v4.0membersmainmoved without a cut, which this cut closesvalidate-release-tag-gate.py .on the emulated PR merge tree (main+--no-ffhead)TAG OWED: contract-v4.1notice--single-repomain's 7 release-inventory-drift findings gone, none addedpytest tests/ -q -m "not postgres") undersetsidtests/doc-healthunder Python 3.14git diff --check, closing-keyword scan, public-repository scanTwo notes on the table:
environmental. It is
tests/doc-health/test_tag_hygiene_pinned_targets.py::test_a_lexically_malformed_value_builds_no_path_and_reads_nothing.The test asserts that no read-surface argument contains the substring
one,and the local checkout's path contains it. The 7 skips are identical on both
sides. The 20 extra passes are this feature's factory MCP tests.
counts the branch's own commits after the cut as landings. CI runs it on the
pull request's merge ref, which the emulated merge tree reproduces.
Out-of-tree engineering check (SC-008)
The check ran only with the validator's
--snapshotoption, outside thistree, over the engineering domain's three published schemas (tool request,
tool result, domain error) at
33b916c1. Their digests equal the 2026-09-07baseline's. Results on the branch's validator:
hosted_auth_missingauth_rs256_missingNo byte, path or name from that repository is in this one.
Release
contract-v4.1is ADDITIVE: the factory MCP declaration is registered for thefirst time, and the clearing family joins the inventory at its floor. Against
contract-v4.0, the inventory goes from 283 to 342 entries: 59 added, 0removed, 8 digests moved, each attributed in the changelog. No tag is
published. Under the versioning policy's Bundle Realization Order step 5,
the annotated tag follows the landing.
Reviews
cc9e1441it left review5475611951with 0 open findingsand no thread. At
07623c7ait left review5481323568, also with 0 open findings and nothread. At
cb9b27f3it left review5481439513with one thread on theverification record: change task 2.7 asks for the full suite at the head that
lands. That is fixed by § 11 (
76944137, extended inaed40d2d), and thethread is answered and resolved. Copilot is requested again, explicitly, at
aed40d2d.cc9e1441(comment6089641602). The connector answered with itsusage-limit notice (comment
6089643359), so no Codex review exists. Nosecond trigger is posted.
🤖 Generated with Claude Code