Skip to content

feat(queue): opt-in strict_files refuses patches outside declared files (ticket-466) - #727

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/466-opt-in-strict-files-refuse-promotion-of-patches-outside-declared-ticket-files-726
Oct 19, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/466-opt-in-strict-files-refuse-promotion-of-patches-outside-declared-ticket-files-726

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Part 1 of #726. A run for subactor/platform ticket-455 promoted a
"verified patch" that created an undeclared, truncated tests/ file because
the verify command passed vacuously.

src/koru/queue/transaction/preflight.py: when a ticket sets
inputs.strict_files: true and declares files, screen_promotion_preconditions
refuses promotion with patch_targets_outside_declared_files and names the
undeclared targets (undeclared_targets(plan)). Without the opt-in nothing
changes, so existing lanes that add files keep working.
tests/test_strict_files.py covers refusal, ./ normalisation and the
default.

Implemented by willman (koru.develop_ticket, zai/glm-5.3). Both attempts
were correct but Koru refused them: the repository's pytest addopts load
wellmanifest_governance, whose session gate fails inside Koru's nested
staging worktree (GOV-PACKAGING-003), so any pytest verify command fails there.
Patch taken from the staging worktree after review.

Not in scope (rest of #726): verify_not_discriminating when the baseline
already passes; parse checks for new files.

Verified: python3 -m pytest -q tests/test_strict_files.py tests/test_queue_transaction_phases.py → 47 passed (with the governance plugin, in the canonical ticket worktree); ./project/governance-check.sh --base origin/main → GOV-PASS.

Refs #726.

🤖 Generated with Claude Code

…es (ticket-466)

Refs #726.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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

Ticket: ticket-466
Correlation ID: local-semcod-koru-pr-727-ticket-466
Model: openai/cursor-auto
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). The visible change correctly implements opt-in enforcement: when inputs.strict_files is exactly true and ticket.files is non-empty, normalized patch targets outside the declared set produce the specified refusal outcome. Default behavior remains unchanged, and focused tests cover refusal, ./ normalization, and non-opt-in behavior. All protected required checks passed.
Advisory findings: none
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: 5958f94d3692f250318080f5479dc27d092db443...7c536b2e7b803f5c18dfa81eb3334d285581abab
Change digest: fe79e254301c36e39190cc39e24a45c81eb1118530596079a845c2ab22d68891
Score: 64/100 (L), estimated 86 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":189,"base_sha":"5958f94d3692f250318080f5479dc27d092db443","binary_files":0,"categories":{"code":1,"configuration":1,"docs":1,"tests":1},"change_digest":"fe79e254301c36e39190cc39e24a45c81eb1118530596079a845c2ab22d68891","comparison":"5958f94d3692f250318080f5479dc27d092db443...7c536b2e7b803f5c18dfa81eb3334d285581abab","deletions":0,"file_count":4,"files":["project/ticket-466/README.md","project/ticket-466/intent.json","src/koru/queue/transaction/preflight.py","tests/test_strict_files.py"],"head_sha":"7c536b2e7b803f5c18dfa81eb3334d285581abab","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":2,"scope":5,"uncertainty":3,"validation":1},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":86,"within_budget":false},"impact":{"components":["claude.com","origin","project","semcod","src/koru","subactor","tests","zai"],"files":["claude.com/claude-code","origin/main","project/governance-check.sh","project/ticket-466/README.md","project/ticket-466/intent.json","semcod/koru","src/koru/queue/transaction/preflight.py","subactor/platform","tests/test_queue_transaction_phases.py","tests/test_strict_files.py","zai/glm-5.3"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":64,"split":{"parts":[{"estimated_minutes":10,"name":"Implement claude.com","scope":["claude.com"]},{"estimated_minutes":10,"name":"Implement origin","scope":["origin"]},{"estimated_minutes":10,"name":"Implement project","scope":["project"]},{"estimated_minutes":10,"name":"Implement semcod","scope":["semcod"]},{"estimated_minutes":10,"name":"Implement src/koru","scope":["src/koru"]},{"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-466"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-466: feat(queue): opt-in strict_files refuses patches outside declared files (ticket-466)</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,21 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 · 86m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-466-0514
TICKET ticket-466
HEAD_SHA 7c536b2e7b803f5c18dfa81eb3334d285581abab
CORRELATION_ID local-semcod-koru-pr-727-ticket-466
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","standard packs / conformance=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["onedev/local-verify","standard packs / conformance"]
INPUT required_checks_source = "protected registry + GitHub applied rules (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT semantic_review_assessment = {"schema":"subactor.validator/semantic-review-assessment/v1","subject":{"repository":"semcod/koru","pull_request":727,"head_sha":"7c536b2e7b803f5c18dfa81eb3334d285581abab","base_sha":"5958f94d3692f250318080f5479dc27d092db443","diff_sha256":"c6fa88ca53cae3ac0209d3ae4ccdbb175f0394ba64024dc5cf967bd4e468b570"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/ticket-466/README.md","project/ticket-466/intent.json","src/koru/queue/transaction/preflight.py","tests/test_strict_files.py"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"not_required","reason":null,"review_sha256":null,"unresolved":[]}
INPUT superseded_checks = ["smoke"]
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"5958f94d3692f250318080f5479dc27d092db443","head_sha":"7c536b2e7b803f5c18dfa81eb3334d285581abab","change_digest":"fe79e254301c36e39190cc39e24a45c81eb1118530596079a845c2ab22d68891","score":64,"complexity":"L","estimated_minutes":86,"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 "openai/cursor-auto"
ASSERT VERDICT_AUTHORITY != "ADVISORY"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit 8b00aaa into main Oct 19, 2026
4 of 5 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/466-opt-in-strict-files-refuse-promotion-of-patches-outside-declared-ticket-files-726 branch October 19, 2026 14:10
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