on master help sign in
Infer local recursion and classify importer errors
commit10cbf9c663a801263921f4a0efe5e8e48311ce0c authoriko <mail@iko.soy> dateFri 30 Oct 2026, 22:57 (17 hours ago) parent7081198
22 files changed+1585−442
docs/compiler.md+2−2 docs/status.md+7−6 jibb-dev/lib/jibb-import.hoon+102−9 jibb-dev/lib/jibb.hoon+8−2 tests/golden/types-local-capitals/about.txt+4 tests/golden/types-local-capitals/modules.txt+1 tests/golden/types-local-capitals/source.jibb+41 tests/golden/types-local-capitals/tokens.txt+249 tests/golden/types-local-capitals/tree.txt+127 tests/golden/types-local-capitals/types.txt+9 tests/golden/types-local-recursive/about.txt+4 tests/golden/types-local-recursive/modules.txt+1 tests/golden/types-local-recursive/source.jibb+54 tests/golden/types-local-recursive/tokens.txt+351 tests/golden/types-local-recursive/tree.txt+170 tests/golden/types-local-recursive/types.txt+12 tests/golden/types-recursive-gate/types.txt+1−1 tests/importer/about.txt+2−2 tests/importer/tree.txt+27−19 tests/lib/jibb.hoon+411−399 tests/type-import/expected.txt+1−1 tools/importer-test+1−1
docs/compiler.md+2−2
@@ -56,7 +56,7 @@ The core is split into chapters, `+| %name`, in this order:
5656| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
5757| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
5858
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a two-binder cell pattern, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. Mutual groups, local recursive gates, polymorphic recursion and value cycles remain unsupported. Acyclic local value definitions can refer forward and generalize variables that are free of their enclosing environment; captured variables and explicit capitals remain shared. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. A null-headed cell can match a union case but does not supply a `|=%$` constructor; unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do recursive local groups and recursive molds. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The reporting path repeats inference of a recursive gate rather than instantiating its generalized interface inside its own body. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
59+The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a two-binder cell pattern, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. A written capital newly introduced in a local definition remains unsupported until the checker collects its enclosing lexical scope, including occurrences written later; a capital already present in the outer scope can be captured. Mutual recursive groups, polymorphic recursion and value cycles remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. A null-headed cell can match a union case but does not supply a `|=%$` constructor; unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do mutually recursive local groups and recursive molds. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The reporting path repeats inference of a recursive gate rather than instantiating its generalized interface inside its own body. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
6060
6161For supported closed unions, the type printer keeps the union’s origin separate from its displayed name. It prints an in-scope name such as `msg` or `msg.lib`, including in records and gates; an accessible imported nongeneric alias may name a transitive union. A nongeneric body-local union that escapes its scope, or an origin without an accessible name, prints its cases separated by spaces, parenthesized when nested. That case-list form is print-only. A supported generic union prints its name and all arguments, including unused arguments; when its name is unavailable, the partial printer reports that limitation instead of dropping its arguments. Two faces for the same imported origin remain compatible; compatibility between distinct union origins, including in gate types, remains unsupported. Some comparisons of generic union arguments also remain unsupported rather than deciding equality or mismatch. The Hoon bridge also translates some imported unnamed unions into this representation; unsupported cases remain errors.
6262
@@ -72,7 +72,7 @@ The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selecte
7272
7373Self-recursive `/sur` molds can cross the bridge as opaque module-and-name identities when their supported source-aware graph passes validation. Aliases, foreign references, recursive marks, unfolding, construction and field access remain unsupported; the partial printer declines recursive names that are not in scope.
7474
75−Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The checker currently treats a failed import as unsupported rather than rendering the importer's error. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
75+Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` aura and core evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the checker does not consume them yet and currently treats a failed import as unsupported rather than rendering the importer's error. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
7676
7777`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes, direct generic unions, and simple or nonrecursive generic mold aliases whose bodies the fragment supports. It detects missing sources and cycles and rejects a dependency if its interface cannot be inferred by the fragment.
7878
docs/status.md+7−6
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. Mutual groups, local recursive gates, polymorphic recursion and value cycles remain unsupported. Reporting repeats inference for a recursive gate, so its performance cost remains unmeasured. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive local groups and molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types, and the checker does not consume their diagnostics yet. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. A capital newly introduced in a local definition remains unsupported until the checker collects its enclosing lexical scope, including occurrences written later; a capital already present in the outer scope can be captured. Mutual groups, polymorphic recursion and value cycles remain unsupported. Reporting repeats inference for a recursive gate, so its performance cost remains unmeasured. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; mutually recursive local groups and recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
2323
2424The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `lure`, `weld` and `snoc`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` has an ordinary explicit result cast. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. List-dependent prelude mold aliases remain unsupported because their templates are prepared before injection. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
2525
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
3939
4040Besides the plan's list:
4141
42−- 512 golden cases: 296 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43−- The 512-case corpus passed under `urbit eval` in 58.7 s. The fake ship passed all 517 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 29.3 s for sync and 33.5 s for tests. The importer golden compares 141 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
42+- 514 golden cases: 298 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43+- The 514-case corpus passed under `urbit eval` in 61.6 s. The fake ship passed all 519 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 31.3 s for sync and 56.8 s for tests. The importer golden compares 149 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
4444- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4545- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
4646- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -88,14 +88,15 @@ Besides the plan's list:
8888| d782b45 | 2026-10-30 | Propagate list context and apply settled type decisions |
8989| c7082e0 | 2026-10-30 | Infer multi-argument calls |
9090| 918acbd | 2026-10-30 | Infer recursive gates from their samples first |
91−| This change | 2026-10-30 | Infer selected prelude list helpers |
91+| 1470d18 | 2026-10-30 | Infer selected prelude list helpers |
92+| This change | 2026-10-30 | Infer selected local recursive gates and distinguish reader diagnostics |
9293
9394## Checking it
9495
9596On a machine set up as [development.md](development.md) says:
9697
9798```
98−tools/golden # 512 cases under urbit eval
99+tools/golden # 514 cases under urbit eval
99100tools/importer-test # the Hoon importer fixture projection
100101tools/type-import-test # the importer/checker bridge fixture
101102tools/type-mark-test # the mark/checker bridge fixture
@@ -105,7 +106,7 @@ tools/testdata/selftest # the tools themselves
105106tools/doc-blocks docs/spec # the doc's examples are golden cases
106107tools/ship start
107108tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
108−tools/ship test # the same 512 cases as -test arms on the ship
109+tools/ship test # the same 514 cases as -test arms on the ship
109110tools/testdata/ship-selftest
110111tools/ship check-commit # |commit stores .jibb files
111112tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb-import.hoon+102−9
@@ -40,6 +40,12 @@
4040 [%apply name=term args=(list imported)]
4141 [%ref module=term name=term]
4242 [%bad reason=@t]
43+ [%invalid code=?(%aura %core) reason=@t]
44+ ==
45++$ import-diagnostic
46+ $% [%ok value=imported]
47+ [%invalid code=?(%aura %core) message=@t]
48+ [%unsupported message=@t]
4349 ==
4450+$ signatures (list [name=term code=hoon])
4551+$ visiting (list [typ=type name=(unit term)])
@@ -128,6 +134,42 @@
128134 ?. ?=([%& *] result) result
129135 result
130136::
137+++ read-named-diagnostic
138+ |= [module=term name=term cor=type]
139+ ^- import-diagnostic
140+ =/ result=(each imported @t) (read-named module name cor)
141+ ?: ?=(%& -.result) [%ok p.result]
142+ ?. ?=([%core *] cor) [%unsupported p.result]
143+ ?: =(cor -:!>(..zuse)) [%unsupported p.result]
144+ ?. (scope-safe cor %$) [%unsupported p.result]
145+ =/ chapters=(map term tome) q.r.q.cor
146+ ?. (lien ~(tap by chapters) |=(entry=[term tome] =((chapter-has +.entry name) [~ &])))
147+ [%unsupported p.result]
148+ =/ selected=(each type tang) (mule |.((~(play ut cor) (ream (cat 3 '*' name)))))
149+ ?. ?=(%& -.selected) [%unsupported p.result]
150+ =/ again=(each imported tang) (mule |.((walk module p.selected catalog ~ [~ cor])))
151+ ?. ?=(%& -.again) [%unsupported p.result]
152+ =/ evidence=(unit import-diagnostic) (first-invalid p.again)
153+ ?~ evidence [%unsupported p.result]
154+ u.evidence
155+::
156+++ read-mark-diagnostic
157+ |= [name=term cor=type]
158+ ^- import-diagnostic
159+ =/ result=(each imported @t) (read-mark name cor)
160+ ?: ?=(%& -.result) [%ok p.result]
161+ ?. ?=([%core *] cor) [%unsupported p.result]
162+ ?. ?=([%cell *] p.cor) [%unsupported p.result]
163+ ?. =(p.cor q.q.cor) [%unsupported p.result]
164+ ?. (scope-safe q.p.cor %$) [%unsupported p.result]
165+ =/ sample=type p.p.cor
166+ =/ raw=type ?:(?=([%face *] sample) q.sample sample)
167+ =/ again=(each imported tang) (mule |.((walk name raw catalog ~ [~ q.p.cor])))
168+ ?. ?=(%& -.again) [%unsupported p.result]
169+ =/ evidence=(unit import-diagnostic) (first-invalid p.again)
170+ ?~ evidence [%unsupported p.result]
171+ u.evidence
172+::
131173++ read-with
132174 |= [module=term name=term typ=type context=(unit type)]
133175 ^- (each imported @t)
@@ -545,8 +587,8 @@
545587 ?. |(=(p.h [%dtwt [%$ (mul 2 axis)]]) (fits-union-at p.h axis))
546588 [%| 'a Hoon union needs a source-level disjointness check']
547589 ?. (disjoint a b)
548− ?: ?=([%fits *] p.h) [%| 'a Hoon union has overlapping cases']
549− [%| 'a Hoon $^ union has overlapping cases']
590+ ?: ?=([%fits *] p.h) [%| 'Hoon union disjointness could not be verified']
591+ [%| 'Hoon $^ union disjointness could not be verified']
550592 [%& [%fork (sort (weld (union-cases a) (union-cases b)) |=(pair=[imported imported] (dor -.pair +.pair)))]]
551593 ==
552594++ union-cases
@@ -870,7 +912,7 @@
870912 =/ err (first-bads cases)
871913 ?^ err [%bad u.err]
872914 ?. (all-disjoint cases)
873− [%bad ?:(is-cell 'a Hoon $^ union has overlapping cases' 'a Hoon union has overlapping cases')]
915+ [%bad ?:(is-cell 'Hoon $^ union disjointness could not be verified' 'Hoon union disjointness could not be verified')]
874916 =/ rewritten=hoon original(q.p body(q.q.p args.u.split))
875917 =/ attempt=(each type tang) (mule |.((~(play ut p.typ) rewritten)))
876918 ?. ?=([%& *] attempt) [%bad unsupported]
@@ -891,10 +933,10 @@
891933 %void [%void ~]
892934 [%atom *]
893935 ?: |(=('s' (cut 3 [0 1] p.typ)) =('r' (cut 3 [0 1] p.typ)))
894− [%bad 'signed and float auras cannot be imported']
936+ [%invalid %aura 'signed and float auras cannot be imported']
895937 [%atom p.typ q.typ]
896938 [%cell *] [%cell $(typ p.typ) $(typ q.typ)]
897− [%core *] [%bad 'cores and gates cannot be imported']
939+ [%core *] [%invalid %core 'cores and gates cannot be imported']
898940 [%face *]
899941 ?@ p.typ [%face p.typ $(typ q.typ)]
900942 [%bad 'a complex Hoon face needs translation']
@@ -903,7 +945,7 @@
903945 (turn ~(tap in:..zuse p.typ) |=(t=type ^$(typ t)))
904946 =/ err (first-bads cases)
905947 ?^ err [%bad u.err]
906− ?. (all-disjoint cases) [%bad 'a Hoon union has overlapping cases']
948+ ?. (all-disjoint cases) [%bad 'Hoon union disjointness could not be verified']
907949 [%fork (sort cases |=(pair=[imported imported] (dor -.pair +.pair)))]
908950 [%hint *] $(typ q.typ)
909951 [%hold *]
@@ -930,7 +972,7 @@
930972 ?~ origin [%bad 'a recursive Hoon mold needs unambiguous source provenance']
931973 [%ref u.origin u.u.prior]
932974 =/ nm (hold-name q.typ)
933− ?: =(nm [~ %vase]) [%bad 'vases cannot be imported']
975+ ?: =(nm [~ %vase]) [%bad 'a Hoon type named vase needs source provenance']
934976 ?: &((source-uses q.typ %jar) !(alias-safe context %jar))
935977 [%bad 'Hoon collection provenance is unavailable or shadowed']
936978 ?: &((source-uses q.typ %jug) !(alias-safe context %jug))
@@ -974,7 +1016,7 @@
9741016 ?^ err [%bad u.err]
9751017 ?: (disjoint first second)
9761018 [%fork (sort ~[first second] |=(pair=[imported imported] (dor -.pair +.pair)))]
977− [%bad 'a Hoon $^ union has overlapping cases']
1019+ [%bad 'Hoon $^ union disjointness could not be verified']
9781020 ?: |((has-cell-union q.typ) (has-fits-union q.typ))
9791021 =/ cannot=@t
9801022 ?: (has-fits-union q.typ) 'a Hoon union needs a source-level disjointness check'
@@ -1031,6 +1073,7 @@
10311073 [%atom *] ~
10321074 [%ref *] ~
10331075 [%bad *] [~ reason.out]
1076+ [%invalid *] [~ reason.out]
10341077 [%face *] $(out body.out)
10351078 [%cell *]
10361079 =/ err $(out head.out)
@@ -1047,6 +1090,34 @@
10471090 =/ err (first-bad i.xs)
10481091 ?~ err $(xs t.xs)
10491092 err
1093+::
1094+++ first-invalid
1095+ |= out=imported
1096+ ^- (unit import-diagnostic)
1097+ ?- out
1098+ [%noun *] ~
1099+ [%void *] ~
1100+ [%atom *] ~
1101+ [%ref *] ~
1102+ [%bad *] `[%unsupported reason.out]
1103+ [%invalid *] `[%invalid code.out reason.out]
1104+ [%face *] $(out body.out)
1105+ [%cell *]
1106+ =/ first $(out head.out)
1107+ ?~ first $(out tail.out)
1108+ first
1109+ [%fork *] (first-invalids cases.out)
1110+ [%apply *] (first-invalids args.out)
1111+ ==
1112+::
1113+++ first-invalids
1114+ |= xs=(list imported)
1115+ ^- (unit import-diagnostic)
1116+ ?~ xs ~
1117+ =/ first (first-invalid i.xs)
1118+ ?~ first $(xs t.xs)
1119+ first
1120+::
10501121:: +fixture-test: shared golden expectations for eval and the ship.
10511122:: A synthetic hold whose first $^ branch cannot be evaluated. It tests
10521123:: that a failed branch probe is reported rather than crashing the host.
@@ -1142,7 +1213,7 @@
11421213 [%fork ~[[%cell [%face %x [%atom %ud ~]] [%face %y [%atom %ud ~]]] [%atom %ud ~]]]
11431214 =/ errors ?: =((sample %valid-cell) [%& expect-valid]) errors
11441215 ['disjoint cell union' errors]
1145− =/ errors ?: =((sample %invalid-cell) [%| 'a Hoon $^ union has overlapping cases']) errors
1216+ =/ errors ?: =((sample %invalid-cell) [%| 'Hoon $^ union disjointness could not be verified']) errors
11461217 ['overlapping cell union is rejected' errors]
11471218 =/ errors ?: =((shad %mn) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
11481219 ['local mop shadow in a field is rejected' errors]
@@ -1186,6 +1257,7 @@
11861257 [%apply *] "({(trip name.out)} {(show-imports args.out)})"
11871258 [%ref *] "{(trip name.out)}.{(trip module.out)}"
11881259 [%bad *] "error: {(trip reason.out)}"
1260+ [%invalid *] "error: {(trip reason.out)}"
11891261 ==
11901262::
11911263++ show-imports
@@ -1203,6 +1275,15 @@
12031275 [%| *] "error: {(trip p.result)}"
12041276 ==
12051277::
1278+++ show-import-diagnostic
1279+ |= result=import-diagnostic
1280+ ^- tape
1281+ ?- result
1282+ [%ok *] (show-import value.result)
1283+ [%invalid *] "invalid/{(trip code.result)}: {(trip message.result)}"
1284+ [%unsupported *] "unsupported: {(trip message.result)}"
1285+ ==
1286+::
12061287:: Clay includes debug spans around source nodes. Reproduce that
12071288:: shape without Clay so the same regression runs under eval and -test.
12081289++ decorate-union-source
@@ -1271,6 +1352,10 @@
12711352 =/ mark-rec-core=type -:(ride fp mark-rec)
12721353 =/ mark-gate-core=type -:(ride -:!>(..zuse) mark-gate)
12731354 =/ mark-basic-core=type -:(ride -:!>(..zuse) mark-basic)
1355+ =/ fake-vase=type -:(ride -:!>(..zuse) '|%\0a+$ vase @ud\0a--\0a')
1356+ =/ spoof=(unit import-diagnostic)
1357+ (first-invalid [%bad 'signed and float auras cannot be imported'])
1358+ ?> ?=(^ spoof)
12741359 =/ mark-shadow-core=type -:(ride sp mark-basic)
12751360 =/ tshp=type [%cell [%face %intermediate shc] -:!>(..zuse)]
12761361 =/ tshc=type -:(ride tshp only-list)
@@ -1430,6 +1515,14 @@
14301515 (crip "named-missing: {(show-result (read-named %small %missing sc))}")
14311516 (crip "named-invalid-core: {(show-result (read-named %small %items [%atom %ud ~]))}")
14321517 (crip "named-ford-recursive: {(show-result (read-named %ford %recursive fc))}")
1518+ (crip "diagnostic-items: {(show-import-diagnostic (read-named-diagnostic %small %items sc))}")
1519+ (crip "diagnostic-signed: {(show-import-diagnostic (read-named-diagnostic %small %signed sc))}")
1520+ (crip "diagnostic-float: {(show-import-diagnostic (read-named-diagnostic %small %float sc))}")
1521+ (crip "diagnostic-overlap: {(show-import-diagnostic (read-named-diagnostic %small %explicit-percent-overlap sc))}")
1522+ (crip "diagnostic-unproved: {(show-import-diagnostic (read-named-diagnostic %small %list-nested-invalid-cell sc))}")
1523+ (crip "diagnostic-mark-gate: {(show-import-diagnostic (read-mark-diagnostic %bad mark-gate-core))}")
1524+ (crip "diagnostic-shadow-vase: {(show-import-diagnostic (read-named-diagnostic %fake %vase fake-vase))}")
1525+ (crip "diagnostic-spoof: {(show-import-diagnostic u.spoof)}")
14331526 (crip "missing-arm: {(show-result (read-mold-in %small %missing [%atom %ud ~] sc))}")
14341527 (crip "wrong-provenance: {(show-result (read-mold-in %small %action (~(play ut sc) (ream '*items')) sc))}")
14351528 (crip "unverified-subject: {(show-result (read-mold-in %std %jar (~(play ut -:!>(..zuse)) (ream '*(jar @ud @t)')) -:!>(..zuse)))}")
jibb-dev/lib/jibb.hoon+8−2
@@ -6016,8 +6016,8 @@
60166016 [%& [%cell ht typ.p.tail] env.p.tail state.p.tail]
60176017::
60186018:: Local definitions generalize only variables outside their enclosing
6019−:: environment and explicit-capital scope. Unresolved groups stay
6020−:: unsupported: this fragment does not infer recursive definitions.
6019+:: environment and explicit-capital scope. Single self-recursive gates
6020+:: use a monomorphic placeholder; mutually recursive groups stay unsupported.
60216021::
60226022+$ ilocal-result (each [env=ienv state=istate] idiag)
60236023++ free-env-vars
@@ -6099,7 +6099,13 @@
60996099 =/ d=def i.ds
61006100 ?> ?=(%value -.d)
61016101 =/ inferred=iresult (infer-fragment val.d env state)
6102+ =/ retried=? ?=(%| -.inferred)
6103+ =? inferred retried (infer-recursive-gate d env state)
61026104 ?: ?=(%| -.inferred) $(ds t.ds, remaining [d remaining])
6105+ :: A new local capital needs lexical scope collection before it can be
6106+ :: generalized independently or shared with a later enclosing occurrence.
6107+ ?. (levy caps.state.p.inferred |=(cap=icap ?=(^ (icap-lookup name.cap caps.state))))
6108+ $(ds t.ds, remaining [d remaining])
61036109 =/ typ=itype (itype-normalize typ.p.inferred sub.state.p.inferred)
61046110 ?: |((pending-tags tags.state.p.inferred sub.state.p.inferred) (itype-has-tag typ))
61056111 $(ds t.ds, remaining [d remaining])
tests/golden/types-local-capitals/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: "A capital in a local `++` shares the enclosing `++`'s variable of the same name if the enclosing `++` also uses it; otherwise the local `++` introduces and generalizes its own variable."
2+tests: A recursive local gate captures a capital in its enclosing sample; a bare local binder generalizes independently. The partial checker conservatively leaves new written local capitals unsupported, including acyclic definitions, siblings and a capital written later in the enclosing body. Recursive self aliases remain monomorphic.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-local-capitals/modules.txtnew file+1
@@ -0,0 +1 @@
1+# empty bundle
tests/golden/types-local-capitals/source.jibbnew file+41
@@ -0,0 +1,41 @@
1+++ siblings |= x=@t
2+ ++ first |= y=A y
3+ ++ second |= z=A z
4+ ~& (first x)
5+ (second ~zod)
6+++ later |= x
7+ ++ inner |= y=A y
8+ ~& (inner "hi")
9+ ^- A x
10+++ captured |= x=A
11+ ++ inner |= y=A
12+ ?- %.y
13+ %.y x
14+ %.n (inner y)
15+ (inner x)
16+++ implicit |= x
17+ ++ inner |= y
18+ ?- %.y
19+ %.y y
20+ %.n (inner y)
21+ ~& (inner "hi")
22+ (inner ~zod)
23+++ local-mono |= x=A
24+ ++ inner |= y=A
25+ ++ alias inner
26+ ~& (alias "hi")
27+ (alias ~zod)
28+ (inner x)
29+++ fresh |= x=@t
30+ ++ inner |= y=A y
31+ (inner x)
32+++ captured-acyclic |= x=A
33+ ++ inner |= y=A y
34+ (inner x)
35+++ implicit-capture |= x
36+ ++ inner |= flag=?
37+ ?- flag
38+ %.y x
39+ %.n (inner %.y)
40+ ~& ^- @t x
41+ (inner %.y)
tests/golden/types-local-capitals/tokens.txtnew file+249
@@ -0,0 +1,249 @@
1+1:1 glyph ++
2+1:4 name siblings
3+1:13 glyph |=
4+1:16 name x
5+1:17 tight glyph =
6+1:18 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name first
10+2:12 glyph |=
11+2:15 name y
12+2:16 tight glyph =
13+2:17 tight tvar A
14+2:19 name y
15+3:3 NEWLINE
16+3:3 glyph ++
17+3:6 name second
18+3:13 glyph |=
19+3:16 name z
20+3:17 tight glyph =
21+3:18 tight tvar A
22+3:20 name z
23+4:3 NEWLINE
24+4:3 glyph ~&
25+4:6 glyph (
26+4:7 tight name first
27+4:13 name x
28+4:14 tight glyph )
29+5:5 INDENT
30+5:5 glyph (
31+5:6 tight name second
32+5:13 lit ~zod
33+5:17 tight glyph )
34+6:1 DEDENT
35+6:1 DEDENT
36+6:1 NEWLINE
37+6:1 glyph ++
38+6:4 name later
39+6:10 glyph |=
40+6:13 name x
41+7:3 INDENT
42+7:3 glyph ++
43+7:6 name inner
44+7:12 glyph |=
45+7:15 name y
46+7:16 tight glyph =
47+7:17 tight tvar A
48+7:19 name y
49+8:3 NEWLINE
50+8:3 glyph ~&
51+8:6 glyph (
52+8:7 tight name inner
53+8:13 str "hi"
54+8:17 tight glyph )
55+9:5 INDENT
56+9:5 glyph ^-
57+9:8 tvar A
58+9:10 name x
59+10:1 DEDENT
60+10:1 DEDENT
61+10:1 NEWLINE
62+10:1 glyph ++
63+10:4 name captured
64+10:13 glyph |=
65+10:16 name x
66+10:17 tight glyph =
67+10:18 tight tvar A
68+11:3 INDENT
69+11:3 glyph ++
70+11:6 name inner
71+11:12 glyph |=
72+11:15 name y
73+11:16 tight glyph =
74+11:17 tight tvar A
75+12:5 INDENT
76+12:5 glyph ?-
77+12:8 lit %.y
78+13:7 INDENT
79+13:7 lit %.y
80+13:11 name x
81+14:7 NEWLINE
82+14:7 lit %.n
83+14:11 glyph (
84+14:12 tight name inner
85+14:18 name y
86+14:19 tight glyph )
87+15:3 DEDENT
88+15:3 DEDENT
89+15:3 NEWLINE
90+15:3 glyph (
91+15:4 tight name inner
92+15:10 name x
93+15:11 tight glyph )
94+16:1 DEDENT
95+16:1 NEWLINE
96+16:1 glyph ++
97+16:4 name implicit
98+16:13 glyph |=
99+16:16 name x
100+17:3 INDENT
101+17:3 glyph ++
102+17:6 name inner
103+17:12 glyph |=
104+17:15 name y
105+18:5 INDENT
106+18:5 glyph ?-
107+18:8 lit %.y
108+19:7 INDENT
109+19:7 lit %.y
110+19:11 name y
111+20:7 NEWLINE
112+20:7 lit %.n
113+20:11 glyph (
114+20:12 tight name inner
115+20:18 name y
116+20:19 tight glyph )
117+21:3 DEDENT
118+21:3 DEDENT
119+21:3 NEWLINE
120+21:3 glyph ~&
121+21:6 glyph (
122+21:7 tight name inner
123+21:13 str "hi"
124+21:17 tight glyph )
125+22:5 INDENT
126+22:5 glyph (
127+22:6 tight name inner
128+22:12 lit ~zod
129+22:16 tight glyph )
130+23:1 DEDENT
131+23:1 DEDENT
132+23:1 NEWLINE
133+23:1 glyph ++
134+23:4 name local-mono
135+23:15 glyph |=
136+23:18 name x
137+23:19 tight glyph =
138+23:20 tight tvar A
139+24:3 INDENT
140+24:3 glyph ++
141+24:6 name inner
142+24:12 glyph |=
143+24:15 name y
144+24:16 tight glyph =
145+24:17 tight tvar A
146+25:5 INDENT
147+25:5 glyph ++
148+25:8 name alias
149+25:14 name inner
150+26:5 NEWLINE
151+26:5 glyph ~&
152+26:8 glyph (
153+26:9 tight name alias
154+26:15 str "hi"
155+26:19 tight glyph )
156+27:7 INDENT
157+27:7 glyph (
158+27:8 tight name alias
159+27:14 lit ~zod
160+27:18 tight glyph )
161+28:3 DEDENT
162+28:3 DEDENT
163+28:3 NEWLINE
164+28:3 glyph (
165+28:4 tight name inner
166+28:10 name x
167+28:11 tight glyph )
168+29:1 DEDENT
169+29:1 NEWLINE
170+29:1 glyph ++
171+29:4 name fresh
172+29:10 glyph |=
173+29:13 name x
174+29:14 tight glyph =
175+29:15 tight aura @t
176+30:3 INDENT
177+30:3 glyph ++
178+30:6 name inner
179+30:12 glyph |=
180+30:15 name y
181+30:16 tight glyph =
182+30:17 tight tvar A
183+30:19 name y
184+31:3 NEWLINE
185+31:3 glyph (
186+31:4 tight name inner
187+31:10 name x
188+31:11 tight glyph )
189+32:1 DEDENT
190+32:1 NEWLINE
191+32:1 glyph ++
192+32:4 name captured-acyclic
193+32:21 glyph |=
194+32:24 name x
195+32:25 tight glyph =
196+32:26 tight tvar A
197+33:3 INDENT
198+33:3 glyph ++
199+33:6 name inner
200+33:12 glyph |=
201+33:15 name y
202+33:16 tight glyph =
203+33:17 tight tvar A
204+33:19 name y
205+34:3 NEWLINE
206+34:3 glyph (
207+34:4 tight name inner
208+34:10 name x
209+34:11 tight glyph )
210+35:1 DEDENT
211+35:1 NEWLINE
212+35:1 glyph ++
213+35:4 name implicit-capture
214+35:21 glyph |=
215+35:24 name x
216+36:3 INDENT
217+36:3 glyph ++
218+36:6 name inner
219+36:12 glyph |=
220+36:15 name flag
221+36:19 tight glyph =
222+36:20 tight glyph ?
223+37:5 INDENT
224+37:5 glyph ?-
225+37:8 name flag
226+38:7 INDENT
227+38:7 lit %.y
228+38:11 name x
229+39:7 NEWLINE
230+39:7 lit %.n
231+39:11 glyph (
232+39:12 tight name inner
233+39:18 lit %.y
234+39:21 tight glyph )
235+40:3 DEDENT
236+40:3 DEDENT
237+40:3 NEWLINE
238+40:3 glyph ~&
239+40:6 glyph ^-
240+40:9 aura @t
241+40:12 name x
242+41:5 INDENT
243+41:5 glyph (
244+41:6 tight name inner
245+41:12 lit %.y
246+41:15 tight glyph )
247+41:16 DEDENT
248+41:16 DEDENT
249+41:16 NEWLINE
tests/golden/types-local-capitals/tree.txtnew file+127
@@ -0,0 +1,127 @@
1+(module
2+ (value 1:1 siblings
3+ (gate 1:13
4+ (face 1:16 x (aura 1:18 @t))
5+ (body 2:3
6+ (value 2:3 first
7+ (gate 2:12
8+ (face 2:15 y (tvar 2:17 A))
9+ (wing 2:19 y)))
10+ (value 3:3 second
11+ (gate 3:13
12+ (face 3:16 z (tvar 3:18 A))
13+ (wing 3:20 z)))
14+ (trace 4:3
15+ (group 4:6
16+ (call 4:7 (wing 4:7 first) (wing 4:13 x)))
17+ (body 5:5
18+ (group 5:5
19+ (call 5:6 (wing 5:6 second) (lit 5:13 ~zod))))))))
20+ (value 6:1 later
21+ (gate 6:10
22+ (bind 6:13 x)
23+ (body 7:3
24+ (value 7:3 inner
25+ (gate 7:12
26+ (face 7:15 y (tvar 7:17 A))
27+ (wing 7:19 y)))
28+ (trace 8:3
29+ (group 8:6
30+ (call 8:7 (wing 8:7 inner) (str 8:13 "hi")))
31+ (body 9:5
32+ (cast 9:5 (tvar 9:8 A) (wing 9:10 x)))))))
33+ (value 10:1 captured
34+ (gate 10:13
35+ (face 10:16 x (tvar 10:18 A))
36+ (body 11:3
37+ (value 11:3 inner
38+ (gate 11:12
39+ (face 11:15 y (tvar 11:17 A))
40+ (body 12:5
41+ (branch 12:5
42+ (lit 12:8 %.y)
43+ (arm 13:7 (lit 13:7 %.y) (wing 13:11 x))
44+ (arm 14:7
45+ (lit 14:7 %.n)
46+ (group 14:11
47+ (call 14:12 (wing 14:12 inner) (wing 14:18 y))))))))
48+ (group 15:3
49+ (call 15:4 (wing 15:4 inner) (wing 15:10 x))))))
50+ (value 16:1 implicit
51+ (gate 16:13
52+ (bind 16:16 x)
53+ (body 17:3
54+ (value 17:3 inner
55+ (gate 17:12
56+ (bind 17:15 y)
57+ (body 18:5
58+ (branch 18:5
59+ (lit 18:8 %.y)
60+ (arm 19:7 (lit 19:7 %.y) (wing 19:11 y))
61+ (arm 20:7
62+ (lit 20:7 %.n)
63+ (group 20:11
64+ (call 20:12 (wing 20:12 inner) (wing 20:18 y))))))))
65+ (trace 21:3
66+ (group 21:6
67+ (call 21:7 (wing 21:7 inner) (str 21:13 "hi")))
68+ (body 22:5
69+ (group 22:5
70+ (call 22:6 (wing 22:6 inner) (lit 22:12 ~zod))))))))
71+ (value 23:1 local-mono
72+ (gate 23:15
73+ (face 23:18 x (tvar 23:20 A))
74+ (body 24:3
75+ (value 24:3 inner
76+ (gate 24:12
77+ (face 24:15 y (tvar 24:17 A))
78+ (body 25:5
79+ (value 25:5 alias (wing 25:14 inner))
80+ (trace 26:5
81+ (group 26:8
82+ (call 26:9 (wing 26:9 alias) (str 26:15 "hi")))
83+ (body 27:7
84+ (group 27:7
85+ (call 27:8 (wing 27:8 alias) (lit 27:14 ~zod))))))))
86+ (group 28:3
87+ (call 28:4 (wing 28:4 inner) (wing 28:10 x))))))
88+ (value 29:1 fresh
89+ (gate 29:10
90+ (face 29:13 x (aura 29:15 @t))
91+ (body 30:3
92+ (value 30:3 inner
93+ (gate 30:12
94+ (face 30:15 y (tvar 30:17 A))
95+ (wing 30:19 y)))
96+ (group 31:3
97+ (call 31:4 (wing 31:4 inner) (wing 31:10 x))))))
98+ (value 32:1 captured-acyclic
99+ (gate 32:21
100+ (face 32:24 x (tvar 32:26 A))
101+ (body 33:3
102+ (value 33:3 inner
103+ (gate 33:12
104+ (face 33:15 y (tvar 33:17 A))
105+ (wing 33:19 y)))
106+ (group 34:3
107+ (call 34:4 (wing 34:4 inner) (wing 34:10 x))))))
108+ (value 35:1 implicit-capture
109+ (gate 35:21
110+ (bind 35:24 x)
111+ (body 36:3
112+ (value 36:3 inner
113+ (gate 36:12
114+ (face 36:15 flag (flag 36:20))
115+ (body 37:5
116+ (branch 37:5
117+ (wing 37:8 flag)
118+ (arm 38:7 (lit 38:7 %.y) (wing 38:11 x))
119+ (arm 39:7
120+ (lit 39:7 %.n)
121+ (group 39:11
122+ (call 39:12 (wing 39:12 inner) (lit 39:18 %.y))))))))
123+ (trace 40:3
124+ (cast 40:6 (aura 40:9 @t) (wing 40:12 x))
125+ (body 41:5
126+ (group 41:5
127+ (call 41:6 (wing 41:6 inner) (lit 41:12 %.y)))))))))
tests/golden/types-local-capitals/types.txtnew file+9
@@ -0,0 +1,9 @@
1+partial inference; module not checked
2+++ siblings: local definitions need unsupported inference
3+++ later: local definitions need unsupported inference
4+++ captured: $-(A A)
5+++ implicit: $-(A @p)
6+++ local-mono: local definitions need unsupported inference
7+++ fresh: local definitions need unsupported inference
8+++ captured-acyclic: $-(A A)
9+++ implicit-capture: $-(@t @t)
tests/golden/types-local-recursive/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Gates may call themselves and their siblings; other values can't depend on themselves, even through a gate"; Molds: "Type variables are capitals, generalized per `++`."
2+tests: A body-local recursive gate uses a monomorphic self reference and generalizes independently where allowed. Recursive list copy, capture and bare-binder polymorphism infer; name collisions, value and mutual cycles, unresolved tags, incompatible recursive aliases, self-application and explicit-capital forcing remain unsupported in this fragment.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-local-recursive/modules.txtnew file+1
@@ -0,0 +1 @@
1+# empty bundle
tests/golden/types-local-recursive/source.jibbnew file+54
@@ -0,0 +1,54 @@
1+++ copy |= xs=(list @t)
2+ ++ recur |= ys=(list @t)
3+ ^- (list @t) ?- ys
4+ ~ ~
5+ [item rest] [item (recur rest)]
6+ (recur xs)
7+++ generic |= x=A
8+ ++ recur |= y=A
9+ ?- %.y
10+ %.y x
11+ %.n (recur y)
12+ (recur x)
13+++ independently |= x=@t
14+ ++ recur |= y
15+ ?- %.y
16+ %.y y
17+ %.n (recur y)
18+ ~& (recur x)
19+ (recur ~zod)
20+++ collide |= x=@t
21+ ++ recur |= recur=@t (recur recur)
22+ (recur x)
23+++ cycle |= x=@t
24+ ++ y z
25+ ++ z y
26+ y
27+++ mutual |= x=@t
28+ ++ a |= y=@t (b y)
29+ ++ b |= y=@t (a y)
30+ (a x)
31+++ pending |= x=@t
32+ ++ recur |= y=@t
33+ ~& %orphan
34+ (recur y)
35+ (recur x)
36+++ alias-mono |= x=@t
37+ ++ recur |= y=A
38+ ++ alias recur
39+ ~& (alias "hi")
40+ (alias ~zod)
41+ (recur x)
42+++ occurs |= x=@t
43+ ++ recur |= y (recur recur)
44+ (recur x)
45+++ captures |= x=A
46+ ++ recur |= flag=?
47+ ?- flag
48+ %.y ^- @t x
49+ %.n (recur %.y)
50+ (recur %.y)
51+++ via-gate |= x=@t
52+ ++ value (gate x)
53+ ++ gate |= y=@t value
54+ value
tests/golden/types-local-recursive/tokens.txtnew file+351
@@ -0,0 +1,351 @@
1+1:1 glyph ++
2+1:4 name copy
3+1:9 glyph |=
4+1:12 name xs
5+1:14 tight glyph =
6+1:15 tight glyph (
7+1:16 tight name list
8+1:21 aura @t
9+1:23 tight glyph )
10+2:3 INDENT
11+2:3 glyph ++
12+2:6 name recur
13+2:12 glyph |=
14+2:15 name ys
15+2:17 tight glyph =
16+2:18 tight glyph (
17+2:19 tight name list
18+2:24 aura @t
19+2:26 tight glyph )
20+3:5 INDENT
21+3:5 glyph ^-
22+3:8 glyph (
23+3:9 tight name list
24+3:14 aura @t
25+3:16 tight glyph )
26+3:18 glyph ?-
27+3:21 name ys
28+4:7 INDENT
29+4:7 lit ~
30+4:9 lit ~
31+5:7 NEWLINE
32+5:7 glyph [
33+5:8 tight name item
34+5:13 name rest
35+5:17 tight glyph ]
36+5:19 glyph [
37+5:20 tight name item
38+5:25 glyph (
39+5:26 tight name recur
40+5:32 name rest
41+5:36 tight glyph )
42+5:37 tight glyph ]
43+6:3 DEDENT
44+6:3 DEDENT
45+6:3 NEWLINE
46+6:3 glyph (
47+6:4 tight name recur
48+6:10 name xs
49+6:12 tight glyph )
50+7:1 DEDENT
51+7:1 NEWLINE
52+7:1 glyph ++
53+7:4 name generic
54+7:12 glyph |=
55+7:15 name x
56+7:16 tight glyph =
57+7:17 tight tvar A
58+8:3 INDENT
59+8:3 glyph ++
60+8:6 name recur
61+8:12 glyph |=
62+8:15 name y
63+8:16 tight glyph =
64+8:17 tight tvar A
65+9:5 INDENT
66+9:5 glyph ?-
67+9:8 lit %.y
68+10:7 INDENT
69+10:7 lit %.y
70+10:11 name x
71+11:7 NEWLINE
72+11:7 lit %.n
73+11:11 glyph (
74+11:12 tight name recur
75+11:18 name y
76+11:19 tight glyph )
77+12:3 DEDENT
78+12:3 DEDENT
79+12:3 NEWLINE
80+12:3 glyph (
81+12:4 tight name recur
82+12:10 name x
83+12:11 tight glyph )
84+13:1 DEDENT
85+13:1 NEWLINE
86+13:1 glyph ++
87+13:4 name independently
88+13:18 glyph |=
89+13:21 name x
90+13:22 tight glyph =
91+13:23 tight aura @t
92+14:3 INDENT
93+14:3 glyph ++
94+14:6 name recur
95+14:12 glyph |=
96+14:15 name y
97+15:5 INDENT
98+15:5 glyph ?-
99+15:8 lit %.y
100+16:7 INDENT
101+16:7 lit %.y
102+16:11 name y
103+17:7 NEWLINE
104+17:7 lit %.n
105+17:11 glyph (
106+17:12 tight name recur
107+17:18 name y
108+17:19 tight glyph )
109+18:3 DEDENT
110+18:3 DEDENT
111+18:3 NEWLINE
112+18:3 glyph ~&
113+18:6 glyph (
114+18:7 tight name recur
115+18:13 name x
116+18:14 tight glyph )
117+19:5 INDENT
118+19:5 glyph (
119+19:6 tight name recur
120+19:12 lit ~zod
121+19:16 tight glyph )
122+20:1 DEDENT
123+20:1 DEDENT
124+20:1 NEWLINE
125+20:1 glyph ++
126+20:4 name collide
127+20:12 glyph |=
128+20:15 name x
129+20:16 tight glyph =
130+20:17 tight aura @t
131+21:3 INDENT
132+21:3 glyph ++
133+21:6 name recur
134+21:12 glyph |=
135+21:15 name recur
136+21:20 tight glyph =
137+21:21 tight aura @t
138+21:24 glyph (
139+21:25 tight name recur
140+21:31 name recur
141+21:36 tight glyph )
142+22:3 NEWLINE
143+22:3 glyph (
144+22:4 tight name recur
145+22:10 name x
146+22:11 tight glyph )
147+23:1 DEDENT
148+23:1 NEWLINE
149+23:1 glyph ++
150+23:4 name cycle
151+23:10 glyph |=
152+23:13 name x
153+23:14 tight glyph =
154+23:15 tight aura @t
155+24:3 INDENT
156+24:3 glyph ++
157+24:6 name y
158+24:8 name z
159+25:3 NEWLINE
160+25:3 glyph ++
161+25:6 name z
162+25:8 name y
163+26:3 NEWLINE
164+26:3 name y
165+27:1 DEDENT
166+27:1 NEWLINE
167+27:1 glyph ++
168+27:4 name mutual
169+27:11 glyph |=
170+27:14 name x
171+27:15 tight glyph =
172+27:16 tight aura @t
173+28:3 INDENT
174+28:3 glyph ++
175+28:6 name a
176+28:8 glyph |=
177+28:11 name y
178+28:12 tight glyph =
179+28:13 tight aura @t
180+28:16 glyph (
181+28:17 tight name b
182+28:19 name y
183+28:20 tight glyph )
184+29:3 NEWLINE
185+29:3 glyph ++
186+29:6 name b
187+29:8 glyph |=
188+29:11 name y
189+29:12 tight glyph =
190+29:13 tight aura @t
191+29:16 glyph (
192+29:17 tight name a
193+29:19 name y
194+29:20 tight glyph )
195+30:3 NEWLINE
196+30:3 glyph (
197+30:4 tight name a
198+30:6 name x
199+30:7 tight glyph )
200+31:1 DEDENT
201+31:1 NEWLINE
202+31:1 glyph ++
203+31:4 name pending
204+31:12 glyph |=
205+31:15 name x
206+31:16 tight glyph =
207+31:17 tight aura @t
208+32:3 INDENT
209+32:3 glyph ++
210+32:6 name recur
211+32:12 glyph |=
212+32:15 name y
213+32:16 tight glyph =
214+32:17 tight aura @t
215+33:5 INDENT
216+33:5 glyph ~&
217+33:8 lit %orphan
218+34:7 INDENT
219+34:7 glyph (
220+34:8 tight name recur
221+34:14 name y
222+34:15 tight glyph )
223+35:3 DEDENT
224+35:3 DEDENT
225+35:3 NEWLINE
226+35:3 glyph (
227+35:4 tight name recur
228+35:10 name x
229+35:11 tight glyph )
230+36:1 DEDENT
231+36:1 NEWLINE
232+36:1 glyph ++
233+36:4 name alias-mono
234+36:15 glyph |=
235+36:18 name x
236+36:19 tight glyph =
237+36:20 tight aura @t
238+37:3 INDENT
239+37:3 glyph ++
240+37:6 name recur
241+37:12 glyph |=
242+37:15 name y
243+37:16 tight glyph =
244+37:17 tight tvar A
245+38:5 INDENT
246+38:5 glyph ++
247+38:8 name alias
248+38:14 name recur
249+39:5 NEWLINE
250+39:5 glyph ~&
251+39:8 glyph (
252+39:9 tight name alias
253+39:15 str "hi"
254+39:19 tight glyph )
255+40:7 INDENT
256+40:7 glyph (
257+40:8 tight name alias
258+40:14 lit ~zod
259+40:18 tight glyph )
260+41:3 DEDENT
261+41:3 DEDENT
262+41:3 NEWLINE
263+41:3 glyph (
264+41:4 tight name recur
265+41:10 name x
266+41:11 tight glyph )
267+42:1 DEDENT
268+42:1 NEWLINE
269+42:1 glyph ++
270+42:4 name occurs
271+42:11 glyph |=
272+42:14 name x
273+42:15 tight glyph =
274+42:16 tight aura @t
275+43:3 INDENT
276+43:3 glyph ++
277+43:6 name recur
278+43:12 glyph |=
279+43:15 name y
280+43:17 glyph (
281+43:18 tight name recur
282+43:24 name recur
283+43:29 tight glyph )
284+44:3 NEWLINE
285+44:3 glyph (
286+44:4 tight name recur
287+44:10 name x
288+44:11 tight glyph )
289+45:1 DEDENT
290+45:1 NEWLINE
291+45:1 glyph ++
292+45:4 name captures
293+45:13 glyph |=
294+45:16 name x
295+45:17 tight glyph =
296+45:18 tight tvar A
297+46:3 INDENT
298+46:3 glyph ++
299+46:6 name recur
300+46:12 glyph |=
301+46:15 name flag
302+46:19 tight glyph =
303+46:20 tight glyph ?
304+47:5 INDENT
305+47:5 glyph ?-
306+47:8 name flag
307+48:7 INDENT
308+48:7 lit %.y
309+48:11 glyph ^-
310+48:14 aura @t
311+48:17 name x
312+49:7 NEWLINE
313+49:7 lit %.n
314+49:11 glyph (
315+49:12 tight name recur
316+49:18 lit %.y
317+49:21 tight glyph )
318+50:3 DEDENT
319+50:3 DEDENT
320+50:3 NEWLINE
321+50:3 glyph (
322+50:4 tight name recur
323+50:10 lit %.y
324+50:13 tight glyph )
325+51:1 DEDENT
326+51:1 NEWLINE
327+51:1 glyph ++
328+51:4 name via-gate
329+51:13 glyph |=
330+51:16 name x
331+51:17 tight glyph =
332+51:18 tight aura @t
333+52:3 INDENT
334+52:3 glyph ++
335+52:6 name value
336+52:12 glyph (
337+52:13 tight name gate
338+52:18 name x
339+52:19 tight glyph )
340+53:3 NEWLINE
341+53:3 glyph ++
342+53:6 name gate
343+53:11 glyph |=
344+53:14 name y
345+53:15 tight glyph =
346+53:16 tight aura @t
347+53:19 name value
348+54:3 NEWLINE
349+54:3 name value
350+54:8 DEDENT
351+54:8 NEWLINE
tests/golden/types-local-recursive/tree.txtnew file+170
@@ -0,0 +1,170 @@
1+(module
2+ (value 1:1 copy
3+ (gate 1:9
4+ (face 1:12 xs
5+ (apply 1:15 list (aura 1:21 @t)))
6+ (body 2:3
7+ (value 2:3 recur
8+ (gate 2:12
9+ (face 2:15 ys
10+ (apply 2:18 list (aura 2:24 @t)))
11+ (body 3:5
12+ (cast 3:5
13+ (apply 3:8 list (aura 3:14 @t))
14+ (branch 3:18
15+ (wing 3:21 ys)
16+ (arm 4:7 (lit 4:7 ~) (lit 4:9 ~))
17+ (arm 5:7
18+ (cell 5:7 (bind 5:8 item) (bind 5:13 rest))
19+ (tuple 5:19
20+ (wing 5:20 item)
21+ (group 5:25
22+ (call 5:26 (wing 5:26 recur) (wing 5:32 rest))))))))))
23+ (group 6:3
24+ (call 6:4 (wing 6:4 recur) (wing 6:10 xs))))))
25+ (value 7:1 generic
26+ (gate 7:12
27+ (face 7:15 x (tvar 7:17 A))
28+ (body 8:3
29+ (value 8:3 recur
30+ (gate 8:12
31+ (face 8:15 y (tvar 8:17 A))
32+ (body 9:5
33+ (branch 9:5
34+ (lit 9:8 %.y)
35+ (arm 10:7 (lit 10:7 %.y) (wing 10:11 x))
36+ (arm 11:7
37+ (lit 11:7 %.n)
38+ (group 11:11
39+ (call 11:12 (wing 11:12 recur) (wing 11:18 y))))))))
40+ (group 12:3
41+ (call 12:4 (wing 12:4 recur) (wing 12:10 x))))))
42+ (value 13:1 independently
43+ (gate 13:18
44+ (face 13:21 x (aura 13:23 @t))
45+ (body 14:3
46+ (value 14:3 recur
47+ (gate 14:12
48+ (bind 14:15 y)
49+ (body 15:5
50+ (branch 15:5
51+ (lit 15:8 %.y)
52+ (arm 16:7 (lit 16:7 %.y) (wing 16:11 y))
53+ (arm 17:7
54+ (lit 17:7 %.n)
55+ (group 17:11
56+ (call 17:12 (wing 17:12 recur) (wing 17:18 y))))))))
57+ (trace 18:3
58+ (group 18:6
59+ (call 18:7 (wing 18:7 recur) (wing 18:13 x)))
60+ (body 19:5
61+ (group 19:5
62+ (call 19:6 (wing 19:6 recur) (lit 19:12 ~zod))))))))
63+ (value 20:1 collide
64+ (gate 20:12
65+ (face 20:15 x (aura 20:17 @t))
66+ (body 21:3
67+ (value 21:3 recur
68+ (gate 21:12
69+ (face 21:15 recur (aura 21:21 @t))
70+ (group 21:24
71+ (call 21:25 (wing 21:25 recur) (wing 21:31 recur)))))
72+ (group 22:3
73+ (call 22:4 (wing 22:4 recur) (wing 22:10 x))))))
74+ (value 23:1 cycle
75+ (gate 23:10
76+ (face 23:13 x (aura 23:15 @t))
77+ (body 24:3
78+ (value 24:3 y (wing 24:8 z))
79+ (value 25:3 z (wing 25:8 y))
80+ (wing 26:3 y))))
81+ (value 27:1 mutual
82+ (gate 27:11
83+ (face 27:14 x (aura 27:16 @t))
84+ (body 28:3
85+ (value 28:3 a
86+ (gate 28:8
87+ (face 28:11 y (aura 28:13 @t))
88+ (group 28:16
89+ (call 28:17 (wing 28:17 b) (wing 28:19 y)))))
90+ (value 29:3 b
91+ (gate 29:8
92+ (face 29:11 y (aura 29:13 @t))
93+ (group 29:16
94+ (call 29:17 (wing 29:17 a) (wing 29:19 y)))))
95+ (group 30:3
96+ (call 30:4 (wing 30:4 a) (wing 30:6 x))))))
97+ (value 31:1 pending
98+ (gate 31:12
99+ (face 31:15 x (aura 31:17 @t))
100+ (body 32:3
101+ (value 32:3 recur
102+ (gate 32:12
103+ (face 32:15 y (aura 32:17 @t))
104+ (body 33:5
105+ (trace 33:5
106+ (lit 33:8 %orphan)
107+ (body 34:7
108+ (group 34:7
109+ (call 34:8 (wing 34:8 recur) (wing 34:14 y))))))))
110+ (group 35:3
111+ (call 35:4 (wing 35:4 recur) (wing 35:10 x))))))
112+ (value 36:1 alias-mono
113+ (gate 36:15
114+ (face 36:18 x (aura 36:20 @t))
115+ (body 37:3
116+ (value 37:3 recur
117+ (gate 37:12
118+ (face 37:15 y (tvar 37:17 A))
119+ (body 38:5
120+ (value 38:5 alias (wing 38:14 recur))
121+ (trace 39:5
122+ (group 39:8
123+ (call 39:9 (wing 39:9 alias) (str 39:15 "hi")))
124+ (body 40:7
125+ (group 40:7
126+ (call 40:8 (wing 40:8 alias) (lit 40:14 ~zod))))))))
127+ (group 41:3
128+ (call 41:4 (wing 41:4 recur) (wing 41:10 x))))))
129+ (value 42:1 occurs
130+ (gate 42:11
131+ (face 42:14 x (aura 42:16 @t))
132+ (body 43:3
133+ (value 43:3 recur
134+ (gate 43:12
135+ (bind 43:15 y)
136+ (group 43:17
137+ (call 43:18 (wing 43:18 recur) (wing 43:24 recur)))))
138+ (group 44:3
139+ (call 44:4 (wing 44:4 recur) (wing 44:10 x))))))
140+ (value 45:1 captures
141+ (gate 45:13
142+ (face 45:16 x (tvar 45:18 A))
143+ (body 46:3
144+ (value 46:3 recur
145+ (gate 46:12
146+ (face 46:15 flag (flag 46:20))
147+ (body 47:5
148+ (branch 47:5
149+ (wing 47:8 flag)
150+ (arm 48:7
151+ (lit 48:7 %.y)
152+ (cast 48:11 (aura 48:14 @t) (wing 48:17 x)))
153+ (arm 49:7
154+ (lit 49:7 %.n)
155+ (group 49:11
156+ (call 49:12 (wing 49:12 recur) (lit 49:18 %.y))))))))
157+ (group 50:3
158+ (call 50:4 (wing 50:4 recur) (lit 50:10 %.y))))))
159+ (value 51:1 via-gate
160+ (gate 51:13
161+ (face 51:16 x (aura 51:18 @t))
162+ (body 52:3
163+ (value 52:3 value
164+ (group 52:12
165+ (call 52:13 (wing 52:13 gate) (wing 52:18 x))))
166+ (value 53:3 gate
167+ (gate 53:11
168+ (face 53:14 y (aura 53:16 @t))
169+ (wing 53:19 value)))
170+ (wing 54:3 value)))))
tests/golden/types-local-recursive/types.txtnew file+12
@@ -0,0 +1,12 @@
1+partial inference; module not checked
2+++ copy: $-((list @t) (list @t))
3+++ generic: $-(A A)
4+++ independently: $-(@t @p)
5+++ collide: local definitions need unsupported inference
6+++ cycle: local definitions need unsupported inference
7+++ mutual: local definitions need unsupported inference
8+++ pending: local definitions need unsupported inference
9+++ alias-mono: local definitions need unsupported inference
10+++ occurs: local definitions need unsupported inference
11+++ captures: local definitions need unsupported inference
12+++ via-gate: local definitions need unsupported inference
tests/golden/types-recursive-gate/types.txt+1−1
@@ -25,7 +25,7 @@ partial inference; module not checked
2525++ mutual-a: name is not available to partial inference
2626++ mutual-b: name is not available to partial inference
2727++ captured: $-(A A)
28−++ local-rec: local definitions need unsupported inference
28+++ local-rec: $-(A B)
2929++ forced-trace: explicit capital constraints are not supported by partial inference
3030++ pending-trace: tag needs context in partial inference
3131++ higher: $-($-(A A) $-(A A))
tests/importer/about.txt+2−2
@@ -9,12 +9,12 @@ explicit union argument when the exact call wrapper and collection provenance
99are validated and all union cases are static and pairwise disjoint. Cases
1010cover overlap, collapsed branches, multiple or nested unions, dependent
1111branches, forged subject, sample and tail wrappers, and a shadowed
12−collection. Unsupported forms fail closed; nested `$@` cases remain supported. The provisional reading is recorded in doc question 22. `ford.txt`
12+collection. Unsupported forms fail closed; nested `$@` cases remain supported. The union disjointness rule was confirmed in question 22. `ford.txt`
1313checks a synthetic imported subject and selected mold; other cases check
1414transitive imports, named mold lookup, missing names, shadowing, unprovenanced
1515recursive holds, malformed
1616subjects and recursive references through local, imported and transitive
17−cores, including ambiguous and independently defined origins. The mark fixtures check door samples,
17+cores, including ambiguous and independently defined origins. Structured diagnostic cases distinguish proven invalid auras and cores from union disjointness, provenance and source checks the reader cannot verify; a locally shadowed vase and unstructured failure text that mimics an aura error must stay unsupported. The mark fixtures check door samples,
1818collection provenance, unsupported gates and recursive sample provenance.
1919The synthetic hold in +bad-branch-fixture checks that a failed Hoon branch expansion returns
2020an error. `tlon-epic.txt`, `tlon-presence.txt` and `tlon-docs.txt` are the
tests/importer/tree.txt+27−19
@@ -47,35 +47,35 @@ gate: error: cores and gates cannot be imported
4747vase: error: vases cannot be imported
4848failed-branch: error: a Hoon $^ union needs a source-level disjointness check
4949debug-union: (union [add text=@t] [remove id=@ud])
50−debug-union-overlap: error: a Hoon union has overlapping cases
50+debug-union-overlap: error: Hoon union disjointness could not be verified
5151debug-nested-cell: [id=@ud value=(union [a=@ud b=@t] @ud)]
52−debug-nested-cell-overlap: error: a Hoon $^ union has overlapping cases
53−explicit-graph: error: a Hoon union has overlapping cases
52+debug-nested-cell-overlap: error: Hoon $^ union disjointness could not be verified
53+explicit-graph: error: Hoon union disjointness could not be verified
5454explicit-graph-unsupported: error: signed and float auras cannot be imported
5555explicit-wut-safe: (union [ok @ud] [err @t])
56−explicit-percent-overlap: error: a Hoon union has overlapping cases
57−explicit-wut-overlap: error: a Hoon union has overlapping cases
58−explicit-collapsed: error: a Hoon union has overlapping cases
59−explicit-subsumed: error: a Hoon union has overlapping cases
56+explicit-percent-overlap: error: Hoon union disjointness could not be verified
57+explicit-wut-overlap: error: Hoon union disjointness could not be verified
58+explicit-collapsed: error: Hoon union disjointness could not be verified
59+explicit-subsumed: error: Hoon union disjointness could not be verified
6060explicit-three: (union [a @ud] [b @t] [c @p])
6161explicit-unknown: error: a Hoon union needs a source-level disjointness check
62−explicit-nested: error: a Hoon union has overlapping cases
62+explicit-nested: error: Hoon union disjointness could not be verified
6363collection-union-wrapper: valid; forged subject, sample and tail rejected
6464collection-union-list: (list (union [x @ud] [y @t]))
6565collection-union-set: (set (union [x @ud] [y @t]))
6666collection-union-map-key: (map (union [x @ud] [y @t]) (list @ud))
6767collection-union-map-value: (map (list @ud) (union [x=@ud y=@t] @ud))
6868collection-union-unit: (unit (union x y z))
69−collection-union-collapsed: error: a Hoon union has overlapping cases
69+collection-union-collapsed: error: Hoon union disjointness could not be verified
7070collection-union-multiple: error: a Hoon union needs a source-level disjointness check
7171collection-union-nested: error: a Hoon union needs a source-level disjointness check
7272collection-union-dependent: error: a Hoon union needs a source-level disjointness check
7373collection-union-shadow: error: Hoon collection provenance is unavailable or shadowed
74−explicit-list: error: a Hoon union has overlapping cases
75−explicit-set: error: a Hoon union has overlapping cases
74+explicit-list: error: Hoon union disjointness could not be verified
75+explicit-set: error: Hoon union disjointness could not be verified
7676explicit-faces: (list [bcwt=@t bccn=@ud])
77−explicit-alias: error: a Hoon union has overlapping cases
78−explicit-ford: error: a Hoon union has overlapping cases
77+explicit-alias: error: Hoon union disjointness could not be verified
78+explicit-ford: error: Hoon union disjointness could not be verified
7979explicit-shadow-path: error: Hoon collection provenance is unavailable or shadowed
8080list-bckt-field: (list [bckt=@ud value=@t])
8181list-noun-overlap: error: a Hoon $^ union needs a source-level disjointness check
@@ -84,14 +84,14 @@ list-nested-atom-cell: (list [id=@ud value=(union [a=@ud b=@t] @ud)])
8484list-nested-valid-cell: error: a Hoon $^ union needs a source-level disjointness check
8585list-nested-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
8686map-nested-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
87−set-direct-invalid-cell: error: a Hoon $^ union has overlapping cases
88−map-key-invalid-cell: error: a Hoon $^ union has overlapping cases
87+set-direct-invalid-cell: error: Hoon $^ union disjointness could not be verified
88+map-key-invalid-cell: error: Hoon $^ union disjointness could not be verified
8989nested-atom-cell: [left=(union [a=@ud b=@t] @ud) right=(union [c=@ud d=@t] @t)]
9090nested-tags: [id=@ud value=(union foo bar)]
91−nested-tags-overlap: error: a Hoon $^ union has overlapping cases
91+nested-tags-overlap: error: Hoon $^ union disjointness could not be verified
9292nested-tagged: [id=@ud value=(union [foo @t] [bar @ud])]
9393nested-tagged-bckt: [id=@ud value=(union [foo bckt=@t] [bar bckt=@ud])]
94−nested-tagged-overlap: error: a Hoon $^ union has overlapping cases
94+nested-tagged-overlap: error: Hoon $^ union disjointness could not be verified
9595nested-tagged-alias: [id=@ud value=(union [foo @t] [bar @ud])]
9696nested-tagged-ford: [id=@ud value=(union [foo @t] [bar @ud])]
9797tag-static-valid: yes
@@ -108,9 +108,9 @@ nested-validated-branch: error: a Hoon $^ union needs a source-level disjointnes
108108nested-named-branch: error: a Hoon $^ union needs a source-level disjointness check
109109nested-ford-cell: [id=@ud value=(union [a=@ud b=@t] @ud)]
110110nested-valid-cell: [id=@ud value=(union [a=@ud b=@t] @ud)]
111−nested-invalid-cell: error: a Hoon $^ union has overlapping cases
111+nested-invalid-cell: error: Hoon $^ union disjointness could not be verified
112112valid-cell: (union [x=@ud y=@ud] @ud)
113−invalid-cell: error: a Hoon $^ union has overlapping cases
113+invalid-cell: error: Hoon $^ union disjointness could not be verified
114114chapter-malformed: unsafe
115115chapter-wrapped-malformed: unsafe
116116chapter-direct-hit: yes
@@ -129,6 +129,14 @@ named-present: (map @ud [id=@ud text=@t])
129129named-missing: error: Hoon mold `missing` is not declared
130130named-invalid-core: error: Hoon module provenance is unavailable
131131named-ford-recursive: (union [value=@ud next=chain.small] @n:0)
132+diagnostic-items: (map @ud [id=@ud text=@t])
133+diagnostic-signed: invalid/aura: signed and float auras cannot be imported
134+diagnostic-float: invalid/aura: signed and float auras cannot be imported
135+diagnostic-overlap: unsupported: Hoon union disjointness could not be verified
136+diagnostic-unproved: unsupported: a Hoon $^ union needs a source-level disjointness check
137+diagnostic-mark-gate: invalid/core: cores and gates cannot be imported
138+diagnostic-shadow-vase: unsupported: a Hoon type named vase needs source provenance
139+diagnostic-spoof: unsupported: signed and float auras cannot be imported
132140missing-arm: error: Hoon mold `missing` is not declared
133141wrong-provenance: error: Hoon module provenance does not match the selected mold
134142unverified-subject: error: Hoon module provenance is unavailable
tests/lib/jibb.hoon+411−399
@@ -1488,331 +1488,339 @@
14881488/* tok-438 %txt /tests/golden/types-list-patterns/tokens/txt
14891489/* tre-438 %txt /tests/golden/types-list-patterns/tree/txt
14901490/* typ-438 %txt /tests/golden/types-list-patterns/types/txt
1491−/* src-439 %jibb /tests/golden/types-module-fixtures/source/jibb
1492−/* tok-439 %txt /tests/golden/types-module-fixtures/tokens/txt
1493−/* tre-439 %txt /tests/golden/types-module-fixtures/tree/txt
1494−/* mod-439-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1495−/* mod-439-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1496−/* typ-439 %txt /tests/golden/types-module-fixtures/types/txt
1497−/* mtre-439 %txt /tests/golden/types-module-fixtures/module-trees/txt
1498−/* src-440 %jibb /tests/golden/types-module-mixed/source/jibb
1499−/* tok-440 %txt /tests/golden/types-module-mixed/tokens/txt
1500−/* tre-440 %txt /tests/golden/types-module-mixed/tree/txt
1501−/* mod-440-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1502−/* typ-440 %txt /tests/golden/types-module-mixed/types/txt
1503−/* imp-440-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1504−/* mark-440-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1505−/* mtre-440 %txt /tests/golden/types-module-mixed/module-trees/txt
1506−/* src-441 %jibb /tests/golden/types-multi-call/source/jibb
1507−/* tok-441 %txt /tests/golden/types-multi-call/tokens/txt
1508−/* tre-441 %txt /tests/golden/types-multi-call/tree/txt
1509−/* typ-441 %txt /tests/golden/types-multi-call/types/txt
1510−/* src-442 %jibb /tests/golden/types-multi-import/source/jibb
1511−/* tok-442 %txt /tests/golden/types-multi-import/tokens/txt
1512−/* tre-442 %txt /tests/golden/types-multi-import/tree/txt
1513−/* mod-442-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1514−/* typ-442 %txt /tests/golden/types-multi-import/types/txt
1515−/* mtre-442 %txt /tests/golden/types-multi-import/module-trees/txt
1516−/* src-443 %jibb /tests/golden/types-null-context/source/jibb
1517−/* tok-443 %txt /tests/golden/types-null-context/tokens/txt
1518−/* tre-443 %txt /tests/golden/types-null-context/tree/txt
1519−/* typ-443 %txt /tests/golden/types-null-context/types/txt
1520−/* src-444 %jibb /tests/golden/types-null-overlap/source/jibb
1521−/* tok-444 %txt /tests/golden/types-null-overlap/tokens/txt
1522−/* tre-444 %txt /tests/golden/types-null-overlap/tree/txt
1523−/* typ-444 %txt /tests/golden/types-null-overlap/types/txt
1524−/* src-445 %jibb /tests/golden/types-null-unresolved/source/jibb
1525−/* tok-445 %txt /tests/golden/types-null-unresolved/tokens/txt
1526−/* tre-445 %txt /tests/golden/types-null-unresolved/tree/txt
1527−/* typ-445 %txt /tests/golden/types-null-unresolved/types/txt
1528−/* src-446 %jibb /tests/golden/types-partial-apply/source/jibb
1529−/* tok-446 %txt /tests/golden/types-partial-apply/tokens/txt
1530−/* tre-446 %txt /tests/golden/types-partial-apply/tree/txt
1531−/* typ-446 %txt /tests/golden/types-partial-apply/types/txt
1532−/* src-447 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1533−/* tok-447 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1534−/* tre-447 %txt /tests/golden/types-partial-atom-alias/tree/txt
1535−/* typ-447 %txt /tests/golden/types-partial-atom-alias/types/txt
1536−/* src-448 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1537−/* tok-448 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1538−/* tre-448 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1539−/* typ-448 %txt /tests/golden/types-partial-atom-constraint/types/txt
1540−/* src-449 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1541−/* tok-449 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1542−/* tre-449 %txt /tests/golden/types-partial-atom-widening/tree/txt
1543−/* typ-449 %txt /tests/golden/types-partial-atom-widening/types/txt
1544−/* src-450 %jibb /tests/golden/types-partial-aura/source/jibb
1545−/* tok-450 %txt /tests/golden/types-partial-aura/tokens/txt
1546−/* tre-450 %txt /tests/golden/types-partial-aura/tree/txt
1547−/* typ-450 %txt /tests/golden/types-partial-aura/types/txt
1548−/* src-451 %jibb /tests/golden/types-partial-aura-family/source/jibb
1549−/* tok-451 %txt /tests/golden/types-partial-aura-family/tokens/txt
1550−/* tre-451 %txt /tests/golden/types-partial-aura-family/tree/txt
1551−/* typ-451 %txt /tests/golden/types-partial-aura-family/types/txt
1552−/* src-452 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1553−/* tok-452 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1554−/* tre-452 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1555−/* typ-452 %txt /tests/golden/types-partial-aura-generalization/types/txt
1556−/* src-453 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1557−/* tok-453 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1558−/* tre-453 %txt /tests/golden/types-partial-bare-atom/tree/txt
1559−/* typ-453 %txt /tests/golden/types-partial-bare-atom/types/txt
1560−/* src-454 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1561−/* tok-454 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1562−/* tre-454 %txt /tests/golden/types-partial-branch-widening/tree/txt
1563−/* typ-454 %txt /tests/golden/types-partial-branch-widening/types/txt
1564−/* src-455 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1565−/* tok-455 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1566−/* tre-455 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1567−/* typ-455 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1568−/* src-456 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1569−/* tok-456 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1570−/* tre-456 %txt /tests/golden/types-partial-decimal-default/tree/txt
1571−/* typ-456 %txt /tests/golden/types-partial-decimal-default/types/txt
1572−/* src-457 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1573−/* tok-457 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1574−/* tre-457 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1575−/* typ-457 %txt /tests/golden/types-partial-dependency-chain/types/txt
1576−/* src-458 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1577−/* tok-458 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1578−/* tre-458 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1579−/* typ-458 %txt /tests/golden/types-partial-explicit-capital/types/txt
1580−/* src-459 %jibb /tests/golden/types-partial-forward/source/jibb
1581−/* tok-459 %txt /tests/golden/types-partial-forward/tokens/txt
1582−/* tre-459 %txt /tests/golden/types-partial-forward/tree/txt
1583−/* typ-459 %txt /tests/golden/types-partial-forward/types/txt
1584−/* src-460 %jibb /tests/golden/types-partial-generalization/source/jibb
1585−/* tok-460 %txt /tests/golden/types-partial-generalization/tokens/txt
1586−/* tre-460 %txt /tests/golden/types-partial-generalization/tree/txt
1587−/* typ-460 %txt /tests/golden/types-partial-generalization/types/txt
1588−/* src-461 %jibb /tests/golden/types-partial-identity/source/jibb
1589−/* tok-461 %txt /tests/golden/types-partial-identity/tokens/txt
1590−/* tre-461 %txt /tests/golden/types-partial-identity/tree/txt
1591−/* typ-461 %txt /tests/golden/types-partial-identity/types/txt
1592−/* src-462 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1593−/* tok-462 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1594−/* tre-462 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1595−/* typ-462 %txt /tests/golden/types-partial-independent-atoms/types/txt
1596−/* src-463 %jibb /tests/golden/types-partial-local-molds/source/jibb
1597−/* tok-463 %txt /tests/golden/types-partial-local-molds/tokens/txt
1598−/* tre-463 %txt /tests/golden/types-partial-local-molds/tree/txt
1599−/* typ-463 %txt /tests/golden/types-partial-local-molds/types/txt
1600−/* src-464 %jibb /tests/golden/types-partial-locals/source/jibb
1601−/* tok-464 %txt /tests/golden/types-partial-locals/tokens/txt
1602−/* tre-464 %txt /tests/golden/types-partial-locals/tree/txt
1603−/* typ-464 %txt /tests/golden/types-partial-locals/types/txt
1604−/* src-465 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1605−/* tok-465 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1606−/* tre-465 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1607−/* typ-465 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1608−/* src-466 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1609−/* tok-466 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1610−/* tre-466 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1611−/* typ-466 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1612−/* src-467 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1613−/* tok-467 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1614−/* tre-467 %txt /tests/golden/types-partial-mold-composite/tree/txt
1615−/* typ-467 %txt /tests/golden/types-partial-mold-composite/types/txt
1616−/* src-468 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1617−/* tok-468 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1618−/* tre-468 %txt /tests/golden/types-partial-mold-forward/tree/txt
1619−/* typ-468 %txt /tests/golden/types-partial-mold-forward/types/txt
1620−/* src-469 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1621−/* tok-469 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1622−/* tre-469 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1623−/* typ-469 %txt /tests/golden/types-partial-mold-recursive/types/txt
1624−/* src-470 %jibb /tests/golden/types-partial-occurs/source/jibb
1625−/* tok-470 %txt /tests/golden/types-partial-occurs/tokens/txt
1626−/* tre-470 %txt /tests/golden/types-partial-occurs/tree/txt
1627−/* typ-470 %txt /tests/golden/types-partial-occurs/types/txt
1628−/* src-471 %jibb /tests/golden/types-partial-projection/source/jibb
1629−/* tok-471 %txt /tests/golden/types-partial-projection/tokens/txt
1630−/* tre-471 %txt /tests/golden/types-partial-projection/tree/txt
1631−/* typ-471 %txt /tests/golden/types-partial-projection/types/txt
1632−/* src-472 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1633−/* tok-472 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1634−/* tre-472 %txt /tests/golden/types-partial-shadow-global/tree/txt
1635−/* typ-472 %txt /tests/golden/types-partial-shadow-global/types/txt
1636−/* src-473 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1637−/* tok-473 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1638−/* tre-473 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1639−/* typ-473 %txt /tests/golden/types-partial-shared-tvar/types/txt
1640−/* src-474 %jibb /tests/golden/types-partial-union-cases/source/jibb
1641−/* tok-474 %txt /tests/golden/types-partial-union-cases/tokens/txt
1642−/* tre-474 %txt /tests/golden/types-partial-union-cases/tree/txt
1643−/* typ-474 %txt /tests/golden/types-partial-union-cases/types/txt
1644−/* src-475 %jibb /tests/golden/types-partial-union-edges/source/jibb
1645−/* tok-475 %txt /tests/golden/types-partial-union-edges/tokens/txt
1646−/* tre-475 %txt /tests/golden/types-partial-union-edges/tree/txt
1647−/* typ-475 %txt /tests/golden/types-partial-union-edges/types/txt
1648−/* src-476 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1649−/* tok-476 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1650−/* tre-476 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1651−/* typ-476 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1652−/* src-477 %jibb /tests/golden/types-prelude-direct/source/jibb
1653−/* tok-477 %txt /tests/golden/types-prelude-direct/tokens/txt
1654−/* tre-477 %txt /tests/golden/types-prelude-direct/tree/txt
1655−/* typ-477 %txt /tests/golden/types-prelude-direct/types/txt
1656−/* src-478 %jibb /tests/golden/types-prelude-interface/source/jibb
1657−/* tok-478 %txt /tests/golden/types-prelude-interface/tokens/txt
1658−/* tre-478 %txt /tests/golden/types-prelude-interface/tree/txt
1659−/* mod-478-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1660−/* mod-478-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1661−/* typ-478 %txt /tests/golden/types-prelude-interface/types/txt
1662−/* mtre-478 %txt /tests/golden/types-prelude-interface/module-trees/txt
1663−/* src-479 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1664−/* tok-479 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1665−/* tre-479 %txt /tests/golden/types-prelude-list-functions/tree/txt
1666−/* mod-479-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1667−/* typ-479 %txt /tests/golden/types-prelude-list-functions/types/txt
1668−/* mtre-479 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1669−/* src-480 %jibb /tests/golden/types-record-bound-variable/source/jibb
1670−/* tok-480 %txt /tests/golden/types-record-bound-variable/tokens/txt
1671−/* tre-480 %txt /tests/golden/types-record-bound-variable/tree/txt
1672−/* typ-480 %txt /tests/golden/types-record-bound-variable/types/txt
1673−/* src-481 %jibb /tests/golden/types-record-faces/source/jibb
1674−/* tok-481 %txt /tests/golden/types-record-faces/tokens/txt
1675−/* tre-481 %txt /tests/golden/types-record-faces/tree/txt
1676−/* typ-481 %txt /tests/golden/types-record-faces/types/txt
1677−/* src-482 %jibb /tests/golden/types-record-import/source/jibb
1678−/* tok-482 %txt /tests/golden/types-record-import/tokens/txt
1679−/* tre-482 %txt /tests/golden/types-record-import/tree/txt
1680−/* mod-482-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1681−/* typ-482 %txt /tests/golden/types-record-import/types/txt
1682−/* mtre-482 %txt /tests/golden/types-record-import/module-trees/txt
1683−/* src-483 %jibb /tests/golden/types-record-local-scheme/source/jibb
1684−/* tok-483 %txt /tests/golden/types-record-local-scheme/tokens/txt
1685−/* tre-483 %txt /tests/golden/types-record-local-scheme/tree/txt
1686−/* typ-483 %txt /tests/golden/types-record-local-scheme/types/txt
1687−/* src-484 %jibb /tests/golden/types-record-nested/source/jibb
1688−/* tok-484 %txt /tests/golden/types-record-nested/tokens/txt
1689−/* tre-484 %txt /tests/golden/types-record-nested/tree/txt
1690−/* typ-484 %txt /tests/golden/types-record-nested/types/txt
1691−/* src-485 %jibb /tests/golden/types-record-to-tuple/source/jibb
1692−/* tok-485 %txt /tests/golden/types-record-to-tuple/tokens/txt
1693−/* tre-485 %txt /tests/golden/types-record-to-tuple/tree/txt
1694−/* typ-485 %txt /tests/golden/types-record-to-tuple/types/txt
1695−/* src-486 %jibb /tests/golden/types-recursive-branch/source/jibb
1696−/* tok-486 %txt /tests/golden/types-recursive-branch/tokens/txt
1697−/* tre-486 %txt /tests/golden/types-recursive-branch/tree/txt
1698−/* typ-486 %txt /tests/golden/types-recursive-branch/types/txt
1699−/* src-487 %jibb /tests/golden/types-recursive-gate/source/jibb
1700−/* tok-487 %txt /tests/golden/types-recursive-gate/tokens/txt
1701−/* tre-487 %txt /tests/golden/types-recursive-gate/tree/txt
1702−/* typ-487 %txt /tests/golden/types-recursive-gate/types/txt
1703−/* src-488 %jibb /tests/golden/types-recursive-sample/source/jibb
1704−/* tok-488 %txt /tests/golden/types-recursive-sample/tokens/txt
1705−/* tre-488 %txt /tests/golden/types-recursive-sample/tree/txt
1706−/* typ-488 %txt /tests/golden/types-recursive-sample/types/txt
1707−/* src-489 %jibb /tests/golden/types-union-alias/source/jibb
1708−/* tok-489 %txt /tests/golden/types-union-alias/tokens/txt
1709−/* tre-489 %txt /tests/golden/types-union-alias/tree/txt
1710−/* typ-489 %txt /tests/golden/types-union-alias/types/txt
1711−/* src-490 %jibb /tests/golden/types-union-branch-context/source/jibb
1712−/* tok-490 %txt /tests/golden/types-union-branch-context/tokens/txt
1713−/* tre-490 %txt /tests/golden/types-union-branch-context/tree/txt
1714−/* typ-490 %txt /tests/golden/types-union-branch-context/types/txt
1715−/* src-491 %jibb /tests/golden/types-union-branch-pending/source/jibb
1716−/* tok-491 %txt /tests/golden/types-union-branch-pending/tokens/txt
1717−/* tre-491 %txt /tests/golden/types-union-branch-pending/tree/txt
1718−/* typ-491 %txt /tests/golden/types-union-branch-pending/types/txt
1719−/* src-492 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1720−/* tok-492 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1721−/* tre-492 %txt /tests/golden/types-union-constructor-shape/tree/txt
1722−/* typ-492 %txt /tests/golden/types-union-constructor-shape/types/txt
1723−/* src-493 %jibb /tests/golden/types-union-context-flow/source/jibb
1724−/* tok-493 %txt /tests/golden/types-union-context-flow/tokens/txt
1725−/* tre-493 %txt /tests/golden/types-union-context-flow/tree/txt
1726−/* typ-493 %txt /tests/golden/types-union-context-flow/types/txt
1727−/* src-494 %jibb /tests/golden/types-union-import/source/jibb
1728−/* tok-494 %txt /tests/golden/types-union-import/tokens/txt
1729−/* tre-494 %txt /tests/golden/types-union-import/tree/txt
1730−/* mod-494-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1731−/* typ-494 %txt /tests/golden/types-union-import/types/txt
1732−/* mtre-494 %txt /tests/golden/types-union-import/module-trees/txt
1733−/* src-495 %jibb /tests/golden/types-union-local-pending/source/jibb
1734−/* tok-495 %txt /tests/golden/types-union-local-pending/tokens/txt
1735−/* tre-495 %txt /tests/golden/types-union-local-pending/tree/txt
1736−/* typ-495 %txt /tests/golden/types-union-local-pending/types/txt
1737−/* src-496 %jibb /tests/golden/types-union-overlap/source/jibb
1738−/* tok-496 %txt /tests/golden/types-union-overlap/tokens/txt
1739−/* tre-496 %txt /tests/golden/types-union-overlap/tree/txt
1740−/* typ-496 %txt /tests/golden/types-union-overlap/types/txt
1741−/* src-497 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1742−/* tok-497 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1743−/* tre-497 %txt /tests/golden/types-union-overlap-nested/tree/txt
1744−/* typ-497 %txt /tests/golden/types-union-overlap-nested/types/txt
1745−/* src-498 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1746−/* tok-498 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1747−/* tre-498 %txt /tests/golden/types-union-phantom-generic/tree/txt
1748−/* typ-498 %txt /tests/golden/types-union-phantom-generic/types/txt
1749−/* src-499 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1750−/* tok-499 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1751−/* tre-499 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1752−/* mod-499-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1753−/* typ-499 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1754−/* mtre-499 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1755−/* src-500 %jibb /tests/golden/types-union-print-distinct/source/jibb
1756−/* tok-500 %txt /tests/golden/types-union-print-distinct/tokens/txt
1757−/* tre-500 %txt /tests/golden/types-union-print-distinct/tree/txt
1758−/* mod-500-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1759−/* mod-500-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1760−/* mod-500-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1761−/* typ-500 %txt /tests/golden/types-union-print-distinct/types/txt
1762−/* mtre-500 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1763−/* src-501 %jibb /tests/golden/types-union-print-escape/source/jibb
1764−/* tok-501 %txt /tests/golden/types-union-print-escape/tokens/txt
1765−/* tre-501 %txt /tests/golden/types-union-print-escape/tree/txt
1766−/* typ-501 %txt /tests/golden/types-union-print-escape/types/txt
1767−/* src-502 %jibb /tests/golden/types-union-print-local/source/jibb
1768−/* tok-502 %txt /tests/golden/types-union-print-local/tokens/txt
1769−/* tre-502 %txt /tests/golden/types-union-print-local/tree/txt
1770−/* typ-502 %txt /tests/golden/types-union-print-local/types/txt
1771−/* src-503 %jibb /tests/golden/types-union-print-nested/source/jibb
1772−/* tok-503 %txt /tests/golden/types-union-print-nested/tokens/txt
1773−/* tre-503 %txt /tests/golden/types-union-print-nested/tree/txt
1774−/* typ-503 %txt /tests/golden/types-union-print-nested/types/txt
1775−/* src-504 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1776−/* tok-504 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1777−/* tre-504 %txt /tests/golden/types-union-print-same-origin/tree/txt
1778−/* mod-504-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1779−/* typ-504 %txt /tests/golden/types-union-print-same-origin/types/txt
1780−/* mtre-504 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1781−/* src-505 %jibb /tests/golden/types-union-print-transitive/source/jibb
1782−/* tok-505 %txt /tests/golden/types-union-print-transitive/tokens/txt
1783−/* tre-505 %txt /tests/golden/types-union-print-transitive/tree/txt
1784−/* mod-505-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1785−/* mod-505-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1786−/* typ-505 %txt /tests/golden/types-union-print-transitive/types/txt
1787−/* mtre-505 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1788−/* src-506 %jibb /tests/golden/types-union-singleton/source/jibb
1789−/* tok-506 %txt /tests/golden/types-union-singleton/tokens/txt
1790−/* tre-506 %txt /tests/golden/types-union-singleton/tree/txt
1791−/* typ-506 %txt /tests/golden/types-union-singleton/types/txt
1792−/* src-507 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1793−/* tok-507 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1794−/* tre-507 %txt /tests/golden/types-union-tag-atoms/tree/txt
1795−/* typ-507 %txt /tests/golden/types-union-tag-atoms/types/txt
1796−/* src-508 %jibb /tests/golden/types-union-tags/source/jibb
1797−/* tok-508 %txt /tests/golden/types-union-tags/tokens/txt
1798−/* tre-508 %txt /tests/golden/types-union-tags/tree/txt
1799−/* typ-508 %txt /tests/golden/types-union-tags/types/txt
1800−/* src-509 %jibb /tests/golden/types-union-unresolved/source/jibb
1801−/* tok-509 %txt /tests/golden/types-union-unresolved/tokens/txt
1802−/* tre-509 %txt /tests/golden/types-union-unresolved/tree/txt
1803−/* typ-509 %txt /tests/golden/types-union-unresolved/types/txt
1804−/* src-510 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1805−/* tok-510 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1806−/* tre-510 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1807−/* typ-510 %txt /tests/golden/types-union-unresolved-flow/types/txt
1808−/* src-511 %jibb /tests/golden/types-unit-context/source/jibb
1809−/* tok-511 %txt /tests/golden/types-unit-context/tokens/txt
1810−/* tre-511 %txt /tests/golden/types-unit-context/tree/txt
1811−/* typ-511 %txt /tests/golden/types-unit-context/types/txt
1812−/* src-512 %jibb /tests/golden/types-unit-patterns/source/jibb
1813−/* tok-512 %txt /tests/golden/types-unit-patterns/tokens/txt
1814−/* tre-512 %txt /tests/golden/types-unit-patterns/tree/txt
1815−/* typ-512 %txt /tests/golden/types-unit-patterns/types/txt
1491+/* src-439 %jibb /tests/golden/types-local-capitals/source/jibb
1492+/* tok-439 %txt /tests/golden/types-local-capitals/tokens/txt
1493+/* tre-439 %txt /tests/golden/types-local-capitals/tree/txt
1494+/* typ-439 %txt /tests/golden/types-local-capitals/types/txt
1495+/* src-440 %jibb /tests/golden/types-local-recursive/source/jibb
1496+/* tok-440 %txt /tests/golden/types-local-recursive/tokens/txt
1497+/* tre-440 %txt /tests/golden/types-local-recursive/tree/txt
1498+/* typ-440 %txt /tests/golden/types-local-recursive/types/txt
1499+/* src-441 %jibb /tests/golden/types-module-fixtures/source/jibb
1500+/* tok-441 %txt /tests/golden/types-module-fixtures/tokens/txt
1501+/* tre-441 %txt /tests/golden/types-module-fixtures/tree/txt
1502+/* mod-441-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1503+/* mod-441-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1504+/* typ-441 %txt /tests/golden/types-module-fixtures/types/txt
1505+/* mtre-441 %txt /tests/golden/types-module-fixtures/module-trees/txt
1506+/* src-442 %jibb /tests/golden/types-module-mixed/source/jibb
1507+/* tok-442 %txt /tests/golden/types-module-mixed/tokens/txt
1508+/* tre-442 %txt /tests/golden/types-module-mixed/tree/txt
1509+/* mod-442-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1510+/* typ-442 %txt /tests/golden/types-module-mixed/types/txt
1511+/* imp-442-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1512+/* mark-442-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1513+/* mtre-442 %txt /tests/golden/types-module-mixed/module-trees/txt
1514+/* src-443 %jibb /tests/golden/types-multi-call/source/jibb
1515+/* tok-443 %txt /tests/golden/types-multi-call/tokens/txt
1516+/* tre-443 %txt /tests/golden/types-multi-call/tree/txt
1517+/* typ-443 %txt /tests/golden/types-multi-call/types/txt
1518+/* src-444 %jibb /tests/golden/types-multi-import/source/jibb
1519+/* tok-444 %txt /tests/golden/types-multi-import/tokens/txt
1520+/* tre-444 %txt /tests/golden/types-multi-import/tree/txt
1521+/* mod-444-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1522+/* typ-444 %txt /tests/golden/types-multi-import/types/txt
1523+/* mtre-444 %txt /tests/golden/types-multi-import/module-trees/txt
1524+/* src-445 %jibb /tests/golden/types-null-context/source/jibb
1525+/* tok-445 %txt /tests/golden/types-null-context/tokens/txt
1526+/* tre-445 %txt /tests/golden/types-null-context/tree/txt
1527+/* typ-445 %txt /tests/golden/types-null-context/types/txt
1528+/* src-446 %jibb /tests/golden/types-null-overlap/source/jibb
1529+/* tok-446 %txt /tests/golden/types-null-overlap/tokens/txt
1530+/* tre-446 %txt /tests/golden/types-null-overlap/tree/txt
1531+/* typ-446 %txt /tests/golden/types-null-overlap/types/txt
1532+/* src-447 %jibb /tests/golden/types-null-unresolved/source/jibb
1533+/* tok-447 %txt /tests/golden/types-null-unresolved/tokens/txt
1534+/* tre-447 %txt /tests/golden/types-null-unresolved/tree/txt
1535+/* typ-447 %txt /tests/golden/types-null-unresolved/types/txt
1536+/* src-448 %jibb /tests/golden/types-partial-apply/source/jibb
1537+/* tok-448 %txt /tests/golden/types-partial-apply/tokens/txt
1538+/* tre-448 %txt /tests/golden/types-partial-apply/tree/txt
1539+/* typ-448 %txt /tests/golden/types-partial-apply/types/txt
1540+/* src-449 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1541+/* tok-449 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1542+/* tre-449 %txt /tests/golden/types-partial-atom-alias/tree/txt
1543+/* typ-449 %txt /tests/golden/types-partial-atom-alias/types/txt
1544+/* src-450 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1545+/* tok-450 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1546+/* tre-450 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1547+/* typ-450 %txt /tests/golden/types-partial-atom-constraint/types/txt
1548+/* src-451 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1549+/* tok-451 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1550+/* tre-451 %txt /tests/golden/types-partial-atom-widening/tree/txt
1551+/* typ-451 %txt /tests/golden/types-partial-atom-widening/types/txt
1552+/* src-452 %jibb /tests/golden/types-partial-aura/source/jibb
1553+/* tok-452 %txt /tests/golden/types-partial-aura/tokens/txt
1554+/* tre-452 %txt /tests/golden/types-partial-aura/tree/txt
1555+/* typ-452 %txt /tests/golden/types-partial-aura/types/txt
1556+/* src-453 %jibb /tests/golden/types-partial-aura-family/source/jibb
1557+/* tok-453 %txt /tests/golden/types-partial-aura-family/tokens/txt
1558+/* tre-453 %txt /tests/golden/types-partial-aura-family/tree/txt
1559+/* typ-453 %txt /tests/golden/types-partial-aura-family/types/txt
1560+/* src-454 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1561+/* tok-454 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1562+/* tre-454 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1563+/* typ-454 %txt /tests/golden/types-partial-aura-generalization/types/txt
1564+/* src-455 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1565+/* tok-455 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1566+/* tre-455 %txt /tests/golden/types-partial-bare-atom/tree/txt
1567+/* typ-455 %txt /tests/golden/types-partial-bare-atom/types/txt
1568+/* src-456 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1569+/* tok-456 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1570+/* tre-456 %txt /tests/golden/types-partial-branch-widening/tree/txt
1571+/* typ-456 %txt /tests/golden/types-partial-branch-widening/types/txt
1572+/* src-457 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1573+/* tok-457 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1574+/* tre-457 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1575+/* typ-457 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1576+/* src-458 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1577+/* tok-458 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1578+/* tre-458 %txt /tests/golden/types-partial-decimal-default/tree/txt
1579+/* typ-458 %txt /tests/golden/types-partial-decimal-default/types/txt
1580+/* src-459 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1581+/* tok-459 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1582+/* tre-459 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1583+/* typ-459 %txt /tests/golden/types-partial-dependency-chain/types/txt
1584+/* src-460 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1585+/* tok-460 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1586+/* tre-460 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1587+/* typ-460 %txt /tests/golden/types-partial-explicit-capital/types/txt
1588+/* src-461 %jibb /tests/golden/types-partial-forward/source/jibb
1589+/* tok-461 %txt /tests/golden/types-partial-forward/tokens/txt
1590+/* tre-461 %txt /tests/golden/types-partial-forward/tree/txt
1591+/* typ-461 %txt /tests/golden/types-partial-forward/types/txt
1592+/* src-462 %jibb /tests/golden/types-partial-generalization/source/jibb
1593+/* tok-462 %txt /tests/golden/types-partial-generalization/tokens/txt
1594+/* tre-462 %txt /tests/golden/types-partial-generalization/tree/txt
1595+/* typ-462 %txt /tests/golden/types-partial-generalization/types/txt
1596+/* src-463 %jibb /tests/golden/types-partial-identity/source/jibb
1597+/* tok-463 %txt /tests/golden/types-partial-identity/tokens/txt
1598+/* tre-463 %txt /tests/golden/types-partial-identity/tree/txt
1599+/* typ-463 %txt /tests/golden/types-partial-identity/types/txt
1600+/* src-464 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1601+/* tok-464 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1602+/* tre-464 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1603+/* typ-464 %txt /tests/golden/types-partial-independent-atoms/types/txt
1604+/* src-465 %jibb /tests/golden/types-partial-local-molds/source/jibb
1605+/* tok-465 %txt /tests/golden/types-partial-local-molds/tokens/txt
1606+/* tre-465 %txt /tests/golden/types-partial-local-molds/tree/txt
1607+/* typ-465 %txt /tests/golden/types-partial-local-molds/types/txt
1608+/* src-466 %jibb /tests/golden/types-partial-locals/source/jibb
1609+/* tok-466 %txt /tests/golden/types-partial-locals/tokens/txt
1610+/* tre-466 %txt /tests/golden/types-partial-locals/tree/txt
1611+/* typ-466 %txt /tests/golden/types-partial-locals/types/txt
1612+/* src-467 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1613+/* tok-467 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1614+/* tre-467 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1615+/* typ-467 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1616+/* src-468 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1617+/* tok-468 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1618+/* tre-468 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1619+/* typ-468 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1620+/* src-469 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1621+/* tok-469 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1622+/* tre-469 %txt /tests/golden/types-partial-mold-composite/tree/txt
1623+/* typ-469 %txt /tests/golden/types-partial-mold-composite/types/txt
1624+/* src-470 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1625+/* tok-470 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1626+/* tre-470 %txt /tests/golden/types-partial-mold-forward/tree/txt
1627+/* typ-470 %txt /tests/golden/types-partial-mold-forward/types/txt
1628+/* src-471 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1629+/* tok-471 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1630+/* tre-471 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1631+/* typ-471 %txt /tests/golden/types-partial-mold-recursive/types/txt
1632+/* src-472 %jibb /tests/golden/types-partial-occurs/source/jibb
1633+/* tok-472 %txt /tests/golden/types-partial-occurs/tokens/txt
1634+/* tre-472 %txt /tests/golden/types-partial-occurs/tree/txt
1635+/* typ-472 %txt /tests/golden/types-partial-occurs/types/txt
1636+/* src-473 %jibb /tests/golden/types-partial-projection/source/jibb
1637+/* tok-473 %txt /tests/golden/types-partial-projection/tokens/txt
1638+/* tre-473 %txt /tests/golden/types-partial-projection/tree/txt
1639+/* typ-473 %txt /tests/golden/types-partial-projection/types/txt
1640+/* src-474 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1641+/* tok-474 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1642+/* tre-474 %txt /tests/golden/types-partial-shadow-global/tree/txt
1643+/* typ-474 %txt /tests/golden/types-partial-shadow-global/types/txt
1644+/* src-475 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1645+/* tok-475 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1646+/* tre-475 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1647+/* typ-475 %txt /tests/golden/types-partial-shared-tvar/types/txt
1648+/* src-476 %jibb /tests/golden/types-partial-union-cases/source/jibb
1649+/* tok-476 %txt /tests/golden/types-partial-union-cases/tokens/txt
1650+/* tre-476 %txt /tests/golden/types-partial-union-cases/tree/txt
1651+/* typ-476 %txt /tests/golden/types-partial-union-cases/types/txt
1652+/* src-477 %jibb /tests/golden/types-partial-union-edges/source/jibb
1653+/* tok-477 %txt /tests/golden/types-partial-union-edges/tokens/txt
1654+/* tre-477 %txt /tests/golden/types-partial-union-edges/tree/txt
1655+/* typ-477 %txt /tests/golden/types-partial-union-edges/types/txt
1656+/* src-478 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1657+/* tok-478 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1658+/* tre-478 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1659+/* typ-478 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1660+/* src-479 %jibb /tests/golden/types-prelude-direct/source/jibb
1661+/* tok-479 %txt /tests/golden/types-prelude-direct/tokens/txt
1662+/* tre-479 %txt /tests/golden/types-prelude-direct/tree/txt
1663+/* typ-479 %txt /tests/golden/types-prelude-direct/types/txt
1664+/* src-480 %jibb /tests/golden/types-prelude-interface/source/jibb
1665+/* tok-480 %txt /tests/golden/types-prelude-interface/tokens/txt
1666+/* tre-480 %txt /tests/golden/types-prelude-interface/tree/txt
1667+/* mod-480-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1668+/* mod-480-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1669+/* typ-480 %txt /tests/golden/types-prelude-interface/types/txt
1670+/* mtre-480 %txt /tests/golden/types-prelude-interface/module-trees/txt
1671+/* src-481 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1672+/* tok-481 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1673+/* tre-481 %txt /tests/golden/types-prelude-list-functions/tree/txt
1674+/* mod-481-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1675+/* typ-481 %txt /tests/golden/types-prelude-list-functions/types/txt
1676+/* mtre-481 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1677+/* src-482 %jibb /tests/golden/types-record-bound-variable/source/jibb
1678+/* tok-482 %txt /tests/golden/types-record-bound-variable/tokens/txt
1679+/* tre-482 %txt /tests/golden/types-record-bound-variable/tree/txt
1680+/* typ-482 %txt /tests/golden/types-record-bound-variable/types/txt
1681+/* src-483 %jibb /tests/golden/types-record-faces/source/jibb
1682+/* tok-483 %txt /tests/golden/types-record-faces/tokens/txt
1683+/* tre-483 %txt /tests/golden/types-record-faces/tree/txt
1684+/* typ-483 %txt /tests/golden/types-record-faces/types/txt
1685+/* src-484 %jibb /tests/golden/types-record-import/source/jibb
1686+/* tok-484 %txt /tests/golden/types-record-import/tokens/txt
1687+/* tre-484 %txt /tests/golden/types-record-import/tree/txt
1688+/* mod-484-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1689+/* typ-484 %txt /tests/golden/types-record-import/types/txt
1690+/* mtre-484 %txt /tests/golden/types-record-import/module-trees/txt
1691+/* src-485 %jibb /tests/golden/types-record-local-scheme/source/jibb
1692+/* tok-485 %txt /tests/golden/types-record-local-scheme/tokens/txt
1693+/* tre-485 %txt /tests/golden/types-record-local-scheme/tree/txt
1694+/* typ-485 %txt /tests/golden/types-record-local-scheme/types/txt
1695+/* src-486 %jibb /tests/golden/types-record-nested/source/jibb
1696+/* tok-486 %txt /tests/golden/types-record-nested/tokens/txt
1697+/* tre-486 %txt /tests/golden/types-record-nested/tree/txt
1698+/* typ-486 %txt /tests/golden/types-record-nested/types/txt
1699+/* src-487 %jibb /tests/golden/types-record-to-tuple/source/jibb
1700+/* tok-487 %txt /tests/golden/types-record-to-tuple/tokens/txt
1701+/* tre-487 %txt /tests/golden/types-record-to-tuple/tree/txt
1702+/* typ-487 %txt /tests/golden/types-record-to-tuple/types/txt
1703+/* src-488 %jibb /tests/golden/types-recursive-branch/source/jibb
1704+/* tok-488 %txt /tests/golden/types-recursive-branch/tokens/txt
1705+/* tre-488 %txt /tests/golden/types-recursive-branch/tree/txt
1706+/* typ-488 %txt /tests/golden/types-recursive-branch/types/txt
1707+/* src-489 %jibb /tests/golden/types-recursive-gate/source/jibb
1708+/* tok-489 %txt /tests/golden/types-recursive-gate/tokens/txt
1709+/* tre-489 %txt /tests/golden/types-recursive-gate/tree/txt
1710+/* typ-489 %txt /tests/golden/types-recursive-gate/types/txt
1711+/* src-490 %jibb /tests/golden/types-recursive-sample/source/jibb
1712+/* tok-490 %txt /tests/golden/types-recursive-sample/tokens/txt
1713+/* tre-490 %txt /tests/golden/types-recursive-sample/tree/txt
1714+/* typ-490 %txt /tests/golden/types-recursive-sample/types/txt
1715+/* src-491 %jibb /tests/golden/types-union-alias/source/jibb
1716+/* tok-491 %txt /tests/golden/types-union-alias/tokens/txt
1717+/* tre-491 %txt /tests/golden/types-union-alias/tree/txt
1718+/* typ-491 %txt /tests/golden/types-union-alias/types/txt
1719+/* src-492 %jibb /tests/golden/types-union-branch-context/source/jibb
1720+/* tok-492 %txt /tests/golden/types-union-branch-context/tokens/txt
1721+/* tre-492 %txt /tests/golden/types-union-branch-context/tree/txt
1722+/* typ-492 %txt /tests/golden/types-union-branch-context/types/txt
1723+/* src-493 %jibb /tests/golden/types-union-branch-pending/source/jibb
1724+/* tok-493 %txt /tests/golden/types-union-branch-pending/tokens/txt
1725+/* tre-493 %txt /tests/golden/types-union-branch-pending/tree/txt
1726+/* typ-493 %txt /tests/golden/types-union-branch-pending/types/txt
1727+/* src-494 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1728+/* tok-494 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1729+/* tre-494 %txt /tests/golden/types-union-constructor-shape/tree/txt
1730+/* typ-494 %txt /tests/golden/types-union-constructor-shape/types/txt
1731+/* src-495 %jibb /tests/golden/types-union-context-flow/source/jibb
1732+/* tok-495 %txt /tests/golden/types-union-context-flow/tokens/txt
1733+/* tre-495 %txt /tests/golden/types-union-context-flow/tree/txt
1734+/* typ-495 %txt /tests/golden/types-union-context-flow/types/txt
1735+/* src-496 %jibb /tests/golden/types-union-import/source/jibb
1736+/* tok-496 %txt /tests/golden/types-union-import/tokens/txt
1737+/* tre-496 %txt /tests/golden/types-union-import/tree/txt
1738+/* mod-496-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1739+/* typ-496 %txt /tests/golden/types-union-import/types/txt
1740+/* mtre-496 %txt /tests/golden/types-union-import/module-trees/txt
1741+/* src-497 %jibb /tests/golden/types-union-local-pending/source/jibb
1742+/* tok-497 %txt /tests/golden/types-union-local-pending/tokens/txt
1743+/* tre-497 %txt /tests/golden/types-union-local-pending/tree/txt
1744+/* typ-497 %txt /tests/golden/types-union-local-pending/types/txt
1745+/* src-498 %jibb /tests/golden/types-union-overlap/source/jibb
1746+/* tok-498 %txt /tests/golden/types-union-overlap/tokens/txt
1747+/* tre-498 %txt /tests/golden/types-union-overlap/tree/txt
1748+/* typ-498 %txt /tests/golden/types-union-overlap/types/txt
1749+/* src-499 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1750+/* tok-499 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1751+/* tre-499 %txt /tests/golden/types-union-overlap-nested/tree/txt
1752+/* typ-499 %txt /tests/golden/types-union-overlap-nested/types/txt
1753+/* src-500 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1754+/* tok-500 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1755+/* tre-500 %txt /tests/golden/types-union-phantom-generic/tree/txt
1756+/* typ-500 %txt /tests/golden/types-union-phantom-generic/types/txt
1757+/* src-501 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1758+/* tok-501 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1759+/* tre-501 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1760+/* mod-501-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1761+/* typ-501 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1762+/* mtre-501 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1763+/* src-502 %jibb /tests/golden/types-union-print-distinct/source/jibb
1764+/* tok-502 %txt /tests/golden/types-union-print-distinct/tokens/txt
1765+/* tre-502 %txt /tests/golden/types-union-print-distinct/tree/txt
1766+/* mod-502-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1767+/* mod-502-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1768+/* mod-502-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1769+/* typ-502 %txt /tests/golden/types-union-print-distinct/types/txt
1770+/* mtre-502 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1771+/* src-503 %jibb /tests/golden/types-union-print-escape/source/jibb
1772+/* tok-503 %txt /tests/golden/types-union-print-escape/tokens/txt
1773+/* tre-503 %txt /tests/golden/types-union-print-escape/tree/txt
1774+/* typ-503 %txt /tests/golden/types-union-print-escape/types/txt
1775+/* src-504 %jibb /tests/golden/types-union-print-local/source/jibb
1776+/* tok-504 %txt /tests/golden/types-union-print-local/tokens/txt
1777+/* tre-504 %txt /tests/golden/types-union-print-local/tree/txt
1778+/* typ-504 %txt /tests/golden/types-union-print-local/types/txt
1779+/* src-505 %jibb /tests/golden/types-union-print-nested/source/jibb
1780+/* tok-505 %txt /tests/golden/types-union-print-nested/tokens/txt
1781+/* tre-505 %txt /tests/golden/types-union-print-nested/tree/txt
1782+/* typ-505 %txt /tests/golden/types-union-print-nested/types/txt
1783+/* src-506 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1784+/* tok-506 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1785+/* tre-506 %txt /tests/golden/types-union-print-same-origin/tree/txt
1786+/* mod-506-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1787+/* typ-506 %txt /tests/golden/types-union-print-same-origin/types/txt
1788+/* mtre-506 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1789+/* src-507 %jibb /tests/golden/types-union-print-transitive/source/jibb
1790+/* tok-507 %txt /tests/golden/types-union-print-transitive/tokens/txt
1791+/* tre-507 %txt /tests/golden/types-union-print-transitive/tree/txt
1792+/* mod-507-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1793+/* mod-507-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1794+/* typ-507 %txt /tests/golden/types-union-print-transitive/types/txt
1795+/* mtre-507 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1796+/* src-508 %jibb /tests/golden/types-union-singleton/source/jibb
1797+/* tok-508 %txt /tests/golden/types-union-singleton/tokens/txt
1798+/* tre-508 %txt /tests/golden/types-union-singleton/tree/txt
1799+/* typ-508 %txt /tests/golden/types-union-singleton/types/txt
1800+/* src-509 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1801+/* tok-509 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1802+/* tre-509 %txt /tests/golden/types-union-tag-atoms/tree/txt
1803+/* typ-509 %txt /tests/golden/types-union-tag-atoms/types/txt
1804+/* src-510 %jibb /tests/golden/types-union-tags/source/jibb
1805+/* tok-510 %txt /tests/golden/types-union-tags/tokens/txt
1806+/* tre-510 %txt /tests/golden/types-union-tags/tree/txt
1807+/* typ-510 %txt /tests/golden/types-union-tags/types/txt
1808+/* src-511 %jibb /tests/golden/types-union-unresolved/source/jibb
1809+/* tok-511 %txt /tests/golden/types-union-unresolved/tokens/txt
1810+/* tre-511 %txt /tests/golden/types-union-unresolved/tree/txt
1811+/* typ-511 %txt /tests/golden/types-union-unresolved/types/txt
1812+/* src-512 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1813+/* tok-512 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1814+/* tre-512 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1815+/* typ-512 %txt /tests/golden/types-union-unresolved-flow/types/txt
1816+/* src-513 %jibb /tests/golden/types-unit-context/source/jibb
1817+/* tok-513 %txt /tests/golden/types-unit-context/tokens/txt
1818+/* tre-513 %txt /tests/golden/types-unit-context/tree/txt
1819+/* typ-513 %txt /tests/golden/types-unit-context/types/txt
1820+/* src-514 %jibb /tests/golden/types-unit-patterns/source/jibb
1821+/* tok-514 %txt /tests/golden/types-unit-patterns/tokens/txt
1822+/* tre-514 %txt /tests/golden/types-unit-patterns/tree/txt
1823+/* typ-514 %txt /tests/golden/types-unit-patterns/types/txt
18161824=/ prepared-prelude (prepare-prelude:jibb prelude-source)
18171825|%
18181826:: one arm per case
@@ -2693,154 +2701,158 @@
26932701 (weld (check ~.types-list-pattern-imported src-437 `tok-437 `tre-437) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-437 `typ-437 ~[[%fixture %texts imp-437-1] [%fixture %text-set imp-437-2]] ~ ~))
26942702++ test-types-list-patterns
26952703 (weld (check ~.types-list-patterns src-438 `tok-438 `tre-438) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-438 `typ-438 ~ ~ ~))
2704+++ test-types-local-capitals
2705+ (weld (check ~.types-local-capitals src-439 `tok-439 `tre-439) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-439 `typ-439 ~ ~ ~))
2706+++ test-types-local-recursive
2707+ (weld (check ~.types-local-recursive src-440 `tok-440 `tre-440) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-440 `typ-440 ~ ~ ~))
26962708++ test-types-module-fixtures
2697− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-439 `tok-439 `tre-439) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-439 `typ-439 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-439-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-439-2]])) (check-module-trees ~.types-module-fixtures `mtre-439 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-439-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-439-2]]))
2709+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-441 `tok-441 `tre-441) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-441 `typ-441 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-441-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-441-2]])) (check-module-trees ~.types-module-fixtures `mtre-441 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-441-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-441-2]]))
26982710++ test-types-module-mixed
2699− (weld (weld (check ~.types-module-mixed src-440 `tok-440 `tre-440) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-440 `typ-440 ~[[%fixture %title imp-440-1]] ~[[%label mark-440-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-440-1]])) (check-module-trees ~.types-module-mixed `mtre-440 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-440-1]]))
2711+ (weld (weld (check ~.types-module-mixed src-442 `tok-442 `tre-442) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-442 `typ-442 ~[[%fixture %title imp-442-1]] ~[[%label mark-442-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-442-1]])) (check-module-trees ~.types-module-mixed `mtre-442 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-442-1]]))
27002712++ test-types-multi-call
2701− (weld (check ~.types-multi-call src-441 `tok-441 `tre-441) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-441 `typ-441 ~ ~ ~))
2713+ (weld (check ~.types-multi-call src-443 `tok-443 `tre-443) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-443 `typ-443 ~ ~ ~))
27022714++ test-types-multi-import
2703− (weld (weld (check ~.types-multi-import src-442 `tok-442 `tre-442) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-442 `typ-442 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-442-1]])) (check-module-trees ~.types-multi-import `mtre-442 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-442-1]]))
2715+ (weld (weld (check ~.types-multi-import src-444 `tok-444 `tre-444) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-444 `typ-444 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-444-1]])) (check-module-trees ~.types-multi-import `mtre-444 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-444-1]]))
27042716++ test-types-null-context
2705− (weld (check ~.types-null-context src-443 `tok-443 `tre-443) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-443 `typ-443))
2717+ (weld (check ~.types-null-context src-445 `tok-445 `tre-445) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-445 `typ-445))
27062718++ test-types-null-overlap
2707− (weld (check ~.types-null-overlap src-444 `tok-444 `tre-444) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-444 `typ-444))
2719+ (weld (check ~.types-null-overlap src-446 `tok-446 `tre-446) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-446 `typ-446))
27082720++ test-types-null-unresolved
2709− (weld (check ~.types-null-unresolved src-445 `tok-445 `tre-445) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-445 `typ-445))
2721+ (weld (check ~.types-null-unresolved src-447 `tok-447 `tre-447) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-447 `typ-447))
27102722++ test-types-partial-apply
2711− (weld (check ~.types-partial-apply src-446 `tok-446 `tre-446) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-446 `typ-446))
2723+ (weld (check ~.types-partial-apply src-448 `tok-448 `tre-448) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-448 `typ-448))
27122724++ test-types-partial-atom-alias
2713− (weld (check ~.types-partial-atom-alias src-447 `tok-447 `tre-447) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-447 `typ-447))
2725+ (weld (check ~.types-partial-atom-alias src-449 `tok-449 `tre-449) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-449 `typ-449))
27142726++ test-types-partial-atom-constraint
2715− (weld (check ~.types-partial-atom-constraint src-448 `tok-448 `tre-448) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-448 `typ-448))
2727+ (weld (check ~.types-partial-atom-constraint src-450 `tok-450 `tre-450) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-450 `typ-450))
27162728++ test-types-partial-atom-widening
2717− (weld (check ~.types-partial-atom-widening src-449 `tok-449 `tre-449) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-449 `typ-449))
2729+ (weld (check ~.types-partial-atom-widening src-451 `tok-451 `tre-451) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-451 `typ-451))
27182730++ test-types-partial-aura
2719− (weld (check ~.types-partial-aura src-450 `tok-450 `tre-450) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-450 `typ-450))
2731+ (weld (check ~.types-partial-aura src-452 `tok-452 `tre-452) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-452 `typ-452))
27202732++ test-types-partial-aura-family
2721− (weld (check ~.types-partial-aura-family src-451 `tok-451 `tre-451) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-451 `typ-451))
2733+ (weld (check ~.types-partial-aura-family src-453 `tok-453 `tre-453) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-453 `typ-453))
27222734++ test-types-partial-aura-generalization
2723− (weld (check ~.types-partial-aura-generalization src-452 `tok-452 `tre-452) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-452 `typ-452))
2735+ (weld (check ~.types-partial-aura-generalization src-454 `tok-454 `tre-454) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-454 `typ-454))
27242736++ test-types-partial-bare-atom
2725− (weld (check ~.types-partial-bare-atom src-453 `tok-453 `tre-453) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-453 `typ-453))
2737+ (weld (check ~.types-partial-bare-atom src-455 `tok-455 `tre-455) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-455 `typ-455))
27262738++ test-types-partial-branch-widening
2727− (weld (check ~.types-partial-branch-widening src-454 `tok-454 `tre-454) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-454 `typ-454))
2739+ (weld (check ~.types-partial-branch-widening src-456 `tok-456 `tre-456) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-456 `typ-456))
27282740++ test-types-partial-conflicting-sites
2729− (weld (check ~.types-partial-conflicting-sites src-455 `tok-455 `tre-455) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-455 `typ-455))
2741+ (weld (check ~.types-partial-conflicting-sites src-457 `tok-457 `tre-457) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-457 `typ-457))
27302742++ test-types-partial-decimal-default
2731− (weld (check ~.types-partial-decimal-default src-456 `tok-456 `tre-456) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-456 `typ-456))
2743+ (weld (check ~.types-partial-decimal-default src-458 `tok-458 `tre-458) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-458 `typ-458))
27322744++ test-types-partial-dependency-chain
2733− (weld (check ~.types-partial-dependency-chain src-457 `tok-457 `tre-457) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-457 `typ-457))
2745+ (weld (check ~.types-partial-dependency-chain src-459 `tok-459 `tre-459) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-459 `typ-459))
27342746++ test-types-partial-explicit-capital
2735− (weld (check ~.types-partial-explicit-capital src-458 `tok-458 `tre-458) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-458 `typ-458))
2747+ (weld (check ~.types-partial-explicit-capital src-460 `tok-460 `tre-460) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-460 `typ-460))
27362748++ test-types-partial-forward
2737− (weld (check ~.types-partial-forward src-459 `tok-459 `tre-459) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-459 `typ-459))
2749+ (weld (check ~.types-partial-forward src-461 `tok-461 `tre-461) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-461 `typ-461))
27382750++ test-types-partial-generalization
2739− (weld (check ~.types-partial-generalization src-460 `tok-460 `tre-460) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-460 `typ-460))
2751+ (weld (check ~.types-partial-generalization src-462 `tok-462 `tre-462) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-462 `typ-462))
27402752++ test-types-partial-identity
2741− (weld (check ~.types-partial-identity src-461 `tok-461 `tre-461) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-461 `typ-461))
2753+ (weld (check ~.types-partial-identity src-463 `tok-463 `tre-463) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-463 `typ-463))
27422754++ test-types-partial-independent-atoms
2743− (weld (check ~.types-partial-independent-atoms src-462 `tok-462 `tre-462) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-462 `typ-462))
2755+ (weld (check ~.types-partial-independent-atoms src-464 `tok-464 `tre-464) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-464 `typ-464))
27442756++ test-types-partial-local-molds
2745− (weld (check ~.types-partial-local-molds src-463 `tok-463 `tre-463) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-463 `typ-463))
2757+ (weld (check ~.types-partial-local-molds src-465 `tok-465 `tre-465) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-465 `typ-465))
27462758++ test-types-partial-locals
2747− (weld (check ~.types-partial-locals src-464 `tok-464 `tre-464) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-464 `typ-464))
2759+ (weld (check ~.types-partial-locals src-466 `tok-466 `tre-466) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-466 `typ-466))
27482760++ test-types-partial-many-atom-constraints
2749− (weld (check ~.types-partial-many-atom-constraints src-465 `tok-465 `tre-465) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-465 `typ-465))
2761+ (weld (check ~.types-partial-many-atom-constraints src-467 `tok-467 `tre-467) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-467 `typ-467))
27502762++ test-types-partial-mold-bare-aura
2751− (weld (check ~.types-partial-mold-bare-aura src-466 `tok-466 `tre-466) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-466 `typ-466))
2763+ (weld (check ~.types-partial-mold-bare-aura src-468 `tok-468 `tre-468) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-468 `typ-468))
27522764++ test-types-partial-mold-composite
2753− (weld (check ~.types-partial-mold-composite src-467 `tok-467 `tre-467) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-467 `typ-467))
2765+ (weld (check ~.types-partial-mold-composite src-469 `tok-469 `tre-469) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-469 `typ-469))
27542766++ test-types-partial-mold-forward
2755− (weld (check ~.types-partial-mold-forward src-468 `tok-468 `tre-468) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-468 `typ-468))
2767+ (weld (check ~.types-partial-mold-forward src-470 `tok-470 `tre-470) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-470 `typ-470))
27562768++ test-types-partial-mold-recursive
2757− (weld (check ~.types-partial-mold-recursive src-469 `tok-469 `tre-469) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-469 `typ-469))
2769+ (weld (check ~.types-partial-mold-recursive src-471 `tok-471 `tre-471) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-471 `typ-471))
27582770++ test-types-partial-occurs
2759− (weld (check ~.types-partial-occurs src-470 `tok-470 `tre-470) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-470 `typ-470))
2771+ (weld (check ~.types-partial-occurs src-472 `tok-472 `tre-472) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-472 `typ-472))
27602772++ test-types-partial-projection
2761− (weld (check ~.types-partial-projection src-471 `tok-471 `tre-471) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-471 `typ-471))
2773+ (weld (check ~.types-partial-projection src-473 `tok-473 `tre-473) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-473 `typ-473))
27622774++ test-types-partial-shadow-global
2763− (weld (check ~.types-partial-shadow-global src-472 `tok-472 `tre-472) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-472 `typ-472))
2775+ (weld (check ~.types-partial-shadow-global src-474 `tok-474 `tre-474) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-474 `typ-474))
27642776++ test-types-partial-shared-tvar
2765− (weld (check ~.types-partial-shared-tvar src-473 `tok-473 `tre-473) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-473 `typ-473))
2777+ (weld (check ~.types-partial-shared-tvar src-475 `tok-475 `tre-475) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-475 `typ-475))
27662778++ test-types-partial-union-cases
2767− (weld (check ~.types-partial-union-cases src-474 `tok-474 `tre-474) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-474 `typ-474))
2779+ (weld (check ~.types-partial-union-cases src-476 `tok-476 `tre-476) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-476 `typ-476))
27682780++ test-types-partial-union-edges
2769− (weld (check ~.types-partial-union-edges src-475 `tok-475 `tre-475) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-475 `typ-475))
2781+ (weld (check ~.types-partial-union-edges src-477 `tok-477 `tre-477) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-477 `typ-477))
27702782++ test-types-partial-unresolved-tag
2771− (weld (check ~.types-partial-unresolved-tag src-476 `tok-476 `tre-476) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-476 `typ-476))
2783+ (weld (check ~.types-partial-unresolved-tag src-478 `tok-478 `tre-478) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-478 `typ-478))
27722784++ test-types-prelude-direct
2773− (weld (check ~.types-prelude-direct src-477 `tok-477 `tre-477) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-477 `typ-477 ~ ~ ~))
2785+ (weld (check ~.types-prelude-direct src-479 `tok-479 `tre-479) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-479 `typ-479 ~ ~ ~))
27742786++ test-types-prelude-interface
2775− (weld (weld (check ~.types-prelude-interface src-478 `tok-478 `tre-478) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-478 `typ-478 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-478-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-478-2]])) (check-module-trees ~.types-prelude-interface `mtre-478 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-478-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-478-2]]))
2787+ (weld (weld (check ~.types-prelude-interface src-480 `tok-480 `tre-480) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-480 `typ-480 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-480-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-480-2]])) (check-module-trees ~.types-prelude-interface `mtre-480 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-480-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-480-2]]))
27762788++ test-types-prelude-list-functions
2777− (weld (weld (check ~.types-prelude-list-functions src-479 `tok-479 `tre-479) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-479 `typ-479 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-479-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-479 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-479-1]]))
2789+ (weld (weld (check ~.types-prelude-list-functions src-481 `tok-481 `tre-481) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-481 `typ-481 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-481-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-481 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-481-1]]))
27782790++ test-types-record-bound-variable
2779− (weld (check ~.types-record-bound-variable src-480 `tok-480 `tre-480) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-480 `typ-480))
2791+ (weld (check ~.types-record-bound-variable src-482 `tok-482 `tre-482) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-482 `typ-482))
27802792++ test-types-record-faces
2781− (weld (check ~.types-record-faces src-481 `tok-481 `tre-481) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-481 `typ-481))
2793+ (weld (check ~.types-record-faces src-483 `tok-483 `tre-483) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-483 `typ-483))
27822794++ test-types-record-import
2783− (weld (weld (check ~.types-record-import src-482 `tok-482 `tre-482) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-482 `typ-482 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-482-1]])) (check-module-trees ~.types-record-import `mtre-482 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-482-1]]))
2795+ (weld (weld (check ~.types-record-import src-484 `tok-484 `tre-484) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-484 `typ-484 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-484-1]])) (check-module-trees ~.types-record-import `mtre-484 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-484-1]]))
27842796++ test-types-record-local-scheme
2785− (weld (check ~.types-record-local-scheme src-483 `tok-483 `tre-483) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-483 `typ-483))
2797+ (weld (check ~.types-record-local-scheme src-485 `tok-485 `tre-485) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-485 `typ-485))
27862798++ test-types-record-nested
2787− (weld (check ~.types-record-nested src-484 `tok-484 `tre-484) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-484 `typ-484))
2799+ (weld (check ~.types-record-nested src-486 `tok-486 `tre-486) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-486 `typ-486))
27882800++ test-types-record-to-tuple
2789− (weld (check ~.types-record-to-tuple src-485 `tok-485 `tre-485) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-485 `typ-485))
2801+ (weld (check ~.types-record-to-tuple src-487 `tok-487 `tre-487) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-487 `typ-487))
27902802++ test-types-recursive-branch
2791− (weld (check ~.types-recursive-branch src-486 `tok-486 `tre-486) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-486 `typ-486 ~ ~ ~))
2803+ (weld (check ~.types-recursive-branch src-488 `tok-488 `tre-488) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-488 `typ-488 ~ ~ ~))
27922804++ test-types-recursive-gate
2793− (weld (check ~.types-recursive-gate src-487 `tok-487 `tre-487) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-487 `typ-487))
2805+ (weld (check ~.types-recursive-gate src-489 `tok-489 `tre-489) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-489 `typ-489))
27942806++ test-types-recursive-sample
2795− (weld (check ~.types-recursive-sample src-488 `tok-488 `tre-488) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-488 `typ-488))
2807+ (weld (check ~.types-recursive-sample src-490 `tok-490 `tre-490) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-490 `typ-490))
27962808++ test-types-union-alias
2797− (weld (check ~.types-union-alias src-489 `tok-489 `tre-489) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-489 `typ-489))
2809+ (weld (check ~.types-union-alias src-491 `tok-491 `tre-491) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-491 `typ-491))
27982810++ test-types-union-branch-context
2799− (weld (check ~.types-union-branch-context src-490 `tok-490 `tre-490) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-490 `typ-490))
2811+ (weld (check ~.types-union-branch-context src-492 `tok-492 `tre-492) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-492 `typ-492))
28002812++ test-types-union-branch-pending
2801− (weld (check ~.types-union-branch-pending src-491 `tok-491 `tre-491) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-491 `typ-491))
2813+ (weld (check ~.types-union-branch-pending src-493 `tok-493 `tre-493) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-493 `typ-493))
28022814++ test-types-union-constructor-shape
2803− (weld (check ~.types-union-constructor-shape src-492 `tok-492 `tre-492) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-492 `typ-492))
2815+ (weld (check ~.types-union-constructor-shape src-494 `tok-494 `tre-494) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-494 `typ-494))
28042816++ test-types-union-context-flow
2805− (weld (check ~.types-union-context-flow src-493 `tok-493 `tre-493) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-493 `typ-493))
2817+ (weld (check ~.types-union-context-flow src-495 `tok-495 `tre-495) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-495 `typ-495))
28062818++ test-types-union-import
2807− (weld (weld (check ~.types-union-import src-494 `tok-494 `tre-494) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-494 `typ-494 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-494-1]])) (check-module-trees ~.types-union-import `mtre-494 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-494-1]]))
2819+ (weld (weld (check ~.types-union-import src-496 `tok-496 `tre-496) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-496 `typ-496 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-496-1]])) (check-module-trees ~.types-union-import `mtre-496 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-496-1]]))
28082820++ test-types-union-local-pending
2809− (weld (check ~.types-union-local-pending src-495 `tok-495 `tre-495) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-495 `typ-495))
2821+ (weld (check ~.types-union-local-pending src-497 `tok-497 `tre-497) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-497 `typ-497))
28102822++ test-types-union-overlap
2811− (weld (check ~.types-union-overlap src-496 `tok-496 `tre-496) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-496 `typ-496))
2823+ (weld (check ~.types-union-overlap src-498 `tok-498 `tre-498) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-498 `typ-498))
28122824++ test-types-union-overlap-nested
2813− (weld (check ~.types-union-overlap-nested src-497 `tok-497 `tre-497) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-497 `typ-497))
2825+ (weld (check ~.types-union-overlap-nested src-499 `tok-499 `tre-499) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-499 `typ-499))
28142826++ test-types-union-phantom-generic
2815− (weld (check ~.types-union-phantom-generic src-498 `tok-498 `tre-498) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-498 `typ-498))
2827+ (weld (check ~.types-union-phantom-generic src-500 `tok-500 `tre-500) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-500 `typ-500))
28162828++ test-types-union-print-cross-namespace
2817− (weld (weld (check ~.types-union-print-cross-namespace src-499 `tok-499 `tre-499) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-499 `typ-499 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-499-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-499 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-499-1]]))
2829+ (weld (weld (check ~.types-union-print-cross-namespace src-501 `tok-501 `tre-501) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-501 `typ-501 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-501-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-501 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-501-1]]))
28182830++ test-types-union-print-distinct
2819− (weld (weld (check ~.types-union-print-distinct src-500 `tok-500 `tre-500) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-500 `typ-500 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-500-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-500-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-500-3]])) (check-module-trees ~.types-union-print-distinct `mtre-500 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-500-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-500-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-500-3]]))
2831+ (weld (weld (check ~.types-union-print-distinct src-502 `tok-502 `tre-502) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-502 `typ-502 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-502-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-502-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-502-3]])) (check-module-trees ~.types-union-print-distinct `mtre-502 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-502-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-502-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-502-3]]))
28202832++ test-types-union-print-escape
2821− (weld (check ~.types-union-print-escape src-501 `tok-501 `tre-501) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-501 `typ-501))
2833+ (weld (check ~.types-union-print-escape src-503 `tok-503 `tre-503) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-503 `typ-503))
28222834++ test-types-union-print-local
2823− (weld (check ~.types-union-print-local src-502 `tok-502 `tre-502) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-502 `typ-502))
2835+ (weld (check ~.types-union-print-local src-504 `tok-504 `tre-504) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-504 `typ-504))
28242836++ test-types-union-print-nested
2825− (weld (check ~.types-union-print-nested src-503 `tok-503 `tre-503) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-503 `typ-503))
2837+ (weld (check ~.types-union-print-nested src-505 `tok-505 `tre-505) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-505 `typ-505))
28262838++ test-types-union-print-same-origin
2827− (weld (weld (check ~.types-union-print-same-origin src-504 `tok-504 `tre-504) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-504 `typ-504 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-504-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-504 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-504-1]]))
2839+ (weld (weld (check ~.types-union-print-same-origin src-506 `tok-506 `tre-506) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-506 `typ-506 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-506-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-506 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-506-1]]))
28282840++ test-types-union-print-transitive
2829− (weld (weld (check ~.types-union-print-transitive src-505 `tok-505 `tre-505) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-505 `typ-505 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-505-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-505-2]])) (check-module-trees ~.types-union-print-transitive `mtre-505 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-505-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-505-2]]))
2841+ (weld (weld (check ~.types-union-print-transitive src-507 `tok-507 `tre-507) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-507 `typ-507 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-507-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-507-2]])) (check-module-trees ~.types-union-print-transitive `mtre-507 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-507-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-507-2]]))
28302842++ test-types-union-singleton
2831− (weld (check ~.types-union-singleton src-506 `tok-506 `tre-506) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-506 `typ-506))
2843+ (weld (check ~.types-union-singleton src-508 `tok-508 `tre-508) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-508 `typ-508))
28322844++ test-types-union-tag-atoms
2833− (weld (check ~.types-union-tag-atoms src-507 `tok-507 `tre-507) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-507 `typ-507))
2845+ (weld (check ~.types-union-tag-atoms src-509 `tok-509 `tre-509) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-509 `typ-509))
28342846++ test-types-union-tags
2835− (weld (check ~.types-union-tags src-508 `tok-508 `tre-508) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-508 `typ-508))
2847+ (weld (check ~.types-union-tags src-510 `tok-510 `tre-510) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-510 `typ-510))
28362848++ test-types-union-unresolved
2837− (weld (check ~.types-union-unresolved src-509 `tok-509 `tre-509) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-509 `typ-509))
2849+ (weld (check ~.types-union-unresolved src-511 `tok-511 `tre-511) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-511 `typ-511))
28382850++ test-types-union-unresolved-flow
2839− (weld (check ~.types-union-unresolved-flow src-510 `tok-510 `tre-510) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-510 `typ-510))
2851+ (weld (check ~.types-union-unresolved-flow src-512 `tok-512 `tre-512) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-512 `typ-512))
28402852++ test-types-unit-context
2841− (weld (check ~.types-unit-context src-511 `tok-511 `tre-511) (check-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-511 `typ-511))
2853+ (weld (check ~.types-unit-context src-513 `tok-513 `tre-513) (check-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-513 `typ-513))
28422854++ test-types-unit-patterns
2843− (weld (check ~.types-unit-patterns src-512 `tok-512 `tre-512) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-512 `typ-512))
2855+ (weld (check ~.types-unit-patterns src-514 `tok-514 `tre-514) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-514 `typ-514))
28442856::
28452857:: +check: run golden:jibb on a case and compare both outputs
28462858::
tests/type-import/expected.txt+1−1
@@ -85,6 +85,6 @@ partial inference; module not checked
8585 ^
8686++ chain-pattern: recursive pattern is not supported by partial inference
8787++ chain-branch: recursive branch matching is not supported by partial inference
88−reader-collapsed: error: a Hoon union has overlapping cases
88+reader-collapsed: error: Hoon union disjointness could not be verified
8989partial inference; module not checked
9090++ use: recursive mold name is not available in this scope
tools/importer-test+1−1
@@ -34,4 +34,4 @@ if result.stdout != expected:
3434 result.stdout.decode().splitlines(keepends=True),
3535 fromfile='expected tree.txt', tofile='actual types'))
3636 sys.exit(1)
37−print('importer golden: 141 projections passed')
37+print('importer golden: 149 projections passed')