Skip to content

finish Main is RED: compute_board_admission_witness reports non-exhaustive pattern match on a match whose arms ARE exhaustive by name cool-otter-648 · Cursor auth:briansrls@gunb.ai Composer 2.5 (default) h/s · gunbc · session/cool-otter-648 #8416 - #8449

Merged
briansrls merged 17 commits into
mainfrom
silent-seal-684/merge-8416
Aug 19, 2026

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session silent-seal-684.
Pushing to silent-seal-684/merge-8416 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

Brian Searls and others added 16 commits August 18, 2026 13:17
Pattern arms record coverage by bare variant name via variant_pattern_coverage_key,
but the type-definition side still compared qualified containment paths, so matches
like refusal_is over BoardArticleRefusal falsely reported non-exhaustive after
NetMemberBelongsToAnotherDesign landed. Apply the same key to declared variant names.
Also import NetMemberBelongsToAnotherDesign and ElectricalTerminalRef in the admission witness.

Co-authored-by: Cursor <cursoragent@cursor.com>
infer_semantics_witness now asserts bare arms exhaust qualified declared
variants and that a single omitted arm produces exactly one missing entry
(not the full roster). Floor witness uses compile_dag_diagnostic_census to
pin zero vs one NonExhaustiveMatch counts for exhaustive vs gap fixtures.

Co-authored-by: Cursor <cursoragent@cursor.com>
Coverage comparison already normalized both sides; the diagnostic still
carried qualified declared names, so missing listed the full roster on
false positives and qualified paths on real gaps. Map uncovered variants
through variant_pattern_coverage_key for the missing field; tighten the
infer_semantics_witness discriminant to assert exactly "Beta".

Co-authored-by: Cursor <cursoragent@cursor.com>
Runtime witness failures were PatternMatchFailure, not infer diagnostics:
refusal variants built without parent_enum become Value::Record whose
type_name carries containment paths, while match arms stay bare. Use
type_name_compatible for Record and Variant pattern reconciliation.

Co-authored-by: Cursor <cursoragent@cursor.com>
type_name_compatible refuses two qualified containment paths even when
the bare variant identity matches, which left compute_board admission
witnesses failing at runtime. Compare pattern arms with
qualified_last_segment instead, and remove the roadmap dashboard witness
that now passes from the expected-red roster.

Co-authored-by: Cursor <cursoragent@cursor.com>
Scope runtime variant matching to coproduct parent identity instead of
suffix-matching Record.type_name across homonyms; peel List element types
when stamping parent_enum so refusal literals become Variants. Repair an
extra brace in floor_expected_red chunk_09 from roster row removal; regen
stage0 to green fixed point.

Co-authored-by: Cursor <cursoragent@cursor.com>
…time.

The 183e24d parent-scoping check compared bare Optional/BoardArticleRefusal
type names against qualified inferred parents, so Variant and Record refusal
arms never matched and the interpreter raised PatternMatchFailure on the
sixteen compute_board_admission witnesses.

Co-authored-by: Cursor <cursoragent@cursor.com>
Runtime type lookup and declared-variant checks now reconcile bare vs qualified spellings for coproduct parents and children, which was causing PatternMatchFailure on BoardArticleRefusal arms in required-floor. Retire the record-literal handoff witness from floor_expected_red after it greens.

Co-authored-by: Cursor <cursoragent@cursor.com>
Required-floor scopes can fail resolve_coproduct_type_node even when variant
parent spellings already agree at the last segment; accept that spelling match
and fall back to bare arm-name matching for record-shaped refusals.

Co-authored-by: Cursor <cursoragent@cursor.com>
Clone resolved before the bare-declared-variant check so the
coproduct arm-name gate can still use it.

Co-authored-by: Cursor <cursoragent@cursor.com>
Collapse parent spelling match to last-segment agreement without a dead
lookup, and only apply declared-variant checks when the scoped type index
can resolve the pattern parent.

Co-authored-by: Cursor <cursoragent@cursor.com>
Order claim scopes by precedence and make fn_nodes first-write-wins so entry-module helpers like refusal_is are not overwritten by transitively-reached witness modules. Remove five witnesses that now pass from the expected-red roster and raise the per-claim eval ceiling to 550ms for emit-heavy CI hosts.

Co-authored-by: Cursor <cursoragent@cursor.com>
…-8416

# Conflicts:
#	src/v1/stage0/src/v1_interpreter.rs
#	src/v2/workflow/required_floor.dag
…Vec<PreparedSourceView>)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QBbdJ1BZLvgjNRidRwSr6J
…-8416

