Skip to content

fix: enforce duplicate budgets in CLI check - #21

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/014-cli-check-budget
Oct 11, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/014-cli-check-budget

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

The CLI check command returned success even when duplicate budgets were exceeded: Metafile reported94groups/1152recoverablelines while --max-groups0 --max-lines0 exited0. The command now applies both inclusive budgets from CLI/environment/config/defaults, rejects invalid limits and scan roots, and keeps diagnostic output independent of the thresholds.

Fixes #20. Native ticket014; Planfile PLF-022; parent wellmanifest/PLF-002. No scanner/MCP changes or dependency/runtime activation.

Validation: full suite256passed/13existing skips, including16new actual CLI cases. Three negative cases fail against unchanged baseline. The exact Metafile canary now exits1 for both exceeded budgets. Managed governance0errors/0warnings; Ruff lint/format pass. Required protected Python3.10/3.13 checks and independent exact-head review remain necessary; local results grant no merge approval.

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

Ticket: ticket-014
Correlation ID: wellmanifest-plf002-redup-cli-budget014
Model: zai/glm-5.3
Reviewed diff chunks: 2
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 2 diff chunk(s). Chunk 1 of 2: bounded CLI budget enforcement fix aligned with declared intent (allowedPaths, no scanner/MCP changes). check_command now loads config, resolves group/line limits with CLI > top-level > check-table > defaults precedence, validates nonnegative integers, keeps diagnostic display independent of budgets, and exits 1 with clear messages on exceeded inclusive budgets. New tests exercise real duplicate fixtures, boundary equality, zero-budget no-duplicate pass, and defaults; both required protected checks (test 3.10/3.13) pass per structured assessment. | Diff chunk 2 covers CLI budget validation tests: inclusive budget semantics from config/environment/CLI, rejection of negative or non-integer budgets, and rejection of missing or non-directory scan roots. Required checks test (3.10) and test (3.13) both pass; no failed checks and no security concerns in the visible code.
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: 827418a798d9a5d4d455ffc7e4228e7d063c106f...cd2c6e161ed42381e23b9687b94c38ed20a11044
Change digest: f307313afaafca32bb7506592cc8dd4f5e8f0321a98b663baf0052988fd076bd
Score: 68/100 (L), estimated 120 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":241,"base_sha":"827418a798d9a5d4d455ffc7e4228e7d063c106f","binary_files":0,"categories":{"code":2,"configuration":1,"docs":1,"tests":1},"change_digest":"f307313afaafca32bb7506592cc8dd4f5e8f0321a98b663baf0052988fd076bd","comparison":"827418a798d9a5d4d455ffc7e4228e7d063c106f...cd2c6e161ed42381e23b9687b94c38ed20a11044","deletions":9,"file_count":5,"files":["project/ticket-014/README.md","project/ticket-014/intent.json","src/redup/cli_app/main.py","src/redup/cli_app/scan_commands.py","tests/test_cli_check_budget.py"],"head_sha":"cd2c6e161ed42381e23b9687b94c38ed20a11044","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":3,"scope":5,"uncertainty":3,"validation":1},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":120,"within_budget":false},"impact":{"components":["CLI","Python3.10","dependency","governance0errors","lint","project","reported94groups","scanner","src/redup","suite256passed","tests","wellmanifest"],"files":["CLI/environment/config/defaults","Python3.10/3.13","dependency/runtime","governance0errors/0warnings","lint/format","project/ticket-014/README.md","project/ticket-014/intent.json","reported94groups/1152recoverablelines","scanner/MCP","src/redup/cli_app/main.py","src/redup/cli_app/scan_commands.py","suite256passed/13existing","tests/test_cli_check_budget.py","wellmanifest/PLF-002"],"public_interfaces":[],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":68,"split":{"parts":[{"estimated_minutes":10,"name":"Implement CLI","scope":["CLI"]},{"estimated_minutes":10,"name":"Implement Python3.10","scope":["Python3.10"]},{"estimated_minutes":10,"name":"Implement dependency","scope":["dependency"]},{"estimated_minutes":10,"name":"Implement governance0errors","scope":["governance0errors"]},{"estimated_minutes":10,"name":"Implement lint","scope":["lint"]},{"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-014"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-014: fix: enforce duplicate budgets in CLI check</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 39,56" 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 · 120m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-014-0519
TICKET ticket-014
HEAD_SHA cd2c6e161ed42381e23b9687b94c38ed20a11044
CORRELATION_ID wellmanifest-plf002-redup-cli-budget014
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","test (3.13)=PASS","test (3.10)=PASS"]
INPUT required_checks = ["test (3.10)","test (3.13)"]
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/redup","pull_request":21,"head_sha":"cd2c6e161ed42381e23b9687b94c38ed20a11044","base_sha":"827418a798d9a5d4d455ffc7e4228e7d063c106f","diff_sha256":"b4b8071d1731a475a57a229c9296d0ab0e4f09e9f7f977a5131063191a2f2723"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/ticket-014/README.md","project/ticket-014/intent.json","src/redup/cli_app/main.py","src/redup/cli_app/scan_commands.py","tests/test_cli_check_budget.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":"827418a798d9a5d4d455ffc7e4228e7d063c106f","head_sha":"cd2c6e161ed42381e23b9687b94c38ed20a11044","change_digest":"f307313afaafca32bb7506592cc8dd4f5e8f0321a98b663baf0052988fd076bd","score":68,"complexity":"L","estimated_minutes":120,"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 5534ac0 into main Oct 11, 2026
4 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/014-cli-check-budget branch October 11, 2026 22:07
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.

Fix reDUP CLI check exit status when duplicate budgets are exceeded

1 participant