Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
67f1f49
docs/plans: arrow elimination model for v2 infer (for ruling)
Sep 26, 2026
d5135cb
v2 infer: arrow elimination and the body/declared-return check; one I…
Sep 26, 2026
f06dce7
infer_product_introduction: evidence control pins the Int type atom's…
Sep 27, 2026
2e3012b
Merge remote-tracking branch 'origin/main' into session/quick-owl-368
Sep 27, 2026
ac1df96
Take infer's ObligatedInferredTree through discharge; flip refinement…
Sep 27, 2026
03342a3
v2 resolve: ResolvedTree carries the SymbolIndex resolution consulted…
Sep 27, 2026
179c7f1
Merge origin/main; migrate the remaining resolved-tree helpers (typec…
Sep 27, 2026
95856ef
pick_ingested: the arrow extractor returns the arrow Node (my retype …
Sep 27, 2026
84d4768
Merge origin/main; retype main's new resolved-tree helpers (declared_…
Sep 27, 2026
274d51d
Merge origin/main into session/quick-owl-368 (resolve 04_infer import…
Sep 27, 2026
3609145
compose #12432 (pinned reference-evidence base)
Sep 28, 2026
80e9a04
compose #12379 (pinned reference-evidence base)
Sep 28, 2026
3c43400
A reference to a corpus declaration is typed by that declaration
Sep 28, 2026
1b73daa
The reference's guard becomes the one an application will ask
Sep 28, 2026
707cc49
The same-leaf discriminator is not qualified, and the file says so
Sep 28, 2026
7fa6d60
The application path can now see a reference's callable evidence; it …
Sep 28, 2026
32ea98e
A named call grounds: the use carries the facts, the arrow carries th…
Sep 28, 2026
53022c2
A return that is already a type is consumed, not denoted again
Sep 28, 2026
5359640
The body/return check becomes reachable, so a return mismatch refuses…
Sep 28, 2026
117a716
The qualification set: identity discriminated, unavailable evidence r…
Sep 28, 2026
2702923
Native execution of a named call: measured, still refused at eval
Sep 28, 2026
b65297c
Attribute the eval refusal: the anchor is inside the callee's declari…
Sep 28, 2026
6bf3b29
A named call executes: eval consumes the declaration reference it was…
Sep 28, 2026
e168404
The remaining refusal is a facts-key collision, not a fact about the …
Sep 28, 2026
c187a8f
Both remaining reds refuse at the same runtime-built node, measured
Sep 28, 2026
3769c83
Withdraw the provenance inference; establish the key conflict by enum…
Sep 28, 2026
3065331
Enroll the acceptance targets: argument-dependent execution and the B…
Sep 28, 2026
6f0dff1
Field projection through resolve, infer and eval, with the field chec…
Sep 29, 2026
b38e6e2
The seven's receiver is a match binder, and its blocker is the match …
Sep 29, 2026
0eddf9f
Merge main into the field-projection lane: both carrier threads, not one
Sep 29, 2026
27f1427
Restore the application-path repair the merge pass silently dropped
Sep 29, 2026
0cb200c
Merge main (#12433, #12510 and four more) into the field-projection lane
Sep 29, 2026
81e7c77
The seven's downstream continuation, qualified past the match boundary
Sep 29, 2026
22800fa
The chain wins: a bound head resolves local-first, and the interim gu…
Sep 29, 2026
5ca3b0a
v2 infer: type a match over a declared (generic) coproduct and its ar…
gunbai-bot[bot] Sep 30, 2026
83d27a7
Take the landed match-binder typing (#12641) into the lane
Sep 30, 2026
f37bc61
Compose #12506, #12641 and current main by hand, preserving all three…
Sep 30, 2026
fcce3d8
Two readers disagreed about a callee's arrow, so no named call's argu…
Sep 30, 2026
d933035
Route an unadmissible callable grounding to the frontier; retire the …
Sep 30, 2026
2627d30
Compile the consumers the widened signature broke, and undo two merge…
Sep 30, 2026
8e9fc28
Enrol two rows that nothing was running, and correct the measurement …
Sep 30, 2026
89420be
Merge main: #12566's one-relation declared-return judge beside this l…
Sep 30, 2026
76c9ed5
A declared position that already carries its value type is decidable;…
Sep 30, 2026
a13d507
An ill-typed fixture the skipped check was hiding; the facts-key conf…
Sep 30, 2026
e95381c
Merge main (#12407): six conflicts resolved on their merits, plus fou…
Sep 30, 2026
66cd619
Merge main (#12714): import union in resolve
Sep 30, 2026
0f9d715
The arm-pattern reader asked the construct encoding instead of re-der…
Sep 30, 2026
ee18cd4
Merge remote-tracking branch 'origin/main' into lane/reference-eviden…
Sep 30, 2026
797a608
A loop carrier is a binder: one value-binder admission, and the Loop …
Sep 30, 2026
978cf66
Value binders are admitted at one gate: Arrow parameters, lets, match…
Sep 30, 2026
85ad321
One callable Arrow constructor; value shadowing refuses, with its inc…
Sep 30, 2026
8b83c4a
Eight claims moved to the interface they discriminate; 44 stay end-to…
Oct 1, 2026
9b55c96
Merge main (#12550 fold encoding, #12582 facts-key, #12740/#12763 rec…
Oct 1, 2026
78c2444
Delete the duplicate Loop dispatch arm the merge left behind
Oct 1, 2026
2bd1f0d
The fold slot is a generated binder, not the authored step formal; th…
Oct 1, 2026
bd9d3d3
A root binding resolves a name but may not be projected through
Oct 1, 2026
6df74f8
A root-bound data value's projection: control added, and it is not ye…
Oct 1, 2026
8ea7415
The cref locator asks the production application reader and selects b…
Oct 1, 2026
6b3490b
Derive the DAG canonical symbol set from the grammar instead of its s…
Oct 1, 2026
82b5f15
Qualified-name resolution retains the binding kind rather than collap…
Oct 1, 2026
a509caa
Field-projection inference distinguishes an unretrievable declaration…
Oct 1, 2026
54725fe
File the diagnosed root: infer cannot derive a child's context from a…
Oct 2, 2026
db5b9d5
Merge remote-tracking branch 'origin/main' into lane/reference-eviden…
Oct 2, 2026
14a8710
Revert the canonical-symbol derivation: main narrowed the set it repr…
Oct 2, 2026
f498eb6
Re-point the parameter reader at main's route; record the match-binde…
Oct 2, 2026
bb1e03c
Merge remote-tracking branch 'origin/main' into lane/reference-eviden…
Oct 2, 2026
e60150d
The consolidated callable arrow closes its own lowered image
Oct 2, 2026
f92c961
Compile every consumer of the widened constructor, not the five files…
Oct 2, 2026
7f3a0e6
The native door passes the resolution, not the whole NativeTestContext
Oct 2, 2026
8c23004
Update the two citations of the renamed fold-carrier row
Oct 2, 2026
edd9788
Facts-key collision controls assert the separation #12582 achieved, n…
Oct 2, 2026
72e10bb
WIP, NOT YET EFFECTIVE: one full-path key for named-parameter bind an…
Oct 2, 2026
2eb0676
Close #12766's eval frontier: a parameter-reference body is admitted …
Oct 2, 2026
ea11297
Merge origin/main into lane/reference-evidence-consumer
Oct 2, 2026
3bf1880
Repair the merge's cross-side seams: projection base, two fixtures
Oct 2, 2026
c84f55b
Where-predicate calls walk unjudged under the where_clause frontier, …
Oct 2, 2026
a4b2b10
Hoist three in-body annotations in 05_eval to module-item grain (floo…
Oct 2, 2026
adb3d63
Resolve the closure once per context, not once per subject (review 74…
Oct 2, 2026
f09191e
Total the merge's sixteen unrostered wildcard arms; roster the one th…
Oct 2, 2026
2b45150
Merge origin/main (#12799 EdgeLabel cut, #12935, #12972, #12995) into…
Oct 2, 2026
82187ba
Drop the fold_step_receiver probe; repair two match readers; declare …
Oct 2, 2026
d9bcf94
Pin the match-binder receiver row to today's exact route; park the wh…
Oct 2, 2026
7331168
Merge remote-tracking branch 'origin/lane/reference-evidence-consumer…
Oct 2, 2026
b41cd2f
WIP: kinded type params + type application conformance
Oct 2, 2026
b89a98e
Serve parameter_reference's two new rows and cont's three normalize r…
Oct 2, 2026
9ce95a7
De-fork MachineWidth/PointerWidth/Compose onto std.machine_constraint…
Oct 2, 2026
d86f921
Read field_projection_stages' and match_binder_typing's fixture progr…
Oct 2, 2026
af5c8cf
Enrol the fps_/mbt_ reading producers WARM in floor_pure_producer_share
Oct 2, 2026
0a4d338
dre/cref/sfk: one front end per fixture through nullary readings
Oct 2, 2026
31586bc
floor_pure_producer_share: serve dre/cref/sfk fixture readings WARM
Oct 2, 2026
a919cb4
Resolve kinds by indexed declaration; left-factor generic_param per g…
Oct 2, 2026
dd54166
chore: regenerate drifted generated artifacts (ci auto-heal)
gunbai-bot[bot] Oct 3, 2026
fcce450
Merge remote-tracking branch 'origin/lane/reference-evidence-consumer…
Oct 3, 2026
1521e04
recurring_failure_mode: second writer of a binding position recorded …
Oct 3, 2026
87d3f7a
Merge remote-tracking branch 'origin/wren/floor-budget-fps-mbt' into …
Oct 3, 2026
b56a75b
Merge branch 'session/bright-ant-369' of https://github.com/gunb-ai/g…
Oct 3, 2026
a2773ac
namespace_xl0: pin the two receiver rows to infer's exact refusal thr…
Oct 3, 2026
f4e8e7c
floor_pure_producer_share: serve pr_program_lexical_reads and the two…
Oct 3, 2026
ed35fb9
Merge origin/main (17 commits through #12787) into lane/reference-evi…
Oct 3, 2026
272691f
Merge lane/reference-evidence-consumer into session/sunny-lynx-759
Oct 3, 2026
6876bf2
Merge main into session/sunny-lynx-759
Oct 3, 2026
76a9302
Exhaust the three new matches over closed coproducts (NonFoldResidueR…
Oct 3, 2026
5b8a3e5
Drop the unjudged counts nothing consumed; the frontier row is the ho…
Oct 3, 2026
4d3fe6e
defork census: Compose/MachineWidth resolved by deleting v2 (this cha…
Oct 3, 2026
92dfca4
Merge main into session/sunny-lynx-759
Oct 3, 2026
b0464bf
Regenerate dag-v2-defork-audit.md from the census (CI heal candidate,…
Oct 3, 2026
993c6ae
Merge main into session/sunny-lynx-759
Oct 3, 2026
94e407f
Type-parameter binder sets carry their declared order (reusing the si…
Oct 3, 2026
0f8e4c8
Move type_application_kind specimens out of floor_cross_claim_pure_pr…
Oct 3, 2026
4ce36a5
Restore the 9 type_application_kind warm rows under the amended freez…
Oct 3, 2026
afc8258
Merge main into session/sunny-lynx-759
Oct 3, 2026
2114605
Regenerate dag-v2-defork-audit.md (CI heal candidate for afc8258, blo…
Oct 3, 2026
ec8ad31
Merge main into session/sunny-lynx-759 (Bool de-fork: drop v2.std.log…
Oct 4, 2026
fa73a2e
Regenerate dag-v2-defork-audit.md (CI heal candidate for ec8ad31, blo…
Oct 4, 2026
ac39b25
Merge remote-tracking branch 'origin/main' into session/sunny-lynx-759
Oct 4, 2026
7088175
Merge main; fix manual add fixtures that passed a ResolvedTree where …
Oct 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 9 additions & 13 deletions dag/gunbc/defork_type_name_census.dag
Original file line number Diff line number Diff line change
Expand Up @@ -204,26 +204,17 @@ data defork_census_rows: List<SharedTypeNameRow> = [
names: ["Int8", "Int16", "Int32", "Int64", "Int128", "UInt8", "UInt16", "UInt32", "UInt64", "UInt128"],
reading: AuthoredResolutionReading {
dag_side: "→ `std.machine_constraints` `Compose` / `MachineWidth<N>` + `std.integer` `Int`/`UInt`",
v2_side: "→ `v2.std.integer` `Compose`, `v2.std.machine` `MachineWidth<WordN>` + `v2.std.integer` `Int`/`UInt`",
class: "same concept, every referent divergent"
v2_side: "→ `std.machine_constraints` `Compose` / `MachineWidth<N>` + `v2.std.integer` `Int`/`UInt`",
class: "same concept, Int/UInt referent divergent"
},
disposition: ForkNeedsDecisionRecord { family: "integer family" }
},
SharedTypeNameRow {
names: ["IntPlatform", "UIntPlatform"],
reading: AuthoredResolutionReading {
dag_side: "→ `std.machine_constraints` `Compose`/`MachineWidth`/`PointerWidth`",
v2_side: "→ `v2.std.integer` `Compose`, `v2.std.machine` `MachineWidth`/`PointerWidth`",
class: "text near-identical, every referent divergent"
},
disposition: ForkNeedsDecisionRecord { family: "integer family" }
},
SharedTypeNameRow {
names: ["Compose", "MachineWidth"],
reading: AuthoredResolutionReading {
dag_side: "`std.machine_constraints` — phantom composition / width over `WidthResolution`",
v2_side: "`v2.std.integer` / `v2.std.machine` — opaque, unconstrained parameter",
class: "same concept, divergent constraint"
v2_side: "→ `std.machine_constraints` `Compose`/`MachineWidth`/`PointerWidth`",
class: "text near-identical, Int/UInt referent divergent"
},
disposition: ForkNeedsDecisionRecord { family: "integer family" }
},
Expand All @@ -248,6 +239,11 @@ data defork_census_rows: List<SharedTypeNameRow> = [
]

data defork_census_resolved: List<ResolvedSharedTypeName> = [
ResolvedSharedTypeName {
names: ["Compose", "MachineWidth"],
resolution: ResolvedByDeletingV2 { reason: "N7-2 root B: v2 gained kinded type parameters (`v2.std.type_binder` `type_application_conformance`), so the kinded `std.machine_constraints` `MachineWidth<bits: WidthResolution>` normalizes on the native route; `v2.std.machine` `MachineWidth`/`PointerWidth` and `v2.std.integer` `Compose` are deleted and `v2.std.integer` imports them from `std.machine_constraints` (its `MachineWidth<WordN>` rows were kind-wrong and now read `MachineWidth<N>`)" },
change: 13038
},
ResolvedSharedTypeName {
names: ["String"],
resolution: ResolvedByDeletingDag { reason: "operator-ruled retirement of `std.string_type` `String` (`= FreeMonoid<Char>`), the duplicate of `v2.std.text` `String`. It had zero importers after gunbc#12512 deleted the 81 that used it as host text (XL-0T ruling B), verified by the #12760 literal-site census. `v2.std.text` `String` stays the one structural declaration, and `v2.std.node` `String` is the distinct host-text concept (gunbc.recurring_failure_mode carrier_by_spelling)" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ data a_binding_position_recorded_as_a_declaring_identity: RecurringFailureMode =
"HARM. One declaration acquires one identity PER RELAY it is reached through, so the map that exists to make identity single-valued is the thing that forks it. Nothing refuses: every path resolves, and the reference is Accepted. It surfaces downstream as a wrong answer with no diagnostic -- a target that spells a declaration by its module emits a path into the relay module, which declares nothing and therefore has no item to name, so the emitted program refers to something that was never written.",
"DISTINGUISHING FACTS. refusal_reason_minted_as_canonical_identity is a value minted from the WRONG VOCABULARY (a diagnostic reason standing in a name's place); this row is a value from the RIGHT vocabulary read at the WRONG LAYER -- a real qualified path, naming a real position, that is a binding rather than a declaration. The recognition rule is a question, not a spelling: when a field is named for a DECLARATION, ask whether every writer of it can only have written a declaration there, and follow one re-export before answering. An index whose lookup succeeds at a relay will answer that question wrong and stay green.",
"RECEIPT (2026-09-22, fierce-wren-487, found by review 70003 on gunbc#12048). Uninhabited until resolution began CARRYING the declaring path: while a resolved reference was a bare leaf the recorded declaring path reached no consumer, so the fork existed in the index and was unobservable. The enrolled chain claim could not see it either -- it asserted only that the chain RESOLVES, and an index that stops at the relay resolves perfectly well. Repaired by chasing one step through symbol_index_claimants_at, which already answers who declares what lives at a position; a relay's own row was chased the same way when it bound, so one step reaches the home. Enrolled: v2.test.claim.namespace_xl0.cross_module_reference_resolution a_re_export_resolves_to_the_home_not_the_relay_holds, whose NEGATIVE conjunct is the discriminator -- measured FAIL before the chase and PASS after, with the sibling same-leaf row PASS in both runs.",
"RECEIPT, SECOND WRITER (2026-10-03, sunny-lynx-759, gunbc#13038). v2.compiler.symbol_index_fill symbol_index_fill_unique_variant_aliases writes a module-unique variant TWICE as an ENTRY: once at its declaring path under its coproduct (p.Resolution.Pointer, symbol_index_fill_containment_node) and again at the module-level binding position (p.Pointer), over the same arm node, through symbol_index_insert rather than a binding row. So symbol_index_declaring_path_of answers p.Pointer for p.Pointer -- the binding position is its own declaring identity, and the chase this row's first repair added cannot reach the home. MINIMAL REPRODUCER: `module p` / `type Resolution = Static | Pointer` / `type Width<bits: Resolution>` / `type UsesPointer = Width<Pointer>`. The bare `Pointer` resolves to declaration_reference p.Pointer; comparing it by declaring path against the kind's variant p.Resolution.Pointer judged a conforming argument OUTSIDE its kind (resolve_reason_type_argument_kind_not_inhabited, measured on the gunbc#13038 branch before the workaround). gunbc#13038 compares the indexed declaration NODE instead (v2.compiler.resolve resolve_path_declares_node), which is a consumer-side workaround and not the repair; v2.test.claim.type_application_kind tak_kinded_parameter_accepts_a_variant_of_its_kind is the control that went red. THE REPAIR this receipt names: the variant alias is a BINDING to its declaring path (recorded so symbol_index_claimants_at answers p.Resolution.Pointer), not a second entry, after which resolve_path_declares_node can be replaced by a declaring-path comparison.",
"RUNG FOUND AT: outside the ladder -- silent wrongness.",
"CEILING: structurally impossible. A binding position and a declaring position are different concepts sharing one carrier (QualifiedName), so either can be written where the other is owed. The wall is the type: a declaring identity a binding path cannot inhabit, which is the same wall refusal_reason_minted_as_canonical_identity names from its own direction.",
"NEXT-RUNG TRIGGER: a declaration-identity carrier distinct from the qualified path of an arbitrary position, so that symbol_index_bind_at cannot be handed a binding position at all; until then the enrolled row above is the wall, and it is a permanent regression control rather than an expecting-red probe.",
Expand All @@ -19,5 +20,8 @@ data a_binding_position_recorded_as_a_declaring_identity: RecurringFailureMode =
DeclarationRef { module_path: "v2.compiler.symbol_index_fill", decl_name: "symbol_index_bind_pending_round", field: WholeDeclaration },
DeclarationRef { module_path: "v2.std.symbol_index", decl_name: "symbol_index_declaring_path_of", field: WholeDeclaration },
DeclarationRef { module_path: "v2.test.claim.namespace_xl0.cross_module_reference_resolution", decl_name: "a_re_export_resolves_to_the_home_not_the_relay_holds", field: WholeDeclaration },
DeclarationRef { module_path: "v2.compiler.symbol_index_fill", decl_name: "symbol_index_fill_unique_variant_aliases", field: WholeDeclaration },
DeclarationRef { module_path: "v2.compiler.resolve", decl_name: "resolve_path_declares_node", field: WholeDeclaration },
DeclarationRef { module_path: "v2.test.claim.type_application_kind", decl_name: "tak_kinded_parameter_accepts_a_variant_of_its_kind", field: WholeDeclaration },
],
}
8 changes: 4 additions & 4 deletions docs/plans/dag-v2-defork-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,22 +192,22 @@ Definition-unification (§3b.2: delete the dag record-of-methods *definition*) a

## 2D. The shared type-name census (the one list): the population is derived, the dispositions are authored

**Derived:** every name declared as a `type` (record, coproduct or alias) under both `dag/std` and `src/v2/std`, read from the namespace by `gunbc.defork_type_name_census` `shared_type_names` at generation — **20 names** in this projection. **Authored:** each row's disposition, and — until the frontier below lands — the reading of what each side's body RESOLVES to. The two meet in an identity join by name, refused in both directions (a derived name no row disposes of; a row naming a pair that no longer exists), so this section cannot be generated from a stale disposition. Resolution, not body text, is what separates the classes: `Float = Float64` was byte-identical on both sides and bound two different `Float64`s. A **meaning fork** is one name for materially different concepts (DESIGN §3), resolved by renaming or deleting one side at its declaration, delete-first with no alias, the new name taken from the cited framework. **Frontier:** module-scoped type-reference resolution over the live pool, consumable from .dag: for a type declaration, each name its body references resolved to the declaration it binds in that module's scope (its own declarations, else its imports). When it lands, the three reading columns of every row here are derived from it and the authored readings are deleted; nothing else retires this frontier. Candidate home: `v2.compiler.name_resolve::resolve_with_admission`.
**Derived:** every name declared as a `type` (record, coproduct or alias) under both `dag/std` and `src/v2/std`, read from the namespace by `gunbc.defork_type_name_census` `shared_type_names` at generation — **18 names** in this projection. **Authored:** each row's disposition, and — until the frontier below lands — the reading of what each side's body RESOLVES to. The two meet in an identity join by name, refused in both directions (a derived name no row disposes of; a row naming a pair that no longer exists), so this section cannot be generated from a stale disposition. Resolution, not body text, is what separates the classes: `Float = Float64` was byte-identical on both sides and bound two different `Float64`s. A **meaning fork** is one name for materially different concepts (DESIGN §3), resolved by renaming or deleting one side at its declaration, delete-first with no alias, the new name taken from the cited framework. **Frontier:** module-scoped type-reference resolution over the live pool, consumable from .dag: for a type declaration, each name its body references resolved to the declaration it binds in that module's scope (its own declarations, else its imports). When it lands, the three reading columns of every row here are derived from it and the authored readings are deleted; nothing else retires this frontier. Candidate home: `v2.compiler.name_resolve::resolve_with_admission`.

| name(s) | declared in (derived) | dag/std side (authored reading) | src/v2/std side (authored reading) | class (authored) | disposition |
| --- | --- | --- | --- | --- | --- |
| `NonNegativeInt`, `PositiveInt` | `dag/std/integer.dag`, `src/v2/std/refinement.dag` | `std.integer` — `= Nat` / `= Nat where gt_zero` (refinement of `std.nat` `Nat`) | `v2.std.refinement` — record `refined: Refined<Int>` (smart-constructor over `v2.std.integer` `Int`), consumed by the formatter extdeps | MEANING FORK | OPEN — next PR of the de-fork wave (the v2 side has ~40 consumer sites across `v2.extdeps.formatters.*`) |
| `Int`, `UInt` | `dag/std/integer.dag`, `src/v2/std/integer.dag` | → `std.nat` `Nat` (via `std.algebra` `GroupCompletion`) | → `v2.std.nat` `Nat` | same concept, divergent referent | NEEDS A DECISION RECORD (integer family) |
| `Int8`, `Int16`, `Int32`, `Int64`, `Int128`, `UInt8`, `UInt16`, `UInt32`, `UInt64`, `UInt128` | `dag/std/integer.dag`, `src/v2/std/integer.dag` | → `std.machine_constraints` `Compose` / `MachineWidth<N>` + `std.integer` `Int`/`UInt` | → `v2.std.integer` `Compose`, `v2.std.machine` `MachineWidth<WordN>` + `v2.std.integer` `Int`/`UInt` | same concept, every referent divergent | NEEDS A DECISION RECORD (integer family) |
| `IntPlatform`, `UIntPlatform` | `dag/std/integer.dag`, `src/v2/std/integer.dag` | → `std.machine_constraints` `Compose`/`MachineWidth`/`PointerWidth` | → `v2.std.integer` `Compose`, `v2.std.machine` `MachineWidth`/`PointerWidth` | text near-identical, every referent divergent | NEEDS A DECISION RECORD (integer family) |
| `Compose`, `MachineWidth` | `dag/std/machine_constraints.dag`, `src/v2/std/integer.dag`, `src/v2/std/machine.dag` | `std.machine_constraints` — phantom composition / width over `WidthResolution` | `v2.std.integer` / `v2.std.machine` — opaque, unconstrained parameter | same concept, divergent constraint | NEEDS A DECISION RECORD (integer family) |
| `Int8`, `Int16`, `Int32`, `Int64`, `Int128`, `UInt8`, `UInt16`, `UInt32`, `UInt64`, `UInt128` | `dag/std/integer.dag`, `src/v2/std/integer.dag` | → `std.machine_constraints` `Compose` / `MachineWidth<N>` + `std.integer` `Int`/`UInt` | → `std.machine_constraints` `Compose` / `MachineWidth<N>` + `v2.std.integer` `Int`/`UInt` | same concept, Int/UInt referent divergent | NEEDS A DECISION RECORD (integer family) |
| `IntPlatform`, `UIntPlatform` | `dag/std/integer.dag`, `src/v2/std/integer.dag` | → `std.machine_constraints` `Compose`/`MachineWidth`/`PointerWidth` | → `std.machine_constraints` `Compose`/`MachineWidth`/`PointerWidth` | text near-identical, Int/UInt referent divergent | NEEDS A DECISION RECORD (integer family) |
| `TerminationProof` | `dag/std/termination.dag`, `src/v2/std/cardinality.dag` | `std.termination` — `dimensions: List<RankingDimension>` | `v2.std.cardinality` — `non_increasing: List<RankingComponent>`, `strict: RankingComponent` | same question, divergent model | NEEDS A DECISION RECORD (termination) |
| `Unit` | `dag/std/types.dag`, `src/v2/std/cardinality.dag` | `std.types` — empty record | `v2.std.cardinality` — empty record | one concept, two declarations | NEEDS A DECISION RECORD (unit) |

**Resolved — each name must stay absent from the derived population; a name here that is declared under both roots again refuses by name:**

| name(s) | resolution | change |
| --- | --- | --- |
| `Compose`, `MachineWidth` | v2 side deleted — N7-2 root B: v2 gained kinded type parameters (`v2.std.type_binder` `type_application_conformance`), so the kinded `std.machine_constraints` `MachineWidth<bits: WidthResolution>` normalizes on the native route; `v2.std.machine` `MachineWidth`/`PointerWidth` and `v2.std.integer` `Compose` are deleted and `v2.std.integer` imports them from `std.machine_constraints` (its `MachineWidth<WordN>` rows were kind-wrong and now read `MachineWidth<N>`) | #13038 |
| `String` | dag side deleted — operator-ruled retirement of `std.string_type` `String` (`= FreeMonoid<Char>`), the duplicate of `v2.std.text` `String`. It had zero importers after gunbc#12512 deleted the 81 that used it as host text (XL-0T ruling B), verified by the #12760 literal-site census. `v2.std.text` `String` stays the one structural declaration, and `v2.std.node` `String` is the distinct host-text concept (gunbc.recurring_failure_mode carrier_by_spelling) | #13089 |
| `Nat` | v2 side deleted — operator ruling A (2026-09-30): the carrier is Peano, declared once in `std.nat` and realized as the kernel integer (`gunbc.structural_realization_bindings` `kernel_grounding_rows`); the `v2.std.nat` declaration is deleted, `std.magnitude` retired, and the semiring moved to inhabitance | #12846 |
| `Float` | both sides deleted; the concept is homed at `extdeps.standards.ieee_754_2019 binary64` — IEEE 754-2019 §3.6 (operator ruling relayed 2026-09-28): `std.float` (Float = Float64, uncited) and `v2.std.float` (Float = Binary64) both deleted; kernel Float's meaning is the `std.kernel_type_denotation` row, not a std alias | #12547 |
Expand Down
Loading