Skip to content

fix(governance): re-pin adoption projection digest and guard it in pytest (ticket-092) - #120

Merged
ifuri-validator-agent[bot] merged 2 commits into
mainfrom
ticket/092-adoption-projection-digest
Oct 20, 2026
Merged

ifuri-validator-agent[bot] merged 2 commits into
mainfrom
ticket/092-adoption-projection-digest

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Problem

governance / enforce on main has 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.json still pins the previous digest 38aa1ec7…, which is exactly the file at 1e3ea58^. The local gate never runs standard_pack_check.py, so this passed locally.

Change

  • .governance/standard-adoption.json: re-pin only artifacts[].sha256 (10 records) to the reviewed current manifest e7310b39…. Adoption levels and evidence are unchanged.
  • tests/unit/test_standard_adoption_projection.py: runs standard_pack_check.py in pytest so the next manifest edit without a matching re-pin fails locally.

The ticket is in the application workstream: the material change is the test, and .governance/** is a governance carrier. A carrier-only change fails GOV-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: with main's file the new test fails.
  • Unit suite: 737 passed. ruff clean. ./project/governance-check.sh: PASS.

Not addressed

Every level S0–S5 uses .governance/manifest.json as its evidence. new-project ≥ 0.20.104 reports that as STD-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

tom-sapletta-com and others added 2 commits October 20, 2026 23:56
…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>
@ifuri-validator-agent

Copy link
Copy Markdown
Contributor

Validator semantic assessment is held for head 9adb42ae6fa5c01c260fe332dece999f4dc2935c.

Ticket: ticket-092
Assessment: f6d043e3eb50bacb64b2e9e5a884bb4b9836e8f73d3368b37c0c57846ec6c5b2

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.

  • project/TICKETS.md adds ticket-091 while this change creates project/ticket-092. Add ticket-092 to the index (and retain ticket-091 if it also needs indexing) so the new ticket is discoverable and the index matches the delivered ticket.

@ifuri-validator-agent ifuri-validator-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
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"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit e13966a into main Oct 20, 2026
12 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/092-adoption-projection-digest branch October 20, 2026 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant