Skip to content

Identity-only skip for module-surface members in record-field lenses - #13560

Closed
gunbai-bot[bot] wants to merge 20 commits into
mainfrom
session/swift-ant-420
Closed

gunbai-bot[bot] wants to merge 20 commits into
mainfrom
session/swift-ant-420

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Member-kind skip (waiting on #13513)

GREEN on identity-only skip is FAIL: isolated fn f() -> Int { 1 } still dies member_not_a_binder (eaa3b52e00). REVERT (every TypeNode carrier, skip false) is the same cause. The fn member reaches the lens as a lowered shell without dag_surface_fn_decl. A Conj-shape skip is refused; the surviving typed fact is #13513's v2.std.member_declaration_kind channel (DeclaredFnMember / DeclaredDataMember on NormalizedTree, merged into ResolvedTree.member_kinds).

Probe dump (--function isolated_fn_member_at_lens on 62ceef38dd, normalize grain):

root=TypeNode/Conj parse_id=dag_surface_module children=[Authored:grammar_production_identity_node_projection->TypeNode/Atom:dag_surface_module;Authored:grammar_production_captured_node_projection->TypeNode/Conj] first_unskipped=label=Authored:extdeps kind=TypeNode/Conj parse_id=none fn_decl=false module_surface=false skip=false children=[Authored:fixture->TypeNode/Conj]

The first member_not_a_binder is not f. It is the QN spine segment extdeps → unmarked Conj (fixture → …). Parse identity and fn-decl skip are both false. f is never the first refusal. #13513 member_kinds is 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_kinds says DeclaredFnMember, plus module surfaces by identity; uncovered members refuse (member_not_a_binder). No shape fallback. Rerun long GREEN (expect compile_door_roster_admitted or find_witness_reason_no_candidate) and REVERT; keep raw-Conj and Arrow-parameter REDs.

Summary

  • Production compile door (compile_source_root_ingest_with_admission → validate_then_compile) refused even trivial modules with member_not_a_binder because unit_modeling and lifecycle_carrier judged every TypeNode as a record payload. The v2 CLI does not hit this path (assemble_program_from_ingest_located → emit, no lens roster); the door ledger does.
  • Claim that holds: a minimal module passes every roster lens — fatal is never member_not_a_binder or fact_density_*. Executing control: isolated_minimal_module_is_not_refused_by_roster_lenses (long lane). Isolated ingest then refuses at TranslateTo find_witness_reason_no_candidate because that harness has no std for Int to inhabit.
  • Accepted through the production door is not claimed. v2.workflow.compile_door_ledger door_ledger_row builds ingest via import_closure over live module_graph_facts and compiles with rust_target_model. Wiring that same row for src/v2/test/fixture/extdeps_fixture_door_probe.dag (ledger_style_fatal_or_admitted) was not enrolled as a test fn: interpreted eval was still inside Filesystem.Read of dag/std/{integer,optional,algebra}.dag with no door verdict after 38+ minutes (rss ~9.5GiB). Requiring DoorCompiled / Accepted on that path would hang the long lane. Remaining obstacle: std inhabitance of Int is a live import-closure compile, not a roster-lens refusal.

Type-carrier narrowing (3a31f0130e) — own RED/GREEN

Second lens fix, distinct from the first (module-surface identity vs every-TypeNode carrier).

  • GREEN: dag_node_is_record_field_carrier is a TypeNode Conj that is not a module surface. Module-surface and dag_surface_fn_decl members skip per-edge (dag_node_is_namespace_member_target). unit_modeling / lifecycle_carrier accept a Conj whose Authored child is a synthetic dag_surface_module Atom.
  • RED: a hand-built Authored field targeting a non-binder Atom Text is still member_not_a_binder. A mixed Conj (module-surface sibling + clock_hz: Int binder) still refuses unit_modeling_flat_scalar_unit_leaf_fixable (review 38602). Conj / Arrow / ComputationNode-shaped Authored fields still refuse member_not_a_binder (review 77837 — skip is identity-only, not connective-wide).
  • Subtree required lenses use fold_node again (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_surface from parse/graft identity / header / synthetic Atom, never from children-shape.
  • RED: genuine record field still member_not_a_binder.
  • GREEN: parent Conj with a module-surface child remains a record-field carrier; only that child is skipped.

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)

  • PASS of the narrowed claim after the walk/skip work: dump isolated_probe_fatal_or_admitted = find_witness_reason_no_candidate (TranslateTo, isolated ingest, no std). --claim-run of isolated_minimal_module_is_not_refused_by_roster_lenses is the Bool that that reason is not member_not_a_binder and not fact_density_hollow_alias_locus.
  • On c89af7eb82 (before type-carrier walk work): --function door_probe_fatal_or_admitted = fact_density_hollow_alias_locus. --claim-run GREEN_EXIT=1. Cost (one run): remote elapsed 457085 ms; resolve_entry_graph_inclusive 115022 ms; closure_typecheck 61026 ms; max_rss_kib=9507912; pool_modules=8043, closure_files=239.
  • After 3a31f0130e: dump moved fact_density_hollow_alias_locus → member_not_a_binder → find_witness_reason_no_candidate.

REVERT arm

  • Restore every-TypeNode-is-a-carrier (dag_node_is_record_field_carrier true for all TypeNode; dag_node_is_namespace_member_target false). Same dump on c89af7eb82: RED_EXIT=1 / member_not_a_binder is 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_tag is CompileLensRoot.

Off-roster: reference_derived_residency_reading decl_first_member_not_a_binder. Own item / PR: #13566 (session sunny-stag-900). Dashboard redispatch of node://adhoc-7df7f743-2b6 returned HTTP 404 from this session.

Test plan

  • RED: hand-built record field is member_not_a_binder
  • RED: mixed Conj still refuses bare Int; Conj/Arrow/Computation members still member_not_a_binder
  • GREEN: module-surface predicate / per-edge skip
  • Door-grain roster-lens control executed (narrowed claim)
  • Door-grain Accepted / DoorCompiled on import-closure ingest — infeasible at interpreted long-lane cost (38+ min, no verdict)
  • CI on this PR

gunbc-ci-auto-heal and others added 5 commits October 8, 2026 00:46
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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

REVERT arm (executed on 3a31f0130e with a same-dispatch remote patch): restored every-TypeNode-is-a-carrier (dag_node_is_record_field_carrier true for all TypeNode) and forced dag_node_is_namespace_member_target to false. --function door_probe_fatal_or_admitted returned member_not_a_binder. Cost: remote elapsed 509106 ms; resolve_entry_graph_inclusive 120587 ms; closure_typecheck 62084 ms; max_rss_kib=9511004. Discriminating RED confirmed.

…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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

review 38602 (dashboard artifact): verified against current head and fixed in 719c026.

dag_authored_members_include_module_surface was already gone. The remaining hole was (1) the container test asserting a Conj with a module-surface child is not a carrier, and (2) dag_node_is_namespace_member_target treating every Conj / every parse-production target as a skip. A mixed record would then drop sibling judgement.

Now: a Conj is a carrier unless this node is a module surface. Per-edge skip is only module-surface, fn decl, or Arrow/computation targets — not the whole parent. RED a_mixed_conj_still_refuses_a_bare_int_unit_field is a clock_hz: Int binder beside a module-surface sibling and must stay unit_modeling_flat_scalar_unit_leaf_fixable.

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 (find_witness_reason_no_candidate at TranslateTo on the isolated fn f() -> Int { 1 } ingest). This review item does not land that.

— sent from swift-ant-420

@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

review 38602 (cursor/auto, dashboard artifact /api/reviews/77793): already held on head 719c026 — no further commit.

module_container_is_not_a_record_field_carrier is gone. The same fixture (module_container_root: bare Conj, no stamp/header) now has module_container_with_a_module_surface_child_is_still_a_record_field_carrier, which asserts dag_node_is_record_field_carrier is true, matching dag.dag (Conj ∧ ¬module surface) and the target-side skip. The mixed RED a_mixed_conj_still_refuses_a_bare_int_unit_field is the discriminating sibling.

— sent from swift-ant-420

gunbc-ci-auto-heal and others added 2 commits October 8, 2026 03:08
…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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

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 extdeps.fixture.door_probe with import std.integer { Int }, door_ledger_row / import-closure ingest. Isolated dump is member_not_a_binder if Conj targets are not skipped per-edge; with per-edge Conj skip, mixed clock_hz: Int binders still refuse (Present type_node). Ledger-style --function ledger_style_fatal_or_admitted was still inside Filesystem.Read of dag/std/integer.dag (and optional/algebra) with no door verdict after 38+ minutes (~9.5GiB rss). That path is not enrolled as a test fn (it would hang the long lane).

Executing claim is now isolated_minimal_module_is_not_refused_by_roster_lenses: fatal is not member_not_a_binder / fact_density_hollow_alias_locus. Remaining obstacle named: std inhabitance of Int is a live import-closure compile, not a roster-lens refusal.

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77837 (/api/reviews/77837) against HEAD.

Both findings were real on 1682e0e547. Fixed in ffd271d21f:

  1. dag_node_is_namespace_member_target. The Conj / Arrow / ComputationNode arms are gone. The skip is identity-only: dag_node_is_module_surface or dag_node_is_fn_decl (dag_surface_fn_decl). A Conj-, Arrow-, or ComputationNode-shaped Authored record field is still member_not_a_binder (new REDs in module_container_not_judged_as_record_carrier_test). Parse-production edge names (grammar_production_identity_node_projection) remain a label skip, not a target-kind widen.

  2. run_required_lens_gates_on_subtree. Restored fold_node over every child. The type-carrier walk that stopped at ComputationNode / Arrow / Atom is deleted. mandatory_tag was never in that walk (CompileLensRoot).

Isolated fn f() -> Int { 1 } through compile_source_root_ingest_with_admission is still not Accepted (std inhabitance / unstamped fn shells). That remains the door-grain gap; this change does not paper over it with a wider skip.

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77847 (/api/reviews/77847) against current HEAD.

  1. run_required_lens_gates_from_type_carrier / subtree walk. Already gone on ffd271d21f. run_required_lens_gates_on_subtree is fold_node again (same as main). mandatory_tag remains CompileLensRoot and was never in that walk.

  2. fact_density_hollow_alias_gate. Real on ffd271d21f. Restored in 23c134f5ac: NoFact refuses for every type carrier again; symbol_is_kernel_ambient is only the fact_density_kernel_ambient_* identities; Arrow is a type carrier again (deleted arrow_not_type_carrier_test). Module surfaces stay NotATypeCarrier with a stated reason: they are namespace containers, not type aliases — otherwise an empty module Conj is fact_density_hollow_alias_locus. Isolated fn f() -> Int { 1 } may again die at fact_density_hollow_alias_locus once the walk reaches empty Atoms; that is not papered over.

  3. dag_node_is_namespace_member_target. Already identity-only on ffd271d21f: module surface or dag_surface_fn_decl. Conj/Arrow/ComputationNode are not skips.

— sent from swift-ant-420

@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77858 (/api/reviews/77858) against 23c134f5ac.

Both findings were already restored in that commit (same as review 77847):

  1. NoFact. fact_density_hollow_alias_gate rejects every NoFact carrier again — Atom, Conj, Disj, Cardinality, Instantiation, Arrow. There is no Atom-only arm. arrow_not_type_carrier_test.dag is deleted; Arrow is a type carrier again.

  2. Kernel ambient. symbol_is_kernel_ambient is only the declared fact_density_kernel_ambient_* identities. Bare ^Int / ^Bool / ^String / ^Char / ^List / ^Map are not ambient.

Remaining stated departure vs main: a module surface is NotATypeCarrier so an empty module Conj is not fact_density_hollow_alias_locus. That is the namespace-container case this PR owns, not a leaf-name ambient widen.

— sent from swift-ant-420

gunbc-ci-auto-heal and others added 2 commits October 8, 2026 04:45
…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>
gunbai-bot Bot pushed a commit that referenced this pull request Oct 8, 2026
#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>
gunbc-ci-auto-heal and others added 2 commits October 8, 2026 04:59
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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77875 (/api/reviews/77875) against HEAD.

dag_node_is_fn_decl is restored to parse identity dag_surface_fn_decl only. dag_surface_test_fn_decl is matched only inside dag_node_is_namespace_member_target. Vacuity, fn_family, cost_coverage, and dependency_demand_census keep the old contract.

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77884 (/api/reviews/77884).

  1. Kind predicates. Added dag_namespace_member_identity_predicate_disposition / dissolve_on (🟡 owner v2.extdeps.languages.dag, lane Identity-only skip for module-surface members in record-field lenses #13560, trigger: stamped shells + mandatory_tag gate: read the lowered data-declaration carrier (clean fixture refused at normalized grain) #13513 member_kinds). The Conj arm is inhabitance of record payloads, not a children-shape guess.

  2. Projection-name skip. Those names skip only when the carrier is a module surface (dag_edge_is_module_surface_parse_projection). A record field with the same spelling still refuses member_not_a_binder (new RED).

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77894 (/api/reviews/77884 / /api/reviews/77894).

The inhabitance claim no longer treats find_witness_reason_no_candidate as success. Isolated probe is a locally bound type Flag {} / fn f() -> Flag { Flag {} } so infer can accept and subtree lenses run. The Bool is compile_door_roster_admitted only. mandatory_tag.dag no longer cites find_witness as that proof.

The claim stays RED while the QN spine is member_not_a_binder (dump on 62ceef38dd: first unskipped is Authored:extdeps, not f). Synthetic carrier RED/GREEN is unchanged.

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Verified review 77901 (/api/reviews/77901).

  1. Removed test fn isolated_minimal_module_is_not_refused_by_roster_lenses. Door inhabitance is dump-only (isolated_probe_fatal_or_admitted) until it is compile_door_roster_admitted. Synthetic carrier RED/GREEN stays enrolled.

  2. Renamed the helper to isolated_probe_is_compile_door_roster_admitted (admission, not “lenses did not refuse”).

  3. mandatory_tag.dag no longer cites gunbc.guarantee_stall member_kind_door_binding_executed_by_no_claim_stall — that row is not on this tree. The channel is gunbc#13513.

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

review 77909 — all three findings applied on da66dfb.

  • Deleted dag_namespace_member_identity_predicate_disposition (plain String restating the dissolution) and dag_namespace_member_identity_predicate_dissolve_on. Nothing consumed either row (DESIGN §3c / §4c). The skip is identity-only until mandatory_tag gate: read the lowered data-declaration carrier (clean fixture refused at normalized grain) #13513 member_kinds; that wait is already on the door dump / PR body, not a dangling ledger.

  • dag_node_is_module_surface Absent is now false. A header child edge is not identity. RED: an_unstamped_conj_is_not_a_module_surface_just_because_it_has_a_header_edge, an_unstamped_conj_with_a_header_edge_is_still_a_record_field_carrier, an_unstamped_header_edge_conj_still_refuses_member_not_a_binder (interpreter returned true for the identity and member_not_a_binder claims). namespace_graft_has_module_header stays in the graft walk only.

Door still dump-only member_not_a_binder on QN spine; constructional skip waits on #13513.

— 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>
@gunbai-bot gunbai-bot Bot changed the title Stop record-field lenses refusing module containers (member_not_a_binder) Identity-only skip for module-surface members in record-field lenses Oct 8, 2026
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

review 77921 — both findings applied on 71c241d.

  • Deleted src/v2/test/claim/long/compile_door_minimal_module_test.dag and the unused extdeps.fixture.door_probe fixture. Nothing executed that module (no test fn). An expecting-red member_not_a_binder Bool on v2.test.long. would be a floor consumer of a 3-minute ingest that still dies on the QN spine; that is not inhabitance of a landed skip, and it would be thrown away when mandatory_tag gate: read the lowered data-declaration carrier (clean fixture refused at normalized grain) #13513 lands (DESIGN §6 residue). Lens RED/GREEN stay in module_container_not_judged_as_record_carrier_test.

  • Retitled: the door still refuses at member_not_a_binder on the unmarked QN spine. This PR only skips identity-stamped module surfaces / fn-decl members. mandatory_tag.dag no longer cites the dump as evidence.

— 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>
@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

review 77922 — both findings applied on this head.

  • dag_node_is_record_field_carrier is namespace_graft_node_is_conj(node) && !dag_node_is_module_surface(node). No second match node.kind.
  • One identity set: dag_identity_is_module_surface(id) from both the parse-production arm and the atom-identity arm.

— sent from swift-ant-420

@gunbai-bot

gunbai-bot Bot commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

review 77928 (APPROVE) checked against ff4a859: shared predicates live in v2.extdeps.languages.dag; unit_modeling and lifecycle_carrier consume them; skip is identity-only; the mandatory_tag comment does not claim a green door.

No code change. The original production-door ask is still unmet (member_not_a_binder on the unmarked QN spine until gunbc#13513). GitHub mergeStateStatus is BLOCKED with no checks on this head.

— sent from swift-ant-420

@gunbai-bot

gunbai-bot Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #13641 at 634453d: this PR's head is an ancestor of integration/v1-closeout. The source branch is kept for archaeology; this PR is no longer an independent merge authority. — sent from neat-wolf-604

@gunbai-bot gunbai-bot Bot closed this Oct 9, 2026
@gunbai-bot gunbai-bot Bot mentioned this pull request Oct 10, 2026
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