Skip to content

test(resume): cover the planfile ticket status contract (ticket-119) - #142

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/119-planfile-status-contract
Oct 15, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/119-planfile-status-contract

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Ticket: ticket-119

Follow-up to #141. semcod/planfile#262 publishes planfile/schemas/ticket-status.v1.json. This vendors it (pinned to 6670b38, sha256 cd8495ae…) as a test fixture and asserts that for every planfile status resume's OPEN/CLOSED contain it by its pending flag, STALLED matches the stalled class and it never counts as unknown. A future planfile status then fails this test on fixture refresh instead of blocking fleet admission in production.

Evidence: tests/test_resume.py 28 passed, 7 subtests; governance-check GOV-PASS.

Vendor planfile.ticket-status/v1 (semcod/planfile 6670b38) as a pinned
fixture and assert resume's status sets cover every planfile status by
class, so a new status cannot silently become unknown_statuses again.

Ticket: ticket-119

@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 fe50a9ad53563b903889e07dc909b1df2f5d958c.

Ticket: ticket-119
Correlation ID: local-semcod-monag-pr-142-ticket-119
Model: openai/cursor-auto
Reviewed diff chunks: 1
Advisory LLM verdict: REQUEST_CHANGES
Advisory summary: Reviewed all 1 diff chunk(s). Required checks pass, and the fixture-based contract test covers the listed statuses, stalled classification, and unknown-status behavior. Two unresolved correctness issues remain in the visible changes.
Advisory findings: project/TICKETS.md adds ticket-118 even though this change introduces ticket-119; ticket-119 is therefore absent from the ticket index.; tests/test_resume.py only asserts that each status is present in the expected OPEN or CLOSED set. It does not assert absence from the opposite set, so an overlapping/misclassified status could satisfy the test while runtime classification remains ambiguous or incorrect. Assert exclusive membership according to the contract's pending flag.
The LLM output above is advisory and was not used as the approval trust root.
Semantic review prerequisite: not_required; policy 676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7.

Actual PR impact radar

Exact range: f8bff8cf165b90d4808f216de5cd74e544f4dd6b...fe50a9ad53563b903889e07dc909b1df2f5d958c
Change digest: 2836dad7b4ccc69f69e97bd2634aa5d9460efed52219df3829a799af55a66193
Score: 60/100 (L), estimated 72 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":152,"base_sha":"f8bff8cf165b90d4808f216de5cd74e544f4dd6b","binary_files":0,"categories":{"code":1,"configuration":1,"docs":2,"tests":2},"change_digest":"2836dad7b4ccc69f69e97bd2634aa5d9460efed52219df3829a799af55a66193","comparison":"f8bff8cf165b90d4808f216de5cd74e544f4dd6b...fe50a9ad53563b903889e07dc909b1df2f5d958c","deletions":0,"file_count":6,"files":["project/TICKETS.md","project/ticket-119/README.md","project/ticket-119/intent.json","src/monag/resume.py","tests/fixtures/planfile-ticket-status.v1.json","tests/test_resume.py"],"head_sha":"fe50a9ad53563b903889e07dc909b1df2f5d958c","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":2,"scope":3,"uncertainty":3,"validation":2},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":72,"within_budget":false},"impact":{"components":["planfile","project","semcod","src/monag","tests"],"files":["planfile/schemas/ticket-status.v1.json","project/TICKETS.md","project/ticket-119/README.md","project/ticket-119/intent.json","semcod/planfile","src/monag/resume.py","tests/fixtures/planfile-ticket-status.v1.json","tests/test_resume.py"],"public_interfaces":["planfile/schemas/ticket-status.v1.json"],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":60,"split":{"parts":[{"estimated_minutes":20,"name":"Define contract and acceptance boundary","scope":["planfile/schemas/ticket-status.v1.json"]},{"estimated_minutes":10,"name":"Implement planfile","scope":["planfile"]},{"estimated_minutes":10,"name":"Implement project","scope":["project"]},{"estimated_minutes":10,"name":"Implement semcod","scope":["semcod"]},{"estimated_minutes":10,"name":"Implement src/monag","scope":["src/monag"]},{"estimated_minutes":10,"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-119"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-119: test(resume): cover the planfile ticket status contract (ticket-119)</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,38 105,51 79,85 54,78 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 · 72m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-119-3951
TICKET ticket-119
HEAD_SHA fe50a9ad53563b903889e07dc909b1df2f5d958c
CORRELATION_ID local-semcod-monag-pr-142-ticket-119
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["governance / remote lifecycle=PASS","governance / enforce=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["onedev/local-verify","governance / remote lifecycle","governance / enforce"]
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/monag","pull_request":142,"head_sha":"fe50a9ad53563b903889e07dc909b1df2f5d958c","base_sha":"f8bff8cf165b90d4808f216de5cd74e544f4dd6b","diff_sha256":"4dbceb3534119c8f5c0bb08eb02242fc06ccec7194d12c8b40dd6301065fe82d"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/TICKETS.md","project/ticket-119/README.md","project/ticket-119/intent.json","src/monag/resume.py","tests/fixtures/planfile-ticket-status.v1.json","tests/test_resume.py"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"not_required","reason":null,"review_sha256":null,"unresolved":[]}
INPUT superseded_checks = []
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"f8bff8cf165b90d4808f216de5cd74e544f4dd6b","head_sha":"fe50a9ad53563b903889e07dc909b1df2f5d958c","change_digest":"2836dad7b4ccc69f69e97bd2634aa5d9460efed52219df3829a799af55a66193","score":60,"complexity":"L","estimated_minutes":72,"split_recommended":true,"services":[],"authority":"ADVISORY","promotion":"FORBIDDEN"}
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "REQUEST_CHANGES" MODEL "openai/cursor-auto"
ASSERT VERDICT_AUTHORITY != "ADVISORY"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit 0b2f5e5 into main Oct 15, 2026
3 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/119-planfile-status-contract branch October 15, 2026 13:39
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