Skip to content

Floor resolve realization: identity-join obligation roster (0B) - #7810

Merged
gunbai-bot[bot] merged 31 commits into
mainfrom
session/loyal-carp-201
Aug 5, 2026
Merged

gunbai-bot[bot] merged 31 commits into
mainfrom
session/loyal-carp-201

Conversation

@briansrls

@briansrls briansrls commented Aug 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Replaces the floor finalization resolve-count pin with an identity-join obligation model in eight files:

  • gunbc.ci_materialization — ResolveObligation / ResolveRealization carriers, FloorFinalization.expected_resolve_obligations, resolve_realization_finalization_holds law
  • ci_floor_plan.dag — transports ci_floor_expected_resolve_obligations() unchanged (no HAND-Rust subject literals)
  • claim_executor.rs — records cold/warm realization at reuse sites; finalization refuses unattributed physical resolves, duplicate cold per rostered entry, unrostered observed subjects (identity join, both directions), and missing obligations (unevaluable on truncated walks); preserves resolve observations on every post-acquisition outcome (semantic witness failure no longer fabricates a missing-realization refusal)
  • Witnesses — floor_resolve_realization_witness_test.dag (8 admit/refuse controls) + ci_floor_plan_witness_test.dag transport checks + mirrored Rust unit tests

