Repository navigation
fix(governance): re-pin adoption projection digest and guard it in pytest (ticket-092) - #120
Conversation
…test (ticket-092) ticket-089 added errors/** to .governance/manifest.json without updating the ten standard-adoption artifact digests, so governance / enforce has failed on main since 2026-10-19 with STD-ADOPTION-DRIFT. Re-pin only artifacts[] to the reviewed manifest; adoption levels and evidence records are unchanged. The local gate does not run standard_pack_check.py, which is why the drift passed locally. A unit test now runs it so the next manifest edit fails in pytest instead of only in CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t-092) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Validator semantic assessment is held for head Ticket: These findings are advisory; approval and merge remain blocked. The text grants no execution authority. Findings are bounded to 16 entries of 512 UTF-8 bytes.
|
There was a problem hiding this comment.
Validator approval after policy checks for exact head 9adb42ae6fa5c01c260fe332dece999f4dc2935c.
Ticket: ticket-092
Correlation ID: fixos-pr-120-ticket-092
Model: zai/glm-5.3
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). All required checks pass. The change consistently re-pins the .governance/manifest.json digest (10 records) from 38aa1ec7… to e7310b39…, matching the manifest change from ticket-089, and adds a pytest wrapper that runs standard_pack_check.py locally so future projection drift fails before CI. Adoption levels and evidence records are unchanged as claimed. The new test is straightforward and appropriate.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.
Semantic review prerequisite: satisfied; policy 676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7.
Actual PR impact radar
Exact range: 75434327996a30b00080d5ea1e370d7b1c7014d8...9adb42ae6fa5c01c260fe332dece999f4dc2935c
Change digest: b3510a01ab7fdef20a80b3a2abf7303e8d7197a353b32ebb51390f91f154d4c3
Score: 60/100 (L), estimated 68 min, split recommended: true
Affected services/components: repository-wide/unclassified
Machine-readable radar JSONL and SVG
{"actual_change":{"additions":144,"base_sha":"75434327996a30b00080d5ea1e370d7b1c7014d8","binary_files":0,"categories":{"configuration":2,"docs":2,"tests":1},"change_digest":"b3510a01ab7fdef20a80b3a2abf7303e8d7197a353b32ebb51390f91f154d4c3","comparison":"75434327996a30b00080d5ea1e370d7b1c7014d8...9adb42ae6fa5c01c260fe332dece999f4dc2935c","deletions":10,"file_count":5,"files":["governance/standard-adoption.json","project/TICKETS.md","project/ticket-092/README.md","project/ticket-092/intent.json","tests/unit/test_standard_adoption_projection.py"],"head_sha":"9adb42ae6fa5c01c260fe332dece999f4dc2935c","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":2,"scope":4,"uncertainty":3,"validation":1},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":68,"within_budget":false},"impact":{"components":["S4","claude.com","governance","project","tests"],"files":["S4/S5","claude.com/claude-code","governance/manifest.json","governance/standard-adoption.json","project/TICKETS.md","project/governance-check.sh","project/ticket-092/README.md","project/ticket-092/intent.json","tests/unit/test_standard_adoption_projection.py"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":60,"split":{"parts":[{"estimated_minutes":12,"name":"Implement S4","scope":["S4"]},{"estimated_minutes":12,"name":"Implement claude.com","scope":["claude.com"]},{"estimated_minutes":12,"name":"Implement governance","scope":["governance"]},{"estimated_minutes":12,"name":"Implement project","scope":["project"]},{"estimated_minutes":12,"name":"Implement tests","scope":["tests"]},{"estimated_minutes":15,"name":"Validate and project to trackers","scope":["tests","planfile","github/gitlab/jira projections"]}],"reason":"estimated_minutes_exceed_budget","recommended":true},"standards":[{"id":"wellmanifest/dsl","revision":"6c60fc4e0dd1f1bb74f46a7745e28019908d1203","version":"0.1.0-dev"},{"id":"wellmanifest/ticket-lifecycle","revision":"5bf581907a87b46a13a73e6c033d3abe4d9a306f","version":"0.1.0-dev"},{"id":"wellmanifest/git-lifecycle","revision":"7d77d4b7af57e69bc75c3a0290b3a4805c5c4438","version":"0.2.0-dev"},{"id":"wellmanifest/logs","revision":"48c284ef7a069055c0bcb6b900147ce5e65f8b43","version":"0.3.0"}],"ticket_ref":"ticket-092"}<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-092: fix(governance): re-pin adoption projection digest and guard it in pytest (ticket-092)</title><rect width="128" height="128" rx="12" fill="#f8fafc"/><g stroke-width="1"><polygon points="64,55 72,61 69,71 59,71 56,61" fill="none" stroke="#d7dde5"/><polygon points="64,47 80,59 74,78 54,78 48,59" fill="none" stroke="#d7dde5"/><polygon points="64,38 89,56 79,85 49,85 39,56" fill="none" stroke="#d7dde5"/><polygon points="64,30 97,53 84,92 44,92 31,53" fill="none" stroke="#d7dde5"/><polygon points="64,21 105,51 89,99 39,99 23,51" fill="none" stroke="#d7dde5"/><line x1="64" y1="64" x2="64" y2="21" stroke="#aab4c0"/><line x1="64" y1="64" x2="105" y2="51" stroke="#aab4c0"/><line x1="64" y1="64" x2="89" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="39" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="23" y2="51" stroke="#aab4c0"/></g><polygon points="64,30 105,51 79,85 59,71 48,59" fill="#fb923c" fill-opacity="0.45" stroke="#c2410c" stroke-width="2"/><circle cx="64" cy="64" r="3" fill="#c2410c"/><g font-family="sans-serif" font-size="7" fill="#334155"><text x="64" y="11" text-anchor="middle">SCO</text><text x="114" y="48" text-anchor="middle">COU</text><text x="95" y="107" text-anchor="middle">UNC</text><text x="33" y="107" text-anchor="middle">VAL</text><text x="14" y="48" text-anchor="middle">DEL</text></g><text x="64" y="124" text-anchor="middle" font-family="sans-serif" font-size="8" fill="#0f172a">L · 68m</text></svg>DECISION D-092-8649
TICKET ticket-092
HEAD_SHA 9adb42ae6fa5c01c260fe332dece999f4dc2935c
CORRELATION_ID fixos-pr-120-ticket-092
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test-summary=PASS","test-ubuntu=PASS","test-debian=PASS","test-alpine=PASS","test-fedora=PASS","test (3.10)=PASS","test-arch=PASS","test (3.11)=PASS","test (3.12)=PASS","governance / enforce=PASS","governance / remote lifecycle=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["onedev/local-verify","test (3.10)","test (3.11)","test (3.12)","test-summary"]
INPUT required_checks_source = "protected registry (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT semantic_review_assessment = {"schema":"subactor.validator/semantic-review-assessment/v1","subject":{"repository":"semcod/fixos","pull_request":120,"head_sha":"9adb42ae6fa5c01c260fe332dece999f4dc2935c","base_sha":"75434327996a30b00080d5ea1e370d7b1c7014d8","diff_sha256":"4eeb3da8fb512779b33c4b109541f6705f03d63babee44efa3c8fe8e4fb28c57"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":true,"critical_paths":[".governance/standard-adoption.json"],"observed_paths":[".governance/standard-adoption.json","project/TICKETS.md","project/ticket-092/README.md","project/ticket-092/intent.json","tests/unit/test_standard_adoption_projection.py"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"satisfied","reason":null,"review_sha256":"e0d21a544a91ed8ebf13b340815ffee0d3b3f9480a4422e93170b9ed13cfa61f","unresolved":[]}
INPUT superseded_checks = []
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"75434327996a30b00080d5ea1e370d7b1c7014d8","head_sha":"9adb42ae6fa5c01c260fe332dece999f4dc2935c","change_digest":"b3510a01ab7fdef20a80b3a2abf7303e8d7197a353b32ebb51390f91f154d4c3","score":60,"complexity":"L","estimated_minutes":68,"split_recommended":true,"services":[],"authority":"ADVISORY","promotion":"FORBIDDEN"}
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "APPROVE" MODEL "zai/glm-5.3"
ASSERT VERDICT_AUTHORITY != "ADVISORY"
Problem
governance / enforceonmainhas failed since 2026-10-19 (e.g. run 39395110762), and the same failure hits every PR: 10×STD-ADOPTION-DRIFT"managed projection drift" for.governance/manifest.json.Cause: ticket-089 (1e3ea58) added
errors/**to.governance/manifest.json, but.governance/standard-adoption.jsonstill pins the previous digest38aa1ec7…, which is exactly the file at1e3ea58^. The local gate never runsstandard_pack_check.py, so this passed locally.Change
.governance/standard-adoption.json: re-pin onlyartifacts[].sha256(10 records) to the reviewed current manifeste7310b39…. Adoption levels andevidenceare unchanged.tests/unit/test_standard_adoption_projection.py: runsstandard_pack_check.pyin pytest so the next manifest edit without a matching re-pin fails locally.The ticket is in the
applicationworkstream: the material change is the test, and.governance/**is a governance carrier. A carrier-only change failsGOV-MATERIAL-001, and the only governance-only route is a full atomic standard adoption.Validation
standard_pack_check.py:ok: true, 0 findings. Negative control: withmain's file the new test fails.ruffclean../project/governance-check.sh: PASS.Not addressed
Every level S0–S5 uses
.governance/manifest.jsonas its evidence. new-project ≥ 0.20.104 reports that asSTD-ADOPTION-EVIDENCE(S3 needs a CI definition, S4/S5 need external proof). I did not rewrite the evidence digests, to avoid re-attesting S3–S5 without real proof. That needs a separate adoption task.🤖 Generated with Claude Code