on master help sign in
Bridge imported unions into inference
commite95ef8fa64e3c55776cd3b28a9d7247aebddd561 authoriko <mail@iko.soy> dateFri 30 Oct 2026, 20:30 (1 day ago) parent250564c
41 files changed+1119−471
docs/compiler.md+3−3 docs/status.md+7−6 jibb-dev/lib/jibb.hoon+56−8 tests/clay-fixtures/ford-nested-union-bridge-expected.txt+1 tests/clay-fixtures/ford-nested-union-bridge.txt+11 tests/golden/module-cache-incomplete/about.txt+1−1 tests/golden/module-cache-incomplete/module-trees.txt+6−12 tests/golden/module-cache-incomplete/modules/ui/bad.jibb+1−4 tests/golden/types-generic-union-alias-face/about.txt+4 tests/golden/types-generic-union-alias-face/module-trees.txt+11 tests/golden/types-generic-union-alias-face/modules.txt+1 tests/golden/types-generic-union-alias-face/modules/ui/base.jibb+3 tests/golden/types-generic-union-alias-face/source.jibb+6 tests/golden/types-generic-union-alias-face/tokens.txt+75 tests/golden/types-generic-union-alias-face/tree.txt+24 tests/golden/types-generic-union-alias-face/types.txt+12 tests/golden/types-generic-union-alias/about.txt+4 tests/golden/types-generic-union-alias/source.jibb+23 tests/golden/types-generic-union-alias/tokens.txt+248 tests/golden/types-generic-union-alias/tree.txt+86 tests/golden/types-generic-union-alias/types.txt+16 tests/golden/types-generic-union-local/types.txt+2−2 tests/golden/types-generic-union-transitive/about.txt+1−1 tests/golden/types-generic-union-transitive/module-trees.txt+4−6 tests/golden/types-generic-union-transitive/modules/ui/mid.jibb+1−1 tests/golden/types-generic-union-transitive/source.jibb+1−1 tests/golden/types-generic-union-transitive/tokens.txt+1−4 tests/golden/types-generic-union-transitive/tree.txt+1−3 tests/golden/types-generic-union-transitive/types.txt+3−1 tests/golden/types-import-mark-record/about.txt+2−2 tests/golden/types-import-mark-record/source.jibb+1−1 tests/golden/types-import-mark-record/tokens.txt+1−1 tests/golden/types-import-mark-record/tree.txt+1−1 tests/golden/types-import-mark-record/types.txt+1−1 tests/lib/jibb-bridge.hoon+12−2 tests/lib/jibb.hoon+415−401 tests/type-import/about.txt+13−7 tests/type-import/expected.txt+29−2 tests/type-import/source.txt+14 tests/type-import/sur.txt+4 tools/clay-fixtures+13
docs/compiler.md+3−3
@@ -56,13 +56,13 @@ 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, closed local mold aliases and acyclic forward value references. It instantiates generalized top-level definitions when they are used. 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; unresolved tags remain pending. 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. Generic union aliases and body-local generic union molds remain unsupported, as do recursive local groups and recursive molds. 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, while 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 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, closed local mold aliases and acyclic forward value references. It instantiates generalized top-level definitions when they are used. 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; unresolved tags remain pending. 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 variable-dependent record-face constraint in a generic union payload fails closed. 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, while 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 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
61−For 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 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 does not yet translate union forks into inference, so this printing support does not complete unnamed Hoon union imports.
61+For 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
6363A known closed union can also provide context to each arm of a complete loobean branch in a cast or a call with a known union sample. Nested branches and transparent groups work; a mismatch reports the expected union and the offending arm. General patterns and context through bodies with local definitions remain unsupported, and unrelated unresolved tags stay pending.
6464
65−The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule (doc question 22). It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms and nested faced or unfaced cells with valid Jibb face names from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts those same shapes from declared mark imports in a separate list. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
65+The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule (doc question 22). It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, nested faced or unfaced cells, and unions of supported, pairwise-disjoint cases from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
6666
6767Callers 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.
6868
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 and nested faced or unfaced cells from `/sur` molds and marks into inference. 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 (doc question 22), 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 the current prelude names, 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, 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 branches in casts and known union-sample calls. Variable-dependent face merges remain unsupported. 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. Generic aliases of union molds and body-local generic unions also remain unsupported. The Hoon bridge cannot yet bring union forks into inference. 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. The partial prelude includes `murn`, `join`, `snip` and `rear`, 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 and supported disjoint unions from `/sur` molds and marks into inference. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. 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 (doc question 22), 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 the current prelude names, 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, 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 branches in casts and known union-sample calls. Variable-dependent face merges remain unsupported. 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 variable-dependent record-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` and `rear`, 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
2424## Milestone 1: parser and mark
2525
@@ -37,8 +37,8 @@ What the plan asks for, and where it is:
3737
3838Besides the plan's list:
3939
40−- 487 golden cases: 271 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.
41−- The 487-case corpus passed under `urbit eval` in 78.8 s. The fake ship passed all 492 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 25.9 s for sync and 30.9 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.
40+- 489 golden cases: 273 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.
41+- The 489-case corpus passed under `urbit eval` in 56.0 s. The fake ship passed all 494 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 31.1 s for sync and 23.6 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.
4242- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4343- 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.
4444- 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).
@@ -71,14 +71,15 @@ Besides the plan's list:
7171| 4406f6f | 2026-10-30 | Resolve selected contextual tags and check explicit imported unions |
7272| 5c73614 | 2026-10-30 | Print supported named and escaping union types |
7373| 0070584 | 2026-10-30 | Propagate union context through loobean branches, read selected unions in Hoon collections, and add `flit` |
74−| This change | 2026-10-30 | Infer selected named generic unions, test Hoon collection wrappers, and add list helpers |
74+| 250564c | 2026-10-30 | Infer selected named generic unions, test Hoon collection wrappers, and add list helpers |
75+| This change | 2026-10-30 | Bridge selected Hoon unions into partial inference and support generic union aliases |
7576
7677## Checking it
7778
7879On a machine set up as [development.md](development.md) says:
7980
8081```
81−tools/golden # 487 cases under urbit eval
82+tools/golden # 489 cases under urbit eval
8283tools/importer-test # the Hoon importer fixture projection
8384tools/type-import-test # the importer/checker bridge fixture
8485tools/type-mark-test # the mark/checker bridge fixture
@@ -88,7 +89,7 @@ tools/testdata/selftest # the tools themselves
8889tools/doc-blocks docs/spec # the doc's examples are golden cases
8990tools/ship start
9091tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
91−tools/ship test # the same 487 cases as -test arms on the ship
92+tools/ship test # the same 489 cases as -test arms on the ship
9293tools/testdata/ship-selftest
9394tools/ship check-commit # |commit stores .jibb files
9495tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb.hoon+56−8
@@ -5059,6 +5059,7 @@
50595059 ?: |(?=(%var -.actual) ?=(%var -.expected))
50605060 =/ unified=(unit isub) (itype-unify actual expected sub)
50615061 ?~ unified
5062+ ?: |(?=(%face -.actual) ?=(%face -.expected)) [%unknown ~]
50625063 ?: (itype-family-related actual expected sub) [%unknown ~]
50635064 [%bad ~]
50645065 [%ok u.unified next]
@@ -5314,9 +5315,12 @@
53145315 $(ds t.ds)
53155316::
53165317::
5317−:: The importer owns its algebra. Fixed atoms, cells and Jibb-named faces
5318−:: are decoded recursively. Singletons, unions, collections, recursive
5319−:: references and invalid face names remain unsupported, never widened.
5318+:: The caller supplies unchanged results from the source-aware importer.
5319+:: That boundary is trusted for source provenance: a fork alone cannot
5320+:: reveal cases Hoon collapsed before it was constructed. Validate the
5321+:: supplied graph independently, including pairwise disjointness. Fixed
5322+:: atoms, term singletons, cells, faces and proven forks are decoded;
5323+:: unsupported singletons, collections and recursive references fail.
53205324::
53215325++ jibb-face-name
53225326 |= name=@
@@ -5332,10 +5336,22 @@
53325336 ?@ node ~
53335337 ?+ -.node ~
53345338 %atom
5339+ ?: ?=([%atom %tas [~ @]] node)
5340+ =/ value=@ +>+.node
5341+ ?. |(=(value 0) (jibb-face-name value)) ~
5342+ =/ printed=@t ?:(=(value 0) '%$' (cat 3 '%' value))
5343+ `[%const [%term %tas value printed]]
53355344 ?. ?=([%atom @ ~] node) ~
53365345 =/ aura=@ta (@ta +<.node)
53375346 ?. |(?=(?(%u %ud %ux %uv %t %ta %tas %p %da %dr) aura) =('tD' aura)) ~
53385347 `[%atom aura]
5348+ %fork
5349+ =/ cases=(unit (list itype)) (import-to-itypes +.node)
5350+ ?~ cases ~
5351+ ?~ u.cases ~
5352+ ?~ t.u.cases ~
5353+ ?. (import-cases-disjoint u.cases) ~
5354+ `[%union u.cases ~ ~ ~]
53395355 %face
53405356 ?. ?=([%face @ *] node) ~
53415357 =/ name=@ +<.node
@@ -5352,6 +5368,36 @@
53525368 `[%cell u.left u.right]
53535369 ==
53545370::
5371+++ import-to-itypes
5372+ |= nodes=*
5373+ ^- (unit (list itype))
5374+ ?@ nodes ?:(=(nodes 0) `~ ~)
5375+ =/ first (import-to-itype -.nodes)
5376+ ?~ first ~
5377+ =/ rest $(nodes +.nodes)
5378+ ?~ rest ~
5379+ `[u.first u.rest]
5380+::
5381+++ import-type-pattern
5382+ |= typ=itype
5383+ ^- upat
5384+ ?- -.typ
5385+ %atom [%atom ~]
5386+ %const [%atom `val.literal.typ]
5387+ %face $(typ body.typ)
5388+ %cell [%cell $(typ hed.typ) $(typ tal.typ)]
5389+ %union [%or (turn cases.typ |=(t=itype (import-type-pattern t)))]
5390+ * [%unknown ~]
5391+ ==
5392+::
5393+++ import-cases-disjoint
5394+ |= cases=(list itype)
5395+ ^- ?
5396+ ?~ cases &
5397+ =/ first=upat (import-type-pattern i.cases)
5398+ ?. (levy t.cases |=(t=itype =(%disjoint (union-relate first (import-type-pattern t))))) |
5399+ $(cases t.cases)
5400+::
53555401++ find-imported-mold
53565402 |= [module=term name=term externals=iexternals surs=(list term)]
53575403 ^- (unit itype)
@@ -5457,6 +5503,8 @@
54575503:: Generic mold parameters are lexical and distinct from the enclosing
54585504:: value's capital variables. Arguments are substituted only once, so
54595505:: an argument's variable ID cannot be captured by a template ID.
5506+:: A generic alias of a named union keeps the underlying union's origin
5507+:: and substituted argument order; an originless union stays unsupported.
54605508::
54615509++ iparam-lookup
54625510 |= [name=@t params=iparams]
@@ -5518,8 +5566,8 @@
55185566 =/ out=(unit [typ=itype state=istate])
55195567 (infer-simple-shape body.sh state(next next.fresh, params params.fresh, in-mold &))
55205568 ?~ out ~
5521− ?: &(?=(%union -.typ.u.out) !?=(%union -.body.sh)) ~
5522− =? typ.u.out ?=(%union -.typ.u.out)
5569+ ?: &(?=(%union -.typ.u.out) !?=(%union -.body.sh) ?=(~ origin.typ.u.out)) ~
5570+ =? typ.u.out &(?=(%union -.typ.u.out) ?=(%union -.body.sh))
55235571 typ.u.out(args (turn vars.fresh |=(n=@ud `itype`[%var n])))
55245572 =/ used=(list @ud) (itype-vars typ.u.out)
55255573 ?. (levy used |=(n=@ud (lien vars.fresh |=(p=@ud =(p n))))) ~
@@ -5606,9 +5654,9 @@
56065654 =/ out=(unit [typ=itype state=istate])
56075655 $(sh body.u.found, state state.u.args(active [n active.state.u.args], in-mold &, params u.params))
56085656 ?~ out ~
5609− ?: &(?=(%union -.typ.u.out) !?=(%union -.body.u.found)) ~
5610− ?: &(?=(%union -.typ.u.out) !(lien top-molds.state.u.args |=(x=term =(x n)))) ~
5611− =? typ.u.out ?=(%union -.typ.u.out)
5657+ ?: &(?=(%union -.typ.u.out) !?=(%union -.body.u.found) ?=(~ origin.typ.u.out)) ~
5658+ ?: &(?=(%union -.typ.u.out) ?=(%union -.body.u.found) !(lien top-molds.state.u.args |=(x=term =(x n)))) ~
5659+ =? typ.u.out &(?=(%union -.typ.u.out) ?=(%union -.body.u.found))
56125660 (label-direct-union typ.u.out(args types.u.args) u.found n state.u.args)
56135661 `[typ.u.out state.u.out(active active.state.u.args, in-mold in-mold.state.u.args, params params.state.u.args)]
56145662 %tvar
tests/clay-fixtures/ford-nested-union-bridge-expected.txtnew file+1
@@ -0,0 +1 @@
1+'partial inference; module not checked\0a++ value: $-([id=@ud value=([a=@ud b=@t] @ud)] ([a=@ud b=@t] @ud))'
tests/clay-fixtures/ford-nested-union-bridge.txtnew file+11
@@ -0,0 +1,11 @@
1+=/ m (strand ,vase)
2+;< =bowl:spider bind:m get-bowl
3+=/ now=@da now.bowl
4+=/ src=vase .^(vase %ca /[(scot %p our.bowl)]/my-app/[(scot %da now)]/sur/import-fixture/hoon)
5+=/ reader=vase .^(vase %ca /[(scot %p our.bowl)]/my-app/[(scot %da now)]/lib/jibb-import/hoon)
6+=/ jibb=vase .^(vase %ca /[(scot %p our.bowl)]/my-app/[(scot %da now)]/lib/jibb/hoon)
7+=/ read-gate=vase (slap reader (ream 'read-named'))
8+=/ result=vase (slym read-gate [%import-fixture %nested -.src])
9+=/ check-gate=vase (slap jibb (ream 'golden-types-imports'))
10+=/ text=@t '/- import-fixture\0a++ value |= x=nested.import-fixture value.x\0a'
11+(pure:m (slym check-gate [/ui/test/jibb text ~[[%import-fixture %nested +.result]]]))
tests/golden/module-cache-incomplete/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Modules: "Everything is exported and read through the import's face"; Imports: "Import cycles are errors".
2−tests: A shared library with a generic alias of a generic union, which partial inference does not yet support, yields no interface even though one value could be inferred.
2+tests: A shared library with a recursive mold, which partial inference does not yet support, yields no interface even though one value could be inferred.
33expect: parses
44expect-types: a partial inference report
tests/golden/module-cache-incomplete/module-trees.txt+6−12
@@ -1,14 +1,8 @@
11/ui/bad.jibb
22(module
3− (mold 1:1 original
4− (generic 1:13 A
5− (union 2:3
6− (cell 2:3
7− (const 2:4 %some)
8− (face 2:10 value (tvar 2:16 A)))
9− (const 3:3 %none))))
10− (mold 4:1 choice
11− (generic 4:11 A
12− (apply 4:18 original (tvar 4:28 A))))
13− (value 5:1 id
14− (gate-wide 5:7 (bind 5:10 x) (wing 5:12 x))))
3+ (mold 1:1 recursive
4+ (cell 1:14
5+ (face 1:15 next (ref 1:20 recursive))
6+ (face 1:30 value (aura 1:36 @t))))
7+ (value 2:1 id
8+ (gate-wide 2:7 (bind 2:10 x) (wing 2:12 x))))
tests/golden/module-cache-incomplete/modules/ui/bad.jibb+1−4
@@ -1,5 +1,2 @@
1−+$ original |$ [A]
2− [%some value=A]
3− %none
4−+$ choice |$ [A] (original A)
1++$ recursive [next=recursive value=@t]
52++ id |=(x x)
tests/golden/types-generic-union-alias-face/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: generic molds are applied with their arguments and faces are part of record types.
2+tests: A swapped imported alias handles concrete tagged payloads; the variable-dependent record-face case remains unsupported until its occurs-check and face propagation are represented.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-union-alias-face/module-trees.txtnew file+11
@@ -0,0 +1,11 @@
1+/ui/base.jibb
2+(module
3+ (mold 1:1 choice
4+ (generic 1:11 V E
5+ (union 2:3
6+ (cell 2:3
7+ (const 2:4 %ok)
8+ (face 2:8 value (tvar 2:14 V)))
9+ (cell 3:3
10+ (const 3:4 %err)
11+ (face 3:9 error (tvar 3:15 E)))))))
tests/golden/types-generic-union-alias-face/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/base.jibb
tests/golden/types-generic-union-alias-face/modules/ui/base.jibbnew file+3
@@ -0,0 +1,3 @@
1++$ choice |$ [V E]
2+ [%ok value=V]
3+ [%err error=E]
tests/golden/types-generic-union-alias-face/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+/= base /ui/base
2++$ relay |$ [A B] (choice.base B A)
3+++ make |= x=A ^- (relay A B) [%err x]
4+++ reveal |= v=(relay A B) v
5+++ with-text ^- (relay @t @p) [%err "hi"]
6+++ with-ship ^- (relay @t @p) [%err ~zod]
tests/golden/types-generic-union-alias-face/tokens.txtnew file+75
@@ -0,0 +1,75 @@
1+1:1 glyph /=
2+1:5 name base
3+1:10 glyph /
4+1:11 tight knot ui
5+1:13 tight glyph /
6+1:14 tight knot base
7+2:1 NEWLINE
8+2:1 glyph +$
9+2:4 name relay
10+2:10 glyph |$
11+2:13 glyph [
12+2:14 tight tvar A
13+2:16 tvar B
14+2:17 tight glyph ]
15+2:19 glyph (
16+2:20 tight wing choice.base
17+2:32 tvar B
18+2:34 tvar A
19+2:35 tight glyph )
20+3:1 NEWLINE
21+3:1 glyph ++
22+3:4 name make
23+3:9 glyph |=
24+3:12 name x
25+3:13 tight glyph =
26+3:14 tight tvar A
27+3:16 glyph ^-
28+3:19 glyph (
29+3:20 tight name relay
30+3:26 tvar A
31+3:28 tvar B
32+3:29 tight glyph )
33+3:31 glyph [
34+3:32 tight lit %err
35+3:37 name x
36+3:38 tight glyph ]
37+4:1 NEWLINE
38+4:1 glyph ++
39+4:4 name reveal
40+4:11 glyph |=
41+4:14 name v
42+4:15 tight glyph =
43+4:16 tight glyph (
44+4:17 tight name relay
45+4:23 tvar A
46+4:25 tvar B
47+4:26 tight glyph )
48+4:28 name v
49+5:1 NEWLINE
50+5:1 glyph ++
51+5:4 name with-text
52+5:14 glyph ^-
53+5:17 glyph (
54+5:18 tight name relay
55+5:24 aura @t
56+5:27 aura @p
57+5:29 tight glyph )
58+5:31 glyph [
59+5:32 tight lit %err
60+5:37 str "hi"
61+5:41 tight glyph ]
62+6:1 NEWLINE
63+6:1 glyph ++
64+6:4 name with-ship
65+6:14 glyph ^-
66+6:17 glyph (
67+6:18 tight name relay
68+6:24 aura @t
69+6:27 aura @p
70+6:29 tight glyph )
71+6:31 glyph [
72+6:32 tight lit %err
73+6:37 lit ~zod
74+6:41 tight glyph ]
75+6:42 NEWLINE
tests/golden/types-generic-union-alias-face/tree.txtnew file+24
@@ -0,0 +1,24 @@
1+(module
2+ (jibb 1:1 base /ui/base)
3+ (mold 2:1 relay
4+ (generic 2:10 A B
5+ (apply 2:19 choice.base (tvar 2:32 B) (tvar 2:34 A))))
6+ (value 3:1 make
7+ (gate 3:9
8+ (face 3:12 x (tvar 3:14 A))
9+ (cast 3:16
10+ (apply 3:19 relay (tvar 3:26 A) (tvar 3:28 B))
11+ (tuple 3:31 (lit 3:32 %err) (wing 3:37 x)))))
12+ (value 4:1 reveal
13+ (gate 4:11
14+ (face 4:14 v
15+ (apply 4:16 relay (tvar 4:23 A) (tvar 4:25 B)))
16+ (wing 4:28 v)))
17+ (value 5:1 with-text
18+ (cast 5:14
19+ (apply 5:17 relay (aura 5:24 @t) (aura 5:27 @p))
20+ (tuple 5:31 (lit 5:32 %err) (str 5:37 "hi"))))
21+ (value 6:1 with-ship
22+ (cast 6:14
23+ (apply 6:17 relay (aura 6:24 @t) (aura 6:27 @p))
24+ (tuple 6:31 (lit 6:32 %err) (lit 6:37 ~zod)))))
tests/golden/types-generic-union-alias-face/types.txtnew file+12
@@ -0,0 +1,12 @@
1+partial inference; module not checked
2++$ relay: not checked
3+++ make: cast constraint is not supported by partial inference
4+++ reveal: $-((choice.base A B) (choice.base A B))
5+++ with-text: (choice.base @p @t)
6+++ with-ship: cast mold and expression type do not unify
7+/tests/golden/types-generic-union-alias-face/source.jibb:6:17: cast mold
8+++ with-ship ^- (relay @t @p) [%err ~zod]
9+ ^
10+/tests/golden/types-generic-union-alias-face/source.jibb:6:31: expression
11+++ with-ship ^- (relay @t @p) [%err ~zod]
12+ ^
tests/golden/types-generic-union-alias/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds: generic molds are applied with their arguments; Modules: "Everything is exported and read through the import's face".
2+tests: Generic aliases swap or repeat a union's arguments, ignore an alias parameter, and keep the original union identity; a local alias and a merge of distinct capitals are handled conservatively.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-generic-union-alias/source.jibbnew file+23
@@ -0,0 +1,23 @@
1++$ choice |$ [A B]
2+ [%one value=A]
3+ [%two value=B]
4++$ reverse |$ [A B] (choice B A)
5++$ repeat |$ [A] (choice A A)
6++$ extra |$ [A B] (choice A @p)
7+++ reverse-value ^- (reverse @t @p) [%one ~zod]
8+++ reverse-gate |= x=(reverse A B) x
9+++ repeat-gate |= x=(repeat A) x
10+++ repeated-call |= x=(choice A B) (repeat-gate x)
11+++ ghost-a ^- (extra @t @p) [%one "hi"]
12+++ ghost-b ^- (extra @t @ud) [%one "hi"]
13+++ use-ghost |= x=(extra @t @p) x
14+++ interchange (use-ghost ghost-b)
15+++ local |= x=A
16+ +$ alias |$ [B] (choice B @p)
17+ ^- (alias A) [%one x]
18+++ local-pass |= x=(choice A @p)
19+ +$ alias |$ [B] (choice B @p)
20+ ^- (alias A) x
21+++ local-shadow |= x=A
22+ +$ alias |$ [A] (choice A @p)
23+ ^- (alias @t) [%one "hi"]
tests/golden/types-generic-union-alias/tokens.txtnew file+248
@@ -0,0 +1,248 @@
1+1:1 glyph +$
2+1:4 name choice
3+1:11 glyph |$
4+1:14 glyph [
5+1:15 tight tvar A
6+1:17 tvar B
7+1:18 tight glyph ]
8+2:3 INDENT
9+2:3 glyph [
10+2:4 tight lit %one
11+2:9 name value
12+2:14 tight glyph =
13+2:15 tight tvar A
14+2:16 tight glyph ]
15+3:3 NEWLINE
16+3:3 glyph [
17+3:4 tight lit %two
18+3:9 name value
19+3:14 tight glyph =
20+3:15 tight tvar B
21+3:16 tight glyph ]
22+4:1 DEDENT
23+4:1 NEWLINE
24+4:1 glyph +$
25+4:4 name reverse
26+4:12 glyph |$
27+4:15 glyph [
28+4:16 tight tvar A
29+4:18 tvar B
30+4:19 tight glyph ]
31+4:21 glyph (
32+4:22 tight name choice
33+4:29 tvar B
34+4:31 tvar A
35+4:32 tight glyph )
36+5:1 NEWLINE
37+5:1 glyph +$
38+5:4 name repeat
39+5:11 glyph |$
40+5:14 glyph [
41+5:15 tight tvar A
42+5:16 tight glyph ]
43+5:18 glyph (
44+5:19 tight name choice
45+5:26 tvar A
46+5:28 tvar A
47+5:29 tight glyph )
48+6:1 NEWLINE
49+6:1 glyph +$
50+6:4 name extra
51+6:10 glyph |$
52+6:13 glyph [
53+6:14 tight tvar A
54+6:16 tvar B
55+6:17 tight glyph ]
56+6:19 glyph (
57+6:20 tight name choice
58+6:27 tvar A
59+6:29 aura @p
60+6:31 tight glyph )
61+7:1 NEWLINE
62+7:1 glyph ++
63+7:4 name reverse-value
64+7:18 glyph ^-
65+7:21 glyph (
66+7:22 tight name reverse
67+7:30 aura @t
68+7:33 aura @p
69+7:35 tight glyph )
70+7:37 glyph [
71+7:38 tight lit %one
72+7:43 lit ~zod
73+7:47 tight glyph ]
74+8:1 NEWLINE
75+8:1 glyph ++
76+8:4 name reverse-gate
77+8:17 glyph |=
78+8:20 name x
79+8:21 tight glyph =
80+8:22 tight glyph (
81+8:23 tight name reverse
82+8:31 tvar A
83+8:33 tvar B
84+8:34 tight glyph )
85+8:36 name x
86+9:1 NEWLINE
87+9:1 glyph ++
88+9:4 name repeat-gate
89+9:16 glyph |=
90+9:19 name x
91+9:20 tight glyph =
92+9:21 tight glyph (
93+9:22 tight name repeat
94+9:29 tvar A
95+9:30 tight glyph )
96+9:32 name x
97+10:1 NEWLINE
98+10:1 glyph ++
99+10:4 name repeated-call
100+10:18 glyph |=
101+10:21 name x
102+10:22 tight glyph =
103+10:23 tight glyph (
104+10:24 tight name choice
105+10:31 tvar A
106+10:33 tvar B
107+10:34 tight glyph )
108+10:36 glyph (
109+10:37 tight name repeat-gate
110+10:49 name x
111+10:50 tight glyph )
112+11:1 NEWLINE
113+11:1 glyph ++
114+11:4 name ghost-a
115+11:12 glyph ^-
116+11:15 glyph (
117+11:16 tight name extra
118+11:22 aura @t
119+11:25 aura @p
120+11:27 tight glyph )
121+11:29 glyph [
122+11:30 tight lit %one
123+11:35 str "hi"
124+11:39 tight glyph ]
125+12:1 NEWLINE
126+12:1 glyph ++
127+12:4 name ghost-b
128+12:12 glyph ^-
129+12:15 glyph (
130+12:16 tight name extra
131+12:22 aura @t
132+12:25 aura @ud
133+12:28 tight glyph )
134+12:30 glyph [
135+12:31 tight lit %one
136+12:36 str "hi"
137+12:40 tight glyph ]
138+13:1 NEWLINE
139+13:1 glyph ++
140+13:4 name use-ghost
141+13:14 glyph |=
142+13:17 name x
143+13:18 tight glyph =
144+13:19 tight glyph (
145+13:20 tight name extra
146+13:26 aura @t
147+13:29 aura @p
148+13:31 tight glyph )
149+13:33 name x
150+14:1 NEWLINE
151+14:1 glyph ++
152+14:4 name interchange
153+14:16 glyph (
154+14:17 tight name use-ghost
155+14:27 name ghost-b
156+14:34 tight glyph )
157+15:1 NEWLINE
158+15:1 glyph ++
159+15:4 name local
160+15:10 glyph |=
161+15:13 name x
162+15:14 tight glyph =
163+15:15 tight tvar A
164+16:3 INDENT
165+16:3 glyph +$
166+16:6 name alias
167+16:12 glyph |$
168+16:15 glyph [
169+16:16 tight tvar B
170+16:17 tight glyph ]
171+16:19 glyph (
172+16:20 tight name choice
173+16:27 tvar B
174+16:29 aura @p
175+16:31 tight glyph )
176+17:3 NEWLINE
177+17:3 glyph ^-
178+17:6 glyph (
179+17:7 tight name alias
180+17:13 tvar A
181+17:14 tight glyph )
182+17:16 glyph [
183+17:17 tight lit %one
184+17:22 name x
185+17:23 tight glyph ]
186+18:1 DEDENT
187+18:1 NEWLINE
188+18:1 glyph ++
189+18:4 name local-pass
190+18:15 glyph |=
191+18:18 name x
192+18:19 tight glyph =
193+18:20 tight glyph (
194+18:21 tight name choice
195+18:28 tvar A
196+18:30 aura @p
197+18:32 tight glyph )
198+19:3 INDENT
199+19:3 glyph +$
200+19:6 name alias
201+19:12 glyph |$
202+19:15 glyph [
203+19:16 tight tvar B
204+19:17 tight glyph ]
205+19:19 glyph (
206+19:20 tight name choice
207+19:27 tvar B
208+19:29 aura @p
209+19:31 tight glyph )
210+20:3 NEWLINE
211+20:3 glyph ^-
212+20:6 glyph (
213+20:7 tight name alias
214+20:13 tvar A
215+20:14 tight glyph )
216+20:16 name x
217+21:1 DEDENT
218+21:1 NEWLINE
219+21:1 glyph ++
220+21:4 name local-shadow
221+21:17 glyph |=
222+21:20 name x
223+21:21 tight glyph =
224+21:22 tight tvar A
225+22:3 INDENT
226+22:3 glyph +$
227+22:6 name alias
228+22:12 glyph |$
229+22:15 glyph [
230+22:16 tight tvar A
231+22:17 tight glyph ]
232+22:19 glyph (
233+22:20 tight name choice
234+22:27 tvar A
235+22:29 aura @p
236+22:31 tight glyph )
237+23:3 NEWLINE
238+23:3 glyph ^-
239+23:6 glyph (
240+23:7 tight name alias
241+23:13 aura @t
242+23:15 tight glyph )
243+23:17 glyph [
244+23:18 tight lit %one
245+23:23 str "hi"
246+23:27 tight glyph ]
247+23:28 DEDENT
248+23:28 NEWLINE
tests/golden/types-generic-union-alias/tree.txtnew file+86
@@ -0,0 +1,86 @@
1+(module
2+ (mold 1:1 choice
3+ (generic 1:11 A B
4+ (union 2:3
5+ (cell 2:3
6+ (const 2:4 %one)
7+ (face 2:9 value (tvar 2:15 A)))
8+ (cell 3:3
9+ (const 3:4 %two)
10+ (face 3:9 value (tvar 3:15 B))))))
11+ (mold 4:1 reverse
12+ (generic 4:12 A B
13+ (apply 4:21 choice (tvar 4:29 B) (tvar 4:31 A))))
14+ (mold 5:1 repeat
15+ (generic 5:11 A
16+ (apply 5:18 choice (tvar 5:26 A) (tvar 5:28 A))))
17+ (mold 6:1 extra
18+ (generic 6:10 A B
19+ (apply 6:19 choice (tvar 6:27 A) (aura 6:29 @p))))
20+ (value 7:1 reverse-value
21+ (cast 7:18
22+ (apply 7:21 reverse (aura 7:30 @t) (aura 7:33 @p))
23+ (tuple 7:37 (lit 7:38 %one) (lit 7:43 ~zod))))
24+ (value 8:1 reverse-gate
25+ (gate 8:17
26+ (face 8:20 x
27+ (apply 8:22 reverse (tvar 8:31 A) (tvar 8:33 B)))
28+ (wing 8:36 x)))
29+ (value 9:1 repeat-gate
30+ (gate 9:16
31+ (face 9:19 x
32+ (apply 9:21 repeat (tvar 9:29 A)))
33+ (wing 9:32 x)))
34+ (value 10:1 repeated-call
35+ (gate 10:18
36+ (face 10:21 x
37+ (apply 10:23 choice (tvar 10:31 A) (tvar 10:33 B)))
38+ (group 10:36
39+ (call 10:37 (wing 10:37 repeat-gate) (wing 10:49 x)))))
40+ (value 11:1 ghost-a
41+ (cast 11:12
42+ (apply 11:15 extra (aura 11:22 @t) (aura 11:25 @p))
43+ (tuple 11:29 (lit 11:30 %one) (str 11:35 "hi"))))
44+ (value 12:1 ghost-b
45+ (cast 12:12
46+ (apply 12:15 extra (aura 12:22 @t) (aura 12:25 @ud))
47+ (tuple 12:30 (lit 12:31 %one) (str 12:36 "hi"))))
48+ (value 13:1 use-ghost
49+ (gate 13:14
50+ (face 13:17 x
51+ (apply 13:19 extra (aura 13:26 @t) (aura 13:29 @p)))
52+ (wing 13:33 x)))
53+ (value 14:1 interchange
54+ (group 14:16
55+ (call 14:17 (wing 14:17 use-ghost) (wing 14:27 ghost-b))))
56+ (value 15:1 local
57+ (gate 15:10
58+ (face 15:13 x (tvar 15:15 A))
59+ (body 16:3
60+ (mold 16:3 alias
61+ (generic 16:12 B
62+ (apply 16:19 choice (tvar 16:27 B) (aura 16:29 @p))))
63+ (cast 17:3
64+ (apply 17:6 alias (tvar 17:13 A))
65+ (tuple 17:16 (lit 17:17 %one) (wing 17:22 x))))))
66+ (value 18:1 local-pass
67+ (gate 18:15
68+ (face 18:18 x
69+ (apply 18:20 choice (tvar 18:28 A) (aura 18:30 @p)))
70+ (body 19:3
71+ (mold 19:3 alias
72+ (generic 19:12 B
73+ (apply 19:19 choice (tvar 19:27 B) (aura 19:29 @p))))
74+ (cast 20:3
75+ (apply 20:6 alias (tvar 20:13 A))
76+ (wing 20:16 x)))))
77+ (value 21:1 local-shadow
78+ (gate 21:17
79+ (face 21:20 x (tvar 21:22 A))
80+ (body 22:3
81+ (mold 22:3 alias
82+ (generic 22:12 A
83+ (apply 22:19 choice (tvar 22:27 A) (aura 22:29 @p))))
84+ (cast 23:3
85+ (apply 23:6 alias (aura 23:13 @t))
86+ (tuple 23:17 (lit 23:18 %one) (str 23:23 "hi")))))))
tests/golden/types-generic-union-alias/types.txtnew file+16
@@ -0,0 +1,16 @@
1+partial inference; module not checked
2++$ choice: cases proven disjoint; mold not checked
3++$ reverse: not checked
4++$ repeat: not checked
5++$ extra: not checked
6+++ reverse-value: (choice @p @t)
7+++ reverse-gate: $-((choice A B) (choice A B))
8+++ repeat-gate: $-((choice A A) (choice A A))
9+++ repeated-call: explicit capital constraints are not supported by partial inference
10+++ ghost-a: (choice @t @p)
11+++ ghost-b: (choice @t @p)
12+++ use-ghost: $-((choice @t @p) (choice @t @p))
13+++ interchange: (choice @t @p)
14+++ local: cast constraint is not supported by partial inference
15+++ local-pass: $-((choice A @p) (choice A @p))
16+++ local-shadow: $-(A (choice @t @p))
tests/golden/types-generic-union-local/types.txt+2−2
@@ -11,12 +11,12 @@ partial inference; module not checked
1111++ phantom-gate: (phantom $-(@t @p))
1212++ identity: $-((choice A B) (choice A B))
1313++ repeated: $-((choice A A) (choice A A))
14−++ reverse: sample mold is not supported by partial inference
14+++ reverse: $-((choice A B) (choice A B))
1515++ first: (choice @t @p)
1616++ second: (choice @t @p)
1717++ third: (choice @p @t)
1818++ repeated-call: call constraint is not supported by partial inference
19−++ swap-concrete: cast mold is not supported by partial inference
19+++ swap-concrete: (choice @p @t)
2020++ wrong-phantom: cast constraint is not supported by partial inference
2121++ forced: explicit capital constraints are not supported by partial inference
2222++ pending: tag needs context in partial inference
tests/golden/types-generic-union-transitive/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Modules: "Everything is exported and read through the import's face"; Molds: generic molds.
2−tests: A transitive generic union alias reverses arguments; the partial checker rejects the unsupported alias rather than exporting an incomplete interface. This case will also exercise origin preservation through imported values and callers when aliases are supported.
2+tests: A concrete value from a transitive alias and uses of the alias retain the underlying union origin, but the partial printer reports its unavailable name rather than hiding generic arguments.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-generic-union-transitive/module-trees.txt+4−6
@@ -15,9 +15,7 @@
1515 (mold 2:1 relay
1616 (generic 2:10 A B
1717 (apply 2:19 choice.base (tvar 2:32 B) (tvar 2:34 A))))
18− (value 3:1 make
19− (gate 3:9
20− (face 3:12 x (tvar 3:14 A))
21− (cast 3:16
22− (apply 3:19 relay (tvar 3:26 A) (tvar 3:28 B))
23− (tuple 3:31 (lit 3:32 %err) (wing 3:37 x))))))
18+ (value 3:1 sample
19+ (cast 3:11
20+ (apply 3:14 relay (aura 3:21 @t) (aura 3:24 @p))
21+ (tuple 3:28 (lit 3:29 %ok) (lit 3:33 ~zod)))))
tests/golden/types-generic-union-transitive/modules/ui/mid.jibb+1−1
@@ -1,3 +1,3 @@
11/= base /ui/base
22+$ relay |$ [A B] (choice.base B A)
3−++ make |= x=A ^- (relay A B) [%err x]
3+++ sample ^- (relay @t @p) [%ok ~zod]
tests/golden/types-generic-union-transitive/source.jibb+1−1
@@ -1,4 +1,4 @@
11/= mid /ui/mid
22++ concrete ^- (relay.mid @t @p) [%ok ~zod]
3−++ via (make.mid "hi")
3+++ via sample.mid
44++ generic |= x=(relay.mid A B) x
tests/golden/types-generic-union-transitive/tokens.txt+1−4
@@ -20,10 +20,7 @@
20203:1 NEWLINE
21213:1 glyph ++
22223:4 name via
23−3:8 glyph (
24−3:9 tight wing make.mid
25−3:18 str "hi"
26−3:22 tight glyph )
23+3:8 wing sample.mid
27244:1 NEWLINE
28254:1 glyph ++
29264:4 name generic
tests/golden/types-generic-union-transitive/tree.txt+1−3
@@ -4,9 +4,7 @@
44 (cast 2:13
55 (apply 2:16 relay.mid (aura 2:27 @t) (aura 2:30 @p))
66 (tuple 2:34 (lit 2:35 %ok) (lit 2:39 ~zod))))
7− (value 3:1 via
8− (group 3:8
9− (call 3:9 (wing 3:9 make.mid) (str 3:18 "hi"))))
7+ (value 3:1 via (wing 3:8 sample.mid))
108 (value 4:1 generic
119 (gate 4:12
1210 (face 4:15 x
tests/golden/types-generic-union-transitive/types.txt+3−1
@@ -1,2 +1,4 @@
11partial inference; module not checked
2−module mold needs unsupported inference: /ui/mid/jibb
2+++ concrete: generic union name is not available in this scope
3+++ via: generic union name is not available in this scope
4+++ generic: generic union name is not available in this scope
tests/golden/types-import-mark-record/about.txt+2−2
@@ -1,4 +1,4 @@
11source: Overview, Importing Hoon types: records and unions import from Hoon; Grammar, Imports: `/%` names a type after its mark.
2−tests: A real mark door's faced, nested record reaches partial inference, including a nested field read. A different mark with a union in a faced field remains unsupported rather than being widened.
2+tests: A real mark door's faced, nested record reaches partial inference, including a nested field read. A second mark retains the unnamed union in a faced field through inference.
33expect: parses
4−expect-types: a partial report showing the record and rejecting the unsupported union
4+expect-types: a partial report showing the nested record and the imported union field
tests/golden/types-import-mark-record/source.jibb+1−1
@@ -2,4 +2,4 @@
22/% %choice
33++ echo |= item=note item
44++ title |= item=note title.meta.item
5−++ unsupported |= item=choice item
5+++ echo-choice |= item=choice item
tests/golden/types-import-mark-record/tokens.txt+1−1
@@ -21,7 +21,7 @@
21214:23 wing title.meta.item
22225:1 NEWLINE
23235:1 glyph ++
24−5:4 name unsupported
24+5:4 name echo-choice
25255:16 glyph |=
26265:19 name item
27275:23 tight glyph =
tests/golden/types-import-mark-record/tree.txt+1−1
@@ -9,7 +9,7 @@
99 (gate 4:10
1010 (face 4:13 item (ref 4:18 note))
1111 (wing 4:23 title.meta.item)))
12− (value 5:1 unsupported
12+ (value 5:1 echo-choice
1313 (gate 5:16
1414 (face 5:19 item (ref 5:24 choice))
1515 (wing 5:31 item))))
tests/golden/types-import-mark-record/types.txt+1−1
@@ -1,4 +1,4 @@
11partial inference; module not checked
22++ echo: $-([meta=[title=@t count=@ud] id=@ud] [meta=[title=@t count=@ud] id=@ud])
33++ title: $-([meta=[title=@t count=@ud] id=@ud] @t)
4−++ unsupported: sample mold is not supported by partial inference
4+++ echo-choice: $-([kind=(%on %off) id=@ud] [kind=(%on %off) id=@ud])
tests/lib/jibb-bridge.hoon+12−2
@@ -23,7 +23,7 @@
2323 =/ cor=type -:(ride -:!>(..zuse) sur-text)
2424 =/ read
2525 |= name=term
26− (read-mold-in:jibb-import %fixture name (~(play ut cor) (ream (cat 3 '*' name))) cor)
26+ (read-named:jibb-import %fixture name cor)
2727 =/ external=(list [module=term name=term result=*])
2828 :~ [%fixture %title (read %title)]
2929 [%fixture %pair (read %pair)]
@@ -31,10 +31,20 @@
3131 [%fixture %nested (read %nested)]
3232 [%fixture %constant (read %constant)]
3333 [%fixture %choice (read %choice)]
34+ [%fixture %nested-choice (read %nested-choice)]
35+ [%fixture %collapsed (read %collapsed)]
36+ [%fixture %dollar (read %dollar)]
37+ [%fixture %dollar-choice (read %dollar-choice)]
38+ [%fixture %overlap [%& [%fork ~[[%atom %tas [~ %a]] [%atom %tas [~ %a]]]]]]
39+ [%fixture %malformed [%& [%fork [[%atom %tas [~ %a]] 42]]]]
40+ [%fixture %one-case [%& [%fork ~[[%atom %tas [~ %a]]]]]]
41+ [%fixture %bad-term [%& [%fork ~[[%atom %tas [~ %a]] [%atom %tas [~ 'Bad']]]]]]
42+ [%fixture %nested-overlap [%& [%face %status [%fork ~[[%atom %tas [~ %a]] [%atom %tas [~ %a]]]]]]]
3443 [%fixture %failed [%| 'unsupported Hoon type']]
3544 [%fixture %duplicate [%& [%atom %t ~]]]
3645 [%fixture %duplicate [%& [%atom %ud ~]]]
3746 [%missing %title [%& [%atom %t ~]]]
3847 ==
39− (golden-types-imports:jibb /test/jibb src external)
48+ =/ report=@t (golden-types-imports:jibb /test/jibb src external)
49+ (cat 3 report (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}"))
4050--
tests/lib/jibb.hoon+415−401
@@ -1367,335 +1367,345 @@
13671367/* tok-415 %txt /tests/golden/types-generic-repeated/tokens/txt
13681368/* tre-415 %txt /tests/golden/types-generic-repeated/tree/txt
13691369/* typ-415 %txt /tests/golden/types-generic-repeated/types/txt
1370−/* src-416 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1371−/* tok-416 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1372−/* tre-416 %txt /tests/golden/types-generic-union-capitals/tree/txt
1373−/* typ-416 %txt /tests/golden/types-generic-union-capitals/types/txt
1374−/* src-417 %jibb /tests/golden/types-generic-union-errors/source/jibb
1375−/* tok-417 %txt /tests/golden/types-generic-union-errors/tokens/txt
1376−/* tre-417 %txt /tests/golden/types-generic-union-errors/tree/txt
1377−/* typ-417 %txt /tests/golden/types-generic-union-errors/types/txt
1378−/* src-418 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1379−/* tok-418 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1380−/* tre-418 %txt /tests/golden/types-generic-union-escaping/tree/txt
1381−/* mod-418-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1382−/* mod-418-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1383−/* typ-418 %txt /tests/golden/types-generic-union-escaping/types/txt
1384−/* mtre-418 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1385−/* src-419 %jibb /tests/golden/types-generic-union-import/source/jibb
1386−/* tok-419 %txt /tests/golden/types-generic-union-import/tokens/txt
1387−/* tre-419 %txt /tests/golden/types-generic-union-import/tree/txt
1388−/* mod-419-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1389−/* mod-419-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1390−/* typ-419 %txt /tests/golden/types-generic-union-import/types/txt
1391−/* mtre-419 %txt /tests/golden/types-generic-union-import/module-trees/txt
1392−/* src-420 %jibb /tests/golden/types-generic-union-local/source/jibb
1393−/* tok-420 %txt /tests/golden/types-generic-union-local/tokens/txt
1394−/* tre-420 %txt /tests/golden/types-generic-union-local/tree/txt
1395−/* typ-420 %txt /tests/golden/types-generic-union-local/types/txt
1396−/* src-421 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1397−/* tok-421 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1398−/* tre-421 %txt /tests/golden/types-generic-union-transitive/tree/txt
1399−/* mod-421-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1400−/* mod-421-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1401−/* typ-421 %txt /tests/golden/types-generic-union-transitive/types/txt
1402−/* mtre-421 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1403−/* src-422 %jibb /tests/golden/types-import-mark/source/jibb
1404−/* tok-422 %txt /tests/golden/types-import-mark/tokens/txt
1405−/* tre-422 %txt /tests/golden/types-import-mark/tree/txt
1406−/* typ-422 %txt /tests/golden/types-import-mark/types/txt
1407−/* imp-422-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1408−/* mark-422-1 %txt /tests/golden/types-import-mark/mar/label/txt
1409−/* src-423 %jibb /tests/golden/types-import-mark-record/source/jibb
1410−/* tok-423 %txt /tests/golden/types-import-mark-record/tokens/txt
1411−/* tre-423 %txt /tests/golden/types-import-mark-record/tree/txt
1412−/* typ-423 %txt /tests/golden/types-import-mark-record/types/txt
1413−/* mark-423-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1414−/* mark-423-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1415−/* src-424 %jibb /tests/golden/types-import-missing-mold/source/jibb
1416−/* tok-424 %txt /tests/golden/types-import-missing-mold/tokens/txt
1417−/* tre-424 %txt /tests/golden/types-import-missing-mold/tree/txt
1418−/* typ-424 %txt /tests/golden/types-import-missing-mold/types/txt
1419−/* imp-424-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1420−/* src-425 %jibb /tests/golden/types-import-sur/source/jibb
1421−/* tok-425 %txt /tests/golden/types-import-sur/tokens/txt
1422−/* tre-425 %txt /tests/golden/types-import-sur/tree/txt
1423−/* typ-425 %txt /tests/golden/types-import-sur/types/txt
1424−/* imp-425-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1425−/* imp-425-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1426−/* src-426 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1427−/* tok-426 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1428−/* tre-426 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1429−/* mod-426-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1430−/* typ-426 %txt /tests/golden/types-import-sur-record-graph/types/txt
1431−/* imp-426-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1432−/* mtre-426 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1433−/* src-427 %jibb /tests/golden/types-module-fixtures/source/jibb
1434−/* tok-427 %txt /tests/golden/types-module-fixtures/tokens/txt
1435−/* tre-427 %txt /tests/golden/types-module-fixtures/tree/txt
1436−/* mod-427-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1437−/* mod-427-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1438−/* typ-427 %txt /tests/golden/types-module-fixtures/types/txt
1439−/* mtre-427 %txt /tests/golden/types-module-fixtures/module-trees/txt
1440−/* src-428 %jibb /tests/golden/types-module-mixed/source/jibb
1441−/* tok-428 %txt /tests/golden/types-module-mixed/tokens/txt
1442−/* tre-428 %txt /tests/golden/types-module-mixed/tree/txt
1443−/* mod-428-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1444−/* typ-428 %txt /tests/golden/types-module-mixed/types/txt
1445−/* imp-428-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1446−/* mark-428-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1447−/* mtre-428 %txt /tests/golden/types-module-mixed/module-trees/txt
1448−/* src-429 %jibb /tests/golden/types-partial-apply/source/jibb
1449−/* tok-429 %txt /tests/golden/types-partial-apply/tokens/txt
1450−/* tre-429 %txt /tests/golden/types-partial-apply/tree/txt
1451−/* typ-429 %txt /tests/golden/types-partial-apply/types/txt
1452−/* src-430 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1453−/* tok-430 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1454−/* tre-430 %txt /tests/golden/types-partial-atom-alias/tree/txt
1455−/* typ-430 %txt /tests/golden/types-partial-atom-alias/types/txt
1456−/* src-431 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1457−/* tok-431 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1458−/* tre-431 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1459−/* typ-431 %txt /tests/golden/types-partial-atom-constraint/types/txt
1460−/* src-432 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1461−/* tok-432 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1462−/* tre-432 %txt /tests/golden/types-partial-atom-widening/tree/txt
1463−/* typ-432 %txt /tests/golden/types-partial-atom-widening/types/txt
1464−/* src-433 %jibb /tests/golden/types-partial-aura/source/jibb
1465−/* tok-433 %txt /tests/golden/types-partial-aura/tokens/txt
1466−/* tre-433 %txt /tests/golden/types-partial-aura/tree/txt
1467−/* typ-433 %txt /tests/golden/types-partial-aura/types/txt
1468−/* src-434 %jibb /tests/golden/types-partial-aura-family/source/jibb
1469−/* tok-434 %txt /tests/golden/types-partial-aura-family/tokens/txt
1470−/* tre-434 %txt /tests/golden/types-partial-aura-family/tree/txt
1471−/* typ-434 %txt /tests/golden/types-partial-aura-family/types/txt
1472−/* src-435 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1473−/* tok-435 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1474−/* tre-435 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1475−/* typ-435 %txt /tests/golden/types-partial-aura-generalization/types/txt
1476−/* src-436 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1477−/* tok-436 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1478−/* tre-436 %txt /tests/golden/types-partial-bare-atom/tree/txt
1479−/* typ-436 %txt /tests/golden/types-partial-bare-atom/types/txt
1480−/* src-437 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1481−/* tok-437 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1482−/* tre-437 %txt /tests/golden/types-partial-branch-widening/tree/txt
1483−/* typ-437 %txt /tests/golden/types-partial-branch-widening/types/txt
1484−/* src-438 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1485−/* tok-438 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1486−/* tre-438 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1487−/* typ-438 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1488−/* src-439 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1489−/* tok-439 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1490−/* tre-439 %txt /tests/golden/types-partial-decimal-default/tree/txt
1491−/* typ-439 %txt /tests/golden/types-partial-decimal-default/types/txt
1492−/* src-440 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1493−/* tok-440 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1494−/* tre-440 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1495−/* typ-440 %txt /tests/golden/types-partial-dependency-chain/types/txt
1496−/* src-441 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1497−/* tok-441 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1498−/* tre-441 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1499−/* typ-441 %txt /tests/golden/types-partial-explicit-capital/types/txt
1500−/* src-442 %jibb /tests/golden/types-partial-forward/source/jibb
1501−/* tok-442 %txt /tests/golden/types-partial-forward/tokens/txt
1502−/* tre-442 %txt /tests/golden/types-partial-forward/tree/txt
1503−/* typ-442 %txt /tests/golden/types-partial-forward/types/txt
1504−/* src-443 %jibb /tests/golden/types-partial-generalization/source/jibb
1505−/* tok-443 %txt /tests/golden/types-partial-generalization/tokens/txt
1506−/* tre-443 %txt /tests/golden/types-partial-generalization/tree/txt
1507−/* typ-443 %txt /tests/golden/types-partial-generalization/types/txt
1508−/* src-444 %jibb /tests/golden/types-partial-identity/source/jibb
1509−/* tok-444 %txt /tests/golden/types-partial-identity/tokens/txt
1510−/* tre-444 %txt /tests/golden/types-partial-identity/tree/txt
1511−/* typ-444 %txt /tests/golden/types-partial-identity/types/txt
1512−/* src-445 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1513−/* tok-445 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1514−/* tre-445 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1515−/* typ-445 %txt /tests/golden/types-partial-independent-atoms/types/txt
1516−/* src-446 %jibb /tests/golden/types-partial-local-molds/source/jibb
1517−/* tok-446 %txt /tests/golden/types-partial-local-molds/tokens/txt
1518−/* tre-446 %txt /tests/golden/types-partial-local-molds/tree/txt
1519−/* typ-446 %txt /tests/golden/types-partial-local-molds/types/txt
1520−/* src-447 %jibb /tests/golden/types-partial-locals/source/jibb
1521−/* tok-447 %txt /tests/golden/types-partial-locals/tokens/txt
1522−/* tre-447 %txt /tests/golden/types-partial-locals/tree/txt
1523−/* typ-447 %txt /tests/golden/types-partial-locals/types/txt
1524−/* src-448 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1525−/* tok-448 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1526−/* tre-448 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1527−/* typ-448 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1528−/* src-449 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1529−/* tok-449 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1530−/* tre-449 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1531−/* typ-449 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1532−/* src-450 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1533−/* tok-450 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1534−/* tre-450 %txt /tests/golden/types-partial-mold-composite/tree/txt
1535−/* typ-450 %txt /tests/golden/types-partial-mold-composite/types/txt
1536−/* src-451 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1537−/* tok-451 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1538−/* tre-451 %txt /tests/golden/types-partial-mold-forward/tree/txt
1539−/* typ-451 %txt /tests/golden/types-partial-mold-forward/types/txt
1540−/* src-452 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1541−/* tok-452 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1542−/* tre-452 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1543−/* typ-452 %txt /tests/golden/types-partial-mold-recursive/types/txt
1544−/* src-453 %jibb /tests/golden/types-partial-occurs/source/jibb
1545−/* tok-453 %txt /tests/golden/types-partial-occurs/tokens/txt
1546−/* tre-453 %txt /tests/golden/types-partial-occurs/tree/txt
1547−/* typ-453 %txt /tests/golden/types-partial-occurs/types/txt
1548−/* src-454 %jibb /tests/golden/types-partial-projection/source/jibb
1549−/* tok-454 %txt /tests/golden/types-partial-projection/tokens/txt
1550−/* tre-454 %txt /tests/golden/types-partial-projection/tree/txt
1551−/* typ-454 %txt /tests/golden/types-partial-projection/types/txt
1552−/* src-455 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1553−/* tok-455 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1554−/* tre-455 %txt /tests/golden/types-partial-shadow-global/tree/txt
1555−/* typ-455 %txt /tests/golden/types-partial-shadow-global/types/txt
1556−/* src-456 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1557−/* tok-456 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1558−/* tre-456 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1559−/* typ-456 %txt /tests/golden/types-partial-shared-tvar/types/txt
1560−/* src-457 %jibb /tests/golden/types-partial-union-cases/source/jibb
1561−/* tok-457 %txt /tests/golden/types-partial-union-cases/tokens/txt
1562−/* tre-457 %txt /tests/golden/types-partial-union-cases/tree/txt
1563−/* typ-457 %txt /tests/golden/types-partial-union-cases/types/txt
1564−/* src-458 %jibb /tests/golden/types-partial-union-edges/source/jibb
1565−/* tok-458 %txt /tests/golden/types-partial-union-edges/tokens/txt
1566−/* tre-458 %txt /tests/golden/types-partial-union-edges/tree/txt
1567−/* typ-458 %txt /tests/golden/types-partial-union-edges/types/txt
1568−/* src-459 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1569−/* tok-459 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1570−/* tre-459 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1571−/* typ-459 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1572−/* src-460 %jibb /tests/golden/types-record-bound-variable/source/jibb
1573−/* tok-460 %txt /tests/golden/types-record-bound-variable/tokens/txt
1574−/* tre-460 %txt /tests/golden/types-record-bound-variable/tree/txt
1575−/* typ-460 %txt /tests/golden/types-record-bound-variable/types/txt
1576−/* src-461 %jibb /tests/golden/types-record-faces/source/jibb
1577−/* tok-461 %txt /tests/golden/types-record-faces/tokens/txt
1578−/* tre-461 %txt /tests/golden/types-record-faces/tree/txt
1579−/* typ-461 %txt /tests/golden/types-record-faces/types/txt
1580−/* src-462 %jibb /tests/golden/types-record-import/source/jibb
1581−/* tok-462 %txt /tests/golden/types-record-import/tokens/txt
1582−/* tre-462 %txt /tests/golden/types-record-import/tree/txt
1583−/* mod-462-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1584−/* typ-462 %txt /tests/golden/types-record-import/types/txt
1585−/* mtre-462 %txt /tests/golden/types-record-import/module-trees/txt
1586−/* src-463 %jibb /tests/golden/types-record-local-scheme/source/jibb
1587−/* tok-463 %txt /tests/golden/types-record-local-scheme/tokens/txt
1588−/* tre-463 %txt /tests/golden/types-record-local-scheme/tree/txt
1589−/* typ-463 %txt /tests/golden/types-record-local-scheme/types/txt
1590−/* src-464 %jibb /tests/golden/types-record-nested/source/jibb
1591−/* tok-464 %txt /tests/golden/types-record-nested/tokens/txt
1592−/* tre-464 %txt /tests/golden/types-record-nested/tree/txt
1593−/* typ-464 %txt /tests/golden/types-record-nested/types/txt
1594−/* src-465 %jibb /tests/golden/types-record-to-tuple/source/jibb
1595−/* tok-465 %txt /tests/golden/types-record-to-tuple/tokens/txt
1596−/* tre-465 %txt /tests/golden/types-record-to-tuple/tree/txt
1597−/* typ-465 %txt /tests/golden/types-record-to-tuple/types/txt
1598−/* src-466 %jibb /tests/golden/types-union-alias/source/jibb
1599−/* tok-466 %txt /tests/golden/types-union-alias/tokens/txt
1600−/* tre-466 %txt /tests/golden/types-union-alias/tree/txt
1601−/* typ-466 %txt /tests/golden/types-union-alias/types/txt
1602−/* src-467 %jibb /tests/golden/types-union-branch-context/source/jibb
1603−/* tok-467 %txt /tests/golden/types-union-branch-context/tokens/txt
1604−/* tre-467 %txt /tests/golden/types-union-branch-context/tree/txt
1605−/* typ-467 %txt /tests/golden/types-union-branch-context/types/txt
1606−/* src-468 %jibb /tests/golden/types-union-branch-pending/source/jibb
1607−/* tok-468 %txt /tests/golden/types-union-branch-pending/tokens/txt
1608−/* tre-468 %txt /tests/golden/types-union-branch-pending/tree/txt
1609−/* typ-468 %txt /tests/golden/types-union-branch-pending/types/txt
1610−/* src-469 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1611−/* tok-469 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1612−/* tre-469 %txt /tests/golden/types-union-constructor-shape/tree/txt
1613−/* typ-469 %txt /tests/golden/types-union-constructor-shape/types/txt
1614−/* src-470 %jibb /tests/golden/types-union-context-flow/source/jibb
1615−/* tok-470 %txt /tests/golden/types-union-context-flow/tokens/txt
1616−/* tre-470 %txt /tests/golden/types-union-context-flow/tree/txt
1617−/* typ-470 %txt /tests/golden/types-union-context-flow/types/txt
1618−/* src-471 %jibb /tests/golden/types-union-import/source/jibb
1619−/* tok-471 %txt /tests/golden/types-union-import/tokens/txt
1620−/* tre-471 %txt /tests/golden/types-union-import/tree/txt
1621−/* mod-471-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1622−/* typ-471 %txt /tests/golden/types-union-import/types/txt
1623−/* mtre-471 %txt /tests/golden/types-union-import/module-trees/txt
1624−/* src-472 %jibb /tests/golden/types-union-local-pending/source/jibb
1625−/* tok-472 %txt /tests/golden/types-union-local-pending/tokens/txt
1626−/* tre-472 %txt /tests/golden/types-union-local-pending/tree/txt
1627−/* typ-472 %txt /tests/golden/types-union-local-pending/types/txt
1628−/* src-473 %jibb /tests/golden/types-union-overlap/source/jibb
1629−/* tok-473 %txt /tests/golden/types-union-overlap/tokens/txt
1630−/* tre-473 %txt /tests/golden/types-union-overlap/tree/txt
1631−/* typ-473 %txt /tests/golden/types-union-overlap/types/txt
1632−/* src-474 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1633−/* tok-474 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1634−/* tre-474 %txt /tests/golden/types-union-overlap-nested/tree/txt
1635−/* typ-474 %txt /tests/golden/types-union-overlap-nested/types/txt
1636−/* src-475 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1637−/* tok-475 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1638−/* tre-475 %txt /tests/golden/types-union-phantom-generic/tree/txt
1639−/* typ-475 %txt /tests/golden/types-union-phantom-generic/types/txt
1640−/* src-476 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1641−/* tok-476 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1642−/* tre-476 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1643−/* mod-476-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1644−/* typ-476 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1645−/* mtre-476 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1646−/* src-477 %jibb /tests/golden/types-union-print-distinct/source/jibb
1647−/* tok-477 %txt /tests/golden/types-union-print-distinct/tokens/txt
1648−/* tre-477 %txt /tests/golden/types-union-print-distinct/tree/txt
1649−/* mod-477-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1650−/* mod-477-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1651−/* mod-477-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1652−/* typ-477 %txt /tests/golden/types-union-print-distinct/types/txt
1653−/* mtre-477 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1654−/* src-478 %jibb /tests/golden/types-union-print-escape/source/jibb
1655−/* tok-478 %txt /tests/golden/types-union-print-escape/tokens/txt
1656−/* tre-478 %txt /tests/golden/types-union-print-escape/tree/txt
1657−/* typ-478 %txt /tests/golden/types-union-print-escape/types/txt
1658−/* src-479 %jibb /tests/golden/types-union-print-local/source/jibb
1659−/* tok-479 %txt /tests/golden/types-union-print-local/tokens/txt
1660−/* tre-479 %txt /tests/golden/types-union-print-local/tree/txt
1661−/* typ-479 %txt /tests/golden/types-union-print-local/types/txt
1662−/* src-480 %jibb /tests/golden/types-union-print-nested/source/jibb
1663−/* tok-480 %txt /tests/golden/types-union-print-nested/tokens/txt
1664−/* tre-480 %txt /tests/golden/types-union-print-nested/tree/txt
1665−/* typ-480 %txt /tests/golden/types-union-print-nested/types/txt
1666−/* src-481 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1667−/* tok-481 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1668−/* tre-481 %txt /tests/golden/types-union-print-same-origin/tree/txt
1669−/* mod-481-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1670−/* typ-481 %txt /tests/golden/types-union-print-same-origin/types/txt
1671−/* mtre-481 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1672−/* src-482 %jibb /tests/golden/types-union-print-transitive/source/jibb
1673−/* tok-482 %txt /tests/golden/types-union-print-transitive/tokens/txt
1674−/* tre-482 %txt /tests/golden/types-union-print-transitive/tree/txt
1675−/* mod-482-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1676−/* mod-482-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1677−/* typ-482 %txt /tests/golden/types-union-print-transitive/types/txt
1678−/* mtre-482 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1679−/* src-483 %jibb /tests/golden/types-union-singleton/source/jibb
1680−/* tok-483 %txt /tests/golden/types-union-singleton/tokens/txt
1681−/* tre-483 %txt /tests/golden/types-union-singleton/tree/txt
1682−/* typ-483 %txt /tests/golden/types-union-singleton/types/txt
1683−/* src-484 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1684−/* tok-484 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1685−/* tre-484 %txt /tests/golden/types-union-tag-atoms/tree/txt
1686−/* typ-484 %txt /tests/golden/types-union-tag-atoms/types/txt
1687−/* src-485 %jibb /tests/golden/types-union-tags/source/jibb
1688−/* tok-485 %txt /tests/golden/types-union-tags/tokens/txt
1689−/* tre-485 %txt /tests/golden/types-union-tags/tree/txt
1690−/* typ-485 %txt /tests/golden/types-union-tags/types/txt
1691−/* src-486 %jibb /tests/golden/types-union-unresolved/source/jibb
1692−/* tok-486 %txt /tests/golden/types-union-unresolved/tokens/txt
1693−/* tre-486 %txt /tests/golden/types-union-unresolved/tree/txt
1694−/* typ-486 %txt /tests/golden/types-union-unresolved/types/txt
1695−/* src-487 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1696−/* tok-487 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1697−/* tre-487 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1698−/* typ-487 %txt /tests/golden/types-union-unresolved-flow/types/txt
1370+/* src-416 %jibb /tests/golden/types-generic-union-alias/source/jibb
1371+/* tok-416 %txt /tests/golden/types-generic-union-alias/tokens/txt
1372+/* tre-416 %txt /tests/golden/types-generic-union-alias/tree/txt
1373+/* typ-416 %txt /tests/golden/types-generic-union-alias/types/txt
1374+/* src-417 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1375+/* tok-417 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1376+/* tre-417 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1377+/* mod-417-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1378+/* typ-417 %txt /tests/golden/types-generic-union-alias-face/types/txt
1379+/* mtre-417 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1380+/* src-418 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1381+/* tok-418 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1382+/* tre-418 %txt /tests/golden/types-generic-union-capitals/tree/txt
1383+/* typ-418 %txt /tests/golden/types-generic-union-capitals/types/txt
1384+/* src-419 %jibb /tests/golden/types-generic-union-errors/source/jibb
1385+/* tok-419 %txt /tests/golden/types-generic-union-errors/tokens/txt
1386+/* tre-419 %txt /tests/golden/types-generic-union-errors/tree/txt
1387+/* typ-419 %txt /tests/golden/types-generic-union-errors/types/txt
1388+/* src-420 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1389+/* tok-420 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1390+/* tre-420 %txt /tests/golden/types-generic-union-escaping/tree/txt
1391+/* mod-420-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1392+/* mod-420-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1393+/* typ-420 %txt /tests/golden/types-generic-union-escaping/types/txt
1394+/* mtre-420 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1395+/* src-421 %jibb /tests/golden/types-generic-union-import/source/jibb
1396+/* tok-421 %txt /tests/golden/types-generic-union-import/tokens/txt
1397+/* tre-421 %txt /tests/golden/types-generic-union-import/tree/txt
1398+/* mod-421-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1399+/* mod-421-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1400+/* typ-421 %txt /tests/golden/types-generic-union-import/types/txt
1401+/* mtre-421 %txt /tests/golden/types-generic-union-import/module-trees/txt
1402+/* src-422 %jibb /tests/golden/types-generic-union-local/source/jibb
1403+/* tok-422 %txt /tests/golden/types-generic-union-local/tokens/txt
1404+/* tre-422 %txt /tests/golden/types-generic-union-local/tree/txt
1405+/* typ-422 %txt /tests/golden/types-generic-union-local/types/txt
1406+/* src-423 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1407+/* tok-423 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1408+/* tre-423 %txt /tests/golden/types-generic-union-transitive/tree/txt
1409+/* mod-423-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1410+/* mod-423-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1411+/* typ-423 %txt /tests/golden/types-generic-union-transitive/types/txt
1412+/* mtre-423 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1413+/* src-424 %jibb /tests/golden/types-import-mark/source/jibb
1414+/* tok-424 %txt /tests/golden/types-import-mark/tokens/txt
1415+/* tre-424 %txt /tests/golden/types-import-mark/tree/txt
1416+/* typ-424 %txt /tests/golden/types-import-mark/types/txt
1417+/* imp-424-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1418+/* mark-424-1 %txt /tests/golden/types-import-mark/mar/label/txt
1419+/* src-425 %jibb /tests/golden/types-import-mark-record/source/jibb
1420+/* tok-425 %txt /tests/golden/types-import-mark-record/tokens/txt
1421+/* tre-425 %txt /tests/golden/types-import-mark-record/tree/txt
1422+/* typ-425 %txt /tests/golden/types-import-mark-record/types/txt
1423+/* mark-425-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1424+/* mark-425-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1425+/* src-426 %jibb /tests/golden/types-import-missing-mold/source/jibb
1426+/* tok-426 %txt /tests/golden/types-import-missing-mold/tokens/txt
1427+/* tre-426 %txt /tests/golden/types-import-missing-mold/tree/txt
1428+/* typ-426 %txt /tests/golden/types-import-missing-mold/types/txt
1429+/* imp-426-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1430+/* src-427 %jibb /tests/golden/types-import-sur/source/jibb
1431+/* tok-427 %txt /tests/golden/types-import-sur/tokens/txt
1432+/* tre-427 %txt /tests/golden/types-import-sur/tree/txt
1433+/* typ-427 %txt /tests/golden/types-import-sur/types/txt
1434+/* imp-427-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1435+/* imp-427-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1436+/* src-428 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1437+/* tok-428 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1438+/* tre-428 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1439+/* mod-428-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1440+/* typ-428 %txt /tests/golden/types-import-sur-record-graph/types/txt
1441+/* imp-428-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1442+/* mtre-428 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1443+/* src-429 %jibb /tests/golden/types-module-fixtures/source/jibb
1444+/* tok-429 %txt /tests/golden/types-module-fixtures/tokens/txt
1445+/* tre-429 %txt /tests/golden/types-module-fixtures/tree/txt
1446+/* mod-429-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1447+/* mod-429-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1448+/* typ-429 %txt /tests/golden/types-module-fixtures/types/txt
1449+/* mtre-429 %txt /tests/golden/types-module-fixtures/module-trees/txt
1450+/* src-430 %jibb /tests/golden/types-module-mixed/source/jibb
1451+/* tok-430 %txt /tests/golden/types-module-mixed/tokens/txt
1452+/* tre-430 %txt /tests/golden/types-module-mixed/tree/txt
1453+/* mod-430-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1454+/* typ-430 %txt /tests/golden/types-module-mixed/types/txt
1455+/* imp-430-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1456+/* mark-430-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1457+/* mtre-430 %txt /tests/golden/types-module-mixed/module-trees/txt
1458+/* src-431 %jibb /tests/golden/types-partial-apply/source/jibb
1459+/* tok-431 %txt /tests/golden/types-partial-apply/tokens/txt
1460+/* tre-431 %txt /tests/golden/types-partial-apply/tree/txt
1461+/* typ-431 %txt /tests/golden/types-partial-apply/types/txt
1462+/* src-432 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1463+/* tok-432 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1464+/* tre-432 %txt /tests/golden/types-partial-atom-alias/tree/txt
1465+/* typ-432 %txt /tests/golden/types-partial-atom-alias/types/txt
1466+/* src-433 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1467+/* tok-433 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1468+/* tre-433 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1469+/* typ-433 %txt /tests/golden/types-partial-atom-constraint/types/txt
1470+/* src-434 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1471+/* tok-434 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1472+/* tre-434 %txt /tests/golden/types-partial-atom-widening/tree/txt
1473+/* typ-434 %txt /tests/golden/types-partial-atom-widening/types/txt
1474+/* src-435 %jibb /tests/golden/types-partial-aura/source/jibb
1475+/* tok-435 %txt /tests/golden/types-partial-aura/tokens/txt
1476+/* tre-435 %txt /tests/golden/types-partial-aura/tree/txt
1477+/* typ-435 %txt /tests/golden/types-partial-aura/types/txt
1478+/* src-436 %jibb /tests/golden/types-partial-aura-family/source/jibb
1479+/* tok-436 %txt /tests/golden/types-partial-aura-family/tokens/txt
1480+/* tre-436 %txt /tests/golden/types-partial-aura-family/tree/txt
1481+/* typ-436 %txt /tests/golden/types-partial-aura-family/types/txt
1482+/* src-437 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1483+/* tok-437 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1484+/* tre-437 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1485+/* typ-437 %txt /tests/golden/types-partial-aura-generalization/types/txt
1486+/* src-438 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1487+/* tok-438 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1488+/* tre-438 %txt /tests/golden/types-partial-bare-atom/tree/txt
1489+/* typ-438 %txt /tests/golden/types-partial-bare-atom/types/txt
1490+/* src-439 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1491+/* tok-439 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1492+/* tre-439 %txt /tests/golden/types-partial-branch-widening/tree/txt
1493+/* typ-439 %txt /tests/golden/types-partial-branch-widening/types/txt
1494+/* src-440 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1495+/* tok-440 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1496+/* tre-440 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1497+/* typ-440 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1498+/* src-441 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1499+/* tok-441 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1500+/* tre-441 %txt /tests/golden/types-partial-decimal-default/tree/txt
1501+/* typ-441 %txt /tests/golden/types-partial-decimal-default/types/txt
1502+/* src-442 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1503+/* tok-442 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1504+/* tre-442 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1505+/* typ-442 %txt /tests/golden/types-partial-dependency-chain/types/txt
1506+/* src-443 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1507+/* tok-443 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1508+/* tre-443 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1509+/* typ-443 %txt /tests/golden/types-partial-explicit-capital/types/txt
1510+/* src-444 %jibb /tests/golden/types-partial-forward/source/jibb
1511+/* tok-444 %txt /tests/golden/types-partial-forward/tokens/txt
1512+/* tre-444 %txt /tests/golden/types-partial-forward/tree/txt
1513+/* typ-444 %txt /tests/golden/types-partial-forward/types/txt
1514+/* src-445 %jibb /tests/golden/types-partial-generalization/source/jibb
1515+/* tok-445 %txt /tests/golden/types-partial-generalization/tokens/txt
1516+/* tre-445 %txt /tests/golden/types-partial-generalization/tree/txt
1517+/* typ-445 %txt /tests/golden/types-partial-generalization/types/txt
1518+/* src-446 %jibb /tests/golden/types-partial-identity/source/jibb
1519+/* tok-446 %txt /tests/golden/types-partial-identity/tokens/txt
1520+/* tre-446 %txt /tests/golden/types-partial-identity/tree/txt
1521+/* typ-446 %txt /tests/golden/types-partial-identity/types/txt
1522+/* src-447 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1523+/* tok-447 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1524+/* tre-447 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1525+/* typ-447 %txt /tests/golden/types-partial-independent-atoms/types/txt
1526+/* src-448 %jibb /tests/golden/types-partial-local-molds/source/jibb
1527+/* tok-448 %txt /tests/golden/types-partial-local-molds/tokens/txt
1528+/* tre-448 %txt /tests/golden/types-partial-local-molds/tree/txt
1529+/* typ-448 %txt /tests/golden/types-partial-local-molds/types/txt
1530+/* src-449 %jibb /tests/golden/types-partial-locals/source/jibb
1531+/* tok-449 %txt /tests/golden/types-partial-locals/tokens/txt
1532+/* tre-449 %txt /tests/golden/types-partial-locals/tree/txt
1533+/* typ-449 %txt /tests/golden/types-partial-locals/types/txt
1534+/* src-450 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1535+/* tok-450 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1536+/* tre-450 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1537+/* typ-450 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1538+/* src-451 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1539+/* tok-451 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1540+/* tre-451 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1541+/* typ-451 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1542+/* src-452 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1543+/* tok-452 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1544+/* tre-452 %txt /tests/golden/types-partial-mold-composite/tree/txt
1545+/* typ-452 %txt /tests/golden/types-partial-mold-composite/types/txt
1546+/* src-453 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1547+/* tok-453 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1548+/* tre-453 %txt /tests/golden/types-partial-mold-forward/tree/txt
1549+/* typ-453 %txt /tests/golden/types-partial-mold-forward/types/txt
1550+/* src-454 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1551+/* tok-454 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1552+/* tre-454 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1553+/* typ-454 %txt /tests/golden/types-partial-mold-recursive/types/txt
1554+/* src-455 %jibb /tests/golden/types-partial-occurs/source/jibb
1555+/* tok-455 %txt /tests/golden/types-partial-occurs/tokens/txt
1556+/* tre-455 %txt /tests/golden/types-partial-occurs/tree/txt
1557+/* typ-455 %txt /tests/golden/types-partial-occurs/types/txt
1558+/* src-456 %jibb /tests/golden/types-partial-projection/source/jibb
1559+/* tok-456 %txt /tests/golden/types-partial-projection/tokens/txt
1560+/* tre-456 %txt /tests/golden/types-partial-projection/tree/txt
1561+/* typ-456 %txt /tests/golden/types-partial-projection/types/txt
1562+/* src-457 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1563+/* tok-457 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1564+/* tre-457 %txt /tests/golden/types-partial-shadow-global/tree/txt
1565+/* typ-457 %txt /tests/golden/types-partial-shadow-global/types/txt
1566+/* src-458 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1567+/* tok-458 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1568+/* tre-458 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1569+/* typ-458 %txt /tests/golden/types-partial-shared-tvar/types/txt
1570+/* src-459 %jibb /tests/golden/types-partial-union-cases/source/jibb
1571+/* tok-459 %txt /tests/golden/types-partial-union-cases/tokens/txt
1572+/* tre-459 %txt /tests/golden/types-partial-union-cases/tree/txt
1573+/* typ-459 %txt /tests/golden/types-partial-union-cases/types/txt
1574+/* src-460 %jibb /tests/golden/types-partial-union-edges/source/jibb
1575+/* tok-460 %txt /tests/golden/types-partial-union-edges/tokens/txt
1576+/* tre-460 %txt /tests/golden/types-partial-union-edges/tree/txt
1577+/* typ-460 %txt /tests/golden/types-partial-union-edges/types/txt
1578+/* src-461 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1579+/* tok-461 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1580+/* tre-461 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1581+/* typ-461 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1582+/* src-462 %jibb /tests/golden/types-record-bound-variable/source/jibb
1583+/* tok-462 %txt /tests/golden/types-record-bound-variable/tokens/txt
1584+/* tre-462 %txt /tests/golden/types-record-bound-variable/tree/txt
1585+/* typ-462 %txt /tests/golden/types-record-bound-variable/types/txt
1586+/* src-463 %jibb /tests/golden/types-record-faces/source/jibb
1587+/* tok-463 %txt /tests/golden/types-record-faces/tokens/txt
1588+/* tre-463 %txt /tests/golden/types-record-faces/tree/txt
1589+/* typ-463 %txt /tests/golden/types-record-faces/types/txt
1590+/* src-464 %jibb /tests/golden/types-record-import/source/jibb
1591+/* tok-464 %txt /tests/golden/types-record-import/tokens/txt
1592+/* tre-464 %txt /tests/golden/types-record-import/tree/txt
1593+/* mod-464-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1594+/* typ-464 %txt /tests/golden/types-record-import/types/txt
1595+/* mtre-464 %txt /tests/golden/types-record-import/module-trees/txt
1596+/* src-465 %jibb /tests/golden/types-record-local-scheme/source/jibb
1597+/* tok-465 %txt /tests/golden/types-record-local-scheme/tokens/txt
1598+/* tre-465 %txt /tests/golden/types-record-local-scheme/tree/txt
1599+/* typ-465 %txt /tests/golden/types-record-local-scheme/types/txt
1600+/* src-466 %jibb /tests/golden/types-record-nested/source/jibb
1601+/* tok-466 %txt /tests/golden/types-record-nested/tokens/txt
1602+/* tre-466 %txt /tests/golden/types-record-nested/tree/txt
1603+/* typ-466 %txt /tests/golden/types-record-nested/types/txt
1604+/* src-467 %jibb /tests/golden/types-record-to-tuple/source/jibb
1605+/* tok-467 %txt /tests/golden/types-record-to-tuple/tokens/txt
1606+/* tre-467 %txt /tests/golden/types-record-to-tuple/tree/txt
1607+/* typ-467 %txt /tests/golden/types-record-to-tuple/types/txt
1608+/* src-468 %jibb /tests/golden/types-union-alias/source/jibb
1609+/* tok-468 %txt /tests/golden/types-union-alias/tokens/txt
1610+/* tre-468 %txt /tests/golden/types-union-alias/tree/txt
1611+/* typ-468 %txt /tests/golden/types-union-alias/types/txt
1612+/* src-469 %jibb /tests/golden/types-union-branch-context/source/jibb
1613+/* tok-469 %txt /tests/golden/types-union-branch-context/tokens/txt
1614+/* tre-469 %txt /tests/golden/types-union-branch-context/tree/txt
1615+/* typ-469 %txt /tests/golden/types-union-branch-context/types/txt
1616+/* src-470 %jibb /tests/golden/types-union-branch-pending/source/jibb
1617+/* tok-470 %txt /tests/golden/types-union-branch-pending/tokens/txt
1618+/* tre-470 %txt /tests/golden/types-union-branch-pending/tree/txt
1619+/* typ-470 %txt /tests/golden/types-union-branch-pending/types/txt
1620+/* src-471 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1621+/* tok-471 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1622+/* tre-471 %txt /tests/golden/types-union-constructor-shape/tree/txt
1623+/* typ-471 %txt /tests/golden/types-union-constructor-shape/types/txt
1624+/* src-472 %jibb /tests/golden/types-union-context-flow/source/jibb
1625+/* tok-472 %txt /tests/golden/types-union-context-flow/tokens/txt
1626+/* tre-472 %txt /tests/golden/types-union-context-flow/tree/txt
1627+/* typ-472 %txt /tests/golden/types-union-context-flow/types/txt
1628+/* src-473 %jibb /tests/golden/types-union-import/source/jibb
1629+/* tok-473 %txt /tests/golden/types-union-import/tokens/txt
1630+/* tre-473 %txt /tests/golden/types-union-import/tree/txt
1631+/* mod-473-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1632+/* typ-473 %txt /tests/golden/types-union-import/types/txt
1633+/* mtre-473 %txt /tests/golden/types-union-import/module-trees/txt
1634+/* src-474 %jibb /tests/golden/types-union-local-pending/source/jibb
1635+/* tok-474 %txt /tests/golden/types-union-local-pending/tokens/txt
1636+/* tre-474 %txt /tests/golden/types-union-local-pending/tree/txt
1637+/* typ-474 %txt /tests/golden/types-union-local-pending/types/txt
1638+/* src-475 %jibb /tests/golden/types-union-overlap/source/jibb
1639+/* tok-475 %txt /tests/golden/types-union-overlap/tokens/txt
1640+/* tre-475 %txt /tests/golden/types-union-overlap/tree/txt
1641+/* typ-475 %txt /tests/golden/types-union-overlap/types/txt
1642+/* src-476 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1643+/* tok-476 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1644+/* tre-476 %txt /tests/golden/types-union-overlap-nested/tree/txt
1645+/* typ-476 %txt /tests/golden/types-union-overlap-nested/types/txt
1646+/* src-477 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1647+/* tok-477 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1648+/* tre-477 %txt /tests/golden/types-union-phantom-generic/tree/txt
1649+/* typ-477 %txt /tests/golden/types-union-phantom-generic/types/txt
1650+/* src-478 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1651+/* tok-478 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1652+/* tre-478 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1653+/* mod-478-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1654+/* typ-478 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1655+/* mtre-478 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1656+/* src-479 %jibb /tests/golden/types-union-print-distinct/source/jibb
1657+/* tok-479 %txt /tests/golden/types-union-print-distinct/tokens/txt
1658+/* tre-479 %txt /tests/golden/types-union-print-distinct/tree/txt
1659+/* mod-479-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1660+/* mod-479-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1661+/* mod-479-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1662+/* typ-479 %txt /tests/golden/types-union-print-distinct/types/txt
1663+/* mtre-479 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1664+/* src-480 %jibb /tests/golden/types-union-print-escape/source/jibb
1665+/* tok-480 %txt /tests/golden/types-union-print-escape/tokens/txt
1666+/* tre-480 %txt /tests/golden/types-union-print-escape/tree/txt
1667+/* typ-480 %txt /tests/golden/types-union-print-escape/types/txt
1668+/* src-481 %jibb /tests/golden/types-union-print-local/source/jibb
1669+/* tok-481 %txt /tests/golden/types-union-print-local/tokens/txt
1670+/* tre-481 %txt /tests/golden/types-union-print-local/tree/txt
1671+/* typ-481 %txt /tests/golden/types-union-print-local/types/txt
1672+/* src-482 %jibb /tests/golden/types-union-print-nested/source/jibb
1673+/* tok-482 %txt /tests/golden/types-union-print-nested/tokens/txt
1674+/* tre-482 %txt /tests/golden/types-union-print-nested/tree/txt
1675+/* typ-482 %txt /tests/golden/types-union-print-nested/types/txt
1676+/* src-483 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1677+/* tok-483 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1678+/* tre-483 %txt /tests/golden/types-union-print-same-origin/tree/txt
1679+/* mod-483-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1680+/* typ-483 %txt /tests/golden/types-union-print-same-origin/types/txt
1681+/* mtre-483 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1682+/* src-484 %jibb /tests/golden/types-union-print-transitive/source/jibb
1683+/* tok-484 %txt /tests/golden/types-union-print-transitive/tokens/txt
1684+/* tre-484 %txt /tests/golden/types-union-print-transitive/tree/txt
1685+/* mod-484-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1686+/* mod-484-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1687+/* typ-484 %txt /tests/golden/types-union-print-transitive/types/txt
1688+/* mtre-484 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1689+/* src-485 %jibb /tests/golden/types-union-singleton/source/jibb
1690+/* tok-485 %txt /tests/golden/types-union-singleton/tokens/txt
1691+/* tre-485 %txt /tests/golden/types-union-singleton/tree/txt
1692+/* typ-485 %txt /tests/golden/types-union-singleton/types/txt
1693+/* src-486 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1694+/* tok-486 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1695+/* tre-486 %txt /tests/golden/types-union-tag-atoms/tree/txt
1696+/* typ-486 %txt /tests/golden/types-union-tag-atoms/types/txt
1697+/* src-487 %jibb /tests/golden/types-union-tags/source/jibb
1698+/* tok-487 %txt /tests/golden/types-union-tags/tokens/txt
1699+/* tre-487 %txt /tests/golden/types-union-tags/tree/txt
1700+/* typ-487 %txt /tests/golden/types-union-tags/types/txt
1701+/* src-488 %jibb /tests/golden/types-union-unresolved/source/jibb
1702+/* tok-488 %txt /tests/golden/types-union-unresolved/tokens/txt
1703+/* tre-488 %txt /tests/golden/types-union-unresolved/tree/txt
1704+/* typ-488 %txt /tests/golden/types-union-unresolved/types/txt
1705+/* src-489 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1706+/* tok-489 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1707+/* tre-489 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1708+/* typ-489 %txt /tests/golden/types-union-unresolved-flow/types/txt
16991709|%
17001710:: one arm per case
17011711::
@@ -2529,150 +2539,154 @@
25292539 (weld (check ~.types-generic-recursive-union src-414 `tok-414 `tre-414) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-414 `typ-414))
25302540++ test-types-generic-repeated
25312541 (weld (check ~.types-generic-repeated src-415 `tok-415 `tre-415) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-415 `typ-415))
2542+++ test-types-generic-union-alias
2543+ (weld (check ~.types-generic-union-alias src-416 `tok-416 `tre-416) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-416 `typ-416))
2544+++ test-types-generic-union-alias-face
2545+ (weld (weld (check ~.types-generic-union-alias-face src-417 `tok-417 `tre-417) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-417 `typ-417 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-417-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-417 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-417-1]]))
25322546++ test-types-generic-union-capitals
2533− (weld (check ~.types-generic-union-capitals src-416 `tok-416 `tre-416) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-416 `typ-416))
2547+ (weld (check ~.types-generic-union-capitals src-418 `tok-418 `tre-418) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-418 `typ-418))
25342548++ test-types-generic-union-errors
2535− (weld (check ~.types-generic-union-errors src-417 `tok-417 `tre-417) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-417 `typ-417))
2549+ (weld (check ~.types-generic-union-errors src-419 `tok-419 `tre-419) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-419 `typ-419))
25362550++ test-types-generic-union-escaping
2537− (weld (weld (check ~.types-generic-union-escaping src-418 `tok-418 `tre-418) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-418 `typ-418 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-418-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-418-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-418 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-418-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-418-2]]))
2551+ (weld (weld (check ~.types-generic-union-escaping src-420 `tok-420 `tre-420) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-420 `typ-420 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-420-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-420-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-420 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-420-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-420-2]]))
25382552++ test-types-generic-union-import
2539− (weld (weld (check ~.types-generic-union-import src-419 `tok-419 `tre-419) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-419 `typ-419 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-419-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-419-2]])) (check-module-trees ~.types-generic-union-import `mtre-419 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-419-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-419-2]]))
2553+ (weld (weld (check ~.types-generic-union-import src-421 `tok-421 `tre-421) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-421 `typ-421 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-421-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-421-2]])) (check-module-trees ~.types-generic-union-import `mtre-421 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-421-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-421-2]]))
25402554++ test-types-generic-union-local
2541− (weld (check ~.types-generic-union-local src-420 `tok-420 `tre-420) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-420 `typ-420))
2555+ (weld (check ~.types-generic-union-local src-422 `tok-422 `tre-422) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-422 `typ-422))
25422556++ test-types-generic-union-transitive
2543− (weld (weld (check ~.types-generic-union-transitive src-421 `tok-421 `tre-421) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-421 `typ-421 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-421-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-421-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-421 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-421-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-421-2]]))
2557+ (weld (weld (check ~.types-generic-union-transitive src-423 `tok-423 `tre-423) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-423 `typ-423 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-423-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-423-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-423 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-423-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-423-2]]))
25442558++ test-types-import-mark
2545− (weld (check ~.types-import-mark src-422 `tok-422 `tre-422) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-422 `typ-422 ~[[%fixture %title imp-422-1]] ~[[%label mark-422-1]]))
2559+ (weld (check ~.types-import-mark src-424 `tok-424 `tre-424) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-424 `typ-424 ~[[%fixture %title imp-424-1]] ~[[%label mark-424-1]]))
25462560++ test-types-import-mark-record
2547− (weld (check ~.types-import-mark-record src-423 `tok-423 `tre-423) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-423 `typ-423 ~ ~[[%note mark-423-1] [%choice mark-423-2]]))
2561+ (weld (check ~.types-import-mark-record src-425 `tok-425 `tre-425) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-425 `typ-425 ~ ~[[%note mark-425-1] [%choice mark-425-2]]))
25482562++ test-types-import-missing-mold
2549− (weld (check ~.types-import-missing-mold src-424 `tok-424 `tre-424) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-424 `typ-424 ~[[%fixture %missing imp-424-1]]))
2563+ (weld (check ~.types-import-missing-mold src-426 `tok-426 `tre-426) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-426 `typ-426 ~[[%fixture %missing imp-426-1]]))
25502564++ test-types-import-sur
2551− (weld (check ~.types-import-sur src-425 `tok-425 `tre-425) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-425 `typ-425 ~[[%fixture %title imp-425-1] [%fixture %pair imp-425-2]]))
2565+ (weld (check ~.types-import-sur src-427 `tok-427 `tre-427) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-427 `typ-427 ~[[%fixture %title imp-427-1] [%fixture %pair imp-427-2]]))
25522566++ test-types-import-sur-record-graph
2553− (weld (weld (check ~.types-import-sur-record-graph src-426 `tok-426 `tre-426) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-426 `typ-426 ~[[%fixture %entry imp-426-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-426-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-426 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-426-1]]))
2567+ (weld (weld (check ~.types-import-sur-record-graph src-428 `tok-428 `tre-428) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-428 `typ-428 ~[[%fixture %entry imp-428-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-428-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-428 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-428-1]]))
25542568++ test-types-module-fixtures
2555− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-427 `tok-427 `tre-427) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-427 `typ-427 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-427-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-427-2]])) (check-module-trees ~.types-module-fixtures `mtre-427 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-427-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-427-2]]))
2569+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-429 `tok-429 `tre-429) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-429 `typ-429 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-429-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-429-2]])) (check-module-trees ~.types-module-fixtures `mtre-429 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-429-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-429-2]]))
25562570++ test-types-module-mixed
2557− (weld (weld (check ~.types-module-mixed src-428 `tok-428 `tre-428) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-428 `typ-428 ~[[%fixture %title imp-428-1]] ~[[%label mark-428-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-428-1]])) (check-module-trees ~.types-module-mixed `mtre-428 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-428-1]]))
2571+ (weld (weld (check ~.types-module-mixed src-430 `tok-430 `tre-430) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-430 `typ-430 ~[[%fixture %title imp-430-1]] ~[[%label mark-430-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-430-1]])) (check-module-trees ~.types-module-mixed `mtre-430 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-430-1]]))
25582572++ test-types-partial-apply
2559− (weld (check ~.types-partial-apply src-429 `tok-429 `tre-429) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-429 `typ-429))
2573+ (weld (check ~.types-partial-apply src-431 `tok-431 `tre-431) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-431 `typ-431))
25602574++ test-types-partial-atom-alias
2561− (weld (check ~.types-partial-atom-alias src-430 `tok-430 `tre-430) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-430 `typ-430))
2575+ (weld (check ~.types-partial-atom-alias src-432 `tok-432 `tre-432) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-432 `typ-432))
25622576++ test-types-partial-atom-constraint
2563− (weld (check ~.types-partial-atom-constraint src-431 `tok-431 `tre-431) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-431 `typ-431))
2577+ (weld (check ~.types-partial-atom-constraint src-433 `tok-433 `tre-433) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-433 `typ-433))
25642578++ test-types-partial-atom-widening
2565− (weld (check ~.types-partial-atom-widening src-432 `tok-432 `tre-432) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-432 `typ-432))
2579+ (weld (check ~.types-partial-atom-widening src-434 `tok-434 `tre-434) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-434 `typ-434))
25662580++ test-types-partial-aura
2567− (weld (check ~.types-partial-aura src-433 `tok-433 `tre-433) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-433 `typ-433))
2581+ (weld (check ~.types-partial-aura src-435 `tok-435 `tre-435) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-435 `typ-435))
25682582++ test-types-partial-aura-family
2569− (weld (check ~.types-partial-aura-family src-434 `tok-434 `tre-434) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-434 `typ-434))
2583+ (weld (check ~.types-partial-aura-family src-436 `tok-436 `tre-436) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-436 `typ-436))
25702584++ test-types-partial-aura-generalization
2571− (weld (check ~.types-partial-aura-generalization src-435 `tok-435 `tre-435) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-435 `typ-435))
2585+ (weld (check ~.types-partial-aura-generalization src-437 `tok-437 `tre-437) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-437 `typ-437))
25722586++ test-types-partial-bare-atom
2573− (weld (check ~.types-partial-bare-atom src-436 `tok-436 `tre-436) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-436 `typ-436))
2587+ (weld (check ~.types-partial-bare-atom src-438 `tok-438 `tre-438) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-438 `typ-438))
25742588++ test-types-partial-branch-widening
2575− (weld (check ~.types-partial-branch-widening src-437 `tok-437 `tre-437) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-437 `typ-437))
2589+ (weld (check ~.types-partial-branch-widening src-439 `tok-439 `tre-439) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-439 `typ-439))
25762590++ test-types-partial-conflicting-sites
2577− (weld (check ~.types-partial-conflicting-sites src-438 `tok-438 `tre-438) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-438 `typ-438))
2591+ (weld (check ~.types-partial-conflicting-sites src-440 `tok-440 `tre-440) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-440 `typ-440))
25782592++ test-types-partial-decimal-default
2579− (weld (check ~.types-partial-decimal-default src-439 `tok-439 `tre-439) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-439 `typ-439))
2593+ (weld (check ~.types-partial-decimal-default src-441 `tok-441 `tre-441) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-441 `typ-441))
25802594++ test-types-partial-dependency-chain
2581− (weld (check ~.types-partial-dependency-chain src-440 `tok-440 `tre-440) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-440 `typ-440))
2595+ (weld (check ~.types-partial-dependency-chain src-442 `tok-442 `tre-442) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-442 `typ-442))
25822596++ test-types-partial-explicit-capital
2583− (weld (check ~.types-partial-explicit-capital src-441 `tok-441 `tre-441) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-441 `typ-441))
2597+ (weld (check ~.types-partial-explicit-capital src-443 `tok-443 `tre-443) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-443 `typ-443))
25842598++ test-types-partial-forward
2585− (weld (check ~.types-partial-forward src-442 `tok-442 `tre-442) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-442 `typ-442))
2599+ (weld (check ~.types-partial-forward src-444 `tok-444 `tre-444) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-444 `typ-444))
25862600++ test-types-partial-generalization
2587− (weld (check ~.types-partial-generalization src-443 `tok-443 `tre-443) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-443 `typ-443))
2601+ (weld (check ~.types-partial-generalization src-445 `tok-445 `tre-445) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-445 `typ-445))
25882602++ test-types-partial-identity
2589− (weld (check ~.types-partial-identity src-444 `tok-444 `tre-444) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-444 `typ-444))
2603+ (weld (check ~.types-partial-identity src-446 `tok-446 `tre-446) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-446 `typ-446))
25902604++ test-types-partial-independent-atoms
2591− (weld (check ~.types-partial-independent-atoms src-445 `tok-445 `tre-445) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-445 `typ-445))
2605+ (weld (check ~.types-partial-independent-atoms src-447 `tok-447 `tre-447) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-447 `typ-447))
25922606++ test-types-partial-local-molds
2593− (weld (check ~.types-partial-local-molds src-446 `tok-446 `tre-446) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-446 `typ-446))
2607+ (weld (check ~.types-partial-local-molds src-448 `tok-448 `tre-448) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-448 `typ-448))
25942608++ test-types-partial-locals
2595− (weld (check ~.types-partial-locals src-447 `tok-447 `tre-447) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-447 `typ-447))
2609+ (weld (check ~.types-partial-locals src-449 `tok-449 `tre-449) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-449 `typ-449))
25962610++ test-types-partial-many-atom-constraints
2597− (weld (check ~.types-partial-many-atom-constraints src-448 `tok-448 `tre-448) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-448 `typ-448))
2611+ (weld (check ~.types-partial-many-atom-constraints src-450 `tok-450 `tre-450) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-450 `typ-450))
25982612++ test-types-partial-mold-bare-aura
2599− (weld (check ~.types-partial-mold-bare-aura src-449 `tok-449 `tre-449) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-449 `typ-449))
2613+ (weld (check ~.types-partial-mold-bare-aura src-451 `tok-451 `tre-451) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-451 `typ-451))
26002614++ test-types-partial-mold-composite
2601− (weld (check ~.types-partial-mold-composite src-450 `tok-450 `tre-450) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-450 `typ-450))
2615+ (weld (check ~.types-partial-mold-composite src-452 `tok-452 `tre-452) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-452 `typ-452))
26022616++ test-types-partial-mold-forward
2603− (weld (check ~.types-partial-mold-forward src-451 `tok-451 `tre-451) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-451 `typ-451))
2617+ (weld (check ~.types-partial-mold-forward src-453 `tok-453 `tre-453) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-453 `typ-453))
26042618++ test-types-partial-mold-recursive
2605− (weld (check ~.types-partial-mold-recursive src-452 `tok-452 `tre-452) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-452 `typ-452))
2619+ (weld (check ~.types-partial-mold-recursive src-454 `tok-454 `tre-454) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-454 `typ-454))
26062620++ test-types-partial-occurs
2607− (weld (check ~.types-partial-occurs src-453 `tok-453 `tre-453) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-453 `typ-453))
2621+ (weld (check ~.types-partial-occurs src-455 `tok-455 `tre-455) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-455 `typ-455))
26082622++ test-types-partial-projection
2609− (weld (check ~.types-partial-projection src-454 `tok-454 `tre-454) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-454 `typ-454))
2623+ (weld (check ~.types-partial-projection src-456 `tok-456 `tre-456) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-456 `typ-456))
26102624++ test-types-partial-shadow-global
2611− (weld (check ~.types-partial-shadow-global src-455 `tok-455 `tre-455) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-455 `typ-455))
2625+ (weld (check ~.types-partial-shadow-global src-457 `tok-457 `tre-457) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-457 `typ-457))
26122626++ test-types-partial-shared-tvar
2613− (weld (check ~.types-partial-shared-tvar src-456 `tok-456 `tre-456) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-456 `typ-456))
2627+ (weld (check ~.types-partial-shared-tvar src-458 `tok-458 `tre-458) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-458 `typ-458))
26142628++ test-types-partial-union-cases
2615− (weld (check ~.types-partial-union-cases src-457 `tok-457 `tre-457) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-457 `typ-457))
2629+ (weld (check ~.types-partial-union-cases src-459 `tok-459 `tre-459) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-459 `typ-459))
26162630++ test-types-partial-union-edges
2617− (weld (check ~.types-partial-union-edges src-458 `tok-458 `tre-458) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-458 `typ-458))
2631+ (weld (check ~.types-partial-union-edges src-460 `tok-460 `tre-460) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-460 `typ-460))
26182632++ test-types-partial-unresolved-tag
2619− (weld (check ~.types-partial-unresolved-tag src-459 `tok-459 `tre-459) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-459 `typ-459))
2633+ (weld (check ~.types-partial-unresolved-tag src-461 `tok-461 `tre-461) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-461 `typ-461))
26202634++ test-types-record-bound-variable
2621− (weld (check ~.types-record-bound-variable src-460 `tok-460 `tre-460) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-460 `typ-460))
2635+ (weld (check ~.types-record-bound-variable src-462 `tok-462 `tre-462) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-462 `typ-462))
26222636++ test-types-record-faces
2623− (weld (check ~.types-record-faces src-461 `tok-461 `tre-461) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-461 `typ-461))
2637+ (weld (check ~.types-record-faces src-463 `tok-463 `tre-463) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-463 `typ-463))
26242638++ test-types-record-import
2625− (weld (weld (check ~.types-record-import src-462 `tok-462 `tre-462) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-462 `typ-462 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-462-1]])) (check-module-trees ~.types-record-import `mtre-462 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-462-1]]))
2639+ (weld (weld (check ~.types-record-import src-464 `tok-464 `tre-464) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-464 `typ-464 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]])) (check-module-trees ~.types-record-import `mtre-464 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]]))
26262640++ test-types-record-local-scheme
2627− (weld (check ~.types-record-local-scheme src-463 `tok-463 `tre-463) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-463 `typ-463))
2641+ (weld (check ~.types-record-local-scheme src-465 `tok-465 `tre-465) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-465 `typ-465))
26282642++ test-types-record-nested
2629− (weld (check ~.types-record-nested src-464 `tok-464 `tre-464) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-464 `typ-464))
2643+ (weld (check ~.types-record-nested src-466 `tok-466 `tre-466) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-466 `typ-466))
26302644++ test-types-record-to-tuple
2631− (weld (check ~.types-record-to-tuple src-465 `tok-465 `tre-465) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-465 `typ-465))
2645+ (weld (check ~.types-record-to-tuple src-467 `tok-467 `tre-467) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-467 `typ-467))
26322646++ test-types-union-alias
2633− (weld (check ~.types-union-alias src-466 `tok-466 `tre-466) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-466 `typ-466))
2647+ (weld (check ~.types-union-alias src-468 `tok-468 `tre-468) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-468 `typ-468))
26342648++ test-types-union-branch-context
2635− (weld (check ~.types-union-branch-context src-467 `tok-467 `tre-467) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-467 `typ-467))
2649+ (weld (check ~.types-union-branch-context src-469 `tok-469 `tre-469) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-469 `typ-469))
26362650++ test-types-union-branch-pending
2637− (weld (check ~.types-union-branch-pending src-468 `tok-468 `tre-468) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-468 `typ-468))
2651+ (weld (check ~.types-union-branch-pending src-470 `tok-470 `tre-470) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-470 `typ-470))
26382652++ test-types-union-constructor-shape
2639− (weld (check ~.types-union-constructor-shape src-469 `tok-469 `tre-469) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-469 `typ-469))
2653+ (weld (check ~.types-union-constructor-shape src-471 `tok-471 `tre-471) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-471 `typ-471))
26402654++ test-types-union-context-flow
2641− (weld (check ~.types-union-context-flow src-470 `tok-470 `tre-470) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-470 `typ-470))
2655+ (weld (check ~.types-union-context-flow src-472 `tok-472 `tre-472) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-472 `typ-472))
26422656++ test-types-union-import
2643− (weld (weld (check ~.types-union-import src-471 `tok-471 `tre-471) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-471 `typ-471 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-471-1]])) (check-module-trees ~.types-union-import `mtre-471 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-471-1]]))
2657+ (weld (weld (check ~.types-union-import src-473 `tok-473 `tre-473) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-473 `typ-473 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-473-1]])) (check-module-trees ~.types-union-import `mtre-473 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-473-1]]))
26442658++ test-types-union-local-pending
2645− (weld (check ~.types-union-local-pending src-472 `tok-472 `tre-472) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-472 `typ-472))
2659+ (weld (check ~.types-union-local-pending src-474 `tok-474 `tre-474) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-474 `typ-474))
26462660++ test-types-union-overlap
2647− (weld (check ~.types-union-overlap src-473 `tok-473 `tre-473) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-473 `typ-473))
2661+ (weld (check ~.types-union-overlap src-475 `tok-475 `tre-475) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-475 `typ-475))
26482662++ test-types-union-overlap-nested
2649− (weld (check ~.types-union-overlap-nested src-474 `tok-474 `tre-474) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-474 `typ-474))
2663+ (weld (check ~.types-union-overlap-nested src-476 `tok-476 `tre-476) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-476 `typ-476))
26502664++ test-types-union-phantom-generic
2651− (weld (check ~.types-union-phantom-generic src-475 `tok-475 `tre-475) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-475 `typ-475))
2665+ (weld (check ~.types-union-phantom-generic src-477 `tok-477 `tre-477) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-477 `typ-477))
26522666++ test-types-union-print-cross-namespace
2653− (weld (weld (check ~.types-union-print-cross-namespace src-476 `tok-476 `tre-476) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-476 `typ-476 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-476-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-476 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-476-1]]))
2667+ (weld (weld (check ~.types-union-print-cross-namespace src-478 `tok-478 `tre-478) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-478 `typ-478 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-478-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-478 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-478-1]]))
26542668++ test-types-union-print-distinct
2655− (weld (weld (check ~.types-union-print-distinct src-477 `tok-477 `tre-477) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-477 `typ-477 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-477-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-477-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-477-3]])) (check-module-trees ~.types-union-print-distinct `mtre-477 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-477-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-477-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-477-3]]))
2669+ (weld (weld (check ~.types-union-print-distinct src-479 `tok-479 `tre-479) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-479 `typ-479 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-479-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-479-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-479-3]])) (check-module-trees ~.types-union-print-distinct `mtre-479 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-479-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-479-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-479-3]]))
26562670++ test-types-union-print-escape
2657− (weld (check ~.types-union-print-escape src-478 `tok-478 `tre-478) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-478 `typ-478))
2671+ (weld (check ~.types-union-print-escape src-480 `tok-480 `tre-480) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-480 `typ-480))
26582672++ test-types-union-print-local
2659− (weld (check ~.types-union-print-local src-479 `tok-479 `tre-479) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-479 `typ-479))
2673+ (weld (check ~.types-union-print-local src-481 `tok-481 `tre-481) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-481 `typ-481))
26602674++ test-types-union-print-nested
2661− (weld (check ~.types-union-print-nested src-480 `tok-480 `tre-480) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-480 `typ-480))
2675+ (weld (check ~.types-union-print-nested src-482 `tok-482 `tre-482) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-482 `typ-482))
26622676++ test-types-union-print-same-origin
2663− (weld (weld (check ~.types-union-print-same-origin src-481 `tok-481 `tre-481) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-481 `typ-481 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-481-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-481 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-481-1]]))
2677+ (weld (weld (check ~.types-union-print-same-origin src-483 `tok-483 `tre-483) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-483 `typ-483 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-483-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-483 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-483-1]]))
26642678++ test-types-union-print-transitive
2665− (weld (weld (check ~.types-union-print-transitive src-482 `tok-482 `tre-482) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-482 `typ-482 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-482-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-482-2]])) (check-module-trees ~.types-union-print-transitive `mtre-482 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-482-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-482-2]]))
2679+ (weld (weld (check ~.types-union-print-transitive src-484 `tok-484 `tre-484) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-484 `typ-484 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-484-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-484-2]])) (check-module-trees ~.types-union-print-transitive `mtre-484 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-484-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-484-2]]))
26662680++ test-types-union-singleton
2667− (weld (check ~.types-union-singleton src-483 `tok-483 `tre-483) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-483 `typ-483))
2681+ (weld (check ~.types-union-singleton src-485 `tok-485 `tre-485) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-485 `typ-485))
26682682++ test-types-union-tag-atoms
2669− (weld (check ~.types-union-tag-atoms src-484 `tok-484 `tre-484) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-484 `typ-484))
2683+ (weld (check ~.types-union-tag-atoms src-486 `tok-486 `tre-486) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-486 `typ-486))
26702684++ test-types-union-tags
2671− (weld (check ~.types-union-tags src-485 `tok-485 `tre-485) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-485 `typ-485))
2685+ (weld (check ~.types-union-tags src-487 `tok-487 `tre-487) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-487 `typ-487))
26722686++ test-types-union-unresolved
2673− (weld (check ~.types-union-unresolved src-486 `tok-486 `tre-486) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-486 `typ-486))
2687+ (weld (check ~.types-union-unresolved src-488 `tok-488 `tre-488) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-488 `typ-488))
26742688++ test-types-union-unresolved-flow
2675− (weld (check ~.types-union-unresolved-flow src-487 `tok-487 `tre-487) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-487 `typ-487))
2689+ (weld (check ~.types-union-unresolved-flow src-489 `tok-489 `tre-489) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-489 `typ-489))
26762690::
26772691:: +check: run golden:jibb on a case and compare both outputs
26782692::
tests/type-import/about.txt+13−7
@@ -1,7 +1,13 @@
1−The checker accepts caller-supplied results from the Hoon type reader. This
2−fixture compiles a small /sur against zuse, selects its molds, and passes the
3−actual reader results to the inference fragment. It checks fixed atoms, nested
4−faced records, and failures that must remain unsupported until the checker can
5−translate them. A missing import and a duplicate supplied mold fail closed.
6−The types output is partial and does not claim that the module was checked.
7−The same fixture runs under urbit eval and through -test on the fake ship.
1+The checker accepts unchanged, successful results from the source-aware Hoon
2+reader as a trusted boundary. It independently rejects malformed graphs and
3+forks whose supplied cases overlap, but a graph alone cannot reveal source
4+cases Hoon already collapsed. This fixture compiles a small /sur against zuse,
5+selects its molds, and passes the actual reader results to the inference
6+fragment. It checks fixed atoms, valid term singletons including Hoon `%$`,
7+nested faced records
8+and unnamed unions, including matching and mismatched casts. Forged
9+unsupported, malformed, singleton and overlapping forks are rejected; the
10+reader itself rejects an overlapping source union before Hoon can collapse it.
11+A missing import and a duplicate supplied mold fail closed. The types output
12+is partial and does not claim that the module was checked. The same fixture
13+runs under urbit eval and through -test on the fake ship.
tests/type-import/expected.txt+29−2
@@ -4,8 +4,35 @@ partial inference; module not checked
44++ face: $-([name=@t age=@ud] [name=@t age=@ud])
55++ read-name: $-([name=@t age=@ud] @t)
66++ nested: $-([entry=[name=@t age=@ud] number=@ud] @t)
7−++ constant: sample mold is not supported by partial inference
8−++ choice: sample mold is not supported by partial inference
7+++ constant: $-(%yes %yes)
8+++ choice: $-((%no %yes) (%no %yes))
99++ failed: sample mold is not supported by partial inference
1010++ duplicate: sample mold is not supported by partial inference
1111++ undeclared: sample mold is not supported by partial inference
12+++ yes: %no %yes
13+++ absent: cast mold and expression type do not unify
14+/test.jibb:13:14: cast mold
15+++ absent ^- choice.fixture %other
16+ ^
17+/test.jibb:13:29: expression
18+++ absent ^- choice.fixture %other
19+ ^
20+++ status: $-([status=(%deny %approve) text=@t] (%deny %approve))
21+++ nested-yes: [status=(%deny %approve) text=@t]
22+++ nested-absent: cast mold and expression type do not unify
23+/test.jibb:16:21: cast mold
24+++ nested-absent ^- nested-choice.fixture [%other "hi"]
25+ ^
26+/test.jibb:16:43: expression
27+++ nested-absent ^- nested-choice.fixture [%other "hi"]
28+ ^
29+++ overlap: sample mold is not supported by partial inference
30+++ malformed: sample mold is not supported by partial inference
31+++ collapsed: sample mold is not supported by partial inference
32+++ one-case: sample mold is not supported by partial inference
33+++ bad-term: sample mold is not supported by partial inference
34+++ nested-overlap: sample mold is not supported by partial inference
35+++ dollar: $-(%$ %$)
36+++ dollar-choice: $-((%$ %yes) (%$ %yes))
37+++ dollar-value: %$ %yes
38+reader-collapsed: error: a Hoon union has overlapping cases
tests/type-import/source.txt+14
@@ -9,3 +9,17 @@
99++ failed |= x=failed.fixture x
1010++ duplicate |= x=duplicate.fixture x
1111++ undeclared |= x=title.missing x
12+++ yes ^- choice.fixture %yes
13+++ absent ^- choice.fixture %other
14+++ status |= x=nested-choice.fixture status.x
15+++ nested-yes ^- nested-choice.fixture [%approve "hi"]
16+++ nested-absent ^- nested-choice.fixture [%other "hi"]
17+++ overlap |= x=overlap.fixture x
18+++ malformed |= x=malformed.fixture x
19+++ collapsed |= x=collapsed.fixture x
20+++ one-case |= x=one-case.fixture x
21+++ bad-term |= x=bad-term.fixture x
22+++ nested-overlap |= x=nested-overlap.fixture x
23+++ dollar |= x=dollar.fixture x
24+++ dollar-choice |= x=dollar-choice.fixture x
25+++ dollar-value ^- dollar-choice.fixture %$
tests/type-import/sur.txt+4
@@ -5,4 +5,8 @@
55+$ nested [entry=faced number=@ud]
66+$ constant %yes
77+$ choice ?(%yes %no)
8++$ nested-choice [status=?(%approve %deny) text=@t]
9++$ collapsed $?([%x @ud] [%x @ud])
10++$ dollar %$
11++$ dollar-choice ?(%$ %yes)
812--
tools/clay-fixtures+13
@@ -129,6 +129,19 @@ if result.stdout != expected:
129129 sys.exit(1)
130130print('Clay nested Ford union importer golden passed')
131131
132+try:
133+ result = subprocess.run([str(ship), 'run', str(fixtures / 'ford-nested-union-bridge.txt')],
134+ stdout=subprocess.PIPE, check=True)
135+except subprocess.CalledProcessError as error:
136+ sys.exit(error.returncode)
137+expected = (fixtures / 'ford-nested-union-bridge-expected.txt').read_bytes()
138+if result.stdout != expected:
139+ print('Clay nested union bridge differs from tests/clay-fixtures/ford-nested-union-bridge-expected.txt', file=sys.stderr)
140+ print('expected:', expected.decode().rstrip(), file=sys.stderr)
141+ print('actual: ', result.stdout.decode().rstrip(), file=sys.stderr)
142+ sys.exit(1)
143+print('Clay nested Ford union importer/checker bridge golden passed')
144+
132145try:
133146 result = subprocess.run([str(ship), 'run', str(fixtures / 'mark-shape.txt')],
134147 stdout=subprocess.PIPE, check=True)