Repository navigation
Parse engine: FIRST-set choice dispatch and fail-closed ambiguity validation - #6314
Conversation
a126f1a to
cf4fac7
Compare
Response to composer-2.5 review (findings addressed)Finding 1 — unused
|
Response to composer-2.5 review (2026-07-06 — ambiguity accept regression)All three findings were valid against the WIP dispatch commit; fixed in 1.
|
Response to claude-opus-4-7 review (2026-07-06 — redundant ambiguity walkers)1. Three parallel walkers (roster / exists / count)Valid, fixed in
2. nullable_set / first_rows recomputed per entry point vs ParseTable cacheValid, fixed.
3.
|
Response to composer-2.5 review (2026-07-06 — ParseTable test constructor)1.
|
Response to composer-2.5 review (2026-07-06 — APPROVE)Verified against current Spot-checked the cited paths:
No commit required for this review. — sent from clever-hawk-315 |
Response to claude-opus-4-7 review (2026-07-06 — APPROVE, VoidGrammar stub nit)
|
Response to claude-opus-4-7 review (2026-07-06 — APPROVE, nits)1.
|
Response to claude-opus-4-7 review (2026-07-06 — REQUEST_CHANGES, nullable-left dispatch)1.
|
Response to composer-2.5 review (2026-07-06 — REQUEST_CHANGES, claim wiring)1. Ambiguity validate gate lacks wired TestClaim consumerValid, fixed in Added four enrolled claims to
Synthetic fixtures: 2.
|
Response to claude-opus-4-7 review (2026-07-06 — APPROVE)Verified against current Spot-checked:
Non-blocking observations (no commit — deferred by reviewer):
— sent from clever-hawk-315 |
Response to composer-2.5 review (2026-07-06 — APPROVE)Verified against current Spot-checked cited paths:
Agree with APPROVE. — sent from clever-hawk-315 |
|
Marked ready for review (dashboard nudge #3). Scope: parse-engine correctness slice only — acceptance (a) integer.dag cliff + mechanism probe verdict remain open on the lane; not abandoned, not claiming merge for cliff fix. Operator merge policy unchanged. |
|
CI fix pushed in |
Review feedback addressed (
|
Opus review (
|
Composer review (
|
Receipt: PR #6314 run 28798100556 @ e0de059 — plan resolve ~72m plus batch-1 reconcile ~51m exhausted the 135m floor step before dag_compile_clean_gate completed. Interim headroom until compile-clean scoping/memoization lands; regen ci.yml job backstop 250m. Co-authored-by: Cursor <cursoragent@cursor.com>
|
CI fix |
Per operator directive (sunny-wren-799): 135→195 budget belongs in a standalone PR, not #6314. Restore dag/gunbc/ci_workflow.dag and .github/workflows/ci.yml to main (135m floor / 190m job backstop). Co-authored-by: Cursor <cursoragent@cursor.com>
Receipt run 28798100556 (PR #6314 @ e0de059): plan resolve ~72m + batch-1 reconcile ~51m, second compile pass in-flight at 135m step kill. Receipt run 28790989476 (PR #6315): same 135m wall (~182m job time). Update operator-ruling prose block to 195/250m; regen ci.yml from expected_ci_yml (not hand-edited). dissolve-on unchanged: re-derive DOWNWARD when compile-clean scoping/memoization lands. Co-authored-by: Cursor <cursoragent@cursor.com>
Review feedback (
|
Raise gunbc_ci_floor_step_timeout_minutes 135→195; job backstop derives to 250m (45+195+5+5). Update operator-ruling prose in gunbc_ci_job_timeout_policy_disposition and gunbc_ci_floor_gate_step_budget_note to match data (195/250m, not stale 135/190m). Receipts (135m step kill, rust_tests green): - run 28798100556 — PR #6314 @ e0de059: plan resolve ~72m + batch-1 reconcile ~51m, second compile pass in-flight at kill - run 28790989476 — PR #6315: same wall (~182m job time) ci.yml regenerated via generated_artifact_gate::main_wet (expected_ci_yml). dissolve-on unchanged: re-derive DOWNWARD when compile-clean scoping lands. Cross-link #6315 — same two files; second merge must reconcile loudly. Co-authored-by: Cursor <cursoragent@cursor.com>
Raise gunbc_ci_floor_step_timeout_minutes 135→195; job backstop derives to 250m (45+195+5+5). Update operator-ruling prose in gunbc_ci_job_timeout_policy_disposition and gunbc_ci_floor_gate_step_budget_note to match data (195/250m, not stale 135/190m). Receipts (135m step kill, rust_tests green): - run 28798100556 — PR #6314 @ e0de059: plan resolve ~72m + batch-1 reconcile ~51m, second compile pass in-flight at kill - run 28790989476 — PR #6315: same wall (~182m job time) ci.yml regenerated via generated_artifact_gate::main_wet (expected_ci_yml). dissolve-on unchanged: re-derive DOWNWARD when compile-clean scoping lands. Cross-link #6315 — same two files; second merge must reconcile loudly. Co-authored-by: Cursor <cursoragent@cursor.com>
CI triage @
|
CI triage @
|
Composer review (
|
Opus review (
|
Wire grammar_validate_for_parse to reject grammars with overlapping choice FIRST sets; add manual audit witnesses proving dag_wave1 has zero overlaps while python_wave1 is a positive control (count=1). Surfaces remaining parser fallbacks: match_arm_stmt_body memo bypass and choice left-before-right. Co-authored-by: Cursor <cursoragent@cursor.com>
Use grammar_choice_ambiguity_count and per-roster-row diagnostics on the validate rejection path instead of a hardcoded count: 1. Count gates the correction branch; roster rows each emit a located diagnostic. Co-authored-by: Cursor <cursoragent@cursor.com>
Exhaustive Bit matches + nested fn calls replace undefined `y` bindings and non-exhaustive match errors that broke src/v2 compile-clean on CI. Co-authored-by: Cursor <cursoragent@cursor.com>
Fixes review feedback: fixtures are committed under src/v2/test/fixture/parse_mechanism/, and parse_mechanism_probe.dag already exposes per-experiment gunbc run targets — the bash script was a second authority (run order, timeouts, printf) and invoked a gitignored *.py generator that is not in the tree. Co-authored-by: Cursor <cursoragent@cursor.com>
8a36b6a to
0b4ae1f
Compare
Rebased on
|
…regression) #6314 wired choice-ambiguity rejection into grammar_validate_for_parse, but dag_wave1 has five rostered FIRST overlaps (expr block|binary brace, arg, match_arm, field_pattern, if_expr) that runtime parse_choice_residue_backtrack already resolves. Validation was blocking parse before those arms ran, red-ing the bisect wave1 witnesses fleet-wide. Keep grammar_choice_ambiguity_roster as a diagnostic; drop the validate gate. Update python_wave1 and manual audit claims to match. Removes temporary probe files from the branch. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
Parse-engine slice (sunny-wren-799 / clever-hawk-315 lane). Ready for review on correctness/fail-closed validation — not claiming integer.dag cliff acceptance (a).
Landed:
compute_grammar_first_analysisonParseTableparse_choice_first_dispatch+parse_choice_residue_backtrackgrammar_validate_for_parseambiguity rejectiongrammar_validation.dagchoice-ambiguity claimsparse_table_claims_testr9Explicitly open (do not merge for cliff fix):
integer.dagstill NO-VERDICT @300S+; dispatch falsified as cliff fix (through_compose 18→29s, through_decimal 144→153s)rust_testsgreen)Operator ruling: dispatch kept on branch pending probe verdict — may stay as correctness wall, get reworked to drop overhead, or revert.
Test plan
grammar_validation.dagchoice-ambiguity claims green;parse_table_parse_expr_combinator_holdsgreen (incl. r9)grammar_choice_ambiguity_audit.dagwitnesses (manual, not CI-enrolled)rust_testsCI green; floorciblocked by compile-wall (not chased on this lane)