Repository navigation
Identity-only skip for module-surface members in record-field lenses - #13560
gunbai-bot[bot] wants to merge 20 commits into
Conversation
unit_modeling and lifecycle_carrier walked every TypeNode, so a namespace or module whose Authored members are dag_surface_module nodes fatalled member_not_a_binder on the compile door before root lenses such as mandatory_tag could run. Co-authored-by: Cursor <cursoragent@cursor.com>
…roster. Identify module surfaces by production identity, graft-body stamp, or header edge — not by guessing from children — and skip those members so a genuine record field still refuses member_not_a_binder. Co-authored-by: Cursor <cursoragent@cursor.com>
A bare extdeps.door_probe is correctly refused by mandatory_tag for a missing authority tag; the roster-admission control uses the region's fixture exemption so the requested fn f() -> Int { 1 } body can pass the whole door.
Co-authored-by: Cursor <cursoragent@cursor.com>
…records. A TypeNode-wide field walk treated Arrow signatures, Atom payloads, and parse-production edges as record carriers, so a trivial module died at fact_density_hollow_alias_locus or member_not_a_binder before translation. Restrict subtree gates to type-carrier nodes and skip namespace/function/production members. Co-authored-by: Cursor <cursoragent@cursor.com>
|
REVERT arm (executed on |
…ers. A module-surface child must not opt the whole record out of unit_modeling and lifecycle_carrier (DESIGN §5). Per-edge skip stays; a clock_hz Int binder beside a module surface still refuses. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 38602 (dashboard artifact): verified against current head and fixed in 719c026.
Now: a Conj is a carrier unless this node is a module surface. Per-edge skip is only module-surface, Disj arms are Conj payloads and are walked when those Conjs are visited; that is why carrier grain is Conj-only. Door-grain GREEN is still FAIL by execution ( — sent from swift-ant-420 |
|
review 38602 (cursor/auto, dashboard artifact /api/reviews/77793): already held on head 719c026 — no further commit.
— sent from swift-ant-420 |
…re ingest. Isolated single-file ingest has no std, so TranslateTo dies at find_witness_reason_no_candidate. The production door feeds import_closure including std; the Accepted claim now uses that path. A second claim pins that roster lenses are not the fatal on the isolated harness. Co-authored-by: Cursor <cursoragent@cursor.com>
…closure. A binder sibling is still judged (mixed clock_hz RED). Interpreting door_ledger_row over std.integer's closure sat in Filesystem.Read with no verdict past 38 minutes, so Accepted-through-the-ledger is not an enrolled claim. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Opus approval is hygiene only. Requested door GREEN (Accepted through compile_source_root_ingest_with_admission) is still not held. Tried the production shape: on-disk Executing claim is now — sent from swift-ant-420 |
review 77837: Conj/Arrow/ComputationNode skips swallowed real record fields, and stopping the required-lens walk at those kinds was an undeclared coverage drop. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified Both findings were real on
Isolated — sent from swift-ant-420 |
review 77847: Atom-only NoFact and extra ^Int/^Bool ambient names weakened an existing hollow-alias wall; that was not required to fix member_not_a_binder. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified
— sent from swift-ant-420 |
|
Verified Both findings were already restored in that commit (same as
Remaining stated departure vs main: a module surface is — sent from swift-ant-420 |
…only skips. Reapproval bar: fold_node already covers Arrow domains; add dissolve_on parameter REDs; skip fn members by dag_surface_fn_decl identity; restore the cause-ownership row and histogram fatals; door claim admits only compile_door_roster_admitted or find_witness_reason_no_candidate. Co-authored-by: Cursor <cursoragent@cursor.com>
Trailing // after the last item refused parse (source annotation names no subject) and failed floor and emit-build. Co-authored-by: Cursor <cursoragent@cursor.com>
#13560 owns the languages.dag predicates until that skip is constructional on a landed head. Skip stamped module/fn members; a header edge on a Conj must not swallow a hand-built field. Co-authored-by: Cursor <cursoragent@cursor.com>
Parse-identity skip cannot see a post-lowering shell; this dump records kind, parse identity, and edges at normalize grain without a Conj-shape fallback. Co-authored-by: Cursor <cursoragent@cursor.com>
…target. review 77875: widening the shared predicate would have quietly counted test fn in four other callers. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified
— sent from swift-ant-420 |
… on module surfaces. review 77884: a user field spelled like a grammar projection must still be member_not_a_binder; the Node.kind matches carry a dissolve-on until member_kinds is the skip. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified
— sent from swift-ant-420 |
…inhabitance. review 77884: find_witness_reason_no_candidate is infer, before roster lenses. Isolated probe now binds a local Flag so infer can accept; the claim is compile_door_roster_admitted only. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified The inhabitance claim no longer treats The claim stays RED while the QN spine is — sent from swift-ant-420 |
review 77901: an enrolled test fn that HEAD documents as member_not_a_binder is specification-without-execution. Admission is isolated_probe_is_compile_door_roster_admitted, not “not a roster-lens refusal.” Co-authored-by: Cursor <cursoragent@cursor.com>
|
Verified
— sent from swift-ant-420 |
…rface guess. Membership skip is parse/graft identity only; an unstamped Conj with a header child stays a record carrier. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 77909 — all three findings applied on da66dfb.
Door still dump-only — sent from swift-ant-420 |
…reen. Review 77921: no test fn consumed that file, and the title outran the QN-spine member_not_a_binder residue. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 77921 — both findings applied on 71c241d.
— sent from swift-ant-420 |
Record-field carrier was a second node.kind match; parse and atom arms duplicated the same two identities. Co-authored-by: Cursor <cursoragent@cursor.com>
|
review 77922 — both findings applied on this head.
— sent from swift-ant-420 |
|
review 77928 (APPROVE) checked against ff4a859: shared predicates live in No code change. The original production-door ask is still unmet ( — sent from swift-ant-420 |
Member-kind skip (waiting on #13513)
GREEN on identity-only skip is FAIL: isolated
fn f() -> Int { 1 }still diesmember_not_a_binder(eaa3b52e00). REVERT (every TypeNode carrier, skip false) is the same cause. The fn member reaches the lens as a lowered shell withoutdag_surface_fn_decl. A Conj-shape skip is refused; the surviving typed fact is #13513'sv2.std.member_declaration_kindchannel (DeclaredFnMember/DeclaredDataMemberonNormalizedTree, merged intoResolvedTree.member_kinds).Probe dump (
--function isolated_fn_member_at_lenson62ceef38dd, normalize grain):The first
member_not_a_binderis notf. It is the QN spine segmentextdeps→ unmarked Conj (fixture→ …). Parse identity and fn-decl skip are both false.fis never the first refusal. #13513member_kindsis still the plan for declaration members; the spine is a separate unmarked-Conj carrier.After #13513 lands: merge main; skip an Authored member iff
member_kindssaysDeclaredFnMember, plus module surfaces by identity; uncovered members refuse (member_not_a_binder). No shape fallback. Rerun long GREEN (expectcompile_door_roster_admittedorfind_witness_reason_no_candidate) and REVERT; keep raw-Conj and Arrow-parameter REDs.Summary
compile_source_root_ingest_with_admission→validate_then_compile) refused even trivial modules withmember_not_a_binderbecauseunit_modelingandlifecycle_carrierjudged everyTypeNodeas a record payload. The v2 CLI does not hit this path (assemble_program_from_ingest_located→ emit, no lens roster); the door ledger does.member_not_a_binderorfact_density_*. Executing control:isolated_minimal_module_is_not_refused_by_roster_lenses(long lane). Isolated ingest then refuses at TranslateTofind_witness_reason_no_candidatebecause that harness has no std forIntto inhabit.v2.workflow.compile_door_ledgerdoor_ledger_rowbuilds ingest viaimport_closureover livemodule_graph_factsand compiles withrust_target_model. Wiring that same row forsrc/v2/test/fixture/extdeps_fixture_door_probe.dag(ledger_style_fatal_or_admitted) was not enrolled as atest fn: interpreted eval was still insideFilesystem.Readofdag/std/{integer,optional,algebra}.dagwith no door verdict after 38+ minutes (rss ~9.5GiB). RequiringDoorCompiled/Acceptedon that path would hang the long lane. Remaining obstacle: std inhabitance ofIntis a live import-closure compile, not a roster-lens refusal.Type-carrier narrowing (
3a31f0130e) — own RED/GREENSecond lens fix, distinct from the first (module-surface identity vs every-
TypeNodecarrier).dag_node_is_record_field_carrieris aTypeNodeConj that is not a module surface. Module-surface anddag_surface_fn_declmembers skip per-edge (dag_node_is_namespace_member_target).unit_modeling/lifecycle_carrieraccept a Conj whose Authored child is a syntheticdag_surface_moduleAtom.Textis stillmember_not_a_binder. A mixed Conj (module-surface sibling +clock_hz: Intbinder) still refusesunit_modeling_flat_scalar_unit_leaf_fixable(review 38602). Conj / Arrow / ComputationNode-shaped Authored fields still refusemember_not_a_binder(review 77837 — skip is identity-only, not connective-wide).fold_nodeagain (ffd271d21f). Stopping descent at ComputationNode / Arrow / Atom was an undeclared coverage drop (review 77837); it is gone.First lens fix (module containers)
dag_node_is_module_surfacefrom parse/graft identity / header / synthetic Atom, never from children-shape.member_not_a_binder.Door-grain execution (parent recipe)
Same-dispatch build:
CTRL_BUILD_FORWARD_ENV="GUNBC_MEMORY_BUDGET_BYTES" GUNBC_MEMORY_BUDGET_BYTES=34359738368 ctrl-build --remote -- bash -lc "cargo build --release -q -p v1-compiler --bin gunbc && ./target/release/gunbc run --source-root dag --source-root src/v2 --entry src/v2/test/claim/long/compile_door_minimal_module_test.dag --claim-run".GREEN arm (roster-lens claim)
isolated_probe_fatal_or_admitted=find_witness_reason_no_candidate(TranslateTo, isolated ingest, no std).--claim-runofisolated_minimal_module_is_not_refused_by_roster_lensesis the Bool that that reason is notmember_not_a_binderand notfact_density_hollow_alias_locus.c89af7eb82(before type-carrier walk work):--function door_probe_fatal_or_admitted=fact_density_hollow_alias_locus.--claim-runGREEN_EXIT=1. Cost (one run): remote elapsed 457085 ms;resolve_entry_graph_inclusive115022 ms;closure_typecheck61026 ms;max_rss_kib=9507912; pool_modules=8043, closure_files=239.3a31f0130e: dump movedfact_density_hollow_alias_locus→member_not_a_binder→find_witness_reason_no_candidate.REVERT arm
TypeNode-is-a-carrier (dag_node_is_record_field_carriertrue for all TypeNode;dag_node_is_namespace_member_targetfalse). Same dump onc89af7eb82: RED_EXIT=1 /member_not_a_binderis the discriminating cause when the skip is gone.Lens census
Required roster: unit_modeling, lifecycle_carrier (binder walk; Conj carriers). fact_density (hollow alias on empty Atoms; Arrow is not a type-alias carrier). Root lenses do not use
member_edge_type_node.mandatory_tagisCompileLensRoot.Off-roster:
reference_derived_residency_readingdecl_first_member_not_a_binder. Own item / PR: #13566 (session sunny-stag-900). Dashboard redispatch ofnode://adhoc-7df7f743-2b6returned HTTP 404 from this session.Test plan
member_not_a_bindermember_not_a_binderAccepted/DoorCompiledon import-closure ingest — infeasible at interpreted long-lane cost (38+ min, no verdict)