on master help sign in
Contextualize union branches and report nested tags
commitc8f894ac25a26faa90afb6e7f7e0a352e5b69f39 authoriko <mail@iko.soy> dateSat 31 Oct 2026, 01:27 (16 hours ago) parentae35005
34 files changed+2030−510
README.md+1−1 docs/compiler.md+3−3 docs/development.md+3−1 docs/status.md+7−6 jibb-dev/lib/jibb.hoon+104 tests/golden/types-missing-tag-named/types.txt+4−4 tests/golden/types-nested-missing-tag/about.txt+4 tests/golden/types-nested-missing-tag/modules.txt+1 tests/golden/types-nested-missing-tag/source.jibb+18 tests/golden/types-nested-missing-tag/tokens.txt+184 tests/golden/types-nested-missing-tag/tree.txt+79 tests/golden/types-nested-missing-tag/types.txt+71 tests/golden/types-record-cast-context/types.txt+4−4 tests/golden/types-tuple-context-nested/types.txt+4−4 tests/golden/types-union-pattern-result-context/about.txt+4 tests/golden/types-union-pattern-result-context/modules.txt+1 tests/golden/types-union-pattern-result-context/source.jibb+25 tests/golden/types-union-pattern-result-context/tokens.txt+205 tests/golden/types-union-pattern-result-context/tree.txt+96 tests/golden/types-union-pattern-result-context/types.txt+13 tests/golden/types-union-pattern-result-controls/about.txt+4 tests/golden/types-union-pattern-result-controls/modules.txt+1 tests/golden/types-union-pattern-result-controls/source.jibb+55 tests/golden/types-union-pattern-result-controls/tokens.txt+357 tests/golden/types-union-pattern-result-controls/tree.txt+161 tests/golden/types-union-pattern-result-controls/types.txt+30 tests/golden/types-union-patterns/types.txt+2−2 tests/lib/jibb-tlon-bridge.hoon+29 tests/lib/jibb.hoon+499−481 tests/type-import/expected.txt+4−4 tests/type-tlon/about.txt+6 tests/type-tlon/expected.txt+6 tests/type-tlon/source.txt+6 tools/type-tlon-test+39
README.md+1−1
@@ -42,7 +42,7 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
4242tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
4343```
4444
45−`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test` and `tools/type-mark-test` check the importer/checker bridges under eval; the ship suite runs the same fixtures.
45+`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-tlon-test` and `tools/type-mark-test` check the importer/checker bridges under eval; the ship suite runs the same fixtures.
4646
4747### The doc's examples
4848
docs/compiler.md+3−3
@@ -62,7 +62,7 @@ A single-arm cell pattern can bind two or more positions, with its last binder c
6262
6363String interpolation infers its pieces in order and preserves substitutions and pending constraints. A piece with a known atom aura, unrestricted `@`, or a tape `(list @tD)` is accepted; an isolated decimal literal takes its normal `@ud` default. A known cell reports that it needs a printer, and an explicitly generic atom asks for an aura at its use site. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported in this fragment.
6464
65−A bare tag that provably matches no case of a known union reports the union and tag sites. This covers casts, single-argument calls, contextual unit payloads, list items and supported branch arms, including unnamed imported unions. Existing tags whose shape or payload does not fit retain the ordinary mismatch; unresolved tags stay pending.
65+A bare tag that provably matches no case of a known union reports the union and tag sites. This covers casts, single-argument calls, contextual unit payloads, list items and supported branch arms, including unnamed imported unions. For syntactic tuples, ordered fit replay can identify a missing tag in a nested position; an earlier mismatch or uncertainty stops the replay instead of guessing. Existing tags whose shape or payload does not fit retain the ordinary mismatch; unresolved tags stay pending.
6666
6767A change can replace uniquely named fields on a fully known, faced record spine, including through a nested wing. Replacements receive the field type as context, substitutions and pending constraints are retained, and the resulting type remains the original record. Missing fields, empty changes and definite replacement mismatches report sites; the expected-type site is the edit, since the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A cast to a known record also supplies field context to a tuple or record initializer, including nested list and union fields. The expected-type site is the cast mold; the original field declaration location is not retained. The cart-store example’s `init` and `update` infer in this fragment; store kind and declaration checking remain unfinished.
6868
@@ -76,11 +76,11 @@ A backtick constructs a unit when the supplied prelude has the validated standar
7676
7777A known union of `~` and a null-headed cell can be matched by `~` and `[~ value]` arms in either order. The payload binder is checked for shadowing. Unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported; this fragment infers the prelude’s `fall` and `need` signatures.
7878
79−A known closed union with two or more arms can be matched when each arm provably covers or excludes each remaining case. The checker first tries whole cases; when a pattern splits a case, it can expand known `?` positions into their two noun values, up to 64 alternatives across the union. Binders retain the original case type, and one arm may bind several refinements of that case. It reports missing alternatives and arms already covered, checks tags by noun value, and supports imported and generic union cases. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported; contextual union-pattern branches also remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked.
79+A known closed union with two or more arms can be matched when each arm provably covers or excludes each remaining case. The checker first tries whole cases; when a pattern splits a case, it can expand known `?` positions into their two noun values, up to 64 alternatives across the union. Binders retain the original case type, and one arm may bind several refinements of that case. It reports missing alternatives and arms already covered, checks tags by noun value, and supports imported and generic union cases. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. When a cast or known call sample supplies a result type, a known union subject accessed by a wing can propagate that context through whole-case arms, including nested cell and list positions. Partial-pattern context and non-wing subjects remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked.
8080
8181A known closed union can also provide context to each arm of a complete loobean or unit-shaped 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.
8282
83−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, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. 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, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments 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. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. 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.
83+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, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. 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, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments 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. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. 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/type-tlon-test` and its ship counterpart exercise four real Tlon presence unions and a field read through the source-aware reader and partial checker. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
8484
8585Self-recursive `/sur` molds can cross the bridge as opaque module-and-name identities when their supported source-aware graph passes validation. Aliases, foreign references, recursive marks, unfolding, construction and field access remain unsupported; the partial printer declines recursive names that are not in scope.
8686
docs/development.md+3−1
@@ -61,6 +61,7 @@ git clone https://github.com/urbit/tools /root/src/tools
6161| `tools/golden` | Runs the golden cases under `urbit eval`: every case, or those matching `--case`; `--update` rewrites the expected outputs; `--show` prints them |
6262| `tools/importer-test` | Compares the partial Hoon importer's diagnostic trees and errors with `tests/importer/tree.txt` under `urbit eval` |
6363| `tools/type-import-test` | Composes the Hoon importer with the partial checker and compares `tests/type-import/expected.txt` under eval |
64+| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
6465| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
6566| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
6667| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary and duplicate-source rejection against `tests/type-module-scope/expected.txt` under eval |
@@ -79,6 +80,7 @@ git clone https://github.com/urbit/tools /root/src/tools
7980tools/golden # all cases pass
8081tools/importer-test # Hoon importer fixture projections match
8182tools/type-import-test # importer/checker bridge golden report matches
83+tools/type-tlon-test # real Tlon importer/checker report matches
8284tools/type-import-diagnostic-test # direct structured reader diagnostics match
8385tools/type-mark-test # mark/checker bridge golden report matches
8486tools/type-module-scope-test # module/prelude scope golden report matches
@@ -92,7 +94,7 @@ tools/ship check-commit # when the mark or the desks changed
9294tools/clay-fixtures # when the my-app Hoon fixtures or importer changed
9395```
9496
95−`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. It also runs the independent `tests/lib/jibb-import.hoon` test against the same importer fixtures and expected diagnostic projection as `tools/importer-test`. The projection is an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` also runs the importer/checker bridge fixture on the ship; `tools/type-import-test` runs the same report under eval. The structured reader diagnostics have their own `tests/lib/jibb-import-diagnostic.hoon` ship test and `tools/type-import-diagnostic-test` eval test. The mark bridge has its own `tests/lib/jibb-mark-bridge.hoon` ship test and `tools/type-mark-test` eval test; both compare the same fixture report. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
97+`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. It also runs the independent `tests/lib/jibb-import.hoon` test against the same importer fixtures and expected diagnostic projection as `tools/importer-test`. The projection is an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` also runs the importer/checker bridge fixture on the ship; `tools/type-import-test` runs the same report under eval. `tests/lib/jibb-tlon-bridge.hoon` and `tools/type-tlon-test` run the real Tlon presence reader/checker fixture on both. The structured reader diagnostics have their own `tests/lib/jibb-import-diagnostic.hoon` ship test and `tools/type-import-diagnostic-test` eval test. The mark bridge has its own `tests/lib/jibb-mark-bridge.hoon` ship test and `tools/type-mark-test` eval test; both compare the same fixture report. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
9698
9799## Golden cases
98100
docs/status.md+7−6
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Tagged `$%` cases can additionally use restricted local named payload molds, with a bounded source proof; unsupported or ambiguous dependencies fail closed. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Local mutual groups, polymorphic recursion, value cycles, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. A single-arm cell pattern accepts two or more binders, the last capturing the remaining tail; duplicate and shadowed binders are rejected. Intermediate union or collection tails, nested patterns, wildcards and faced records remain unsupported. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types, some complex two-arm subjects and contextual union-pattern branches remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. A bare tag proved absent from a known union reports the union and tag sites in casts, single-argument calls, unit payloads, list items and supported branch arms; imported unnamed unions print their cases. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. The cart-store example’s `init` and `update` now infer, while its kind, declarations and full module remain unchecked. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Ordinary result annotations also let its `bind`, `biff`, `both`, `clap`, `clef` and `flit` infer. A known unit in a cast, call, list item or record field supplies context to its payload, including nested units and lists; mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; mutually recursive local groups and recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms, term singletons, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Tagged `$%` cases can additionally use restricted local named payload molds, with a bounded source proof; unsupported or ambiguous dependencies fail closed. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Local mutual groups, polymorphic recursion, value cycles, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. A single-arm cell pattern accepts two or more binders, the last capturing the remaining tail; duplicate and shadowed binders are rejected. Intermediate union or collection tails, nested patterns, wildcards and faced records remain unsupported. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. A cast or known call sample can supply result context through whole-case arms for a known union accessed by a wing, including nested cell and list positions; partial-pattern context and non-wing subjects remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. A bare tag proved absent from a known union reports the union and tag sites in casts, single-argument calls, unit payloads, list items and supported branch arms; imported unnamed unions print their cases. Ordered fit replay can identify a missing tag nested in a syntactic tuple, stopping at an earlier mismatch or uncertainty. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. The cart-store example’s `init` and `update` now infer, while its kind, declarations and full module remain unchecked. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Ordinary result annotations also let its `bind`, `biff`, `both`, `clap`, `clef` and `flit` infer. A known unit in a cast, call, list item or record field supplies context to its payload, including nested units and lists; mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Uncontextualized list construction, unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; mutually recursive local groups and recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
2323
2424The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc` and `turn`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. List-dependent prelude mold aliases remain unsupported because their templates are prepared before injection. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
2525
@@ -39,8 +39,8 @@ What the plan asks for, and where it is:
3939
4040Besides the plan's list:
4141
42−- 542 golden cases: 326 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43−- The 542-case corpus passed under `urbit eval` in 62.7 s. The fake ship passed all 548 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 40.0 s for sync and 50.3 s for tests. The importer golden compares 169 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
42+- 545 golden cases: 329 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43+- The 545-case corpus passed under `urbit eval` in 65.5 s. The fake ship passed all 552 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 40.7 s for sync and 20.3 s for tests. The importer golden compares 169 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
4444- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4545- Two independent audits before 7c739b7, one of which compared the library with a reference parser written in Python from the doc over about 19,000 generated programs. Before ab797a9, a second Python parser, written from the decisions, agreed with the library on 8,000 generated programs and 900 hand-written probes.
4646- Speed: starting `urbit eval` and building the library takes about 8 s. After that, a 2,000-line module of 400 definitions parses in about a second. Loops over definitions, arms, lines and items grow no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (library section 3).
@@ -101,14 +101,15 @@ Besides the plan's list:
101101| 264a436 | 2026-10-31 | Contextualize unit payloads in casts, calls and nested values |
102102| a140383 | 2026-10-31 | Report missing union tags and infer prelude unit helpers |
103103| d69cc52 | 2026-10-31 | Infer longer cell binder patterns and prelude unit helpers |
104−| This change | 2026-10-31 | Import source-verified tagged Hoon unions |
104+| ae35005 | 2026-10-31 | Import source-verified tagged Hoon unions |
105+| This change | 2026-10-31 | Report nested missing tags and contextualize union branch results |
105106
106107## Checking it
107108
108109On a machine set up as [development.md](development.md) says:
109110
110111```
111−tools/golden # 542 cases under urbit eval
112+tools/golden # 545 cases under urbit eval
112113tools/importer-test # the Hoon importer fixture projection
113114tools/type-import-test # the importer/checker bridge fixture
114115tools/type-mark-test # the mark/checker bridge fixture
@@ -118,7 +119,7 @@ tools/testdata/selftest # the tools themselves
118119tools/doc-blocks docs/spec # the doc's examples are golden cases
119120tools/ship start
120121tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
121−tools/ship test # the same 542 cases as -test arms on the ship
122+tools/ship test # the same 545 cases as -test arms on the ship
122123tools/testdata/ship-selftest
123124tools/ship check-commit # |commit stores .jibb files
124125tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb.hoon+104
@@ -6456,6 +6456,8 @@
64566456 ?: ?=(%bad -.fit)
64576457 =/ missing=(unit idiag) (missing-union-tag e expected sub.state.p.value context)
64586458 ?^ missing [%| u.missing]
6459+ =/ nested=(unit idiag) (nested-missing-tag e typ.p.value expected sub.state.p.value next.state.p.value context)
6460+ ?^ nested [%| u.nested]
64596461 ?: &(?=(%collection -.expected) =(%list name.expected))
64606462 [%| ["branch arm does not fit its expected list" ~[[context "expected list"] [(span-of e) "branch arm"]]]]
64616463 [%| ["branch arm does not fit its expected union" ~[[context "expected union"] [(span-of e) "branch arm"]]]]
@@ -6534,6 +6536,8 @@
65346536 ?: ?=(%bad -.fit)
65356537 =/ missing=(unit idiag) (missing-union-tag i.items target sub.state.p.value context)
65366538 ?^ missing [%| u.missing]
6539+ =/ nested=(unit idiag) (nested-missing-tag i.items typ.p.value target sub.state.p.value next.state.p.value context)
6540+ ?^ nested [%| u.nested]
65376541 [%| ["list item does not fit its expected type" ~[[context (site-type-note "expected item" target sub.state.p.value)] [(span-of i.items) (site-type-note "list item" typ.p.value sub.state.p.value)]]]]
65386542 $(items t.items, state state.p.value(sub sub.fit, next next.fit))
65396543::
@@ -6848,6 +6852,51 @@
68486852 ?: mismatch `[%| ["union branch result matching needs unsupported inference" ~]]
68496853 $(arms t.arms, remaining (skim remaining |=(c=itype !=(%full (union-pattern pat.a c)))), st state.p.body, answer `result)
68506854::
6855+++ infer-known-union-context
6856+ |= [e=expr expected=itype env=ienv state=istate context=span]
6857+ ^- iresult
6858+ ?> ?=(%branch -.e)
6859+ =/ subject=iresult (infer-fragment subject.e env state)
6860+ ?: ?=(%| -.subject) subject
6861+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
6862+ ?. ?=(%union -.typ) [%| ["branch is not supported by partial inference" ~]]
6863+ =/ cases=(list itype) cases.typ
6864+ =/ remaining=(list itype) cases
6865+ =/ arms=(list arm) arms.e
6866+ =/ st=istate state.p.subject
6867+ =/ answer=(unit itype) ~
6868+ |-
6869+ ?~ arms
6870+ ?^ remaining
6871+ [%| ["missing union case {(show-itype i.remaining sub.st)}" ~]]
6872+ ?~ answer [%| ["empty union branch is not supported by partial inference" ~]]
6873+ [%& expected st]
6874+ =/ a=arm i.arms
6875+ ?: (lien remaining |=(c=itype =(%unknown (union-pattern pat.a c))))
6876+ [%| ["partial union pattern is not supported by partial inference" ~]]
6877+ =/ matching=(list itype) (skim remaining |=(c=itype =(%full (union-pattern pat.a c))))
6878+ ?~ matching
6879+ ?: (lien cases |=(c=itype =(%full (union-pattern pat.a c))))
6880+ [%| ["branch arm is covered by earlier arms" ~[[at.pat.a "covered arm"]]]]
6881+ [%| ["union pattern is not supported by partial inference" ~]]
6882+ ?: &(?=(^ t.matching) (union-pattern-has-bind pat.a))
6883+ [%| ["a union pattern binding several cases is not supported by partial inference" ~]]
6884+ =/ bound=(unit ienv) (union-pattern-bind pat.a i.matching env globals.st)
6885+ ?~ bound [%| ["pattern binder shadows a name" ~]]
6886+ =/ body=iresult (infer-call-context-arg val.a expected u.bound st context)
6887+ ?: ?=(%| -.body) body
6888+ =/ fit=ifit (itype-fit typ.p.body expected sub.state.p.body next.state.p.body)
6889+ ?: ?=(%unknown -.fit) [%| ["union branch result constraint is not supported by partial inference" ~]]
6890+ ?: ?=(%bad -.fit)
6891+ =/ missing=(unit idiag) (missing-union-tag val.a expected sub.state.p.body context)
6892+ ?^ missing [%| u.missing]
6893+ =/ nested=(unit idiag) (nested-missing-tag val.a typ.p.body expected sub.state.p.body next.state.p.body context)
6894+ ?^ nested [%| u.nested]
6895+ [%| ["union branch arm does not fit its expected type" ~[[context "expected type"] [(span-of val.a) "branch arm"]]]]
6896+ ?: (itype-has-tag (itype-normalize expected sub.fit))
6897+ [%| ["union branch result needs context in partial inference" ~]]
6898+ $(arms t.arms, remaining (skim remaining |=(c=itype !=(%full (union-pattern pat.a c)))), st state.p.body(sub sub.fit, next next.fit), answer `expected)
6899+::
68516900++ infer-known-union-finite
68526901 |= [e=expr env=ienv state=istate]
68536902 ^- iresult
@@ -7003,6 +7052,44 @@
70037052 (show-itype expected sub)
70047053 `["{label} has no case `{(trip txt.lit.e)}`" ~[[context "expected union"] [(span-of e) "tag"]]]
70057054::
7055+:: Locate a missing tag inside a syntactic tuple only by replaying the
7056+:: directional fit in source order. Uncertain or earlier failures stop
7057+:: the walk, preserving the generic diagnostic rather than guessing.
7058+++ nested-missing-tag
7059+ |= [e=expr actual=itype expected=itype sub=isub next=@ud context=span]
7060+ ^- (unit idiag)
7061+ =/ original=[left=itype right=itype] [actual expected]
7062+ ?: |(?=(%var -.left.original) ?=(%avar -.left.original) ?=(%nvar -.left.original) ?=(%var -.right.original) ?=(%avar -.right.original) ?=(%nvar -.right.original)) ~
7063+ =/ fit=ifit (itype-fit actual expected sub next)
7064+ ?. ?=(%bad -.fit) ~
7065+ =. actual (itype-walk actual sub)
7066+ =. expected (itype-walk expected sub)
7067+ ?: &(?=(%face -.actual) ?=(%face -.expected))
7068+ ?. =(name.actual name.expected) ~
7069+ $(actual body.actual, expected body.expected)
7070+ ?: ?=(%face -.actual) $(actual body.actual)
7071+ ?: ?=(%face -.expected) $(expected body.expected)
7072+ =/ direct=(unit idiag) (missing-union-tag e expected sub context)
7073+ ?^ direct direct
7074+ ?. ?=(%tuple -.e) ~
7075+ (nested-missing-items items.e actual expected sub next context)
7076+::
7077+++ nested-missing-items
7078+ |= [items=(list item) actual=itype expected=itype sub=isub next=@ud context=span]
7079+ ^- (unit idiag)
7080+ ?~ items ~
7081+ ?~ t.items (nested-missing-tag val.i.items actual expected sub next context)
7082+ =/ original=[left=itype right=itype] [actual expected]
7083+ ?: |(?=(%var -.left.original) ?=(%avar -.left.original) ?=(%nvar -.left.original) ?=(%var -.right.original) ?=(%avar -.right.original) ?=(%nvar -.right.original)) ~
7084+ =. actual (itype-walk actual sub)
7085+ =. expected (itype-walk expected sub)
7086+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
7087+ =/ first=ifit (itype-fit hed.actual hed.expected sub next)
7088+ ?: ?=(%bad -.first)
7089+ (nested-missing-tag val.i.items hed.actual hed.expected sub next context)
7090+ ?. ?=(%ok -.first) ~
7091+ $(items t.items, actual tal.actual, expected tal.expected, sub sub.first, next next.first)
7092+::
70067093++ infer-fragment
70077094 |= [e=expr env=ienv state=istate]
70087095 ^- iresult
@@ -7143,6 +7230,8 @@
71437230 ?: ?=(%bad -.fit)
71447231 =/ missing=(unit idiag) (missing-union-tag val.e typ.u.target sub.state.p.value at.shape.e)
71457232 ?^ missing [%| u.missing]
7233+ =/ nested=(unit idiag) (nested-missing-tag val.e typ.p.value typ.u.target sub.state.p.value next.state.p.value at.shape.e)
7234+ ?^ nested [%| u.nested]
71467235 [%| ["cast mold and expression type do not unify" ~[[at.shape.e (site-type-note "cast mold" typ.u.target sub.state.p.value)] [(span-of val.e) (site-type-note "expression" typ.p.value sub.state.p.value)]]]]
71477236 =/ merged=itype (itype-merge-faces typ.p.value typ.u.target sub.fit)
71487237 [%& merged state.p.value(sub sub.fit, next next.fit)]
@@ -7188,6 +7277,8 @@
71887277 ?~ t.args.e
71897278 =/ missing=(unit idiag) (missing-union-tag i.args.e sample.ht sub.st (span-of head.e))
71907279 ?^ missing [%| u.missing]
7280+ =/ nested=(unit idiag) (nested-missing-tag i.args.e typ.p.arg sample.ht sub.st next.st (span-of head.e))
7281+ ?^ nested [%| u.nested]
71917282 [%| ["call's sample and argument types do not unify" ~[[(span-of head.e) (site-type-note "called gate" ht sub.st)] [(span-of i.args.e) (site-type-note "argument" typ.p.arg sub.st)]]]]
71927283 =/ bad=(unit [at=span typ=itype])
71937284 (call-error-site args.e typ.p.arg sample.ht sub.st next.st)
@@ -7261,15 +7352,28 @@
72617352 ?: ?=(%bad -.fit)
72627353 =/ missing=(unit idiag) (missing-union-tag val.e payload sub.state.p.value context)
72637354 ?^ missing [%| u.missing]
7355+ =/ nested=(unit idiag) (nested-missing-tag val.e typ.p.value payload sub.state.p.value next.state.p.value context)
7356+ ?^ nested [%| u.nested]
72647357 [%| ["unit payload does not fit its expected type" ~[[context (site-type-note "expected unit payload" payload sub.state.p.value)] [(span-of val.e) (site-type-note "payload" typ.p.value sub.state.p.value)]]]]
72657358 [%& expected state.p.value(sub sub.fit, next next.fit)]
72667359::
72677360++ infer-call-context-arg
72687361 |= [e=expr expected=itype env=ienv state=istate context=span]
72697362 ^- iresult
7363+ ?: ?=(%group -.e) $(e inner.e)
7364+ ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
7365+ ?: ?=(%trace -.e)
7366+ =/ traced=iresult (infer-fragment val.e env state)
7367+ ?: ?=(%| -.traced) traced
7368+ $(e then.e, state state.p.traced)
72707369 =/ target=itype (itype-walk expected sub.state)
72717370 |-
72727371 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
7372+ =/ known=(unit itype)
7373+ ?: ?=(%branch -.e) (known-union-subject subject.e env state)
7374+ ~
7375+ ?: &(?=(^ known) ?=(~ (unit-union-payload u.known)))
7376+ (infer-known-union-context e target env state context)
72737377 ?: &(?=(%union -.target) ?=(%unit -.e))
72747378 (infer-unit-context e target env state context)
72757379 ?: &(?=(%union -.target) (context-union-branch e))
tests/golden/types-missing-tag-named/types.txt+4−4
@@ -32,13 +32,13 @@ partial inference; module not checked
3232/tests/golden/types-missing-tag-named/source.jibb:13:20: expression
3333++ tag-only ^- msg %typed
3434 ^
35−++ nested: cast mold and expression type do not unify
36−/tests/golden/types-missing-tag-named/source.jibb:14:14: cast mold
35+++ nested: msg has no case `%submitt`
36+/tests/golden/types-missing-tag-named/source.jibb:14:14: expected union
3737++ nested ^- wrapped [%wrapper %submitt]
3838 ^
39−/tests/golden/types-missing-tag-named/source.jibb:14:22: expression
39+/tests/golden/types-missing-tag-named/source.jibb:14:32: tag
4040++ nested ^- wrapped [%wrapper %submitt]
41− ^
41+ ^
4242++ generic: (choice @t) has no case `%missing`
4343/tests/golden/types-missing-tag-named/source.jibb:15:15: expected union
4444++ generic ^- (choice @t) %missing
tests/golden/types-nested-missing-tag/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Tag resolution: "A literal that matches nothing is an error naming the union, such as `msg has no case %submitt`." Type errors name both conflicting sites.
2+tests: A missing tag inside a tuple or record names its union and tag site in casts, calls, unit payloads and list items. An earlier incompatible field or a wrong written face keeps the original mismatch; nested tuples work too. An unconstrained tag remains pending, and a written capital is not forced by diagnostic replay.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-nested-missing-tag/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-nested-missing-tag/source.jibbnew file+18
@@ -0,0 +1,18 @@
1++$ msg
2+ %add
3+ %remove
4++$ state [title=@t choice=msg]
5++$ nested-state [inner=state count=@ud]
6+++ valid ^- state ["hi" %add]
7+++ bad ^- state ["hi" %missing]
8+++ earlier ^- state [~zod %missing]
9+++ face ^- state [other="hi" choice=%missing]
10+++ nested ^- nested-state [["hi" %missing] 7]
11+++ face-tag ^- state [title="hi" wrong=%missing]
12+++ take |= x=state x
13+++ bad-call (take ["hi" %missing])
14+++ bad-unit ^- (unit state) `["hi" %missing]
15+++ bad-list ^- (list state) ~[["hi" %missing]]
16+++ pending |= f (f ["hi" %missing])
17+++ variable |= x=A ^- [A msg] [x %missing]
18+++ unresolved |= x=A ^- [A A] [x %missing]
tests/golden/types-nested-missing-tag/tokens.txtnew file+184
@@ -0,0 +1,184 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %add
5+3:3 NEWLINE
6+3:3 lit %remove
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph +$
10+4:4 name state
11+4:10 glyph [
12+4:11 tight name title
13+4:16 tight glyph =
14+4:17 tight aura @t
15+4:20 name choice
16+4:26 tight glyph =
17+4:27 tight name msg
18+4:30 tight glyph ]
19+5:1 NEWLINE
20+5:1 glyph +$
21+5:4 name nested-state
22+5:17 glyph [
23+5:18 tight name inner
24+5:23 tight glyph =
25+5:24 tight name state
26+5:30 name count
27+5:35 tight glyph =
28+5:36 tight aura @ud
29+5:39 tight glyph ]
30+6:1 NEWLINE
31+6:1 glyph ++
32+6:4 name valid
33+6:10 glyph ^-
34+6:13 name state
35+6:19 glyph [
36+6:20 tight str "hi"
37+6:25 lit %add
38+6:29 tight glyph ]
39+7:1 NEWLINE
40+7:1 glyph ++
41+7:4 name bad
42+7:8 glyph ^-
43+7:11 name state
44+7:17 glyph [
45+7:18 tight str "hi"
46+7:23 lit %missing
47+7:31 tight glyph ]
48+8:1 NEWLINE
49+8:1 glyph ++
50+8:4 name earlier
51+8:12 glyph ^-
52+8:15 name state
53+8:21 glyph [
54+8:22 tight lit ~zod
55+8:27 lit %missing
56+8:35 tight glyph ]
57+9:1 NEWLINE
58+9:1 glyph ++
59+9:4 name face
60+9:9 glyph ^-
61+9:12 name state
62+9:18 glyph [
63+9:19 tight name other
64+9:24 tight glyph =
65+9:25 tight str "hi"
66+9:30 name choice
67+9:36 tight glyph =
68+9:37 tight lit %missing
69+9:45 tight glyph ]
70+10:1 NEWLINE
71+10:1 glyph ++
72+10:4 name nested
73+10:11 glyph ^-
74+10:14 name nested-state
75+10:27 glyph [
76+10:28 tight glyph [
77+10:29 tight str "hi"
78+10:34 lit %missing
79+10:42 tight glyph ]
80+10:44 lit 7
81+10:45 tight glyph ]
82+11:1 NEWLINE
83+11:1 glyph ++
84+11:4 name face-tag
85+11:13 glyph ^-
86+11:16 name state
87+11:22 glyph [
88+11:23 tight name title
89+11:28 tight glyph =
90+11:29 tight str "hi"
91+11:34 name wrong
92+11:39 tight glyph =
93+11:40 tight lit %missing
94+11:48 tight glyph ]
95+12:1 NEWLINE
96+12:1 glyph ++
97+12:4 name take
98+12:9 glyph |=
99+12:12 name x
100+12:13 tight glyph =
101+12:14 tight name state
102+12:20 name x
103+13:1 NEWLINE
104+13:1 glyph ++
105+13:4 name bad-call
106+13:13 glyph (
107+13:14 tight name take
108+13:19 glyph [
109+13:20 tight str "hi"
110+13:25 lit %missing
111+13:33 tight glyph ]
112+13:34 tight glyph )
113+14:1 NEWLINE
114+14:1 glyph ++
115+14:4 name bad-unit
116+14:13 glyph ^-
117+14:16 glyph (
118+14:17 tight name unit
119+14:22 name state
120+14:27 tight glyph )
121+14:29 glyph `
122+14:30 tight glyph [
123+14:31 tight str "hi"
124+14:36 lit %missing
125+14:44 tight glyph ]
126+15:1 NEWLINE
127+15:1 glyph ++
128+15:4 name bad-list
129+15:13 glyph ^-
130+15:16 glyph (
131+15:17 tight name list
132+15:22 name state
133+15:27 tight glyph )
134+15:29 glyph ~[
135+15:31 tight glyph [
136+15:32 tight str "hi"
137+15:37 lit %missing
138+15:45 tight glyph ]
139+15:46 tight glyph ]
140+16:1 NEWLINE
141+16:1 glyph ++
142+16:4 name pending
143+16:12 glyph |=
144+16:15 name f
145+16:17 glyph (
146+16:18 tight name f
147+16:20 glyph [
148+16:21 tight str "hi"
149+16:26 lit %missing
150+16:34 tight glyph ]
151+16:35 tight glyph )
152+17:1 NEWLINE
153+17:1 glyph ++
154+17:4 name variable
155+17:13 glyph |=
156+17:16 name x
157+17:17 tight glyph =
158+17:18 tight tvar A
159+17:20 glyph ^-
160+17:23 glyph [
161+17:24 tight tvar A
162+17:26 name msg
163+17:29 tight glyph ]
164+17:31 glyph [
165+17:32 tight name x
166+17:34 lit %missing
167+17:42 tight glyph ]
168+18:1 NEWLINE
169+18:1 glyph ++
170+18:4 name unresolved
171+18:15 glyph |=
172+18:18 name x
173+18:19 tight glyph =
174+18:20 tight tvar A
175+18:22 glyph ^-
176+18:25 glyph [
177+18:26 tight tvar A
178+18:28 tvar A
179+18:29 tight glyph ]
180+18:31 glyph [
181+18:32 tight name x
182+18:34 lit %missing
183+18:42 tight glyph ]
184+18:43 NEWLINE
tests/golden/types-nested-missing-tag/tree.txtnew file+79
@@ -0,0 +1,79 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3 (const 2:3 %add) (const 3:3 %remove)))
4+ (mold 4:1 state
5+ (cell 4:10
6+ (face 4:11 title (aura 4:17 @t))
7+ (face 4:20 choice (ref 4:27 msg))))
8+ (mold 5:1 nested-state
9+ (cell 5:17
10+ (face 5:18 inner (ref 5:24 state))
11+ (face 5:30 count (aura 5:36 @ud))))
12+ (value 6:1 valid
13+ (cast 6:10
14+ (ref 6:13 state)
15+ (tuple 6:19 (str 6:20 "hi") (lit 6:25 %add))))
16+ (value 7:1 bad
17+ (cast 7:8
18+ (ref 7:11 state)
19+ (tuple 7:17 (str 7:18 "hi") (lit 7:23 %missing))))
20+ (value 8:1 earlier
21+ (cast 8:12
22+ (ref 8:15 state)
23+ (tuple 8:21 (lit 8:22 ~zod) (lit 8:27 %missing))))
24+ (value 9:1 face
25+ (cast 9:9
26+ (ref 9:12 state)
27+ (tuple 9:18
28+ (face 9:19 other (str 9:25 "hi"))
29+ (face 9:30 choice (lit 9:37 %missing)))))
30+ (value 10:1 nested
31+ (cast 10:11
32+ (ref 10:14 nested-state)
33+ (tuple 10:27
34+ (tuple 10:28 (str 10:29 "hi") (lit 10:34 %missing))
35+ (lit 10:44 7))))
36+ (value 11:1 face-tag
37+ (cast 11:13
38+ (ref 11:16 state)
39+ (tuple 11:22
40+ (face 11:23 title (str 11:29 "hi"))
41+ (face 11:34 wrong (lit 11:40 %missing)))))
42+ (value 12:1 take
43+ (gate 12:9
44+ (face 12:12 x (ref 12:14 state))
45+ (wing 12:20 x)))
46+ (value 13:1 bad-call
47+ (group 13:13
48+ (call 13:14
49+ (wing 13:14 take)
50+ (tuple 13:19 (str 13:20 "hi") (lit 13:25 %missing)))))
51+ (value 14:1 bad-unit
52+ (cast 14:13
53+ (apply 14:16 unit (ref 14:22 state))
54+ (unit 14:29
55+ (tuple 14:30 (str 14:31 "hi") (lit 14:36 %missing)))))
56+ (value 15:1 bad-list
57+ (cast 15:13
58+ (apply 15:16 list (ref 15:22 state))
59+ (list 15:29
60+ (tuple 15:31 (str 15:32 "hi") (lit 15:37 %missing)))))
61+ (value 16:1 pending
62+ (gate 16:12
63+ (bind 16:15 f)
64+ (group 16:17
65+ (call 16:18
66+ (wing 16:18 f)
67+ (tuple 16:20 (str 16:21 "hi") (lit 16:26 %missing))))))
68+ (value 17:1 variable
69+ (gate 17:13
70+ (face 17:16 x (tvar 17:18 A))
71+ (cast 17:20
72+ (cell 17:23 (tvar 17:24 A) (ref 17:26 msg))
73+ (tuple 17:31 (wing 17:32 x) (lit 17:34 %missing)))))
74+ (value 18:1 unresolved
75+ (gate 18:15
76+ (face 18:18 x (tvar 18:20 A))
77+ (cast 18:22
78+ (cell 18:25 (tvar 18:26 A) (tvar 18:28 A))
79+ (tuple 18:31 (wing 18:32 x) (lit 18:34 %missing))))))
tests/golden/types-nested-missing-tag/types.txtnew file+71
@@ -0,0 +1,71 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ state: not checked
4++$ nested-state: not checked
5+++ valid: [title=@t choice=msg]
6+++ bad: msg has no case `%missing`
7+/tests/golden/types-nested-missing-tag/source.jibb:7:11: expected union
8+++ bad ^- state ["hi" %missing]
9+ ^
10+/tests/golden/types-nested-missing-tag/source.jibb:7:23: tag
11+++ bad ^- state ["hi" %missing]
12+ ^
13+++ earlier: cast mold and expression type do not unify
14+/tests/golden/types-nested-missing-tag/source.jibb:8:15: cast mold
15+++ earlier ^- state [~zod %missing]
16+ ^
17+/tests/golden/types-nested-missing-tag/source.jibb:8:21: expression
18+++ earlier ^- state [~zod %missing]
19+ ^
20+++ face: cast mold and expression type do not unify
21+/tests/golden/types-nested-missing-tag/source.jibb:9:12: cast mold
22+++ face ^- state [other="hi" choice=%missing]
23+ ^
24+/tests/golden/types-nested-missing-tag/source.jibb:9:18: expression
25+++ face ^- state [other="hi" choice=%missing]
26+ ^
27+++ nested: msg has no case `%missing`
28+/tests/golden/types-nested-missing-tag/source.jibb:10:14: expected union
29+++ nested ^- nested-state [["hi" %missing] 7]
30+ ^
31+/tests/golden/types-nested-missing-tag/source.jibb:10:34: tag
32+++ nested ^- nested-state [["hi" %missing] 7]
33+ ^
34+++ face-tag: cast mold and expression type do not unify
35+/tests/golden/types-nested-missing-tag/source.jibb:11:16: cast mold
36+++ face-tag ^- state [title="hi" wrong=%missing]
37+ ^
38+/tests/golden/types-nested-missing-tag/source.jibb:11:22: expression
39+++ face-tag ^- state [title="hi" wrong=%missing]
40+ ^
41+++ take: $-([title=@t choice=msg] [title=@t choice=msg])
42+++ bad-call: msg has no case `%missing`
43+/tests/golden/types-nested-missing-tag/source.jibb:13:14: expected union
44+++ bad-call (take ["hi" %missing])
45+ ^
46+/tests/golden/types-nested-missing-tag/source.jibb:13:25: tag
47+++ bad-call (take ["hi" %missing])
48+ ^
49+++ bad-unit: msg has no case `%missing`
50+/tests/golden/types-nested-missing-tag/source.jibb:14:16: expected union
51+++ bad-unit ^- (unit state) `["hi" %missing]
52+ ^
53+/tests/golden/types-nested-missing-tag/source.jibb:14:36: tag
54+++ bad-unit ^- (unit state) `["hi" %missing]
55+ ^
56+++ bad-list: msg has no case `%missing`
57+/tests/golden/types-nested-missing-tag/source.jibb:15:16: expected union
58+++ bad-list ^- (list state) ~[["hi" %missing]]
59+ ^
60+/tests/golden/types-nested-missing-tag/source.jibb:15:37: tag
61+++ bad-list ^- (list state) ~[["hi" %missing]]
62+ ^
63+++ pending: tag needs context in partial inference
64+++ variable: msg has no case `%missing`
65+/tests/golden/types-nested-missing-tag/source.jibb:17:23: expected union
66+++ variable |= x=A ^- [A msg] [x %missing]
67+ ^
68+/tests/golden/types-nested-missing-tag/source.jibb:17:34: tag
69+++ variable |= x=A ^- [A msg] [x %missing]
70+ ^
71+++ unresolved: explicit capital constraints are not supported by partial inference
tests/golden/types-record-cast-context/types.txt+4−4
@@ -21,13 +21,13 @@ partial inference; module not checked
2121/tests/golden/types-record-cast-context/source.jibb:12:25: expression
2222++ wrong-count ^- inner [%go ~ "extra"]
2323 ^
24−++ wrong-tag: cast mold and expression type do not unify
25−/tests/golden/types-record-cast-context/source.jibb:13:17: cast mold
24+++ wrong-tag: msg has no case `%oops`
25+/tests/golden/types-record-cast-context/source.jibb:13:17: expected union
2626++ wrong-tag ^- inner [%oops ~]
2727 ^
28−/tests/golden/types-record-cast-context/source.jibb:13:23: expression
28+/tests/golden/types-record-cast-context/source.jibb:13:24: tag
2929++ wrong-tag ^- inner [%oops ~]
30− ^
30+ ^
3131++ wrong-item: list item does not fit its expected type
3232/tests/golden/types-record-cast-context/source.jibb:14:18: expected item has type @t
3333++ wrong-item ^- inner [%go ~[~zod]]
tests/golden/types-tuple-context-nested/types.txt+4−4
@@ -2,13 +2,13 @@ partial inference; module not checked
22+$ msg: cases proven disjoint; mold not checked
33++ take: $-([payload=msg xs=(list @t)] [payload=msg xs=(list @t)])
44++ ok: [payload=msg xs=(list @t)]
5−++ bad-tag: call's sample and argument types do not unify
6−/tests/golden/types-tuple-context-nested/source.jibb:6:13: called gate
5+++ bad-tag: msg has no case `%oops`
6+/tests/golden/types-tuple-context-nested/source.jibb:6:13: expected union
77++ bad-tag (take [payload=%oops xs=~])
88 ^
9−/tests/golden/types-tuple-context-nested/source.jibb:6:18: argument
9+/tests/golden/types-tuple-context-nested/source.jibb:6:27: tag
1010++ bad-tag (take [payload=%oops xs=~])
11− ^
11+ ^
1212++ bad-face: call's sample and argument types do not unify
1313/tests/golden/types-tuple-context-nested/source.jibb:7:14: called gate
1414++ bad-face (take [wrong=%go xs=~])
tests/golden/types-union-pattern-result-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Patterns: `?-` is exhaustive and an earlier arm makes a covered arm an error; Literals by context: `~` and cells take their type from context.
2+tests: A known union subject with whole-case arms receives a result context through casts, including list and cell positions. Missing and covered arms, incorrect results, unresolved tags and explicit capitals are checked or kept unsupported; partial and non-wing patterns remain unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-union-pattern-result-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-union-pattern-result-context/source.jibbnew file+25
@@ -0,0 +1,25 @@
1++$ msg
2+ [%noted text=@t]
3+ %clear
4++$ state [text=@t]
5+++ update |= [a=msg s=state]
6+ ^- [state (list @t)]
7+ ?- a
8+ [%noted txt] [s(text=txt) ~[txt]]
9+ %clear [s ~]
10+++ bad |= [a=msg s=state]
11+ ^- [state (list @t)]
12+ ?- a
13+ [%noted txt] [s(text=txt) ~[~zod]]
14+ %clear [s ~]
15+++ missing |= [a=msg s=state]
16+ ^- [state (list @t)]
17+ ?- a
18+ %clear [s ~]
19+++ pending |= [a=msg s=state]
20+ ^- [state (list @t)]
21+ ?- a
22+ [%noted txt]
23+ ~& %unknown
24+ [s(text=txt) ~]
25+ %clear [s ~]
tests/golden/types-union-pattern-result-context/tokens.txtnew file+205
@@ -0,0 +1,205 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %noted
6+2:11 name text
7+2:15 tight glyph =
8+2:16 tight aura @t
9+2:18 tight glyph ]
10+3:3 NEWLINE
11+3:3 lit %clear
12+4:1 DEDENT
13+4:1 NEWLINE
14+4:1 glyph +$
15+4:4 name state
16+4:10 glyph [
17+4:11 tight name text
18+4:15 tight glyph =
19+4:16 tight aura @t
20+4:18 tight glyph ]
21+5:1 NEWLINE
22+5:1 glyph ++
23+5:4 name update
24+5:11 glyph |=
25+5:14 glyph [
26+5:15 tight name a
27+5:16 tight glyph =
28+5:17 tight name msg
29+5:21 name s
30+5:22 tight glyph =
31+5:23 tight name state
32+5:28 tight glyph ]
33+6:3 INDENT
34+6:3 glyph ^-
35+6:6 glyph [
36+6:7 tight name state
37+6:13 glyph (
38+6:14 tight name list
39+6:19 aura @t
40+6:21 tight glyph )
41+6:22 tight glyph ]
42+7:5 INDENT
43+7:5 glyph ?-
44+7:8 name a
45+8:7 INDENT
46+8:7 glyph [
47+8:8 tight lit %noted
48+8:15 name txt
49+8:18 tight glyph ]
50+8:20 glyph [
51+8:21 tight name s
52+8:22 tight glyph (
53+8:23 tight name text
54+8:27 tight glyph =
55+8:28 tight name txt
56+8:31 tight glyph )
57+8:33 glyph ~[
58+8:35 tight name txt
59+8:38 tight glyph ]
60+8:39 tight glyph ]
61+9:7 NEWLINE
62+9:7 lit %clear
63+9:14 glyph [
64+9:15 tight name s
65+9:17 lit ~
66+9:18 tight glyph ]
67+10:1 DEDENT
68+10:1 DEDENT
69+10:1 DEDENT
70+10:1 NEWLINE
71+10:1 glyph ++
72+10:4 name bad
73+10:8 glyph |=
74+10:11 glyph [
75+10:12 tight name a
76+10:13 tight glyph =
77+10:14 tight name msg
78+10:18 name s
79+10:19 tight glyph =
80+10:20 tight name state
81+10:25 tight glyph ]
82+11:3 INDENT
83+11:3 glyph ^-
84+11:6 glyph [
85+11:7 tight name state
86+11:13 glyph (
87+11:14 tight name list
88+11:19 aura @t
89+11:21 tight glyph )
90+11:22 tight glyph ]
91+12:5 INDENT
92+12:5 glyph ?-
93+12:8 name a
94+13:7 INDENT
95+13:7 glyph [
96+13:8 tight lit %noted
97+13:15 name txt
98+13:18 tight glyph ]
99+13:20 glyph [
100+13:21 tight name s
101+13:22 tight glyph (
102+13:23 tight name text
103+13:27 tight glyph =
104+13:28 tight name txt
105+13:31 tight glyph )
106+13:33 glyph ~[
107+13:35 tight lit ~zod
108+13:39 tight glyph ]
109+13:40 tight glyph ]
110+14:7 NEWLINE
111+14:7 lit %clear
112+14:14 glyph [
113+14:15 tight name s
114+14:17 lit ~
115+14:18 tight glyph ]
116+15:1 DEDENT
117+15:1 DEDENT
118+15:1 DEDENT
119+15:1 NEWLINE
120+15:1 glyph ++
121+15:4 name missing
122+15:12 glyph |=
123+15:15 glyph [
124+15:16 tight name a
125+15:17 tight glyph =
126+15:18 tight name msg
127+15:22 name s
128+15:23 tight glyph =
129+15:24 tight name state
130+15:29 tight glyph ]
131+16:3 INDENT
132+16:3 glyph ^-
133+16:6 glyph [
134+16:7 tight name state
135+16:13 glyph (
136+16:14 tight name list
137+16:19 aura @t
138+16:21 tight glyph )
139+16:22 tight glyph ]
140+17:5 INDENT
141+17:5 glyph ?-
142+17:8 name a
143+18:7 INDENT
144+18:7 lit %clear
145+18:14 glyph [
146+18:15 tight name s
147+18:17 lit ~
148+18:18 tight glyph ]
149+19:1 DEDENT
150+19:1 DEDENT
151+19:1 DEDENT
152+19:1 NEWLINE
153+19:1 glyph ++
154+19:4 name pending
155+19:12 glyph |=
156+19:15 glyph [
157+19:16 tight name a
158+19:17 tight glyph =
159+19:18 tight name msg
160+19:22 name s
161+19:23 tight glyph =
162+19:24 tight name state
163+19:29 tight glyph ]
164+20:3 INDENT
165+20:3 glyph ^-
166+20:6 glyph [
167+20:7 tight name state
168+20:13 glyph (
169+20:14 tight name list
170+20:19 aura @t
171+20:21 tight glyph )
172+20:22 tight glyph ]
173+21:5 INDENT
174+21:5 glyph ?-
175+21:8 name a
176+22:7 INDENT
177+22:7 glyph [
178+22:8 tight lit %noted
179+22:15 name txt
180+22:18 tight glyph ]
181+23:9 INDENT
182+23:9 glyph ~&
183+23:12 lit %unknown
184+24:11 INDENT
185+24:11 glyph [
186+24:12 tight name s
187+24:13 tight glyph (
188+24:14 tight name text
189+24:18 tight glyph =
190+24:19 tight name txt
191+24:22 tight glyph )
192+24:24 lit ~
193+24:25 tight glyph ]
194+25:7 DEDENT
195+25:7 DEDENT
196+25:7 NEWLINE
197+25:7 lit %clear
198+25:14 glyph [
199+25:15 tight name s
200+25:17 lit ~
201+25:18 tight glyph ]
202+25:19 DEDENT
203+25:19 DEDENT
204+25:19 DEDENT
205+25:19 NEWLINE
tests/golden/types-union-pattern-result-context/tree.txtnew file+96
@@ -0,0 +1,96 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %noted)
6+ (face 2:11 text (aura 2:16 @t)))
7+ (const 3:3 %clear)))
8+ (mold 4:1 state
9+ (cell 4:10
10+ (face 4:11 text (aura 4:16 @t))))
11+ (value 5:1 update
12+ (gate 5:11
13+ (cell 5:14
14+ (face 5:15 a (ref 5:17 msg))
15+ (face 5:21 s (ref 5:23 state)))
16+ (body 6:3
17+ (cast 6:3
18+ (cell 6:6
19+ (ref 6:7 state)
20+ (apply 6:13 list (aura 6:19 @t)))
21+ (body 7:5
22+ (branch 7:5
23+ (wing 7:8 a)
24+ (arm 8:7
25+ (cell 8:7 (lit 8:8 %noted) (bind 8:15 txt))
26+ (tuple 8:20
27+ (change 8:21 s
28+ (edit 8:23 text (wing 8:28 txt)))
29+ (list 8:33 (wing 8:35 txt))))
30+ (arm 9:7
31+ (lit 9:7 %clear)
32+ (tuple 9:14 (wing 9:15 s) (lit 9:17 ~)))))))))
33+ (value 10:1 bad
34+ (gate 10:8
35+ (cell 10:11
36+ (face 10:12 a (ref 10:14 msg))
37+ (face 10:18 s (ref 10:20 state)))
38+ (body 11:3
39+ (cast 11:3
40+ (cell 11:6
41+ (ref 11:7 state)
42+ (apply 11:13 list (aura 11:19 @t)))
43+ (body 12:5
44+ (branch 12:5
45+ (wing 12:8 a)
46+ (arm 13:7
47+ (cell 13:7 (lit 13:8 %noted) (bind 13:15 txt))
48+ (tuple 13:20
49+ (change 13:21 s
50+ (edit 13:23 text (wing 13:28 txt)))
51+ (list 13:33 (lit 13:35 ~zod))))
52+ (arm 14:7
53+ (lit 14:7 %clear)
54+ (tuple 14:14 (wing 14:15 s) (lit 14:17 ~)))))))))
55+ (value 15:1 missing
56+ (gate 15:12
57+ (cell 15:15
58+ (face 15:16 a (ref 15:18 msg))
59+ (face 15:22 s (ref 15:24 state)))
60+ (body 16:3
61+ (cast 16:3
62+ (cell 16:6
63+ (ref 16:7 state)
64+ (apply 16:13 list (aura 16:19 @t)))
65+ (body 17:5
66+ (branch 17:5
67+ (wing 17:8 a)
68+ (arm 18:7
69+ (lit 18:7 %clear)
70+ (tuple 18:14 (wing 18:15 s) (lit 18:17 ~)))))))))
71+ (value 19:1 pending
72+ (gate 19:12
73+ (cell 19:15
74+ (face 19:16 a (ref 19:18 msg))
75+ (face 19:22 s (ref 19:24 state)))
76+ (body 20:3
77+ (cast 20:3
78+ (cell 20:6
79+ (ref 20:7 state)
80+ (apply 20:13 list (aura 20:19 @t)))
81+ (body 21:5
82+ (branch 21:5
83+ (wing 21:8 a)
84+ (arm 22:7
85+ (cell 22:7 (lit 22:8 %noted) (bind 22:15 txt))
86+ (body 23:9
87+ (trace 23:9
88+ (lit 23:12 %unknown)
89+ (body 24:11
90+ (tuple 24:11
91+ (change 24:12 s
92+ (edit 24:14 text (wing 24:19 txt)))
93+ (lit 24:24 ~))))))
94+ (arm 25:7
95+ (lit 25:7 %clear)
96+ (tuple 25:14 (wing 25:15 s) (lit 25:17 ~))))))))))
tests/golden/types-union-pattern-result-context/types.txtnew file+13
@@ -0,0 +1,13 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ state: not checked
4+++ update: $-([a=msg s=[text=@t]] [text=@t (list @t)])
5+++ bad: list item does not fit its expected type
6+/tests/golden/types-union-pattern-result-context/source.jibb:11:6: expected item has type @t
7+ ^- [state (list @t)]
8+ ^
9+/tests/golden/types-union-pattern-result-context/source.jibb:13:35: list item has type @p
10+ [%noted txt] [s(text=txt) ~[~zod]]
11+ ^
12+++ missing: missing union case [%noted text=@t]
13+++ pending: tag needs context in partial inference
tests/golden/types-union-pattern-result-controls/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Patterns: `?-` is exhaustive and an earlier arm makes a covered arm an error; Literals by context: `~` and cells take their type from context.
2+tests: A known union subject with whole-case arms receives a result context through casts, including list and cell positions. Missing and covered arms, incorrect results, unresolved tags and explicit capitals are checked or kept unsupported; partial and non-wing patterns remain unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-union-pattern-result-controls/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the prepared prelude.
tests/golden/types-union-pattern-result-controls/source.jibbnew file+55
@@ -0,0 +1,55 @@
1++$ msg
2+ [%text value=@t]
3+ %clear
4++$ reply
5+ %yes
6+ %no
7+++ choose |= a=msg ^- reply
8+ ?- a
9+ [%text v] %yes
10+ %clear %no
11+++ invalid |= a=msg ^- reply
12+ ?- a
13+ [%text v] %missing
14+ %clear %no
15+++ dead |= a=msg ^- (list @t)
16+ ?- a
17+ %clear ~
18+ %clear ~
19+ [%text v] ~[v]
20+++ unknown |= a=msg ^- (list @t)
21+ ?- a
22+ [%text "x"] ~[]
23+ %clear ~[]
24+ * ~[]
25+++ from-call |= x=(list @t) x
26+++ non-wing |= a=msg ^- (list @t)
27+ ?- (same a)
28+ %clear ~
29+ [%text v] ~[v]
30+++ generic |= [a=msg x=A] ^- (list A)
31+ ?- a
32+ %clear ~
33+ [%text v] ~[x]
34+++ generic-bad |= [a=msg x=A] ^- (list A)
35+ ?- a
36+ %clear ~
37+ [%text v] ~["hi"]
38+++ pending-tag |= a=msg ^- (list @t)
39+ ~& %missing
40+ ?- a
41+ %clear ~
42+ [%text v] ~[v]
43+++ unknown-target |= [a=msg x=A] ^- A
44+ ?- a
45+ [%text v] %yes
46+ %clear %no
47+++ nested-missing |= a=msg ^- [reply @t]
48+ ?- a
49+ [%text v] [%missing v]
50+ %clear [%yes "ok"]
51+++ argument |= a=msg
52+ (from-call
53+ ?- a
54+ %clear ~
55+ [%text v] ~[v]
tests/golden/types-union-pattern-result-controls/tokens.txtnew file+357
@@ -0,0 +1,357 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %text
6+2:10 name value
7+2:15 tight glyph =
8+2:16 tight aura @t
9+2:18 tight glyph ]
10+3:3 NEWLINE
11+3:3 lit %clear
12+4:1 DEDENT
13+4:1 NEWLINE
14+4:1 glyph +$
15+4:4 name reply
16+5:3 INDENT
17+5:3 lit %yes
18+6:3 NEWLINE
19+6:3 lit %no
20+7:1 DEDENT
21+7:1 NEWLINE
22+7:1 glyph ++
23+7:4 name choose
24+7:11 glyph |=
25+7:14 name a
26+7:15 tight glyph =
27+7:16 tight name msg
28+7:20 glyph ^-
29+7:23 name reply
30+8:3 INDENT
31+8:3 glyph ?-
32+8:6 name a
33+9:5 INDENT
34+9:5 glyph [
35+9:6 tight lit %text
36+9:12 name v
37+9:13 tight glyph ]
38+9:15 lit %yes
39+10:5 NEWLINE
40+10:5 lit %clear
41+10:12 lit %no
42+11:1 DEDENT
43+11:1 DEDENT
44+11:1 NEWLINE
45+11:1 glyph ++
46+11:4 name invalid
47+11:12 glyph |=
48+11:15 name a
49+11:16 tight glyph =
50+11:17 tight name msg
51+11:21 glyph ^-
52+11:24 name reply
53+12:3 INDENT
54+12:3 glyph ?-
55+12:6 name a
56+13:5 INDENT
57+13:5 glyph [
58+13:6 tight lit %text
59+13:12 name v
60+13:13 tight glyph ]
61+13:15 lit %missing
62+14:5 NEWLINE
63+14:5 lit %clear
64+14:12 lit %no
65+15:1 DEDENT
66+15:1 DEDENT
67+15:1 NEWLINE
68+15:1 glyph ++
69+15:4 name dead
70+15:9 glyph |=
71+15:12 name a
72+15:13 tight glyph =
73+15:14 tight name msg
74+15:18 glyph ^-
75+15:21 glyph (
76+15:22 tight name list
77+15:27 aura @t
78+15:29 tight glyph )
79+16:3 INDENT
80+16:3 glyph ?-
81+16:6 name a
82+17:5 INDENT
83+17:5 lit %clear
84+17:12 lit ~
85+18:5 NEWLINE
86+18:5 lit %clear
87+18:12 lit ~
88+19:5 NEWLINE
89+19:5 glyph [
90+19:6 tight lit %text
91+19:12 name v
92+19:13 tight glyph ]
93+19:15 glyph ~[
94+19:17 tight name v
95+19:18 tight glyph ]
96+20:1 DEDENT
97+20:1 DEDENT
98+20:1 NEWLINE
99+20:1 glyph ++
100+20:4 name unknown
101+20:12 glyph |=
102+20:15 name a
103+20:16 tight glyph =
104+20:17 tight name msg
105+20:21 glyph ^-
106+20:24 glyph (
107+20:25 tight name list
108+20:30 aura @t
109+20:32 tight glyph )
110+21:3 INDENT
111+21:3 glyph ?-
112+21:6 name a
113+22:5 INDENT
114+22:5 glyph [
115+22:6 tight lit %text
116+22:12 str "x"
117+22:15 tight glyph ]
118+22:17 glyph ~[
119+22:19 tight glyph ]
120+23:5 NEWLINE
121+23:5 lit %clear
122+23:12 glyph ~[
123+23:14 tight glyph ]
124+24:5 NEWLINE
125+24:5 glyph *
126+24:7 glyph ~[
127+24:9 tight glyph ]
128+25:1 DEDENT
129+25:1 DEDENT
130+25:1 NEWLINE
131+25:1 glyph ++
132+25:4 name from-call
133+25:14 glyph |=
134+25:17 name x
135+25:18 tight glyph =
136+25:19 tight glyph (
137+25:20 tight name list
138+25:25 aura @t
139+25:27 tight glyph )
140+25:29 name x
141+26:1 NEWLINE
142+26:1 glyph ++
143+26:4 name non-wing
144+26:13 glyph |=
145+26:16 name a
146+26:17 tight glyph =
147+26:18 tight name msg
148+26:22 glyph ^-
149+26:25 glyph (
150+26:26 tight name list
151+26:31 aura @t
152+26:33 tight glyph )
153+27:3 INDENT
154+27:3 glyph ?-
155+27:6 glyph (
156+27:7 tight name same
157+27:12 name a
158+27:13 tight glyph )
159+28:5 INDENT
160+28:5 lit %clear
161+28:12 lit ~
162+29:5 NEWLINE
163+29:5 glyph [
164+29:6 tight lit %text
165+29:12 name v
166+29:13 tight glyph ]
167+29:15 glyph ~[
168+29:17 tight name v
169+29:18 tight glyph ]
170+30:1 DEDENT
171+30:1 DEDENT
172+30:1 NEWLINE
173+30:1 glyph ++
174+30:4 name generic
175+30:12 glyph |=
176+30:15 glyph [
177+30:16 tight name a
178+30:17 tight glyph =
179+30:18 tight name msg
180+30:22 name x
181+30:23 tight glyph =
182+30:24 tight tvar A
183+30:25 tight glyph ]
184+30:27 glyph ^-
185+30:30 glyph (
186+30:31 tight name list
187+30:36 tvar A
188+30:37 tight glyph )
189+31:3 INDENT
190+31:3 glyph ?-
191+31:6 name a
192+32:5 INDENT
193+32:5 lit %clear
194+32:12 lit ~
195+33:5 NEWLINE
196+33:5 glyph [
197+33:6 tight lit %text
198+33:12 name v
199+33:13 tight glyph ]
200+33:15 glyph ~[
201+33:17 tight name x
202+33:18 tight glyph ]
203+34:1 DEDENT
204+34:1 DEDENT
205+34:1 NEWLINE
206+34:1 glyph ++
207+34:4 name generic-bad
208+34:16 glyph |=
209+34:19 glyph [
210+34:20 tight name a
211+34:21 tight glyph =
212+34:22 tight name msg
213+34:26 name x
214+34:27 tight glyph =
215+34:28 tight tvar A
216+34:29 tight glyph ]
217+34:31 glyph ^-
218+34:34 glyph (
219+34:35 tight name list
220+34:40 tvar A
221+34:41 tight glyph )
222+35:3 INDENT
223+35:3 glyph ?-
224+35:6 name a
225+36:5 INDENT
226+36:5 lit %clear
227+36:12 lit ~
228+37:5 NEWLINE
229+37:5 glyph [
230+37:6 tight lit %text
231+37:12 name v
232+37:13 tight glyph ]
233+37:15 glyph ~[
234+37:17 tight str "hi"
235+37:21 tight glyph ]
236+38:1 DEDENT
237+38:1 DEDENT
238+38:1 NEWLINE
239+38:1 glyph ++
240+38:4 name pending-tag
241+38:16 glyph |=
242+38:19 name a
243+38:20 tight glyph =
244+38:21 tight name msg
245+38:25 glyph ^-
246+38:28 glyph (
247+38:29 tight name list
248+38:34 aura @t
249+38:36 tight glyph )
250+39:3 INDENT
251+39:3 glyph ~&
252+39:6 lit %missing
253+40:5 INDENT
254+40:5 glyph ?-
255+40:8 name a
256+41:7 INDENT
257+41:7 lit %clear
258+41:14 lit ~
259+42:7 NEWLINE
260+42:7 glyph [
261+42:8 tight lit %text
262+42:14 name v
263+42:15 tight glyph ]
264+42:17 glyph ~[
265+42:19 tight name v
266+42:20 tight glyph ]
267+43:1 DEDENT
268+43:1 DEDENT
269+43:1 DEDENT
270+43:1 NEWLINE
271+43:1 glyph ++
272+43:4 name unknown-target
273+43:19 glyph |=
274+43:22 glyph [
275+43:23 tight name a
276+43:24 tight glyph =
277+43:25 tight name msg
278+43:29 name x
279+43:30 tight glyph =
280+43:31 tight tvar A
281+43:32 tight glyph ]
282+43:34 glyph ^-
283+43:37 tvar A
284+44:3 INDENT
285+44:3 glyph ?-
286+44:6 name a
287+45:5 INDENT
288+45:5 glyph [
289+45:6 tight lit %text
290+45:12 name v
291+45:13 tight glyph ]
292+45:15 lit %yes
293+46:5 NEWLINE
294+46:5 lit %clear
295+46:12 lit %no
296+47:1 DEDENT
297+47:1 DEDENT
298+47:1 NEWLINE
299+47:1 glyph ++
300+47:4 name nested-missing
301+47:19 glyph |=
302+47:22 name a
303+47:23 tight glyph =
304+47:24 tight name msg
305+47:28 glyph ^-
306+47:31 glyph [
307+47:32 tight name reply
308+47:38 aura @t
309+47:40 tight glyph ]
310+48:3 INDENT
311+48:3 glyph ?-
312+48:6 name a
313+49:5 INDENT
314+49:5 glyph [
315+49:6 tight lit %text
316+49:12 name v
317+49:13 tight glyph ]
318+49:15 glyph [
319+49:16 tight lit %missing
320+49:25 name v
321+49:26 tight glyph ]
322+50:5 NEWLINE
323+50:5 lit %clear
324+50:12 glyph [
325+50:13 tight lit %yes
326+50:18 str "ok"
327+50:22 tight glyph ]
328+51:1 DEDENT
329+51:1 DEDENT
330+51:1 NEWLINE
331+51:1 glyph ++
332+51:4 name argument
333+51:13 glyph |=
334+51:16 name a
335+51:17 tight glyph =
336+51:18 tight name msg
337+52:3 INDENT
338+52:3 glyph (
339+52:4 tight name from-call
340+53:5 INDENT
341+53:5 glyph ?-
342+53:8 name a
343+54:7 INDENT
344+54:7 lit %clear
345+54:14 lit ~
346+55:7 NEWLINE
347+55:7 glyph [
348+55:8 tight lit %text
349+55:14 name v
350+55:15 tight glyph ]
351+55:17 glyph ~[
352+55:19 tight name v
353+55:20 tight glyph ]
354+55:21 DEDENT
355+55:21 DEDENT
356+55:21 DEDENT
357+55:21 NEWLINE
tests/golden/types-union-pattern-result-controls/tree.txtnew file+161
@@ -0,0 +1,161 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %text)
6+ (face 2:10 value (aura 2:16 @t)))
7+ (const 3:3 %clear)))
8+ (mold 4:1 reply
9+ (union 5:3 (const 5:3 %yes) (const 6:3 %no)))
10+ (value 7:1 choose
11+ (gate 7:11
12+ (face 7:14 a (ref 7:16 msg))
13+ (cast 7:20
14+ (ref 7:23 reply)
15+ (body 8:3
16+ (branch 8:3
17+ (wing 8:6 a)
18+ (arm 9:5
19+ (cell 9:5 (lit 9:6 %text) (bind 9:12 v))
20+ (lit 9:15 %yes))
21+ (arm 10:5 (lit 10:5 %clear) (lit 10:12 %no)))))))
22+ (value 11:1 invalid
23+ (gate 11:12
24+ (face 11:15 a (ref 11:17 msg))
25+ (cast 11:21
26+ (ref 11:24 reply)
27+ (body 12:3
28+ (branch 12:3
29+ (wing 12:6 a)
30+ (arm 13:5
31+ (cell 13:5 (lit 13:6 %text) (bind 13:12 v))
32+ (lit 13:15 %missing))
33+ (arm 14:5 (lit 14:5 %clear) (lit 14:12 %no)))))))
34+ (value 15:1 dead
35+ (gate 15:9
36+ (face 15:12 a (ref 15:14 msg))
37+ (cast 15:18
38+ (apply 15:21 list (aura 15:27 @t))
39+ (body 16:3
40+ (branch 16:3
41+ (wing 16:6 a)
42+ (arm 17:5 (lit 17:5 %clear) (lit 17:12 ~))
43+ (arm 18:5 (lit 18:5 %clear) (lit 18:12 ~))
44+ (arm 19:5
45+ (cell 19:5 (lit 19:6 %text) (bind 19:12 v))
46+ (list 19:15 (wing 19:17 v))))))))
47+ (value 20:1 unknown
48+ (gate 20:12
49+ (face 20:15 a (ref 20:17 msg))
50+ (cast 20:21
51+ (apply 20:24 list (aura 20:30 @t))
52+ (body 21:3
53+ (branch 21:3
54+ (wing 21:6 a)
55+ (arm 22:5
56+ (cell 22:5 (lit 22:6 %text) (str 22:12 "x"))
57+ (list 22:17))
58+ (arm 23:5 (lit 23:5 %clear) (list 23:12))
59+ (arm 24:5 (any 24:5) (list 24:7)))))))
60+ (value 25:1 from-call
61+ (gate 25:14
62+ (face 25:17 x
63+ (apply 25:19 list (aura 25:25 @t)))
64+ (wing 25:29 x)))
65+ (value 26:1 non-wing
66+ (gate 26:13
67+ (face 26:16 a (ref 26:18 msg))
68+ (cast 26:22
69+ (apply 26:25 list (aura 26:31 @t))
70+ (body 27:3
71+ (branch 27:3
72+ (group 27:6
73+ (call 27:7 (wing 27:7 same) (wing 27:12 a)))
74+ (arm 28:5 (lit 28:5 %clear) (lit 28:12 ~))
75+ (arm 29:5
76+ (cell 29:5 (lit 29:6 %text) (bind 29:12 v))
77+ (list 29:15 (wing 29:17 v))))))))
78+ (value 30:1 generic
79+ (gate 30:12
80+ (cell 30:15
81+ (face 30:16 a (ref 30:18 msg))
82+ (face 30:22 x (tvar 30:24 A)))
83+ (cast 30:27
84+ (apply 30:30 list (tvar 30:36 A))
85+ (body 31:3
86+ (branch 31:3
87+ (wing 31:6 a)
88+ (arm 32:5 (lit 32:5 %clear) (lit 32:12 ~))
89+ (arm 33:5
90+ (cell 33:5 (lit 33:6 %text) (bind 33:12 v))
91+ (list 33:15 (wing 33:17 x))))))))
92+ (value 34:1 generic-bad
93+ (gate 34:16
94+ (cell 34:19
95+ (face 34:20 a (ref 34:22 msg))
96+ (face 34:26 x (tvar 34:28 A)))
97+ (cast 34:31
98+ (apply 34:34 list (tvar 34:40 A))
99+ (body 35:3
100+ (branch 35:3
101+ (wing 35:6 a)
102+ (arm 36:5 (lit 36:5 %clear) (lit 36:12 ~))
103+ (arm 37:5
104+ (cell 37:5 (lit 37:6 %text) (bind 37:12 v))
105+ (list 37:15 (str 37:17 "hi"))))))))
106+ (value 38:1 pending-tag
107+ (gate 38:16
108+ (face 38:19 a (ref 38:21 msg))
109+ (cast 38:25
110+ (apply 38:28 list (aura 38:34 @t))
111+ (body 39:3
112+ (trace 39:3
113+ (lit 39:6 %missing)
114+ (body 40:5
115+ (branch 40:5
116+ (wing 40:8 a)
117+ (arm 41:7 (lit 41:7 %clear) (lit 41:14 ~))
118+ (arm 42:7
119+ (cell 42:7 (lit 42:8 %text) (bind 42:14 v))
120+ (list 42:17 (wing 42:19 v))))))))))
121+ (value 43:1 unknown-target
122+ (gate 43:19
123+ (cell 43:22
124+ (face 43:23 a (ref 43:25 msg))
125+ (face 43:29 x (tvar 43:31 A)))
126+ (cast 43:34
127+ (tvar 43:37 A)
128+ (body 44:3
129+ (branch 44:3
130+ (wing 44:6 a)
131+ (arm 45:5
132+ (cell 45:5 (lit 45:6 %text) (bind 45:12 v))
133+ (lit 45:15 %yes))
134+ (arm 46:5 (lit 46:5 %clear) (lit 46:12 %no)))))))
135+ (value 47:1 nested-missing
136+ (gate 47:19
137+ (face 47:22 a (ref 47:24 msg))
138+ (cast 47:28
139+ (cell 47:31 (ref 47:32 reply) (aura 47:38 @t))
140+ (body 48:3
141+ (branch 48:3
142+ (wing 48:6 a)
143+ (arm 49:5
144+ (cell 49:5 (lit 49:6 %text) (bind 49:12 v))
145+ (tuple 49:15 (lit 49:16 %missing) (wing 49:25 v)))
146+ (arm 50:5
147+ (lit 50:5 %clear)
148+ (tuple 50:12 (lit 50:13 %yes) (str 50:18 "ok"))))))))
149+ (value 51:1 argument
150+ (gate 51:13
151+ (face 51:16 a (ref 51:18 msg))
152+ (body 52:3
153+ (group 52:3
154+ (call 52:4
155+ (wing 52:4 from-call)
156+ (branch 53:5
157+ (wing 53:8 a)
158+ (arm 54:7 (lit 54:7 %clear) (lit 54:14 ~))
159+ (arm 55:7
160+ (cell 55:7 (lit 55:8 %text) (bind 55:14 v))
161+ (list 55:17 (wing 55:19 v))))))))))
tests/golden/types-union-pattern-result-controls/types.txtnew file+30
@@ -0,0 +1,30 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ reply: cases proven disjoint; mold not checked
4+++ choose: $-(msg reply)
5+++ invalid: reply has no case `%missing`
6+/tests/golden/types-union-pattern-result-controls/source.jibb:11:24: expected union
7+++ invalid |= a=msg ^- reply
8+ ^
9+/tests/golden/types-union-pattern-result-controls/source.jibb:13:15: tag
10+ [%text v] %missing
11+ ^
12+++ dead: branch arm is covered by earlier arms
13+/tests/golden/types-union-pattern-result-controls/source.jibb:18:5: covered arm
14+ %clear ~
15+ ^
16+++ unknown: partial union pattern is not supported by partial inference
17+++ from-call: $-((list @t) (list @t))
18+++ non-wing: branch pattern is not supported by partial inference
19+++ generic: $-([a=msg x=A] (list A))
20+++ generic-bad: explicit capital constraints are not supported by partial inference
21+++ pending-tag: tag needs context in partial inference
22+++ unknown-target: union branch result needs context in partial inference
23+++ nested-missing: reply has no case `%missing`
24+/tests/golden/types-union-pattern-result-controls/source.jibb:47:31: expected union
25+++ nested-missing |= a=msg ^- [reply @t]
26+ ^
27+/tests/golden/types-union-pattern-result-controls/source.jibb:49:16: tag
28+ [%text v] [%missing v]
29+ ^
30+++ argument: $-(msg (list @t))
tests/golden/types-union-patterns/types.txt+2−2
@@ -20,6 +20,6 @@ partial inference; module not checked
2020+$ option: cases proven disjoint; mold not checked
2121++ null-option: $-(option @t)
2222+$ output: cases proven disjoint; mold not checked
23−++ context: contextual union-pattern branch is not supported by partial inference
24−++ context-list: contextual union-pattern branch is not supported by partial inference
23+++ context: $-(digits output)
24+++ context-list: $-(digits (list @t))
2525++ grouped-subject: union-pattern branch subject is not supported by partial inference
tests/lib/jibb-tlon-bridge.hoonnew file+29
@@ -0,0 +1,29 @@
1+:: The unmodified Tlon presence /sur passes through the real reader into
2+:: the partial checker, under both eval and Clay.
3+/+ jibb, jibb-import
4+/* presence %txt /tests/importer/tlon-presence/txt
5+/* source %txt /tests/type-tlon/source/txt
6+/* expected %txt /tests/type-tlon/expected/txt
7+|%
8+++ text
9+ |= lines=wain
10+ ^- @t
11+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
12+++ test-tlon-bridge
13+ ^- tang
14+ ?~ presence ~[leaf+"Tlon presence fixture is missing"]
15+ ?~ source ~[leaf+"Tlon bridge source is missing"]
16+ ?~ expected ~[leaf+"Tlon bridge expected output is missing"]
17+ =/ got (bridge-output (text presence) (text source))
18+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
19+ ~[leaf+"Tlon bridge output differs from tests/type-tlon/expected.txt"]
20+ ~
21+++ bridge-output
22+ |= [sur=@t src=@t]
23+ ^- @t
24+ =/ cor=type -:(ride -:!>(..zuse) sur)
25+ =/ names=(list term) ~[%action-1 %command-1 %update-1 %response-1 %key]
26+ =/ external=(list [module=term name=term result=*])
27+ (turn names |=(n=term [%presence n (read-named:jibb-import %presence n cor)]))
28+ (golden-types-imports:jibb /test/jibb src external)
29+--
tests/lib/jibb.hoon+499−481
@@ -1553,396 +1553,408 @@
15531553/* mod-451-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
15541554/* typ-451 %txt /tests/golden/types-multi-import/types/txt
15551555/* mtre-451 %txt /tests/golden/types-multi-import/module-trees/txt
1556−/* src-452 %jibb /tests/golden/types-null-context/source/jibb
1557−/* tok-452 %txt /tests/golden/types-null-context/tokens/txt
1558−/* tre-452 %txt /tests/golden/types-null-context/tree/txt
1559−/* typ-452 %txt /tests/golden/types-null-context/types/txt
1560−/* src-453 %jibb /tests/golden/types-null-overlap/source/jibb
1561−/* tok-453 %txt /tests/golden/types-null-overlap/tokens/txt
1562−/* tre-453 %txt /tests/golden/types-null-overlap/tree/txt
1563−/* typ-453 %txt /tests/golden/types-null-overlap/types/txt
1564−/* src-454 %jibb /tests/golden/types-null-unresolved/source/jibb
1565−/* tok-454 %txt /tests/golden/types-null-unresolved/tokens/txt
1566−/* tre-454 %txt /tests/golden/types-null-unresolved/tree/txt
1567−/* typ-454 %txt /tests/golden/types-null-unresolved/types/txt
1568−/* src-455 %jibb /tests/golden/types-partial-apply/source/jibb
1569−/* tok-455 %txt /tests/golden/types-partial-apply/tokens/txt
1570−/* tre-455 %txt /tests/golden/types-partial-apply/tree/txt
1571−/* typ-455 %txt /tests/golden/types-partial-apply/types/txt
1572−/* src-456 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1573−/* tok-456 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1574−/* tre-456 %txt /tests/golden/types-partial-atom-alias/tree/txt
1575−/* typ-456 %txt /tests/golden/types-partial-atom-alias/types/txt
1576−/* src-457 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1577−/* tok-457 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1578−/* tre-457 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1579−/* typ-457 %txt /tests/golden/types-partial-atom-constraint/types/txt
1580−/* src-458 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1581−/* tok-458 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1582−/* tre-458 %txt /tests/golden/types-partial-atom-widening/tree/txt
1583−/* typ-458 %txt /tests/golden/types-partial-atom-widening/types/txt
1584−/* src-459 %jibb /tests/golden/types-partial-aura/source/jibb
1585−/* tok-459 %txt /tests/golden/types-partial-aura/tokens/txt
1586−/* tre-459 %txt /tests/golden/types-partial-aura/tree/txt
1587−/* typ-459 %txt /tests/golden/types-partial-aura/types/txt
1588−/* src-460 %jibb /tests/golden/types-partial-aura-family/source/jibb
1589−/* tok-460 %txt /tests/golden/types-partial-aura-family/tokens/txt
1590−/* tre-460 %txt /tests/golden/types-partial-aura-family/tree/txt
1591−/* typ-460 %txt /tests/golden/types-partial-aura-family/types/txt
1592−/* src-461 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1593−/* tok-461 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1594−/* tre-461 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1595−/* typ-461 %txt /tests/golden/types-partial-aura-generalization/types/txt
1596−/* src-462 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1597−/* tok-462 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1598−/* tre-462 %txt /tests/golden/types-partial-bare-atom/tree/txt
1599−/* typ-462 %txt /tests/golden/types-partial-bare-atom/types/txt
1600−/* src-463 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1601−/* tok-463 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1602−/* tre-463 %txt /tests/golden/types-partial-branch-widening/tree/txt
1603−/* typ-463 %txt /tests/golden/types-partial-branch-widening/types/txt
1604−/* src-464 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1605−/* tok-464 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1606−/* tre-464 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1607−/* typ-464 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1608−/* src-465 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1609−/* tok-465 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1610−/* tre-465 %txt /tests/golden/types-partial-decimal-default/tree/txt
1611−/* typ-465 %txt /tests/golden/types-partial-decimal-default/types/txt
1612−/* src-466 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1613−/* tok-466 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1614−/* tre-466 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1615−/* typ-466 %txt /tests/golden/types-partial-dependency-chain/types/txt
1616−/* src-467 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1617−/* tok-467 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1618−/* tre-467 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1619−/* typ-467 %txt /tests/golden/types-partial-explicit-capital/types/txt
1620−/* src-468 %jibb /tests/golden/types-partial-forward/source/jibb
1621−/* tok-468 %txt /tests/golden/types-partial-forward/tokens/txt
1622−/* tre-468 %txt /tests/golden/types-partial-forward/tree/txt
1623−/* typ-468 %txt /tests/golden/types-partial-forward/types/txt
1624−/* src-469 %jibb /tests/golden/types-partial-generalization/source/jibb
1625−/* tok-469 %txt /tests/golden/types-partial-generalization/tokens/txt
1626−/* tre-469 %txt /tests/golden/types-partial-generalization/tree/txt
1627−/* typ-469 %txt /tests/golden/types-partial-generalization/types/txt
1628−/* src-470 %jibb /tests/golden/types-partial-identity/source/jibb
1629−/* tok-470 %txt /tests/golden/types-partial-identity/tokens/txt
1630−/* tre-470 %txt /tests/golden/types-partial-identity/tree/txt
1631−/* typ-470 %txt /tests/golden/types-partial-identity/types/txt
1632−/* src-471 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1633−/* tok-471 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1634−/* tre-471 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1635−/* typ-471 %txt /tests/golden/types-partial-independent-atoms/types/txt
1636−/* src-472 %jibb /tests/golden/types-partial-local-molds/source/jibb
1637−/* tok-472 %txt /tests/golden/types-partial-local-molds/tokens/txt
1638−/* tre-472 %txt /tests/golden/types-partial-local-molds/tree/txt
1639−/* typ-472 %txt /tests/golden/types-partial-local-molds/types/txt
1640−/* src-473 %jibb /tests/golden/types-partial-locals/source/jibb
1641−/* tok-473 %txt /tests/golden/types-partial-locals/tokens/txt
1642−/* tre-473 %txt /tests/golden/types-partial-locals/tree/txt
1643−/* typ-473 %txt /tests/golden/types-partial-locals/types/txt
1644−/* src-474 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1645−/* tok-474 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1646−/* tre-474 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1647−/* typ-474 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1648−/* src-475 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1649−/* tok-475 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1650−/* tre-475 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1651−/* typ-475 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1652−/* src-476 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1653−/* tok-476 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1654−/* tre-476 %txt /tests/golden/types-partial-mold-composite/tree/txt
1655−/* typ-476 %txt /tests/golden/types-partial-mold-composite/types/txt
1656−/* src-477 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1657−/* tok-477 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1658−/* tre-477 %txt /tests/golden/types-partial-mold-forward/tree/txt
1659−/* typ-477 %txt /tests/golden/types-partial-mold-forward/types/txt
1660−/* src-478 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1661−/* tok-478 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1662−/* tre-478 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1663−/* typ-478 %txt /tests/golden/types-partial-mold-recursive/types/txt
1664−/* src-479 %jibb /tests/golden/types-partial-occurs/source/jibb
1665−/* tok-479 %txt /tests/golden/types-partial-occurs/tokens/txt
1666−/* tre-479 %txt /tests/golden/types-partial-occurs/tree/txt
1667−/* typ-479 %txt /tests/golden/types-partial-occurs/types/txt
1668−/* src-480 %jibb /tests/golden/types-partial-projection/source/jibb
1669−/* tok-480 %txt /tests/golden/types-partial-projection/tokens/txt
1670−/* tre-480 %txt /tests/golden/types-partial-projection/tree/txt
1671−/* typ-480 %txt /tests/golden/types-partial-projection/types/txt
1672−/* src-481 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1673−/* tok-481 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1674−/* tre-481 %txt /tests/golden/types-partial-shadow-global/tree/txt
1675−/* typ-481 %txt /tests/golden/types-partial-shadow-global/types/txt
1676−/* src-482 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1677−/* tok-482 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1678−/* tre-482 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1679−/* typ-482 %txt /tests/golden/types-partial-shared-tvar/types/txt
1680−/* src-483 %jibb /tests/golden/types-partial-union-cases/source/jibb
1681−/* tok-483 %txt /tests/golden/types-partial-union-cases/tokens/txt
1682−/* tre-483 %txt /tests/golden/types-partial-union-cases/tree/txt
1683−/* typ-483 %txt /tests/golden/types-partial-union-cases/types/txt
1684−/* src-484 %jibb /tests/golden/types-partial-union-edges/source/jibb
1685−/* tok-484 %txt /tests/golden/types-partial-union-edges/tokens/txt
1686−/* tre-484 %txt /tests/golden/types-partial-union-edges/tree/txt
1687−/* typ-484 %txt /tests/golden/types-partial-union-edges/types/txt
1688−/* src-485 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1689−/* tok-485 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1690−/* tre-485 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1691−/* typ-485 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1692−/* src-486 %jibb /tests/golden/types-prelude-direct/source/jibb
1693−/* tok-486 %txt /tests/golden/types-prelude-direct/tokens/txt
1694−/* tre-486 %txt /tests/golden/types-prelude-direct/tree/txt
1695−/* typ-486 %txt /tests/golden/types-prelude-direct/types/txt
1696−/* src-487 %jibb /tests/golden/types-prelude-interface/source/jibb
1697−/* tok-487 %txt /tests/golden/types-prelude-interface/tokens/txt
1698−/* tre-487 %txt /tests/golden/types-prelude-interface/tree/txt
1699−/* mod-487-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1700−/* mod-487-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1701−/* typ-487 %txt /tests/golden/types-prelude-interface/types/txt
1702−/* mtre-487 %txt /tests/golden/types-prelude-interface/module-trees/txt
1703−/* src-488 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1704−/* tok-488 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1705−/* tre-488 %txt /tests/golden/types-prelude-list-functions/tree/txt
1706−/* mod-488-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1707−/* typ-488 %txt /tests/golden/types-prelude-list-functions/types/txt
1708−/* mtre-488 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1709−/* src-489 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1710−/* tok-489 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1711−/* tre-489 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1712−/* typ-489 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1713−/* src-490 %jibb /tests/golden/types-record-bound-variable/source/jibb
1714−/* tok-490 %txt /tests/golden/types-record-bound-variable/tokens/txt
1715−/* tre-490 %txt /tests/golden/types-record-bound-variable/tree/txt
1716−/* typ-490 %txt /tests/golden/types-record-bound-variable/types/txt
1717−/* src-491 %jibb /tests/golden/types-record-cast-context/source/jibb
1718−/* tok-491 %txt /tests/golden/types-record-cast-context/tokens/txt
1719−/* tre-491 %txt /tests/golden/types-record-cast-context/tree/txt
1720−/* typ-491 %txt /tests/golden/types-record-cast-context/types/txt
1721−/* src-492 %jibb /tests/golden/types-record-change/source/jibb
1722−/* tok-492 %txt /tests/golden/types-record-change/tokens/txt
1723−/* tre-492 %txt /tests/golden/types-record-change/tree/txt
1724−/* typ-492 %txt /tests/golden/types-record-change/types/txt
1725−/* src-493 %jibb /tests/golden/types-record-change-generic/source/jibb
1726−/* tok-493 %txt /tests/golden/types-record-change-generic/tokens/txt
1727−/* tre-493 %txt /tests/golden/types-record-change-generic/tree/txt
1728−/* typ-493 %txt /tests/golden/types-record-change-generic/types/txt
1729−/* src-494 %jibb /tests/golden/types-record-faces/source/jibb
1730−/* tok-494 %txt /tests/golden/types-record-faces/tokens/txt
1731−/* tre-494 %txt /tests/golden/types-record-faces/tree/txt
1732−/* typ-494 %txt /tests/golden/types-record-faces/types/txt
1733−/* src-495 %jibb /tests/golden/types-record-import/source/jibb
1734−/* tok-495 %txt /tests/golden/types-record-import/tokens/txt
1735−/* tre-495 %txt /tests/golden/types-record-import/tree/txt
1736−/* mod-495-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1737−/* typ-495 %txt /tests/golden/types-record-import/types/txt
1738−/* mtre-495 %txt /tests/golden/types-record-import/module-trees/txt
1739−/* src-496 %jibb /tests/golden/types-record-local-scheme/source/jibb
1740−/* tok-496 %txt /tests/golden/types-record-local-scheme/tokens/txt
1741−/* tre-496 %txt /tests/golden/types-record-local-scheme/tree/txt
1742−/* typ-496 %txt /tests/golden/types-record-local-scheme/types/txt
1743−/* src-497 %jibb /tests/golden/types-record-nested/source/jibb
1744−/* tok-497 %txt /tests/golden/types-record-nested/tokens/txt
1745−/* tre-497 %txt /tests/golden/types-record-nested/tree/txt
1746−/* typ-497 %txt /tests/golden/types-record-nested/types/txt
1747−/* src-498 %jibb /tests/golden/types-record-to-tuple/source/jibb
1748−/* tok-498 %txt /tests/golden/types-record-to-tuple/tokens/txt
1749−/* tre-498 %txt /tests/golden/types-record-to-tuple/tree/txt
1750−/* typ-498 %txt /tests/golden/types-record-to-tuple/types/txt
1751−/* src-499 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1752−/* tok-499 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1753−/* tre-499 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1754−/* typ-499 %txt /tests/golden/types-recursion-scc-failures/types/txt
1755−/* src-500 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1756−/* tok-500 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1757−/* tre-500 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1758−/* typ-500 %txt /tests/golden/types-recursion-scc-groups/types/txt
1759−/* src-501 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1760−/* tok-501 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1761−/* tre-501 %txt /tests/golden/types-recursion-scc-import/tree/txt
1762−/* mod-501-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1763−/* typ-501 %txt /tests/golden/types-recursion-scc-import/types/txt
1764−/* mtre-501 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1765−/* src-502 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1766−/* tok-502 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1767−/* tre-502 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1768−/* mod-502-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1769−/* typ-502 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1770−/* mtre-502 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1771−/* src-503 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1772−/* tok-503 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1773−/* tre-503 %txt /tests/golden/types-recursion-scc-local/tree/txt
1774−/* typ-503 %txt /tests/golden/types-recursion-scc-local/types/txt
1775−/* src-504 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1776−/* tok-504 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1777−/* tre-504 %txt /tests/golden/types-recursion-scc-order/tree/txt
1778−/* typ-504 %txt /tests/golden/types-recursion-scc-order/types/txt
1779−/* src-505 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1780−/* tok-505 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1781−/* tre-505 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1782−/* typ-505 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1783−/* src-506 %jibb /tests/golden/types-recursive-branch/source/jibb
1784−/* tok-506 %txt /tests/golden/types-recursive-branch/tokens/txt
1785−/* tre-506 %txt /tests/golden/types-recursive-branch/tree/txt
1786−/* typ-506 %txt /tests/golden/types-recursive-branch/types/txt
1787−/* src-507 %jibb /tests/golden/types-recursive-gate/source/jibb
1788−/* tok-507 %txt /tests/golden/types-recursive-gate/tokens/txt
1789−/* tre-507 %txt /tests/golden/types-recursive-gate/tree/txt
1790−/* typ-507 %txt /tests/golden/types-recursive-gate/types/txt
1791−/* src-508 %jibb /tests/golden/types-recursive-sample/source/jibb
1792−/* tok-508 %txt /tests/golden/types-recursive-sample/tokens/txt
1793−/* tre-508 %txt /tests/golden/types-recursive-sample/tree/txt
1794−/* typ-508 %txt /tests/golden/types-recursive-sample/types/txt
1795−/* src-509 %jibb /tests/golden/types-string-interpolation/source/jibb
1796−/* tok-509 %txt /tests/golden/types-string-interpolation/tokens/txt
1797−/* tre-509 %txt /tests/golden/types-string-interpolation/tree/txt
1798−/* typ-509 %txt /tests/golden/types-string-interpolation/types/txt
1799−/* src-510 %jibb /tests/golden/types-tuple-context/source/jibb
1800−/* tok-510 %txt /tests/golden/types-tuple-context/tokens/txt
1801−/* tre-510 %txt /tests/golden/types-tuple-context/tree/txt
1802−/* typ-510 %txt /tests/golden/types-tuple-context/types/txt
1803−/* src-511 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1804−/* tok-511 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1805−/* tre-511 %txt /tests/golden/types-tuple-context-nested/tree/txt
1806−/* typ-511 %txt /tests/golden/types-tuple-context-nested/types/txt
1807−/* src-512 %jibb /tests/golden/types-union-alias/source/jibb
1808−/* tok-512 %txt /tests/golden/types-union-alias/tokens/txt
1809−/* tre-512 %txt /tests/golden/types-union-alias/tree/txt
1810−/* typ-512 %txt /tests/golden/types-union-alias/types/txt
1811−/* src-513 %jibb /tests/golden/types-union-branch-context/source/jibb
1812−/* tok-513 %txt /tests/golden/types-union-branch-context/tokens/txt
1813−/* tre-513 %txt /tests/golden/types-union-branch-context/tree/txt
1814−/* typ-513 %txt /tests/golden/types-union-branch-context/types/txt
1815−/* src-514 %jibb /tests/golden/types-union-branch-pending/source/jibb
1816−/* tok-514 %txt /tests/golden/types-union-branch-pending/tokens/txt
1817−/* tre-514 %txt /tests/golden/types-union-branch-pending/tree/txt
1818−/* typ-514 %txt /tests/golden/types-union-branch-pending/types/txt
1819−/* src-515 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1820−/* tok-515 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1821−/* tre-515 %txt /tests/golden/types-union-constructor-shape/tree/txt
1822−/* typ-515 %txt /tests/golden/types-union-constructor-shape/types/txt
1823−/* src-516 %jibb /tests/golden/types-union-context-flow/source/jibb
1824−/* tok-516 %txt /tests/golden/types-union-context-flow/tokens/txt
1825−/* tre-516 %txt /tests/golden/types-union-context-flow/tree/txt
1826−/* typ-516 %txt /tests/golden/types-union-context-flow/types/txt
1827−/* src-517 %jibb /tests/golden/types-union-finite/source/jibb
1828−/* tok-517 %txt /tests/golden/types-union-finite/tokens/txt
1829−/* tre-517 %txt /tests/golden/types-union-finite/tree/txt
1830−/* typ-517 %txt /tests/golden/types-union-finite/types/txt
1831−/* src-518 %jibb /tests/golden/types-union-finite-generic/source/jibb
1832−/* tok-518 %txt /tests/golden/types-union-finite-generic/tokens/txt
1833−/* tre-518 %txt /tests/golden/types-union-finite-generic/tree/txt
1834−/* typ-518 %txt /tests/golden/types-union-finite-generic/types/txt
1835−/* src-519 %jibb /tests/golden/types-union-finite-limit/source/jibb
1836−/* tok-519 %txt /tests/golden/types-union-finite-limit/tokens/txt
1837−/* tre-519 %txt /tests/golden/types-union-finite-limit/tree/txt
1838−/* typ-519 %txt /tests/golden/types-union-finite-limit/types/txt
1839−/* src-520 %jibb /tests/golden/types-union-import/source/jibb
1840−/* tok-520 %txt /tests/golden/types-union-import/tokens/txt
1841−/* tre-520 %txt /tests/golden/types-union-import/tree/txt
1842−/* mod-520-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1843−/* typ-520 %txt /tests/golden/types-union-import/types/txt
1844−/* mtre-520 %txt /tests/golden/types-union-import/module-trees/txt
1845−/* src-521 %jibb /tests/golden/types-union-local-pending/source/jibb
1846−/* tok-521 %txt /tests/golden/types-union-local-pending/tokens/txt
1847−/* tre-521 %txt /tests/golden/types-union-local-pending/tree/txt
1848−/* typ-521 %txt /tests/golden/types-union-local-pending/types/txt
1849−/* src-522 %jibb /tests/golden/types-union-overlap/source/jibb
1850−/* tok-522 %txt /tests/golden/types-union-overlap/tokens/txt
1851−/* tre-522 %txt /tests/golden/types-union-overlap/tree/txt
1852−/* typ-522 %txt /tests/golden/types-union-overlap/types/txt
1853−/* src-523 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1854−/* tok-523 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1855−/* tre-523 %txt /tests/golden/types-union-overlap-nested/tree/txt
1856−/* typ-523 %txt /tests/golden/types-union-overlap-nested/types/txt
1857−/* src-524 %jibb /tests/golden/types-union-patterns/source/jibb
1858−/* tok-524 %txt /tests/golden/types-union-patterns/tokens/txt
1859−/* tre-524 %txt /tests/golden/types-union-patterns/tree/txt
1860−/* typ-524 %txt /tests/golden/types-union-patterns/types/txt
1861−/* src-525 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1862−/* tok-525 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1863−/* tre-525 %txt /tests/golden/types-union-patterns-generic/tree/txt
1864−/* typ-525 %txt /tests/golden/types-union-patterns-generic/types/txt
1865−/* src-526 %jibb /tests/golden/types-union-patterns-import/source/jibb
1866−/* tok-526 %txt /tests/golden/types-union-patterns-import/tokens/txt
1867−/* tre-526 %txt /tests/golden/types-union-patterns-import/tree/txt
1868−/* mod-526-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1869−/* typ-526 %txt /tests/golden/types-union-patterns-import/types/txt
1870−/* mtre-526 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1871−/* src-527 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1872−/* tok-527 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1873−/* tre-527 %txt /tests/golden/types-union-phantom-generic/tree/txt
1874−/* typ-527 %txt /tests/golden/types-union-phantom-generic/types/txt
1875−/* src-528 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1876−/* tok-528 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1877−/* tre-528 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1878−/* mod-528-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1879−/* typ-528 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1880−/* mtre-528 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1881−/* src-529 %jibb /tests/golden/types-union-print-distinct/source/jibb
1882−/* tok-529 %txt /tests/golden/types-union-print-distinct/tokens/txt
1883−/* tre-529 %txt /tests/golden/types-union-print-distinct/tree/txt
1884−/* mod-529-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1885−/* mod-529-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1886−/* mod-529-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1887−/* typ-529 %txt /tests/golden/types-union-print-distinct/types/txt
1888−/* mtre-529 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1889−/* src-530 %jibb /tests/golden/types-union-print-escape/source/jibb
1890−/* tok-530 %txt /tests/golden/types-union-print-escape/tokens/txt
1891−/* tre-530 %txt /tests/golden/types-union-print-escape/tree/txt
1892−/* typ-530 %txt /tests/golden/types-union-print-escape/types/txt
1893−/* src-531 %jibb /tests/golden/types-union-print-local/source/jibb
1894−/* tok-531 %txt /tests/golden/types-union-print-local/tokens/txt
1895−/* tre-531 %txt /tests/golden/types-union-print-local/tree/txt
1896−/* typ-531 %txt /tests/golden/types-union-print-local/types/txt
1897−/* src-532 %jibb /tests/golden/types-union-print-nested/source/jibb
1898−/* tok-532 %txt /tests/golden/types-union-print-nested/tokens/txt
1899−/* tre-532 %txt /tests/golden/types-union-print-nested/tree/txt
1900−/* typ-532 %txt /tests/golden/types-union-print-nested/types/txt
1901−/* src-533 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1902−/* tok-533 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1903−/* tre-533 %txt /tests/golden/types-union-print-same-origin/tree/txt
1904−/* mod-533-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1905−/* typ-533 %txt /tests/golden/types-union-print-same-origin/types/txt
1906−/* mtre-533 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1907−/* src-534 %jibb /tests/golden/types-union-print-transitive/source/jibb
1908−/* tok-534 %txt /tests/golden/types-union-print-transitive/tokens/txt
1909−/* tre-534 %txt /tests/golden/types-union-print-transitive/tree/txt
1910−/* mod-534-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1911−/* mod-534-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1912−/* typ-534 %txt /tests/golden/types-union-print-transitive/types/txt
1913−/* mtre-534 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1914−/* src-535 %jibb /tests/golden/types-union-singleton/source/jibb
1915−/* tok-535 %txt /tests/golden/types-union-singleton/tokens/txt
1916−/* tre-535 %txt /tests/golden/types-union-singleton/tree/txt
1917−/* typ-535 %txt /tests/golden/types-union-singleton/types/txt
1918−/* src-536 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1919−/* tok-536 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1920−/* tre-536 %txt /tests/golden/types-union-tag-atoms/tree/txt
1921−/* typ-536 %txt /tests/golden/types-union-tag-atoms/types/txt
1922−/* src-537 %jibb /tests/golden/types-union-tags/source/jibb
1923−/* tok-537 %txt /tests/golden/types-union-tags/tokens/txt
1924−/* tre-537 %txt /tests/golden/types-union-tags/tree/txt
1925−/* typ-537 %txt /tests/golden/types-union-tags/types/txt
1926−/* src-538 %jibb /tests/golden/types-union-unresolved/source/jibb
1927−/* tok-538 %txt /tests/golden/types-union-unresolved/tokens/txt
1928−/* tre-538 %txt /tests/golden/types-union-unresolved/tree/txt
1929−/* typ-538 %txt /tests/golden/types-union-unresolved/types/txt
1930−/* src-539 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1931−/* tok-539 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1932−/* tre-539 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1933−/* typ-539 %txt /tests/golden/types-union-unresolved-flow/types/txt
1934−/* src-540 %jibb /tests/golden/types-unit-construction/source/jibb
1935−/* tok-540 %txt /tests/golden/types-unit-construction/tokens/txt
1936−/* tre-540 %txt /tests/golden/types-unit-construction/tree/txt
1937−/* typ-540 %txt /tests/golden/types-unit-construction/types/txt
1938−/* src-541 %jibb /tests/golden/types-unit-context/source/jibb
1939−/* tok-541 %txt /tests/golden/types-unit-context/tokens/txt
1940−/* tre-541 %txt /tests/golden/types-unit-context/tree/txt
1941−/* typ-541 %txt /tests/golden/types-unit-context/types/txt
1942−/* src-542 %jibb /tests/golden/types-unit-patterns/source/jibb
1943−/* tok-542 %txt /tests/golden/types-unit-patterns/tokens/txt
1944−/* tre-542 %txt /tests/golden/types-unit-patterns/tree/txt
1945−/* typ-542 %txt /tests/golden/types-unit-patterns/types/txt
1556+/* src-452 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1557+/* tok-452 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1558+/* tre-452 %txt /tests/golden/types-nested-missing-tag/tree/txt
1559+/* typ-452 %txt /tests/golden/types-nested-missing-tag/types/txt
1560+/* src-453 %jibb /tests/golden/types-null-context/source/jibb
1561+/* tok-453 %txt /tests/golden/types-null-context/tokens/txt
1562+/* tre-453 %txt /tests/golden/types-null-context/tree/txt
1563+/* typ-453 %txt /tests/golden/types-null-context/types/txt
1564+/* src-454 %jibb /tests/golden/types-null-overlap/source/jibb
1565+/* tok-454 %txt /tests/golden/types-null-overlap/tokens/txt
1566+/* tre-454 %txt /tests/golden/types-null-overlap/tree/txt
1567+/* typ-454 %txt /tests/golden/types-null-overlap/types/txt
1568+/* src-455 %jibb /tests/golden/types-null-unresolved/source/jibb
1569+/* tok-455 %txt /tests/golden/types-null-unresolved/tokens/txt
1570+/* tre-455 %txt /tests/golden/types-null-unresolved/tree/txt
1571+/* typ-455 %txt /tests/golden/types-null-unresolved/types/txt
1572+/* src-456 %jibb /tests/golden/types-partial-apply/source/jibb
1573+/* tok-456 %txt /tests/golden/types-partial-apply/tokens/txt
1574+/* tre-456 %txt /tests/golden/types-partial-apply/tree/txt
1575+/* typ-456 %txt /tests/golden/types-partial-apply/types/txt
1576+/* src-457 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1577+/* tok-457 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1578+/* tre-457 %txt /tests/golden/types-partial-atom-alias/tree/txt
1579+/* typ-457 %txt /tests/golden/types-partial-atom-alias/types/txt
1580+/* src-458 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1581+/* tok-458 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1582+/* tre-458 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1583+/* typ-458 %txt /tests/golden/types-partial-atom-constraint/types/txt
1584+/* src-459 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1585+/* tok-459 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1586+/* tre-459 %txt /tests/golden/types-partial-atom-widening/tree/txt
1587+/* typ-459 %txt /tests/golden/types-partial-atom-widening/types/txt
1588+/* src-460 %jibb /tests/golden/types-partial-aura/source/jibb
1589+/* tok-460 %txt /tests/golden/types-partial-aura/tokens/txt
1590+/* tre-460 %txt /tests/golden/types-partial-aura/tree/txt
1591+/* typ-460 %txt /tests/golden/types-partial-aura/types/txt
1592+/* src-461 %jibb /tests/golden/types-partial-aura-family/source/jibb
1593+/* tok-461 %txt /tests/golden/types-partial-aura-family/tokens/txt
1594+/* tre-461 %txt /tests/golden/types-partial-aura-family/tree/txt
1595+/* typ-461 %txt /tests/golden/types-partial-aura-family/types/txt
1596+/* src-462 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1597+/* tok-462 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1598+/* tre-462 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1599+/* typ-462 %txt /tests/golden/types-partial-aura-generalization/types/txt
1600+/* src-463 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1601+/* tok-463 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1602+/* tre-463 %txt /tests/golden/types-partial-bare-atom/tree/txt
1603+/* typ-463 %txt /tests/golden/types-partial-bare-atom/types/txt
1604+/* src-464 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1605+/* tok-464 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1606+/* tre-464 %txt /tests/golden/types-partial-branch-widening/tree/txt
1607+/* typ-464 %txt /tests/golden/types-partial-branch-widening/types/txt
1608+/* src-465 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1609+/* tok-465 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1610+/* tre-465 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1611+/* typ-465 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1612+/* src-466 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1613+/* tok-466 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1614+/* tre-466 %txt /tests/golden/types-partial-decimal-default/tree/txt
1615+/* typ-466 %txt /tests/golden/types-partial-decimal-default/types/txt
1616+/* src-467 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1617+/* tok-467 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1618+/* tre-467 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1619+/* typ-467 %txt /tests/golden/types-partial-dependency-chain/types/txt
1620+/* src-468 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1621+/* tok-468 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1622+/* tre-468 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1623+/* typ-468 %txt /tests/golden/types-partial-explicit-capital/types/txt
1624+/* src-469 %jibb /tests/golden/types-partial-forward/source/jibb
1625+/* tok-469 %txt /tests/golden/types-partial-forward/tokens/txt
1626+/* tre-469 %txt /tests/golden/types-partial-forward/tree/txt
1627+/* typ-469 %txt /tests/golden/types-partial-forward/types/txt
1628+/* src-470 %jibb /tests/golden/types-partial-generalization/source/jibb
1629+/* tok-470 %txt /tests/golden/types-partial-generalization/tokens/txt
1630+/* tre-470 %txt /tests/golden/types-partial-generalization/tree/txt
1631+/* typ-470 %txt /tests/golden/types-partial-generalization/types/txt
1632+/* src-471 %jibb /tests/golden/types-partial-identity/source/jibb
1633+/* tok-471 %txt /tests/golden/types-partial-identity/tokens/txt
1634+/* tre-471 %txt /tests/golden/types-partial-identity/tree/txt
1635+/* typ-471 %txt /tests/golden/types-partial-identity/types/txt
1636+/* src-472 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1637+/* tok-472 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1638+/* tre-472 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1639+/* typ-472 %txt /tests/golden/types-partial-independent-atoms/types/txt
1640+/* src-473 %jibb /tests/golden/types-partial-local-molds/source/jibb
1641+/* tok-473 %txt /tests/golden/types-partial-local-molds/tokens/txt
1642+/* tre-473 %txt /tests/golden/types-partial-local-molds/tree/txt
1643+/* typ-473 %txt /tests/golden/types-partial-local-molds/types/txt
1644+/* src-474 %jibb /tests/golden/types-partial-locals/source/jibb
1645+/* tok-474 %txt /tests/golden/types-partial-locals/tokens/txt
1646+/* tre-474 %txt /tests/golden/types-partial-locals/tree/txt
1647+/* typ-474 %txt /tests/golden/types-partial-locals/types/txt
1648+/* src-475 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1649+/* tok-475 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1650+/* tre-475 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1651+/* typ-475 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1652+/* src-476 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1653+/* tok-476 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1654+/* tre-476 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1655+/* typ-476 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1656+/* src-477 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1657+/* tok-477 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1658+/* tre-477 %txt /tests/golden/types-partial-mold-composite/tree/txt
1659+/* typ-477 %txt /tests/golden/types-partial-mold-composite/types/txt
1660+/* src-478 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1661+/* tok-478 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1662+/* tre-478 %txt /tests/golden/types-partial-mold-forward/tree/txt
1663+/* typ-478 %txt /tests/golden/types-partial-mold-forward/types/txt
1664+/* src-479 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1665+/* tok-479 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1666+/* tre-479 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1667+/* typ-479 %txt /tests/golden/types-partial-mold-recursive/types/txt
1668+/* src-480 %jibb /tests/golden/types-partial-occurs/source/jibb
1669+/* tok-480 %txt /tests/golden/types-partial-occurs/tokens/txt
1670+/* tre-480 %txt /tests/golden/types-partial-occurs/tree/txt
1671+/* typ-480 %txt /tests/golden/types-partial-occurs/types/txt
1672+/* src-481 %jibb /tests/golden/types-partial-projection/source/jibb
1673+/* tok-481 %txt /tests/golden/types-partial-projection/tokens/txt
1674+/* tre-481 %txt /tests/golden/types-partial-projection/tree/txt
1675+/* typ-481 %txt /tests/golden/types-partial-projection/types/txt
1676+/* src-482 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1677+/* tok-482 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1678+/* tre-482 %txt /tests/golden/types-partial-shadow-global/tree/txt
1679+/* typ-482 %txt /tests/golden/types-partial-shadow-global/types/txt
1680+/* src-483 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1681+/* tok-483 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1682+/* tre-483 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1683+/* typ-483 %txt /tests/golden/types-partial-shared-tvar/types/txt
1684+/* src-484 %jibb /tests/golden/types-partial-union-cases/source/jibb
1685+/* tok-484 %txt /tests/golden/types-partial-union-cases/tokens/txt
1686+/* tre-484 %txt /tests/golden/types-partial-union-cases/tree/txt
1687+/* typ-484 %txt /tests/golden/types-partial-union-cases/types/txt
1688+/* src-485 %jibb /tests/golden/types-partial-union-edges/source/jibb
1689+/* tok-485 %txt /tests/golden/types-partial-union-edges/tokens/txt
1690+/* tre-485 %txt /tests/golden/types-partial-union-edges/tree/txt
1691+/* typ-485 %txt /tests/golden/types-partial-union-edges/types/txt
1692+/* src-486 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1693+/* tok-486 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1694+/* tre-486 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1695+/* typ-486 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1696+/* src-487 %jibb /tests/golden/types-prelude-direct/source/jibb
1697+/* tok-487 %txt /tests/golden/types-prelude-direct/tokens/txt
1698+/* tre-487 %txt /tests/golden/types-prelude-direct/tree/txt
1699+/* typ-487 %txt /tests/golden/types-prelude-direct/types/txt
1700+/* src-488 %jibb /tests/golden/types-prelude-interface/source/jibb
1701+/* tok-488 %txt /tests/golden/types-prelude-interface/tokens/txt
1702+/* tre-488 %txt /tests/golden/types-prelude-interface/tree/txt
1703+/* mod-488-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1704+/* mod-488-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1705+/* typ-488 %txt /tests/golden/types-prelude-interface/types/txt
1706+/* mtre-488 %txt /tests/golden/types-prelude-interface/module-trees/txt
1707+/* src-489 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1708+/* tok-489 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1709+/* tre-489 %txt /tests/golden/types-prelude-list-functions/tree/txt
1710+/* mod-489-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1711+/* typ-489 %txt /tests/golden/types-prelude-list-functions/types/txt
1712+/* mtre-489 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1713+/* src-490 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1714+/* tok-490 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1715+/* tre-490 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1716+/* typ-490 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1717+/* src-491 %jibb /tests/golden/types-record-bound-variable/source/jibb
1718+/* tok-491 %txt /tests/golden/types-record-bound-variable/tokens/txt
1719+/* tre-491 %txt /tests/golden/types-record-bound-variable/tree/txt
1720+/* typ-491 %txt /tests/golden/types-record-bound-variable/types/txt
1721+/* src-492 %jibb /tests/golden/types-record-cast-context/source/jibb
1722+/* tok-492 %txt /tests/golden/types-record-cast-context/tokens/txt
1723+/* tre-492 %txt /tests/golden/types-record-cast-context/tree/txt
1724+/* typ-492 %txt /tests/golden/types-record-cast-context/types/txt
1725+/* src-493 %jibb /tests/golden/types-record-change/source/jibb
1726+/* tok-493 %txt /tests/golden/types-record-change/tokens/txt
1727+/* tre-493 %txt /tests/golden/types-record-change/tree/txt
1728+/* typ-493 %txt /tests/golden/types-record-change/types/txt
1729+/* src-494 %jibb /tests/golden/types-record-change-generic/source/jibb
1730+/* tok-494 %txt /tests/golden/types-record-change-generic/tokens/txt
1731+/* tre-494 %txt /tests/golden/types-record-change-generic/tree/txt
1732+/* typ-494 %txt /tests/golden/types-record-change-generic/types/txt
1733+/* src-495 %jibb /tests/golden/types-record-faces/source/jibb
1734+/* tok-495 %txt /tests/golden/types-record-faces/tokens/txt
1735+/* tre-495 %txt /tests/golden/types-record-faces/tree/txt
1736+/* typ-495 %txt /tests/golden/types-record-faces/types/txt
1737+/* src-496 %jibb /tests/golden/types-record-import/source/jibb
1738+/* tok-496 %txt /tests/golden/types-record-import/tokens/txt
1739+/* tre-496 %txt /tests/golden/types-record-import/tree/txt
1740+/* mod-496-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1741+/* typ-496 %txt /tests/golden/types-record-import/types/txt
1742+/* mtre-496 %txt /tests/golden/types-record-import/module-trees/txt
1743+/* src-497 %jibb /tests/golden/types-record-local-scheme/source/jibb
1744+/* tok-497 %txt /tests/golden/types-record-local-scheme/tokens/txt
1745+/* tre-497 %txt /tests/golden/types-record-local-scheme/tree/txt
1746+/* typ-497 %txt /tests/golden/types-record-local-scheme/types/txt
1747+/* src-498 %jibb /tests/golden/types-record-nested/source/jibb
1748+/* tok-498 %txt /tests/golden/types-record-nested/tokens/txt
1749+/* tre-498 %txt /tests/golden/types-record-nested/tree/txt
1750+/* typ-498 %txt /tests/golden/types-record-nested/types/txt
1751+/* src-499 %jibb /tests/golden/types-record-to-tuple/source/jibb
1752+/* tok-499 %txt /tests/golden/types-record-to-tuple/tokens/txt
1753+/* tre-499 %txt /tests/golden/types-record-to-tuple/tree/txt
1754+/* typ-499 %txt /tests/golden/types-record-to-tuple/types/txt
1755+/* src-500 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1756+/* tok-500 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1757+/* tre-500 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1758+/* typ-500 %txt /tests/golden/types-recursion-scc-failures/types/txt
1759+/* src-501 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1760+/* tok-501 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1761+/* tre-501 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1762+/* typ-501 %txt /tests/golden/types-recursion-scc-groups/types/txt
1763+/* src-502 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1764+/* tok-502 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1765+/* tre-502 %txt /tests/golden/types-recursion-scc-import/tree/txt
1766+/* mod-502-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1767+/* typ-502 %txt /tests/golden/types-recursion-scc-import/types/txt
1768+/* mtre-502 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1769+/* src-503 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1770+/* tok-503 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1771+/* tre-503 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1772+/* mod-503-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1773+/* typ-503 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1774+/* mtre-503 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1775+/* src-504 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1776+/* tok-504 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1777+/* tre-504 %txt /tests/golden/types-recursion-scc-local/tree/txt
1778+/* typ-504 %txt /tests/golden/types-recursion-scc-local/types/txt
1779+/* src-505 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1780+/* tok-505 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1781+/* tre-505 %txt /tests/golden/types-recursion-scc-order/tree/txt
1782+/* typ-505 %txt /tests/golden/types-recursion-scc-order/types/txt
1783+/* src-506 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1784+/* tok-506 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1785+/* tre-506 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1786+/* typ-506 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1787+/* src-507 %jibb /tests/golden/types-recursive-branch/source/jibb
1788+/* tok-507 %txt /tests/golden/types-recursive-branch/tokens/txt
1789+/* tre-507 %txt /tests/golden/types-recursive-branch/tree/txt
1790+/* typ-507 %txt /tests/golden/types-recursive-branch/types/txt
1791+/* src-508 %jibb /tests/golden/types-recursive-gate/source/jibb
1792+/* tok-508 %txt /tests/golden/types-recursive-gate/tokens/txt
1793+/* tre-508 %txt /tests/golden/types-recursive-gate/tree/txt
1794+/* typ-508 %txt /tests/golden/types-recursive-gate/types/txt
1795+/* src-509 %jibb /tests/golden/types-recursive-sample/source/jibb
1796+/* tok-509 %txt /tests/golden/types-recursive-sample/tokens/txt
1797+/* tre-509 %txt /tests/golden/types-recursive-sample/tree/txt
1798+/* typ-509 %txt /tests/golden/types-recursive-sample/types/txt
1799+/* src-510 %jibb /tests/golden/types-string-interpolation/source/jibb
1800+/* tok-510 %txt /tests/golden/types-string-interpolation/tokens/txt
1801+/* tre-510 %txt /tests/golden/types-string-interpolation/tree/txt
1802+/* typ-510 %txt /tests/golden/types-string-interpolation/types/txt
1803+/* src-511 %jibb /tests/golden/types-tuple-context/source/jibb
1804+/* tok-511 %txt /tests/golden/types-tuple-context/tokens/txt
1805+/* tre-511 %txt /tests/golden/types-tuple-context/tree/txt
1806+/* typ-511 %txt /tests/golden/types-tuple-context/types/txt
1807+/* src-512 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1808+/* tok-512 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1809+/* tre-512 %txt /tests/golden/types-tuple-context-nested/tree/txt
1810+/* typ-512 %txt /tests/golden/types-tuple-context-nested/types/txt
1811+/* src-513 %jibb /tests/golden/types-union-alias/source/jibb
1812+/* tok-513 %txt /tests/golden/types-union-alias/tokens/txt
1813+/* tre-513 %txt /tests/golden/types-union-alias/tree/txt
1814+/* typ-513 %txt /tests/golden/types-union-alias/types/txt
1815+/* src-514 %jibb /tests/golden/types-union-branch-context/source/jibb
1816+/* tok-514 %txt /tests/golden/types-union-branch-context/tokens/txt
1817+/* tre-514 %txt /tests/golden/types-union-branch-context/tree/txt
1818+/* typ-514 %txt /tests/golden/types-union-branch-context/types/txt
1819+/* src-515 %jibb /tests/golden/types-union-branch-pending/source/jibb
1820+/* tok-515 %txt /tests/golden/types-union-branch-pending/tokens/txt
1821+/* tre-515 %txt /tests/golden/types-union-branch-pending/tree/txt
1822+/* typ-515 %txt /tests/golden/types-union-branch-pending/types/txt
1823+/* src-516 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1824+/* tok-516 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1825+/* tre-516 %txt /tests/golden/types-union-constructor-shape/tree/txt
1826+/* typ-516 %txt /tests/golden/types-union-constructor-shape/types/txt
1827+/* src-517 %jibb /tests/golden/types-union-context-flow/source/jibb
1828+/* tok-517 %txt /tests/golden/types-union-context-flow/tokens/txt
1829+/* tre-517 %txt /tests/golden/types-union-context-flow/tree/txt
1830+/* typ-517 %txt /tests/golden/types-union-context-flow/types/txt
1831+/* src-518 %jibb /tests/golden/types-union-finite/source/jibb
1832+/* tok-518 %txt /tests/golden/types-union-finite/tokens/txt
1833+/* tre-518 %txt /tests/golden/types-union-finite/tree/txt
1834+/* typ-518 %txt /tests/golden/types-union-finite/types/txt
1835+/* src-519 %jibb /tests/golden/types-union-finite-generic/source/jibb
1836+/* tok-519 %txt /tests/golden/types-union-finite-generic/tokens/txt
1837+/* tre-519 %txt /tests/golden/types-union-finite-generic/tree/txt
1838+/* typ-519 %txt /tests/golden/types-union-finite-generic/types/txt
1839+/* src-520 %jibb /tests/golden/types-union-finite-limit/source/jibb
1840+/* tok-520 %txt /tests/golden/types-union-finite-limit/tokens/txt
1841+/* tre-520 %txt /tests/golden/types-union-finite-limit/tree/txt
1842+/* typ-520 %txt /tests/golden/types-union-finite-limit/types/txt
1843+/* src-521 %jibb /tests/golden/types-union-import/source/jibb
1844+/* tok-521 %txt /tests/golden/types-union-import/tokens/txt
1845+/* tre-521 %txt /tests/golden/types-union-import/tree/txt
1846+/* mod-521-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1847+/* typ-521 %txt /tests/golden/types-union-import/types/txt
1848+/* mtre-521 %txt /tests/golden/types-union-import/module-trees/txt
1849+/* src-522 %jibb /tests/golden/types-union-local-pending/source/jibb
1850+/* tok-522 %txt /tests/golden/types-union-local-pending/tokens/txt
1851+/* tre-522 %txt /tests/golden/types-union-local-pending/tree/txt
1852+/* typ-522 %txt /tests/golden/types-union-local-pending/types/txt
1853+/* src-523 %jibb /tests/golden/types-union-overlap/source/jibb
1854+/* tok-523 %txt /tests/golden/types-union-overlap/tokens/txt
1855+/* tre-523 %txt /tests/golden/types-union-overlap/tree/txt
1856+/* typ-523 %txt /tests/golden/types-union-overlap/types/txt
1857+/* src-524 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1858+/* tok-524 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1859+/* tre-524 %txt /tests/golden/types-union-overlap-nested/tree/txt
1860+/* typ-524 %txt /tests/golden/types-union-overlap-nested/types/txt
1861+/* src-525 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1862+/* tok-525 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1863+/* tre-525 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1864+/* typ-525 %txt /tests/golden/types-union-pattern-result-context/types/txt
1865+/* src-526 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1866+/* tok-526 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1867+/* tre-526 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1868+/* typ-526 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1869+/* src-527 %jibb /tests/golden/types-union-patterns/source/jibb
1870+/* tok-527 %txt /tests/golden/types-union-patterns/tokens/txt
1871+/* tre-527 %txt /tests/golden/types-union-patterns/tree/txt
1872+/* typ-527 %txt /tests/golden/types-union-patterns/types/txt
1873+/* src-528 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1874+/* tok-528 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1875+/* tre-528 %txt /tests/golden/types-union-patterns-generic/tree/txt
1876+/* typ-528 %txt /tests/golden/types-union-patterns-generic/types/txt
1877+/* src-529 %jibb /tests/golden/types-union-patterns-import/source/jibb
1878+/* tok-529 %txt /tests/golden/types-union-patterns-import/tokens/txt
1879+/* tre-529 %txt /tests/golden/types-union-patterns-import/tree/txt
1880+/* mod-529-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1881+/* typ-529 %txt /tests/golden/types-union-patterns-import/types/txt
1882+/* mtre-529 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1883+/* src-530 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1884+/* tok-530 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1885+/* tre-530 %txt /tests/golden/types-union-phantom-generic/tree/txt
1886+/* typ-530 %txt /tests/golden/types-union-phantom-generic/types/txt
1887+/* src-531 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1888+/* tok-531 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1889+/* tre-531 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1890+/* mod-531-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1891+/* typ-531 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1892+/* mtre-531 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1893+/* src-532 %jibb /tests/golden/types-union-print-distinct/source/jibb
1894+/* tok-532 %txt /tests/golden/types-union-print-distinct/tokens/txt
1895+/* tre-532 %txt /tests/golden/types-union-print-distinct/tree/txt
1896+/* mod-532-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1897+/* mod-532-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1898+/* mod-532-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1899+/* typ-532 %txt /tests/golden/types-union-print-distinct/types/txt
1900+/* mtre-532 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1901+/* src-533 %jibb /tests/golden/types-union-print-escape/source/jibb
1902+/* tok-533 %txt /tests/golden/types-union-print-escape/tokens/txt
1903+/* tre-533 %txt /tests/golden/types-union-print-escape/tree/txt
1904+/* typ-533 %txt /tests/golden/types-union-print-escape/types/txt
1905+/* src-534 %jibb /tests/golden/types-union-print-local/source/jibb
1906+/* tok-534 %txt /tests/golden/types-union-print-local/tokens/txt
1907+/* tre-534 %txt /tests/golden/types-union-print-local/tree/txt
1908+/* typ-534 %txt /tests/golden/types-union-print-local/types/txt
1909+/* src-535 %jibb /tests/golden/types-union-print-nested/source/jibb
1910+/* tok-535 %txt /tests/golden/types-union-print-nested/tokens/txt
1911+/* tre-535 %txt /tests/golden/types-union-print-nested/tree/txt
1912+/* typ-535 %txt /tests/golden/types-union-print-nested/types/txt
1913+/* src-536 %jibb /tests/golden/types-union-print-same-origin/source/jibb
1914+/* tok-536 %txt /tests/golden/types-union-print-same-origin/tokens/txt
1915+/* tre-536 %txt /tests/golden/types-union-print-same-origin/tree/txt
1916+/* mod-536-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
1917+/* typ-536 %txt /tests/golden/types-union-print-same-origin/types/txt
1918+/* mtre-536 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
1919+/* src-537 %jibb /tests/golden/types-union-print-transitive/source/jibb
1920+/* tok-537 %txt /tests/golden/types-union-print-transitive/tokens/txt
1921+/* tre-537 %txt /tests/golden/types-union-print-transitive/tree/txt
1922+/* mod-537-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
1923+/* mod-537-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
1924+/* typ-537 %txt /tests/golden/types-union-print-transitive/types/txt
1925+/* mtre-537 %txt /tests/golden/types-union-print-transitive/module-trees/txt
1926+/* src-538 %jibb /tests/golden/types-union-singleton/source/jibb
1927+/* tok-538 %txt /tests/golden/types-union-singleton/tokens/txt
1928+/* tre-538 %txt /tests/golden/types-union-singleton/tree/txt
1929+/* typ-538 %txt /tests/golden/types-union-singleton/types/txt
1930+/* src-539 %jibb /tests/golden/types-union-tag-atoms/source/jibb
1931+/* tok-539 %txt /tests/golden/types-union-tag-atoms/tokens/txt
1932+/* tre-539 %txt /tests/golden/types-union-tag-atoms/tree/txt
1933+/* typ-539 %txt /tests/golden/types-union-tag-atoms/types/txt
1934+/* src-540 %jibb /tests/golden/types-union-tags/source/jibb
1935+/* tok-540 %txt /tests/golden/types-union-tags/tokens/txt
1936+/* tre-540 %txt /tests/golden/types-union-tags/tree/txt
1937+/* typ-540 %txt /tests/golden/types-union-tags/types/txt
1938+/* src-541 %jibb /tests/golden/types-union-unresolved/source/jibb
1939+/* tok-541 %txt /tests/golden/types-union-unresolved/tokens/txt
1940+/* tre-541 %txt /tests/golden/types-union-unresolved/tree/txt
1941+/* typ-541 %txt /tests/golden/types-union-unresolved/types/txt
1942+/* src-542 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
1943+/* tok-542 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
1944+/* tre-542 %txt /tests/golden/types-union-unresolved-flow/tree/txt
1945+/* typ-542 %txt /tests/golden/types-union-unresolved-flow/types/txt
1946+/* src-543 %jibb /tests/golden/types-unit-construction/source/jibb
1947+/* tok-543 %txt /tests/golden/types-unit-construction/tokens/txt
1948+/* tre-543 %txt /tests/golden/types-unit-construction/tree/txt
1949+/* typ-543 %txt /tests/golden/types-unit-construction/types/txt
1950+/* src-544 %jibb /tests/golden/types-unit-context/source/jibb
1951+/* tok-544 %txt /tests/golden/types-unit-context/tokens/txt
1952+/* tre-544 %txt /tests/golden/types-unit-context/tree/txt
1953+/* typ-544 %txt /tests/golden/types-unit-context/types/txt
1954+/* src-545 %jibb /tests/golden/types-unit-patterns/source/jibb
1955+/* tok-545 %txt /tests/golden/types-unit-patterns/tokens/txt
1956+/* tre-545 %txt /tests/golden/types-unit-patterns/tree/txt
1957+/* typ-545 %txt /tests/golden/types-unit-patterns/types/txt
19461958=/ prepared-prelude (prepare-prelude:jibb prelude-source)
19471959|%
19481960:: one arm per case
@@ -2849,188 +2861,194 @@
28492861 (weld (check ~.types-multi-call src-450 `tok-450 `tre-450) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-450 `typ-450 ~ ~ ~))
28502862++ test-types-multi-import
28512863 (weld (weld (check ~.types-multi-import src-451 `tok-451 `tre-451) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-451 `typ-451 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-451-1]])) (check-module-trees ~.types-multi-import `mtre-451 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-451-1]]))
2864+++ test-types-nested-missing-tag
2865+ (weld (check ~.types-nested-missing-tag src-452 `tok-452 `tre-452) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-452 `typ-452 ~ ~ ~))
28522866++ test-types-null-context
2853− (weld (check ~.types-null-context src-452 `tok-452 `tre-452) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-452 `typ-452))
2867+ (weld (check ~.types-null-context src-453 `tok-453 `tre-453) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-453 `typ-453))
28542868++ test-types-null-overlap
2855− (weld (check ~.types-null-overlap src-453 `tok-453 `tre-453) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-453 `typ-453))
2869+ (weld (check ~.types-null-overlap src-454 `tok-454 `tre-454) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-454 `typ-454))
28562870++ test-types-null-unresolved
2857− (weld (check ~.types-null-unresolved src-454 `tok-454 `tre-454) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-454 `typ-454))
2871+ (weld (check ~.types-null-unresolved src-455 `tok-455 `tre-455) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-455 `typ-455))
28582872++ test-types-partial-apply
2859− (weld (check ~.types-partial-apply src-455 `tok-455 `tre-455) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-455 `typ-455))
2873+ (weld (check ~.types-partial-apply src-456 `tok-456 `tre-456) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-456 `typ-456))
28602874++ test-types-partial-atom-alias
2861− (weld (check ~.types-partial-atom-alias src-456 `tok-456 `tre-456) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-456 `typ-456))
2875+ (weld (check ~.types-partial-atom-alias src-457 `tok-457 `tre-457) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-457 `typ-457))
28622876++ test-types-partial-atom-constraint
2863− (weld (check ~.types-partial-atom-constraint src-457 `tok-457 `tre-457) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-457 `typ-457))
2877+ (weld (check ~.types-partial-atom-constraint src-458 `tok-458 `tre-458) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-458 `typ-458))
28642878++ test-types-partial-atom-widening
2865− (weld (check ~.types-partial-atom-widening src-458 `tok-458 `tre-458) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-458 `typ-458))
2879+ (weld (check ~.types-partial-atom-widening src-459 `tok-459 `tre-459) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-459 `typ-459))
28662880++ test-types-partial-aura
2867− (weld (check ~.types-partial-aura src-459 `tok-459 `tre-459) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-459 `typ-459))
2881+ (weld (check ~.types-partial-aura src-460 `tok-460 `tre-460) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-460 `typ-460))
28682882++ test-types-partial-aura-family
2869− (weld (check ~.types-partial-aura-family src-460 `tok-460 `tre-460) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-460 `typ-460))
2883+ (weld (check ~.types-partial-aura-family src-461 `tok-461 `tre-461) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-461 `typ-461))
28702884++ test-types-partial-aura-generalization
2871− (weld (check ~.types-partial-aura-generalization src-461 `tok-461 `tre-461) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-461 `typ-461))
2885+ (weld (check ~.types-partial-aura-generalization src-462 `tok-462 `tre-462) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-462 `typ-462))
28722886++ test-types-partial-bare-atom
2873− (weld (check ~.types-partial-bare-atom src-462 `tok-462 `tre-462) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-462 `typ-462))
2887+ (weld (check ~.types-partial-bare-atom src-463 `tok-463 `tre-463) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-463 `typ-463))
28742888++ test-types-partial-branch-widening
2875− (weld (check ~.types-partial-branch-widening src-463 `tok-463 `tre-463) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-463 `typ-463))
2889+ (weld (check ~.types-partial-branch-widening src-464 `tok-464 `tre-464) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-464 `typ-464))
28762890++ test-types-partial-conflicting-sites
2877− (weld (check ~.types-partial-conflicting-sites src-464 `tok-464 `tre-464) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-464 `typ-464))
2891+ (weld (check ~.types-partial-conflicting-sites src-465 `tok-465 `tre-465) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-465 `typ-465))
28782892++ test-types-partial-decimal-default
2879− (weld (check ~.types-partial-decimal-default src-465 `tok-465 `tre-465) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-465 `typ-465))
2893+ (weld (check ~.types-partial-decimal-default src-466 `tok-466 `tre-466) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-466 `typ-466))
28802894++ test-types-partial-dependency-chain
2881− (weld (check ~.types-partial-dependency-chain src-466 `tok-466 `tre-466) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-466 `typ-466))
2895+ (weld (check ~.types-partial-dependency-chain src-467 `tok-467 `tre-467) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-467 `typ-467))
28822896++ test-types-partial-explicit-capital
2883− (weld (check ~.types-partial-explicit-capital src-467 `tok-467 `tre-467) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-467 `typ-467))
2897+ (weld (check ~.types-partial-explicit-capital src-468 `tok-468 `tre-468) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-468 `typ-468))
28842898++ test-types-partial-forward
2885− (weld (check ~.types-partial-forward src-468 `tok-468 `tre-468) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-468 `typ-468))
2899+ (weld (check ~.types-partial-forward src-469 `tok-469 `tre-469) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-469 `typ-469))
28862900++ test-types-partial-generalization
2887− (weld (check ~.types-partial-generalization src-469 `tok-469 `tre-469) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-469 `typ-469))
2901+ (weld (check ~.types-partial-generalization src-470 `tok-470 `tre-470) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-470 `typ-470))
28882902++ test-types-partial-identity
2889− (weld (check ~.types-partial-identity src-470 `tok-470 `tre-470) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-470 `typ-470))
2903+ (weld (check ~.types-partial-identity src-471 `tok-471 `tre-471) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-471 `typ-471))
28902904++ test-types-partial-independent-atoms
2891− (weld (check ~.types-partial-independent-atoms src-471 `tok-471 `tre-471) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-471 `typ-471))
2905+ (weld (check ~.types-partial-independent-atoms src-472 `tok-472 `tre-472) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-472 `typ-472))
28922906++ test-types-partial-local-molds
2893− (weld (check ~.types-partial-local-molds src-472 `tok-472 `tre-472) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-472 `typ-472))
2907+ (weld (check ~.types-partial-local-molds src-473 `tok-473 `tre-473) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-473 `typ-473))
28942908++ test-types-partial-locals
2895− (weld (check ~.types-partial-locals src-473 `tok-473 `tre-473) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-473 `typ-473))
2909+ (weld (check ~.types-partial-locals src-474 `tok-474 `tre-474) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-474 `typ-474))
28962910++ test-types-partial-many-atom-constraints
2897− (weld (check ~.types-partial-many-atom-constraints src-474 `tok-474 `tre-474) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-474 `typ-474))
2911+ (weld (check ~.types-partial-many-atom-constraints src-475 `tok-475 `tre-475) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-475 `typ-475))
28982912++ test-types-partial-mold-bare-aura
2899− (weld (check ~.types-partial-mold-bare-aura src-475 `tok-475 `tre-475) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-475 `typ-475))
2913+ (weld (check ~.types-partial-mold-bare-aura src-476 `tok-476 `tre-476) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-476 `typ-476))
29002914++ test-types-partial-mold-composite
2901− (weld (check ~.types-partial-mold-composite src-476 `tok-476 `tre-476) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-476 `typ-476))
2915+ (weld (check ~.types-partial-mold-composite src-477 `tok-477 `tre-477) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-477 `typ-477))
29022916++ test-types-partial-mold-forward
2903− (weld (check ~.types-partial-mold-forward src-477 `tok-477 `tre-477) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-477 `typ-477))
2917+ (weld (check ~.types-partial-mold-forward src-478 `tok-478 `tre-478) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-478 `typ-478))
29042918++ test-types-partial-mold-recursive
2905− (weld (check ~.types-partial-mold-recursive src-478 `tok-478 `tre-478) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-478 `typ-478))
2919+ (weld (check ~.types-partial-mold-recursive src-479 `tok-479 `tre-479) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-479 `typ-479))
29062920++ test-types-partial-occurs
2907− (weld (check ~.types-partial-occurs src-479 `tok-479 `tre-479) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-479 `typ-479))
2921+ (weld (check ~.types-partial-occurs src-480 `tok-480 `tre-480) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-480 `typ-480))
29082922++ test-types-partial-projection
2909− (weld (check ~.types-partial-projection src-480 `tok-480 `tre-480) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-480 `typ-480))
2923+ (weld (check ~.types-partial-projection src-481 `tok-481 `tre-481) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-481 `typ-481))
29102924++ test-types-partial-shadow-global
2911− (weld (check ~.types-partial-shadow-global src-481 `tok-481 `tre-481) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-481 `typ-481))
2925+ (weld (check ~.types-partial-shadow-global src-482 `tok-482 `tre-482) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-482 `typ-482))
29122926++ test-types-partial-shared-tvar
2913− (weld (check ~.types-partial-shared-tvar src-482 `tok-482 `tre-482) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-482 `typ-482))
2927+ (weld (check ~.types-partial-shared-tvar src-483 `tok-483 `tre-483) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-483 `typ-483))
29142928++ test-types-partial-union-cases
2915− (weld (check ~.types-partial-union-cases src-483 `tok-483 `tre-483) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-483 `typ-483))
2929+ (weld (check ~.types-partial-union-cases src-484 `tok-484 `tre-484) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-484 `typ-484))
29162930++ test-types-partial-union-edges
2917− (weld (check ~.types-partial-union-edges src-484 `tok-484 `tre-484) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-484 `typ-484))
2931+ (weld (check ~.types-partial-union-edges src-485 `tok-485 `tre-485) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-485 `typ-485))
29182932++ test-types-partial-unresolved-tag
2919− (weld (check ~.types-partial-unresolved-tag src-485 `tok-485 `tre-485) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-485 `typ-485))
2933+ (weld (check ~.types-partial-unresolved-tag src-486 `tok-486 `tre-486) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-486 `typ-486))
29202934++ test-types-prelude-direct
2921− (weld (check ~.types-prelude-direct src-486 `tok-486 `tre-486) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-486 `typ-486 ~ ~ ~))
2935+ (weld (check ~.types-prelude-direct src-487 `tok-487 `tre-487) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-487 `typ-487 ~ ~ ~))
29222936++ test-types-prelude-interface
2923− (weld (weld (check ~.types-prelude-interface src-487 `tok-487 `tre-487) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-487 `typ-487 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-487-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-487-2]])) (check-module-trees ~.types-prelude-interface `mtre-487 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-487-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-487-2]]))
2937+ (weld (weld (check ~.types-prelude-interface src-488 `tok-488 `tre-488) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-488-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-488-2]])) (check-module-trees ~.types-prelude-interface `mtre-488 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-488-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-488-2]]))
29242938++ test-types-prelude-list-functions
2925− (weld (weld (check ~.types-prelude-list-functions src-488 `tok-488 `tre-488) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-488 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]]))
2939+ (weld (weld (check ~.types-prelude-list-functions src-489 `tok-489 `tre-489) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-489 `typ-489 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-489-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-489 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-489-1]]))
29262940++ test-types-prelude-unit-helpers
2927− (weld (check ~.types-prelude-unit-helpers src-489 `tok-489 `tre-489) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-489 `typ-489 ~ ~ ~))
2941+ (weld (check ~.types-prelude-unit-helpers src-490 `tok-490 `tre-490) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-490 `typ-490 ~ ~ ~))
29282942++ test-types-record-bound-variable
2929− (weld (check ~.types-record-bound-variable src-490 `tok-490 `tre-490) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-490 `typ-490))
2943+ (weld (check ~.types-record-bound-variable src-491 `tok-491 `tre-491) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-491 `typ-491))
29302944++ test-types-record-cast-context
2931− (weld (check ~.types-record-cast-context src-491 `tok-491 `tre-491) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-491 `typ-491 ~ ~ ~))
2945+ (weld (check ~.types-record-cast-context src-492 `tok-492 `tre-492) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-492 `typ-492 ~ ~ ~))
29322946++ test-types-record-change
2933− (weld (check ~.types-record-change src-492 `tok-492 `tre-492) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-492 `typ-492 ~ ~ ~))
2947+ (weld (check ~.types-record-change src-493 `tok-493 `tre-493) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-493 `typ-493 ~ ~ ~))
29342948++ test-types-record-change-generic
2935− (weld (check ~.types-record-change-generic src-493 `tok-493 `tre-493) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-493 `typ-493 ~ ~ ~))
2949+ (weld (check ~.types-record-change-generic src-494 `tok-494 `tre-494) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-494 `typ-494 ~ ~ ~))
29362950++ test-types-record-faces
2937− (weld (check ~.types-record-faces src-494 `tok-494 `tre-494) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-494 `typ-494))
2951+ (weld (check ~.types-record-faces src-495 `tok-495 `tre-495) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-495 `typ-495))
29382952++ test-types-record-import
2939− (weld (weld (check ~.types-record-import src-495 `tok-495 `tre-495) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-495 `typ-495 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]])) (check-module-trees ~.types-record-import `mtre-495 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-495-1]]))
2953+ (weld (weld (check ~.types-record-import src-496 `tok-496 `tre-496) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-496 `typ-496 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-496-1]])) (check-module-trees ~.types-record-import `mtre-496 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-496-1]]))
29402954++ test-types-record-local-scheme
2941− (weld (check ~.types-record-local-scheme src-496 `tok-496 `tre-496) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-496 `typ-496))
2955+ (weld (check ~.types-record-local-scheme src-497 `tok-497 `tre-497) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-497 `typ-497))
29422956++ test-types-record-nested
2943− (weld (check ~.types-record-nested src-497 `tok-497 `tre-497) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-497 `typ-497))
2957+ (weld (check ~.types-record-nested src-498 `tok-498 `tre-498) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-498 `typ-498))
29442958++ test-types-record-to-tuple
2945− (weld (check ~.types-record-to-tuple src-498 `tok-498 `tre-498) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-498 `typ-498))
2959+ (weld (check ~.types-record-to-tuple src-499 `tok-499 `tre-499) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-499 `typ-499))
29462960++ test-types-recursion-scc-failures
2947− (weld (check ~.types-recursion-scc-failures src-499 `tok-499 `tre-499) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-499 `typ-499 ~ ~ ~))
2961+ (weld (check ~.types-recursion-scc-failures src-500 `tok-500 `tre-500) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-500 `typ-500 ~ ~ ~))
29482962++ test-types-recursion-scc-groups
2949− (weld (check ~.types-recursion-scc-groups src-500 `tok-500 `tre-500) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-500 `typ-500 ~ ~ ~))
2963+ (weld (check ~.types-recursion-scc-groups src-501 `tok-501 `tre-501) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-501 `typ-501 ~ ~ ~))
29502964++ test-types-recursion-scc-import
2951− (weld (weld (check ~.types-recursion-scc-import src-501 `tok-501 `tre-501) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-501 `typ-501 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-501-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-501 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-501-1]]))
2965+ (weld (weld (check ~.types-recursion-scc-import src-502 `tok-502 `tre-502) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-502 `typ-502 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-502 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]]))
29522966++ test-types-recursion-scc-import-bad
2953− (weld (weld (check ~.types-recursion-scc-import-bad src-502 `tok-502 `tre-502) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-502 `typ-502 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-502 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]]))
2967+ (weld (weld (check ~.types-recursion-scc-import-bad src-503 `tok-503 `tre-503) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-503 `typ-503 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-503-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-503 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-503-1]]))
29542968++ test-types-recursion-scc-local
2955− (weld (check ~.types-recursion-scc-local src-503 `tok-503 `tre-503) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-503 `typ-503 ~ ~ ~))
2969+ (weld (check ~.types-recursion-scc-local src-504 `tok-504 `tre-504) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-504 `typ-504 ~ ~ ~))
29562970++ test-types-recursion-scc-order
2957− (weld (check ~.types-recursion-scc-order src-504 `tok-504 `tre-504) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-504 `typ-504 ~ ~ ~))
2971+ (weld (check ~.types-recursion-scc-order src-505 `tok-505 `tre-505) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-505 `typ-505 ~ ~ ~))
29582972++ test-types-recursion-scc-shadow
2959− (weld (check ~.types-recursion-scc-shadow src-505 `tok-505 `tre-505) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-505 `typ-505 ~ ~ ~))
2973+ (weld (check ~.types-recursion-scc-shadow src-506 `tok-506 `tre-506) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-506 `typ-506 ~ ~ ~))
29602974++ test-types-recursive-branch
2961− (weld (check ~.types-recursive-branch src-506 `tok-506 `tre-506) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-506 `typ-506 ~ ~ ~))
2975+ (weld (check ~.types-recursive-branch src-507 `tok-507 `tre-507) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-507 `typ-507 ~ ~ ~))
29622976++ test-types-recursive-gate
2963− (weld (check ~.types-recursive-gate src-507 `tok-507 `tre-507) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-507 `typ-507))
2977+ (weld (check ~.types-recursive-gate src-508 `tok-508 `tre-508) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-508 `typ-508))
29642978++ test-types-recursive-sample
2965− (weld (check ~.types-recursive-sample src-508 `tok-508 `tre-508) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-508 `typ-508))
2979+ (weld (check ~.types-recursive-sample src-509 `tok-509 `tre-509) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-509 `typ-509))
29662980++ test-types-string-interpolation
2967− (weld (check ~.types-string-interpolation src-509 `tok-509 `tre-509) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-509 `typ-509 ~ ~ ~))
2981+ (weld (check ~.types-string-interpolation src-510 `tok-510 `tre-510) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-510 `typ-510 ~ ~ ~))
29682982++ test-types-tuple-context
2969− (weld (check ~.types-tuple-context src-510 `tok-510 `tre-510) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-510 `typ-510 ~ ~ ~))
2983+ (weld (check ~.types-tuple-context src-511 `tok-511 `tre-511) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-511 `typ-511 ~ ~ ~))
29702984++ test-types-tuple-context-nested
2971− (weld (check ~.types-tuple-context-nested src-511 `tok-511 `tre-511) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-511 `typ-511 ~ ~ ~))
2985+ (weld (check ~.types-tuple-context-nested src-512 `tok-512 `tre-512) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-512 `typ-512 ~ ~ ~))
29722986++ test-types-union-alias
2973− (weld (check ~.types-union-alias src-512 `tok-512 `tre-512) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-512 `typ-512))
2987+ (weld (check ~.types-union-alias src-513 `tok-513 `tre-513) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-513 `typ-513))
29742988++ test-types-union-branch-context
2975− (weld (check ~.types-union-branch-context src-513 `tok-513 `tre-513) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-513 `typ-513))
2989+ (weld (check ~.types-union-branch-context src-514 `tok-514 `tre-514) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-514 `typ-514))
29762990++ test-types-union-branch-pending
2977− (weld (check ~.types-union-branch-pending src-514 `tok-514 `tre-514) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-514 `typ-514))
2991+ (weld (check ~.types-union-branch-pending src-515 `tok-515 `tre-515) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-515 `typ-515))
29782992++ test-types-union-constructor-shape
2979− (weld (check ~.types-union-constructor-shape src-515 `tok-515 `tre-515) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-515 `typ-515))
2993+ (weld (check ~.types-union-constructor-shape src-516 `tok-516 `tre-516) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-516 `typ-516))
29802994++ test-types-union-context-flow
2981− (weld (check ~.types-union-context-flow src-516 `tok-516 `tre-516) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-516 `typ-516))
2995+ (weld (check ~.types-union-context-flow src-517 `tok-517 `tre-517) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-517 `typ-517))
29822996++ test-types-union-finite
2983− (weld (check ~.types-union-finite src-517 `tok-517 `tre-517) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-517 `typ-517 ~ ~ ~))
2997+ (weld (check ~.types-union-finite src-518 `tok-518 `tre-518) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-518 `typ-518 ~ ~ ~))
29842998++ test-types-union-finite-generic
2985− (weld (check ~.types-union-finite-generic src-518 `tok-518 `tre-518) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-518 `typ-518 ~ ~ ~))
2999+ (weld (check ~.types-union-finite-generic src-519 `tok-519 `tre-519) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-519 `typ-519 ~ ~ ~))
29863000++ test-types-union-finite-limit
2987− (weld (check ~.types-union-finite-limit src-519 `tok-519 `tre-519) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-519 `typ-519 ~ ~ ~))
3001+ (weld (check ~.types-union-finite-limit src-520 `tok-520 `tre-520) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-520 `typ-520 ~ ~ ~))
29883002++ test-types-union-import
2989− (weld (weld (check ~.types-union-import src-520 `tok-520 `tre-520) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-520 `typ-520 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-520-1]])) (check-module-trees ~.types-union-import `mtre-520 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-520-1]]))
3003+ (weld (weld (check ~.types-union-import src-521 `tok-521 `tre-521) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-521 `typ-521 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-521-1]])) (check-module-trees ~.types-union-import `mtre-521 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-521-1]]))
29903004++ test-types-union-local-pending
2991− (weld (check ~.types-union-local-pending src-521 `tok-521 `tre-521) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-521 `typ-521))
3005+ (weld (check ~.types-union-local-pending src-522 `tok-522 `tre-522) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-522 `typ-522))
29923006++ test-types-union-overlap
2993− (weld (check ~.types-union-overlap src-522 `tok-522 `tre-522) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-522 `typ-522))
3007+ (weld (check ~.types-union-overlap src-523 `tok-523 `tre-523) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-523 `typ-523))
29943008++ test-types-union-overlap-nested
2995− (weld (check ~.types-union-overlap-nested src-523 `tok-523 `tre-523) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-523 `typ-523))
3009+ (weld (check ~.types-union-overlap-nested src-524 `tok-524 `tre-524) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-524 `typ-524))
3010+++ test-types-union-pattern-result-context
3011+ (weld (check ~.types-union-pattern-result-context src-525 `tok-525 `tre-525) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-525 `typ-525 ~ ~ ~))
3012+++ test-types-union-pattern-result-controls
3013+ (weld (check ~.types-union-pattern-result-controls src-526 `tok-526 `tre-526) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-526 `typ-526 ~ ~ ~))
29963014++ test-types-union-patterns
2997− (weld (check ~.types-union-patterns src-524 `tok-524 `tre-524) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-524 `typ-524 ~ ~ ~))
3015+ (weld (check ~.types-union-patterns src-527 `tok-527 `tre-527) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-527 `typ-527 ~ ~ ~))
29983016++ test-types-union-patterns-generic
2999− (weld (check ~.types-union-patterns-generic src-525 `tok-525 `tre-525) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-525 `typ-525 ~ ~ ~))
3017+ (weld (check ~.types-union-patterns-generic src-528 `tok-528 `tre-528) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-528 `typ-528 ~ ~ ~))
30003018++ test-types-union-patterns-import
3001− (weld (weld (check ~.types-union-patterns-import src-526 `tok-526 `tre-526) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-526 `typ-526 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-526-1]])) (check-module-trees ~.types-union-patterns-import `mtre-526 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-526-1]]))
3019+ (weld (weld (check ~.types-union-patterns-import src-529 `tok-529 `tre-529) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-529 `typ-529 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-529-1]])) (check-module-trees ~.types-union-patterns-import `mtre-529 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-529-1]]))
30023020++ test-types-union-phantom-generic
3003− (weld (check ~.types-union-phantom-generic src-527 `tok-527 `tre-527) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-527 `typ-527))
3021+ (weld (check ~.types-union-phantom-generic src-530 `tok-530 `tre-530) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-530 `typ-530))
30043022++ test-types-union-print-cross-namespace
3005− (weld (weld (check ~.types-union-print-cross-namespace src-528 `tok-528 `tre-528) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-528 `typ-528 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-528-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-528 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-528-1]]))
3023+ (weld (weld (check ~.types-union-print-cross-namespace src-531 `tok-531 `tre-531) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-531 `typ-531 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-531-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-531 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-531-1]]))
30063024++ test-types-union-print-distinct
3007− (weld (weld (check ~.types-union-print-distinct src-529 `tok-529 `tre-529) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-529 `typ-529 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-529-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-529-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-529-3]])) (check-module-trees ~.types-union-print-distinct `mtre-529 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-529-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-529-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-529-3]]))
3025+ (weld (weld (check ~.types-union-print-distinct src-532 `tok-532 `tre-532) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-532 `typ-532 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-532-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-532-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-532-3]])) (check-module-trees ~.types-union-print-distinct `mtre-532 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-532-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-532-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-532-3]]))
30083026++ test-types-union-print-escape
3009− (weld (check ~.types-union-print-escape src-530 `tok-530 `tre-530) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-530 `typ-530))
3027+ (weld (check ~.types-union-print-escape src-533 `tok-533 `tre-533) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-533 `typ-533))
30103028++ test-types-union-print-local
3011− (weld (check ~.types-union-print-local src-531 `tok-531 `tre-531) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-531 `typ-531))
3029+ (weld (check ~.types-union-print-local src-534 `tok-534 `tre-534) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-534 `typ-534))
30123030++ test-types-union-print-nested
3013− (weld (check ~.types-union-print-nested src-532 `tok-532 `tre-532) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-532 `typ-532))
3031+ (weld (check ~.types-union-print-nested src-535 `tok-535 `tre-535) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-535 `typ-535))
30143032++ test-types-union-print-same-origin
3015− (weld (weld (check ~.types-union-print-same-origin src-533 `tok-533 `tre-533) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-533 `typ-533 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-533-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-533 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-533-1]]))
3033+ (weld (weld (check ~.types-union-print-same-origin src-536 `tok-536 `tre-536) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-536 `typ-536 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-536-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-536 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-536-1]]))
30163034++ test-types-union-print-transitive
3017− (weld (weld (check ~.types-union-print-transitive src-534 `tok-534 `tre-534) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-534 `typ-534 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-534-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-534-2]])) (check-module-trees ~.types-union-print-transitive `mtre-534 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-534-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-534-2]]))
3035+ (weld (weld (check ~.types-union-print-transitive src-537 `tok-537 `tre-537) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-537 `typ-537 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-537-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-537-2]])) (check-module-trees ~.types-union-print-transitive `mtre-537 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-537-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-537-2]]))
30183036++ test-types-union-singleton
3019− (weld (check ~.types-union-singleton src-535 `tok-535 `tre-535) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-535 `typ-535))
3037+ (weld (check ~.types-union-singleton src-538 `tok-538 `tre-538) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-538 `typ-538))
30203038++ test-types-union-tag-atoms
3021− (weld (check ~.types-union-tag-atoms src-536 `tok-536 `tre-536) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-536 `typ-536))
3039+ (weld (check ~.types-union-tag-atoms src-539 `tok-539 `tre-539) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-539 `typ-539))
30223040++ test-types-union-tags
3023− (weld (check ~.types-union-tags src-537 `tok-537 `tre-537) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-537 `typ-537))
3041+ (weld (check ~.types-union-tags src-540 `tok-540 `tre-540) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-540 `typ-540))
30243042++ test-types-union-unresolved
3025− (weld (check ~.types-union-unresolved src-538 `tok-538 `tre-538) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-538 `typ-538))
3043+ (weld (check ~.types-union-unresolved src-541 `tok-541 `tre-541) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-541 `typ-541))
30263044++ test-types-union-unresolved-flow
3027− (weld (check ~.types-union-unresolved-flow src-539 `tok-539 `tre-539) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-539 `typ-539))
3045+ (weld (check ~.types-union-unresolved-flow src-542 `tok-542 `tre-542) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-542 `typ-542))
30283046++ test-types-unit-construction
3029− (weld (check ~.types-unit-construction src-540 `tok-540 `tre-540) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-540 `typ-540 ~ ~ ~))
3047+ (weld (check ~.types-unit-construction src-543 `tok-543 `tre-543) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-543 `typ-543 ~ ~ ~))
30303048++ test-types-unit-context
3031− (weld (check ~.types-unit-context src-541 `tok-541 `tre-541) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-541 `typ-541 ~ ~ ~))
3049+ (weld (check ~.types-unit-context src-544 `tok-544 `tre-544) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-544 `typ-544 ~ ~ ~))
30323050++ test-types-unit-patterns
3033− (weld (check ~.types-unit-patterns src-542 `tok-542 `tre-542) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-542 `typ-542))
3051+ (weld (check ~.types-unit-patterns src-545 `tok-545 `tre-545) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-545 `typ-545))
30343052::
30353053:: +check: run golden:jibb on a case and compare both outputs
30363054::
tests/type-import/expected.txt+4−4
@@ -19,13 +19,13 @@ partial inference; module not checked
1919 ^
2020++ status: $-([status=(%deny %approve) text=@t] (%deny %approve))
2121++ nested-yes: [status=(%deny %approve) text=@t]
22−++ nested-absent: cast mold and expression type do not unify
23−/test.jibb:17:21: cast mold
22+++ nested-absent: union %deny %approve has no case `%other`
23+/test.jibb:17:21: expected union
2424++ nested-absent ^- nested-choice.fixture [%other "hi"]
2525 ^
26−/test.jibb:17:43: expression
26+/test.jibb:17:44: tag
2727++ nested-absent ^- nested-choice.fixture [%other "hi"]
28− ^
28+ ^
2929++ overlap: sample mold is not supported by partial inference
3030++ malformed: sample mold is not supported by partial inference
3131++ collapsed: sample mold is not supported by partial inference
tests/type-tlon/about.txtnew file+6
@@ -0,0 +1,6 @@
1+The real Tlon presence /sur fixture is the unmodified upstream file and
2+license in tests/importer. Its action-1, command-1, update-1 and response-1
3+unions have distinct literal head tags and named record and collection
4+payloads. These Jibb identity gates and a field read exercise the actual
5+source-aware reader and checker together. The report is partial inference,
6+not a claim that the module has been checked.
tests/type-tlon/expected.txtnew file+6
@@ -0,0 +1,6 @@
1+partial inference; module not checked
2+++ action: $-(([%set [disclose=(set @p) [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timeout=(unit @dr) display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]]] [%nuke context=(list @ta)] [%clear key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]]) ([%set [disclose=(set @p) [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timeout=(unit @dr) display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]]] [%nuke context=(list @ta)] [%clear key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]]))
3+++ command: $-(([%set [disclose=(set @p) [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timing=[since=@da timeout=(unit @dr)] display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]]] [%clear key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]]) ([%set [disclose=(set @p) [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timing=[since=@da timeout=(unit @dr)] display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]]] [%clear key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]]))
4+++ update: $-(([%set [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timing=[since=@da timeout=(unit @dr)] display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]] [%clear key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]]) ([%set [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timing=[since=@da timeout=(unit @dr)] display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]] [%clear key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]]))
5+++ response: $-(([%gone key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]] [%here [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timing=[since=@da timeout=(unit @dr)] display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]] [%init places=(map (list @ta) (map (%other %typing %computing) (map @p [[since=@da timeout=(unit @dr)] [icon=(unit @t) [text=(unit @t) blob=(unit @t)]]])))]) ([%gone key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]]] [%here [key=[context=(list @ta) [ship=@p topic=(%other %typing %computing)]] [timing=[since=@da timeout=(unit @dr)] display=[icon=(unit @t) [text=(unit @t) blob=(unit @t)]]]]] [%init places=(map (list @ta) (map (%other %typing %computing) (map @p [[since=@da timeout=(unit @dr)] [icon=(unit @t) [text=(unit @t) blob=(unit @t)]]])))]))
6+++ context: $-([context=(list @ta) [ship=@p topic=(%other %typing %computing)]] (list @ta))
tests/type-tlon/source.txtnew file+6
@@ -0,0 +1,6 @@
1+/- presence
2+++ action |= x=action-1.presence x
3+++ command |= x=command-1.presence x
4+++ update |= x=update-1.presence x
5+++ response |= x=response-1.presence x
6+++ context |= x=key.presence context.x
tools/type-tlon-testnew file+39
@@ -0,0 +1,39 @@
1+#!/usr/bin/env python3
2+"""Run the real Tlon importer/checker bridge fixture under urbit eval."""
3+
4+from pathlib import Path
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+fixture = root / 'tests' / 'type-tlon'
12+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
13+tests = (root / 'tests/lib/jibb-tlon-bridge.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ jibb-import\n' + reader +
16+ '\n=/ presence=wain (to-wain:format sur-text)\n'
17+ '=/ source=wain (to-wain:format source-text)\n'
18+ '=/ expected=wain (to-wain:format expected-text)\n'
19+ '=/ bridge\n' + tests +
20+ '\n(bridge-output:bridge sur-text source-text)\n')
21+with tempfile.TemporaryDirectory(prefix='jibb-type-tlon-') as tmp:
22+ program = Path(tmp) / 'bridge.hoon'
23+ program.write_text(expression)
24+ result = subprocess.run([
25+ str(root / 'tools/hoon'), '--raw', '-f', str(program),
26+ '--cord', 'sur-text=' + str(root / 'tests/importer/tlon-presence.txt'),
27+ '--cord', 'source-text=' + str(fixture / 'source.txt'),
28+ '--cord', 'expected-text=' + str(fixture / 'expected.txt')],
29+ stdout=subprocess.PIPE)
30+if result.returncode:
31+ sys.exit(result.returncode)
32+expected = (fixture / 'expected.txt').read_bytes()
33+if result.stdout != expected:
34+ sys.stderr.writelines(difflib.unified_diff(
35+ expected.decode().splitlines(keepends=True),
36+ result.stdout.decode().splitlines(keepends=True),
37+ fromfile='expected.txt', tofile='actual types'))
38+ sys.exit(1)
39+print('Tlon importer/checker bridge golden passed')