Skip to content

fix: preserve variable assertions during dry-run validation - #46

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/030-explicit-target-and-dry-run
Oct 26, 2026
Merged

ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/030-explicit-target-and-dry-run

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Dry runs must still detect incorrect comparisons against available interpreter variables. The response-only assertion validation introduced in #45 skipped those checks as well.

Restrict syntax-only skipping to response-dependent JSON paths and add regressions for ordinary scalar/nested variables and nested response paths. Continues ticket-030 / STARTER-023 and maskservice PLF-17354.

Validation: 118 focused tests pass; all 19 device scenarios validate 428 steps with zero execution; managed governance passes. Independent exact-head validation and required CI remain required.

@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 51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77.

Ticket: ticket-030
Correlation ID: codex-testql030-pr46-51ac02e
Model: openai/cursor-auto
Reviewed diff chunks: 1
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 1 diff chunk(s). The change correctly narrows dry-run syntax-only handling to response-dependent JSON paths while preserving evaluation of available interpreter variables. Added regressions cover scalar and nested variable mismatches, successful variable evaluation, and nested response paths. All 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: 3c83a8d5cb889bbfea4d4d17fa590e7c604cd9a7...51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77
Change digest: ef79feae66402d68a92b1f70bc3b4c74ba9d3708990e165e4a5ac67ba8478e4f
Score: 48/100 (M), estimated 49 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":38,"base_sha":"3c83a8d5cb889bbfea4d4d17fa590e7c604cd9a7","binary_files":0,"categories":{"code":1,"configuration":1,"docs":1,"tests":1},"change_digest":"ef79feae66402d68a92b1f70bc3b4c74ba9d3708990e165e4a5ac67ba8478e4f","comparison":"3c83a8d5cb889bbfea4d4d17fa590e7c604cd9a7...51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77","deletions":4,"file_count":4,"files":["project/ticket-030/README.md","project/ticket-030/intent.json","testql/interpreter/_assertions.py","tests/test_dry_run_validation.py"],"head_sha":"51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":4,"delivery":2,"scope":2,"uncertainty":3,"validation":1},"complexity":"M","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":49,"within_budget":false},"impact":{"components":["project","scalar","testql","tests"],"files":["project/ticket-030/README.md","project/ticket-030/intent.json","scalar/nested","testql/interpreter/_assertions.py","tests/test_dry_run_validation.py"],"public_interfaces":[],"runtime_dependencies":0},"schema":"subactor.ticket-radar/v1","score":48,"split":{"parts":[{"estimated_minutes":10,"name":"Implement project","scope":["project"]},{"estimated_minutes":10,"name":"Implement scalar","scope":["scalar"]},{"estimated_minutes":10,"name":"Implement testql","scope":["testql"]},{"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-030"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-030: fix: preserve variable assertions during dry-run validation</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,47 97,53 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">M · 49m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-030-3134
TICKET ticket-030
HEAD_SHA 51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77
CORRELATION_ID codex-testql030-pr46-51ac02e
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["governance / enforce=PASS","governance / remote lifecycle=PASS","metadata=PASS","test=PASS"]
INPUT required_checks = ["test"]
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":"autogrammar/testql","pull_request":46,"head_sha":"51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77","base_sha":"3c83a8d5cb889bbfea4d4d17fa590e7c604cd9a7","diff_sha256":"a70f7446f57ba4a7f3476fb05ea7fdeccf019fd051efd7ba0f434a5a33c4f4f9"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":false,"critical_paths":[],"observed_paths":["project/ticket-030/README.md","project/ticket-030/intent.json","testql/interpreter/_assertions.py","tests/test_dry_run_validation.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":"3c83a8d5cb889bbfea4d4d17fa590e7c604cd9a7","head_sha":"51ac02ecbf4c9a36cc5d850a3d73adf0d38bab77","change_digest":"ef79feae66402d68a92b1f70bc3b4c74ba9d3708990e165e4a5ac67ba8478e4f","score":48,"complexity":"M","estimated_minutes":49,"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 f99d98c into main Oct 26, 2026
4 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/030-explicit-target-and-dry-run branch October 26, 2026 10:40
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