Class A generated-artifact long-lane relocation was removed from this branch (superseded by #7823).

Production receipt (truncated walk, run 30975530303)

Before this PR, a truncated walk that skipped the native-bundle batch reported a fabricated debt-change diagnosis (floor resolve count 1 differs from declared 2: duplicate-computation debt changed). On the same failure shape after the fix:

FLOOR-FINALIZATION-REFUSED: floor resolve obligations not fully scheduled:
1 obligation subject(s) never ran (walk stopped before dependent batches);
count law unevaluable — NativeBundleEscapingEntry
(src/v2/test/claim/execution/native_selected_witness_bundle_production.dag::native_selected_logic_production_spec)

The count law is unevaluable (not a roster debt change), the cause is named (walk stopped before dependent batches), and the missing obligation subject is located.

Inherited main red (falsifier_workflow_witness_test.dag)

6477c93437 fixes the call site: falsifier_cold_control_steps_follow_floor_in_job_order now calls falsifier_floor_job_steps() (the existing zero-arg wrapper that supplies job_id: "falsifier") instead of falsifier_job_steps() with no arguments. One defect, two failing witnesses (red_floor_workflow_fixture_cold_controls_still_execute delegates to the same function).

Root cause (not closed by this call-site fix): on main, falsifier_job_steps() — a call supplying no arguments to fn falsifier_job_steps(job_id: String) — compiled clean and failed only at runtime as undefined variable: job_id. That is the ordinary compiler floor failing in the DESIGN §4b sense: application arity should bind in exact bijection. #7834 walls the surplus direction (CallPositionalSurplus, too many arguments); this is the deficit direction and nothing catches it yet. Raised with sharp-seal-527 for whether it belongs in #7834 or a follow-up — the language-layer hole must stay ranked even though the symptom is repaired here.

Identity-join completeness (6477c93437)

Finalization now refuses unrostered observed obligation subjects by name (entry::function) independently of the roster-minus-derived check. The count-equality arm (obligations.len() != declared_resolve_count()) is removed — entailed by the two identity joins and could hide a surplus when a missing roster subject balanced the count. RED: floor_finalization_names_unrostered_subject_when_roster_subject_also_missing.

Test plan

  • cargo test -p v1-compiler --bin claim_executor floor_finalization
  • cargo test -p v1-compiler --bin claim_executor claim_result_for_outcome_preserves
  • cargo test -p v1-compiler --bin claim_executor floor_finalization_refuses_unrostered
  • cargo test -p v1-compiler --bin claim_executor memo_warm_attaches_shared_pool
  • cargo test -p v1-compiler --lib nfr_roster_receipt
  • CI floor (obligation receipt + finalization law)

Worker attestation

  • Title/body describe current eight-file scope only
  • Tests executed locally on observation-retention + finalization paths
  • No secrets / surprise commits

@gunbai-bot
gunbai-bot Bot marked this pull request as ready for review August 4, 2026 22:56
@cursor

cursor Bot commented Aug 4, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@gunbai-bot

gunbai-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Addressed review 48325 in f7061d00:

Finding 1 — entry-grain memo sharing vs function-grain subjects: Confirmed. count_unattributed_physical_resolves was counting cheap-gate cold resolves on dag/tools/floor_effect_gate_witness.dag as unattributed because only the first coalesced function carries resolve_nanos > 0, while dag_compile_clean_gate_passes satisfies CompileAnchorWholeTree via warm walk-memo. Fixed by counting unattributed at entry grain: a physical resolve on any co-resident function of a transported obligation entry is not unattributed. Added floor_finalization_cheap_gate_cold_on_shared_obligation_entry_is_not_unattributed as the discriminating control; extra-entry cold resolves still refuse.

Finding 2 — stale floor_finalization_note: Replaced the declared_resolve_count is Nat, not Int paragraph with text describing expected_resolve_obligations transport and entry-grain unattributed counting.

— sent from loyal-carp-201

@gunbai-bot

gunbai-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Addressed review 48340 in 63bf846:

Finding 1 — parallel representation / nicknames: Renamed the Rust warm variant SharedResolveSatisfied → SatisfiedFromSharedPool to match gunbc.ci_materialization ResolveRealization. Receipt disposition tags now use the exact variant names (ColdResolvePerformed, SatisfiedFromSharedPool) via named constants, not snake_case nicknames. Added dissolve-on comment on the seed enum.

Finding 2 — tautological warm provider/receipt validation: The reuse site now records a single provider_id (from floor_entry_walk_memo_provider_id authority); the executor no longer duplicates it into a second field and then validates equality. Non-empty provider_id is still required at join time; provider/receipt consistency for malformed observations remains enforced by .dag witnesses (warm_without_provider_receipt, realization_is_well_formed).

— sent from loyal-carp-201

Brian Searls and others added 17 commits August 5, 2026 03:14
…ion.

Warm PRs can satisfy a rostered obligation from the shared index without
paying a cold resolve; the gate now checks closed-universe obligation
accounting while ci_floor_declared_resolve_count stays at 2. Rehomes
witness_per_artifact_red_receipts to the falsifier long lane (Class A).

Co-authored-by: Cursor <cursoragent@cursor.com>
ci_floor_resolve_obligation_count now counts the enumerated roster
instead of aliasing the declared literal. The witness cross-checks
roster length against ci_floor_declared_resolve_count with a RED
control on a forked declaration.

Co-authored-by: Cursor <cursoragent@cursor.com>
Gate obligation receipt lines on FloorFinalization so regen/falsifier
walks without compile-anchor obligations do not fail resolve-receipt
write. Land richer carriers in ci_materialization, eight witness
controls, and strengthened Class A long-lane justification notes.

Co-authored-by: Cursor <cursoragent@cursor.com>
Delete ci_floor_resolve_shared_pool_provider_id duplicate literal in
ci_materialization; import gunbc.floor_materialization symbol per review
48249. Remove tautological provider-id witness join.

Co-authored-by: Cursor <cursoragent@cursor.com>
Per review 48261: floor_resolve_obligation_seed_constants_match_dag_authority
reads compile_anchor_obligation_subject, native_bundle_obligation_subject,
and floor_index_build_share_provider_id from the authority .dag files and
asserts the HAND-Rust executor literals still match.

Co-authored-by: Cursor <cursoragent@cursor.com>
Cite walk_plan_run_stage_claim_executor_seed_deferral and the authority
receipt test in ci_floor_resolve_obligation_authority_note (review 48261).

Co-authored-by: Cursor <cursoragent@cursor.com>
Move the finalization transport note below the import block — a data row
between imports broke module parsing in heal/regen. Align the mismatch
fixture with transported-obligation semantics.

Co-authored-by: Cursor <cursoragent@cursor.com>
Route all/any through v2.std.algebra (for_all/any) so heal/regen typecheck
green; replace the tautological declared-count RED witness with an
anchor-only obligation fork; restore walk_memo drift gate in claim_executor.

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

Rename SharedResolveSatisfied to SatisfiedFromSharedPool, use PascalCase
disposition tags matching ResolveRealization variants, and record a single
provider_id at reuse sites instead of tautologically duplicating receipt.

Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the blanket entry exemption in count_unattributed_physical_resolves
with a per-entry cap: rostered obligation entries may carry at most one
physical cold resolve; a second cold on the same entry refuses finalization.

Co-authored-by: Cursor <cursoragent@cursor.com>
When StopBeforeDependents skips batches, name never-ran obligation
subjects and report the count law unevaluable instead of diagnosing
roster debt change from a partial measurement.

Co-authored-by: Cursor <cursoragent@cursor.com>
Any missing transported obligation subject refuses with count law
unevaluable; walk_truncated only selects the explanation string.

Co-authored-by: Cursor <cursoragent@cursor.com>
Per review 48392 cosmetic finding in run_discovery_batch_node.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot
gunbai-bot Bot force-pushed the session/loyal-carp-201 branch from 4742d02 to 8b1ff18 Compare August 5, 2026 03:14
@gunbai-bot gunbai-bot Bot changed the title Shared CI floor item 0: cold-vs-warm resolve realization model + the roadmap-render witness cost Floor resolve realization: identity-join obligation roster (0B) Aug 5, 2026
claim_result_for_outcome carries ResolveRealizationObservation through
Fail, NotBool, RuntimeError, and TimedOut so semantic witness failure
cannot fabricate a missing-realization refusal at finalization. Native-
bundle post-resolve failures retain cold observation and resolve_nanos.

Per operator ruling on #7810 (loyal-ram-550).

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot
gunbai-bot Bot force-pushed the session/loyal-carp-201 branch from 78739a8 to 470d168 Compare August 5, 2026 04:34
warm_without_provider_receipt and cold_without_resolve_receipt carry
off-variant wildcard arms for discriminating witness REDs; enroll both
in gunbc.non_fold_residue with dissolve-on trigger (fixes CI nfr witness).

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot
gunbai-bot Bot force-pushed the session/loyal-carp-201 branch from 142720a to 8d179e6 Compare August 5, 2026 06:14
…anosecond.

Restore floor_resolve_obligation_seed_constants_match_dag_authority with
test-only obligation subject literals (production still parses transported
obligations). ResolveColdReceipt.resolve_nanos is now std.measure.Nanosecond.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Addressed review 48570 in 696bbb793b:

Finding 1 — obligation-subject drift gate: Restored floor_resolve_obligation_seed_constants_match_dag_authority. Obligation entry/function literals now live only in the test module (TEST_* constants feeding test_floor_finalization()); production still parses transported obligations from WalkPlan.finalization with no HAND-Rust subject literals.

Finding 2 — unit modeling: ResolveColdReceipt.resolve_nanos is now std.measure.Nanosecond (nanosecond(count: …) at construction sites; comparisons via nanosecond_count). Witness test updated accordingly.

— sent from loyal-carp-201

Brian Searls and others added 2 commits August 5, 2026 06:38
Main's zero_eval_collision_records ClaimResult initializer predates the
0B field; fill resolve_realization: None so claim_executor tests compile.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Addressed review 48609:

Finding 1 — warm memo observation never attached: Confirmed. let mut first = fresh_resolve meant every claim in a warm group took (0, None), so observation_to_obligation_line would refuse on a real warm CI walk. Fixed: let mut first = true (matching the sibling loop), so the group's SatisfiedFromSharedPool observation attaches to the first claim regardless of freshness. RED: memo_warm_attaches_shared_pool_observation_on_first_claim.

Finding 2 — run_shared_entry_claims passes None: Confirmed for the spawned non-memo path. Obligation subjects (floor_effect_gate_witness, native bundle) route through walk-memo / NativeBundle respectively, but the cold path still owed a ColdResolvePerformed observation on the first claim. Fixed with the same first-claim attachment pattern as the memo cold arm.

— sent from loyal-carp-201

Brian Searls and others added 2 commits August 5, 2026 07:21
`run_memo_shared_claims` gated `first` on fresh_resolve, so warm
walk-memo hits never attached SatisfiedFromSharedPool to any ClaimResult.
`run_shared_entry_claims` now records ColdResolvePerformed on the first
claim in the group. RED: memo_warm_attaches_shared_pool_observation.

Addresses review 48609.

Co-authored-by: Cursor <cursoragent@cursor.com>
Finalization now refuses unrostered observed obligation subjects by name
(entry::function) independent of the roster-minus-derived check; delete the
count-equality arm that could hide a surplus when counts matched. RED:
floor_finalization_refuses_unrostered_observed_obligation_subject_by_name,
floor_finalization_names_unrostered_subject_when_roster_subject_also_missing.

Also fix falsifier_cold_control_steps_follow_floor_in_job_order: call
falsifier_floor_job_steps() (job_id was undefined at runtime).

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot
gunbai-bot Bot force-pushed the session/loyal-carp-201 branch from fb97223 to 6477c93 Compare August 5, 2026 08:39
@gunbai-bot

gunbai-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Addressing review 48690 (cursor/composer-2.5 REQUEST_CHANGES) — verified against f0323b25c.

Finding 1: missing obligation_subjects at call sites — fixed

run_stage now takes obligation_subjects: Option<&ObligationSubjectSet> and threads it through all three execution paths:

  • spawned units (run_batch_unit, cloning the set for the closure)
  • memo path (run_memo_shared_claims)
  • main-thread units (run_batch_unit)

run_walk derives the set once from floor_finalization via obligation_subject_set(floor_finalization) and passes obligation_subjects.as_ref() into both ordinary-batch and on-success run_stage calls. Unit tests pass None to preserve legacy memo-purity behavior where no floor finalization is in play.

Tree compiles; cargo test -p v1-compiler --bin claim_executor observation is green locally.

Finding 2: observation landing on wrong co-resident — fixed upstream, not by roster transcription

Agree with the diagnosis. The production failure (run 30989962516) was not missing roster rows — cheap_claim_pool_gate_passes and emit_host_gate_passes legitimately share dag/tools/floor_effect_gate_witness.dag entry-resolve groups but are not semantic resolve obligations. The compile anchor (dag_compile_clean_gate_passes, CompileAnchorWholeTree) is the only rostered subject on that entry.

Fix: take_group_observation_for_claim attaches resolve_realization only when (entry, function) is in the transported roster. Co-resident cheap/emit gates still resolve (physical resolve_nanos unchanged) but no longer fabricate obligation observations.

None => true is intentional only for unit tests without FloorFinalization; production walks always pass Some(subjects) when finalization is enrolled.

Witnesses:

  • take_group_observation_attaches_only_to_rostered_subject (pure structural control)
  • obligation_observation_skips_non_rostered_co_residents (spawn + memo paths on a lightweight witness entry)

Also merged origin/main (#7834 deficit-arity wall; redundant job_id fix absorbed cleanly).

— sent from loyal-carp-201

Brian Searls and others added 4 commits August 5, 2026 10:33
Thread obligation_subjects from run_walk through run_stage into spawn,
memo, and main-thread batch units so co-resident cheap/emit gates on
floor_effect_gate_witness.dag no longer fabricate obligation observations.

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

Per loyal-ram-550 option (a): resolve_realization attaches to the first
claim in each resolve group regardless of roster membership; roster
enforcement stays in unrostered_observed_obligation_subjects at
finalization. Removes the roster-gated attachment path that made the
derived-minus-roster check inert on the live path.

Co-authored-by: Cursor <cursoragent@cursor.com>
Fold the hand-enumerated CompileAnchor/NativeBundle arms into
ci_floor_resolve_obligation_identities() so roster growth does not
require editing the duplicate check.

Co-authored-by: Cursor <cursoragent@cursor.com>
@gunbai-bot

gunbai-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Addressing review 48718 (cursor/composer-2.5 REQUEST_CHANGES) — implemented per loyal-ram-550 option (c) in the push landing now.

Finding — first-in-group attribution breaks cheap-gate schedule — fixed

Agree. ceb4d569 (option a) was wrong: it stapled observations onto arbitrary co-residents and made unrostered_observed_obligation_subjects fire false positives on cheap_claim_pool_gate_passes / emit_host_gate_passes.

Restored roster-gated attachment (take_group_observation_for_claim): observation goes to the first rostered (entry, function) in the group; co-resident cheap/emit gates still resolve physically but carry no resolve_realization.

Closed the real gap (option c, step 2): count_unattributed_physical_resolves is now subject-grain — (entry, function) must match the transported roster, with co-resident cold resolves on a shared obligation entry attributed when a rostered subject on that entry carries realization (compile-anchor warm memo path). Refusal names subjects: entry::function.

Deleted unrostered_observed_obligation_subjects (option c, step 3): with correct attribution it cannot fire on the live path; keeping it beside subject-grain unattributed was redundant production machinery (DESIGN 4b(4)). RED controls repointed:

  • floor_finalization_refuses_unattributed_physical_resolve_at_non_rostered_subject (emit_host on rostered entry, no obligation satisfaction)
  • floor_finalization_names_unattributed_subject_when_roster_subject_also_missing
  • floor_finalization_cheap_gate_cold_on_shared_obligation_entry_is_not_unattributed (unchanged — cheap co-resident not unattributed when anchor satisfied)
  • obligation_observation_skips_non_rostered_co_residents (attachment path)

Floor should go green without upstream scheduling dependency.

— sent from loyal-carp-201

@gunbai-bot
gunbai-bot Bot merged commit 03400c7 into main Aug 5, 2026
5 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/loyal-carp-201 branch August 5, 2026 12:16
gunbai-bot Bot pushed a commit that referenced this pull request Aug 5, 2026
…ss B rows).

Keep both roster appends in non_fold_residue.dag: four Class B verdict-projection
rows (#7835) and two resolve-realization predicate rows (#7810).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 5, 2026
…scovery.

- Add FalsifierSubstrateLongLane exclusion for rust_test_fixtures_import_closure_witness_test.dag so rows 1-2 stop running in per-PR discovery (5s budget kill).
- Drop stale non_fold_residue row for binding_refuses (exhaustive match, no wildcard arm).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 5, 2026
…scovery.

- Add FalsifierSubstrateLongLane exclusion for rust_test_fixtures_import_closure_witness_test.dag so rows 1-2 stop running in per-PR discovery (5s budget kill).
- Drop stale non_fold_residue row for binding_refuses (exhaustive match, no wildcard arm).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 5, 2026
…scovery.

- Add FalsifierSubstrateLongLane exclusion for rust_test_fixtures_import_closure_witness_test.dag so rows 1-2 stop running in per-PR discovery (5s budget kill).
- Drop stale non_fold_residue row for binding_refuses (exhaustive match, no wildcard arm).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 6, 2026
…scovery.

- Add FalsifierSubstrateLongLane exclusion for rust_test_fixtures_import_closure_witness_test.dag so rows 1-2 stop running in per-PR discovery (5s budget kill).
- Drop stale non_fold_residue row for binding_refuses (exhaustive match, no wildcard arm).

Co-authored-by: Cursor <cursoragent@cursor.com>
gunbai-bot Bot pushed a commit that referenced this pull request Aug 6, 2026
…scovery.

- Add FalsifierSubstrateLongLane exclusion for rust_test_fixtures_import_closure_witness_test.dag so rows 1-2 stop running in per-PR discovery (5s budget kill).
- Drop stale non_fold_residue row for binding_refuses (exhaustive match, no wildcard arm).

Co-authored-by: Cursor <cursoragent@cursor.com>
briansrls pushed a commit that referenced this pull request Aug 6, 2026
…lves from its declared import closure only (#7835)

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Fix CI fmt and derive Class B stripped overlay at runtime.

Apply cargo fmt to v1_interpreter.rs (the sole build failure at 4ba3186).
Replace the 4,263-line checked-in rust_test_fixtures copy with
gunbc.class_b_import_closure_overlay: read the live file, strip the declared
rust import block, and materialize under an ephemeral overlay for rows 3-4.
Keep the small authored perturbation fixtures; enroll stripped rows via
class_b_import_closure_transport with discovery exclusion for wet effects.

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

* Fix witness admission: move Class B stripped rows to self_host.

Discovery was refusing rows 3-4 as UnclassifiedPathDeferral because they
sat under dag/test/claim/ with an OfflineLocalRecipe exclusion but no
executing consumer. Relocate to src/v2/test/claim/self_host/ (outside
witness_discovery_scan_dirs), matching crate_layout transport-run posture,
and register frozen_path_deferral rows for the migration wall.

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

* Put Class B rows 3-4 on the transport gate, not discovered test fns.

loyal-ram-550 option (a): rows 3-4 are ordinary funcs on
class_b_import_closure_transport and run_class_b_import_closure_gate
calls them directly. Removes the stripped self_host witness file,
OfflineLocalRecipe exclusion row, and frozen_path_deferral entries that
asserted a non-cadence consumer. Rows 1-2 stay discovery-enrolled and
are replayed through run_gunbc_claims inside the same gate.

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Shrink Class B witness pool and enroll long-lane rows for budget.

Rows 1-2 use the declared-import footprint instead of witness_layer_roots,
restoring discovery enrollment with a stronger minimal baseline; substrate
long-lane rows exclude them from the 5s discovery batch while the ingest
gate still replays via run_gunbc_claims. Adds non_fold_residue roster rows
for declared_import_closure_binding verdict projections.

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

* Add explicit witness admission for Class B long-lane rows.

Row 2 cold on the minimal pool measures ~64s locally; CI run 30986525413
measured 48868.8ms. Discovery exclusion requires exact admission rows naming
FalsifierSubstrateLongLane, paired with falsifier_substrate_long_lane_rows
for falsifier batch scheduling.

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Fix Class B gate compile and formalize cold-control double-home.

Add extdeps.git.inspect import so rows 3-4 compile; admission rows now
state pattern (c): per-PR gate is merge-blocking consumer, falsifier
long lane is selection-miss backstop (same shape as compile-clean/regen).

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Fix rustfmt drift in Class B gate skip closure code.

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

* Drop Class B long-lane rows from explicit_witness_admission.

FalsifierSubstrateLongLane belongs in falsifier_substrate_long_lane_rows
until the admission-carrier migration lands; the projection wall only
covers known-red probes today. Carry reason/dissolve_on on SubstrateLongLaneRow.

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Add unit tests for Class B gate skip failure-arm labels.

The two diff/closure failure paths already return grep-countable run labels
(distinct from structural run_class_b_gate); lock that contract with RED
controls so observability cannot regress silently.

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Fix CI after #7810 merge: exclude Class B long-lane witnesses from discovery.

- Add FalsifierSubstrateLongLane exclusion for rust_test_fixtures_import_closure_witness_test.dag so rows 1-2 stop running in per-PR discovery (5s budget kill).
- Drop stale non_fold_residue row for binding_refuses (exhaustive match, no wildcard arm).

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

* Align Class B discovery exclusion row with substrate long-lane precedent.

Reuse excl_substrate_long_lane_reason/dissolve on the path-policy row; measured
cost remains on the SubstrateLongLaneRow function-grain entries.

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

* fix: merge main and regen stage0 after generated-artifact drift

Merge latest main (source annotation lane) and run regen_stage0 so all
generated stage0 artifacts are a fixed point — including
v1_compiler_infer_method.rs builtin registry rows that were silently stale
after the prior merge (Class B builtins registered in 04_method.dag but
missing from the generated resolver).

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Deduplicate Class B skip pool roots; enroll HAND-RUST deferral.

Project class_b_declared_import_pool_roots live from the overlay .dag
authority (identity-join tested) instead of a forked Rust const; reuse
witness_layer_roots() for the wide pool. Add the selection_control-style
dissolve-on block and extend the Step 5 roster in
affected-set-precompute-pruning.md (review 49228).

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

* Remove unused substrate_long_lane_admission helper.

Leftover from an earlier Class B enrollment attempt; long-lane rows
now live only on falsifier_substrate_long_lane_rows in ci_layer_roots
(review 49245, non-blocking).

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

* Regen stage0 after rebase onto main.

Restore Class B builtin registry rows and align std_core partition
with post-rebase main.

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Fix NFR roster: drop stale Class B rows that are not live residue sites.

binding_refuses is an exhaustive match and row4_pool_coincidence_or_refuse
is a boolean composition with no wildcard arm — both were stale roster
entries that made non_fold_residue_no_unrostered_or_stale fail in CI.

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

* Refuse NotRunnable vacuous pass in Class B binding verdict predicates.

binding_refuses mapped BindingNotRunnable to true, letting rows 3–4 green
without running stripped-overlay controls when overlay setup failed.
Align with cli_run NotRunnable contract and compile_diagnostic_census
precedent; add discriminating controls on both predicates.

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

* WIP: Closure control for the Class B repair: prove rust_test_fixtures resolve

* Enroll binding_refused_at_intended_seam on the NFR frontier.

Follows the P1 result-algebra rename in declared_import_closure_binding;
keeps non_fold_residue_no_unrostered_or_stale green after the predicate
tightening landed in a024930.

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

* Fix strip receipt test to use multiline import block fixture.

The stripper closes on a line exactly equal to "}"; the prior
single-line import fixture never completed removal.

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

* Move Class B unit witnesses out of production .dag modules.

Witness naming hygiene requires test fn in *_test.dag files; regen
pre-plan walk refused the eight co-located controls in overlay/binding.

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

* Move Class B unit witnesses to discovery-admitted test files.

rust_test_fixtures_import_closure_witness_test.dag is path-excluded
(FalsifierSubstrateLongLane); the eight predicate/strip controls belong
in per-PR discovery, not inherited deferral.

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

* Close P1(b): compile graph:None is NotRunnable, not seam refusal.

Parse/frontend failure produced BindingObserved{symbol_resolves:false,
blocking_hard_diagnostic_count:0}, vacuously passing row 3. graph:None now
returns NotRunnable; transport maps that to ObservationProductionRefused
phase=compile. Discriminating Rust + .dag controls enrolled.

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

* Refuse binding observation when compile has any hard diagnostic.

The symbol-filtered blocking_hard_diagnostic_count never saw unrelated
hard errors, so graph+hard-diag could vacuously pass row 3. Any hard
diagnostic on the declared-import-closure compile now returns NotRunnable;
producer-level control added on a graph-present resolved result.

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

---------

Co-authored-by: gunbc-ci-auto-heal <gunbc-ci-auto-heal@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.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.

1 participant