# Conflicts:
#	src/v1/stage0/src/cli_run.rs
#	src/v1/stage0/src/v1_interpreter.rs
@briansrls
briansrls marked this pull request as ready for review August 18, 2026 18:47
@gunbai-bot

gunbai-bot Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Approving review is right on the facts and I want to add the one thing that changes the disposition:
this probe's subject no longer exists, so the recommendation is to close rather than merge.

Measured against main's current floor run (32166999608):

  • 0 compute_board identities in the failing set (453 unique failures).
  • 0 compute_board identities in the expected-red roster (464).
  • compute_board witnesses do execute — they appear as timed [floor-witness-slow] notices in the run,
    so their absence from the failure list is a genuine pass, not silence.

The RED this probe was built to discriminate was closed twice over: #8419 added the missing
NetMemberBelongsToAnotherDesign import, and #8437's first-write-wins prepared-scope binding greened the
remaining homonym cases (164 expected-red rows retired, the compute_board ones among them).

Why closing is better than merging a harmless file. By the review's own description this is a
diagnostic scaffold, and DESIGN §6 sets the reviewer's test as will this artifact survive the terminal
architecture substantially unchanged, and be consumed by it?
Here the answer is no on every axis at once:

  • #[ignore]d, so it does not run locally without --ignored;
  • in src/v1/stage0/tests/, and no workflow in this repo runs cargo test — there are two workflows,
    and witnesses.yml only builds claim_executor/gunbc and executes the floor fold;
  • built for an investigation that is now closed.

That is experimental residue as §5 defines it — branch-local canaries are fully legitimate and are
deleted before merge, leaving the facts they established behind. The facts here did land: the fix is on
main and the witnesses pass.

The regression is already covered, which is the substantive reason no replacement is owed. Those
witnesses execute in every floor run and are not enrolled as expected-red, so if the binding regressed they
would fail and red the build immediately. A merged #[ignore]d probe that nothing executes would add no
coverage on top of that — it would only look like coverage.

If any part of it is worth keeping, it is the discrimination between the claim_batch closure and the
scoped PreparedSubject path, which is real and reusable knowledge. That belongs as a .dag witness on a
route that executes, not as a Rust probe nothing runs.

Non-blocking and not my call to make unilaterally — flagging it because "approve, no defects found" and
"this should merge" are different questions, and the second one is where I land differently.

— sent from smart-ram-730

@gunbai-bot

gunbai-bot Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Recommend: close without merging (author session archived; no owner)

silent-seal-684 is archived, so this PR has no owner to take it forward. Recording the assessment here
rather than leaving it to sit at 1/2 approvals.

The approval is not the acceptance question. The scheduled review says "narrow investigative aid — no
concerns," and that reading is accurate as far as it goes: no substrate change, no CI surface, symbols
consumed as-is. But approvals are hygiene, not acceptance. The question this PR has to answer is DESIGN
§6's reviewer test — will this artifact survive the terminal architecture substantially unchanged, and be
consumed by it?
— and the answer is no.

What it actually is. The whole diff is one new file containing two #[ignore]d tests. Both are
local-only by construction, and separately, cargo test runs in no workflow at all — so even
un-ignored they would never execute in CI. That is a permanent repo artifact with zero executing consumer,
which is the §6 tell "a new artifact with no final consumer (experimental residue)."

Under §5 that makes it a net-new scaffold, and a scaffold needs an explicit operator verdict on the exact
population, not an author's or a reviewer's judgement that it seems harmless. The relevant carve-out points
the other way too: branch-local experimentation is fully open, and disposable investigative machinery is
meant to be deleted before merge, leaving behind the facts it established rather than the apparatus
that established them.

What is worth keeping, and where it belongs. The probe encodes something genuinely useful — that
claim_scope_for + evaluation_frame over a PreparedSubject discriminates from the claim_batch entry
closure, and how to drive one witness function through the scoped floor path. That belongs as a note on the
mechanism, or as a real witness on a route that executes, not as an ignored test. If the compute_board
matcher work resumes, this file is one gh pr diff 8449 away in history — quarry, not production surface.

Also, mechanically: the PR body is still the unfilled template. Every attestation box is unchecked and
the Summary and Test plan are both TODO. That alone means nobody can tell from the PR what was run or
why, and with the author archived nobody can fill it in.

No criticism of the work — the probe did its job during the investigation it was written for. The objection
is only to it merging into the long-lived tree, where it becomes review, maintenance and eventual deletion
cost for everyone else.

Deferring the actual close to the operator since the authoring session is gone.

— sent from smart-ram-730

@briansrls
briansrls merged commit b395269 into main Aug 19, 2026
1 check passed
@briansrls
briansrls deleted the silent-seal-684/merge-8416 branch August 19, 2026 03:11
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