on master help sign in
Infer term-headed pairs and import nested unions
commited9291e6e56f8269f2f0dab080569bf06fa9f1da authoriko <mail@iko.soy> dateSat 31 Oct 2026, 03:50 (8 hours ago) parentfd2f288
34 files changed+1610−556
docs/compiler.md+4−2 docs/prelude-inventory.md+2 docs/status.md+7−6 jibb-dev/lib/jibb-import.hoon+87−16 jibb-dev/lib/jibb.hoon+12 jibb-dev/lib/jibb/prelude.jibb+16 tests/golden/prelude-unit-list-transforms/source.jibb+16 tests/golden/prelude-unit-list-transforms/tokens.txt+149−5 tests/golden/prelude-unit-list-transforms/tree.txt+71−1 tests/golden/prelude-unit-list-transforms/types.txt+4 tests/golden/types-import-tlon-notes/about.txt+1−1 tests/golden/types-import-tlon-notes/imports.txt+2 tests/golden/types-import-tlon-notes/source.jibb+2 tests/golden/types-import-tlon-notes/tokens.txt+17−1 tests/golden/types-import-tlon-notes/tree.txt+9−1 tests/golden/types-import-tlon-notes/types.txt+2 tests/golden/types-pair-context/about.txt+4 tests/golden/types-pair-context/modules.txt+1 tests/golden/types-pair-context/source.jibb+32 tests/golden/types-pair-context/tokens.txt+217 tests/golden/types-pair-context/tree.txt+86 tests/golden/types-pair-context/types.txt+43 tests/golden/types-prelude-functional/about.txt+4 tests/golden/types-prelude-functional/modules.txt+1 tests/golden/types-prelude-functional/source.jibb+18 tests/golden/types-prelude-functional/tokens.txt+145 tests/golden/types-prelude-functional/tree.txt+65 tests/golden/types-prelude-functional/types.txt+23 tests/importer/about.txt+7 tests/importer/shadow-static.txt+2 tests/importer/small.txt+12 tests/importer/tree.txt+12 tests/lib/jibb.hoon+536−522 tools/importer-test+1−1
docs/compiler.md+4−2
@@ -74,6 +74,8 @@ Multi-argument calls form one right-nested sample: `f a b c` supplies `[a [b c]]
7474
7575A list literal can be inferred when a cast or known gate sample supplies a list type and the supplied prelude has the validated standard list definition. Empty, nonempty and nested literals work, including contextual union tags in elements; mismatched elements report the item and expected type. Imported Hoon lists share this representation. Under the same known context, `~` and zero-valued term literals fit an empty list, and a two-item unfaced cell `[head tail]` is a cons; cons cells and list literals can be nested. Mismatched heads or tails report both sites. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. A known gate sample also supplies context to corresponding positions of a single tuple or record argument, including nested cells; a zero literal can therefore fit a list position. A bound zero constant still remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Uncontextualized list literals also infer with a fresh element variable, including empty and nested lists; the resulting variable can generalize. Unresolved item tags and uncertain widening remain unsupported. Faced or longer cons cells, and a missing or altered prelude list remain unsupported. For a known standard list with a supported element type, it also infers a complete two-arm branch using `~` and `[item rest]`, in either order. The binders have the element and list types and cannot shadow or duplicate names. Unknown subjects, unsupported element types, other patterns and incomplete arms remain unsupported.
7676
77+A term-headed pair such as `gap+%s2` follows the same contextual inference as `[%gap %s2]`; its synthetic head uses the pair’s span in diagnostics.
78+
7779A backtick constructs a unit when the supplied prelude has the validated standard `unit` template. Its payload is inferred normally, retaining pending literals and generic variables; nested units work and the prelude’s `some` becomes available. With ordinary result annotations, its `bind`, `biff`, `both`, `clap`, `clef` and `flit` also infer. A known unit in a cast, call, list item or record field supplies its payload context, including nested units and lists; definite mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude templates remain unsupported.
7880
7981A 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.
@@ -82,7 +84,7 @@ A known closed union with two or more arms can be matched when each arm provably
8284
8385A 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.
8486
85−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. For a mark whose sample is exactly a named arm of its single Ford-imported `/sur` core, it can recover a source-proved nonrecursive union, including source-location wrappers around fields; recursive or unverified fallback results remain unsupported. 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, including bare `~` fields, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. The real Tlon `notes.u-note` exercises its `[%deleted ~]` case. 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, Hoon's `%n` zero singleton as Jibb `~`, 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.
87+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. For a mark whose sample is exactly a named arm of its single Ford-imported `/sur` core, it can recover a source-proved nonrecursive union, including source-location wrappers around fields; recursive or unverified fallback results remain unsupported. 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, including bare `~` fields, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. The real Tlon `notes.u-note` exercises its `[%deleted ~]` case. A bounded fallback also recovers one level of local named tagged unions inside such a union, including Tlon `notes.u-notebook` and `notes.u-notes`; deeper, recursive or unproven cases stay unsupported. The nested source proof has a 256-visit budget; Hoon evaluation and source scans are not metered. 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, Hoon's `%n` zero singleton as Jibb `~`, 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.
8688
8789Self-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.
8890
@@ -94,7 +96,7 @@ The source-backed `+api-path-analysis-source` is a separate partial analysis, no
9496
9597`+golden-types-with-prelude` accepts case-local Jibb module sources alongside `/sur` and mark results and the vendored prelude source. It resolves reachable ordinary library modules in dependency order, caching completed interfaces per invocation and exporting supported closed value schemes, direct generic unions, and simple or nonrecursive generic mold aliases whose bodies the fragment supports. It detects missing sources and cycles and rejects a dependency if its interface cannot be inferred by the fragment. Qualified wings can also read nested fields of an imported value, instantiating that value’s scheme independently at each use; missing, ambiguous and non-record fields remain unsupported.
9698
97−The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc`, `turn`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join` and `snip`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. List-dependent prelude mold aliases remain unsupported because their templates are prepared before this injection. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. The partial checker resolves its supported source shape, preserves its public name, and rejects ordinary imports of the private internal path. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared 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.
99+The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc`, `turn`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `cork`, `corl`, `cury` and `curr`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. List-dependent prelude mold aliases remain unsupported because their templates are prepared before this injection. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. The partial checker resolves its supported source shape, preserves its public name, and rejects ordinary imports of the private internal path. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared 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.
98100
99101`+prepare-prelude` derives the interface and declared-name inventory from the trusted vendored source. Hosts can reuse its result with `+golden-types-with-prepared-prelude`; they must pass the unchanged result of preparation, not an independently constructed value. Empty, malformed and duplicate-name prelude sources fail closed. The source-taking `+prepare-prelude` and `+golden-types-with-prelude` do not supply the internal module; their `-and-internal` or `-with-internal` variants accept its source for the supported private import. API files, modules with `main`, unsupported definitions and many other features remain outside this subset. The older `+golden-types-with-modules` entry point fails closed for imports because it has no prelude scope. None of these partial reports claims the module has been checked.
100102
docs/prelude-inventory.md+2
@@ -95,6 +95,8 @@ The current prelude writes `snoc`, `lure`, `flop`, `join`, `levy`, `lien`, `murn
9595
9696`aftr`, `cork`, `corl`, `cury`, `curr`, `fore`, `head`, `same`, `succ`, `tail`, `test`, `lead`, `late`.
9797
98+The source-backed `cork` and `corl` compose gates forward and backward, respectively; `cury` and `curr` bind the first and second item of an unfaced pair. The partial checker infers their polymorphic types. Their runtime implementations remain to be validated by a backend.
99+
98100## 2o
99101
100102`jar`, `jug`, `map`, `qeu`, `set`.
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 Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, 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, including a source-proved nonrecursive union from a single Ford-imported `/sur` core, 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 and bare `~` fields, as in the real Tlon `notes.u-note`, 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, detects missing sources and cycles, and resolves nested fields of imported values with independent scheme instantiation. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. A separate partial analysis resolves supported API path declarations and their full and diff mark types, including the todo paths; it does not create requests or check an API module. Complete private module checking, other API shapes, request gates, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API with `+$ poke` reports unsupported kind or scope, while definite duplicates and unrelated shadowing still report conflicts. 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. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. A bounded dependency proof reports certain non-gate cycles through values and gates when an explicit atom or loobean result cast and simple unshadowed expressions establish the cycle. Other mixed gate/value cycles, polymorphic recursion, 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 and supported finite loobean refinements for a known union accessed by a wing, including nested cell and list positions; other 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. Isolated cart-style `init` and `update` expressions infer, while the complete cart-store fails closed because its kind and declaration scope remain unchecked. Uncontextualized list literals infer a fresh element type, including empty and nested lists, with independently generalized uses. Unresolved item tags and uncertain widening remain unsupported. 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. Unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive 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 Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, 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, including a source-proved nonrecursive union from a single Ford-imported `/sur` core, 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, bare `~` fields and one level of local named tagged unions, as in real Tlon `notes`, with 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, detects missing sources and cycles, and resolves nested fields of imported values with independent scheme instantiation. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. A separate partial analysis resolves supported API path declarations and their full and diff mark types, including the todo paths; it does not create requests or check an API module. Complete private module checking, other API shapes, request gates, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API with `+$ poke` reports unsupported kind or scope, while definite duplicates and unrelated shadowing still report conflicts. 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. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. A bounded dependency proof reports certain non-gate cycles through values and gates when an explicit atom or loobean result cast and simple unshadowed expressions establish the cycle. Other mixed gate/value cycles, polymorphic recursion, 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 and supported finite loobean refinements for a known union accessed by a wing, including nested cell and list positions; other 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. Isolated cart-style `init` and `update` expressions infer, while the complete cart-store fails closed because its kind and declaration scope remain unchecked. Uncontextualized list literals infer a fresh element type, including empty and nested lists, with independently generalized uses. Unresolved item tags and uncertain widening remain unsupported. 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. Unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive 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−- 565 golden cases: 349 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 565-case corpus passed under `urbit eval` in 70.5 s. The fake ship passed all 574 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 39.8 s for sync and 47.4 s for tests. The importer golden compares 182 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+- 567 golden cases: 351 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 567-case corpus passed under `urbit eval` in 73.3 s. The fake ship passed all 576 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 41.6 s for sync and 85.8 s for tests. The importer golden compares 194 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).
@@ -111,14 +111,15 @@ Besides the plan's list:
111111| ad46655 | 2026-10-31 | Bridge selected imported any-noun molds |
112112| beada10 | 2026-10-31 | Import source-proved Ford mark unions, analyze API paths and infer list helpers |
113113| e28f7be | 2026-10-31 | Diagnose proven non-gate cycles and import Tlon null-payload union cases |
114−| This change | 2026-10-31 | Infer qualified fields of imported values |
114+| fd2f288 | 2026-10-31 | Infer qualified fields of imported values |
115+| This change | 2026-10-31 | Infer term-headed pairs and function helpers, and import nested named unions |
115116
116117## Checking it
117118
118119On a machine set up as [development.md](development.md) says:
119120
120121```
121−tools/golden # 565 cases under urbit eval
122+tools/golden # 567 cases under urbit eval
122123tools/importer-test # the Hoon importer fixture projection
123124tools/type-import-test # the importer/checker bridge fixture
124125tools/type-tlon-test # the real Tlon reader/checker fixture
@@ -131,7 +132,7 @@ tools/testdata/selftest # the tools themselves
131132tools/doc-blocks docs/spec # the doc's examples are golden cases
132133tools/ship start
133134tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
134−tools/ship test # the same 565 cases as -test arms on the ship
135+tools/ship test # the same 567 cases as -test arms on the ship
135136tools/testdata/ship-selftest
136137tools/ship check-commit # |commit stores .jibb files
137138tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb-import.hoon+87−16
@@ -183,16 +183,16 @@
183183 ?: (lien seen |=(n=@ =(n q.i.cases))) ~
184184 $(cases t.cases, seen [q.i.cases seen], fuel (dec fuel))
185185::
186−++ safe-source-specs
187− |= [xs=(list spec) cor=type seen=(list term) fuel=@ud]
186+++ safe-source-specs-mode
187+ |= [xs=(list spec) cor=type seen=(list term) fuel=@ud allow-nested=?]
188188 ^- (unit @ud)
189189 ?~ xs `fuel
190− =/ left=(unit @ud) (safe-source-spec i.xs cor seen fuel)
190+ =/ left=(unit @ud) (safe-source-spec-mode i.xs cor seen fuel allow-nested)
191191 ?~ left ~
192192 $(xs t.xs, fuel u.left)
193193::
194−++ safe-source-name
195− |= [name=term cor=type seen=(list term) fuel=@ud]
194+++ safe-source-name-mode
195+ |= [name=term cor=type seen=(list term) fuel=@ud allow-nested=?]
196196 ^- (unit @ud)
197197 ?: (lien seen |=(x=term =(name x))) ~
198198 =/ arm=(unit hoon) (local-arm-source cor name)
@@ -203,10 +203,10 @@
203203 ?. (scope-safe p.cor name) ~
204204 =/ body=(unit spec) (local-mold-spec u.arm name)
205205 ?~ body ~
206− (safe-source-spec u.body cor [name seen] fuel)
206+ (safe-source-spec-mode u.body cor [name seen] fuel allow-nested)
207207::
208−++ safe-source-spec
209− |= [shape=spec cor=type seen=(list term) fuel=@ud]
208+++ safe-source-spec-mode
209+ |= [shape=spec cor=type seen=(list term) fuel=@ud allow-nested=?]
210210 ^- (unit @ud)
211211 ?: =(fuel 0) ~
212212 =. fuel (dec fuel)
@@ -217,27 +217,47 @@
217217 [%leaf *] `fuel
218218 [%bcts *] ?@ p.shape $(shape q.shape)
219219 ~
220− [%bccl *] (safe-source-specs p.shape cor seen fuel)
220+ [%bccl *] (safe-source-specs-mode p.shape cor seen fuel allow-nested)
221+ [%bccn *]
222+ :: A source proof may cross one named union dependency. Deeper
223+ :: named unions stay unsupported to bound recursive reprojection.
224+ ?. allow-nested ~
225+ ?. ?=([* [* ~]] seen) ~
226+ =/ cases=(unit (list tagged-case)) (tagged-cases p.shape ~)
227+ ?~ cases ~
228+ ?~ u.cases ~
229+ ?~ t.u.cases ~
230+ (safe-source-tagged-fuel-mode u.cases cor seen fuel allow-nested)
221231 [%bcwt *] (safe-source-enum p.shape ~ fuel)
222232 [%like *]
223233 ?. ?=([@ ~] p.shape) ~
224234 ?. ?=(~ q.shape) ~
225− (safe-source-name i.p.shape cor seen fuel)
235+ (safe-source-name-mode i.p.shape cor seen fuel allow-nested)
226236 [%make *]
227237 ?. ?=([%wing [@ ~]] p.shape) ~
228238 =/ n=term i.p.p.shape
229239 ?. (lien `(list term)`~[%map %set %qeu %list %unit %jar %jug] |=(x=term =(x n))) ~
230240 ?. (scope-safe cor n) ~
231− (safe-source-specs q.shape cor seen fuel)
241+ (safe-source-specs-mode q.shape cor seen fuel allow-nested)
232242 ==
233243::
244+++ safe-source-tagged-fuel-mode
245+ |= [cases=(list tagged-case) cor=type seen=(list term) fuel=@ud allow-nested=?]
246+ ^- (unit @ud)
247+ ?~ cases `fuel
248+ =/ left=(unit @ud) (safe-source-spec-mode branch.i.cases cor seen fuel allow-nested)
249+ ?~ left ~
250+ $(cases t.cases, fuel u.left)
251+::
252+++ safe-source-name
253+ |= [name=term cor=type seen=(list term) fuel=@ud]
254+ ^- (unit @ud)
255+ (safe-source-name-mode name cor seen fuel &)
256+::
234257++ safe-source-tagged
235258 |= [cases=(list tagged-case) cor=type seen=(list term) fuel=@ud]
236259 ^- ?
237− ?~ cases &
238− =/ left=(unit @ud) (safe-source-spec branch.i.cases cor seen fuel)
239− ?~ left |
240− $(cases t.cases, fuel u.left)
260+ ?=(^ (safe-source-tagged-fuel-mode cases cor seen fuel &))
241261::
242262++ tagged-union-fallback
243263 |= [module=term name=term cor=type]
@@ -252,7 +272,9 @@
252272 ?~ selected ~
253273 =/ cases (tagged-source-code u.selected name)
254274 ?~ cases ~
255− ?. (safe-source-tagged u.cases cor ~[name] 4.096) ~
275+ :: Preserve the original budget when no nested union recovery is needed.
276+ =/ plain=? ?=(^ (safe-source-tagged-fuel-mode u.cases cor ~[name] 4.096 |))
277+ ?. |(plain (safe-source-tagged u.cases cor ~[name] 256)) ~
256278 =/ tried=(each (list type) tang)
257279 (mule |.((turn u.cases |=(c=tagged-case (~(play ut cor) [%kttr branch.c])))))
258280 ?. ?=([%& *] tried) ~
@@ -1189,6 +1211,35 @@
11891211 ?~ args [%bad unsupported]
11901212 [%apply name.out u.args]
11911213::
1214+:: A nested named tagged union may be recovered only if its hold is
1215+:: exactly the selected arm of this core. Provenance and all original
1216+:: source cases are checked by the same fallback as a top-level arm.
1217+++ nested-tagged-union
1218+ |= [module=term typ=type context=(unit type)]
1219+ ^- (unit imported)
1220+ ?~ context ~
1221+ ?. ?=([%core *] u.context) ~
1222+ ?. ?=([%hold *] typ) ~
1223+ =/ n=(unit term) (hold-name q.typ)
1224+ ?~ n ~
1225+ :: The outer proof has a shared budget. Bound each nested re-proof as
1226+ :: well, so rebuilding a shared source DAG cannot grow without limit.
1227+ =/ source=(unit hoon) (local-arm-source u.context u.n)
1228+ ?~ source ~
1229+ =/ cases=(unit (list tagged-case)) (tagged-source-code u.source u.n)
1230+ ?~ cases ~
1231+ ?. (safe-source-tagged u.cases u.context ~[u.n] 256) ~
1232+ =/ selected=(each type tang)
1233+ (mule |.((~(play ut u.context) (ream (cat 3 '*' u.n)))))
1234+ ?. ?=([%& *] selected) ~
1235+ ?. =(p.selected typ) ~
1236+ =/ attempt=(each (unit (each imported @t)) tang)
1237+ (mule |.((tagged-union-fallback module u.n u.context)))
1238+ ?. ?=([%& *] attempt) ~
1239+ ?~ p.attempt ~
1240+ ?. ?=([%& [%fork *]] u.p.attempt) ~
1241+ `p.u.p.attempt
1242+::
11921243++ walk
11931244 |= [module=term typ=type sig=signatures seen=visiting context=(unit type)]
11941245 ^- imported
@@ -1213,6 +1264,8 @@
12131264 [%fork (sort cases |=(pair=[imported imported] (dor -.pair +.pair)))]
12141265 [%hint *] $(typ q.typ)
12151266 [%hold *]
1267+ =/ nested=(unit imported) (nested-tagged-union module typ context)
1268+ ?^ nested u.nested
12161269 ?: &(?=([%tsls [%note * *] *] q.typ) |((has-spec-cell-union q.typ) (has-spec-general-union q.typ)))
12171270 =/ nm (hold-name q.typ)
12181271 (collection-union typ module sig [[typ nm] seen] context)
@@ -1668,6 +1721,12 @@
16681721 =/ tag-zuse=@t
16691722 '|%\0a+$ ship @t\0a+$ path @ud\0a+$ choice $%([%ok who=ship] [%err where=path])\0a--\0a'
16701723 =/ tag-zuse-core=type -:(ride -:!>(..zuse) tag-zuse)
1724+ =/ nest-parent-src=@t
1725+ '|%\0a+$ tag-nest-inner $%([%foreign @t] [%foreign @t])\0a--\0a'
1726+ =/ nest-parent=type -:(ride -:!>(..zuse) nest-parent-src)
1727+ =/ nest-child-src=@t
1728+ '|%\0a+$ tag-nest-inner $%([%left @t] [%right @ud])\0a+$ tag-nest-middle $%([%one x=tag-nest-inner] [%two ~])\0a--\0a'
1729+ =/ nest-collision=type -:(ride [%cell [%face %base nest-parent] -:!>(..zuse)] nest-child-src)
16711730 =/ sample
16721731 |= name=term
16731732 (read-mold-in %small name (~(play ut sc) (ream (cat 3 '*' name))) sc)
@@ -1841,6 +1900,18 @@
18411900 (crip "tag-ford-collision: {(show-result (read-named %child %choice tag-collision))}")
18421901 (crip "tag-ford-clean: {(show-result (read-named %child %choice tag-clean))}")
18431902 (crip "tag-zuse-local: {(show-result (read-named %child %choice tag-zuse-core))}")
1903+ (crip "tag-nest-inner: {(show-result (sample %tag-nest-inner))}")
1904+ (crip "tag-nest-middle: {(show-result (sample %tag-nest-middle))}")
1905+ (crip "tag-nest-diamond: {(show-result (sample %tag-nest-diamond))}")
1906+ (crip "tag-nest-deep: {(show-result (sample %tag-nest-deep))}")
1907+ (crip "tag-nest-hidden: {(show-result (sample %tag-nest-hidden))}")
1908+ (crip "tag-nest-overlap: {(show-result (sample %tag-nest-overlap))}")
1909+ (crip "tag-nest-recursive: {(show-result (sample %tag-nest-recursive-outer))}")
1910+ (crip "tag-nest-many: {(show-result (sample %tag-nest-many))}")
1911+ (crip "tag-nest-shadow: {(show-result (read-named %shadow-static %tag-nest-shadow xc))}")
1912+ (crip "tag-nest-wrong-hold: {?~((nested-tagged-union %small (~(play ut other) (ream '*chain')) `sc) "unsupported" "BAD")}")
1913+ (crip "tag-nest-ford-collision: {(show-result (read-named %outer %tag-nest-middle nest-collision))}")
1914+ (crip "tag-flat-large: {?:(&(?=(~ (safe-source-name-mode %tag-fuel-7 sc ~ 256 |)) ?=(^ (safe-source-name-mode %tag-fuel-7 sc ~ 4.096 |)) ?=([%& *] (sample %tag-flat-large))) "supported above 256" "BAD")}")
18441915 (crip "tag-null-good: {(show-result (sample %tag-null-good))}")
18451916 (crip "tag-null-duplicate: {(show-result (sample %tag-null-duplicate))}")
18461917 (crip "tag-null-hidden: {(show-result (sample %tag-null-hidden))}")
jibb-dev/lib/jibb.hoon+12
@@ -7239,10 +7239,21 @@
72397239 ?. ?=(%ok -.first) ~
72407240 $(items t.items, actual tal.actual, expected tal.expected, sub sub.first, next next.first)
72417241::
7242+:: A term-headed pair is the same noun as a two-item cell. Preserve the
7243+:: whole pair span for the synthetic head and the value's own span for
7244+:: the payload; unresolved term constraints follow ordinary cell inference.
7245+++ pair-as-cell
7246+ |= e=expr
7247+ ^- expr
7248+ ?> ?=(%pair -.e)
7249+ =/ head=expr [%lit at.e [%term %tas tag.e (crip ['%' (trip tag.e)])]]
7250+ [%tuple at.e ~[[at.e ~ head] [(span-of val.e) ~ val.e]]]
7251+::
72427252++ infer-fragment
72437253 |= [e=expr env=ienv state=istate]
72447254 ^- iresult
72457255 ?- -.e
7256+ %pair $(e (pair-as-cell e))
72467257 %lit
72477258 ?- form.lit.e
72487259 %number ?: =(%ud aura.lit.e)
@@ -7521,6 +7532,7 @@
75217532++ infer-call-context-arg
75227533 |= [e=expr expected=itype env=ienv state=istate context=span]
75237534 ^- iresult
7535+ ?: ?=(%pair -.e) $(e (pair-as-cell e))
75247536 ?: ?=(%group -.e) $(e inner.e)
75257537 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
75267538 ?: ?=(%trace -.e)
jibb-dev/lib/jibb/prelude.jibb+16
@@ -290,3 +290,19 @@
290290 ?- rest
291291 ~ item
292292 [next more] (rear rest)
293+
294+++ cork |= gates=[$-(A B) $-(B C)]
295+ ?- gates
296+ [f g] |= x=A (g (f x))
297+
298+++ corl |= gates=[$-(B C) $-(A B)]
299+ ?- gates
300+ [f g] |= x=A (f (g x))
301+
302+++ cury |= args=[$-([A B] C) A]
303+ ?- args
304+ [f a] |= b=B (f a b)
305+
306+++ curr |= args=[$-([A B] C) B]
307+ ?- args
308+ [f b] |= a=A (f a b)
tests/golden/prelude-unit-list-transforms/source.jibb+16
@@ -290,3 +290,19 @@
290290 ?- rest
291291 ~ item
292292 [next more] (rear rest)
293+
294+++ cork |= gates=[$-(A B) $-(B C)]
295+ ?- gates
296+ [f g] |= x=A (g (f x))
297+
298+++ corl |= gates=[$-(B C) $-(A B)]
299+ ?- gates
300+ [f g] |= x=A (f (g x))
301+
302+++ cury |= args=[$-([A B] C) A]
303+ ?- args
304+ [f a] |= b=B (f a b)
305+
306+++ curr |= args=[$-([A B] C) B]
307+ ?- args
308+ [f b] |= a=A (f a b)
tests/golden/prelude-unit-list-transforms/tokens.txt+149−5
@@ -1833,8 +1833,152 @@
18331833292:22 tight name rear
18341834292:27 name rest
18351835292:31 tight glyph )
1836−292:32 DEDENT
1837−292:32 DEDENT
1838−292:32 DEDENT
1839−292:32 DEDENT
1840−292:32 NEWLINE
1836+294:1 DEDENT
1837+294:1 DEDENT
1838+294:1 DEDENT
1839+294:1 DEDENT
1840+294:1 NEWLINE
1841+294:1 glyph ++
1842+294:4 name cork
1843+294:9 glyph |=
1844+294:12 name gates
1845+294:17 tight glyph =
1846+294:18 tight glyph [
1847+294:19 tight glyph $-(
1848+294:22 tight tvar A
1849+294:24 tvar B
1850+294:25 tight glyph )
1851+294:27 glyph $-(
1852+294:30 tight tvar B
1853+294:32 tvar C
1854+294:33 tight glyph )
1855+294:34 tight glyph ]
1856+295:3 INDENT
1857+295:3 glyph ?-
1858+295:6 name gates
1859+296:5 INDENT
1860+296:5 glyph [
1861+296:6 tight name f
1862+296:8 name g
1863+296:9 tight glyph ]
1864+296:11 glyph |=
1865+296:14 name x
1866+296:15 tight glyph =
1867+296:16 tight tvar A
1868+296:18 glyph (
1869+296:19 tight name g
1870+296:21 glyph (
1871+296:22 tight name f
1872+296:24 name x
1873+296:25 tight glyph )
1874+296:26 tight glyph )
1875+298:1 DEDENT
1876+298:1 DEDENT
1877+298:1 NEWLINE
1878+298:1 glyph ++
1879+298:4 name corl
1880+298:9 glyph |=
1881+298:12 name gates
1882+298:17 tight glyph =
1883+298:18 tight glyph [
1884+298:19 tight glyph $-(
1885+298:22 tight tvar B
1886+298:24 tvar C
1887+298:25 tight glyph )
1888+298:27 glyph $-(
1889+298:30 tight tvar A
1890+298:32 tvar B
1891+298:33 tight glyph )
1892+298:34 tight glyph ]
1893+299:3 INDENT
1894+299:3 glyph ?-
1895+299:6 name gates
1896+300:5 INDENT
1897+300:5 glyph [
1898+300:6 tight name f
1899+300:8 name g
1900+300:9 tight glyph ]
1901+300:11 glyph |=
1902+300:14 name x
1903+300:15 tight glyph =
1904+300:16 tight tvar A
1905+300:18 glyph (
1906+300:19 tight name f
1907+300:21 glyph (
1908+300:22 tight name g
1909+300:24 name x
1910+300:25 tight glyph )
1911+300:26 tight glyph )
1912+302:1 DEDENT
1913+302:1 DEDENT
1914+302:1 NEWLINE
1915+302:1 glyph ++
1916+302:4 name cury
1917+302:9 glyph |=
1918+302:12 name args
1919+302:16 tight glyph =
1920+302:17 tight glyph [
1921+302:18 tight glyph $-(
1922+302:21 tight glyph [
1923+302:22 tight tvar A
1924+302:24 tvar B
1925+302:25 tight glyph ]
1926+302:27 tvar C
1927+302:28 tight glyph )
1928+302:30 tvar A
1929+302:31 tight glyph ]
1930+303:3 INDENT
1931+303:3 glyph ?-
1932+303:6 name args
1933+304:5 INDENT
1934+304:5 glyph [
1935+304:6 tight name f
1936+304:8 name a
1937+304:9 tight glyph ]
1938+304:11 glyph |=
1939+304:14 name b
1940+304:15 tight glyph =
1941+304:16 tight tvar B
1942+304:18 glyph (
1943+304:19 tight name f
1944+304:21 name a
1945+304:23 name b
1946+304:24 tight glyph )
1947+306:1 DEDENT
1948+306:1 DEDENT
1949+306:1 NEWLINE
1950+306:1 glyph ++
1951+306:4 name curr
1952+306:9 glyph |=
1953+306:12 name args
1954+306:16 tight glyph =
1955+306:17 tight glyph [
1956+306:18 tight glyph $-(
1957+306:21 tight glyph [
1958+306:22 tight tvar A
1959+306:24 tvar B
1960+306:25 tight glyph ]
1961+306:27 tvar C
1962+306:28 tight glyph )
1963+306:30 tvar B
1964+306:31 tight glyph ]
1965+307:3 INDENT
1966+307:3 glyph ?-
1967+307:6 name args
1968+308:5 INDENT
1969+308:5 glyph [
1970+308:6 tight name f
1971+308:8 name b
1972+308:9 tight glyph ]
1973+308:11 glyph |=
1974+308:14 name a
1975+308:15 tight glyph =
1976+308:16 tight tvar A
1977+308:18 glyph (
1978+308:19 tight name f
1979+308:21 name a
1980+308:23 name b
1981+308:24 tight glyph )
1982+308:25 DEDENT
1983+308:25 DEDENT
1984+308:25 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+71−1
@@ -791,4 +791,74 @@
791791 (arm 292:9
792792 (cell 292:9 (bind 292:10 next) (bind 292:15 more))
793793 (group 292:21
794− (call 292:22 (wing 292:22 rear) (wing 292:27 rest))))))))))))
794+ (call 292:22 (wing 292:22 rear) (wing 292:27 rest)))))))))))
795+ (value 294:1 cork
796+ (gate 294:9
797+ (face 294:12 gates
798+ (cell 294:18
799+ (fn 294:19 (tvar 294:22 A) (tvar 294:24 B))
800+ (fn 294:27 (tvar 294:30 B) (tvar 294:32 C))))
801+ (body 295:3
802+ (branch 295:3
803+ (wing 295:6 gates)
804+ (arm 296:5
805+ (cell 296:5 (bind 296:6 f) (bind 296:8 g))
806+ (gate 296:11
807+ (face 296:14 x (tvar 296:16 A))
808+ (group 296:18
809+ (call 296:19
810+ (wing 296:19 g)
811+ (group 296:21
812+ (call 296:22 (wing 296:22 f) (wing 296:24 x)))))))))))
813+ (value 298:1 corl
814+ (gate 298:9
815+ (face 298:12 gates
816+ (cell 298:18
817+ (fn 298:19 (tvar 298:22 B) (tvar 298:24 C))
818+ (fn 298:27 (tvar 298:30 A) (tvar 298:32 B))))
819+ (body 299:3
820+ (branch 299:3
821+ (wing 299:6 gates)
822+ (arm 300:5
823+ (cell 300:5 (bind 300:6 f) (bind 300:8 g))
824+ (gate 300:11
825+ (face 300:14 x (tvar 300:16 A))
826+ (group 300:18
827+ (call 300:19
828+ (wing 300:19 f)
829+ (group 300:21
830+ (call 300:22 (wing 300:22 g) (wing 300:24 x)))))))))))
831+ (value 302:1 cury
832+ (gate 302:9
833+ (face 302:12 args
834+ (cell 302:17
835+ (fn 302:18
836+ (cell 302:21 (tvar 302:22 A) (tvar 302:24 B))
837+ (tvar 302:27 C))
838+ (tvar 302:30 A)))
839+ (body 303:3
840+ (branch 303:3
841+ (wing 303:6 args)
842+ (arm 304:5
843+ (cell 304:5 (bind 304:6 f) (bind 304:8 a))
844+ (gate 304:11
845+ (face 304:14 b (tvar 304:16 B))
846+ (group 304:18
847+ (call 304:19 (wing 304:19 f) (wing 304:21 a) (wing 304:23 b)))))))))
848+ (value 306:1 curr
849+ (gate 306:9
850+ (face 306:12 args
851+ (cell 306:17
852+ (fn 306:18
853+ (cell 306:21 (tvar 306:22 A) (tvar 306:24 B))
854+ (tvar 306:27 C))
855+ (tvar 306:30 B)))
856+ (body 307:3
857+ (branch 307:3
858+ (wing 307:6 args)
859+ (arm 308:5
860+ (cell 308:5 (bind 308:6 f) (bind 308:8 b))
861+ (gate 308:11
862+ (face 308:14 a (tvar 308:16 A))
863+ (group 308:18
864+ (call 308:19 (wing 308:19 f) (wing 308:21 a) (wing 308:23 b))))))))))
tests/golden/prelude-unit-list-transforms/types.txt+4
@@ -57,3 +57,7 @@ partial inference; module not checked
5757++ join: sample mold is not supported by partial inference
5858++ snip: sample mold is not supported by partial inference
5959++ rear: sample mold is not supported by partial inference
60+++ cork: $-([$-(A B) $-(B C)] $-(A C))
61+++ corl: $-([$-(A B) $-(C A)] $-(C B))
62+++ cury: $-([$-([A B] C) A] $-(B C))
63+++ curr: $-([$-([A B] C) B] $-(A C))
tests/golden/types-import-tlon-notes/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Overview, Importing Hoon types: Hoon `$%` imports as a union if its cases differ as nouns; unused molds are skipped. Grammar, Literals: `~` is null.
2−tests: The unmodified Tlon `desk/sur/notes.hoon` at tloncorp/tlon-apps commit 38f9328f4580000a37a7fdc3ab820fcd65069487 (MIT license in `tests/importer/tlon-license.txt`) has tagged unions with null cases. Both real imported molds reach partial inference without assuming unsupported sibling molds are valid.
2+tests: The unmodified Tlon `desk/sur/notes.hoon` at tloncorp/tlon-apps commit 38f9328f4580000a37a7fdc3ab820fcd65069487 (MIT license in `tests/importer/tlon-license.txt`) has tagged unions with null cases. The real update and action molds reach partial inference. A notebook update and its enclosing record contain one source-proved named union dependency; unsupported sibling molds remain unchecked.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-import-tlon-notes/imports.txt+2
@@ -1,2 +1,4 @@
11notes u-note
22notes a-note
3+notes u-notebook
4+notes u-notes
tests/golden/types-import-tlon-notes/source.jibb+2
@@ -1,3 +1,5 @@
11/- notes
22++ update |= x=u-note.notes x
33++ action |= x=a-note.notes x
4+++ notebook-update |= x=u-notebook.notes x
5+++ notes-update |= x=u-notes.notes x
tests/golden/types-import-tlon-notes/tokens.txt+17−1
@@ -16,4 +16,20 @@
16163:15 tight glyph =
17173:16 tight wing a-note.notes
18183:29 name x
19−3:30 NEWLINE
19+4:1 NEWLINE
20+4:1 glyph ++
21+4:4 name notebook-update
22+4:20 glyph |=
23+4:23 name x
24+4:24 tight glyph =
25+4:25 tight wing u-notebook.notes
26+4:42 name x
27+5:1 NEWLINE
28+5:1 glyph ++
29+5:4 name notes-update
30+5:17 glyph |=
31+5:20 name x
32+5:21 tight glyph =
33+5:22 tight wing u-notes.notes
34+5:36 name x
35+5:37 NEWLINE
tests/golden/types-import-tlon-notes/tree.txt+9−1
@@ -7,4 +7,12 @@
77 (value 3:1 action
88 (gate 3:11
99 (face 3:14 x (ref 3:16 a-note.notes))
10− (wing 3:29 x))))
10+ (wing 3:29 x)))
11+ (value 4:1 notebook-update
12+ (gate 4:20
13+ (face 4:23 x (ref 4:25 u-notebook.notes))
14+ (wing 4:42 x)))
15+ (value 5:1 notes-update
16+ (gate 5:17
17+ (face 5:20 x (ref 5:22 u-notes.notes))
18+ (wing 5:36 x))))
tests/golden/types-import-tlon-notes/types.txt+2
@@ -1,3 +1,5 @@
11partial inference; module not checked
22++ update: $-(([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]]) ([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]]))
33++ action: $-(([%move folder=@ud] [%rename title=@t] [%update [body=@t expected-revision=@ud]] [%delete ~] [%modify [title=(unit @t) folder=(unit @ud)]] [%restore rev=@ud] [%publish html=@t] [%unpublish ~]) ([%move folder=@ud] [%rename title=@t] [%update [body=@t expected-revision=@ud]] [%delete ~] [%modify [title=(unit @t) folder=(unit @ud)]] [%restore rev=@ud] [%publish html=@t] [%unpublish ~]))
4+++ notebook-update: $-(([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]]) ([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]]))
5+++ notes-update: $-([flag=[ship=@p name=@tas] u-notebook=([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]])] [flag=[ship=@p name=@tas] u-notebook=([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]])])
tests/golden/types-pair-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Literals: `gap+%s2` is `[%gap %s2]`, with any operand after the `+`. Tag resolution and Literals by context: tags and cells wait for a known type.
2+tests: A synthetic attribute union checks pair syntax against equivalent cells, nested `%fill` payloads and lists; atom and noun contexts, incompatible values, open tags and distinct union origins are also covered. Duplicate attribute checking is separate and remains unimplemented.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-pair-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the actual source-backed prelude.
tests/golden/types-pair-context/source.jibbnew file+32
@@ -0,0 +1,32 @@
1++$ spacing
2+ %s0
3+ %s1
4+ %s2
5+ %s3
6++$ length
7+ [%fill n=@ud]
8+ %shrink
9++$ attr
10+ [%gap spacing]
11+ [%pad spacing]
12+ [%width length]
13++$ other-attr
14+ [%gap spacing]
15+ [%pad spacing]
16+ [%width length]
17+++ one ^- attr gap+%s2
18+++ equiv ^- attr [%gap %s2]
19+++ attrs ^- (list attr) ~[gap+%s2 pad+%s3 width+[%fill 1]]
20+++ gap-structural ^- [@tas @tas] gap+%s2
21+++ nested ^- attr width+[%fill 1]
22+++ mismatch ^- attr gap+%shrink
23+++ missing ^- attr width+[%oops 1]
24+++ pending gap+%s2
25+++ cross-origin ^- attr ^- other-attr gap+%s2
26+++ noun-pair ^- [* *] gap+%s2
27+++ atom-pair ^- [@ta @tas] gap+%s2
28+++ wrong-head ^- [@ud @tas] gap+%s2
29+++ wrong-number ^- attr width+[%fill "hi"]
30+++ unrelated
31+ ~& %dangling
32+ ^- attr gap+%s2
tests/golden/types-pair-context/tokens.txtnew file+217
@@ -0,0 +1,217 @@
1+1:1 glyph +$
2+1:4 name spacing
3+2:3 INDENT
4+2:3 lit %s0
5+3:3 NEWLINE
6+3:3 lit %s1
7+4:3 NEWLINE
8+4:3 lit %s2
9+5:3 NEWLINE
10+5:3 lit %s3
11+6:1 DEDENT
12+6:1 NEWLINE
13+6:1 glyph +$
14+6:4 name length
15+7:3 INDENT
16+7:3 glyph [
17+7:4 tight lit %fill
18+7:10 name n
19+7:11 tight glyph =
20+7:12 tight aura @ud
21+7:15 tight glyph ]
22+8:3 NEWLINE
23+8:3 lit %shrink
24+9:1 DEDENT
25+9:1 NEWLINE
26+9:1 glyph +$
27+9:4 name attr
28+10:3 INDENT
29+10:3 glyph [
30+10:4 tight lit %gap
31+10:9 name spacing
32+10:16 tight glyph ]
33+11:3 NEWLINE
34+11:3 glyph [
35+11:4 tight lit %pad
36+11:9 name spacing
37+11:16 tight glyph ]
38+12:3 NEWLINE
39+12:3 glyph [
40+12:4 tight lit %width
41+12:11 name length
42+12:17 tight glyph ]
43+13:1 DEDENT
44+13:1 NEWLINE
45+13:1 glyph +$
46+13:4 name other-attr
47+14:3 INDENT
48+14:3 glyph [
49+14:4 tight lit %gap
50+14:9 name spacing
51+14:16 tight glyph ]
52+15:3 NEWLINE
53+15:3 glyph [
54+15:4 tight lit %pad
55+15:9 name spacing
56+15:16 tight glyph ]
57+16:3 NEWLINE
58+16:3 glyph [
59+16:4 tight lit %width
60+16:11 name length
61+16:17 tight glyph ]
62+17:1 DEDENT
63+17:1 NEWLINE
64+17:1 glyph ++
65+17:4 name one
66+17:8 glyph ^-
67+17:11 name attr
68+17:16 name gap
69+17:19 tight glyph +
70+17:20 tight lit %s2
71+18:1 NEWLINE
72+18:1 glyph ++
73+18:4 name equiv
74+18:10 glyph ^-
75+18:13 name attr
76+18:18 glyph [
77+18:19 tight lit %gap
78+18:24 lit %s2
79+18:27 tight glyph ]
80+19:1 NEWLINE
81+19:1 glyph ++
82+19:4 name attrs
83+19:10 glyph ^-
84+19:13 glyph (
85+19:14 tight name list
86+19:19 name attr
87+19:23 tight glyph )
88+19:25 glyph ~[
89+19:27 tight name gap
90+19:30 tight glyph +
91+19:31 tight lit %s2
92+19:35 name pad
93+19:38 tight glyph +
94+19:39 tight lit %s3
95+19:43 name width
96+19:48 tight glyph +
97+19:49 tight glyph [
98+19:50 tight lit %fill
99+19:56 lit 1
100+19:57 tight glyph ]
101+19:58 tight glyph ]
102+20:1 NEWLINE
103+20:1 glyph ++
104+20:4 name gap-structural
105+20:19 glyph ^-
106+20:22 glyph [
107+20:23 tight aura @tas
108+20:28 aura @tas
109+20:32 tight glyph ]
110+20:34 name gap
111+20:37 tight glyph +
112+20:38 tight lit %s2
113+21:1 NEWLINE
114+21:1 glyph ++
115+21:4 name nested
116+21:11 glyph ^-
117+21:14 name attr
118+21:19 name width
119+21:24 tight glyph +
120+21:25 tight glyph [
121+21:26 tight lit %fill
122+21:32 lit 1
123+21:33 tight glyph ]
124+22:1 NEWLINE
125+22:1 glyph ++
126+22:4 name mismatch
127+22:13 glyph ^-
128+22:16 name attr
129+22:21 name gap
130+22:24 tight glyph +
131+22:25 tight lit %shrink
132+23:1 NEWLINE
133+23:1 glyph ++
134+23:4 name missing
135+23:12 glyph ^-
136+23:15 name attr
137+23:20 name width
138+23:25 tight glyph +
139+23:26 tight glyph [
140+23:27 tight lit %oops
141+23:33 lit 1
142+23:34 tight glyph ]
143+24:1 NEWLINE
144+24:1 glyph ++
145+24:4 name pending
146+24:12 name gap
147+24:15 tight glyph +
148+24:16 tight lit %s2
149+25:1 NEWLINE
150+25:1 glyph ++
151+25:4 name cross-origin
152+25:17 glyph ^-
153+25:20 name attr
154+25:25 glyph ^-
155+25:28 name other-attr
156+25:39 name gap
157+25:42 tight glyph +
158+25:43 tight lit %s2
159+26:1 NEWLINE
160+26:1 glyph ++
161+26:4 name noun-pair
162+26:14 glyph ^-
163+26:17 glyph [
164+26:18 tight glyph *
165+26:20 glyph *
166+26:21 tight glyph ]
167+26:23 name gap
168+26:26 tight glyph +
169+26:27 tight lit %s2
170+27:1 NEWLINE
171+27:1 glyph ++
172+27:4 name atom-pair
173+27:14 glyph ^-
174+27:17 glyph [
175+27:18 tight aura @ta
176+27:22 aura @tas
177+27:26 tight glyph ]
178+27:28 name gap
179+27:31 tight glyph +
180+27:32 tight lit %s2
181+28:1 NEWLINE
182+28:1 glyph ++
183+28:4 name wrong-head
184+28:15 glyph ^-
185+28:18 glyph [
186+28:19 tight aura @ud
187+28:23 aura @tas
188+28:27 tight glyph ]
189+28:29 name gap
190+28:32 tight glyph +
191+28:33 tight lit %s2
192+29:1 NEWLINE
193+29:1 glyph ++
194+29:4 name wrong-number
195+29:17 glyph ^-
196+29:20 name attr
197+29:25 name width
198+29:30 tight glyph +
199+29:31 tight glyph [
200+29:32 tight lit %fill
201+29:38 str "hi"
202+29:42 tight glyph ]
203+30:1 NEWLINE
204+30:1 glyph ++
205+30:4 name unrelated
206+31:3 INDENT
207+31:3 glyph ~&
208+31:6 lit %dangling
209+32:5 INDENT
210+32:5 glyph ^-
211+32:8 name attr
212+32:13 name gap
213+32:16 tight glyph +
214+32:17 tight lit %s2
215+32:20 DEDENT
216+32:20 DEDENT
217+32:20 NEWLINE
tests/golden/types-pair-context/tree.txtnew file+86
@@ -0,0 +1,86 @@
1+(module
2+ (mold 1:1 spacing
3+ (union 2:3 (const 2:3 %s0) (const 3:3 %s1) (const 4:3 %s2) (const 5:3 %s3)))
4+ (mold 6:1 length
5+ (union 7:3
6+ (cell 7:3
7+ (const 7:4 %fill)
8+ (face 7:10 n (aura 7:12 @ud)))
9+ (const 8:3 %shrink)))
10+ (mold 9:1 attr
11+ (union 10:3
12+ (cell 10:3 (const 10:4 %gap) (ref 10:9 spacing))
13+ (cell 11:3 (const 11:4 %pad) (ref 11:9 spacing))
14+ (cell 12:3 (const 12:4 %width) (ref 12:11 length))))
15+ (mold 13:1 other-attr
16+ (union 14:3
17+ (cell 14:3 (const 14:4 %gap) (ref 14:9 spacing))
18+ (cell 15:3 (const 15:4 %pad) (ref 15:9 spacing))
19+ (cell 16:3 (const 16:4 %width) (ref 16:11 length))))
20+ (value 17:1 one
21+ (cast 17:8
22+ (ref 17:11 attr)
23+ (pair 17:16 gap (lit 17:20 %s2))))
24+ (value 18:1 equiv
25+ (cast 18:10
26+ (ref 18:13 attr)
27+ (tuple 18:18 (lit 18:19 %gap) (lit 18:24 %s2))))
28+ (value 19:1 attrs
29+ (cast 19:10
30+ (apply 19:13 list (ref 19:19 attr))
31+ (list 19:25
32+ (pair 19:27 gap (lit 19:31 %s2))
33+ (pair 19:35 pad (lit 19:39 %s3))
34+ (pair 19:43 width
35+ (tuple 19:49 (lit 19:50 %fill) (lit 19:56 1))))))
36+ (value 20:1 gap-structural
37+ (cast 20:19
38+ (cell 20:22 (aura 20:23 @tas) (aura 20:28 @tas))
39+ (pair 20:34 gap (lit 20:38 %s2))))
40+ (value 21:1 nested
41+ (cast 21:11
42+ (ref 21:14 attr)
43+ (pair 21:19 width
44+ (tuple 21:25 (lit 21:26 %fill) (lit 21:32 1)))))
45+ (value 22:1 mismatch
46+ (cast 22:13
47+ (ref 22:16 attr)
48+ (pair 22:21 gap (lit 22:25 %shrink))))
49+ (value 23:1 missing
50+ (cast 23:12
51+ (ref 23:15 attr)
52+ (pair 23:20 width
53+ (tuple 23:26 (lit 23:27 %oops) (lit 23:33 1)))))
54+ (value 24:1 pending
55+ (pair 24:12 gap (lit 24:16 %s2)))
56+ (value 25:1 cross-origin
57+ (cast 25:17
58+ (ref 25:20 attr)
59+ (cast 25:25
60+ (ref 25:28 other-attr)
61+ (pair 25:39 gap (lit 25:43 %s2)))))
62+ (value 26:1 noun-pair
63+ (cast 26:14
64+ (cell 26:17 (noun 26:18) (noun 26:20))
65+ (pair 26:23 gap (lit 26:27 %s2))))
66+ (value 27:1 atom-pair
67+ (cast 27:14
68+ (cell 27:17 (aura 27:18 @ta) (aura 27:22 @tas))
69+ (pair 27:28 gap (lit 27:32 %s2))))
70+ (value 28:1 wrong-head
71+ (cast 28:15
72+ (cell 28:18 (aura 28:19 @ud) (aura 28:23 @tas))
73+ (pair 28:29 gap (lit 28:33 %s2))))
74+ (value 29:1 wrong-number
75+ (cast 29:17
76+ (ref 29:20 attr)
77+ (pair 29:25 width
78+ (tuple 29:31 (lit 29:32 %fill) (str 29:38 "hi")))))
79+ (value 30:1 unrelated
80+ (body 31:3
81+ (trace 31:3
82+ (lit 31:6 %dangling)
83+ (body 32:5
84+ (cast 32:5
85+ (ref 32:8 attr)
86+ (pair 32:13 gap (lit 32:17 %s2))))))))
tests/golden/types-pair-context/types.txtnew file+43
@@ -0,0 +1,43 @@
1+partial inference; module not checked
2++$ spacing: cases proven disjoint; mold not checked
3++$ length: cases proven disjoint; mold not checked
4++$ attr: cases proven disjoint; mold not checked
5++$ other-attr: cases proven disjoint; mold not checked
6+++ one: attr
7+++ equiv: attr
8+++ attrs: (list attr)
9+++ gap-structural: [@tas @tas]
10+++ nested: attr
11+++ mismatch: cast mold and expression type do not unify
12+/tests/golden/types-pair-context/source.jibb:22:16: cast mold
13+++ mismatch ^- attr gap+%shrink
14+ ^
15+/tests/golden/types-pair-context/source.jibb:22:21: expression
16+++ mismatch ^- attr gap+%shrink
17+ ^
18+++ missing: cast mold and expression type do not unify
19+/tests/golden/types-pair-context/source.jibb:23:15: cast mold
20+++ missing ^- attr width+[%oops 1]
21+ ^
22+/tests/golden/types-pair-context/source.jibb:23:20: expression
23+++ missing ^- attr width+[%oops 1]
24+ ^
25+++ pending: tag needs context in partial inference
26+++ cross-origin: cast constraint is not supported by partial inference
27+++ noun-pair: [* *]
28+++ atom-pair: [@ta @tas]
29+++ wrong-head: cast mold and expression type do not unify
30+/tests/golden/types-pair-context/source.jibb:28:18: cast mold has type [@ud @tas]
31+++ wrong-head ^- [@ud @tas] gap+%s2
32+ ^
33+/tests/golden/types-pair-context/source.jibb:28:29: expression
34+++ wrong-head ^- [@ud @tas] gap+%s2
35+ ^
36+++ wrong-number: cast mold and expression type do not unify
37+/tests/golden/types-pair-context/source.jibb:29:20: cast mold
38+++ wrong-number ^- attr width+[%fill "hi"]
39+ ^
40+/tests/golden/types-pair-context/source.jibb:29:25: expression
41+++ wrong-number ^- attr width+[%fill "hi"]
42+ ^
43+++ unrelated: tag needs context in partial inference
tests/golden/types-prelude-functional/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Prelude, Function helpers: `cork` and `cury` are source-backed gates from Hoon section 2n; the selected section also includes `corl` and `curr`.
2+tests: The actual prelude composes gates in either order and curries either side of an unfaced pair. Generic uses instantiate independently; incompatible composition reports a conflict, and a faced-sample currying case stays unsupported in the partial checker. Runtime behavior awaits the backend.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-functional/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the actual source-backed prelude.
tests/golden/types-prelude-functional/source.jibbnew file+18
@@ -0,0 +1,18 @@
1+++ pick |= p=[@t @p]
2+ ?- p
3+ [a b] a
4+++ curried (cury pick "hi")
5+++ use-cury (curried ~zod)
6+++ right-curried (curr pick ~zod)
7+++ use-curr (right-curried "hi")
8+++ polymorphic (cork same same)
9+++ use-text (polymorphic "hello")
10+++ use-ship (polymorphic ~zod)
11+++ textify |= x=@p "text"
12+++ shipify |= x=@t ~zod
13+++ forward (cork shipify textify)
14+++ backward (corl textify shipify)
15+++ use-forward (forward "hello")
16+++ use-backward (backward "hello")
17+++ bad-compose (cork shipify shipify)
18+++ faced-cury (cury |=([a=@t b=@p] a) "hi")
tests/golden/types-prelude-functional/tokens.txtnew file+145
@@ -0,0 +1,145 @@
1+1:1 glyph ++
2+1:4 name pick
3+1:9 glyph |=
4+1:12 name p
5+1:13 tight glyph =
6+1:14 tight glyph [
7+1:15 tight aura @t
8+1:18 aura @p
9+1:20 tight glyph ]
10+2:3 INDENT
11+2:3 glyph ?-
12+2:6 name p
13+3:5 INDENT
14+3:5 glyph [
15+3:6 tight name a
16+3:8 name b
17+3:9 tight glyph ]
18+3:11 name a
19+4:1 DEDENT
20+4:1 DEDENT
21+4:1 NEWLINE
22+4:1 glyph ++
23+4:4 name curried
24+4:12 glyph (
25+4:13 tight name cury
26+4:18 name pick
27+4:23 str "hi"
28+4:27 tight glyph )
29+5:1 NEWLINE
30+5:1 glyph ++
31+5:4 name use-cury
32+5:13 glyph (
33+5:14 tight name curried
34+5:22 lit ~zod
35+5:26 tight glyph )
36+6:1 NEWLINE
37+6:1 glyph ++
38+6:4 name right-curried
39+6:18 glyph (
40+6:19 tight name curr
41+6:24 name pick
42+6:29 lit ~zod
43+6:33 tight glyph )
44+7:1 NEWLINE
45+7:1 glyph ++
46+7:4 name use-curr
47+7:13 glyph (
48+7:14 tight name right-curried
49+7:28 str "hi"
50+7:32 tight glyph )
51+8:1 NEWLINE
52+8:1 glyph ++
53+8:4 name polymorphic
54+8:16 glyph (
55+8:17 tight name cork
56+8:22 name same
57+8:27 name same
58+8:31 tight glyph )
59+9:1 NEWLINE
60+9:1 glyph ++
61+9:4 name use-text
62+9:13 glyph (
63+9:14 tight name polymorphic
64+9:26 str "hello"
65+9:33 tight glyph )
66+10:1 NEWLINE
67+10:1 glyph ++
68+10:4 name use-ship
69+10:13 glyph (
70+10:14 tight name polymorphic
71+10:26 lit ~zod
72+10:30 tight glyph )
73+11:1 NEWLINE
74+11:1 glyph ++
75+11:4 name textify
76+11:12 glyph |=
77+11:15 name x
78+11:16 tight glyph =
79+11:17 tight aura @p
80+11:20 str "text"
81+12:1 NEWLINE
82+12:1 glyph ++
83+12:4 name shipify
84+12:12 glyph |=
85+12:15 name x
86+12:16 tight glyph =
87+12:17 tight aura @t
88+12:20 lit ~zod
89+13:1 NEWLINE
90+13:1 glyph ++
91+13:4 name forward
92+13:12 glyph (
93+13:13 tight name cork
94+13:18 name shipify
95+13:26 name textify
96+13:33 tight glyph )
97+14:1 NEWLINE
98+14:1 glyph ++
99+14:4 name backward
100+14:13 glyph (
101+14:14 tight name corl
102+14:19 name textify
103+14:27 name shipify
104+14:34 tight glyph )
105+15:1 NEWLINE
106+15:1 glyph ++
107+15:4 name use-forward
108+15:16 glyph (
109+15:17 tight name forward
110+15:25 str "hello"
111+15:32 tight glyph )
112+16:1 NEWLINE
113+16:1 glyph ++
114+16:4 name use-backward
115+16:17 glyph (
116+16:18 tight name backward
117+16:27 str "hello"
118+16:34 tight glyph )
119+17:1 NEWLINE
120+17:1 glyph ++
121+17:4 name bad-compose
122+17:16 glyph (
123+17:17 tight name cork
124+17:22 name shipify
125+17:30 name shipify
126+17:37 tight glyph )
127+18:1 NEWLINE
128+18:1 glyph ++
129+18:4 name faced-cury
130+18:15 glyph (
131+18:16 tight name cury
132+18:21 glyph |=(
133+18:24 tight glyph [
134+18:25 tight name a
135+18:26 tight glyph =
136+18:27 tight aura @t
137+18:30 name b
138+18:31 tight glyph =
139+18:32 tight aura @p
140+18:34 tight glyph ]
141+18:36 name a
142+18:37 tight glyph )
143+18:39 str "hi"
144+18:43 tight glyph )
145+18:44 NEWLINE
tests/golden/types-prelude-functional/tree.txtnew file+65
@@ -0,0 +1,65 @@
1+(module
2+ (value 1:1 pick
3+ (gate 1:9
4+ (face 1:12 p
5+ (cell 1:14 (aura 1:15 @t) (aura 1:18 @p)))
6+ (body 2:3
7+ (branch 2:3
8+ (wing 2:6 p)
9+ (arm 3:5
10+ (cell 3:5 (bind 3:6 a) (bind 3:8 b))
11+ (wing 3:11 a))))))
12+ (value 4:1 curried
13+ (group 4:12
14+ (call 4:13 (wing 4:13 cury) (wing 4:18 pick) (str 4:23 "hi"))))
15+ (value 5:1 use-cury
16+ (group 5:13
17+ (call 5:14 (wing 5:14 curried) (lit 5:22 ~zod))))
18+ (value 6:1 right-curried
19+ (group 6:18
20+ (call 6:19 (wing 6:19 curr) (wing 6:24 pick) (lit 6:29 ~zod))))
21+ (value 7:1 use-curr
22+ (group 7:13
23+ (call 7:14 (wing 7:14 right-curried) (str 7:28 "hi"))))
24+ (value 8:1 polymorphic
25+ (group 8:16
26+ (call 8:17 (wing 8:17 cork) (wing 8:22 same) (wing 8:27 same))))
27+ (value 9:1 use-text
28+ (group 9:13
29+ (call 9:14 (wing 9:14 polymorphic) (str 9:26 "hello"))))
30+ (value 10:1 use-ship
31+ (group 10:13
32+ (call 10:14 (wing 10:14 polymorphic) (lit 10:26 ~zod))))
33+ (value 11:1 textify
34+ (gate 11:12
35+ (face 11:15 x (aura 11:17 @p))
36+ (str 11:20 "text")))
37+ (value 12:1 shipify
38+ (gate 12:12
39+ (face 12:15 x (aura 12:17 @t))
40+ (lit 12:20 ~zod)))
41+ (value 13:1 forward
42+ (group 13:12
43+ (call 13:13 (wing 13:13 cork) (wing 13:18 shipify) (wing 13:26 textify))))
44+ (value 14:1 backward
45+ (group 14:13
46+ (call 14:14 (wing 14:14 corl) (wing 14:19 textify) (wing 14:27 shipify))))
47+ (value 15:1 use-forward
48+ (group 15:16
49+ (call 15:17 (wing 15:17 forward) (str 15:25 "hello"))))
50+ (value 16:1 use-backward
51+ (group 16:17
52+ (call 16:18 (wing 16:18 backward) (str 16:27 "hello"))))
53+ (value 17:1 bad-compose
54+ (group 17:16
55+ (call 17:17 (wing 17:17 cork) (wing 17:22 shipify) (wing 17:30 shipify))))
56+ (value 18:1 faced-cury
57+ (group 18:15
58+ (call 18:16
59+ (wing 18:16 cury)
60+ (gate-wide 18:21
61+ (cell 18:24
62+ (face 18:25 a (aura 18:27 @t))
63+ (face 18:30 b (aura 18:32 @p)))
64+ (wing 18:36 a))
65+ (str 18:39 "hi")))))
tests/golden/types-prelude-functional/types.txtnew file+23
@@ -0,0 +1,23 @@
1+partial inference; module not checked
2+++ pick: $-([@t @p] @t)
3+++ curried: $-(@p @t)
4+++ use-cury: @t
5+++ right-curried: $-(@t @t)
6+++ use-curr: @t
7+++ polymorphic: $-(A A)
8+++ use-text: @t
9+++ use-ship: @p
10+++ textify: $-(@p @t)
11+++ shipify: $-(@t @p)
12+++ forward: $-(@t @t)
13+++ backward: $-(@t @t)
14+++ use-forward: @t
15+++ use-backward: @t
16+++ bad-compose: call's sample and argument types do not unify
17+/tests/golden/types-prelude-functional/source.jibb:17:17: called gate has type $-([$-(A B) $-(B C)] $-(A C))
18+++ bad-compose (cork shipify shipify)
19+ ^
20+/tests/golden/types-prelude-functional/source.jibb:17:30: argument has type $-(@t @p)
21+++ bad-compose (cork shipify shipify)
22+ ^
23+++ faced-cury: call constraint is not supported by partial inference
tests/importer/about.txt+7
@@ -14,6 +14,13 @@ invalid dependencies, named payload dependencies, valid and collapsed enums,
1414direct and transitively aliased overlaps, nested collections, shadowed jar and
1515jug dependencies, Ford-name collisions, zuse local-name precedence and the
1616shared proof budget. Four real `presence` unions exercise the same path.
17+One named tagged union can occur inside another when the source proof and
18+both disjointness checks succeed. Repeated dependencies, hidden overlap,
19+deeper nesting, recursion, collection shadowing, and Ford-name collisions
20+exercise the conservative boundary. The new nested proof has a 256-visit
21+budget; the existing unnested proof keeps its 4,096-visit budget. A large
22+flat tagged union checks that a previously supported proof above 256 visits
23+still imports. These limits count source visits, not Hoon type-engine work.
1724Unsupported forms fail closed; nested `$@` cases remain supported. The union disjointness rule was confirmed in question 22. `ford.txt`
1825checks a synthetic imported subject and selected mold; other cases check
1926transitive imports, named mold lookup, missing names, shadowing, unprovenanced
tests/importer/shadow-static.txt+2
@@ -8,4 +8,6 @@
88++ set set:..zuse
99+$ tag-shadow-jar $%([%ok a=(jar @ud @t)] [%err a=@ud])
1010+$ tag-shadow-jug $%([%ok a=(jug @ud @t)] [%err a=@ud])
11++$ tag-nest-inner $%([%left value=(list @t)] [%right value=@ud])
12++$ tag-nest-shadow $%([%one x=tag-nest-inner] [%two ~])
1113--
tests/importer/small.txt+12
@@ -101,6 +101,7 @@
101101+$ tag-fuel-9 [tag-fuel-8 tag-fuel-8]
102102+$ tag-fuel-10 [tag-fuel-9 tag-fuel-9]
103103+$ tag-fuel-11 [tag-fuel-10 tag-fuel-10]
104++$ tag-flat-large $%([%ok value=tag-fuel-7] [%err ~])
104105:: Ford mark sample source-proof fixtures.
105106+$ mark-flag-item [done=? text=@t]
106107+$ mark-flag-valid $%([%added item=mark-flag-item] [%removed id=@ud])
@@ -110,4 +111,15 @@
110111+$ tag-null-good $%([%ok ~] [%err message=@t])
111112+$ tag-null-duplicate $%([%same ~] [%same ~])
112113+$ tag-null-hidden $%([%ok value=tag-invalid-chain] [%err ~])
114+:: One named tagged union layer; deeper, overlapping and cyclic cases fail.
115++$ tag-nest-inner $%([%left value=@t] [%right value=@ud])
116++$ tag-nest-middle $%([%one x=tag-nest-inner] [%two ~])
117++$ tag-nest-diamond $%([%one x=tag-nest-inner y=tag-nest-inner] [%two ~])
118++$ tag-nest-deep $%([%up x=tag-nest-middle] [%down ~])
119++$ tag-nest-duplicate $%([%same @t] [%same @t])
120++$ tag-nest-hidden $%([%one x=tag-nest-duplicate] [%two ~])
121++$ tag-nest-overlap $%([%one x=tag-invalid-cell] [%two ~])
122++$ tag-nest-recursive $%([%step next=(unit tag-nest-recursive)] [%done ~])
123++$ tag-nest-recursive-outer $%([%one x=tag-nest-recursive] [%two ~])
124++$ tag-nest-many $%([%one x0=tag-nest-inner x1=tag-nest-inner x2=tag-nest-inner x3=tag-nest-inner x4=tag-nest-inner x5=tag-nest-inner x6=tag-nest-inner x7=tag-nest-inner x8=tag-nest-inner x9=tag-nest-inner x10=tag-nest-inner x11=tag-nest-inner x12=tag-nest-inner x13=tag-nest-inner x14=tag-nest-inner x15=tag-nest-inner x16=tag-nest-inner x17=tag-nest-inner x18=tag-nest-inner x19=tag-nest-inner x20=tag-nest-inner x21=tag-nest-inner x22=tag-nest-inner x23=tag-nest-inner x24=tag-nest-inner x25=tag-nest-inner x26=tag-nest-inner x27=tag-nest-inner x28=tag-nest-inner x29=tag-nest-inner x30=tag-nest-inner x31=tag-nest-inner x32=tag-nest-inner x33=tag-nest-inner x34=tag-nest-inner x35=tag-nest-inner x36=tag-nest-inner x37=tag-nest-inner x38=tag-nest-inner x39=tag-nest-inner] [%two ~])
113125--
tests/importer/tree.txt+12
@@ -153,6 +153,18 @@ unverified-subject: error: Hoon module provenance is unavailable
153153tag-ford-collision: error: a Hoon union needs a source-level disjointness check
154154tag-ford-clean: (union [ok a=@t] [err a=@ud])
155155tag-zuse-local: (union [ok who=@t] [err where=@ud])
156+tag-nest-inner: (union [left value=@t] [right value=@ud])
157+tag-nest-middle: (union [one x=(union [left value=@t] [right value=@ud])] [two @n:0])
158+tag-nest-diamond: (union [one [x=(union [left value=@t] [right value=@ud]) y=(union [left value=@t] [right value=@ud])]] [two @n:0])
159+tag-nest-deep: error: a Hoon union needs a source-level disjointness check
160+tag-nest-hidden: error: a Hoon union needs a source-level disjointness check
161+tag-nest-overlap: error: a Hoon union needs a source-level disjointness check
162+tag-nest-recursive: error: a Hoon union needs a source-level disjointness check
163+tag-nest-many: error: a Hoon union needs a source-level disjointness check
164+tag-nest-shadow: error: a Hoon union needs a source-level disjointness check
165+tag-nest-wrong-hold: unsupported
166+tag-nest-ford-collision: error: a Hoon union needs a source-level disjointness check
167+tag-flat-large: supported above 256
156168tag-null-good: (union [ok @n:0] [err message=@t])
157169tag-null-duplicate: error: Hoon union disjointness could not be verified
158170tag-null-hidden: error: a Hoon union needs a source-level disjointness check
tests/lib/jibb.hoon+536−522
@@ -1497,6 +1497,8 @@
14971497/* typ-438 %txt /tests/golden/types-import-tlon-notes/types/txt
14981498/* imp-438-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
14991499/* imp-438-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1500+/* imp-438-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1501+/* imp-438-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
15001502/* src-439 %jibb /tests/golden/types-list-branch/source/jibb
15011503/* tok-439 %txt /tests/golden/types-list-branch/tokens/txt
15021504/* tre-439 %txt /tests/golden/types-list-branch/tree/txt
@@ -1632,428 +1634,436 @@
16321634/* tok-466 %txt /tests/golden/types-null-unresolved/tokens/txt
16331635/* tre-466 %txt /tests/golden/types-null-unresolved/tree/txt
16341636/* typ-466 %txt /tests/golden/types-null-unresolved/types/txt
1635−/* src-467 %jibb /tests/golden/types-partial-apply/source/jibb
1636−/* tok-467 %txt /tests/golden/types-partial-apply/tokens/txt
1637−/* tre-467 %txt /tests/golden/types-partial-apply/tree/txt
1638−/* typ-467 %txt /tests/golden/types-partial-apply/types/txt
1639−/* src-468 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1640−/* tok-468 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1641−/* tre-468 %txt /tests/golden/types-partial-atom-alias/tree/txt
1642−/* typ-468 %txt /tests/golden/types-partial-atom-alias/types/txt
1643−/* src-469 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1644−/* tok-469 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1645−/* tre-469 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1646−/* typ-469 %txt /tests/golden/types-partial-atom-constraint/types/txt
1647−/* src-470 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1648−/* tok-470 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1649−/* tre-470 %txt /tests/golden/types-partial-atom-widening/tree/txt
1650−/* typ-470 %txt /tests/golden/types-partial-atom-widening/types/txt
1651−/* src-471 %jibb /tests/golden/types-partial-aura/source/jibb
1652−/* tok-471 %txt /tests/golden/types-partial-aura/tokens/txt
1653−/* tre-471 %txt /tests/golden/types-partial-aura/tree/txt
1654−/* typ-471 %txt /tests/golden/types-partial-aura/types/txt
1655−/* src-472 %jibb /tests/golden/types-partial-aura-family/source/jibb
1656−/* tok-472 %txt /tests/golden/types-partial-aura-family/tokens/txt
1657−/* tre-472 %txt /tests/golden/types-partial-aura-family/tree/txt
1658−/* typ-472 %txt /tests/golden/types-partial-aura-family/types/txt
1659−/* src-473 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1660−/* tok-473 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1661−/* tre-473 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1662−/* typ-473 %txt /tests/golden/types-partial-aura-generalization/types/txt
1663−/* src-474 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1664−/* tok-474 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1665−/* tre-474 %txt /tests/golden/types-partial-bare-atom/tree/txt
1666−/* typ-474 %txt /tests/golden/types-partial-bare-atom/types/txt
1667−/* src-475 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1668−/* tok-475 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1669−/* tre-475 %txt /tests/golden/types-partial-branch-widening/tree/txt
1670−/* typ-475 %txt /tests/golden/types-partial-branch-widening/types/txt
1671−/* src-476 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1672−/* tok-476 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1673−/* tre-476 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1674−/* typ-476 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1675−/* src-477 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1676−/* tok-477 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1677−/* tre-477 %txt /tests/golden/types-partial-decimal-default/tree/txt
1678−/* typ-477 %txt /tests/golden/types-partial-decimal-default/types/txt
1679−/* src-478 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1680−/* tok-478 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1681−/* tre-478 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1682−/* typ-478 %txt /tests/golden/types-partial-dependency-chain/types/txt
1683−/* src-479 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1684−/* tok-479 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1685−/* tre-479 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1686−/* typ-479 %txt /tests/golden/types-partial-explicit-capital/types/txt
1687−/* src-480 %jibb /tests/golden/types-partial-forward/source/jibb
1688−/* tok-480 %txt /tests/golden/types-partial-forward/tokens/txt
1689−/* tre-480 %txt /tests/golden/types-partial-forward/tree/txt
1690−/* typ-480 %txt /tests/golden/types-partial-forward/types/txt
1691−/* src-481 %jibb /tests/golden/types-partial-generalization/source/jibb
1692−/* tok-481 %txt /tests/golden/types-partial-generalization/tokens/txt
1693−/* tre-481 %txt /tests/golden/types-partial-generalization/tree/txt
1694−/* typ-481 %txt /tests/golden/types-partial-generalization/types/txt
1695−/* src-482 %jibb /tests/golden/types-partial-identity/source/jibb
1696−/* tok-482 %txt /tests/golden/types-partial-identity/tokens/txt
1697−/* tre-482 %txt /tests/golden/types-partial-identity/tree/txt
1698−/* typ-482 %txt /tests/golden/types-partial-identity/types/txt
1699−/* src-483 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1700−/* tok-483 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1701−/* tre-483 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1702−/* typ-483 %txt /tests/golden/types-partial-independent-atoms/types/txt
1703−/* src-484 %jibb /tests/golden/types-partial-local-molds/source/jibb
1704−/* tok-484 %txt /tests/golden/types-partial-local-molds/tokens/txt
1705−/* tre-484 %txt /tests/golden/types-partial-local-molds/tree/txt
1706−/* typ-484 %txt /tests/golden/types-partial-local-molds/types/txt
1707−/* src-485 %jibb /tests/golden/types-partial-locals/source/jibb
1708−/* tok-485 %txt /tests/golden/types-partial-locals/tokens/txt
1709−/* tre-485 %txt /tests/golden/types-partial-locals/tree/txt
1710−/* typ-485 %txt /tests/golden/types-partial-locals/types/txt
1711−/* src-486 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1712−/* tok-486 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1713−/* tre-486 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1714−/* typ-486 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1715−/* src-487 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1716−/* tok-487 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1717−/* tre-487 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1718−/* typ-487 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1719−/* src-488 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1720−/* tok-488 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1721−/* tre-488 %txt /tests/golden/types-partial-mold-composite/tree/txt
1722−/* typ-488 %txt /tests/golden/types-partial-mold-composite/types/txt
1723−/* src-489 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1724−/* tok-489 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1725−/* tre-489 %txt /tests/golden/types-partial-mold-forward/tree/txt
1726−/* typ-489 %txt /tests/golden/types-partial-mold-forward/types/txt
1727−/* src-490 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1728−/* tok-490 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1729−/* tre-490 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1730−/* typ-490 %txt /tests/golden/types-partial-mold-recursive/types/txt
1731−/* src-491 %jibb /tests/golden/types-partial-occurs/source/jibb
1732−/* tok-491 %txt /tests/golden/types-partial-occurs/tokens/txt
1733−/* tre-491 %txt /tests/golden/types-partial-occurs/tree/txt
1734−/* typ-491 %txt /tests/golden/types-partial-occurs/types/txt
1735−/* src-492 %jibb /tests/golden/types-partial-projection/source/jibb
1736−/* tok-492 %txt /tests/golden/types-partial-projection/tokens/txt
1737−/* tre-492 %txt /tests/golden/types-partial-projection/tree/txt
1738−/* typ-492 %txt /tests/golden/types-partial-projection/types/txt
1739−/* src-493 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1740−/* tok-493 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1741−/* tre-493 %txt /tests/golden/types-partial-shadow-global/tree/txt
1742−/* typ-493 %txt /tests/golden/types-partial-shadow-global/types/txt
1743−/* src-494 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1744−/* tok-494 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1745−/* tre-494 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1746−/* typ-494 %txt /tests/golden/types-partial-shared-tvar/types/txt
1747−/* src-495 %jibb /tests/golden/types-partial-union-cases/source/jibb
1748−/* tok-495 %txt /tests/golden/types-partial-union-cases/tokens/txt
1749−/* tre-495 %txt /tests/golden/types-partial-union-cases/tree/txt
1750−/* typ-495 %txt /tests/golden/types-partial-union-cases/types/txt
1751−/* src-496 %jibb /tests/golden/types-partial-union-edges/source/jibb
1752−/* tok-496 %txt /tests/golden/types-partial-union-edges/tokens/txt
1753−/* tre-496 %txt /tests/golden/types-partial-union-edges/tree/txt
1754−/* typ-496 %txt /tests/golden/types-partial-union-edges/types/txt
1755−/* src-497 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1756−/* tok-497 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1757−/* tre-497 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1758−/* typ-497 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1759−/* src-498 %jibb /tests/golden/types-prelude-direct/source/jibb
1760−/* tok-498 %txt /tests/golden/types-prelude-direct/tokens/txt
1761−/* tre-498 %txt /tests/golden/types-prelude-direct/tree/txt
1762−/* typ-498 %txt /tests/golden/types-prelude-direct/types/txt
1763−/* src-499 %jibb /tests/golden/types-prelude-interface/source/jibb
1764−/* tok-499 %txt /tests/golden/types-prelude-interface/tokens/txt
1765−/* tre-499 %txt /tests/golden/types-prelude-interface/tree/txt
1766−/* mod-499-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1767−/* mod-499-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1768−/* typ-499 %txt /tests/golden/types-prelude-interface/types/txt
1769−/* mtre-499 %txt /tests/golden/types-prelude-interface/module-trees/txt
1770−/* src-500 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1771−/* tok-500 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1772−/* tre-500 %txt /tests/golden/types-prelude-list-functions/tree/txt
1773−/* mod-500-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1774−/* typ-500 %txt /tests/golden/types-prelude-list-functions/types/txt
1775−/* mtre-500 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1776−/* src-501 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1777−/* tok-501 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1778−/* tre-501 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1779−/* typ-501 %txt /tests/golden/types-prelude-list-helpers/types/txt
1780−/* src-502 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1781−/* tok-502 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1782−/* tre-502 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1783−/* typ-502 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1784−/* src-503 %jibb /tests/golden/types-record-bound-variable/source/jibb
1785−/* tok-503 %txt /tests/golden/types-record-bound-variable/tokens/txt
1786−/* tre-503 %txt /tests/golden/types-record-bound-variable/tree/txt
1787−/* typ-503 %txt /tests/golden/types-record-bound-variable/types/txt
1788−/* src-504 %jibb /tests/golden/types-record-cast-context/source/jibb
1789−/* tok-504 %txt /tests/golden/types-record-cast-context/tokens/txt
1790−/* tre-504 %txt /tests/golden/types-record-cast-context/tree/txt
1791−/* typ-504 %txt /tests/golden/types-record-cast-context/types/txt
1792−/* src-505 %jibb /tests/golden/types-record-change/source/jibb
1793−/* tok-505 %txt /tests/golden/types-record-change/tokens/txt
1794−/* tre-505 %txt /tests/golden/types-record-change/tree/txt
1795−/* typ-505 %txt /tests/golden/types-record-change/types/txt
1796−/* src-506 %jibb /tests/golden/types-record-change-generic/source/jibb
1797−/* tok-506 %txt /tests/golden/types-record-change-generic/tokens/txt
1798−/* tre-506 %txt /tests/golden/types-record-change-generic/tree/txt
1799−/* typ-506 %txt /tests/golden/types-record-change-generic/types/txt
1800−/* src-507 %jibb /tests/golden/types-record-faces/source/jibb
1801−/* tok-507 %txt /tests/golden/types-record-faces/tokens/txt
1802−/* tre-507 %txt /tests/golden/types-record-faces/tree/txt
1803−/* typ-507 %txt /tests/golden/types-record-faces/types/txt
1804−/* src-508 %jibb /tests/golden/types-record-import/source/jibb
1805−/* tok-508 %txt /tests/golden/types-record-import/tokens/txt
1806−/* tre-508 %txt /tests/golden/types-record-import/tree/txt
1807−/* mod-508-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1808−/* typ-508 %txt /tests/golden/types-record-import/types/txt
1809−/* mtre-508 %txt /tests/golden/types-record-import/module-trees/txt
1810−/* src-509 %jibb /tests/golden/types-record-local-scheme/source/jibb
1811−/* tok-509 %txt /tests/golden/types-record-local-scheme/tokens/txt
1812−/* tre-509 %txt /tests/golden/types-record-local-scheme/tree/txt
1813−/* typ-509 %txt /tests/golden/types-record-local-scheme/types/txt
1814−/* src-510 %jibb /tests/golden/types-record-nested/source/jibb
1815−/* tok-510 %txt /tests/golden/types-record-nested/tokens/txt
1816−/* tre-510 %txt /tests/golden/types-record-nested/tree/txt
1817−/* typ-510 %txt /tests/golden/types-record-nested/types/txt
1818−/* src-511 %jibb /tests/golden/types-record-to-tuple/source/jibb
1819−/* tok-511 %txt /tests/golden/types-record-to-tuple/tokens/txt
1820−/* tre-511 %txt /tests/golden/types-record-to-tuple/tree/txt
1821−/* typ-511 %txt /tests/golden/types-record-to-tuple/types/txt
1822−/* src-512 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1823−/* tok-512 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1824−/* tre-512 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1825−/* typ-512 %txt /tests/golden/types-recursion-scc-failures/types/txt
1826−/* src-513 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1827−/* tok-513 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1828−/* tre-513 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1829−/* typ-513 %txt /tests/golden/types-recursion-scc-groups/types/txt
1830−/* src-514 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1831−/* tok-514 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1832−/* tre-514 %txt /tests/golden/types-recursion-scc-import/tree/txt
1833−/* mod-514-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1834−/* typ-514 %txt /tests/golden/types-recursion-scc-import/types/txt
1835−/* mtre-514 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1836−/* src-515 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1837−/* tok-515 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1838−/* tre-515 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1839−/* mod-515-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1840−/* typ-515 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1841−/* mtre-515 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1842−/* src-516 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1843−/* tok-516 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1844−/* tre-516 %txt /tests/golden/types-recursion-scc-local/tree/txt
1845−/* typ-516 %txt /tests/golden/types-recursion-scc-local/types/txt
1846−/* src-517 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1847−/* tok-517 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1848−/* tre-517 %txt /tests/golden/types-recursion-scc-order/tree/txt
1849−/* typ-517 %txt /tests/golden/types-recursion-scc-order/types/txt
1850−/* src-518 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1851−/* tok-518 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1852−/* tre-518 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1853−/* typ-518 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1854−/* src-519 %jibb /tests/golden/types-recursive-branch/source/jibb
1855−/* tok-519 %txt /tests/golden/types-recursive-branch/tokens/txt
1856−/* tre-519 %txt /tests/golden/types-recursive-branch/tree/txt
1857−/* typ-519 %txt /tests/golden/types-recursive-branch/types/txt
1858−/* src-520 %jibb /tests/golden/types-recursive-gate/source/jibb
1859−/* tok-520 %txt /tests/golden/types-recursive-gate/tokens/txt
1860−/* tre-520 %txt /tests/golden/types-recursive-gate/tree/txt
1861−/* typ-520 %txt /tests/golden/types-recursive-gate/types/txt
1862−/* src-521 %jibb /tests/golden/types-recursive-sample/source/jibb
1863−/* tok-521 %txt /tests/golden/types-recursive-sample/tokens/txt
1864−/* tre-521 %txt /tests/golden/types-recursive-sample/tree/txt
1865−/* typ-521 %txt /tests/golden/types-recursive-sample/types/txt
1866−/* src-522 %jibb /tests/golden/types-scope-library-poke/source/jibb
1867−/* tok-522 %txt /tests/golden/types-scope-library-poke/tokens/txt
1868−/* tre-522 %txt /tests/golden/types-scope-library-poke/tree/txt
1869−/* typ-522 %txt /tests/golden/types-scope-library-poke/types/txt
1870−/* src-523 %jibb /tests/golden/types-scope-root-api/source/jibb
1871−/* tok-523 %txt /tests/golden/types-scope-root-api/tokens/txt
1872−/* tre-523 %txt /tests/golden/types-scope-root-api/tree/txt
1873−/* typ-523 %txt /tests/golden/types-scope-root-api/types/txt
1874−/* src-524 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1875−/* tok-524 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1876−/* tre-524 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1877−/* typ-524 %txt /tests/golden/types-scope-store-duplicate/types/txt
1878−/* src-525 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1879−/* tok-525 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1880−/* tre-525 %txt /tests/golden/types-scope-store-shadow/tree/txt
1881−/* typ-525 %txt /tests/golden/types-scope-store-shadow/types/txt
1882−/* src-526 %jibb /tests/golden/types-string-interpolation/source/jibb
1883−/* tok-526 %txt /tests/golden/types-string-interpolation/tokens/txt
1884−/* tre-526 %txt /tests/golden/types-string-interpolation/tree/txt
1885−/* typ-526 %txt /tests/golden/types-string-interpolation/types/txt
1886−/* src-527 %jibb /tests/golden/types-tuple-context/source/jibb
1887−/* tok-527 %txt /tests/golden/types-tuple-context/tokens/txt
1888−/* tre-527 %txt /tests/golden/types-tuple-context/tree/txt
1889−/* typ-527 %txt /tests/golden/types-tuple-context/types/txt
1890−/* src-528 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1891−/* tok-528 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1892−/* tre-528 %txt /tests/golden/types-tuple-context-nested/tree/txt
1893−/* typ-528 %txt /tests/golden/types-tuple-context-nested/types/txt
1894−/* src-529 %jibb /tests/golden/types-union-alias/source/jibb
1895−/* tok-529 %txt /tests/golden/types-union-alias/tokens/txt
1896−/* tre-529 %txt /tests/golden/types-union-alias/tree/txt
1897−/* typ-529 %txt /tests/golden/types-union-alias/types/txt
1898−/* src-530 %jibb /tests/golden/types-union-branch-context/source/jibb
1899−/* tok-530 %txt /tests/golden/types-union-branch-context/tokens/txt
1900−/* tre-530 %txt /tests/golden/types-union-branch-context/tree/txt
1901−/* typ-530 %txt /tests/golden/types-union-branch-context/types/txt
1902−/* src-531 %jibb /tests/golden/types-union-branch-pending/source/jibb
1903−/* tok-531 %txt /tests/golden/types-union-branch-pending/tokens/txt
1904−/* tre-531 %txt /tests/golden/types-union-branch-pending/tree/txt
1905−/* typ-531 %txt /tests/golden/types-union-branch-pending/types/txt
1906−/* src-532 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1907−/* tok-532 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1908−/* tre-532 %txt /tests/golden/types-union-constructor-shape/tree/txt
1909−/* typ-532 %txt /tests/golden/types-union-constructor-shape/types/txt
1910−/* src-533 %jibb /tests/golden/types-union-context-flow/source/jibb
1911−/* tok-533 %txt /tests/golden/types-union-context-flow/tokens/txt
1912−/* tre-533 %txt /tests/golden/types-union-context-flow/tree/txt
1913−/* typ-533 %txt /tests/golden/types-union-context-flow/types/txt
1914−/* src-534 %jibb /tests/golden/types-union-finite/source/jibb
1915−/* tok-534 %txt /tests/golden/types-union-finite/tokens/txt
1916−/* tre-534 %txt /tests/golden/types-union-finite/tree/txt
1917−/* typ-534 %txt /tests/golden/types-union-finite/types/txt
1918−/* src-535 %jibb /tests/golden/types-union-finite-context/source/jibb
1919−/* tok-535 %txt /tests/golden/types-union-finite-context/tokens/txt
1920−/* tre-535 %txt /tests/golden/types-union-finite-context/tree/txt
1921−/* typ-535 %txt /tests/golden/types-union-finite-context/types/txt
1922−/* src-536 %jibb /tests/golden/types-union-finite-generic/source/jibb
1923−/* tok-536 %txt /tests/golden/types-union-finite-generic/tokens/txt
1924−/* tre-536 %txt /tests/golden/types-union-finite-generic/tree/txt
1925−/* typ-536 %txt /tests/golden/types-union-finite-generic/types/txt
1926−/* src-537 %jibb /tests/golden/types-union-finite-limit/source/jibb
1927−/* tok-537 %txt /tests/golden/types-union-finite-limit/tokens/txt
1928−/* tre-537 %txt /tests/golden/types-union-finite-limit/tree/txt
1929−/* typ-537 %txt /tests/golden/types-union-finite-limit/types/txt
1930−/* src-538 %jibb /tests/golden/types-union-import/source/jibb
1931−/* tok-538 %txt /tests/golden/types-union-import/tokens/txt
1932−/* tre-538 %txt /tests/golden/types-union-import/tree/txt
1933−/* mod-538-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1934−/* typ-538 %txt /tests/golden/types-union-import/types/txt
1935−/* mtre-538 %txt /tests/golden/types-union-import/module-trees/txt
1936−/* src-539 %jibb /tests/golden/types-union-local-pending/source/jibb
1937−/* tok-539 %txt /tests/golden/types-union-local-pending/tokens/txt
1938−/* tre-539 %txt /tests/golden/types-union-local-pending/tree/txt
1939−/* typ-539 %txt /tests/golden/types-union-local-pending/types/txt
1940−/* src-540 %jibb /tests/golden/types-union-overlap/source/jibb
1941−/* tok-540 %txt /tests/golden/types-union-overlap/tokens/txt
1942−/* tre-540 %txt /tests/golden/types-union-overlap/tree/txt
1943−/* typ-540 %txt /tests/golden/types-union-overlap/types/txt
1944−/* src-541 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1945−/* tok-541 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1946−/* tre-541 %txt /tests/golden/types-union-overlap-nested/tree/txt
1947−/* typ-541 %txt /tests/golden/types-union-overlap-nested/types/txt
1948−/* src-542 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1949−/* tok-542 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1950−/* tre-542 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1951−/* typ-542 %txt /tests/golden/types-union-pattern-result-context/types/txt
1952−/* src-543 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1953−/* tok-543 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1954−/* tre-543 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1955−/* typ-543 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1956−/* src-544 %jibb /tests/golden/types-union-patterns/source/jibb
1957−/* tok-544 %txt /tests/golden/types-union-patterns/tokens/txt
1958−/* tre-544 %txt /tests/golden/types-union-patterns/tree/txt
1959−/* typ-544 %txt /tests/golden/types-union-patterns/types/txt
1960−/* src-545 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1961−/* tok-545 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1962−/* tre-545 %txt /tests/golden/types-union-patterns-generic/tree/txt
1963−/* typ-545 %txt /tests/golden/types-union-patterns-generic/types/txt
1964−/* src-546 %jibb /tests/golden/types-union-patterns-import/source/jibb
1965−/* tok-546 %txt /tests/golden/types-union-patterns-import/tokens/txt
1966−/* tre-546 %txt /tests/golden/types-union-patterns-import/tree/txt
1967−/* mod-546-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1968−/* typ-546 %txt /tests/golden/types-union-patterns-import/types/txt
1969−/* mtre-546 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1970−/* src-547 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1971−/* tok-547 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1972−/* tre-547 %txt /tests/golden/types-union-phantom-generic/tree/txt
1973−/* typ-547 %txt /tests/golden/types-union-phantom-generic/types/txt
1974−/* src-548 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1975−/* tok-548 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1976−/* tre-548 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1977−/* mod-548-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1978−/* typ-548 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1979−/* mtre-548 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1980−/* src-549 %jibb /tests/golden/types-union-print-distinct/source/jibb
1981−/* tok-549 %txt /tests/golden/types-union-print-distinct/tokens/txt
1982−/* tre-549 %txt /tests/golden/types-union-print-distinct/tree/txt
1983−/* mod-549-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1984−/* mod-549-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1985−/* mod-549-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1986−/* typ-549 %txt /tests/golden/types-union-print-distinct/types/txt
1987−/* mtre-549 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1988−/* src-550 %jibb /tests/golden/types-union-print-escape/source/jibb
1989−/* tok-550 %txt /tests/golden/types-union-print-escape/tokens/txt
1990−/* tre-550 %txt /tests/golden/types-union-print-escape/tree/txt
1991−/* typ-550 %txt /tests/golden/types-union-print-escape/types/txt
1992−/* src-551 %jibb /tests/golden/types-union-print-local/source/jibb
1993−/* tok-551 %txt /tests/golden/types-union-print-local/tokens/txt
1994−/* tre-551 %txt /tests/golden/types-union-print-local/tree/txt
1995−/* typ-551 %txt /tests/golden/types-union-print-local/types/txt
1996−/* src-552 %jibb /tests/golden/types-union-print-nested/source/jibb
1997−/* tok-552 %txt /tests/golden/types-union-print-nested/tokens/txt
1998−/* tre-552 %txt /tests/golden/types-union-print-nested/tree/txt
1999−/* typ-552 %txt /tests/golden/types-union-print-nested/types/txt
2000−/* src-553 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2001−/* tok-553 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2002−/* tre-553 %txt /tests/golden/types-union-print-same-origin/tree/txt
2003−/* mod-553-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2004−/* typ-553 %txt /tests/golden/types-union-print-same-origin/types/txt
2005−/* mtre-553 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2006−/* src-554 %jibb /tests/golden/types-union-print-transitive/source/jibb
2007−/* tok-554 %txt /tests/golden/types-union-print-transitive/tokens/txt
2008−/* tre-554 %txt /tests/golden/types-union-print-transitive/tree/txt
2009−/* mod-554-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2010−/* mod-554-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2011−/* typ-554 %txt /tests/golden/types-union-print-transitive/types/txt
2012−/* mtre-554 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2013−/* src-555 %jibb /tests/golden/types-union-singleton/source/jibb
2014−/* tok-555 %txt /tests/golden/types-union-singleton/tokens/txt
2015−/* tre-555 %txt /tests/golden/types-union-singleton/tree/txt
2016−/* typ-555 %txt /tests/golden/types-union-singleton/types/txt
2017−/* src-556 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2018−/* tok-556 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2019−/* tre-556 %txt /tests/golden/types-union-tag-atoms/tree/txt
2020−/* typ-556 %txt /tests/golden/types-union-tag-atoms/types/txt
2021−/* src-557 %jibb /tests/golden/types-union-tags/source/jibb
2022−/* tok-557 %txt /tests/golden/types-union-tags/tokens/txt
2023−/* tre-557 %txt /tests/golden/types-union-tags/tree/txt
2024−/* typ-557 %txt /tests/golden/types-union-tags/types/txt
2025−/* src-558 %jibb /tests/golden/types-union-unresolved/source/jibb
2026−/* tok-558 %txt /tests/golden/types-union-unresolved/tokens/txt
2027−/* tre-558 %txt /tests/golden/types-union-unresolved/tree/txt
2028−/* typ-558 %txt /tests/golden/types-union-unresolved/types/txt
2029−/* src-559 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2030−/* tok-559 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2031−/* tre-559 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2032−/* typ-559 %txt /tests/golden/types-union-unresolved-flow/types/txt
2033−/* src-560 %jibb /tests/golden/types-unit-construction/source/jibb
2034−/* tok-560 %txt /tests/golden/types-unit-construction/tokens/txt
2035−/* tre-560 %txt /tests/golden/types-unit-construction/tree/txt
2036−/* typ-560 %txt /tests/golden/types-unit-construction/types/txt
2037−/* src-561 %jibb /tests/golden/types-unit-context/source/jibb
2038−/* tok-561 %txt /tests/golden/types-unit-context/tokens/txt
2039−/* tre-561 %txt /tests/golden/types-unit-context/tree/txt
2040−/* typ-561 %txt /tests/golden/types-unit-context/types/txt
2041−/* src-562 %jibb /tests/golden/types-unit-patterns/source/jibb
2042−/* tok-562 %txt /tests/golden/types-unit-patterns/tokens/txt
2043−/* tre-562 %txt /tests/golden/types-unit-patterns/tree/txt
2044−/* typ-562 %txt /tests/golden/types-unit-patterns/types/txt
2045−/* src-563 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2046−/* tok-563 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2047−/* tre-563 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2048−/* typ-563 %txt /tests/golden/types-value-cycle-shadow/types/txt
2049−/* src-564 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2050−/* tok-564 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2051−/* tre-564 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2052−/* typ-564 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2053−/* src-565 %jibb /tests/golden/types-value-cycles/source/jibb
2054−/* tok-565 %txt /tests/golden/types-value-cycles/tokens/txt
2055−/* tre-565 %txt /tests/golden/types-value-cycles/tree/txt
2056−/* typ-565 %txt /tests/golden/types-value-cycles/types/txt
1637+/* src-467 %jibb /tests/golden/types-pair-context/source/jibb
1638+/* tok-467 %txt /tests/golden/types-pair-context/tokens/txt
1639+/* tre-467 %txt /tests/golden/types-pair-context/tree/txt
1640+/* typ-467 %txt /tests/golden/types-pair-context/types/txt
1641+/* src-468 %jibb /tests/golden/types-partial-apply/source/jibb
1642+/* tok-468 %txt /tests/golden/types-partial-apply/tokens/txt
1643+/* tre-468 %txt /tests/golden/types-partial-apply/tree/txt
1644+/* typ-468 %txt /tests/golden/types-partial-apply/types/txt
1645+/* src-469 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1646+/* tok-469 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1647+/* tre-469 %txt /tests/golden/types-partial-atom-alias/tree/txt
1648+/* typ-469 %txt /tests/golden/types-partial-atom-alias/types/txt
1649+/* src-470 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1650+/* tok-470 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1651+/* tre-470 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1652+/* typ-470 %txt /tests/golden/types-partial-atom-constraint/types/txt
1653+/* src-471 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1654+/* tok-471 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1655+/* tre-471 %txt /tests/golden/types-partial-atom-widening/tree/txt
1656+/* typ-471 %txt /tests/golden/types-partial-atom-widening/types/txt
1657+/* src-472 %jibb /tests/golden/types-partial-aura/source/jibb
1658+/* tok-472 %txt /tests/golden/types-partial-aura/tokens/txt
1659+/* tre-472 %txt /tests/golden/types-partial-aura/tree/txt
1660+/* typ-472 %txt /tests/golden/types-partial-aura/types/txt
1661+/* src-473 %jibb /tests/golden/types-partial-aura-family/source/jibb
1662+/* tok-473 %txt /tests/golden/types-partial-aura-family/tokens/txt
1663+/* tre-473 %txt /tests/golden/types-partial-aura-family/tree/txt
1664+/* typ-473 %txt /tests/golden/types-partial-aura-family/types/txt
1665+/* src-474 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1666+/* tok-474 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1667+/* tre-474 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1668+/* typ-474 %txt /tests/golden/types-partial-aura-generalization/types/txt
1669+/* src-475 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1670+/* tok-475 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1671+/* tre-475 %txt /tests/golden/types-partial-bare-atom/tree/txt
1672+/* typ-475 %txt /tests/golden/types-partial-bare-atom/types/txt
1673+/* src-476 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1674+/* tok-476 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1675+/* tre-476 %txt /tests/golden/types-partial-branch-widening/tree/txt
1676+/* typ-476 %txt /tests/golden/types-partial-branch-widening/types/txt
1677+/* src-477 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1678+/* tok-477 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1679+/* tre-477 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1680+/* typ-477 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1681+/* src-478 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1682+/* tok-478 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1683+/* tre-478 %txt /tests/golden/types-partial-decimal-default/tree/txt
1684+/* typ-478 %txt /tests/golden/types-partial-decimal-default/types/txt
1685+/* src-479 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1686+/* tok-479 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1687+/* tre-479 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1688+/* typ-479 %txt /tests/golden/types-partial-dependency-chain/types/txt
1689+/* src-480 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1690+/* tok-480 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1691+/* tre-480 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1692+/* typ-480 %txt /tests/golden/types-partial-explicit-capital/types/txt
1693+/* src-481 %jibb /tests/golden/types-partial-forward/source/jibb
1694+/* tok-481 %txt /tests/golden/types-partial-forward/tokens/txt
1695+/* tre-481 %txt /tests/golden/types-partial-forward/tree/txt
1696+/* typ-481 %txt /tests/golden/types-partial-forward/types/txt
1697+/* src-482 %jibb /tests/golden/types-partial-generalization/source/jibb
1698+/* tok-482 %txt /tests/golden/types-partial-generalization/tokens/txt
1699+/* tre-482 %txt /tests/golden/types-partial-generalization/tree/txt
1700+/* typ-482 %txt /tests/golden/types-partial-generalization/types/txt
1701+/* src-483 %jibb /tests/golden/types-partial-identity/source/jibb
1702+/* tok-483 %txt /tests/golden/types-partial-identity/tokens/txt
1703+/* tre-483 %txt /tests/golden/types-partial-identity/tree/txt
1704+/* typ-483 %txt /tests/golden/types-partial-identity/types/txt
1705+/* src-484 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1706+/* tok-484 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1707+/* tre-484 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1708+/* typ-484 %txt /tests/golden/types-partial-independent-atoms/types/txt
1709+/* src-485 %jibb /tests/golden/types-partial-local-molds/source/jibb
1710+/* tok-485 %txt /tests/golden/types-partial-local-molds/tokens/txt
1711+/* tre-485 %txt /tests/golden/types-partial-local-molds/tree/txt
1712+/* typ-485 %txt /tests/golden/types-partial-local-molds/types/txt
1713+/* src-486 %jibb /tests/golden/types-partial-locals/source/jibb
1714+/* tok-486 %txt /tests/golden/types-partial-locals/tokens/txt
1715+/* tre-486 %txt /tests/golden/types-partial-locals/tree/txt
1716+/* typ-486 %txt /tests/golden/types-partial-locals/types/txt
1717+/* src-487 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1718+/* tok-487 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1719+/* tre-487 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1720+/* typ-487 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1721+/* src-488 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1722+/* tok-488 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1723+/* tre-488 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1724+/* typ-488 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1725+/* src-489 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1726+/* tok-489 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1727+/* tre-489 %txt /tests/golden/types-partial-mold-composite/tree/txt
1728+/* typ-489 %txt /tests/golden/types-partial-mold-composite/types/txt
1729+/* src-490 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1730+/* tok-490 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1731+/* tre-490 %txt /tests/golden/types-partial-mold-forward/tree/txt
1732+/* typ-490 %txt /tests/golden/types-partial-mold-forward/types/txt
1733+/* src-491 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1734+/* tok-491 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1735+/* tre-491 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1736+/* typ-491 %txt /tests/golden/types-partial-mold-recursive/types/txt
1737+/* src-492 %jibb /tests/golden/types-partial-occurs/source/jibb
1738+/* tok-492 %txt /tests/golden/types-partial-occurs/tokens/txt
1739+/* tre-492 %txt /tests/golden/types-partial-occurs/tree/txt
1740+/* typ-492 %txt /tests/golden/types-partial-occurs/types/txt
1741+/* src-493 %jibb /tests/golden/types-partial-projection/source/jibb
1742+/* tok-493 %txt /tests/golden/types-partial-projection/tokens/txt
1743+/* tre-493 %txt /tests/golden/types-partial-projection/tree/txt
1744+/* typ-493 %txt /tests/golden/types-partial-projection/types/txt
1745+/* src-494 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1746+/* tok-494 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1747+/* tre-494 %txt /tests/golden/types-partial-shadow-global/tree/txt
1748+/* typ-494 %txt /tests/golden/types-partial-shadow-global/types/txt
1749+/* src-495 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1750+/* tok-495 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1751+/* tre-495 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1752+/* typ-495 %txt /tests/golden/types-partial-shared-tvar/types/txt
1753+/* src-496 %jibb /tests/golden/types-partial-union-cases/source/jibb
1754+/* tok-496 %txt /tests/golden/types-partial-union-cases/tokens/txt
1755+/* tre-496 %txt /tests/golden/types-partial-union-cases/tree/txt
1756+/* typ-496 %txt /tests/golden/types-partial-union-cases/types/txt
1757+/* src-497 %jibb /tests/golden/types-partial-union-edges/source/jibb
1758+/* tok-497 %txt /tests/golden/types-partial-union-edges/tokens/txt
1759+/* tre-497 %txt /tests/golden/types-partial-union-edges/tree/txt
1760+/* typ-497 %txt /tests/golden/types-partial-union-edges/types/txt
1761+/* src-498 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1762+/* tok-498 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1763+/* tre-498 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1764+/* typ-498 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1765+/* src-499 %jibb /tests/golden/types-prelude-direct/source/jibb
1766+/* tok-499 %txt /tests/golden/types-prelude-direct/tokens/txt
1767+/* tre-499 %txt /tests/golden/types-prelude-direct/tree/txt
1768+/* typ-499 %txt /tests/golden/types-prelude-direct/types/txt
1769+/* src-500 %jibb /tests/golden/types-prelude-functional/source/jibb
1770+/* tok-500 %txt /tests/golden/types-prelude-functional/tokens/txt
1771+/* tre-500 %txt /tests/golden/types-prelude-functional/tree/txt
1772+/* typ-500 %txt /tests/golden/types-prelude-functional/types/txt
1773+/* src-501 %jibb /tests/golden/types-prelude-interface/source/jibb
1774+/* tok-501 %txt /tests/golden/types-prelude-interface/tokens/txt
1775+/* tre-501 %txt /tests/golden/types-prelude-interface/tree/txt
1776+/* mod-501-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1777+/* mod-501-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1778+/* typ-501 %txt /tests/golden/types-prelude-interface/types/txt
1779+/* mtre-501 %txt /tests/golden/types-prelude-interface/module-trees/txt
1780+/* src-502 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1781+/* tok-502 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1782+/* tre-502 %txt /tests/golden/types-prelude-list-functions/tree/txt
1783+/* mod-502-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1784+/* typ-502 %txt /tests/golden/types-prelude-list-functions/types/txt
1785+/* mtre-502 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1786+/* src-503 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1787+/* tok-503 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1788+/* tre-503 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1789+/* typ-503 %txt /tests/golden/types-prelude-list-helpers/types/txt
1790+/* src-504 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1791+/* tok-504 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1792+/* tre-504 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1793+/* typ-504 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1794+/* src-505 %jibb /tests/golden/types-record-bound-variable/source/jibb
1795+/* tok-505 %txt /tests/golden/types-record-bound-variable/tokens/txt
1796+/* tre-505 %txt /tests/golden/types-record-bound-variable/tree/txt
1797+/* typ-505 %txt /tests/golden/types-record-bound-variable/types/txt
1798+/* src-506 %jibb /tests/golden/types-record-cast-context/source/jibb
1799+/* tok-506 %txt /tests/golden/types-record-cast-context/tokens/txt
1800+/* tre-506 %txt /tests/golden/types-record-cast-context/tree/txt
1801+/* typ-506 %txt /tests/golden/types-record-cast-context/types/txt
1802+/* src-507 %jibb /tests/golden/types-record-change/source/jibb
1803+/* tok-507 %txt /tests/golden/types-record-change/tokens/txt
1804+/* tre-507 %txt /tests/golden/types-record-change/tree/txt
1805+/* typ-507 %txt /tests/golden/types-record-change/types/txt
1806+/* src-508 %jibb /tests/golden/types-record-change-generic/source/jibb
1807+/* tok-508 %txt /tests/golden/types-record-change-generic/tokens/txt
1808+/* tre-508 %txt /tests/golden/types-record-change-generic/tree/txt
1809+/* typ-508 %txt /tests/golden/types-record-change-generic/types/txt
1810+/* src-509 %jibb /tests/golden/types-record-faces/source/jibb
1811+/* tok-509 %txt /tests/golden/types-record-faces/tokens/txt
1812+/* tre-509 %txt /tests/golden/types-record-faces/tree/txt
1813+/* typ-509 %txt /tests/golden/types-record-faces/types/txt
1814+/* src-510 %jibb /tests/golden/types-record-import/source/jibb
1815+/* tok-510 %txt /tests/golden/types-record-import/tokens/txt
1816+/* tre-510 %txt /tests/golden/types-record-import/tree/txt
1817+/* mod-510-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1818+/* typ-510 %txt /tests/golden/types-record-import/types/txt
1819+/* mtre-510 %txt /tests/golden/types-record-import/module-trees/txt
1820+/* src-511 %jibb /tests/golden/types-record-local-scheme/source/jibb
1821+/* tok-511 %txt /tests/golden/types-record-local-scheme/tokens/txt
1822+/* tre-511 %txt /tests/golden/types-record-local-scheme/tree/txt
1823+/* typ-511 %txt /tests/golden/types-record-local-scheme/types/txt
1824+/* src-512 %jibb /tests/golden/types-record-nested/source/jibb
1825+/* tok-512 %txt /tests/golden/types-record-nested/tokens/txt
1826+/* tre-512 %txt /tests/golden/types-record-nested/tree/txt
1827+/* typ-512 %txt /tests/golden/types-record-nested/types/txt
1828+/* src-513 %jibb /tests/golden/types-record-to-tuple/source/jibb
1829+/* tok-513 %txt /tests/golden/types-record-to-tuple/tokens/txt
1830+/* tre-513 %txt /tests/golden/types-record-to-tuple/tree/txt
1831+/* typ-513 %txt /tests/golden/types-record-to-tuple/types/txt
1832+/* src-514 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1833+/* tok-514 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1834+/* tre-514 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1835+/* typ-514 %txt /tests/golden/types-recursion-scc-failures/types/txt
1836+/* src-515 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1837+/* tok-515 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1838+/* tre-515 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1839+/* typ-515 %txt /tests/golden/types-recursion-scc-groups/types/txt
1840+/* src-516 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1841+/* tok-516 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1842+/* tre-516 %txt /tests/golden/types-recursion-scc-import/tree/txt
1843+/* mod-516-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1844+/* typ-516 %txt /tests/golden/types-recursion-scc-import/types/txt
1845+/* mtre-516 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1846+/* src-517 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1847+/* tok-517 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1848+/* tre-517 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1849+/* mod-517-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1850+/* typ-517 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1851+/* mtre-517 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1852+/* src-518 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1853+/* tok-518 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1854+/* tre-518 %txt /tests/golden/types-recursion-scc-local/tree/txt
1855+/* typ-518 %txt /tests/golden/types-recursion-scc-local/types/txt
1856+/* src-519 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1857+/* tok-519 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1858+/* tre-519 %txt /tests/golden/types-recursion-scc-order/tree/txt
1859+/* typ-519 %txt /tests/golden/types-recursion-scc-order/types/txt
1860+/* src-520 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1861+/* tok-520 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1862+/* tre-520 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1863+/* typ-520 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1864+/* src-521 %jibb /tests/golden/types-recursive-branch/source/jibb
1865+/* tok-521 %txt /tests/golden/types-recursive-branch/tokens/txt
1866+/* tre-521 %txt /tests/golden/types-recursive-branch/tree/txt
1867+/* typ-521 %txt /tests/golden/types-recursive-branch/types/txt
1868+/* src-522 %jibb /tests/golden/types-recursive-gate/source/jibb
1869+/* tok-522 %txt /tests/golden/types-recursive-gate/tokens/txt
1870+/* tre-522 %txt /tests/golden/types-recursive-gate/tree/txt
1871+/* typ-522 %txt /tests/golden/types-recursive-gate/types/txt
1872+/* src-523 %jibb /tests/golden/types-recursive-sample/source/jibb
1873+/* tok-523 %txt /tests/golden/types-recursive-sample/tokens/txt
1874+/* tre-523 %txt /tests/golden/types-recursive-sample/tree/txt
1875+/* typ-523 %txt /tests/golden/types-recursive-sample/types/txt
1876+/* src-524 %jibb /tests/golden/types-scope-library-poke/source/jibb
1877+/* tok-524 %txt /tests/golden/types-scope-library-poke/tokens/txt
1878+/* tre-524 %txt /tests/golden/types-scope-library-poke/tree/txt
1879+/* typ-524 %txt /tests/golden/types-scope-library-poke/types/txt
1880+/* src-525 %jibb /tests/golden/types-scope-root-api/source/jibb
1881+/* tok-525 %txt /tests/golden/types-scope-root-api/tokens/txt
1882+/* tre-525 %txt /tests/golden/types-scope-root-api/tree/txt
1883+/* typ-525 %txt /tests/golden/types-scope-root-api/types/txt
1884+/* src-526 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1885+/* tok-526 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1886+/* tre-526 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1887+/* typ-526 %txt /tests/golden/types-scope-store-duplicate/types/txt
1888+/* src-527 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1889+/* tok-527 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1890+/* tre-527 %txt /tests/golden/types-scope-store-shadow/tree/txt
1891+/* typ-527 %txt /tests/golden/types-scope-store-shadow/types/txt
1892+/* src-528 %jibb /tests/golden/types-string-interpolation/source/jibb
1893+/* tok-528 %txt /tests/golden/types-string-interpolation/tokens/txt
1894+/* tre-528 %txt /tests/golden/types-string-interpolation/tree/txt
1895+/* typ-528 %txt /tests/golden/types-string-interpolation/types/txt
1896+/* src-529 %jibb /tests/golden/types-tuple-context/source/jibb
1897+/* tok-529 %txt /tests/golden/types-tuple-context/tokens/txt
1898+/* tre-529 %txt /tests/golden/types-tuple-context/tree/txt
1899+/* typ-529 %txt /tests/golden/types-tuple-context/types/txt
1900+/* src-530 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1901+/* tok-530 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1902+/* tre-530 %txt /tests/golden/types-tuple-context-nested/tree/txt
1903+/* typ-530 %txt /tests/golden/types-tuple-context-nested/types/txt
1904+/* src-531 %jibb /tests/golden/types-union-alias/source/jibb
1905+/* tok-531 %txt /tests/golden/types-union-alias/tokens/txt
1906+/* tre-531 %txt /tests/golden/types-union-alias/tree/txt
1907+/* typ-531 %txt /tests/golden/types-union-alias/types/txt
1908+/* src-532 %jibb /tests/golden/types-union-branch-context/source/jibb
1909+/* tok-532 %txt /tests/golden/types-union-branch-context/tokens/txt
1910+/* tre-532 %txt /tests/golden/types-union-branch-context/tree/txt
1911+/* typ-532 %txt /tests/golden/types-union-branch-context/types/txt
1912+/* src-533 %jibb /tests/golden/types-union-branch-pending/source/jibb
1913+/* tok-533 %txt /tests/golden/types-union-branch-pending/tokens/txt
1914+/* tre-533 %txt /tests/golden/types-union-branch-pending/tree/txt
1915+/* typ-533 %txt /tests/golden/types-union-branch-pending/types/txt
1916+/* src-534 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1917+/* tok-534 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1918+/* tre-534 %txt /tests/golden/types-union-constructor-shape/tree/txt
1919+/* typ-534 %txt /tests/golden/types-union-constructor-shape/types/txt
1920+/* src-535 %jibb /tests/golden/types-union-context-flow/source/jibb
1921+/* tok-535 %txt /tests/golden/types-union-context-flow/tokens/txt
1922+/* tre-535 %txt /tests/golden/types-union-context-flow/tree/txt
1923+/* typ-535 %txt /tests/golden/types-union-context-flow/types/txt
1924+/* src-536 %jibb /tests/golden/types-union-finite/source/jibb
1925+/* tok-536 %txt /tests/golden/types-union-finite/tokens/txt
1926+/* tre-536 %txt /tests/golden/types-union-finite/tree/txt
1927+/* typ-536 %txt /tests/golden/types-union-finite/types/txt
1928+/* src-537 %jibb /tests/golden/types-union-finite-context/source/jibb
1929+/* tok-537 %txt /tests/golden/types-union-finite-context/tokens/txt
1930+/* tre-537 %txt /tests/golden/types-union-finite-context/tree/txt
1931+/* typ-537 %txt /tests/golden/types-union-finite-context/types/txt
1932+/* src-538 %jibb /tests/golden/types-union-finite-generic/source/jibb
1933+/* tok-538 %txt /tests/golden/types-union-finite-generic/tokens/txt
1934+/* tre-538 %txt /tests/golden/types-union-finite-generic/tree/txt
1935+/* typ-538 %txt /tests/golden/types-union-finite-generic/types/txt
1936+/* src-539 %jibb /tests/golden/types-union-finite-limit/source/jibb
1937+/* tok-539 %txt /tests/golden/types-union-finite-limit/tokens/txt
1938+/* tre-539 %txt /tests/golden/types-union-finite-limit/tree/txt
1939+/* typ-539 %txt /tests/golden/types-union-finite-limit/types/txt
1940+/* src-540 %jibb /tests/golden/types-union-import/source/jibb
1941+/* tok-540 %txt /tests/golden/types-union-import/tokens/txt
1942+/* tre-540 %txt /tests/golden/types-union-import/tree/txt
1943+/* mod-540-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1944+/* typ-540 %txt /tests/golden/types-union-import/types/txt
1945+/* mtre-540 %txt /tests/golden/types-union-import/module-trees/txt
1946+/* src-541 %jibb /tests/golden/types-union-local-pending/source/jibb
1947+/* tok-541 %txt /tests/golden/types-union-local-pending/tokens/txt
1948+/* tre-541 %txt /tests/golden/types-union-local-pending/tree/txt
1949+/* typ-541 %txt /tests/golden/types-union-local-pending/types/txt
1950+/* src-542 %jibb /tests/golden/types-union-overlap/source/jibb
1951+/* tok-542 %txt /tests/golden/types-union-overlap/tokens/txt
1952+/* tre-542 %txt /tests/golden/types-union-overlap/tree/txt
1953+/* typ-542 %txt /tests/golden/types-union-overlap/types/txt
1954+/* src-543 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1955+/* tok-543 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1956+/* tre-543 %txt /tests/golden/types-union-overlap-nested/tree/txt
1957+/* typ-543 %txt /tests/golden/types-union-overlap-nested/types/txt
1958+/* src-544 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1959+/* tok-544 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1960+/* tre-544 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1961+/* typ-544 %txt /tests/golden/types-union-pattern-result-context/types/txt
1962+/* src-545 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1963+/* tok-545 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1964+/* tre-545 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1965+/* typ-545 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1966+/* src-546 %jibb /tests/golden/types-union-patterns/source/jibb
1967+/* tok-546 %txt /tests/golden/types-union-patterns/tokens/txt
1968+/* tre-546 %txt /tests/golden/types-union-patterns/tree/txt
1969+/* typ-546 %txt /tests/golden/types-union-patterns/types/txt
1970+/* src-547 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1971+/* tok-547 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1972+/* tre-547 %txt /tests/golden/types-union-patterns-generic/tree/txt
1973+/* typ-547 %txt /tests/golden/types-union-patterns-generic/types/txt
1974+/* src-548 %jibb /tests/golden/types-union-patterns-import/source/jibb
1975+/* tok-548 %txt /tests/golden/types-union-patterns-import/tokens/txt
1976+/* tre-548 %txt /tests/golden/types-union-patterns-import/tree/txt
1977+/* mod-548-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
1978+/* typ-548 %txt /tests/golden/types-union-patterns-import/types/txt
1979+/* mtre-548 %txt /tests/golden/types-union-patterns-import/module-trees/txt
1980+/* src-549 %jibb /tests/golden/types-union-phantom-generic/source/jibb
1981+/* tok-549 %txt /tests/golden/types-union-phantom-generic/tokens/txt
1982+/* tre-549 %txt /tests/golden/types-union-phantom-generic/tree/txt
1983+/* typ-549 %txt /tests/golden/types-union-phantom-generic/types/txt
1984+/* src-550 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
1985+/* tok-550 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
1986+/* tre-550 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
1987+/* mod-550-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
1988+/* typ-550 %txt /tests/golden/types-union-print-cross-namespace/types/txt
1989+/* mtre-550 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
1990+/* src-551 %jibb /tests/golden/types-union-print-distinct/source/jibb
1991+/* tok-551 %txt /tests/golden/types-union-print-distinct/tokens/txt
1992+/* tre-551 %txt /tests/golden/types-union-print-distinct/tree/txt
1993+/* mod-551-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
1994+/* mod-551-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
1995+/* mod-551-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
1996+/* typ-551 %txt /tests/golden/types-union-print-distinct/types/txt
1997+/* mtre-551 %txt /tests/golden/types-union-print-distinct/module-trees/txt
1998+/* src-552 %jibb /tests/golden/types-union-print-escape/source/jibb
1999+/* tok-552 %txt /tests/golden/types-union-print-escape/tokens/txt
2000+/* tre-552 %txt /tests/golden/types-union-print-escape/tree/txt
2001+/* typ-552 %txt /tests/golden/types-union-print-escape/types/txt
2002+/* src-553 %jibb /tests/golden/types-union-print-local/source/jibb
2003+/* tok-553 %txt /tests/golden/types-union-print-local/tokens/txt
2004+/* tre-553 %txt /tests/golden/types-union-print-local/tree/txt
2005+/* typ-553 %txt /tests/golden/types-union-print-local/types/txt
2006+/* src-554 %jibb /tests/golden/types-union-print-nested/source/jibb
2007+/* tok-554 %txt /tests/golden/types-union-print-nested/tokens/txt
2008+/* tre-554 %txt /tests/golden/types-union-print-nested/tree/txt
2009+/* typ-554 %txt /tests/golden/types-union-print-nested/types/txt
2010+/* src-555 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2011+/* tok-555 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2012+/* tre-555 %txt /tests/golden/types-union-print-same-origin/tree/txt
2013+/* mod-555-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2014+/* typ-555 %txt /tests/golden/types-union-print-same-origin/types/txt
2015+/* mtre-555 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2016+/* src-556 %jibb /tests/golden/types-union-print-transitive/source/jibb
2017+/* tok-556 %txt /tests/golden/types-union-print-transitive/tokens/txt
2018+/* tre-556 %txt /tests/golden/types-union-print-transitive/tree/txt
2019+/* mod-556-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2020+/* mod-556-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2021+/* typ-556 %txt /tests/golden/types-union-print-transitive/types/txt
2022+/* mtre-556 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2023+/* src-557 %jibb /tests/golden/types-union-singleton/source/jibb
2024+/* tok-557 %txt /tests/golden/types-union-singleton/tokens/txt
2025+/* tre-557 %txt /tests/golden/types-union-singleton/tree/txt
2026+/* typ-557 %txt /tests/golden/types-union-singleton/types/txt
2027+/* src-558 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2028+/* tok-558 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2029+/* tre-558 %txt /tests/golden/types-union-tag-atoms/tree/txt
2030+/* typ-558 %txt /tests/golden/types-union-tag-atoms/types/txt
2031+/* src-559 %jibb /tests/golden/types-union-tags/source/jibb
2032+/* tok-559 %txt /tests/golden/types-union-tags/tokens/txt
2033+/* tre-559 %txt /tests/golden/types-union-tags/tree/txt
2034+/* typ-559 %txt /tests/golden/types-union-tags/types/txt
2035+/* src-560 %jibb /tests/golden/types-union-unresolved/source/jibb
2036+/* tok-560 %txt /tests/golden/types-union-unresolved/tokens/txt
2037+/* tre-560 %txt /tests/golden/types-union-unresolved/tree/txt
2038+/* typ-560 %txt /tests/golden/types-union-unresolved/types/txt
2039+/* src-561 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2040+/* tok-561 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2041+/* tre-561 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2042+/* typ-561 %txt /tests/golden/types-union-unresolved-flow/types/txt
2043+/* src-562 %jibb /tests/golden/types-unit-construction/source/jibb
2044+/* tok-562 %txt /tests/golden/types-unit-construction/tokens/txt
2045+/* tre-562 %txt /tests/golden/types-unit-construction/tree/txt
2046+/* typ-562 %txt /tests/golden/types-unit-construction/types/txt
2047+/* src-563 %jibb /tests/golden/types-unit-context/source/jibb
2048+/* tok-563 %txt /tests/golden/types-unit-context/tokens/txt
2049+/* tre-563 %txt /tests/golden/types-unit-context/tree/txt
2050+/* typ-563 %txt /tests/golden/types-unit-context/types/txt
2051+/* src-564 %jibb /tests/golden/types-unit-patterns/source/jibb
2052+/* tok-564 %txt /tests/golden/types-unit-patterns/tokens/txt
2053+/* tre-564 %txt /tests/golden/types-unit-patterns/tree/txt
2054+/* typ-564 %txt /tests/golden/types-unit-patterns/types/txt
2055+/* src-565 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2056+/* tok-565 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2057+/* tre-565 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2058+/* typ-565 %txt /tests/golden/types-value-cycle-shadow/types/txt
2059+/* src-566 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2060+/* tok-566 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2061+/* tre-566 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2062+/* typ-566 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2063+/* src-567 %jibb /tests/golden/types-value-cycles/source/jibb
2064+/* tok-567 %txt /tests/golden/types-value-cycles/tokens/txt
2065+/* tre-567 %txt /tests/golden/types-value-cycles/tree/txt
2066+/* typ-567 %txt /tests/golden/types-value-cycles/types/txt
20572067=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
20582068|%
20592069:: one arm per case
@@ -2933,7 +2943,7 @@
29332943++ test-types-import-sur-record-graph
29342944 (weld (weld (check ~.types-import-sur-record-graph src-437 `tok-437 `tre-437) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-437 `typ-437 ~[[%fixture %entry imp-437-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-437-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-437 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-437-1]]))
29352945++ test-types-import-tlon-notes
2936− (weld (check ~.types-import-tlon-notes src-438 `tok-438 `tre-438) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-438 `typ-438 ~[[%notes %u-note imp-438-1] [%notes %a-note imp-438-2]]))
2946+ (weld (check ~.types-import-tlon-notes src-438 `tok-438 `tre-438) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-438 `typ-438 ~[[%notes %u-note imp-438-1] [%notes %a-note imp-438-2] [%notes %u-notebook imp-438-3] [%notes %u-notes imp-438-4]]))
29372947++ test-types-list-branch
29382948 (weld (check ~.types-list-branch src-439 `tok-439 `tre-439) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-439 `typ-439 ~ ~ ~))
29392949++ test-types-list-cons
@@ -2990,204 +3000,208 @@
29903000 (weld (check ~.types-null-overlap src-465 `tok-465 `tre-465) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-465 `typ-465))
29913001++ test-types-null-unresolved
29923002 (weld (check ~.types-null-unresolved src-466 `tok-466 `tre-466) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-466 `typ-466))
3003+++ test-types-pair-context
3004+ (weld (check ~.types-pair-context src-467 `tok-467 `tre-467) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-467 `typ-467 ~ ~ ~))
29933005++ test-types-partial-apply
2994− (weld (check ~.types-partial-apply src-467 `tok-467 `tre-467) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-467 `typ-467))
3006+ (weld (check ~.types-partial-apply src-468 `tok-468 `tre-468) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-468 `typ-468))
29953007++ test-types-partial-atom-alias
2996− (weld (check ~.types-partial-atom-alias src-468 `tok-468 `tre-468) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-468 `typ-468))
3008+ (weld (check ~.types-partial-atom-alias src-469 `tok-469 `tre-469) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-469 `typ-469))
29973009++ test-types-partial-atom-constraint
2998− (weld (check ~.types-partial-atom-constraint src-469 `tok-469 `tre-469) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-469 `typ-469))
3010+ (weld (check ~.types-partial-atom-constraint src-470 `tok-470 `tre-470) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-470 `typ-470))
29993011++ test-types-partial-atom-widening
3000− (weld (check ~.types-partial-atom-widening src-470 `tok-470 `tre-470) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-470 `typ-470))
3012+ (weld (check ~.types-partial-atom-widening src-471 `tok-471 `tre-471) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-471 `typ-471))
30013013++ test-types-partial-aura
3002− (weld (check ~.types-partial-aura src-471 `tok-471 `tre-471) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-471 `typ-471))
3014+ (weld (check ~.types-partial-aura src-472 `tok-472 `tre-472) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-472 `typ-472))
30033015++ test-types-partial-aura-family
3004− (weld (check ~.types-partial-aura-family src-472 `tok-472 `tre-472) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-472 `typ-472))
3016+ (weld (check ~.types-partial-aura-family src-473 `tok-473 `tre-473) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-473 `typ-473))
30053017++ test-types-partial-aura-generalization
3006− (weld (check ~.types-partial-aura-generalization src-473 `tok-473 `tre-473) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-473 `typ-473))
3018+ (weld (check ~.types-partial-aura-generalization src-474 `tok-474 `tre-474) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-474 `typ-474))
30073019++ test-types-partial-bare-atom
3008− (weld (check ~.types-partial-bare-atom src-474 `tok-474 `tre-474) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-474 `typ-474))
3020+ (weld (check ~.types-partial-bare-atom src-475 `tok-475 `tre-475) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-475 `typ-475))
30093021++ test-types-partial-branch-widening
3010− (weld (check ~.types-partial-branch-widening src-475 `tok-475 `tre-475) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-475 `typ-475))
3022+ (weld (check ~.types-partial-branch-widening src-476 `tok-476 `tre-476) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-476 `typ-476))
30113023++ test-types-partial-conflicting-sites
3012− (weld (check ~.types-partial-conflicting-sites src-476 `tok-476 `tre-476) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-476 `typ-476))
3024+ (weld (check ~.types-partial-conflicting-sites src-477 `tok-477 `tre-477) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-477 `typ-477))
30133025++ test-types-partial-decimal-default
3014− (weld (check ~.types-partial-decimal-default src-477 `tok-477 `tre-477) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-477 `typ-477))
3026+ (weld (check ~.types-partial-decimal-default src-478 `tok-478 `tre-478) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-478 `typ-478))
30153027++ test-types-partial-dependency-chain
3016− (weld (check ~.types-partial-dependency-chain src-478 `tok-478 `tre-478) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-478 `typ-478))
3028+ (weld (check ~.types-partial-dependency-chain src-479 `tok-479 `tre-479) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-479 `typ-479))
30173029++ test-types-partial-explicit-capital
3018− (weld (check ~.types-partial-explicit-capital src-479 `tok-479 `tre-479) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-479 `typ-479))
3030+ (weld (check ~.types-partial-explicit-capital src-480 `tok-480 `tre-480) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-480 `typ-480))
30193031++ test-types-partial-forward
3020− (weld (check ~.types-partial-forward src-480 `tok-480 `tre-480) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-480 `typ-480))
3032+ (weld (check ~.types-partial-forward src-481 `tok-481 `tre-481) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-481 `typ-481))
30213033++ test-types-partial-generalization
3022− (weld (check ~.types-partial-generalization src-481 `tok-481 `tre-481) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-481 `typ-481))
3034+ (weld (check ~.types-partial-generalization src-482 `tok-482 `tre-482) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-482 `typ-482))
30233035++ test-types-partial-identity
3024− (weld (check ~.types-partial-identity src-482 `tok-482 `tre-482) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-482 `typ-482))
3036+ (weld (check ~.types-partial-identity src-483 `tok-483 `tre-483) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-483 `typ-483))
30253037++ test-types-partial-independent-atoms
3026− (weld (check ~.types-partial-independent-atoms src-483 `tok-483 `tre-483) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-483 `typ-483))
3038+ (weld (check ~.types-partial-independent-atoms src-484 `tok-484 `tre-484) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-484 `typ-484))
30273039++ test-types-partial-local-molds
3028− (weld (check ~.types-partial-local-molds src-484 `tok-484 `tre-484) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-484 `typ-484))
3040+ (weld (check ~.types-partial-local-molds src-485 `tok-485 `tre-485) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-485 `typ-485))
30293041++ test-types-partial-locals
3030− (weld (check ~.types-partial-locals src-485 `tok-485 `tre-485) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-485 `typ-485))
3042+ (weld (check ~.types-partial-locals src-486 `tok-486 `tre-486) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-486 `typ-486))
30313043++ test-types-partial-many-atom-constraints
3032− (weld (check ~.types-partial-many-atom-constraints src-486 `tok-486 `tre-486) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-486 `typ-486))
3044+ (weld (check ~.types-partial-many-atom-constraints src-487 `tok-487 `tre-487) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-487 `typ-487))
30333045++ test-types-partial-mold-bare-aura
3034− (weld (check ~.types-partial-mold-bare-aura src-487 `tok-487 `tre-487) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-487 `typ-487))
3046+ (weld (check ~.types-partial-mold-bare-aura src-488 `tok-488 `tre-488) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-488 `typ-488))
30353047++ test-types-partial-mold-composite
3036− (weld (check ~.types-partial-mold-composite src-488 `tok-488 `tre-488) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-488 `typ-488))
3048+ (weld (check ~.types-partial-mold-composite src-489 `tok-489 `tre-489) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-489 `typ-489))
30373049++ test-types-partial-mold-forward
3038− (weld (check ~.types-partial-mold-forward src-489 `tok-489 `tre-489) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-489 `typ-489))
3050+ (weld (check ~.types-partial-mold-forward src-490 `tok-490 `tre-490) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-490 `typ-490))
30393051++ test-types-partial-mold-recursive
3040− (weld (check ~.types-partial-mold-recursive src-490 `tok-490 `tre-490) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-490 `typ-490))
3052+ (weld (check ~.types-partial-mold-recursive src-491 `tok-491 `tre-491) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-491 `typ-491))
30413053++ test-types-partial-occurs
3042− (weld (check ~.types-partial-occurs src-491 `tok-491 `tre-491) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-491 `typ-491))
3054+ (weld (check ~.types-partial-occurs src-492 `tok-492 `tre-492) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-492 `typ-492))
30433055++ test-types-partial-projection
3044− (weld (check ~.types-partial-projection src-492 `tok-492 `tre-492) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-492 `typ-492))
3056+ (weld (check ~.types-partial-projection src-493 `tok-493 `tre-493) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-493 `typ-493))
30453057++ test-types-partial-shadow-global
3046− (weld (check ~.types-partial-shadow-global src-493 `tok-493 `tre-493) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-493 `typ-493))
3058+ (weld (check ~.types-partial-shadow-global src-494 `tok-494 `tre-494) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-494 `typ-494))
30473059++ test-types-partial-shared-tvar
3048− (weld (check ~.types-partial-shared-tvar src-494 `tok-494 `tre-494) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-494 `typ-494))
3060+ (weld (check ~.types-partial-shared-tvar src-495 `tok-495 `tre-495) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-495 `typ-495))
30493061++ test-types-partial-union-cases
3050− (weld (check ~.types-partial-union-cases src-495 `tok-495 `tre-495) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-495 `typ-495))
3062+ (weld (check ~.types-partial-union-cases src-496 `tok-496 `tre-496) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-496 `typ-496))
30513063++ test-types-partial-union-edges
3052− (weld (check ~.types-partial-union-edges src-496 `tok-496 `tre-496) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-496 `typ-496))
3064+ (weld (check ~.types-partial-union-edges src-497 `tok-497 `tre-497) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-497 `typ-497))
30533065++ test-types-partial-unresolved-tag
3054− (weld (check ~.types-partial-unresolved-tag src-497 `tok-497 `tre-497) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-497 `typ-497))
3066+ (weld (check ~.types-partial-unresolved-tag src-498 `tok-498 `tre-498) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-498 `typ-498))
30553067++ test-types-prelude-direct
3056− (weld (check ~.types-prelude-direct src-498 `tok-498 `tre-498) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-498 `typ-498 ~ ~ ~))
3068+ (weld (check ~.types-prelude-direct src-499 `tok-499 `tre-499) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-499 `typ-499 ~ ~ ~))
3069+++ test-types-prelude-functional
3070+ (weld (check ~.types-prelude-functional src-500 `tok-500 `tre-500) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-500 `typ-500 ~ ~ ~))
30573071++ test-types-prelude-interface
3058− (weld (weld (check ~.types-prelude-interface src-499 `tok-499 `tre-499) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-499 `typ-499 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-499-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-499-2]])) (check-module-trees ~.types-prelude-interface `mtre-499 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-499-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-499-2]]))
3072+ (weld (weld (check ~.types-prelude-interface src-501 `tok-501 `tre-501) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-501 `typ-501 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-501-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-501-2]])) (check-module-trees ~.types-prelude-interface `mtre-501 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-501-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-501-2]]))
30593073++ test-types-prelude-list-functions
3060− (weld (weld (check ~.types-prelude-list-functions src-500 `tok-500 `tre-500) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-500 `typ-500 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-500-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-500 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-500-1]]))
3074+ (weld (weld (check ~.types-prelude-list-functions src-502 `tok-502 `tre-502) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-502 `typ-502 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-502 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-502-1]]))
30613075++ test-types-prelude-list-helpers
3062− (weld (check ~.types-prelude-list-helpers src-501 `tok-501 `tre-501) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-501 `typ-501 ~ ~ ~))
3076+ (weld (check ~.types-prelude-list-helpers src-503 `tok-503 `tre-503) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-503 `typ-503 ~ ~ ~))
30633077++ test-types-prelude-unit-helpers
3064− (weld (check ~.types-prelude-unit-helpers src-502 `tok-502 `tre-502) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-502 `typ-502 ~ ~ ~))
3078+ (weld (check ~.types-prelude-unit-helpers src-504 `tok-504 `tre-504) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-504 `typ-504 ~ ~ ~))
30653079++ test-types-record-bound-variable
3066− (weld (check ~.types-record-bound-variable src-503 `tok-503 `tre-503) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-503 `typ-503))
3080+ (weld (check ~.types-record-bound-variable src-505 `tok-505 `tre-505) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-505 `typ-505))
30673081++ test-types-record-cast-context
3068− (weld (check ~.types-record-cast-context src-504 `tok-504 `tre-504) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-504 `typ-504 ~ ~ ~))
3082+ (weld (check ~.types-record-cast-context src-506 `tok-506 `tre-506) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-506 `typ-506 ~ ~ ~))
30693083++ test-types-record-change
3070− (weld (check ~.types-record-change src-505 `tok-505 `tre-505) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-505 `typ-505 ~ ~ ~))
3084+ (weld (check ~.types-record-change src-507 `tok-507 `tre-507) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-507 `typ-507 ~ ~ ~))
30713085++ test-types-record-change-generic
3072− (weld (check ~.types-record-change-generic src-506 `tok-506 `tre-506) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-506 `typ-506 ~ ~ ~))
3086+ (weld (check ~.types-record-change-generic src-508 `tok-508 `tre-508) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-508 `typ-508 ~ ~ ~))
30733087++ test-types-record-faces
3074− (weld (check ~.types-record-faces src-507 `tok-507 `tre-507) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-507 `typ-507))
3088+ (weld (check ~.types-record-faces src-509 `tok-509 `tre-509) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-509 `typ-509))
30753089++ test-types-record-import
3076− (weld (weld (check ~.types-record-import src-508 `tok-508 `tre-508) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-508 `typ-508 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-508-1]])) (check-module-trees ~.types-record-import `mtre-508 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-508-1]]))
3090+ (weld (weld (check ~.types-record-import src-510 `tok-510 `tre-510) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-510 `typ-510 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-510-1]])) (check-module-trees ~.types-record-import `mtre-510 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-510-1]]))
30773091++ test-types-record-local-scheme
3078− (weld (check ~.types-record-local-scheme src-509 `tok-509 `tre-509) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-509 `typ-509))
3092+ (weld (check ~.types-record-local-scheme src-511 `tok-511 `tre-511) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-511 `typ-511))
30793093++ test-types-record-nested
3080− (weld (check ~.types-record-nested src-510 `tok-510 `tre-510) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-510 `typ-510))
3094+ (weld (check ~.types-record-nested src-512 `tok-512 `tre-512) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-512 `typ-512))
30813095++ test-types-record-to-tuple
3082− (weld (check ~.types-record-to-tuple src-511 `tok-511 `tre-511) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-511 `typ-511))
3096+ (weld (check ~.types-record-to-tuple src-513 `tok-513 `tre-513) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-513 `typ-513))
30833097++ test-types-recursion-scc-failures
3084− (weld (check ~.types-recursion-scc-failures src-512 `tok-512 `tre-512) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-512 `typ-512 ~ ~ ~))
3098+ (weld (check ~.types-recursion-scc-failures src-514 `tok-514 `tre-514) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-514 `typ-514 ~ ~ ~))
30853099++ test-types-recursion-scc-groups
3086− (weld (check ~.types-recursion-scc-groups src-513 `tok-513 `tre-513) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-513 `typ-513 ~ ~ ~))
3100+ (weld (check ~.types-recursion-scc-groups src-515 `tok-515 `tre-515) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-515 `typ-515 ~ ~ ~))
30873101++ test-types-recursion-scc-import
3088− (weld (weld (check ~.types-recursion-scc-import src-514 `tok-514 `tre-514) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-514 `typ-514 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-514-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-514 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-514-1]]))
3102+ (weld (weld (check ~.types-recursion-scc-import src-516 `tok-516 `tre-516) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-516 `typ-516 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-516-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-516 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-516-1]]))
30893103++ test-types-recursion-scc-import-bad
3090− (weld (weld (check ~.types-recursion-scc-import-bad src-515 `tok-515 `tre-515) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-515 `typ-515 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-515-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-515 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-515-1]]))
3104+ (weld (weld (check ~.types-recursion-scc-import-bad src-517 `tok-517 `tre-517) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-517 `typ-517 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-517-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-517 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-517-1]]))
30913105++ test-types-recursion-scc-local
3092− (weld (check ~.types-recursion-scc-local src-516 `tok-516 `tre-516) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-516 `typ-516 ~ ~ ~))
3106+ (weld (check ~.types-recursion-scc-local src-518 `tok-518 `tre-518) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-518 `typ-518 ~ ~ ~))
30933107++ test-types-recursion-scc-order
3094− (weld (check ~.types-recursion-scc-order src-517 `tok-517 `tre-517) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-517 `typ-517 ~ ~ ~))
3108+ (weld (check ~.types-recursion-scc-order src-519 `tok-519 `tre-519) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-519 `typ-519 ~ ~ ~))
30953109++ test-types-recursion-scc-shadow
3096− (weld (check ~.types-recursion-scc-shadow src-518 `tok-518 `tre-518) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-518 `typ-518 ~ ~ ~))
3110+ (weld (check ~.types-recursion-scc-shadow src-520 `tok-520 `tre-520) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-520 `typ-520 ~ ~ ~))
30973111++ test-types-recursive-branch
3098− (weld (check ~.types-recursive-branch src-519 `tok-519 `tre-519) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-519 `typ-519 ~ ~ ~))
3112+ (weld (check ~.types-recursive-branch src-521 `tok-521 `tre-521) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-521 `typ-521 ~ ~ ~))
30993113++ test-types-recursive-gate
3100− (weld (check ~.types-recursive-gate src-520 `tok-520 `tre-520) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-520 `typ-520))
3114+ (weld (check ~.types-recursive-gate src-522 `tok-522 `tre-522) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-522 `typ-522))
31013115++ test-types-recursive-sample
3102− (weld (check ~.types-recursive-sample src-521 `tok-521 `tre-521) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-521 `typ-521))
3116+ (weld (check ~.types-recursive-sample src-523 `tok-523 `tre-523) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-523 `typ-523))
31033117++ test-types-scope-library-poke
3104− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-522 `tok-522 `tre-522) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-522 `typ-522 ~ ~ ~))
3118+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-524 `tok-524 `tre-524) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-524 `typ-524 ~ ~ ~))
31053119++ test-types-scope-root-api
3106− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-523 `tok-523 `tre-523) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-523 `typ-523 ~ ~ ~))
3120+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-525 `tok-525 `tre-525) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-525 `typ-525 ~ ~ ~))
31073121++ test-types-scope-store-duplicate
3108− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-524 `tok-524 `tre-524) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-524 `typ-524 ~ ~ ~))
3122+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-526 `tok-526 `tre-526) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-526 `typ-526 ~ ~ ~))
31093123++ test-types-scope-store-shadow
3110− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-525 `tok-525 `tre-525) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-525 `typ-525 ~ ~ ~))
3124+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-527 `tok-527 `tre-527) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-527 `typ-527 ~ ~ ~))
31113125++ test-types-string-interpolation
3112− (weld (check ~.types-string-interpolation src-526 `tok-526 `tre-526) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-526 `typ-526 ~ ~ ~))
3126+ (weld (check ~.types-string-interpolation src-528 `tok-528 `tre-528) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-528 `typ-528 ~ ~ ~))
31133127++ test-types-tuple-context
3114− (weld (check ~.types-tuple-context src-527 `tok-527 `tre-527) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-527 `typ-527 ~ ~ ~))
3128+ (weld (check ~.types-tuple-context src-529 `tok-529 `tre-529) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-529 `typ-529 ~ ~ ~))
31153129++ test-types-tuple-context-nested
3116− (weld (check ~.types-tuple-context-nested src-528 `tok-528 `tre-528) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-528 `typ-528 ~ ~ ~))
3130+ (weld (check ~.types-tuple-context-nested src-530 `tok-530 `tre-530) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-530 `typ-530 ~ ~ ~))
31173131++ test-types-union-alias
3118− (weld (check ~.types-union-alias src-529 `tok-529 `tre-529) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-529 `typ-529))
3132+ (weld (check ~.types-union-alias src-531 `tok-531 `tre-531) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-531 `typ-531))
31193133++ test-types-union-branch-context
3120− (weld (check ~.types-union-branch-context src-530 `tok-530 `tre-530) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-530 `typ-530))
3134+ (weld (check ~.types-union-branch-context src-532 `tok-532 `tre-532) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-532 `typ-532))
31213135++ test-types-union-branch-pending
3122− (weld (check ~.types-union-branch-pending src-531 `tok-531 `tre-531) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-531 `typ-531))
3136+ (weld (check ~.types-union-branch-pending src-533 `tok-533 `tre-533) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-533 `typ-533))
31233137++ test-types-union-constructor-shape
3124− (weld (check ~.types-union-constructor-shape src-532 `tok-532 `tre-532) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-532 `typ-532))
3138+ (weld (check ~.types-union-constructor-shape src-534 `tok-534 `tre-534) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-534 `typ-534))
31253139++ test-types-union-context-flow
3126− (weld (check ~.types-union-context-flow src-533 `tok-533 `tre-533) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-533 `typ-533))
3140+ (weld (check ~.types-union-context-flow src-535 `tok-535 `tre-535) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-535 `typ-535))
31273141++ test-types-union-finite
3128− (weld (check ~.types-union-finite src-534 `tok-534 `tre-534) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-534 `typ-534 ~ ~ ~))
3142+ (weld (check ~.types-union-finite src-536 `tok-536 `tre-536) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-536 `typ-536 ~ ~ ~))
31293143++ test-types-union-finite-context
3130− (weld (check ~.types-union-finite-context src-535 `tok-535 `tre-535) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-535 `typ-535 ~ ~ ~))
3144+ (weld (check ~.types-union-finite-context src-537 `tok-537 `tre-537) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-537 `typ-537 ~ ~ ~))
31313145++ test-types-union-finite-generic
3132− (weld (check ~.types-union-finite-generic src-536 `tok-536 `tre-536) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-536 `typ-536 ~ ~ ~))
3146+ (weld (check ~.types-union-finite-generic src-538 `tok-538 `tre-538) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-538 `typ-538 ~ ~ ~))
31333147++ test-types-union-finite-limit
3134− (weld (check ~.types-union-finite-limit src-537 `tok-537 `tre-537) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-537 `typ-537 ~ ~ ~))
3148+ (weld (check ~.types-union-finite-limit src-539 `tok-539 `tre-539) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-539 `typ-539 ~ ~ ~))
31353149++ test-types-union-import
3136− (weld (weld (check ~.types-union-import src-538 `tok-538 `tre-538) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-538 `typ-538 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-538-1]])) (check-module-trees ~.types-union-import `mtre-538 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-538-1]]))
3150+ (weld (weld (check ~.types-union-import src-540 `tok-540 `tre-540) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-540 `typ-540 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]])) (check-module-trees ~.types-union-import `mtre-540 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]]))
31373151++ test-types-union-local-pending
3138− (weld (check ~.types-union-local-pending src-539 `tok-539 `tre-539) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-539 `typ-539))
3152+ (weld (check ~.types-union-local-pending src-541 `tok-541 `tre-541) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-541 `typ-541))
31393153++ test-types-union-overlap
3140− (weld (check ~.types-union-overlap src-540 `tok-540 `tre-540) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-540 `typ-540))
3154+ (weld (check ~.types-union-overlap src-542 `tok-542 `tre-542) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-542 `typ-542))
31413155++ test-types-union-overlap-nested
3142− (weld (check ~.types-union-overlap-nested src-541 `tok-541 `tre-541) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-541 `typ-541))
3156+ (weld (check ~.types-union-overlap-nested src-543 `tok-543 `tre-543) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-543 `typ-543))
31433157++ test-types-union-pattern-result-context
3144− (weld (check ~.types-union-pattern-result-context src-542 `tok-542 `tre-542) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-542 `typ-542 ~ ~ ~))
3158+ (weld (check ~.types-union-pattern-result-context src-544 `tok-544 `tre-544) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-544 `typ-544 ~ ~ ~))
31453159++ test-types-union-pattern-result-controls
3146− (weld (check ~.types-union-pattern-result-controls src-543 `tok-543 `tre-543) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-543 `typ-543 ~ ~ ~))
3160+ (weld (check ~.types-union-pattern-result-controls src-545 `tok-545 `tre-545) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-545 `typ-545 ~ ~ ~))
31473161++ test-types-union-patterns
3148− (weld (check ~.types-union-patterns src-544 `tok-544 `tre-544) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-544 `typ-544 ~ ~ ~))
3162+ (weld (check ~.types-union-patterns src-546 `tok-546 `tre-546) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-546 `typ-546 ~ ~ ~))
31493163++ test-types-union-patterns-generic
3150− (weld (check ~.types-union-patterns-generic src-545 `tok-545 `tre-545) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-545 `typ-545 ~ ~ ~))
3164+ (weld (check ~.types-union-patterns-generic src-547 `tok-547 `tre-547) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-547 `typ-547 ~ ~ ~))
31513165++ test-types-union-patterns-import
3152− (weld (weld (check ~.types-union-patterns-import src-546 `tok-546 `tre-546) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-546 `typ-546 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-546-1]])) (check-module-trees ~.types-union-patterns-import `mtre-546 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-546-1]]))
3166+ (weld (weld (check ~.types-union-patterns-import src-548 `tok-548 `tre-548) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]])) (check-module-trees ~.types-union-patterns-import `mtre-548 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]]))
31533167++ test-types-union-phantom-generic
3154− (weld (check ~.types-union-phantom-generic src-547 `tok-547 `tre-547) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-547 `typ-547))
3168+ (weld (check ~.types-union-phantom-generic src-549 `tok-549 `tre-549) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-549 `typ-549))
31553169++ test-types-union-print-cross-namespace
3156− (weld (weld (check ~.types-union-print-cross-namespace src-548 `tok-548 `tre-548) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-548 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]]))
3170+ (weld (weld (check ~.types-union-print-cross-namespace src-550 `tok-550 `tre-550) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-550 `typ-550 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-550-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-550 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-550-1]]))
31573171++ test-types-union-print-distinct
3158− (weld (weld (check ~.types-union-print-distinct src-549 `tok-549 `tre-549) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-549 `typ-549 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-549-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-549-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-549-3]])) (check-module-trees ~.types-union-print-distinct `mtre-549 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-549-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-549-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-549-3]]))
3172+ (weld (weld (check ~.types-union-print-distinct src-551 `tok-551 `tre-551) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-551 `typ-551 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-551-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-551-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-551-3]])) (check-module-trees ~.types-union-print-distinct `mtre-551 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-551-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-551-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-551-3]]))
31593173++ test-types-union-print-escape
3160− (weld (check ~.types-union-print-escape src-550 `tok-550 `tre-550) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-550 `typ-550))
3174+ (weld (check ~.types-union-print-escape src-552 `tok-552 `tre-552) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-552 `typ-552))
31613175++ test-types-union-print-local
3162− (weld (check ~.types-union-print-local src-551 `tok-551 `tre-551) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-551 `typ-551))
3176+ (weld (check ~.types-union-print-local src-553 `tok-553 `tre-553) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-553 `typ-553))
31633177++ test-types-union-print-nested
3164− (weld (check ~.types-union-print-nested src-552 `tok-552 `tre-552) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-552 `typ-552))
3178+ (weld (check ~.types-union-print-nested src-554 `tok-554 `tre-554) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-554 `typ-554))
31653179++ test-types-union-print-same-origin
3166− (weld (weld (check ~.types-union-print-same-origin src-553 `tok-553 `tre-553) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-553 `typ-553 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-553-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-553 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-553-1]]))
3180+ (weld (weld (check ~.types-union-print-same-origin src-555 `tok-555 `tre-555) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-555 `typ-555 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-555-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-555 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-555-1]]))
31673181++ test-types-union-print-transitive
3168− (weld (weld (check ~.types-union-print-transitive src-554 `tok-554 `tre-554) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-554 `typ-554 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-554-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-554-2]])) (check-module-trees ~.types-union-print-transitive `mtre-554 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-554-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-554-2]]))
3182+ (weld (weld (check ~.types-union-print-transitive src-556 `tok-556 `tre-556) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-556 `typ-556 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-556-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-556-2]])) (check-module-trees ~.types-union-print-transitive `mtre-556 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-556-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-556-2]]))
31693183++ test-types-union-singleton
3170− (weld (check ~.types-union-singleton src-555 `tok-555 `tre-555) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-555 `typ-555))
3184+ (weld (check ~.types-union-singleton src-557 `tok-557 `tre-557) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-557 `typ-557))
31713185++ test-types-union-tag-atoms
3172− (weld (check ~.types-union-tag-atoms src-556 `tok-556 `tre-556) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-556 `typ-556))
3186+ (weld (check ~.types-union-tag-atoms src-558 `tok-558 `tre-558) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-558 `typ-558))
31733187++ test-types-union-tags
3174− (weld (check ~.types-union-tags src-557 `tok-557 `tre-557) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-557 `typ-557))
3188+ (weld (check ~.types-union-tags src-559 `tok-559 `tre-559) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-559 `typ-559))
31753189++ test-types-union-unresolved
3176− (weld (check ~.types-union-unresolved src-558 `tok-558 `tre-558) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-558 `typ-558))
3190+ (weld (check ~.types-union-unresolved src-560 `tok-560 `tre-560) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-560 `typ-560))
31773191++ test-types-union-unresolved-flow
3178− (weld (check ~.types-union-unresolved-flow src-559 `tok-559 `tre-559) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-559 `typ-559))
3192+ (weld (check ~.types-union-unresolved-flow src-561 `tok-561 `tre-561) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-561 `typ-561))
31793193++ test-types-unit-construction
3180− (weld (check ~.types-unit-construction src-560 `tok-560 `tre-560) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-560 `typ-560 ~ ~ ~))
3194+ (weld (check ~.types-unit-construction src-562 `tok-562 `tre-562) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-562 `typ-562 ~ ~ ~))
31813195++ test-types-unit-context
3182− (weld (check ~.types-unit-context src-561 `tok-561 `tre-561) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-561 `typ-561 ~ ~ ~))
3196+ (weld (check ~.types-unit-context src-563 `tok-563 `tre-563) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-563 `typ-563 ~ ~ ~))
31833197++ test-types-unit-patterns
3184− (weld (check ~.types-unit-patterns src-562 `tok-562 `tre-562) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-562 `typ-562))
3198+ (weld (check ~.types-unit-patterns src-564 `tok-564 `tre-564) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-564 `typ-564))
31853199++ test-types-value-cycle-shadow
3186− (weld (check ~.types-value-cycle-shadow src-563 `tok-563 `tre-563) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-563 `typ-563 ~ ~ ~))
3200+ (weld (check ~.types-value-cycle-shadow src-565 `tok-565 `tre-565) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-565 `typ-565 ~ ~ ~))
31873201++ test-types-value-cycle-unsupported
3188− (weld (check ~.types-value-cycle-unsupported src-564 `tok-564 `tre-564) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-564 `typ-564 ~ ~ ~))
3202+ (weld (check ~.types-value-cycle-unsupported src-566 `tok-566 `tre-566) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-566 `typ-566 ~ ~ ~))
31893203++ test-types-value-cycles
3190− (weld (check ~.types-value-cycles src-565 `tok-565 `tre-565) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-565 `typ-565 ~ ~ ~))
3204+ (weld (check ~.types-value-cycles src-567 `tok-567 `tre-567) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-567 `typ-567 ~ ~ ~))
31913205::
31923206:: +check: run golden:jibb on a case and compare both outputs
31933207::
tools/importer-test+1−1
@@ -34,4 +34,4 @@ if result.stdout != expected:
3434 result.stdout.decode().splitlines(keepends=True),
3535 fromfile='expected tree.txt', tofile='actual types'))
3636 sys.exit(1)
37−print('importer golden: 182 projections passed')
37+print('importer golden: 194 projections passed')