Skip to content

Four claims red on main: stale a1/b1 helpers updated (NormalizedTree.root, Optional import); fn-literal reds enrolled expected-red (#12210); RFM row - #12230

Merged
gunbai-bot[bot] merged 12 commits into
mainfrom
session/still-seal-357
Sep 24, 2026
Merged

gunbai-bot[bot] merged 12 commits into
mainfrom
session/still-seal-357

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Update after merging main: gunbc#12221 (e74e345) landed the same statement-spine fix independently (body_lower_stmt_spine_has_successor). This PR now takes main's version of body_lowering_fold.dag and carries no compiler change. The claim-1 row below records the diagnosis; the repair on main is #12221's.

Work item adhoc-9d86ad93-96c: four claims red on unmodified main and outside every required lane. Each claim was run on srv1 (neat-boar-16, claim_batch, rounds 1–5, final branch head before the scaffolding was removed = b93a0ee) and classified at identity grain.

Classification

Claim Class Cause Disposition
v2.test.claim.body_lowering.statement_let_bind unbound_statement_prefix_refuses_holds (b) main regressed body_lower_try_statement_spine only routed LET-headed spines to body_lower_stmt_spine. A non-let multi-statement body ({ 1 ⏎ 2 }) fell to the expression walker, which kept one statement and silently dropped the rest. On main, normalize ACCEPTED it; only MQ-6's conservation check caught it (conservation_reason_dropped_reference, srv1 round 1). Fixed at the owning link (§6b): the guard is now "is a sequence" (body_lower_stmt_spine_is_sequence), so every spine of two or more statements takes the one statement-sequence lowering, and a non-binding head refuses with body_lowering_reason_statement_precedes_without_binding. Red on main → green with the fix. Controls: the five sibling claims (let/chain/let-in/typed/single-statement) all PASS.
v2.test.claim.body_lowering.data_initializer_fn_value data_record_fn_literal_field_is_not_retained_holds frontier, owned elsewhere A fn(a, b) { a } data-record field refuses wrapper_retained_emitted at dag_surface_fn_body. Its body is lowered only under a fn declaration: the same literal inside a fn body is ACCEPTED, and so is the arrow-lambda sibling. Not fixed locally: gunbc#12210 owns fn-literal value lowering, and a second producer would be the fork. Enrolled expected-red in v2.workflow.floor_expected_red floor_expected_red_chunk_fn_literal_value_lowering (OWNER #12210, DISSOLVE-ON passing). Not deleted.
v2.test.long.wave1_gate1_a1_symbol_index_body_producer_witness (4 witnesses via wave1_gate1_a1_symbol_index_helpers) (a) stale claim conserved_normalize_of_text returns the NormalizedTree record carrier, and the helper wrapped the record where it promised Optional<Node>, hence no field kind on NormalizedTree. The helper already did this before MQ-6 (#12206), which only swapped the producer. Present { value: tree.root }. All 4 PASS. The discriminating red is the one observed on main: the same claims fail when the helper hands them the wrong carrier.
v2.test.long.wave1_gate1_b1_bare_call_body_producer_witness (5 witnesses via wave1_gate1_b1_bare_call_helpers) (a) stale ×2; frontier ×1 (i) Same .root defect. (ii) The helper never imported Optional, so the payload bound out of Present was error-typed and body.kind failed with "error type cascade" (the probe: without the import it cascades, with it the body reads TRANSFORM). (iii) builtin_call_resolves_end_to_end uses fold(x, 0, fn(acc, _) { acc }): a fn literal as a call argument refuses call_argument_unread at dag_surface_fn_literal. That is the #12210 class, and the claim was previously green only because arguments were silently dropped before #12145/#12173. (i) .root; (ii) import v2.std.optional { Absent, Optional, Present }. 4 of 5 PASS. (iii) enrolled expected-red in the same #12210 chunk.

Final srv1 claim_batch (b93a0ee): 16 PASS, 2 FAIL. The two FAILs are exactly the two identities enrolled expected-red.

Which required lane should have caught each, and why none did

All four belong to the witnesses lane (--required-lane witnesses, the required floor). None ran because the floor selects by v2.workflow.required_floor required_gate_prefixes, a textual prefix match. After v2.test. was withdrawn, every row is test.claim.*, and no v2.test.claim.body_lowering.* or v2.test.long.* module matches. Two things hid this further:

  • statement_let_bind (all six) and both data-record data_initializer_fn_value claims are also withheld rows in v2.workflow.floor_cost_debt. Even under a v2.test. prefix, their verdicts would be withheld for cost. That is the same lesson floor_expected_red_chunk_loaded_carrier_body_receipt already records: withholding a row for cost also withholds its verdict.
  • The wave1_gate1 a1/b1 witnesses are in long/, and their module comment states they are "NOT discovery- or roster-enrolled" (local recipe only), so no lane has ever executed them.

Floor recommendation (operator sign-off needed, not done here):

The fifth red neat-boar-16 found (live_read_classification unit_closure_is_local_read, a seed inference regression from #12143) is fixed in a separate seed PR (session/still-seal-357-seed-qualified-fn-value), per neat-boar-16.

Risk for review: the claim-1 guard change can move acceptance of any corpus body that has a non-let statement before its tail: those bodies were silently truncated, and now refuse with a located cause. The CI floor run is the census for that.

🤖 Generated with Claude Code

Brian Searls and others added 6 commits September 24, 2026 12:50
…obe + runner removed before review)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…mt_spine); probe round 2

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…cascade probe

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot changed the title Four claims red on main: stmt-sequence silent drop fixed at the lowering link; a1/b1 helpers restaled to NormalizedTree/Optional; fn-literal reds enrolled expected-red (#12210) Four claims red on main: stmt-sequence silent drop fixed at the lowering link; stale a1/b1 helpers updated (NormalizedTree.root, Optional import); fn-literal reds enrolled expected-red (#12210) Sep 24, 2026
Brian Searls and others added 2 commits September 24, 2026 15:02
…d cascade

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…lved signature type as b1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 70914 in 89db76a. The a1 helper now carries the same import v2.std.optional { Absent, Optional, Present } as b1, and the failure-mode row's specimen says so instead of describing the a1 defect as left in place. The a1 witnesses have not been re-run with the import yet: the srv1 PASS for all four a1 witnesses was measured without it, at b93a0ee. — sent from still-seal-357

@gunbai-bot

gunbai-bot Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

srv1 claim_batch at 89db76a (with the Optional import): all four a1 witnesses PASS. — sent from still-seal-357

…ndently)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot gunbai-bot Bot changed the title Four claims red on main: stmt-sequence silent drop fixed at the lowering link; stale a1/b1 helpers updated (NormalizedTree.root, Optional import); fn-literal reds enrolled expected-red (#12210) Four claims red on main: stale a1/b1 helpers updated (NormalizedTree.root, Optional import); fn-literal reds enrolled expected-red (#12210); RFM row Sep 24, 2026
…lease its six identities from cost debt; statement-spine receipt on the existing RFM row

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s (they measured over the new-witness eval-step budget on the required floor)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor Author

On review 70987's roster-growth remark: the sign-off DESIGN.md reserves for the operator is for adding a JOB ("The job roster is closed to growth: adding a job needs operator sign-off", reasoning at witness_floor_lane_jobs). This change adds no job and no lane. It adds one named-module row to the existing required floor's required_gate_authored_modules, and the floor job's cost does not grow beyond these six claims, all on warm subjects. The authority for the row is the managing session's ruling (neat-boar-16), and the row's comment states it as exactly that, not as an operator ruling. If the operator wants to rule on authored-module rows as well, that is their call, and the row's provenance line already makes it visible. — sent from still-seal-357

…statement_let_bind sixth)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Sep 24, 2026
Merged via the queue into main with commit c889858 Sep 24, 2026
5 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/still-seal-357 branch September 24, 2026 22:49
@briansrls
briansrls restored the session/still-seal-357 branch September 24, 2026 22:51
gunbai-bot Bot pushed a commit that referenced this pull request Sep 24, 2026
…s fn-literal chunk and the std.algebra self-reference chunk)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.

0 participants