on master help sign in
214 files changed+12707−1362
since splitsnapshots
unifiedsplit
README.md+1−1 docs/compiler.md+29−5 docs/development.md+31 docs/open-questions.md+2 docs/prelude-inventory.md+4−4 docs/prompts/milestone-2.md+3−3 docs/spec/decisions.md+1−1 docs/spec/grammar.md+1−1 docs/status.md+50−10 jibb-dev/lib/jibb-import.hoon+181−6 jibb-dev/lib/jibb.hoon+1409−75 jibb-dev/lib/jibb/prelude.jibb+31 tests/golden/types-constructor-context/about.txt+1 tests/golden/types-constructor-context/source.jibb+37 tests/golden/types-constructor-context/tokens.txt+289 tests/golden/types-constructor-context/tree.txt+130 tests/golden/types-constructor-context/types.txt+54 tests/golden/types-equal-head-disjoint/about.txt+2 tests/golden/types-equal-head-disjoint/source.jibb+25 tests/golden/types-equal-head-disjoint/tokens.txt+179 tests/golden/types-equal-head-disjoint/tree.txt+75 tests/golden/types-equal-head-disjoint/types.txt+34 tests/golden/types-generic-result-context/about.txt+1 tests/golden/types-generic-result-context/source.jibb+24 tests/golden/types-generic-result-context/tokens.txt+233 tests/golden/types-generic-result-context/tree.txt+86 tests/golden/types-generic-result-context/types.txt+22 tests/golden/types-literal-constructor-nouns/about.txt+2 tests/golden/types-literal-constructor-nouns/source.jibb+25 tests/golden/types-literal-constructor-nouns/tokens.txt+177 tests/golden/types-literal-constructor-nouns/tree.txt+78 tests/golden/types-literal-constructor-nouns/types.txt+45 tests/golden/types-loobean-singleton-source/about.txt+2 tests/golden/types-loobean-singleton-source/source.jibb+22 tests/golden/types-loobean-singleton-source/tokens.txt+143 tests/golden/types-loobean-singleton-source/tree.txt+52 tests/golden/types-loobean-singleton-source/types.txt+65 tests/golden/types-loobean-union-context/about.txt+2 tests/golden/types-loobean-union-context/source.jibb+28 tests/golden/types-loobean-union-context/tokens.txt+136 tests/golden/types-loobean-union-context/tree.txt+55 tests/golden/types-loobean-union-context/types.txt+35 tests/golden/types-nested-noun-context/about.txt+4 tests/golden/types-nested-noun-context/source.jibb+35 tests/golden/types-nested-noun-context/tokens.txt+363 tests/golden/types-nested-noun-context/tree.txt+162 tests/golden/types-nested-noun-context/types.txt+34 tests/golden/types-nested-shallow-preserve/about.txt+4 tests/golden/types-nested-shallow-preserve/modules.txt+1 tests/golden/types-nested-shallow-preserve/source.jibb+30 tests/golden/types-nested-shallow-preserve/tokens.txt+271 tests/golden/types-nested-shallow-preserve/tree.txt+136 tests/golden/types-nested-shallow-preserve/types.txt+33 tests/golden/types-nested-union-context/about.txt+4 tests/golden/types-nested-union-context/source.jibb+59 tests/golden/types-nested-union-context/tokens.txt+660 tests/golden/types-nested-union-context/tree.txt+302 tests/golden/types-nested-union-context/types.txt+49 tests/golden/types-null-context/about.txt+1−1 tests/golden/types-null-context/source.jibb+1−1 tests/golden/types-null-context/tokens.txt+8−8 tests/golden/types-null-context/tree.txt+4−4 tests/golden/types-null-context/types.txt+1−7 tests/golden/types-partial-union-nested-nouns/about.txt+4 tests/golden/types-partial-union-nested-nouns/source.jibb+18 tests/golden/types-partial-union-nested-nouns/tokens.txt+108 tests/golden/types-partial-union-nested-nouns/tree.txt+47 tests/golden/types-partial-union-nested-nouns/types.txt+25 tests/golden/types-prelude-arithmetic/about.txt+1−1 tests/golden/types-prelude-arithmetic/source.jibb+1−1 tests/golden/types-prelude-arithmetic/tokens.txt+7−7 tests/golden/types-prelude-arithmetic/tree.txt+5−5 tests/golden/types-prelude-arithmetic/types.txt+1−1 tests/golden/types-prelude-cmd/about.txt+1−1 tests/golden/types-prelude-cmd/types.txt+7−1 tests/golden/types-prelude-comparison/about.txt+4 tests/golden/types-prelude-comparison/modules.txt+1 tests/golden/types-prelude-comparison/source.jibb+18 tests/golden/types-prelude-comparison/tokens.txt+175 tests/golden/types-prelude-comparison/tree.txt+71 tests/golden/types-prelude-comparison/types.txt+31 tests/golden/types-prelude-lent/about.txt+4 tests/golden/types-prelude-lent/modules.txt+1 tests/golden/types-prelude-lent/source.jibb+8 tests/golden/types-prelude-lent/tokens.txt+76 tests/golden/types-prelude-lent/tree.txt+38 tests/golden/types-prelude-lent/types.txt+15 tests/golden/types-prelude-sub-nested/about.txt+4 tests/golden/types-prelude-sub-nested/modules.txt+1 tests/golden/types-prelude-sub-nested/source.jibb+20 tests/golden/types-prelude-sub-nested/tokens.txt+211 tests/golden/types-prelude-sub-nested/tree.txt+100 tests/golden/types-prelude-sub-nested/types.txt+27 tests/golden/types-prelude-sub/about.txt+4 tests/golden/types-prelude-sub/modules.txt+1 tests/golden/types-prelude-sub/source.jibb+37 tests/golden/types-prelude-sub/tokens.txt+380 tests/golden/types-prelude-sub/tree.txt+164 tests/golden/types-prelude-sub/types.txt+32 tests/golden/types-prelude-zing/about.txt+4 tests/golden/types-prelude-zing/modules.txt+1 tests/golden/types-prelude-zing/source.jibb+6 tests/golden/types-prelude-zing/tokens.txt+92 tests/golden/types-prelude-zing/tree.txt+43 tests/golden/types-prelude-zing/types.txt+13 tests/golden/types-request-normal/about.txt+4 tests/golden/types-request-normal/mar/full.txt+5 tests/golden/types-request-normal/marks.txt+1 tests/golden/types-request-normal/module-trees.txt+5 tests/golden/types-request-normal/modules.txt+1 tests/golden/types-request-normal/modules/ui/api/demo.jibb+2 tests/golden/types-request-normal/source.jibb+9 tests/golden/types-request-normal/tokens.txt+95 tests/golden/types-request-normal/tree.txt+50 tests/golden/types-request-normal/types.txt+26 tests/importer/about.txt+3−1 tests/importer/tree.txt+3−3 tests/lib/jibb-bridge.hoon+5−2 tests/lib/jibb-closed-gate-guards.hoon+60 tests/lib/jibb-constructor-fit-guards.hoon+128 tests/lib/jibb-direct-gate-guards.hoon+172 tests/lib/jibb-direct-gate-source.hoon+46 tests/lib/jibb-gate-free-guards.hoon+79 tests/lib/jibb-gate-free-source.hoon+95 tests/lib/jibb-generic-construction.hoon+141 tests/lib/jibb-generic-pattern.hoon+132 tests/lib/jibb-generic-recursion.hoon+170 tests/lib/jibb-import-overlap.hoon+80 tests/lib/jibb-import-structural.hoon+82 tests/lib/jibb-nested-union-guards.hoon+67 tests/lib/jibb-request-guards.hoon+149 tests/lib/jibb-sub-guards.hoon+37 tests/lib/jibb-todo-api.hoon+85 tests/lib/jibb-todo-partial.hoon+58 tests/lib/jibb.hoon+1307−1208 tests/type-direct-gate/about.txt+4 tests/type-direct-gate/expected.txt+86 tests/type-direct-gate/source.txt+96 tests/type-gate-free/about.txt+1 tests/type-gate-free/expected.txt+9 tests/type-gate-free/todo-gate.txt+40 tests/type-gate-free/todo-noun.txt+40 tests/type-gate-free/todo.txt+40 tests/type-generic-construction/about.txt+9 tests/type-generic-construction/alias-client.txt+12 tests/type-generic-construction/alias.txt+3 tests/type-generic-construction/client.txt+24 tests/type-generic-construction/expected.txt+65 tests/type-generic-construction/no-event-client.txt+8 tests/type-generic-construction/owner-negative.txt+10 tests/type-generic-construction/owner-positive.txt+9 tests/type-generic-construction/sibling-values.txt+4 tests/type-generic-construction/tree-no-event.txt+4 tests/type-generic-construction/tree.txt+6 tests/type-generic-pattern/about.txt+8 tests/type-generic-pattern/client.txt+114 tests/type-generic-pattern/expected.txt+55 tests/type-generic-pattern/no-event.txt+17 tests/type-generic-pattern/owner-bad.txt+22 tests/type-generic-pattern/owner.txt+18 tests/type-generic-pattern/poly-values.txt+2 tests/type-generic-pattern/values.txt+10 tests/type-generic-recursion/about.txt+14 tests/type-generic-recursion/alias.txt+3 tests/type-generic-recursion/bad-constructor.txt+8 tests/type-generic-recursion/bad-match.txt+10 tests/type-generic-recursion/bad-mold.txt+8 tests/type-generic-recursion/bad-parameter.txt+6 tests/type-generic-recursion/chain.txt+3 tests/type-generic-recursion/client.txt+11 tests/type-generic-recursion/expected.txt+35 tests/type-generic-recursion/list-shadow.txt+4 tests/type-generic-recursion/local-distinct.txt+11 tests/type-generic-recursion/local-only.txt+11 tests/type-generic-recursion/local-shadow.txt+11 tests/type-generic-recursion/tree-changed.txt+6 tests/type-generic-recursion/tree.txt+6 tests/type-import-overlap/about.txt+24 tests/type-import-overlap/expected.txt+26 tests/type-import-overlap/source.txt+4 tests/type-import-overlap/sur.txt+17 tests/type-import-structural/about.txt+14 tests/type-import-structural/expected.txt+41 tests/type-import-structural/source.txt+5 tests/type-import-structural/sur.txt+12 tests/type-import/about.txt+10−2 tests/type-import/expected.txt+10−1 tests/type-import/source.txt+5 tests/type-import/sur.txt+3 tests/type-todo-api/about.txt+1 tests/type-todo-api/expected.txt+17 tests/type-todo-api/negative-expected.txt+26 tests/type-todo-api/negative.txt+12 tests/type-todo-api/source.txt+21 tests/type-todo-api/unsupported.txt+13 tests/type-todo-partial/about.txt+4 tests/type-todo-partial/expected.txt+17 tools/testdata/ship-selftest+37−1 tools/testdata/zing-hoon-reference.hoon+17 tools/type-closed-gate-guards-test+29 tools/type-constructor-fit-guards-test+29 tools/type-direct-gate-test+64 tools/type-gate-free-guards-test+29 tools/type-gate-free-source-test+50 tools/type-generic-construction-test+49 tools/type-generic-pattern-test+52 tools/type-generic-recursion-test+61 tools/type-import-overlap-test+33 tools/type-import-structural-test+36 tools/type-nested-union-guards-test+29 tools/type-request-guards-test+31 tools/type-sub-guards-test+31 tools/type-todo-api-test+62 tools/type-todo-partial-test+55
README.md+1−1
@@ -42,7 +42,7 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
4242tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
4343```
4444
45−`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-tlon-test`, `tools/type-mark-test`, `tools/type-poke-test` and `tools/type-api-paths-test` check importer/checker, prelude and partial API path analysis boundaries under eval; the ship suite runs the same fixtures.
45+`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-import-overlap-test`, `tools/type-import-structural-test`, `tools/type-generic-recursion-test`, `tools/type-generic-construction-test`, `tools/type-generic-pattern-test`, `tools/type-tlon-test`, `tools/type-mark-test`, `tools/type-poke-test` and `tools/type-api-paths-test` check importer/checker, prelude and partial API path analysis boundaries under eval; the ship suite runs the same fixtures.
4646
4747### The doc's examples
4848
docs/compiler.md+29−5
@@ -56,13 +56,21 @@ The core is split into chapters, `+| %name`, in this order:
5656| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
5757| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
5858
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a cell pattern of two or more binders, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. 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. Some proven non-gate value cycles are diagnosed; other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. A null-headed cell can match a union case but does not supply a `|=%$` constructor; unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body and recursive molds remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample while retaining its origin, generic arguments and faces. Unnamed, pending-tag, recursive, unknown-atom and variable-bound union origins 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. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. For a single recursive gate outside a group, the reporting path repeats inference rather than instantiating its generalized interface inside its own body; a group report uses its stored schemes. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
59+The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a cell pattern of two or more binders, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. 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. Some proven non-gate value cycles are diagnosed; other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. Literal heads compare by their runtime noun, so `|=%$` can construct an explicit null-, loobean-zero- or term-zero-headed case. Equal heads with distinct payloads can be selected when exactly one payload fit is proven; unknown or ambiguous alternatives remain unsupported. Unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. Generic unions declared directly inside a body and recursive molds outside the source-proven slices described below remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample while retaining its origin, generic arguments and faces. Unnamed, pending-tag, recursive, unknown-atom and variable-bound union origins 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. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types and the source-bound gate-sample proof below. For a single recursive gate outside a group, the reporting path repeats inference rather than instantiating its generalized interface inside its own body; a group report uses its stored schemes. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
60+
61+A direct unshadowed prelude call can use checked source layouts when a positional argument is a directly named, already inferred root gate. For two-slot function samples, the checker can match a named update against an unnamed generic gate sample without confusing a binder face with a nested record face. Both explicitly named slots must agree; source boundaries are evidence for this fit, not a call-arity rule. The source gate and prelude annotation must be available from their checked bindings. Local or dynamic gates, aliases without direct evidence, recursive or SCC placeholder bodies, other sample shapes and unresolved call-sample variables remain unsupported by this proof. Ordinary inference remains the fallback.
62+
63+The checker retains a per-analysis index of finalized root gates and a prelude source table bound to the entire trusted prepared interface. A dependency screen avoids building the table when the root cannot use it; changing the interface invalidates it. The host remains responsible for supplying a prepared interface paired with its source. The matcher checks each slot and product in both directions with a shared substitution. Before returning its tentative proof it requires both complete call samples to normalize to closed, tag-free types, then repeats every slot check and requires the substitution and fresh-ID counter to remain unchanged. This keeps later argument or enclosing constraints from invalidating an earlier face check, and preserves pending constraints, capital checks and projection evidence. These scans and the bounded second proof add work; they do not establish a global linear-time bound.
64+
65+Before the empty-capital optimization below, single sequential eval runs including startup showed that 2,000 ordinary gates used 70.20 seconds of user CPU at baseline and 70.64 seconds with the cached source table. Fifty unsupported eligible scalar-slot calls used 24.75 and 25.71 seconds, while fifty function-slot failures used 24.15 and 25.36 seconds. Fifty successful calls took 26.56 seconds before the final stability replay and 26.99 seconds with it. These are synthetic measurements, not production performance limits.
66+
67+Restricted-number promotion only applies to written capital variables. If none are present, it returns immediately instead of traversing the environment. In one startup-inclusive pair of runs on 2,000 independent gates, output was byte-identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds while other checks were running. This does not establish a bound for dependent modules or a complete-checker benchmark.
6068
6169A single-arm cell pattern can bind two or more positions, with its last binder capturing the remaining tail. Duplicate and shadowed names are rejected. A definite non-cell spine fails; an intermediate union or collection that might contain a cell remains unsupported. For a known non-union cell, a separate one-arm rule also accepts structured patterns, including nested literal and wildcard positions, when the existing coverage proof establishes the whole pattern. It binds payloads with their original types and checks result context; unknown, partially covered, union or recursive spines stay unsupported.
6270
6371String interpolation infers its pieces in order and preserves substitutions and pending constraints. A piece with a known atom aura, unrestricted `@`, or a tape `(list @tD)` is accepted; an isolated decimal literal takes its normal `@ud` default. A known cell reports that it needs a printer, and an explicitly generic atom asks for an aura at its use site. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported in this fragment.
6472
65−The Hoon bridge translates imported `*` as the any-noun type, directly or within supported nonrecursive cells. The reader may still decline a disjoint tagged union with a noun payload, and recursive imports containing `*` remain unsupported. It accepts an exact fork of the two loobean singletons as `?`, and each singleton separately as `%.y` or `%.n`, including inside supported faced cells. Contextual literals specialize against a loobean singleton. Open `%f`, other values, and other forks containing loobean singletons remain unsupported; recursive Hoon molds containing flags can also fail closed.
73+The Hoon bridge translates imported `*` as the any-noun type, directly or within supported nonrecursive cells. The reader may still decline a disjoint tagged union with a noun payload, and recursive imports containing `*` remain unsupported. It accepts an exact fork of the two loobean singletons as `?`, and each singleton separately as `%.y` or `%.n`, including inside supported faced cells. Contextual loobean literals specialize against a matching singleton by noun, including a proven singleton in a direct union; named loobean singletons do not silently widen to a distinct aura. Open `%f`, other values, and other forks containing loobean singletons remain unsupported; recursive Hoon molds containing flags can also fail closed.
6674
6775A bare tag that provably matches no case of a known union reports the union and tag sites. This covers casts, single-argument calls, contextual unit payloads, list items and supported branch arms, including unnamed imported unions. For syntactic tuples, ordered fit replay can identify a missing tag in a nested position; an earlier mismatch or uncertainty stops the replay instead of guessing. Existing tags whose shape or payload does not fit retain the ordinary mismatch; unresolved tags stay pending.
6876
@@ -86,11 +94,17 @@ A known closed union can also provide context to each arm of a complete loobean
8694
8795The 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 recognizes a direct ordered-map call with two simple named mold operands, as in Tlon `notes.log`, after validating provenance and operand source; revisiting the same map hold fails closed. 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`. Source-proved tagged unions can also be wrapped in Hoon `$~` defaults, including a downstream union using Tlon `epic.saga`; the selected source and projected branches still undergo the same provenance and disjointness checks. The tagged-source helper peels up to four consecutive default wrappers, while default wrappers encountered inside dependency proofs consume the existing semantic-node budget. A source-proved nested self-recursive union retains its named owner, including Tlon `notes.import-node`; deeper, mutually recursive or unproven cases stay unsupported. The nested source proof has a 256-visit semantic-node budget, and source-location wrapper peeling is limited to four per node; 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.
8896
97+An import-free Jibb library can export an opaque single-parameter recursive identity when its source has exactly two distinct term-tagged cases: a text leaf and a node containing `(list (name M))`, optionally with one `$-(@t M)` event field. A module-local index records the exact parsed source, defining path and prepared prelude interface; it is shared across that module's inference passes, and its canonical `list` must be source-backed. The normal resolver publishes an interface only after all ordinary mold and value checks succeed. Same-origin aliases retain the defining identity and independently instantiate type arguments; distinct origins remain unsupported. The opaque identity is conservatively treated as gate-bearing for numeric defaulting, and gate-freedom remains unknown. Explicit literal-headed construction uses a source-proven one-layer view: the event result receives the existing type argument and recursive children keep the defining identity. It consumes the existing shared 256-step recursive inference budget, and a per-view 4,096-visit guard bounds the new face and substitution scan; longer scans decline. These bounds do not cover parsing, existing inference, atom sizes or repeated attempts. One startup-inclusive, shared-load comparison of 100 valid and 100 invalid source definitions took 29.67 s wall / 25.14 s user CPU before this slice and 33.47 s / 26.99 s with it; the former declined all 200 while the latter inferred the valid definitions. These single runs are not a production benchmark. Two-arm matches over explicit source tags and flat binder or wildcard fields use that same one-layer view and existing binder, coverage and branch checks; a single-arm match on a direct in-scope wing can report its missing case. Recursive children retain their nominal type and arguments. Subject recognition and view validation can each scan substitutions, and the scan cap applies separately to each attempt. In one separate startup-inclusive comparison of 100 valid and 100 invalid source matches, the construction-only checker took 30.18 s wall / 29.31 s user CPU and declined all 200, while the pattern slice took 28.28 s / 27.69 s and inferred or diagnosed them. These single shared-load figures are not production benchmarks. General structural fits, catch-all and nested patterns, recursive source with imports and local recursive molds remain unsupported; the test tree does not prescribe the eventual `element` representation. Caller-supplied detached interfaces and caches retain the existing trusted-input contract.
98+
8999Self-recursive `/sur` molds can cross the bridge as opaque module-and-name identities when their supported source-aware graph passes validation, including one-argument lists containing same-origin recursive references. The real Tlon `notes.import-node` reaches this bridge; it does not unfold or construct the recursive type. Aliases, foreign references, recursive marks, unfolding, construction and field access remain unsupported; the partial printer declines recursive names that are not in scope.
90100
91101The partial checker also recognizes a source-proven Jibb recursive mold consisting of `~` and one faced cell with a fixed-aura head and direct self tail. Its identity includes the defining path and name. It unfolds this shape for supported null and cell construction and for a two-arm null/cell match; static application-path literals use the verified public `qath` alias. The internal prelude defines `qath` as a transparent knot sequence and the public prelude re-exports it. Each inference attempt has 256 unfolding and static-segment steps; parsing and separate retries are not bounded by that limit. Dynamic application-path segments, broader patterns and other recursive shapes remain unsupported. Route and static-file existence checks remain milestone 4.
92102
93−Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` aura and core evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the opt-in `+golden-types-with-reader-diagnostics` accepts unchanged structured reader results and reports definite aura or core errors at their imported mold use sites, when the import and supplied input are unique. Ordered replay covers direct and nested cell samples, record and function casts, and non-generic same-module aliases; it stops at an unsupported prefix, cycle or shadowing failure. Union molds, generic applications, transitive modules and unsupported reader outcomes still report generic limitations. Replay repeats inference and may add work; this entry point remains partial. Existing checker entry points continue treating failed imports as unsupported. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
103+Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the opt-in `+golden-types-with-reader-diagnostics` accepts unchanged structured reader results and reports definite aura, core or proven union-overlap errors at their imported mold use sites, when the import and supplied input are unique. Ordered replay covers direct and nested cell samples, record and function casts, and non-generic same-module aliases; it stops at an unsupported prefix, cycle or shadowing failure. Union molds, generic applications, transitive modules and unsupported reader outcomes still report generic limitations. Replay repeats inference and may add work; this entry point remains partial. Existing checker entry points continue treating failed imports as unsupported. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
104+
105+For supported source-aware Hoon `$?` unions, the reader can prove a definite overlap by independently evaluating and projecting the original cases, verifying each projected head against its source tag, and finding a shared runtime noun in a pair. Its positive witness traverses faces, named nodes, forks, cells, supported atom forms and `*`; `!!`, opaque references, applications and unproved aura intersections cannot themselves establish a witness. It compares singleton noun values independently of aura, and requires inhabited positions throughout a cell. Unknown or exhausted proof remains unsupported, while existing disjoint-source recovery still handles proven distinct cases. The source screen admits at most 128 cases and 4,096 raw noun nodes; dependency checking and the pair/type witness each have their own 4,096-node budget. Hoon evaluation, projected-graph validation, chapter lookup, atom byte sizes and other type-graph walks remain outside those budgets. The error points at the Jibb use; source case locations are unavailable. This is a partial named-reader analysis, not general imported-union checking or a mark-reader overlap diagnostic.
106+
107+In single startup-inclusive runs of eight Hoon reads, a benign three-case union used 37.78 seconds of user CPU with the earlier narrow witness and 39.99 seconds with the structural witness; a repeated-head union used 39.84 and 40.97 seconds. Other checks ran concurrently, so these measurements do not establish a production bound.
94108
95109The partial report can diagnose certain non-gate value dependency cycles, including cycles through gates. It requires an explicit atom or loobean result cast and a syntactically proven dependency group with unshadowed simple samples; it identifies the value and a dependency site. Untyped results, branches, nested definitions, qualified wings and complex samples remain unsupported. The proof constructs an additional dependency graph. One 24-case recursive/generic eval run took 19.7 s with it and 18.6 s before it, including startup; these single runs do not isolate the graph cost.
96110
@@ -102,9 +116,19 @@ For a unique supported declaration, `+api-request-parts` retains that evidence w
102116
103117`+api-support-analysis-source` additionally infers supported ordinary API molds and values, resolves every declared mark, and retains their source, dependency and path evidence. Unsupported helpers or marks fail closed. An unused `/-` core is not independently validated, ordinary definitions that need derived gates remain unsupported, and this result is not a checked API interface or an exported request.
104118
119+The ordinary import resolver can infer derived request-gate types for multiple supported API paths. A case may take one typed path parameter before its reply gate, or one diff fold after the reply; a case with both, multiple parameters or diffs, or a separate scry path remains unsupported. Each reply maps the full mark type to a fresh `M` and the request result is `(ask M)`. Checked ordinary API values and molds, declared mark molds and a supported poke constructor are exported too. Every selected `/sur` core must have a directly used, successfully read mold; unselected core bindings are not independently validated, and Jibb module imports remain unsupported in this API fragment. The unchanged todo API fits this fragment.
120+
121+A call whose direct result is a known named generic union can receive a matching same-origin, same-arity result context before its arguments are inferred. This retains the ordered generic arguments and existing capital checks; pending tags, recursive or variable-bound origins and unrestricted atom cases remain conservative. Constructor fitting reports unsupported when an unresolved or opaque case could contain the requested tagged head. It keeps definite missing-case errors for proven nonmatching cases, including an explicitly atom-only faced head. The real todo callback `|=%got` can infer when an `(ask msg)` result context fixes its message union; the uncontextualized call remains unsupported.
122+
123+A two-item tuple with an explicit term, null or loobean head can receive payload context from a known union when every alternative is a literal-headed cell and its head noun is unique. The payload must be a direct wing-headed call, optionally grouped, with literal, wing or constructor arguments. The checker first retains the original inference if it already fits; otherwise it tries the contextual path once and fits the selected case and enclosing union. It declines this path if any substitution has a structural root, because a caller may have walked away variable provenance. Duplicate heads, opaque competitors and other shapes also stay conservative. The guard scans the substitution for each eligible tuple and may perform one extra shallow inference; it does not guarantee globally linear work. This lets an explicitly typed todo subscription body infer; it does not check an island or prove request watchability.
124+
125+`+gate-free-type` is a separate three-way proof over normalized checker types: it reports a gate-free result, a gate-bearing witness with its field path, or unknown. It tracks conservative inhabitance before reporting a gate in a cell, spends one shared node budget, and treats opaque recursion, open variables, unknown collection forms and `*` conservatively. Source-proven `qath` and the recognized list/unit representations have dedicated proofs. `+gate-free-mold-source` parses and resolves one named mold with a fresh active-root graph, retaining the complete prepared prelude, source bundle, trusted reader inputs, dependency cache and inferred mold. It caps classification at 256 nodes; parsing, import resolution and type inference are not covered by that cap. The host must canonicalize paths and bind trusted sources and reader results to their versions. API, store and private roots decline; other definitions and unused imported Hoon bindings are not fully checked. This is mold analysis, not a module, kind, island, watchability or runtime check, and it does not infer general gate-free constraints.
126+
127+Each case's canonical API identity and source-derived schema travel across imports in a nonrecursive graph certificate containing the exact source bundle, prelude, reserved scope and trusted reader results. Cached interfaces must match those inputs and cannot hide an active ancestor; unknown legacy entries are rebuilt from their unique supplied source. Request-bearing closures are limited to 256 paths and requests. Closed gate samples can also fit when an unnamed input slot corresponds to a named one, provided products are identical and nested value faces and ambiguous cell tails remain intact. This is type inference only: request lowering, runtime schema validation and value watchability proofs are not implemented.
128+
105129`+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.
106130
107−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`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `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. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. 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. A dedicated trusted internal-prelude preparation path also supplies private comparison and arithmetic schemes for the Jibb-written `gth`, `add` and `dec` wrappers. Ordinary module resolution rejects that primitive path even if a caller supplies a spoofed root or bundle. The low-level prepared interface is still trusted host input; the host must select the vendored sources and canonicalize paths. Primitive execution and shape-based jet recognition are not implemented. The source-backed `add` and `dec` wrappers use private arithmetic interfaces whose shared atom variable excludes loobeans; the partial checker preserves that constraint through supported inference and prints `where A is an atom other than ?`. Length and primitive execution remain unavailable. 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, complete `ask` and `pure` checking, 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.
131+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`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn`, `lent`, `zing`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `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. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. 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. A dedicated trusted internal-prelude preparation path also supplies private comparison and arithmetic schemes for the Jibb-written `gth`, `add` and `dec` wrappers. Ordinary module resolution rejects that primitive path even if a caller supplies a spoofed root or bundle. The low-level prepared interface is still trusted host input; the host must select the vendored sources and canonicalize paths. Primitive execution and shape-based jet recognition are not implemented. The Jibb-written `lth`, `gte` and `lte` gates compose the source-backed `gth` and `not` gates; supported calls infer a shared atom constraint and return `?`. Their execution and jet recognition await the backend. The source-backed `add` and `dec` wrappers use private arithmetic interfaces whose shared atom variable excludes loobeans; the partial checker preserves that constraint through supported inference and prints `where A is an atom other than ?`. The partial checker resolves the supported `poke` source shape, preserves its public name, and rejects ordinary imports of the private internal path. The Jibb-written `lent` recursively counts a list using `add`; the partial checker infers its generic list argument and `@ud` result. Its execution and jet recognition remain unverified until the backend exists. The Jibb-written `zing` concatenates homogeneous lists in order using `weld`; the checker infers `(list (list A))` to `(list A)`, including for gate elements. Hoon `zing` also accepts heterogeneous noun lists, which this type does not express. `tools/hoon --raw -f tools/testdata/zing-hoon-reference.hoon` compares an equivalent Hoon recursion with Hoon `zing` on selected finite inputs; it does not execute Jibb or verify lowering or jet recognition. 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, complete `ask` and `pure` checking, 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.
108132
109133`+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.
110134
@@ -119,7 +143,7 @@ And the design notes:
119143
120144Source-backed `like` maps the product of an existing `(like A)` result while retaining its position and remaining input. The partial checker infers supported positional calls by peeling only known sample-slot faces, retaining faces belonging to values; ambiguous variable-bound spines and nested face loss remain unsupported. Backend execution remains outstanding.
121145
122−The internal prelude defines transparent `(ask M)` cases for pure, agent and store requests; the public prelude re-exports it and defines `pure` in Jibb. Preparation supplies the private module with `list.core` and `unit.core` only from validated canonical public templates. If a template is unavailable, an isolated check validates the private molds, but only molds independently inferred against the actual available templates enter the interface. The partial checker infers supported constructors and exhaustive matches; absent versus present-zero state remains distinguishable. Agent and store receiver fields carry raw nouns and cannot prove schema validity or watchability. Generated decoders, source-bound runtime validation, derived request gates, `sub` and island watch checks remain unfinished. Public prelude preparation is partial: consumers must verify that `ask` was actually exported with its source origin.
146+The internal prelude defines transparent `(ask M)` cases for pure, agent and store requests; the public prelude re-exports it and defines `pure` in Jibb. Preparation supplies the private module with `list.core` and `unit.core` only from validated canonical public templates. If a template is unavailable, an isolated check validates the private molds, but only molds independently inferred against the actual available templates enter the interface. The partial checker infers supported constructors and exhaustive matches; absent versus present-zero state remains distinguishable. Agent and store receiver fields carry raw nouns and cannot prove schema validity or watchability. The public prelude also defines the documented `sub` union in Jibb; supported watch payloads retain the public `(ask M)` type. A `sub` value is not itself proof that its request is watchable. Generated decoders, source-bound runtime validation, request lowering, other derived request shapes and island watch checks remain unfinished. Public prelude preparation is partial: consumers must verify that `ask` was actually exported with its source origin.
123147
124148Public identity aliases of private generic unions retain their public name when the origin, arity and argument order match exactly, including through imported values. Fixed, reordered, repeated and phantom generic aliases remain unsupported where a safe public name cannot be recovered; a fixed nongeneric alias is not printed as though it accepted type arguments.
125149
docs/development.md+31
@@ -62,6 +62,8 @@ git clone https://github.com/urbit/tools /root/src/tools
6262| `tools/importer-test` | Compares the partial Hoon importer's diagnostic trees and errors with `tests/importer/tree.txt` under `urbit eval` |
6363| `tools/type-import-default-test` | Compares default-wrapped union source proofs and adversarial cases under eval; the same golden runs on the ship |
6464| `tools/type-import-test` | Composes the Hoon importer with the partial checker and compares `tests/type-import/expected.txt` under eval |
65+| `tools/type-import-overlap-test` | Checks source-aware Hoon union overlap, provenance and proof-budget controls under eval; the same fixture runs on the ship |
66+| `tools/type-import-structural-test` | Checks multi-case and nested Hoon union overlap witnesses under eval and on the ship |
6567| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
6668| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
6769| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
@@ -70,10 +72,23 @@ git clone https://github.com/urbit/tools /root/src/tools
7072| `tools/type-api-evidence-test` | Runs source, scope, reader-result and declaration-watchability evidence guards under eval and on the ship |
7173| `tools/type-hole-guards-test` | Runs the shared hole-defaulting and API interface guards under eval; the same checks run on the ship |
7274| `tools/type-list-alias-test` | Runs the shared prelude list-alias and provenance guards under eval and on the ship |
75+| `tools/type-generic-recursion-test` | Checks source-backed generic recursive identity and provenance under eval and on the ship |
76+| `tools/type-generic-construction-test` | Checks source-backed one-layer recursive construction, provenance and fuel under eval and on the ship |
77+| `tools/type-generic-pattern-test` | Checks source-backed recursive patterns, coverage and fuel under eval and on the ship |
7378| `tools/type-generic-alias-test` | Runs public/private generic union alias and provenance guards under eval and on the ship |
7479| `tools/type-positional-face-guards-test` | Runs positional-call and nested-face guards under eval and on the ship |
7580| `tools/type-qath-guards-test` | Runs source-provenance, recursive unfolding and face guards under eval and on the ship |
81+| `tools/type-todo-partial-test` | Reports partial inference of the unchanged todo island through the real API and readers under eval and on the ship |
82+| `tools/type-todo-api-test` | Exercises the actual todo API through the real Hoon readers and partial checker |
83+| `tools/type-direct-gate-test` | Checks a synthetic source-backed program report and direct gate provenance under eval and on the ship |
84+| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
85+| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
86+| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
87+| `tools/type-gate-free-guards-test` | Checks bounded gate-free verdicts, inhabitation and witness paths under eval and on the ship |
88+| `tools/type-gate-free-source-test` | Checks source-backed todo mold analysis through the real readers under eval and on the ship |
89+| `tools/type-sub-guards-test` | Checks source-backed subscription mold dependencies under eval and on the ship |
7690| `tools/type-ask-guards-test` | Runs ask origin and canonical list/unit bootstrap guards under eval and on the ship |
91+| `tools/type-request-guards-test` | Runs request evidence, source consistency and cache provenance guards under eval and on the ship |
7792| `tools/type-proj-guards-test` | Runs projection evidence, name-scope and dependency guards under eval and on the ship |
7893| `tools/type-arithmetic-guards-test` | Runs restricted atom-variable, unification and projection guards under eval and on the ship |
7994| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary and duplicate-source rejection against `tests/type-module-scope/expected.txt` under eval |
@@ -94,6 +109,8 @@ tools/golden # all cases pass
94109tools/importer-test # Hoon importer fixture projections match
95110tools/type-import-default-test # default-wrapped source proofs match
96111tools/type-import-test # importer/checker bridge golden report matches
112+tools/type-import-overlap-test # source-aware Hoon overlap and provenance controls
113+tools/type-import-structural-test # nested and multi-case Hoon overlap controls
97114tools/type-tlon-test # real Tlon importer/checker report matches
98115tools/type-import-diagnostic-test # direct structured reader diagnostics match
99116tools/type-mark-test # mark/checker bridge golden report matches
@@ -105,12 +122,26 @@ tools/type-list-alias-test # prelude list-alias guards pass
105122tools/type-generic-alias-test # generic union alias guards pass
106123tools/type-positional-face-guards-test # positional sample face guards pass
107124tools/type-qath-guards-test # qath source and unfolding guards pass
125+tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
126+tools/type-todo-api-test # real todo API partial inference and reader guards pass
127+tools/type-direct-gate-test # direct gate source and provenance guards pass
128+tools/type-generic-recursion-test # source-backed recursive identities and provenance
129+tools/type-generic-construction-test # source-backed recursive construction and bounds
130+tools/type-generic-pattern-test # source-backed recursive patterns and bounds
131+tools/type-closed-gate-guards-test # closed gate fit guards pass
132+tools/type-constructor-fit-guards-test # constructor fit guards pass
133+tools/type-nested-union-guards-test # nested union selector guards pass
134+tools/type-gate-free-guards-test # bounded gate-free classifier guards pass
135+tools/type-gate-free-source-test # real todo mold analysis and source guards pass
136+tools/type-sub-guards-test # subscription source guards pass
108137tools/type-ask-guards-test # ask source and bootstrap guards pass
138+tools/type-request-guards-test # request evidence and cache guards pass
109139tools/type-proj-guards-test # projection evidence and scope guards pass
110140tools/type-arithmetic-guards-test # arithmetic constraint guards pass
111141tools/type-module-scope-test # module/prelude scope golden report matches
112142tools/hoon check-spans-test # prints <<>>
113143tools/hoon itype-unify-test # type-unification controls pass
144+tools/hoon -f tools/testdata/zing-hoon-reference.hoon # Hoon translation agrees on four inputs
114145tools/testdata/selftest # 22 checks, 0 failed
115146tools/doc-blocks docs/spec # every jibb block has its case
116147tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
docs/open-questions.md+2
@@ -64,6 +64,8 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking i
6464
656533. **Settled: watching a request with unknown provenance.** On 2026-10-31, @iko said an island may watch a request only if the checker proves it watchable at compile time. An unknown request, including one built or passed through a gate without sufficient evidence, is rejected rather than deferred to a runtime check.
6666
67+34. **Settled: constructors and equal noun literals.** On 2026-10-31, @iko said expressions with the same runtime representation count as equal, and cases that cannot be distinguished at runtime are rejected at compile time. Thus `|=%$` matches a case headed by `%$`, `%.y` or `~`: each is the noun 0. Cases with equal heads and overlapping payloads cannot coexist in a union.
68+
6769## Grammar questions never put to the doc's author
6870
6971In milestone 1 the parser met about thirty places where the doc could be read more than one way. Twelve went to @iko on 2026-10-30 and are rows of the Decisions tab. These were not asked. For each, the parser follows the reading below, and some are marked "(doc question)" in the library's notes. None changes what a valid program means, except where a reading makes something an error.
docs/prelude-inventory.md+4−4
@@ -6,7 +6,7 @@ The source is the fake ship's `%base` `/sys/hoon.hoon` (Hoon version 135), read
66
77The vendored prelude defines `poke` in its private internal module and re-exports it as a transparent type. The partial checker resolves its supported source shape and a narrow imported API constructor; complete checking of the private body, other API shapes, effect lowering and runtime execution remain unfinished. `qath` is defined there as a transparent recursive knot sequence and re-exported by the public prelude; the partial checker supports its named identity, selected construction and matching, and static application-path literals. The internal prelude also defines a transparent generic `ask` with pure, agent and store cases; the public prelude re-exports it and defines `pure`. Supported source construction and matching infer, while derived requests, source-schema validation and execution remain unfinished.
88
9−The prelude also declares the generic `cmd` mold exactly as in Overview, Effects. The partial checker infers its five cases and independent message types in the supported examples; complete module checking and backend validation remain outstanding. The related `sub` declaration awaits checking and the remaining request support.
9+The prelude also declares the generic `cmd` mold exactly as in Overview, Effects. The partial checker infers its five cases and independent message types in the supported examples; complete module checking and backend validation remain outstanding. The public prelude also declares `sub`; the partial checker infers supported constructions, while request watchability and execution remain outstanding.
1010
1111Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold generators, and need individual inspection. Jibb's loobean `not` and Hoon's bitwise `not.bit` are distinct. Parser helpers outside 3g are excluded from the intended prelude except the specifically listed `slav` and `slaw`; the raw candidates below still need to be classified.
1212
@@ -14,7 +14,7 @@ Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold
1414
1515`add`, `dec`, `div`, `dvr`, `gte`, `gth`, `lte`, `lth`, `max`, `min`, `mod`, `mul`, `sub`.
1616
17−The source-backed `gth` gate calls a compiler-supplied private comparison interface. The partial checker accepts supported equal-aura atom arguments, including loobeans, and returns `?`; lowering, jet recognition and execution remain unfinished. The public `add` and `dec` gates are written in Jibb over private primitive interfaces. The partial checker infers a shared atom type that excludes loobeans, including through supported generic calls. Primitive execution and jet recognition remain unfinished.
17+The source-backed `gth` gate calls a compiler-supplied private comparison interface. The partial checker accepts supported equal-aura atom arguments, including loobeans, and returns `?`; lowering, jet recognition and execution remain unfinished. The public `add` and `dec` gates are written in Jibb over private primitive interfaces. The partial checker infers a shared atom type that excludes loobeans, including through supported generic calls. The Jibb-written `lth`, `gte` and `lte` gates compose `gth` and `not`; supported calls infer a shared atom constraint and return `?`. Primitive execution and jet recognition remain unfinished.
1818
1919## 1c
2020
@@ -26,7 +26,7 @@ The source-backed `gth` gate calls a compiler-supplied private comparison interf
2626
2727`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
2828
29−The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `bond`, `both`, `clap`, `clef`, `drop` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
29+The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `bond`, `both`, `clap`, `clef`, `drop` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. `zing` concatenates homogeneous lists in order; Hoon’s raw `zing` can also flatten heterogeneous noun lists, which this Jibb type does not express. A Hoon translation agrees with Hoon `zing` on selected finite inputs; this is not Jibb execution. Backend validation and jet recognition remain outstanding for all of them.
3030
3131| Name | Hoon behavior | Jibb status |
3232| --- | --- | --- |
@@ -49,7 +49,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
4949
5050`snoc`, `lure`, `fand`, `find`, `flop`, `gulf`, `homo`, `join`, `bake`, `lent`, `levy`, `lien`, `limo`, `murn`, `oust`, `reap`, `rear`, `reel`, `roll`, `scag`, `skid`, `skim`, `skip`, `slag`, `snag`, `snip`, `sort`, `spin`, `spun`, `swag`, `turn`, `weld`, `snap`, `into`, `welp`, `zing`.
5151
52−The current prelude writes `snoc`, `lure`, `flop`, `join`, `levy`, `lien`, `murn`, `rear`, `reel`, `roll`, `skim`, `skip`, `snip`, `turn` and `weld`. `murn` keeps the present products of its gate in order; `join` inserts a separator between items; `snip` drops the last item, and `rear` returns it or crashes on an empty list. The folds take an explicit initial value as the Prelude table specifies. The partial checker infers `snoc`, `lure`, `weld`, `turn`, `flop`, `rear`, `skim`, `skip`, `murn`, `join`, `snip`, `levy` and `lien` using the validated prelude `list` mold; other list helpers remain limited by that fragment. The result casts on `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy` and `lien` state their existing result types without changing their bodies. Backend validation remains outstanding for all of them.
52+The current prelude writes `snoc`, `lure`, `flop`, `join`, `lent`, `zing`, `levy`, `lien`, `murn`, `rear`, `reel`, `roll`, `skim`, `skip`, `snip`, `turn` and `weld`. `lent` counts items by recursion and `add`; `murn` keeps the present products of its gate in order; `join` inserts a separator between items; `snip` drops the last item, and `rear` returns it or crashes on an empty list. The folds take an explicit initial value as the Prelude table specifies. The partial checker infers `snoc`, `lure`, `weld`, `turn`, `flop`, `rear`, `skim`, `skip`, `murn`, `join`, `snip`, `lent`, `zing`, `levy` and `lien` using the validated prelude `list` mold; other list helpers remain limited by that fragment. The result casts on `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy` and `lien` state their existing result types without changing their bodies. Backend validation remains outstanding for all of them.
5353
5454## 2c
5555
docs/prompts/milestone-2.md+3−3
@@ -49,7 +49,7 @@ And from the plan's Risks:
4949
5050## First steps
5151
52−1. **Specify the prelude inventory.** The checker needs the prelude's complete exported inventory and signatures; include all names from the listed Hoon library sections except explicitly excluded groups, as `docs/open-questions.md` question 3 records. The prelude imports private helpers and low-level primitives from a separate internal module without exposing them; its public foundational gates are implemented in Jibb on those primitives. The source-backed internal module defines `poke`; the public prelude re-exports it as an ordinary transparent type that modules can construct and inspect, as question 24 records. This decision does not specify the representation of `ask` or `qath`.
52+1. **Specify the prelude inventory.** The checker needs the prelude's complete exported inventory and signatures; include all names from the listed Hoon library sections except explicitly excluded groups, as `docs/open-questions.md` question 3 records. The prelude imports private helpers and low-level primitives from a separate internal module without exposing them; its public foundational gates are implemented in Jibb on those primitives. The source-backed internal module defines `poke`, `ask` and `qath`; the public prelude re-exports them as ordinary transparent types that modules can construct and inspect, as questions 24 and 25 record. Their current representations and partial checker support are described in `docs/compiler.md`.
5353
5454 The plan's three core-language rules were adopted: gate-free `eq` arguments and map and set keys, with gates opaque for union matching; jetted prelude functions taking gates; and rejection of a non-gate value that depends on itself even through a gate.
55552. **Start the importer early**, as the plan's Risks ask: first on a small `/sur` file, then on Tlon's. "Suggested design" below has a way in.
@@ -75,7 +75,7 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
7575
7676**Tags, `~`, numbers and cells wait for their context** (Grammar: Tag resolution, Literals by context)
7777- A tag or `~` gets a fresh variable and a pending constraint, checked once unification fixes the variable: against a union's cases, by shape and shared tag positions, or as a constant atom for `@tas`, `@ta`, `@` or `*`. A literal that matches nothing is "an error naming the union, such as "msg has no case %submitt"".
78−- `|=%typed` is a case's constructor: "against `$-(@t M)` it is `|=(t [%typed t])`, requiring `M` to have a case `[%typed @t]`. It works for cases tagged at their head; a bare tag is always a value."
78+- `|=%typed` is a case's constructor: "against `$-(@t M)` it is `|=(t [%typed t])`, requiring `M` to have a case `[%typed @t]`. A literal case head matches by noun value, so `|=%$` also matches `%.y` and `~` heads; a bare tag is always a value."
7979- A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it. An island's `main` fixes its messages. A tag constraint still open when the module is checked is an error asking for a `^-`; the checker never guesses. Gate-free constraints are retained when generalized.
8080- "Wing access, changes and `?-` on a type not yet known wait the same way." A change with no items, `m()`, is an error; the parser still accepts it. Patterns don't wait: they're checked against the subject's type.
8181- Number and cell literals each "takes a default when its `++` is checked": a number `@ud`, a cell a tuple. But "A number takes `@ud` only if nothing fixes its aura and its `++` isn't generic over it", so `++ inc |= n=A (add n 1)` stays generic: unlike a tag's, a number's variable doesn't stop its `++` from generalizing. A cell can also become a record or, where a list is expected, a cons.
@@ -121,7 +121,7 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
121121- Element signatures are in the Layout and styling table. Paths and unchecked cords have separate declarations, with `link-unsafe`, `image-unsafe` and `go-unsafe` for the unchecked forms. Both navigation declarations produce `[%go url=@t]`; `go` converts its application path to a cord including the app's base path. "The same attribute twice in a literal list is an error."
122122
123123**Errors**
124−- Each one the Grammar tab describes needs a golden case with its message. A start on the list: an aura mismatch; mismatched faces; "msg has no case %submitt"; an unresolved tag, as the Grammar's `add-button` ("nothing fixes the union of %add"); an open constraint at the end of a module; a `|=%tag` whose union has no such case tagged at its head; a union whose cases overlap; a missing `?-` case, named; an arm that earlier arms cover; a value that refers to itself; a shadowed name, including a prelude or imported one; a cell in `{…}` with no printer; an atom of a generic aura in `{…}` or a path's `(…)`; a capital that a body makes a `@ud` or a list; `~[text "hi"]`, where the checker suggests `~[(text "hi")]`; clashing derived names; an import cycle; from an import, a signed or float aura, a core, gate or vase, or a `$%`, `$?` or `$^` whose cases don't differ as nouns, or a record with duplicate field names, each where used; a `(facts …)` outside an API file's `paths`; a gate in island data or a model, naming the field; a repeated attribute in a literal list. Read the Grammar tab, and the other tabs' mentions of "error" and "the checker", and make the list complete.
124+- Each one the Grammar tab describes needs a golden case with its message. A start on the list: an aura mismatch; mismatched faces; "msg has no case %submitt"; an unresolved tag, as the Grammar's `add-button` ("nothing fixes the union of %add"); an open constraint at the end of a module; a `|=%tag` whose union has no case with an equal literal head; a union whose cases overlap; a missing `?-` case, named; an arm that earlier arms cover; a value that refers to itself; a shadowed name, including a prelude or imported one; a cell in `{…}` with no printer; an atom of a generic aura in `{…}` or a path's `(…)`; a capital that a body makes a `@ud` or a list; `~[text "hi"]`, where the checker suggests `~[(text "hi")]`; clashing derived names; an import cycle; from an import, a signed or float aura, a core, gate or vase, or a `$%`, `$?` or `$^` whose cases don't differ as nouns, or a record with duplicate field names, each where used; a `(facts …)` outside an API file's `paths`; a gate in island data or a model, naming the field; a repeated attribute in a literal list. Read the Grammar tab, and the other tabs' mentions of "error" and "the checker", and make the list complete.
125125- For a `+$` whose cases overlap or do not fit, suggest that a record or tuple leaves its `[` open on the `+$` line. `+$ pt` above `@t` and `[@ud @ud]` is a valid union.
126126- "Each error names both conflicting sites, with excerpts." Today's `error` is `[file line col msg]`, a start only; spans keep each node's end so that a type error can underline both sites.
127127- Messages name things in the doc's words and quote the code they're about in backticks, as milestone 1's do. Their wording is fixed by the golden tests once written.
docs/spec/decisions.md+1−1
@@ -24,7 +24,7 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
2424| Several open brackets | The deeper lines go to the last bracket, or the last rune's body, left open on a line, and the brackets before it close with it: `(column ~ ~[` needs no `)` | Decided 2026-10-30 |
2525| Jibb code blocks | Labelled `jibb` in this doc; each is a golden test | Decided 2026-10-30 |
2626| Definitions | `++` for values, `+$` for molds; no `=/` | Decided |
27−| Unions | No `$?`: a `+$` with its cases on the lines below is a union, so every union written in Jibb has a name; one case is just that mold; a mold that isn't a union counts as a union of one case for tags and `\|=%tag`; a generic's `\|$` comes right after the `+$`'s name; tags anywhere; cases differ as nouns, with `?` treated as the two atoms `%.y` and `%.n`, disjoint from cells and overlapping constants 0 and 1, and `!!` or any cell with an empty position disjoint from every case; a tag literal or `~` waits for its union, and an unresolved one is an error | Decided 2026-10-30 |
27+| Unions | No `$?`: a `+$` with its cases on the lines below is a union, so every union written in Jibb has a name; one case is just that mold; a mold that isn't a union counts as a union of one case for tags and `\|=%tag`; a generic's `\|$` comes right after the `+$`'s name; tags anywhere; constructor heads and case disjointness compare literal noun values regardless of spelling, so `%$`, `%.y` and `~` are equal and overlapping cases are errors; cases differ as nouns, with `?` treated as the two atoms `%.y` and `%.n`, disjoint from cells and overlapping constants 0 and 1, and `!!` or any cell with an empty position disjoint from every case; a tag literal or `~` waits for its union, and an unresolved one is an error | Decided 2026-10-31 |
2828| Printed unnamed unions | Print the cases separated by spaces, as `%approve %deny`; this is print-only, not Jibb syntax | Decided 2026-10-30 |
2929| Printed type constraints | Print an atom constraint as `$-([A A] A) where A is an atom`, an arithmetic atom constraint as `where A is an atom other than ?`, and a gate-free constraint as `$-([A A] ?) where A contains no gates`; separate multiple clauses with commas, as `where A is an atom, B contains no gates` | Decided 2026-10-31 |
3030| Branching | `?-` only, loobeans included; exhaustive, with explicit catch-alls; covered arms are errors; failures say `!!` | Decided 2026-10-29 |
docs/spec/grammar.md+1−1
@@ -141,7 +141,7 @@ A mold is only a type: never called on a noun, and with no default. Types are in
141141A tag literal or `~` gets a fresh type variable and a pending constraint: the variable must become a union with a matching case, or an atom type the term fits. A mold that isn't a union counts as a union of one case, for tags and for `|=%tag`: `[%go "x"]` fits `+$ go [%go url=@t]`, and `|=%typed` works against `$-(@t M)` when `M` is `[%typed text=@t]`. Once unification fixes the variable, each constraint is checked against the union's cases or, for `@tas`, `@ta`, `@` or `*`, makes the tag that constant atom. A literal that matches nothing is an error naming the union, such as "msg has no case %submitt".
142142
143143- A constraint records the literal's shape, such as `[@t %draft]`, and matches cases by shape and shared tag positions; a literal in a field position is checked against that field.
144−- `|=%typed` is a case's constructor: against `$-(@t M)` it is `|=(t [%typed t])`, requiring `M` to have a case `[%typed @t]`. It works for cases tagged at their head; a bare tag is always a value.
144+- `|=%typed` is a case's constructor: against `$-(@t M)` it is `|=(t [%typed t])`, requiring `M` to have a case `[%typed @t]`. It works for cases whose head is a literal with the same noun as the tag, regardless of how that literal is written: `|=%$` also constructs a case headed by `%.y` or `~`, since each is the noun 0. A bare tag is always a value.
145145- A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it. An island's `main` fixes its messages, so islands resolve their own tags. The inferred gate-free constraint is retained when a type variable is generalized.
146146- A constraint still open when its module is checked is an error asking for a `^-`; the checker never guesses. Library helpers can cast, as in `^- (list attr)`.
147147- Wing access, changes and `?-` on a type not yet known wait the same way.
docs/status.md+50−10
@@ -23,21 +23,41 @@ The parser accepts `_` in mold positions and typed path segments, retaining each
2323
2424On 2026-10-31, @iko chose explicit, result-directed `(proj record)` to construct a record with exactly the expected fields, and reserved `proj` against definitions and imports. The partial checker handles selected explicit calls with known, closed record types, records field-selection evidence for later lowering, and reserves the name across source bindings. Reordered fields, some nested contexts and several open or recursive cases remain unsupported; lowering and execution are not implemented yet. The field-order question remains open.
2525
26−The internal prelude also defines `qath` as a transparent recursive knot sequence, re-exported by the public prelude. The partial checker recognizes its source identity, supports selected null/cell construction and matching, and types static application-path literals. Other recursive shapes, broader patterns and dynamic application-path segments remain unsupported. A 256-step limit applies per inference attempt, not to parsing or retries; checking routes and static files remains milestone 4.
26+The internal prelude also defines `qath` as a transparent recursive knot sequence, re-exported by the public prelude. The partial checker recognizes its source identity, supports selected null/cell construction and matching, and types static application-path literals. Construction and matching for other recursive shapes, broader patterns and dynamic application-path segments remain unsupported. A 256-step limit applies per inference attempt, not to parsing or retries; checking routes and static files remains milestone 4.
2727
28−The internal prelude defines a transparent generic `ask` with pure, agent and store cases, re-exported alongside the Jibb-written `pure` gate. The partial checker infers supported constructors and exhaustive matches. Agent and store receivers operate on raw nouns; their fields do not prove schema validity or watchability. Derived requests, checked decoding, runtime validation, `sub` and island watch checking remain unimplemented.
28+The checker also recognizes a limited source-proven generic recursive tree in an import-free defining module. Its nominal identity retains the defining path, mold name and type arguments, including across supported imports and aliases. With a known expected type it can construct supported tagged cases by checking one source-proven layer at a time. Flat matches with two explicit tags also work for these source-proven trees, as does a missing-case diagnostic for a supported single-arm match. Broader pattern matching, general structural fits and gate-free proof remain unsupported; this is not yet the prelude's `element` implementation or island checking. The source index uses fixed-shape checks during mold collection. Each construction or supported pattern attempt has 256 unfolding steps and at most 4,096 face and substitution visits per scan; pattern subject recognition and view validation can each scan separately. Parsing, other inference and retries remain outside those limits. A single startup-inclusive comparison of 1,000 ordinary gates produced identical reports and used 29.12 seconds of user CPU before the shared-resolver refactor and 28.55 seconds after it, with other work running; it is not a general performance bound.
29+
30+The internal prelude defines a transparent generic `ask` with pure, agent and store cases, re-exported alongside the Jibb-written `pure` gate. The partial checker infers supported constructors and exhaustive matches. Agent and store receivers operate on raw nouns; their fields do not prove schema validity or watchability. The public prelude now defines the documented source-backed `sub` union; supported `%watch` payloads retain the public `(ask M)` type. Constructing a `sub` does not prove that its request is watchable. Request lowering, checked decoding, runtime validation and island watch checking remain unimplemented.
31+
32+Known same-origin generic-union result context can now constrain a call before its arguments are inferred. An unresolved or opaque constructor target stays unsupported rather than producing a definite mismatch; proven missing tags still report errors. A todo request with explicit `(ask msg)` context can infer `|=%got`; its uncontextualized form remains unsupported. A two-item literal-headed tuple can receive payload context from a known union of uniquely headed literal cells when its payload is a shallow wing-headed call with literal, wing or constructor arguments. Existing inference takes precedence when it fits; otherwise the checker tries the contextual path once. It conservatively declines that path when any substitution has a structural root, as well as for duplicate or opaque competitors. The guard scans substitutions per eligible tuple and may add one shallow inference; no global linear-time bound is claimed. This allows an explicitly typed todo subscription body to infer, but does not check the island or prove request watchability.
33+
34+A separate source-backed analysis can prove one named mold gate-free, report a definite gate with a field path, or return unknown. It retains the prepared prelude, source bundle, reader results and resolved imports; the actual todo model proves gate-free, while a callback field reports its path and `*` remains unknown. Its classifier is capped at 256 nodes, not the surrounding parse and import work. API, store and private roots are unsupported, and the artifact does not check a module or island, infer generalized constraints, or prove watchability.
35+
36+The partial checker can also match a directly named, checked root gate against a generic gate sample in a direct, unshadowed source-backed prelude call. It uses the written two-slot sample layouts to preserve nested record faces, then requires the complete call samples to be closed and tag-free and repeats the fit under the final substitution. The proof falls back to existing inference for unavailable or ambiguous source layouts, local or dynamic gates, aliases, recursive placeholders and open generic caller types. It preserves written-capital checks and projection evidence; it does not add `program`, check islands or prove request watchability. Prepared prelude source and interface remain a trusted pair.
2937
3038The API path analyzer can retain its source, complete prepared prelude, reader results and resolved dependencies as evidence, and classify a unique declaration as watchable, not watchable or unknown. It does not yet prove the provenance of request values or check island subscriptions. Prepared artifacts and reader results remain trusted host inputs.
3139
32−For a unique supported path declaration, the request-parts analysis derives ordered typed path parameters, a full-state reply sample and a fold type for one diff mark. Multiple diffs and unsupported or ambiguous evidence fail closed. It does not yet create callable request gates or establish watchability of values.
40+For a unique supported path declaration, the request-parts analysis derives ordered typed path parameters, a full-state reply sample and a fold type for one diff mark. Multiple diffs and unsupported or ambiguous evidence fail closed. By itself it does not create request gates or establish watchability of values.
3341
3442A separate supporting-definition analysis infers supported ordinary API molds and values and resolves all declared marks, retaining their source and dependency evidence. It fails closed on unsupported helpers or marks; unused `/-` cores are not independently validated, and definitions depending on derived gates remain unsupported. This does not check or export the whole API.
3543
44+Ordinary imports can infer derived request-gate types for multiple supported API paths. A case may take one typed segment before the reply or one diff fold after it; the unchanged todo API's plain, typed and diff requests infer, including a named closed fold. Checked ordinary API definitions, mark molds and a supported poke constructor are exported. Each `/sur` core must have a directly used, successfully read mold; unselected bindings are not independently validated. Jibb module imports, scry paths, multiple parameters or diffs and a parameter together with a fold remain unsupported. Source-qualified request evidence and exact trusted graph inputs survive transitive imports and cached interfaces, while stale or ambiguous evidence fails closed. This is a type-only interface: request execution, schema validation and proof that a request value is watchable remain unimplemented. In one loaded-machine run, the real-todo eval took 195.83 s wall and 67.83 s user CPU; the prior prototype took 111.81 s wall and 64.60 s user. Both include Hoon compilation and reader setup and overlapped other work, so they are not isolated checker benchmarks.
45+
3646The Hoon reader's tagged-union source proof also handles `$~` default wrappers. A shared eval and ship golden exercises the unmodified Tlon `epic.saga` mold as a named payload in a labeled downstream extension, alongside overlap, recursive, shadow and malformed-wrapper controls. The tagged-source helper peels at most four consecutive defaults; defaults inside dependency proofs spend the existing semantic-node budget. Other unverified nested unions and dependencies remain unsupported.
3747
38−The repository spec records the subsequent type-system and prelude decisions, including the chosen `like` result-mapping gate; 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, including Tlon `notes.import-node` with list-wrapped self references, 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, including source-validated named operands such as Tlon `notes.log`, 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. A dedicated trusted preparation path supplies private comparison and arithmetic schemes to the Jibb-written `gth`, `add` and `dec` wrappers; ordinary imports cannot access them. The public `add` and `dec` wrappers use private arithmetic interfaces; supported inference preserves the shared atom constraint that excludes loobeans. Primitive execution, jet recognition and length remain unfinished. 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, complete `ask` and `pure` checking, 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 includes the doc-exact generic `cmd` union; 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. Known loobean result context also propagates through supported complete branches and binder-only cell arms; binder-only arms over union subjects remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample with its origin, generic arguments and faces preserved; unnamed, pending, recursive and variable-bound cases remain unsupported. A known gate with an unresolved result variable can receive a known enclosing result type before its arguments are inferred; unknown calls and unresolved targets remain conservative. 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. A structured single-arm pattern also works for a known non-union cell when coverage is proven, including nested literal and wildcard positions. 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, a grouped wing or a supported shallow call, including nested cell and list positions; other partial-pattern contexts and subject forms 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 agreed shared-type `clap`; supported calls infer, while backend validation remains outstanding, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
48+The repository spec records the subsequent type-system and prelude decisions, including the chosen `like` result-mapping gate; 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, including Tlon `notes.import-node` with list-wrapped self references, 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, including source-validated named operands such as Tlon `notes.log`, 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. A dedicated trusted preparation path supplies private comparison and arithmetic schemes to the Jibb-written `gth`, `add` and `dec` wrappers; ordinary imports cannot access them. The public `add` and `dec` wrappers use private arithmetic interfaces; supported inference preserves the shared atom constraint that excludes loobeans. Primitive execution, jet recognition and length remain unfinished. 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 by itself create requests or check an API module. Ordinary imports additionally infer the supported multi-path request-gate types described above. Complete private module checking, other API shapes, request lowering, root API and kind checking, stores, complete `ask` and `pure` checking 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 includes the doc-exact generic `cmd` union; 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. Known loobean result context also propagates through supported complete branches and binder-only cell arms; binder-only arms over union subjects remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample with its origin, generic arguments and faces preserved; unnamed, pending, recursive and variable-bound cases remain unsupported. A known gate with an unresolved result variable can receive a known enclosing result type before its arguments are inferred; unknown calls and unresolved targets remain conservative. 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. A structured single-arm pattern also works for a known non-union cell when coverage is proven, including nested literal and wildcard positions. 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, a grouped wing or a supported shallow call, including nested cell and list positions; other partial-pattern contexts and subject forms 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. Literal singleton heads compare by runtime noun, so `|=%$` also matches explicit null- and loobean-zero-headed cases. When equal heads have disjoint payloads, the constructor selects a uniquely proven compatible payload; unknown and ambiguous candidates remain unsupported. 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 agreed shared-type `clap`; supported calls infer, while backend validation remains outstanding, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
49+
50+The 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`, `bond`, `lure`, `weld`, `snoc`, `turn` and `lent`. 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. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. 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. The source-only `+prepare-prelude` rejects empty, malformed, conflicting or import-bearing source; `+prepare-prelude-with-internal` also accepts the supported private internal import. Prepared values are trusted and must come unchanged from the matching preparation arm. When canonical public list or unit templates are missing or altered, independently inferred private molds remain available, while molds that depend on those templates do not. 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.
51+
52+The prelude also has a Jibb-written `zing` that concatenates homogeneous lists via `weld`. Its focused golden infers empty, nested text, ship, generic and gate-element lists and reports a non-list error; the same golden passes on the ship. A Hoon translation agrees with Hoon `zing` on selected finite inputs, not on Jibb execution. Hoon’s raw helper additionally accepts heterogeneous noun lists, which the Jibb signature does not express. Backend lowering and jet recognition remain unverified.
53+
54+An eval and ship fixture now reports partial inference for the unchanged todo island with its real API and Hoon readers. It verifies that the source fixtures match `my-app` and exercises missing or duplicate imports; the report does not claim the module or island has been checked. The prelude also has a Jibb-written recursive `lent` whose supported generic calls infer `@ud`. Execution and shape-based jet recognition remain future backend work. Nested union tests check equal runtime nouns, different nested tags, empty fields and unknown inhabitation.
55+
56+The prelude now writes `lth`, `gte` and `lte` in Jibb using `gth` and `not`. Supported generic and concrete calls infer, including loobeans; mismatched explicit auras fail. Execution, jet recognition and complete import checking remain unfinished.
57+
58+The Hoon reader can prove overlaps among supported original `$?` source cases, including nested cells and unions with more than two cases, and report them at a Jibb use site. It evaluates each case independently and compares runtime noun values. Other overlaps, Hoon case locations and mark-reader overlap diagnostics remain unfinished. The source screen allows at most 128 cases and 4,096 source noun nodes; dependency checking and pairwise witness analysis each have a separate 4,096-node budget. These budgets do not bound chapter lookup, Hoon evaluation or graph walks.
3959
40−The 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`, `bond`, `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. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. 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. The source-only `+prepare-prelude` rejects empty, malformed, conflicting or import-bearing source; `+prepare-prelude-with-internal` also accepts the supported private internal import. Prepared values are trusted and must come unchanged from the matching preparation arm. When canonical public list or unit templates are missing or altered, independently inferred private molds remain available, while molds that depend on those templates do not. 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.
60+Restricted-number promotion now skips an environment scan when a definition has no written capitals. In a single startup-inclusive pair on 2,000 independent gates, output was identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds with other checks running. This is a partial-inference measurement, not a complete checker or a bound on dependent modules.
4161
4262## Milestone 1: parser and mark
4363
@@ -55,8 +75,8 @@ What the plan asks for, and where it is:
5575
5676Besides the plan's list:
5777
58−- 637 golden cases: 417 that parse and 220 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.
59−- The 637-case corpus passed under `urbit eval` in 89.7 s while other checks were running. The fake ship passed all 658 tests, including the importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face and API-evidence guards, with 60.3 s for sync and 81.5 s for tests. The importer golden compares 221 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.
78+- 653 golden cases: 433 that parse and 220 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.
79+- The 653-case corpus passed under `urbit eval` in 94.1 s while other checks were running. The fake ship passed all 690 tests, including the source-overlap, structural-overlap, generic-recursion, generic-construction and generic-pattern fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 80.9 s while other checks were running. The importer golden compares 221 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.
6080- `tools/testdata/selftest` (22 checks), `tools/testdata/ship-selftest` and `tools/testdata/clay-fixtures-selftest` test the tools themselves; the last checks temporary Clay fixture cleanup and signal handling without a ship.
6181- 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.
6282- 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).
@@ -147,17 +167,34 @@ Besides the plan's list:
147167| f69493d | 2026-10-31 | Derive supported request components from API declarations |
148168| f0f6954 | 2026-10-31 | Analyze supported API helper definitions and declared marks |
149169| 3f55af7 | 2026-10-31 | Define source-backed transparent ask and pure |
150−| This change | 2026-10-31 | Prove selected default-wrapped Hoon unions from source |
170+| ae1ec26 | 2026-10-31 | Prove selected default-wrapped Hoon unions from source |
171+| dde791c | 2026-10-31 | Infer a source-backed request-gate type through ordinary imports |
172+| a1c5f35 | 2026-10-31 | Infer supported multi-path requests and named closed folds |
173+| 911ca0c | 2026-10-31 | Propagate union context, define subscriptions and match literal nouns |
174+| 72acdb3 | 2026-10-31 | Infer selected nested union payloads from context |
175+| 706035c | 2026-10-31 | Analyze gate-free source molds with field witnesses |
176+| 651b8ec | 2026-10-31 | Match source-proven gate samples in direct calls |
177+| cc8e389 | 2026-10-31 | Add source-backed list length and real todo regression |
178+| 4da6891 | 2026-10-31 | Add source-backed comparisons and nested Hoon union controls |
179+| 09db390 | 2026-10-31 | Skip unnecessary inference environment scans |
180+| 179d717 | 2026-10-31 | Diagnose source-proven Hoon union overlaps |
181+| 142f2e2 | 2026-10-31 | Prove structural overlaps across Hoon union cases |
182+| c96597d | 2026-10-31 | Track source-proven generic recursive identities |
183+| 190a9d5 | 2026-10-31 | Add source-backed list flattening |
184+| d9d51e6 | 2026-10-31 | Check source-proven recursive tree construction |
185+| This change | 2026-10-31 | Match source-proven recursive tree cases |
151186
152187## Checking it
153188
154189On a machine set up as [development.md](development.md) says:
155190
156191```
157−tools/golden # 637 cases under urbit eval
192+tools/golden # 653 cases under urbit eval
158193tools/importer-test # the Hoon importer fixture projection
159194tools/type-import-default-test # default-wrapped source proof golden
160195tools/type-import-test # the importer/checker bridge fixture
196+tools/type-import-overlap-test # source-aware Hoon overlap and provenance fixture
197+tools/type-import-structural-test # structural overlap and multi-case source fixture
161198tools/type-tlon-test # the real Tlon reader/checker fixture
162199tools/type-mark-test # the mark/checker bridge fixture
163200tools/type-poke-test # the source-backed poke/API fixture
@@ -166,6 +203,9 @@ tools/type-api-paths-test # partial API path metadata fixture
166203tools/type-hole-guards-test # hole defaulting and API interface guards
167204tools/type-list-alias-test # prelude list-alias guards
168205tools/type-generic-alias-test # generic union alias guards
206+tools/type-generic-recursion-test # source-proven generic recursion guards
207+tools/type-generic-construction-test # source-proven recursive construction guards
208+tools/type-generic-pattern-test # source-proven recursive pattern guards
169209tools/type-positional-face-guards-test # positional sample face guards
170210tools/type-qath-guards-test # qath source and unfolding guards
171211tools/type-ask-guards-test # ask source and bootstrap guards
@@ -176,7 +216,7 @@ tools/testdata/selftest # the tools themselves
176216tools/doc-blocks docs/spec # the doc's examples are golden cases
177217tools/ship start
178218tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
179−tools/ship test # the same 637 cases as -test arms on the ship
219+tools/ship test # the same 653 cases as -test arms on the ship
180220tools/testdata/ship-selftest
181221tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
182222tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb-import.hoon+181−6
@@ -47,7 +47,7 @@
4747 ==
4848+$ import-diagnostic
4949 $% [%ok value=imported]
50− [%invalid code=?(%aura %core) message=@t]
50+ [%invalid code=?(%aura %core %overlap) message=@t]
5151 [%unsupported message=@t]
5252 ==
5353+$ signatures (list [name=term code=hoon])
@@ -132,6 +132,35 @@
132132 =/ rest $(cases t.cases, tags [u.tag tags])
133133 ?~ rest ~
134134 `[[u.tag i.cases] u.rest]
135+
136+::
137+:: Bound the new $? branch screen independently of the existing $% path.
138+:: Count raw noun nodes across all cases, and cap pairwise tag comparisons.
139+++ bounded-no-spec-unions
140+ |= [h=* fuel=@ud]
141+ ^- (unit @ud)
142+ ?: =(fuel 0) ~
143+ =. fuel (dec fuel)
144+ ?@ h `fuel
145+ ?: ?=([%bckt ^ ^] h) ~
146+ ?: ?=([%bcwt [^ [^ *]]] h) ~
147+ ?: ?=([%bccn [^ [^ *]]] h) ~
148+ =/ left=(unit @ud) $(h -.h)
149+ ?~ left ~
150+ $(h +.h, fuel u.left)
151+++ tagged-bounded-cases
152+ |= [cases=(list spec) tags=(list @) fuel=@ud left=@ud]
153+ ^- (unit (list tagged-case))
154+ ?~ cases `~
155+ ?: =(left 0) ~
156+ =/ remaining=(unit @ud) (bounded-no-spec-unions i.cases fuel)
157+ ?~ remaining ~
158+ =/ tag=(unit @) (tagged-head i.cases)
159+ ?~ tag ~
160+ ?: (lien tags |=(x=@ =(x u.tag))) ~
161+ =/ rest $(cases t.cases, tags [u.tag tags], fuel u.remaining, left (dec left))
162+ ?~ rest ~
163+ `[[u.tag i.cases] u.rest]
135164::
136165:: Benign source annotations have different typed representations on
137166:: Clay and under eval. Inspect the wrapper as a noun, and validate the
@@ -170,11 +199,19 @@
170199 ?~ found ~
171200 =/ body=(unit spec) (tagged-default-union u.found 4)
172201 ?~ body ~
173− ?. ?=([%bccn *] u.body) ~
174− =/ cases=(list spec) p.u.body
175− ?~ cases ~
176− ?~ t.cases ~
177− (tagged-cases cases ~)
202+ ?- u.body
203+ [%bccn *]
204+ =/ cases=(list spec) p.u.body
205+ ?~ cases ~
206+ ?~ t.cases ~
207+ (tagged-cases cases ~)
208+ [%bcwt *]
209+ =/ cases=(list spec) p.u.body
210+ ?~ cases ~
211+ ?~ t.cases ~
212+ (tagged-bounded-cases cases ~ 4.096 128)
213+ * ~
214+ ==
178215::
179216:: Source proof for dependencies of an explicitly tagged union. Only
180217:: simple local molds, standard collections and distinct term enums are
@@ -346,6 +383,140 @@
346383 ?. ?=([%cell [%atom %tas [~ @]] *] i.ys) ~
347384 ?. =(tag.i.xs u.value.head.i.ys) ~
348385 $(xs t.xs, ys t.ys)
386+
387+::
388+:: Unlike the disjoint-reader fallback, source overlap may have repeated
389+:: tags. Bound both raw case traversal and the number of pair attempts.
390+++ overlap-source-cases
391+ |= [cases=(list spec) fuel=@ud left=@ud]
392+ ^- (unit (list tagged-case))
393+ ?~ cases `~
394+ ?: =(left 0) ~
395+ =/ remaining=(unit @ud) (bounded-no-spec-unions i.cases fuel)
396+ ?~ remaining ~
397+ =/ tag=(unit @) (tagged-head i.cases)
398+ ?~ tag ~
399+ =/ rest $(cases t.cases, fuel u.remaining, left (dec left))
400+ ?~ rest ~
401+ `[[u.tag i.cases] u.rest]
402+++ overlap-repeated-tag
403+ |= cases=(list tagged-case)
404+ ^- ?
405+ ?~ cases |
406+ ?: (lien t.cases |=(c=tagged-case =(tag.c tag.i.cases))) &
407+ $(cases t.cases)
408+++ overlap-projections-match
409+ |= [xs=(list tagged-case) ys=(list imported)]
410+ ^- ?
411+ ?~ xs ?=(~ ys)
412+ ?~ ys |
413+ ?. ?=([%cell [%atom %tas [~ @]] *] i.ys) |
414+ ?. =(tag.i.xs u.value.head.i.ys) |
415+ $(xs t.xs, ys t.ys)
416+++ overlap-source-witness
417+ |= [module=term name=term cor=type]
418+ ^- ?
419+ ?. ?=([%core *] cor) |
420+ =/ selected=(unit hoon) (local-arm-source cor name)
421+ ?~ selected |
422+ =/ shape=(unit spec) (local-mold-spec u.selected name)
423+ ?~ shape |
424+ =/ body=(unit spec) (tagged-default-union u.shape 4)
425+ ?~ body |
426+ ?. ?=([%bcwt *] u.body) |
427+ =/ cases=(unit (list tagged-case)) (overlap-source-cases p.u.body 4.096 128)
428+ ?~ cases |
429+ ?. (overlap-repeated-tag u.cases) |
430+ ?. ?=(^ (safe-source-tagged-fuel-mode u.cases cor ~[name] 4.096 |)) |
431+ =/ tried=(each (list type) tang)
432+ (mule |.((turn u.cases |=(c=tagged-case (~(play ut cor) [%kttr branch.c])))))
433+ ?. ?=([%& *] tried) |
434+ =/ projected=(each (list imported) tang)
435+ (mule |.((turn p.tried |=(t=type (walk module t catalog ~ `cor)))))
436+ ?. ?=([%& *] projected) |
437+ ?^ (first-bads p.projected) |
438+ ?. (overlap-projections-match u.cases p.projected) |
439+ =/ witness=(unit overlap-proof-result) (overlap-case-pairs p.projected 4.096)
440+ ?~ witness |
441+ found.u.witness
442+::
443+:: Positive overlap evidence only: false means no proof, not disjointness.
444+:: Fuel is shared across all examined nodes and sibling alternatives.
445++$ overlap-proof-result [found=? left=@ud]
446+++ overlap-known-atom
447+ |= aura=term
448+ ^- ?
449+ (lien `(list term)`~[%t %tas %ud %f] |=(n=term =(n aura)))
450+++ overlap-inhabited-list
451+ |= [xs=(list imported) fuel=@ud]
452+ ^- (unit overlap-proof-result)
453+ ?~ xs `[| fuel]
454+ ?: =(0 fuel) ~
455+ =/ one=(unit overlap-proof-result) (overlap-inhabited i.xs (dec fuel))
456+ ?~ one ~
457+ ?: found.u.one one
458+ $(xs t.xs, fuel left.u.one)
459+++ overlap-inhabited
460+ |= [x=imported fuel=@ud]
461+ ^- (unit overlap-proof-result)
462+ ?: =(0 fuel) ~
463+ =. fuel (dec fuel)
464+ ?- x
465+ [%noun *] `[& fuel]
466+ [%void *] `[| fuel]
467+ [%atom *] `[|(?=(^ value.x) (overlap-known-atom aura.x)) fuel]
468+ [%face *] $(x body.x)
469+ [%named *] $(x body.x)
470+ [%fork *] (overlap-inhabited-list cases.x fuel)
471+ [%cell *]
472+ =/ a=(unit overlap-proof-result) $(x head.x)
473+ ?~ a ~
474+ ?. found.u.a a
475+ $(x tail.x, fuel left.u.a)
476+ * `[| fuel]
477+ ==
478+++ overlap-pair-list
479+ |= [xs=(list imported) y=imported fuel=@ud]
480+ ^- (unit overlap-proof-result)
481+ ?~ xs `[| fuel]
482+ ?: =(0 fuel) ~
483+ =/ p=(unit overlap-proof-result) (overlap-pair i.xs y (dec fuel))
484+ ?~ p ~
485+ ?: found.u.p p
486+ $(xs t.xs, fuel left.u.p)
487+++ overlap-pair
488+ |= [a=imported b=imported fuel=@ud]
489+ ^- (unit overlap-proof-result)
490+ ?: =(0 fuel) ~
491+ =. fuel (dec fuel)
492+ ?: ?=([%face *] a) $(a body.a)
493+ ?: ?=([%face *] b) $(b body.b)
494+ ?: ?=([%named *] a) $(a body.a)
495+ ?: ?=([%named *] b) $(b body.b)
496+ ?: ?=([%fork *] a) (overlap-pair-list cases.a b fuel)
497+ ?: ?=([%fork *] b) (overlap-pair-list cases.b a fuel)
498+ ?: ?=([%noun *] a) (overlap-inhabited b fuel)
499+ ?: ?=([%noun *] b) (overlap-inhabited a fuel)
500+ ?: &(?=([%cell *] a) ?=([%cell *] b))
501+ =/ p=(unit overlap-proof-result) $(a head.a, b head.b)
502+ ?~ p ~
503+ ?. found.u.p p
504+ $(a tail.a, b tail.b, fuel left.u.p)
505+ ?. &(?=([%atom *] a) ?=([%atom *] b)) `[| fuel]
506+ ?^ value.a
507+ ?^ value.b `[=(u.value.a u.value.b) fuel]
508+ `[&(=(u.value.a 0) (overlap-known-atom aura.b)) fuel]
509+ ?^ value.b `[&(=(u.value.b 0) (overlap-known-atom aura.a)) fuel]
510+ `[&((overlap-known-atom aura.a) (overlap-known-atom aura.b)) fuel]
511+++ overlap-case-pairs
512+ |= [xs=(list imported) fuel=@ud]
513+ ^- (unit overlap-proof-result)
514+ ?~ xs `[| fuel]
515+ ?: =(0 fuel) ~
516+ =/ p=(unit overlap-proof-result) (overlap-pair-list t.xs i.xs (dec fuel))
517+ ?~ p ~
518+ ?: found.u.p p
519+ $(xs t.xs, fuel left.u.p)
349520::
350521:: +read-mold-in: accept the /sur core as provenance. The core must be
351522:: built against zuse or validated Ford imports, and its selected arm
@@ -361,6 +532,8 @@
361532 [%| (crip "Hoon mold `{(trip name)}` is not declared")]
362533 ?. =(typ (~(play ut cor) (ream (cat 3 '*' name))))
363534 [%| 'Hoon module provenance does not match the selected mold']
535+ =/ overlap=(each ? tang) (mule |.((overlap-source-witness module name cor)))
536+ ?: &(?=(%& -.overlap) p.overlap) [%| 'Hoon union cases overlap']
364537 =/ result (read-with module name typ [~ cor])
365538 ?: ?=([%& *] result) result
366539 =/ fallback=(each (unit (each imported @t)) tang)
@@ -461,6 +634,8 @@
461634 [%unsupported p.result]
462635 =/ selected=(each type tang) (mule |.((~(play ut cor) (ream (cat 3 '*' name)))))
463636 ?. ?=(%& -.selected) [%unsupported p.result]
637+ =/ overlap=(each ? tang) (mule |.((overlap-source-witness module name cor)))
638+ ?: &(?=(%& -.overlap) p.overlap) [%invalid %overlap 'Hoon union cases overlap']
464639 =/ again=(each imported tang) (mule |.((walk module p.selected catalog ~ [~ cor])))
465640 ?. ?=(%& -.again) [%unsupported p.result]
466641 =/ evidence=(unit import-diagnostic) (first-invalid p.again)
jibb-dev/lib/jibb.hoon+1409−75
@@ -4607,6 +4607,8 @@
46074607:: Atom constraints tied to an explicit capital or an inferred sample
46084608:: are generalized and printed. Other aura variables remain unsupported until
46094609:: their defaulting and inferred generalization are implemented.
4610+:: Restricted-number promotion considers written capitals only; if there
4611+:: are none, it skips the otherwise unnecessary environment traversal.
46104612:: Bare @ is a separate unrestricted atom type. A directional fit check
46114613:: permits concrete atoms to widen to it, never the reverse. A fit that
46124614:: needs a not-yet-implemented constraint remains unsupported. Named unions
@@ -4628,6 +4630,32 @@
46284630:: proofs to fewer than 1,024 cells; the projection planner has a separate
46294631:: 4,096-step bound. These are inference limits, not language limits.
46304632::
4633+:: Supported API imports derive request-gate types atomically for multiple
4634+:: paths, including one typed segment or one diff fold per case. Their checked
4635+:: ordinary definitions, mark molds and supported poke constructor are also
4636+:: exported. A selected /sur mold is checked through its trusted reader result;
4637+:: unused cores and other bindings are not independently validated. APIs
4638+:: with /= imports, separate scry paths, multiple parameters or diffs, or a
4639+:: parameter together with a fold remain unsupported. The unchanged todo API
4640+:: fits this fragment, including named closed fold gates.
4641+::
4642+:: Each case's source-derived schema and canonical API identity travel in a
4643+:: dependency closure bound to the exact supplied bundle, prelude, scope and
4644+:: trusted reader results. Unknown cached entries are rebuilt. Request-bearing
4645+:: closures are limited to 256 source paths and requests. This is type
4646+:: inference only: no request lowering, runtime schema validator or proof that
4647+:: an arbitrary ask value is watchable is supplied.
4648+::
4649+:: A closed gate sample may omit one outer face from a known input slot when
4650+:: its product is identical. Distinct written names, nested value faces,
4651+:: ambiguous cell tails and raw-variable-origin fits retain their prior rules.
4652+::
4653+:: In one synthetic eval of a 48-module deep and 48-module wide request-free
4654+:: graph, baseline versus certificate inference took 21.53 s versus 23.10 s
4655+:: elapsed (21.10 s versus 22.34 s CPU), including startup. The deep cache's
4656+:: jam grew from 2,402 to 4,209 bytes (+1,807 bytes). These single-run figures
4657+:: are not production memory or performance benchmarks.
4658+::
46314659+$ itype
46324660 $~ [%var 0]
46334661 $% [%var id=@ud]
@@ -4644,6 +4672,7 @@
46444672 [%collection name=term args=(list itype)]
46454673 [%recursive module=term name=term label=(unit @t)]
46464674 [%jrec at=path name=term label=(unit @t) head=term aura=@ta tail=term]
4675+ [%grec at=path name=term label=(unit @t) proof=shape args=(list itype)]
46474676 [%union cases=(list itype) origin=(unit [at=path name=term]) label=(unit @t) args=(list itype)]
46484677 [%face name=term body=itype]
46494678 [%fn sample=itype product=itype]
@@ -4715,6 +4744,7 @@
47154744 %union |((lien cases.t |=(c=itype (itype-occurs n c sub))) (lien args.t |=(c=itype (itype-occurs n c sub))))
47164745 %recursive |
47174746 %jrec |
4747+ %grec (lien args.t |=(c=itype (itype-occurs n c sub)))
47184748 %collection (lien args.t |=(c=itype (itype-occurs n c sub)))
47194749 %face $(t body.t)
47204750 %fn |($(t sample.t) $(t product.t))
@@ -4733,6 +4763,9 @@
47334763 =. a (itype-walk a sub)
47344764 =. b (itype-walk b sub)
47354765 ?: =(a b) `sub
4766+ ?: &(?=(%grec -.a) ?=(%grec -.b))
4767+ ?. &(=(at.a at.b) =(name.a name.b)) ~
4768+ (itype-unify-args args.a args.b sub)
47364769 ?: &(?=(%jrec -.a) ?=(%jrec -.b))
47374770 ?:(&(=(at.a at.b) =(name.a name.b) =(head.a head.b) =(aura.a aura.b) =(tail.a tail.b)) `sub ~)
47384771 ?: &(?=(%recursive -.a) ?=(%recursive -.b))
@@ -4843,6 +4876,7 @@
48434876 %union |((lien cases.t |=(c=itype (itype-has-any-atom c sub))) (lien args.t |=(c=itype (itype-has-any-atom c sub))))
48444877 %recursive |
48454878 %jrec |
4879+ %grec (lien args.t |=(c=itype (itype-has-any-atom c sub)))
48464880 %collection (lien args.t |=(c=itype (itype-has-any-atom c sub)))
48474881 %face $(t body.t)
48484882 %fn |($(t sample.t) $(t product.t))
@@ -4917,6 +4951,7 @@
49174951 %union |((lien cases.typ |=(c=itype (itype-has-fixed-atom c))) (lien args.typ |=(c=itype (itype-has-fixed-atom c))))
49184952 %recursive |
49194953 %jrec |
4954+ %grec (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
49204955 %collection (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
49214956 %face $(typ body.typ)
49224957 %fn |($(typ sample.typ) $(typ product.typ))
@@ -4945,6 +4980,7 @@
49454980 ^- ?
49464981 =. t (itype-walk t sub)
49474982 ?- -.t
4983+ %grec (lien args.t |=(c=itype (itype-has-face c sub)))
49484984 %collection (lien args.t |=(c=itype (itype-has-face c sub)))
49494985 %face &
49504986 %cell |($(t hed.t) $(t tal.t))
@@ -4952,6 +4988,42 @@
49524988 * |
49534989 ==
49544990::
4991+:: Closed function samples may omit a slot face, but a known name must
4992+:: match another known name. Keep nested value faces and require exact
4993+:: invariant compatibility; a faced tail against a cell is ambiguous.
4994+++ itype-closed-slot-match
4995+ |= [a=itype b=itype]
4996+ ^- ?
4997+ ?: &(?=(%face -.a) ?=(%face -.b))
4998+ ?. =(name.a name.b) |
4999+ ?=(^ (itype-unify body.a body.b ~))
5000+ ?: ?=(%face -.a) ?=(^ (itype-unify body.a b ~))
5001+ ?: ?=(%face -.b) ?=(^ (itype-unify a body.b ~))
5002+ ?=(^ (itype-unify a b ~))
5003+++ itype-closed-sample-match
5004+ |= [a=itype b=itype fuel=@ud]
5005+ ^- ?
5006+ ?: =(0 fuel) |
5007+ ?. &(?=(%cell -.a) ?=(%cell -.b)) |
5008+ ?. (itype-closed-slot-match hed.a hed.b) |
5009+ =/ x=itype tal.a
5010+ =/ y=itype tal.b
5011+ ?: &(?=(%cell -.x) ?=(%cell -.y))
5012+ ?=(^ (itype-unify x y ~))
5013+ ?: |(&(?=(%face -.x) ?=(%cell -.y)) &(?=(%cell -.x) ?=(%face -.y))) |
5014+ (itype-closed-slot-match x y)
5015+++ itype-closed-gates-match
5016+ |= [a=itype b=itype]
5017+ ^- ?
5018+ ?. &(?=(%fn -.a) ?=(%fn -.b)) |
5019+ ?. &(?=(%cell -.sample.a) ?=(%cell -.sample.b)) |
5020+ ?. =(product.a product.b) |
5021+ ?^ (itype-vars a) |
5022+ ?^ (itype-vars b) |
5023+ ?: |((itype-has-tag a) (itype-has-tag b)) |
5024+ ?. (itype-closed-sample-match sample.a sample.b 1.024) |
5025+ ?=(^ (itype-unify product.a product.b ~))
5026+::
49555027++ itype-face-asym-collection-args
49565028 |= [as=(list itype) bs=(list itype) sub=isub]
49575029 ^- ?
@@ -4965,6 +5037,9 @@
49655037 ^- ?
49665038 =. a (itype-walk a sub)
49675039 =. b (itype-walk b sub)
5040+ ?: &(?=(%grec -.a) ?=(%grec -.b))
5041+ ?. &(=(at.a at.b) =(name.a name.b)) |
5042+ (itype-face-asym-collection-args args.a args.b sub)
49685043 ?: &(?=(%collection -.a) ?=(%collection -.b))
49695044 ?. =(name.a name.b) |
49705045 (itype-face-asym-collection-args args.a args.b sub)
@@ -4997,6 +5072,12 @@
49975072:: labels. Ignore one raw sample-slot face per written argument while
49985073:: checking value faces as usual. An unknown or variable-bound cell spine
49995074:: cannot justify this distinction, so keep the existing conservative guard.
5075+++ itype-positional-slot-face-asym
5076+ |= [actual=itype expected=itype sub=isub]
5077+ ^- ?
5078+ ?: &(?=(%fn -.actual) ?=(%fn -.expected) (itype-closed-gates-match actual expected)) |
5079+ (itype-face-asym actual expected sub)
5080+::
50005081++ itype-positional-face-asym
50015082 |= [args=(list expr) actual=itype expected=itype sub=isub]
50025083 ^- ?
@@ -5004,11 +5085,11 @@
50045085 ?~ t.args
50055086 =/ slot=itype expected
50065087 =? slot ?=(%face -.slot) body.slot
5007− (itype-face-asym actual slot sub)
5088+ (itype-positional-slot-face-asym actual slot sub)
50085089 ?. &(?=(%cell -.actual) ?=(%cell -.expected)) &
50095090 =/ slot=itype hed.expected
50105091 =? slot ?=(%face -.slot) body.slot
5011− ?: (itype-face-asym hed.actual slot sub) &
5092+ ?: (itype-positional-slot-face-asym hed.actual slot sub) &
50125093 $(args t.args, actual tal.actual, expected tal.expected)
50135094::
50145095++ itype-output-may-be-cell
@@ -5021,6 +5102,7 @@
50215102 %union &
50225103 %recursive &
50235104 %jrec &
5105+ %grec &
50245106 %noun &
50255107 %collection &
50265108 %face $(t body.t)
@@ -5050,6 +5132,7 @@
50505132 ^- ?
50515133 ?- -.t
50525134 %tag &
5135+ %grec (lien args.t |=(c=itype (itype-has-tag c)))
50535136 %collection (lien args.t |=(c=itype (itype-has-tag c)))
50545137 %face $(t body.t)
50555138 %fn |($(t sample.t) $(t product.t))
@@ -5063,6 +5146,7 @@
50635146 ^- ?
50645147 ?- -.t
50655148 %union &
5149+ %grec (lien args.t |=(c=itype (itype-has-union c)))
50665150 %collection (lien args.t |=(c=itype (itype-has-union c)))
50675151 %face $(t body.t)
50685152 %fn |($(t sample.t) $(t product.t))
@@ -5081,6 +5165,7 @@
50815165 %union
50825166 ?: &(?=(~ label.t) ?=(^ args.t)) &
50835167 (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-generic c)))
5168+ %grec |(?=(~ label.t) (lien args.t |=(c=itype (itype-has-hidden-generic c))))
50845169 %collection (lien args.t |=(c=itype (itype-has-hidden-generic c)))
50855170 %face $(t body.t)
50865171 %fn |($(t sample.t) $(t product.t))
@@ -5094,6 +5179,7 @@
50945179 ?- -.t
50955180 %recursive &
50965181 %jrec &
5182+ %grec &
50975183 %collection (lien args.t |=(c=itype (itype-has-recursive c)))
50985184 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-recursive c)))
50995185 %face $(t body.t)
@@ -5108,6 +5194,7 @@
51085194 ?- -.t
51095195 %recursive ?=(~ label.t)
51105196 %jrec ?=(~ label.t)
5197+ %grec |(?=(~ label.t) (lien args.t |=(c=itype (itype-has-hidden-recursive c))))
51115198 %collection (lien args.t |=(c=itype (itype-has-hidden-recursive c)))
51125199 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-recursive c)))
51135200 %face $(t body.t)
@@ -5135,25 +5222,51 @@
51355222 $(cases t.cases, good `trial)
51365223 ==
51375224::
5138−:: A constructor needs a case with its tag at the head and a payload
5139−:: compatible with the expected gate sample. Other case forms do not
5140−:: identify a constructor.
5225+:: A constructor needs a case whose head has the same literal noun as its
5226+:: tag. An unresolved or opaque case may reveal one later, so it cannot
5227+:: prove a mismatch or a unique match. A broad atom mold is not a case.
51415228::
51425229++ itype-fit-ctor-cases
51435230 |= [tag=lit sample=itype cases=(list itype) sub=isub next=@ud]
51445231 ^- ifit
51455232 =/ found=(unit ifit) ~
5233+ =/ pending=? |
51465234 |-
5147− ?~ cases ?~(found [%bad ~] u.found)
5148− =/ c=itype (itype-walk i.cases sub)
5235+ ?~ cases
5236+ ?: pending [%unknown ~]
5237+ ?~ found [%bad ~]
5238+ u.found
5239+ =/ raw=itype i.cases
5240+ ?: ?=(%var -.raw)
5241+ $(cases t.cases, pending &)
5242+ =/ c=itype (itype-walk raw sub)
5243+ ?: ?=(?(%var %tag %recursive %jrec %grec %union %face) -.c)
5244+ $(cases t.cases, pending &)
51495245 ?. ?=(%cell -.c) $(cases t.cases)
5150− =/ head=itype (itype-walk hed.c sub)
5246+ =/ raw-head=itype hed.c
5247+ ?: ?=(%var -.raw-head)
5248+ $(cases t.cases, pending &)
5249+ =/ head=itype (itype-walk raw-head sub)
5250+ :: A single faced, explicitly atom-only head cannot be the tag case.
5251+ :: Do not follow variables or peel nested faces for this negative proof.
5252+ ?: ?=(%face -.head)
5253+ ?: ?=(?(%atom %any-atom %flag %avar %rvar %nvar %rnvar) -.body.head)
5254+ $(cases t.cases)
5255+ $(cases t.cases, pending &)
5256+ ?: ?=(?(%var %tag %recursive %jrec %grec %union) -.head)
5257+ $(cases t.cases, pending &)
51515258 ?. ?=(%const -.head) $(cases t.cases)
5152− ?. =(%term form.literal.head) $(cases t.cases)
51535259 ?. =(val.literal.head val.tag) $(cases t.cases)
5154− ?^ found [%unknown ~]
5260+ :: Equal heads can have disjoint payloads. Test each from the original
5261+ :: substitution; a unique success is usable only with no unknown rival.
51555262 =/ trial=ifit (itype-fit sample tal.c sub next)
5156− $(cases t.cases, found `trial)
5263+ ?- -.trial
5264+ %bad $(cases t.cases)
5265+ %unknown $(cases t.cases, pending &)
5266+ %ok
5267+ ?^ found [%unknown ~]
5268+ $(cases t.cases, found `trial)
5269+ ==
51575270::
51585271++ itype-fit
51595272 |= [actual=itype expected=itype sub=isub next=@ud]
@@ -5177,6 +5290,9 @@
51775290 =. actual (itype-walk actual sub)
51785291 =. expected (itype-walk expected sub)
51795292 ?: =(actual expected) [%ok sub next]
5293+ :: The relation of the source loobean mold to explicit @f is not yet
5294+ :: established. Keep it unsupported rather than asserting a mismatch.
5295+ ?: &(?=(%flag -.actual) ?=(%atom -.expected) =(%f aura.expected)) [%unknown ~]
51805296 :: Any value can be used where a noun is expected. An unresolved
51815297 :: bare tag is fixed as a constant; a constructor still needs a gate.
51825298 ?: ?=(%noun -.expected)
@@ -5186,6 +5302,14 @@
51865302 [%ok sub next]
51875303 :: An arbitrary noun is not known to fit a narrower type.
51885304 ?: &(?=(%noun -.actual) !?=(%var -.expected)) [%unknown ~]
5305+ ?: &(!uncertain ?=(%grec -.actual) ?=(%face -.expected)) $(expected body.expected)
5306+ ?: &(!uncertain ?=(%face -.actual) ?=(%grec -.expected)) $(actual body.actual)
5307+ ?: &(?=(%grec -.actual) ?=(%grec -.expected))
5308+ ?. &(=(at.actual at.expected) =(name.actual name.expected)) [%unknown ~]
5309+ =/ matched=(unit isub) (itype-unify-args args.actual args.expected sub)
5310+ ?~ matched [%unknown ~]
5311+ [%ok u.matched next]
5312+ ?: &(|(?=(%grec -.actual) ?=(%grec -.expected)) !|(?=(%var -.actual) ?=(%var -.expected))) [%unknown ~]
51895313 ?: &(!uncertain ?=(%jrec -.actual) ?=(%face -.expected)) $(expected body.expected)
51905314 ?: &(!uncertain ?=(%face -.actual) ?=(%jrec -.expected)) $(actual body.actual)
51915315 ?: &(?=(%jrec -.actual) ?=(%jrec -.expected))
@@ -5259,6 +5383,10 @@
52595383 ?: ?=(%const -.expected)
52605384 ?:(=(val.literal.actual val.literal.expected) [%ok sub next] [%bad ~])
52615385 ?: ?=(%atom -.expected)
5386+ :: A loobean singleton must not silently widen into another aura.
5387+ ?: =(%loobean form.literal.actual)
5388+ ?: =(%f aura.expected) [%unknown ~]
5389+ [%bad ~]
52625390 ?: |(=(%tas aura.expected) =(%ta aura.expected)) [%ok sub next]
52635391 [%bad ~]
52645392 ?: ?=(%flag -.expected)
@@ -5318,6 +5446,7 @@
53185446 $(actual body.actual, expected body.expected, skip-width |, spine-proof |)
53195447 ?: ?=(%face -.actual) $(actual body.actual, skip-width |, spine-proof |)
53205448 ?: ?=(%face -.expected) $(expected body.expected, skip-width |, spine-proof |)
5449+ ?: &(!uncertain (itype-closed-gates-match actual expected)) [%ok sub next]
53215450 ?: (itype-face-asym actual expected sub) [%unknown ~]
53225451 ?: |((itype-has-any-atom actual sub) (itype-has-any-atom expected sub))
53235452 [%unknown ~]
@@ -5396,7 +5525,15 @@
53965525+$ iderived [name=term agent=term mark=term]
53975526+$ iwidth-definition [name=term original=expr typ=itype sub=isub projections=(list iwprojection)]
53985527+$ iwidth-dependency [at=path source=(unit @t) definitions=(list iwidth-definition)]
5399−+$ ifile [values=ienv molds=imold-types at=path derived=(list iderived) elaborations=(list iwidth-definition) dependencies=(list iwidth-dependency) source=(unit @t)]
5528+:: Nonrecursive request evidence is compiler-owned metadata, not a property
5529+:: of an arbitrary ask value. Reader graphs and source inputs are trusted.
5530++$ irequest-evidence
5531+ [api-at=path name=term path=iapi-path-typed api-source=@t public-source=@t internal-source=@t prelude-values=(list term) prelude-molds=(list term) externals=iexternals marks=imark-externals]
5532+:: A unit distinguishes a verified empty closure from a detached legacy file.
5533+:: The opaque prelude is an exact trusted input, not a recursive interface mold.
5534++$ irequest-graph
5535+ [paths=(set path) requests=(list irequest-evidence) bundle-input=* prelude-input=* prelude-values=(list term) prelude-molds=(list term) externals=iexternals marks=imark-externals]
5536++$ ifile [values=ienv molds=imold-types at=path derived=(list iderived) elaborations=(list iwidth-definition) dependencies=(list iwidth-dependency) source=(unit @t) graph=(unit irequest-graph)]
54005537+$ ijimports (list [face=term interface=ifile])
54015538+$ icap [name=@t id=@ud at=span]
54025539+$ icaps (list icap)
@@ -5499,7 +5636,74 @@
54995636 ?. (width-in-order order.source.shape order.target.shape) ~
55005637 (width-fit-fields index.source.shape order.target.shape sub next)
55015638::
5502−+$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) tags=(list ipending) in-mold=? at=path top-molds=(list term) prelude=(unit ifile) holes=(list ihole) jrec-fuel=@ud projections=(list iwprojection)]
5639+:: Provisional, globally budgeted gate-free proof. %no includes a
5640+:: gate-bearing witness; an uninhabited sibling could invalidate it.
5641+:: Input types must be resolved and normalized under valid substitutions,
5642+:: from trusted source-backed interfaces and reader results. Collection
5643+:: list/unit names rely on their existing identity invariant; this arm
5644+:: does not validate fabricated internal types.
5645++$ igf-segment
5646+ $% [%field name=term]
5647+ [%head ~]
5648+ [%tail ~]
5649+ [%item ~]
5650+ [%case index=@ud]
5651+ ==
5652++$ igate-free [verdict=?(%yes %no %unknown) inhabited=? left=@ud path=(unit (list igf-segment))]
5653+++ gate-free-types
5654+ |= [types=(list itype) fuel=@ud path=(list igf-segment) index=@ud]
5655+ ^- igate-free
5656+ ?~ types [%yes | fuel ~]
5657+ ?: =(0 fuel) [%unknown | 0 ~]
5658+ =/ first=igate-free (gate-free-type i.types fuel [[%case index] path])
5659+ ?: =(%no verdict.first) first
5660+ =/ rest=igate-free $(types t.types, fuel left.first, index +(index))
5661+ ?: =(%no verdict.rest) rest
5662+ =/ inhabited=? |(inhabited.first inhabited.rest)
5663+ ?: |(=(%unknown verdict.first) =(%unknown verdict.rest)) [%unknown inhabited left.rest ~]
5664+ [%yes inhabited left.rest ~]
5665+++ gate-free-type
5666+ |= [typ=itype fuel=@ud path=(list igf-segment)]
5667+ ^- igate-free
5668+ ?: =(0 fuel) [%unknown | 0 ~]
5669+ =. fuel (dec fuel)
5670+ ?- -.typ
5671+ %fn [%no & fuel `(flop path)]
5672+ %atom [%yes & fuel ~]
5673+ %any-atom [%yes & fuel ~]
5674+ %flag [%yes & fuel ~]
5675+ %const [%yes & fuel ~]
5676+ %face $(typ body.typ, path [[%field name.typ] path])
5677+ %cell
5678+ =/ head=igate-free $(typ hed.typ, path [[%head ~] path])
5679+ =/ tail=igate-free $(typ tal.typ, fuel left.head, path [[%tail ~] path])
5680+ =/ inhabited=? &(inhabited.head inhabited.tail)
5681+ ?: &(=(%no verdict.head) inhabited.tail) head(left left.tail)
5682+ ?: &(=(%no verdict.tail) inhabited.head) tail
5683+ ?: |(!=(%yes verdict.head) !=(%yes verdict.tail)) [%unknown inhabited left.tail ~]
5684+ [%yes inhabited left.tail ~]
5685+ %collection
5686+ ?. |(=(%list name.typ) =(%unit name.typ)) [%unknown | fuel ~]
5687+ ?. ?=([* ~] args.typ) [%unknown | fuel ~]
5688+ =/ item=igate-free $(typ i.args.typ, path [[%item ~] path])
5689+ item(inhabited &)
5690+ %union
5691+ ?~ cases.typ [%unknown | fuel ~]
5692+ (gate-free-types cases.typ fuel path 0)
5693+ %noun [%unknown & fuel ~]
5694+ %var [%unknown | fuel ~]
5695+ %avar [%yes & fuel ~]
5696+ %rvar [%yes & fuel ~]
5697+ %nvar [%yes & fuel ~]
5698+ %rnvar [%yes & fuel ~]
5699+ %tag [%unknown | fuel ~]
5700+ %recursive [%unknown | fuel ~]
5701+ %jrec [%yes & fuel ~]
5702+ %grec [%unknown | fuel ~]
5703+ ==
5704+::
5705++$ igate-prelude-evidence [iface=ifile gates=(map term def)]
5706++$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) tags=(list ipending) in-mold=? at=path top-molds=(list term) prelude=(unit ifile) holes=(list ihole) jrec-fuel=@ud projections=(list iwprojection) gate-defs=(map term def) head-evidence=(unit igate-prelude-evidence) grec-index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
55035707+$ idiag [msg=tape sites=(list [at=span note=tape])]
55045708+$ iresult (each [typ=itype state=istate] idiag)
55055709+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -5519,6 +5723,7 @@
55195723 |= [t=itype sub=isub]
55205724 ^- itype
55215725 =. t (itype-walk t sub)
5726+ ?: ?=(%grec -.t) t(args (turn args.t |=(c=itype (itype-normalize c sub))))
55225727 ?: ?=(%collection -.t) [%collection name.t (turn args.t |=(c=itype (itype-normalize c sub)))]
55235728 ?: ?=(%union -.t)
55245729 [%union (turn cases.t |=(c=itype (itype-normalize c sub))) origin.t label.t (turn args.t |=(c=itype (itype-normalize c sub)))]
@@ -5545,6 +5750,7 @@
55455750 %cell |($(t hed.t) $(t tal.t))
55465751 %recursive |
55475752 %jrec |
5753+ %grec &
55485754 %collection (lien args.t |=(c=itype (itype-has-gate c)))
55495755 %face $(t body.t)
55505756 %union (lien cases.t |=(c=itype (itype-has-gate c)))
@@ -5568,6 +5774,7 @@
55685774 ?- -.t
55695775 %nvar [%atom %ud]
55705776 %rnvar [%atom %ud]
5777+ %grec t(args (turn args.t |=(c=itype (default-decimals c))))
55715778 %collection [%collection name.t (turn args.t |=(c=itype (default-decimals c)))]
55725779 %face [%face name.t $(t body.t)]
55735780 %cell [%cell $(t hed.t) $(t tal.t)]
@@ -5609,6 +5816,7 @@
56095816 %tag |
56105817 %any-atom &
56115818 %union &((levy cases.t |=(c=itype (hole-known c state))) (levy args.t |=(c=itype (hole-known c state))))
5819+ %grec (levy args.t |=(c=itype (hole-known c state)))
56125820 %collection (levy args.t |=(c=itype (hole-known c state)))
56135821 %face $(t body.t)
56145822 %fn &($(t sample.t) $(t product.t))
@@ -5618,6 +5826,8 @@
56185826++ promote-restricted-numbers
56195827 |= [state=istate env=ienv]
56205828 ^- istate
5829+ :: With no written capitals, there is nothing to promote.
5830+ ?~ caps.state state
56215831 =/ ids=(list @ud) (turn caps.state |=(c=icap id.c))
56225832 =/ free=(list @ud) (free-env-vars env sub.state)
56235833 |-
@@ -5654,6 +5864,7 @@
56545864 ?- -.t
56555865 ?(%tag %nvar %rnvar %avar %rvar) !(hole-known t state)
56565866 %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
5867+ %grec (lien args.t |=(c=itype (hole-uncertain c state)))
56575868 %collection (lien args.t |=(c=itype (hole-uncertain c state)))
56585869 %face $(t body.t)
56595870 %fn |($(t sample.t) $(t product.t))
@@ -5690,6 +5901,7 @@
56905901 %union (zing (turn (weld args.t cases.t) |=(c=itype (itype-vars c))))
56915902 %recursive ~
56925903 %jrec ~
5904+ %grec (zing (turn args.t |=(c=itype (itype-vars c))))
56935905 %collection (zing (turn args.t |=(c=itype (itype-vars c))))
56945906 %face $(t body.t)
56955907 %fn (weld $(t sample.t) $(t product.t))
@@ -5738,6 +5950,7 @@
57385950 %union [%union (turn cases.t |=(c=itype (itype-rename c ren))) origin.t label.t (turn args.t |=(c=itype (itype-rename c ren)))]
57395951 %recursive t
57405952 %jrec t
5953+ %grec t(args (turn args.t |=(c=itype (itype-rename c ren))))
57415954 %collection [%collection name.t (turn args.t |=(c=itype (itype-rename c ren)))]
57425955 %face [%face name.t $(t body.t)]
57435956 %fn [%fn $(t sample.t) $(t product.t)]
@@ -5765,6 +5978,7 @@
57655978 %union |((lien cases.t |=(c=itype (itype-var-is-atom n c))) (lien args.t |=(c=itype (itype-var-is-atom n c))))
57665979 %recursive |
57675980 %jrec |
5981+ %grec (lien args.t |=(c=itype (itype-var-is-atom n c)))
57685982 %collection (lien args.t |=(c=itype (itype-var-is-atom n c)))
57695983 %face $(t body.t)
57705984 %fn |($(t sample.t) $(t product.t))
@@ -5788,6 +6002,7 @@
57886002 %union |((lien cases.t |=(c=itype (itype-var-is-restricted n c))) (lien args.t |=(c=itype (itype-var-is-restricted n c))))
57896003 %recursive |
57906004 %jrec |
6005+ %grec (lien args.t |=(c=itype (itype-var-is-restricted n c)))
57916006 %collection (lien args.t |=(c=itype (itype-var-is-restricted n c)))
57926007 %face $(t body.t)
57936008 %fn |($(t sample.t) $(t product.t))
@@ -6218,6 +6433,16 @@
62186433 ?: &(?=(~ vars.template) ?=(%jrec -.typ.template) =(at.typ.template origin) =(name.typ.template name)) `name.i.molds
62196434 $(molds t.molds)
62206435::
6436+++ grec-visible-alias
6437+ |= [origin=path name=term proof=shape args=(list itype) molds=imold-types]
6438+ ^- (unit term)
6439+ ?~ molds ~
6440+ =/ template=ischeme template.i.molds
6441+ ?. ?=(%grec -.typ.template) $(molds t.molds)
6442+ ?. &(=(at.typ.template origin) =(name.typ.template name) =(proof.typ.template proof)) $(molds t.molds)
6443+ ?. &((identity-union-parameters vars.template args.typ.template) =((lent vars.template) (lent args))) $(molds t.molds)
6444+ `name.i.molds
6445+::
62216446++ itype-in-import
62226447 |= [t=itype iface=ifile face=term prelude=(unit ifile)]
62236448 ^- itype
@@ -6237,6 +6462,11 @@
62376462 `(crip "{(trip u.alias)}.{(trip face)}")
62386463 [%union (turn cases.t |=(c=itype (itype-in-import c iface face prelude))) origin.t label (turn args.t |=(c=itype (itype-in-import c iface face prelude)))]
62396464 %recursive [%recursive module.t name.t ~]
6465+ %grec
6466+ =/ public=(unit term) ?~(prelude ~ (grec-visible-alias at.t name.t proof.t args.t molds.u.prelude))
6467+ =/ alias=(unit term) ?~(public (grec-visible-alias at.t name.t proof.t args.t molds.iface) public)
6468+ =/ label=(unit @t) ?~(alias ~ ?~(public `(crip "{(trip u.alias)}.{(trip face)}") `u.alias))
6469+ t(label label, args (turn args.t |=(c=itype (itype-in-import c iface face prelude))))
62406470 %jrec
62416471 =/ public=(unit term) ?~(prelude ~ (jrec-alias at.t name.t molds.u.prelude))
62426472 ?^ public t(label `u.public)
@@ -6349,9 +6579,29 @@
63496579 ?. =(names.tail ~[name]) ~
63506580 `[%jrec at.state name `name name.i.fs aura.shape.i.fs name.i.t.fs]
63516581::
6582+++ simple-source-generic-recursive
6583+ |= [name=term sh=shape args=(list itype) state=istate]
6584+ ^- (unit itype)
6585+ ?. ?=(%generic -.sh) ~
6586+ ?. ?=([@ ~] vars.sh) ~
6587+ ?. ?=([* ~] args) ~
6588+ ?~ grec-index.state ~
6589+ ?. =(at.u.grec-index.state at.state) ~
6590+ ?~ prelude.state ~
6591+ ?. =(prelude.u.grec-index.state u.prelude.state) ~
6592+ =/ proof=(unit shape) (~(get by shapes.u.grec-index.state) name)
6593+ ?~ proof ~
6594+ ?. =(u.proof sh) ~
6595+ `[%grec at.state name `name sh args]
6596+::
6597+
63526598++ infer-mold-template
63536599 |= [sh=shape state=istate]
63546600 ^- (unit [template=ischeme state=istate])
6601+ =/ generic=(unit itype)
6602+ ?. ?=([@ ~] active.state) ~
6603+ (simple-source-generic-recursive i.active.state sh ~[[%var next.state]] state)
6604+ ?^ generic `[[u.generic ~[next.state]] state(next +(next.state))]
63556605 =/ direct=(unit itype)
63566606 ?. ?=([@ ~] active.state) ~
63576607 (simple-source-recursive i.active.state sh state)
@@ -6409,7 +6659,7 @@
64096659 ?~ found ~
64106660 ?^ t.found ~
64116661 result.i.found
6412− ?. ?=([%invalid ?(%aura %core) @] raw) ~
6662+ ?. ?=([%invalid ?(%aura %core %overlap) @] raw) ~
64136663 `["{(trip +>.raw)}" ~[[at.sh "invalid imported mold"]]]
64146664::
64156665:: Replay only the shape branches whose evaluation order we can prove.
@@ -6485,7 +6735,8 @@
64856735 %flag `[[%flag ~] state]
64866736 %noun `[[%noun ~] state]
64876737 %const
6488− ?. |(=(%term form.lit.sh) =(%null form.lit.sh)) ~
6738+ ?. |(=(%term form.lit.sh) =(%null form.lit.sh) =(%loobean form.lit.sh)) ~
6739+ ?: &(=(%loobean form.lit.sh) !|(=(0 val.lit.sh) =(1 val.lit.sh))) ~
64896740 `[[%const lit.sh] state]
64906741 %union
64916742 =/ pairs=(list upair) (union-pairs cases.sh molds.state)
@@ -6563,6 +6814,8 @@
65636814 ?~ applied ~
65646815 `[u.applied state.u.args]
65656816 ?. ?=(%generic -.u.found) ~
6817+ =/ grec=(unit itype) (simple-source-generic-recursive n u.found types.u.args state.u.args)
6818+ ?^ grec `[u.grec state.u.args]
65666819 ?. (distinct-params vars.u.found) ~
65676820 =/ params=(unit iparams) (bind-params vars.u.found types.u.args)
65686821 ?~ params ~
@@ -7624,9 +7877,57 @@
76247877 =/ cell=itype [%cell [%face head.typ [%atom aura.typ]] [%face tail.typ typ]]
76257878 [%& [%union ~[nil cell] ~ ~ ~] state.p.subject(jrec-fuel (dec jrec-fuel.state.p.subject))]
76267879::
7880+:: Experimental bounded, source-proven tree match. Only two explicit
7881+:: flat tag/binder patterns may consume the view: a whole-case binder
7882+:: must not leak the temporary structural representation.
7883+++ grec-simple-pattern
7884+ |= [pat=pattern view=itype]
7885+ ^- ?
7886+ ?. ?=(%cell -.pat) |
7887+ ?~ items.pat |
7888+ =/ first=pattern i.items.pat
7889+ ?. ?=(%lit -.first) |
7890+ ?. =(%term form.lit.first) |
7891+ =/ chosen=(unit itype) (contextual-tagged-case view val.lit.first ~)
7892+ ?~ chosen |
7893+ ?> ?=(%cell -.u.chosen)
7894+ =/ rest=(list pattern) t.items.pat
7895+ ?. (levy rest |=(p=pattern |(?=(%bind -.p) ?=(%any -.p)))) |
7896+ ?: ?=(%cell -.tal.u.chosen) ?=([* [* ~]] rest)
7897+ ?=([* ~] rest)
7898+++ grec-match-view
7899+ |= [e=expr subject=iresult]
7900+ ^- iresult
7901+ ?: ?=(%| -.subject) subject
7902+ ?. ?=(%branch -.e) subject
7903+ ?. (grec-direct-context typ.p.subject sub.state.p.subject) subject
7904+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
7905+ ?. ?=(%grec -.typ) subject
7906+ ?~ arms.e subject
7907+ ?. |(?=(~ t.arms.e) ?=([* ~] t.arms.e)) subject
7908+ =/ view=(unit [view=itype left=@ud]) (grec-unfold-view typ jrec-fuel.state.p.subject)
7909+ ?~ view [%| ["recursive mold unfolding needs unsupported inference" ~]]
7910+ ?. (grec-simple-pattern pat.i.arms.e view.u.view) subject
7911+ =/ rest-ok=? ?~(t.arms.e & (grec-simple-pattern pat.i.t.arms.e view.u.view))
7912+ ?. rest-ok subject
7913+ [%& view.u.view state.p.subject(jrec-fuel left.u.view)]
7914+::
7915+:: A single-arm diagnostic only probes a direct, source-typed in-scope wing;
7916+:: other subjects retain the prior single-pattern inference path.
7917+++ grec-single-wing-subject
7918+ |= [e=expr env=ienv state=istate]
7919+ ^- (unit iresult)
7920+ ?. ?=(%wing -.e) ~
7921+ ?. ?=([@ ~] names.e) ~
7922+ =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
7923+ ?~ scheme ~
7924+ ?. (grec-direct-context typ.u.scheme sub.state) ~
7925+ `(infer-fragment e env state)
7926+::
76277927++ infer-known-union-branch-subject
76287928 |= [e=expr env=ienv subject=iresult]
76297929 ^- iresult
7930+ =. subject (grec-match-view e subject)
76307931 =. subject (jrec-match-view e subject)
76317932 =/ whole=(unit iresult) (infer-known-union-whole e env subject)
76327933 ?~ whole (infer-known-union-finite e env subject ~)
@@ -7641,6 +7942,7 @@
76417942++ infer-known-union-context-subject
76427943 |= [e=expr expected=itype env=ienv subject=iresult context=span]
76437944 ^- iresult
7945+ =. subject (grec-match-view e subject)
76447946 =. subject (jrec-match-view e subject)
76457947 =/ whole=(unit iresult) (infer-known-union-context-whole e expected env subject context)
76467948 ?~ whole (infer-known-union-finite e env subject `[expected context])
@@ -7693,7 +7995,7 @@
76937995 =/ subject=iresult (infer-fragment e env state)
76947996 ?: ?=(%| -.subject) ?:((union-subject-call e) `subject ~)
76957997 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
7696− ?. |(?=(%union -.typ) ?=(%jrec -.typ)) ~
7998+ ?. |(?=(%union -.typ) ?=(%jrec -.typ) &(?=(%grec -.typ) (grec-direct-context typ.p.subject sub.state.p.subject))) ~
76977999 `subject
76988000::
76998001::
@@ -7965,6 +8267,8 @@
79658267 %branch
79668268 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
79678269 ?~ t.arms.e
8270+ =/ single=(unit iresult) (grec-single-wing-subject subject.e env state)
8271+ ?^ single (infer-known-union-branch-subject e env u.single)
79688272 ?: (single-structured-pattern e) (infer-single-case-branch e env state ~)
79698273 (infer-cell-branch e env state ~)
79708274 ?^ t.t.arms.e (infer-known-union-branch e env state)
@@ -8081,6 +8385,234 @@
80818385 ?: ?=(%| -.out) [%| p.out]
80828386 [%& [e typ.p.out sub.state.p.out (flop projections.state.p.out)]]
80838387::
8388+:: Source-bound gate-layout evidence, confined to checked root gate
8389+:: definitions and direct unshadowed prelude calls. The prepared prelude
8390+:: interface and its retained source are trusted as a matching artifact.
8391+:: Layouts identify sample binder faces; they do not change call arity or
8392+:: authorize stripping nested value faces. Unknown origins use ordinary fit.
8393+++ direct-written-gates
8394+ |= [ds=(list def) out=ivisited]
8395+ ^- ivisited
8396+ ?~ ds out
8397+ ?: ?=(%mold -.i.ds) $(ds t.ds)
8398+ ?. |(?=(%gate -.val.i.ds) ?=(%gate-wide -.val.i.ds)) $(ds t.ds)
8399+ $(ds t.ds, out (~(put by out) name.i.ds &))
8400+++ direct-may-use-prelude
8401+ |= [ds=(list def) root=ivisited heads=ivisited]
8402+ ^- ?
8403+ ?~ ds |
8404+ ?: ?=(%mold -.i.ds) $(ds t.ds)
8405+ =/ refs=(list term) (dependency-expr val.i.ds)
8406+ =/ has-root=? (lien refs |=(n=term ?=(^ (~(get by root) n))))
8407+ =/ has-head=? (lien refs |=(n=term ?=(^ (~(get by heads) n))))
8408+ ?: &(has-root has-head) &
8409+ $(ds t.ds)
8410+++ direct-unique-names
8411+ |= [names=(list term) seen=ivisited]
8412+ ^- ?
8413+ ?~ names &
8414+ ?: ?=(^ (~(get by seen) i.names)) |
8415+ $(names t.names, seen (~(put by seen) i.names &))
8416+++ direct-prelude-evidence
8417+ |= [ds=(list def) prelude=(unit ifile)]
8418+ ^- (unit igate-prelude-evidence)
8419+ ?~ prelude ~
8420+ ?~ source.u.prelude ~
8421+ =/ root=ivisited (direct-written-gates ds ~)
8422+ =/ names=(list term) (turn values.u.prelude |=(e=[name=term scheme=ischeme] name.e))
8423+ =/ heads=ivisited (graph-nameset names ~)
8424+ ?. (direct-may-use-prelude ds root heads) ~
8425+ =/ parsed (parse at.u.prelude u.source.u.prelude)
8426+ ?: ?=(%| -.parsed) ~
8427+ ?^ (duplicate-defs defs.p.parsed) ~
8428+ ?. (direct-unique-names (global-value-names defs.p.parsed) ~) ~
8429+ =/ gates=(map term def) (direct-checked-gates defs.p.parsed values.u.prelude)
8430+ `[u.prelude gates]
8431+++ direct-checked-gates
8432+ |= [ds=(list def) env=ienv]
8433+ ^- (map term def)
8434+ =/ names=(list term) (turn env |=(e=[name=term scheme=ischeme] name.e))
8435+ =/ known=ivisited (graph-nameset names ~)
8436+ =/ out=(map term def) ~
8437+ |-
8438+ ?~ ds out
8439+ =/ d=def i.ds
8440+ ?: ?=(%mold -.d) $(ds t.ds)
8441+ ?. ?=(^ (~(get by known) name.d)) $(ds t.ds)
8442+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) $(ds t.ds)
8443+ $(ds t.ds, out (~(put by out) name.d d))
8444+++ direct-find-gate
8445+ |= [n=term ds=(list def)]
8446+ ^- (unit def)
8447+ ?~ ds ~
8448+ ?: &(?=(%value -.i.ds) =(n name.i.ds)) `i.ds
8449+ $(ds t.ds)
8450+++ direct-gate-sample
8451+ |= d=def
8452+ ^- (unit sample)
8453+ ?. ?=(%value -.d) ~
8454+ ?- -.val.d
8455+ %gate `sample.val.d
8456+ %gate-wide `sample.val.d
8457+ * ~
8458+ ==
8459+++ direct-sample-name
8460+ |= sam=sample
8461+ ^- (unit term)
8462+ ?- -.sam
8463+ %bind `name.sam
8464+ %face `name.sam
8465+ %pun `name.sam
8466+ * ~
8467+ ==
8468+++ direct-field-name
8469+ |= f=field
8470+ ^- (unit term)
8471+ ?- -.f
8472+ %face `name.f
8473+ %pun `name.f
8474+ * ~
8475+ ==
8476+++ direct-slot-body
8477+ |= [typ=itype name=(unit term)]
8478+ ^- (unit itype)
8479+ ?~ name `typ
8480+ ?. ?=(%face -.typ) ~
8481+ ?. =(name.typ u.name) ~
8482+ `body.typ
8483+++ direct-invariant
8484+ |= [a=itype b=itype sub=isub next=@ud]
8485+ ^- ifit
8486+ ?: (itype-face-asym a b sub) [%unknown ~]
8487+ =/ forward=ifit (itype-fit a b sub next)
8488+ ?. ?=(%ok -.forward) [%unknown ~]
8489+ ?: (itype-face-asym a b sub.forward) [%unknown ~]
8490+ =/ reverse=ifit (itype-fit b a sub.forward next.forward)
8491+ ?. ?=(%ok -.reverse) [%unknown ~]
8492+ reverse
8493+++ direct-function-fit
8494+ |= [a=itype b=itype sam=sample sh=shape sub=isub next=@ud]
8495+ ^- ifit
8496+ ?. &(?=(%fn -.a) ?=(%fn -.b) ?=(%cell -.sam) ?=(%fn -.sh)) [%unknown ~]
8497+ ?. ?=(%cell -.sample.sh) [%unknown ~]
8498+ =/ as=(list sample) items.sam
8499+ =/ bs=(list field) fields.sample.sh
8500+ ?~ as [%unknown ~]
8501+ ?~ t.as [%unknown ~]
8502+ ?^ t.t.as [%unknown ~]
8503+ ?~ bs [%unknown ~]
8504+ ?~ t.bs [%unknown ~]
8505+ ?^ t.t.bs [%unknown ~]
8506+ ?. &(?=(%cell -.sample.a) ?=(%cell -.sample.b)) [%unknown ~]
8507+ =/ an=(unit term) (direct-sample-name i.as)
8508+ =/ bn=(unit term) (direct-field-name i.bs)
8509+ ?: &(?=(^ an) ?=(^ bn) !=(u.an u.bn)) [%unknown ~]
8510+ =/ x=(unit itype) (direct-slot-body hed.sample.a an)
8511+ =/ y=(unit itype) (direct-slot-body hed.sample.b bn)
8512+ ?~ x [%unknown ~]
8513+ ?~ y [%unknown ~]
8514+ =/ first=ifit (direct-invariant u.x u.y sub next)
8515+ ?. ?=(%ok -.first) [%unknown ~]
8516+ =. an (direct-sample-name i.t.as)
8517+ =. bn (direct-field-name i.t.bs)
8518+ ?: &(?=(^ an) ?=(^ bn) !=(u.an u.bn)) [%unknown ~]
8519+ =/ x2=(unit itype) (direct-slot-body tal.sample.a an)
8520+ =/ y2=(unit itype) (direct-slot-body tal.sample.b bn)
8521+ ?~ x2 [%unknown ~]
8522+ ?~ y2 [%unknown ~]
8523+ =/ second=ifit (direct-invariant u.x2 u.y2 sub.first next.first)
8524+ ?. ?=(%ok -.second) [%unknown ~]
8525+ (direct-invariant product.a product.b sub.second next.second)
8526+:: This is a tentative proof: its caller must require closed call samples
8527+:: and repeat every positional check under the stable final substitution.
8528+++ direct-positional-fit
8529+ |= [args=(list expr) slots=(list sample) actual=itype expected=itype env=ienv state=istate sub=isub next=@ud]
8530+ ^- ifit
8531+ ?~ args [%unknown ~]
8532+ ?~ slots [%unknown ~]
8533+ =/ last=? ?=(~ t.args)
8534+ ?: !=(last ?=(~ t.slots)) [%unknown ~]
8535+ =/ split=(unit [left=itype right=itype])
8536+ ?: last `[actual expected]
8537+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
8538+ `[hed.actual hed.expected]
8539+ ?~ split [%unknown ~]
8540+ =/ x=itype left.u.split
8541+ =/ y=itype right.u.split
8542+ =/ expected-name=(unit term) (direct-sample-name i.slots)
8543+ =/ expected-body=(unit itype) (direct-slot-body y expected-name)
8544+ ?~ expected-body [%unknown ~]
8545+ =. y u.expected-body
8546+ =/ fit=ifit (itype-fit x y sub next)
8547+ =/ accepted=? &(?=(%ok -.fit) !(itype-positional-slot-face-asym x y sub.fit))
8548+ =/ result=(unit ifit)
8549+ ?: accepted `fit
8550+ ?. &(?=(%face -.i.slots) ?=(%fn -.shape.i.slots)) ~
8551+ ?. ?=(%wing -.i.args) ~
8552+ ?. ?=([@ ~] names.i.args) ~
8553+ ?. (unique-value-name i.names.i.args globals.state) ~
8554+ =/ source=(unit def) (~(get by gate-defs.state) i.names.i.args)
8555+ ?~ source ~
8556+ =/ sample=(unit sample) (direct-gate-sample u.source)
8557+ ?~ sample ~
8558+ =/ trial=ifit (direct-function-fit x y u.sample shape.i.slots sub next)
8559+ ?. ?=(%ok -.trial) ~
8560+ `trial
8561+ ?~ result [%unknown ~]
8562+ =. fit u.result
8563+ ?: last fit
8564+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) [%unknown ~]
8565+ ?. ?=(%ok -.fit) [%unknown ~]
8566+ $(args t.args, slots t.slots, actual tal.actual, expected tal.expected, sub sub.fit, next next.fit)
8567+++ direct-any-gate-arg
8568+ |= [args=(list expr) defs=(map term def)]
8569+ ^- ?
8570+ ?~ args |
8571+ =/ found=?
8572+ ?. ?=(%wing -.i.args) |
8573+ ?. ?=([@ ~] names.i.args) |
8574+ ?=(^ (~(get by defs) i.names.i.args))
8575+ ?: found &
8576+ $(args t.args)
8577+++ direct-gate-call-fit
8578+ |= [e=expr actual=itype expected=itype env=ienv state=istate]
8579+ ^- (unit ifit)
8580+ ?. ?=(%call -.e) ~
8581+ ?~ args.e ~
8582+ ?~ t.args.e ~
8583+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
8584+ ?. ?=(%wing -.head.e) ~
8585+ ?. ?=([@ ~] names.head.e) ~
8586+ ?. ?=(~ (ienv-lookup i.names.head.e env)) ~
8587+ ?. (unique-value-name i.names.head.e globals.state) ~
8588+ ?. (direct-any-gate-arg args.e gate-defs.state) ~
8589+ ?~ prelude.state ~
8590+ ?~ source.u.prelude.state ~
8591+ ?~ head-evidence.state ~
8592+ ?. =(u.prelude.state iface.u.head-evidence.state) ~
8593+ ?. ?=(^ (ienv-lookup i.names.head.e values.u.prelude.state)) ~
8594+ =/ head=(unit def) (~(get by gates.u.head-evidence.state) i.names.head.e)
8595+ ?~ head ~
8596+ =/ sam=(unit sample) (direct-gate-sample u.head)
8597+ ?~ sam ~
8598+ ?. ?=(%cell -.u.sam) ~
8599+ =/ fit=ifit (direct-positional-fit args.e items.u.sam actual expected env state sub.state next.state)
8600+ ?. ?=(%ok -.fit) ~
8601+ :: Enclosing inference may add constraints after this call. Only a
8602+ :: closed call-sample proof can remain stable under those later bindings.
8603+ =/ actual-final=itype (itype-normalize actual sub.fit)
8604+ =/ expected-final=itype (itype-normalize expected sub.fit)
8605+ ?^ (itype-vars actual-final) ~
8606+ ?^ (itype-vars expected-final) ~
8607+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
8608+ :: A later argument may resolve a variable used by an earlier slot.
8609+ :: Recheck every fit and face against the completed substitution; no
8610+ :: additional binding or fresh variable is permitted in the second pass.
8611+ =/ verified=ifit (direct-positional-fit args.e items.u.sam actual expected env state sub.fit next.fit)
8612+ ?. ?=(%ok -.verified) ~
8613+ ?. &(=(sub.fit sub.verified) =(next.fit next.verified)) ~
8614+ `fit
8615+::
80848616++ infer-call-with-head
80858617 |= [e=expr env=ienv state=istate head=iresult]
80868618 ^- iresult
@@ -8107,6 +8639,10 @@
81078639 =/ fit=ifit
81088640 ?^ t.args.e (itype-fit-inner typ.p.arg sample.ht sub.st next.st & |)
81098641 (itype-fit typ.p.arg sample.ht sub.st next.st)
8642+ =/ direct=(unit ifit)
8643+ ?: ?=(%ok -.fit) ~
8644+ (direct-gate-call-fit e typ.p.arg sample.ht env st)
8645+ =. fit ?~(direct fit u.direct)
81108646 ?: ?=(%unknown -.fit) [%| ["call constraint is not supported by partial inference" ~]]
81118647 ?: ?=(%bad -.fit)
81128648 ?~ t.args.e
@@ -8123,6 +8659,7 @@
81238659 =/ arg-type=itype ?~(bad typ.p.arg typ.u.bad)
81248660 [%| ["call's sample and argument types do not unify" ~[[(span-of head.e) (site-type-note "called gate" ht sub.st)] [arg-at (site-type-note "argument" arg-type sub.st)]]]]
81258661 =/ face-asym=?
8662+ ?^ direct |
81268663 ?^ t.args.e (itype-positional-face-asym args.e typ.p.arg sample.ht sub.fit)
81278664 (itype-face-asym typ.p.arg sample.ht sub.fit)
81288665 ?: &((itype-has-face typ.p.arg sub.fit) face-asym (itype-output-may-be-cell product.ht sub.fit))
@@ -8189,9 +8726,10 @@
81898726 [%| ["unit payload does not fit its expected type" ~[[context (site-type-note "expected unit payload" payload sub.state.p.value)] [(span-of val.e) (site-type-note "payload" typ.p.value sub.state.p.value)]]]]
81908727 [%& expected state.p.value(sub sub.fit, next next.fit)]
81918728::
8192−:: A known gate whose result is still an inference variable can receive
8193−:: an enclosing target before its argument is inferred. Other products
8194−:: and unresolved calls use the existing directional path unchanged.
8729+:: A known gate may receive an enclosing target before its argument is
8730+:: inferred when its result is open or a direct, matching named generic
8731+:: union. Opaque, recursive, tag-constrained and variable-bound union
8732+:: results keep the existing directional path.
81958733++ infer-contextual-call
81968734 |= [e=expr expected=itype env=ienv state=istate]
81978735 ^- iresult
@@ -8202,7 +8740,21 @@
82028740 =/ ht=itype (itype-walk typ.p.head sub.state.p.head)
82038741 ?. ?=(%fn -.ht) (infer-call-with-head e env state head)
82048742 =/ result=itype (itype-walk product.ht sub.state.p.head)
8205− ?. ?=(%var -.result) (infer-call-with-head e env state head)
8743+ =/ eligible=?
8744+ ?: ?=(%var -.result) &
8745+ :: A direct known generic union may receive the same nominal result
8746+ :: context before its arguments are checked. Variable-bound origins,
8747+ :: pending tags, recursive identities and unknown atoms stay open.
8748+ ?. &(?=(%union -.product.ht) ?=(%union -.result) ?=(%union -.expected)) |
8749+ ?~ origin.result |
8750+ ?. =(origin.result origin.expected) |
8751+ ?~ args.result |
8752+ ?. =((lent args.result) (lent args.expected)) |
8753+ ?: |((itype-has-tag (itype-normalize result sub.state.p.head)) (itype-has-tag (itype-normalize expected sub.state.p.head))) |
8754+ ?: |((itype-has-recursive (itype-normalize result sub.state.p.head)) (itype-has-recursive (itype-normalize expected sub.state.p.head))) |
8755+ ?: |((itype-has-any-atom result sub.state.p.head) (itype-has-any-atom expected sub.state.p.head)) |
8756+ &
8757+ ?. eligible (infer-call-with-head e env state head)
82068758 ?: |(?=(%var -.expected) ?=(%avar -.expected) ?=(%rvar -.expected) |(?=(%nvar -.expected) ?=(%rnvar -.expected)) (itype-has-tag (itype-normalize expected sub.state.p.head)))
82078759 (infer-call-with-head e env state head)
82088760 =/ sub=(unit isub) (itype-unify result expected sub.state.p.head)
@@ -8290,6 +8842,93 @@
82908842 =/ st=istate state.p.value(sub sub.u.project, next next.u.project)
82918843 [%& expected st(projections [[at.e e typ.p.value expected steps.u.project] projections.st])]
82928844::
8845+:: A known literal singleton in a direct union can contextualize a
8846+:: loobean literal of the same noun. Only explicit singleton and cell
8847+:: competitors are considered; opaque or variable cases stay unknown.
8848+++ explicit-singleton-in-union
8849+ |= [t=itype noun=@]
8850+ ^- ?
8851+ ?. ?=(%union -.t) |
8852+ =/ cases=(list itype) cases.t
8853+ =/ found=? |
8854+ |-
8855+ ?~ cases found
8856+ =/ c=itype i.cases
8857+ ?: ?=(%cell -.c) $(cases t.cases)
8858+ ?. ?=(%const -.c) |
8859+ ?: =(noun val.literal.c)
8860+ ?: found |
8861+ $(cases t.cases, found &)
8862+ $(cases t.cases)
8863+::
8864+:: Select a written literal-headed case only when every competing case is
8865+:: also an explicit singleton-headed cell and exactly one matches. Opaque,
8866+:: variable-bound and differently shaped cases keep inference unchanged.
8867+:: This first slice supplies context to a directly called payload. Plain
8868+:: literal data and other expressions retain their existing inference path.
8869+++ contextual-atomic-arguments
8870+ |= args=(list expr)
8871+ ^- ?
8872+ ?~ args &
8873+ ?. ?=(?(%lit %wing %ctor) -.i.args) |
8874+ $(args t.args)
8875+++ contextual-direct-payload-call
8876+ |= e=expr
8877+ ^- ?
8878+ ?: ?=(%group -.e) $(e inner.e)
8879+ ?. ?=(%call -.e) |
8880+ ?. ?=(%wing -.head.e) |
8881+ ?~ args.e |
8882+ (contextual-atomic-arguments args.e)
8883+::
8884+:: A walked variable may have concealed a union inside a substituted
8885+:: structure before this arm was called. Decline in that case rather than
8886+:: deriving provenance from the already-walked type.
8887+++ contextual-simple-sub
8888+ |= sub=isub
8889+ ^- ?
8890+ ?~ sub &
8891+ ?: ?=(?(%cell %face %fn %union %collection) -.val.i.sub) |
8892+ $(sub t.sub)
8893+::
8894+:: Check the syntactic root before scanning; scan substitutions once.
8895+++ grec-direct-context
8896+ |= [expected=itype sub=isub]
8897+ ^- ?
8898+ =/ left=@ud 4.096
8899+ |-
8900+ ?: ?=(%face -.expected)
8901+ ?: =(0 left) |
8902+ $(expected body.expected, left (dec left))
8903+ ?. ?=(%grec -.expected) |
8904+ ?~ sub &
8905+ ?: =(0 left) |
8906+ ?: ?=(?(%cell %face %fn %union %collection %grec) -.val.i.sub) |
8907+ $(sub t.sub, left (dec left))
8908+++ contextual-direct-union
8909+ |= target=itype
8910+ ^- ?
8911+ ?: ?=(%face -.target) $(target body.target)
8912+ ?=(%union -.target)
8913+++ contextual-tagged-case
8914+ |= [target=itype tag=@ sub=isub]
8915+ ^- (unit itype)
8916+ ?. ?=(%union -.target) ~
8917+ =/ remaining=(list itype) cases.target
8918+ =/ found=(unit itype) ~
8919+ =/ seen=(set @) *(set @)
8920+ |-
8921+ ?~ remaining found
8922+ =/ c=itype i.remaining
8923+ ?. ?=(%cell -.c) ~
8924+ =/ head=itype hed.c
8925+ ?. ?=(%const -.head) ~
8926+ ?: (~(has in:..zuse seen) val.literal.head) ~
8927+ =. seen (~(put in:..zuse seen) val.literal.head)
8928+ ?: =(tag val.literal.head)
8929+ $(remaining t.remaining, found `c)
8930+ $(remaining t.remaining)
8931+::
82938932++ infer-call-context-arg
82948933 |= [e=expr expected=itype env=ienv state=istate context=span]
82958934 ^- iresult
@@ -8305,6 +8944,23 @@
83058944 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
83068945 ?: (explicit-proj-call e env state)
83078946 (infer-proj-context e expected env state context)
8947+ :: Experimental construction only for a source-proven direct target.
8948+ :: Decline any walked structural binding to retain raw-variable provenance.
8949+ ?: &(?=(%grec -.target) ?=(%tuple -.e) (grec-direct-context expected sub.state))
8950+ =/ unfolded=(unit [view=itype left=@ud]) (grec-unfold-view target jrec-fuel.state)
8951+ ?~ unfolded [%| ["recursive mold unfolding needs unsupported inference" ~]]
8952+ ?~ items.e [%| ["recursive mold constructor needs unsupported inference" ~]]
8953+ =/ first=item i.items.e
8954+ ?. &(?=(~ face.first) ?=(%lit -.val.first) =(%term form.lit.val.first))
8955+ [%| ["recursive mold constructor needs unsupported inference" ~]]
8956+ =/ chosen=(unit itype) (contextual-tagged-case view.u.unfolded val.lit.val.first sub.state)
8957+ ?~ chosen [%| ["recursive mold constructor has no matching case" ~]]
8958+ =/ value=iresult (infer-call-context-items items.e u.chosen env state(jrec-fuel left.u.unfolded) context)
8959+ ?: ?=(%| -.value) value
8960+ =/ fit=ifit (itype-fit typ.p.value u.chosen sub.state.p.value next.state.p.value)
8961+ ?: ?=(%unknown -.fit) [%| ["recursive mold case needs unsupported inference" ~]]
8962+ ?: ?=(%bad -.fit) [%| ["recursive mold case does not fit its source shape" ~]]
8963+ [%& target state.p.value(sub sub.fit, next next.fit)]
83088964 :: Only the source-proven one-layer cell is exposed. Each recursive
83098965 :: descent consumes one written tuple; named values use ordinary fit.
83108966 ?: &(?=(%jrec -.target) ?=(%lit -.e) =(%null form.lit.e))
@@ -8323,16 +8979,18 @@
83238979 [%& target state.p.value(sub sub.fit, next next.fit)]
83248980 ?: ?=(%call -.e) (infer-contextual-call e target env state)
83258981 ?: (single-structured-pattern e)
8982+ ?> ?=(%branch -.e)
8983+ =/ single=(unit iresult) (grec-single-wing-subject subject.e env state)
8984+ ?^ single (infer-known-union-context-subject e target env u.single context)
83268985 (infer-single-case-branch e env state `[target context])
83278986 ?: (cell-binder-pattern e)
83288987 (infer-cell-branch e env state `[target context])
8329− :: In a loobean-singleton context retain the written loobean noun;
8330− :: the usual final fit decides whether that value is permitted.
8988+ :: In an explicit singleton context retain the written loobean noun;
8989+ :: the ordinary singleton fit compares its noun, not its spelling.
83318990 =/ singleton=(unit itype)
83328991 ?. ?=(%lit -.e) ~
83338992 ?. =(%loobean form.lit.e) ~
8334− ?. ?=(%const -.target) ~
8335− ?. =(%loobean form.literal.target) ~
8993+ ?. |(?=(%const -.target) &(?=(%union -.expected) (explicit-singleton-in-union expected val.lit.e))) ~
83368994 `[%const lit.e]
83378995 ?^ singleton [%& u.singleton state]
83388996 =/ known=(unit iresult)
@@ -8351,6 +9009,34 @@
83519009 (infer-union-context e target env state context)
83529010 ?: &(?=(%collection -.target) =(%list name.target) (context-list-expression e))
83539011 (infer-list-context e target env state context)
9012+ :: A literal-headed tuple can receive the unique case's payload
9013+ :: context. The ordinary final fit still checks the complete union.
9014+ =/ selected=(unit itype)
9015+ ?. &((contextual-simple-sub sub.state) (contextual-direct-union expected) ?=(%union -.target) ?=(%tuple -.e) ?=(^ items.e)) ~
9016+ ?~ t.items.e ~
9017+ ?^ t.t.items.e ~
9018+ ?. (contextual-direct-payload-call val.i.t.items.e) ~
9019+ =/ first=item i.items.e
9020+ ?. &(?=(~ face.first) ?=(%lit -.val.first) |(=(%term form.lit.val.first) =(%null form.lit.val.first) =(%loobean form.lit.val.first))) ~
9021+ (contextual-tagged-case target val.lit.val.first sub.state)
9022+ ?^ selected
9023+ ?> ?=(%tuple -.e)
9024+ :: On this bounded shallow-call shape, preserve any inference that
9025+ :: already fits before trying the new contextual path. Neither pass
9026+ :: can recursively select a nested tuple from the atomic arguments.
9027+ =/ ordinary=(unit iresult)
9028+ =/ initial=iresult (infer-fragment e env state)
9029+ ?: ?=(%| -.initial) ~
9030+ =/ fit=ifit (itype-fit typ.p.initial target sub.state.p.initial next.state.p.initial)
9031+ ?. ?=(%ok -.fit) ~
9032+ `initial
9033+ ?^ ordinary u.ordinary
9034+ =/ value=iresult (infer-call-context-items items.e u.selected env state context)
9035+ ?: ?=(%| -.value) value
9036+ =/ fit=ifit (itype-fit typ.p.value u.selected sub.state.p.value next.state.p.value)
9037+ ?: ?=(%unknown -.fit) [%| ["tagged case needs unsupported inference" ~]]
9038+ ?: ?=(%bad -.fit) [%| ["tagged case does not fit its expected type" ~[[context "expected union case"] [(span-of e) "value"]]]]
9039+ [%& typ.p.value state.p.value(sub sub.fit, next next.fit)]
83549040 ?: &(?=(%cell -.target) ?=(%tuple -.e))
83559041 (infer-call-context-items items.e target env state context)
83569042 (infer-fragment e env state)
@@ -8453,7 +9139,7 @@
84539139 ?~ t.names |
84549140 =. typ (itype-walk typ sub)
84559141 ?: ?=(%cell -.typ) $(typ tal.typ, names t.names)
8456− |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
9142+ |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%grec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
84579143::
84589144++ cell-binder-pattern
84599145 |= e=expr
@@ -8532,6 +9218,7 @@
85329218 "({(trip u.label.t)} {(show-itype-cases args.t sub)})"
85339219 %recursive ?~(label.t "recursive mold" (trip u.label.t))
85349220 %jrec ?~(label.t "recursive mold" (trip u.label.t))
9221+ %grec ?~(label.t "recursive mold" "({(trip u.label.t)} {(show-itype-cases args.t sub)})")
85359222 %collection "({(trip name.t)} {(show-itype-cases args.t sub)})"
85369223 %face "[{(trip name.t)}={(show-itype-context body.t sub)}]"
85379224 %fn "$-({(show-itype-context sample.t sub)} {(show-itype-context product.t sub)})"
@@ -8580,6 +9267,7 @@
85809267 %union |((lien cases.typ |=(c=itype (itype-has-nvar c))) (lien args.typ |=(c=itype (itype-has-nvar c))))
85819268 %recursive |
85829269 %jrec |
9270+ %grec (lien args.typ |=(c=itype (itype-has-nvar c)))
85839271 %collection (lien args.typ |=(c=itype (itype-has-nvar c)))
85849272 %face $(typ body.typ)
85859273 %fn |($(typ sample.typ) $(typ product.typ))
@@ -8696,6 +9384,7 @@
86969384 %union |((lien cases.t |=(c=itype (has-atom-var n c))) (lien args.t |=(c=itype (has-atom-var n c))))
86979385 %recursive |
86989386 %jrec |
9387+ %grec (lien args.t |=(c=itype (has-atom-var n c)))
86999388 %collection (lien args.t |=(c=itype (has-atom-var n c)))
87009389 %face $(t body.t)
87019390 %fn |($(t sample.t) $(t product.t))
@@ -8839,6 +9528,7 @@
88399528++ infer-recursive-gate
88409529 |= [d=def env=ienv state=istate]
88419530 ^- iresult
9531+ =. gate-defs.state ~
88429532 ?. ?=(%value -.d) [%| ["recursive definition is not a gate" ~]]
88439533 ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
88449534 [%| ["recursive definition is not a gate" ~]]
@@ -9067,7 +9757,7 @@
90679757 [%| ["recursive group contains duplicate names" ~]]
90689758 ?: (lien names |=(n=term ?=(^ (ienv-lookup n env))))
90699759 [%| ["recursive group shadows a name" ~]]
9070− =/ scoped=istate state(globals (weld names globals.state))
9760+ =/ scoped=istate state(globals (weld names globals.state), gate-defs ~)
90719761 =/ seeded=igate-seeds (seed-gate-group ds env scoped)
90729762 ?: ?=(%| -.seeded) seeded
90739763 =/ seeds=ienv (group-seed-env entries.p.seeded ~)
@@ -9101,35 +9791,11 @@
91019791 `[entry u.rest]
91029792::
91039793++ add-supported-defs
9104− |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition)]
9794+ |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition)]
91059795 ^- [env=ienv artifacts=(list iwidth-definition)]
9106− ?~ ds [env artifacts]
9107− =/ d=def i.ds
9108− ?: ?=(%mold -.d) $(ds t.ds)
9109− ?. (unique-value-name name.d globals) $(ds t.ds)
9110− ?^ (ienv-lookup name.d env) $(ds t.ds)
9111− =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9112− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
9113− =. initial (reserve-def-caps val.d initial)
9114− =/ result=iresult (infer-fragment val.d env initial)
9115− =? result ?=(%| -.result) (infer-recursive-gate d env initial)
9116− ?: ?=(%| -.result) $(ds t.ds)
9117− =. state.p.result (promote-restricted-numbers state.p.result env)
9118− =. state.p.result (default-hole-numbers holes.state.p.result holes.initial state.p.result env !(itype-has-gate (itype-normalize typ.p.result sub.state.p.result)))
9119− ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
9120− ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
9121− =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
9122− ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
9123− ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
9124− =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
9125− ?: (gth (lent vars) 26) $(ds t.ds)
9126− =/ finalized=(unit (list iwprojection))
9127− (width-finalize projections.state.p.result sub.state.p.result vars)
9128− ?~ finalized $(ds t.ds)
9129− =? artifacts ?=(^ u.finalized)
9130− [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
9131− $(ds t.ds, env [[name.d [typ vars]] env])
9796+ (add-supported-defs-core ds all-defs checked heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts ~)
91329797::
9798+
91339799+$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
91349800+$ iadj (map term (list term))
91359801+$ ivisited (map term ?)
@@ -9243,6 +9909,46 @@
92439909++ resolve-groups
92449910 |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile)]
92459911 ^- iresolved
9912+ (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
9913+::
9914+
9915+++ add-supported-defs-core
9916+ |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
9917+ ^- [env=ienv artifacts=(list iwidth-definition)]
9918+ ?~ ds [env artifacts]
9919+ =/ d=def i.ds
9920+ ?: ?=(%mold -.d) $(ds t.ds)
9921+ ?. (unique-value-name name.d globals) $(ds t.ds)
9922+ ?^ (ienv-lookup name.d env) $(ds t.ds)
9923+ =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9924+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~]
9925+ =. grec-index.initial index
9926+ =. gate-defs.initial checked
9927+ =. head-evidence.initial heads
9928+ =. initial (reserve-def-caps val.d initial)
9929+ =/ result=iresult (infer-fragment val.d env initial)
9930+ =? result ?=(%| -.result) (infer-recursive-gate d env initial)
9931+ ?: ?=(%| -.result) $(ds t.ds)
9932+ =. state.p.result (promote-restricted-numbers state.p.result env)
9933+ =. state.p.result (default-hole-numbers holes.state.p.result holes.initial state.p.result env !(itype-has-gate (itype-normalize typ.p.result sub.state.p.result)))
9934+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
9935+ ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
9936+ =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
9937+ ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
9938+ ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
9939+ =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
9940+ ?: (gth (lent vars) 26) $(ds t.ds)
9941+ =/ finalized=(unit (list iwprojection))
9942+ (width-finalize projections.state.p.result sub.state.p.result vars)
9943+ ?~ finalized $(ds t.ds)
9944+ =? artifacts ?=(^ u.finalized)
9945+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
9946+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
9947+ $(ds t.ds, env [[name.d [typ vars]] env], checked checked)
9948+::
9949+++ resolve-groups-core
9950+ |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
9951+ ^- iresolved
92469952 =/ env=ienv ~
92479953 =/ grouped=(list term) ~
92489954 =/ artifacts=(list iwidth-definition) ~
@@ -9251,10 +9957,12 @@
92519957 =/ graph=iadj (graph-make-forward ds nameset ~)
92529958 =/ components=icomponents (graph-components ds names)
92539959 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9960+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
92549961 |-
92559962 =/ next=[env=ienv artifacts=(list iwidth-definition)]
9256− (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9257− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
9963+ (add-supported-defs-core ds ds (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts index)
9964+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~]
9965+ =. grec-index.initial index
92589966 =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
92599967 ?: =(env env.out) out
92609968 $(env env.out, grouped grouped.out, artifacts artifacts.out)
@@ -10054,6 +10762,9 @@
1005410762 |= [typ=itype name=term vars=(list @ud)]
1005510763 ^- itype
1005610764 ?: ?=(%jrec -.typ) typ(label `name)
10765+ ?: ?=(%grec -.typ)
10766+ ?. (identity-union-parameters vars args.typ) typ(label ~)
10767+ typ(label `name)
1005710768 ?. ?=(%union -.typ) typ
1005810769 ?. (identity-union-parameters vars args.typ)
1005910770 ?~ origin.typ typ
@@ -10086,7 +10797,7 @@
1008610797 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
1008710798 =/ minus=ischeme [[%fn b b] ~[0]]
1008810799 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
10089− [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~]
10800+ [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
1009010801::
1009110802++ infer-private-internal
1009210803 |= [src=@t public-source=@t]
@@ -10127,9 +10838,9 @@
1012710838 =/ source-unit=(unit ischeme)
1012810839 ?~ unit-decl ~
1012910840 =/ unit-molds=imolds ~[[%unit u.unit-decl]]
10130− =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~]
10841+ =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~ ~ ~ ~]
1013110842 =/ unit-types=imold-types (partial-prelude-molds unit-molds unit-state)
10132− =/ unit-iface=ifile [~ unit-types /lib/jibb/prelude/jibb ~ ~ ~ ~]
10843+ =/ unit-iface=ifile [~ unit-types /lib/jibb/prelude/jibb ~ ~ ~ ~ ~]
1013310844 =/ found=(unit ischeme) (find-jibb-mold %unit unit-iface)
1013410845 ?~ found ~
1013510846 ?. (standard-unit-template u.found /lib/jibb/prelude/jibb) ~
@@ -10142,7 +10853,7 @@
1014210853 =/ js=ijimports ~[[face.i.imports.mod primitive]]
1014310854 =/ reserved=(list term) ~[face.i.imports.mod]
1014410855 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10145− =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~]
10856+ =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~ ~ ~ ~]
1014610857 =/ mts=(each imold-types @t) (module-mold-types molds state)
1014710858 =/ usable=(unit imold-types)
1014810859 ?: ?=(%& -.mts) `p.mts
@@ -10165,7 +10876,7 @@
1016510876 =/ resolution=iresolved (resolve-groups defs.mod molds globals ~ ~ ~ ~ js reserved at ~)
1016610877 =/ env=ienv env.resolution
1016710878 ?. (module-values-complete defs.mod env) ~
10168− `[env u.usable at ~ artifacts.resolution ~ `src]
10879+ `[env u.usable at ~ artifacts.resolution ~ `src ~]
1016910880::
1017010881++ partial-prelude-interface-with-internal
1017110882 |= [src=@t internal-source=(unit @t)]
@@ -10198,16 +10909,16 @@
1019810909 =? env-molds declared
1019910910 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
1020010911 =/ reserved=(list term) ?:(declared ~[%list] ~)
10201− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~]
10912+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~ ~ ~ ~]
1020210913 :: Other prelude molds may use list only after its source has passed
1020310914 :: the standard-list check. The raw declaration remains removed.
1020410915 =/ declared-list=(unit shape) (find-simple-mold %list molds)
1020510916 =/ mold-prelude=(unit ifile)
1020610917 ?~ declared-list ~
1020710918 ?. (standard-prelude-list u.declared-list) ~
10208− `[~ ~[[%list [[%collection %list ~[[%var 0]]] ~[0]]]] at ~ ~ ~ ~]
10919+ `[~ ~[[%list [[%collection %list ~[[%var 0]]] ~[0]]]] at ~ ~ ~ ~ ~]
1020910920 =/ mt=imold-types (partial-prelude-molds molds state(prelude mold-prelude))
10210− =/ partial=ifile [~ mt at ~ ~ ~ ~]
10921+ =/ partial=ifile [~ mt at ~ ~ ~ ~ ~]
1021110922 :: An explicitly qualified re-export must resolve. Other unsupported
1021210923 :: prelude declarations remain reserved but absent from the interface.
1021310924 =/ required=imolds
@@ -10224,7 +10935,7 @@
1022410935 =/ deps=(list iwidth-dependency)
1022510936 ?~ u.private ~
1022610937 ~[[at.interface.i.u.private source.interface.i.u.private elaborations.interface.i.u.private]]
10227− `[env mt at ~ artifacts.resolution deps `src]
10938+ `[env mt at ~ artifacts.resolution deps `src ~]
1022810939::
1022910940++ partial-prelude-interface
1023010941 |= src=@t
@@ -10275,6 +10986,66 @@
1027510986 ?: =(at at.i.cache) `iface.i.cache
1027610987 $(cache t.cache)
1027710988::
10989+:: These certificates retain the complete checked source closure. The
10990+:: trusted host must supply the identical prepared prelude and reader nouns.
10991+:: Exact bundle equality binds all source paths and versions; the set
10992+:: retains transitive paths for active-cycle checks. Request-bearing graphs
10993+:: alone have a size limit; incompatible diamond evidence fails closed.
10994+++ request-graph-requests-add
10995+ |= [pending=(list irequest-evidence) acc=(list irequest-evidence) fuel=@ud]
10996+ ^- (unit (list irequest-evidence))
10997+ ?~ pending `acc
10998+ ?: =(0 fuel) ~
10999+ =/ hit=(list irequest-evidence)
11000+ (skim acc |=(x=irequest-evidence &(=(api-at.x api-at.i.pending) =(name.x name.i.pending))))
11001+ ?^ hit
11002+ ?. ?=([* ~] hit) ~
11003+ ?. =(i.hit i.pending) ~
11004+ $(pending t.pending, fuel (dec fuel))
11005+ $(pending t.pending, acc [i.pending acc], fuel (dec fuel))
11006+++ request-graph-inputs-match
11007+ |= [g=irequest-graph externals=iexternals marks=imark-externals modules=jbundle values=(list term) molds=(list term) prelude=(unit ifile)]
11008+ ^- ?
11009+ ?& =(bundle-input.g modules)
11010+ =(prelude-input.g prelude)
11011+ =(prelude-values.g values)
11012+ =(prelude-molds.g molds)
11013+ =(externals.g externals)
11014+ =(marks.g marks)
11015+ ==
11016+++ request-graph-merge
11017+ |= [imports=ijimports g=irequest-graph fuel=@ud]
11018+ ^- (unit irequest-graph)
11019+ ?~ imports `g
11020+ ?: =(0 fuel) ~
11021+ =/ child=ifile interface.i.imports
11022+ ?~ graph.child ~
11023+ =/ cg=irequest-graph u.graph.child
11024+ ?. ?& =(bundle-input.g bundle-input.cg)
11025+ =(prelude-input.g prelude-input.cg)
11026+ =(prelude-values.g prelude-values.cg)
11027+ =(prelude-molds.g prelude-molds.cg)
11028+ =(externals.g externals.cg)
11029+ =(marks.g marks.cg)
11030+ ==
11031+ ~
11032+ =/ merged=(set path) (~(uni in:..zuse paths.g) paths.cg)
11033+ =/ rs=(unit (list irequest-evidence))
11034+ (request-graph-requests-add requests.cg requests.g (add 1 (lent requests.cg)))
11035+ ?~ rs ~
11036+ ?: &(?=(^ u.rs) |((gth (lent ~(tap in:..zuse merged)) 256) (gth (lent u.rs) 256))) ~
11037+ $(imports t.imports, g g(paths merged, requests u.rs), fuel (dec fuel))
11038+++ request-graph-reusable
11039+ |= [f=ifile src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) values=(list term) molds=(list term) prelude=(unit ifile)]
11040+ ^- ?
11041+ ?~ source.f |
11042+ ?. =(u.source.f src) |
11043+ ?~ graph.f |
11044+ =/ g=irequest-graph u.graph.f
11045+ ?. (request-graph-inputs-match g externals marks modules values molds prelude) |
11046+ ?. (~(has in:..zuse paths.g) at.f) |
11047+ !(lien active |=(p=path (~(has in:..zuse paths.g) p)))
11048+::
1027811049++ resolve-jibb-imports
1027911050 |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
1028011051 ^- jimports-result
@@ -10292,7 +11063,16 @@
1029211063 ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
1029311064 =/ cached=(unit ifile) (find-jibb-cache at cache)
1029411065 =/ iface=jfile-result
10295− ?^ cached [%& [u.cached cache]]
11066+ ?^ cached
11067+ ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11068+ ?~ graph.u.cached
11069+ :: A detached legacy interface has unknown evidence. Rebuild it
11070+ :: against the current graph, without retaining any stale entry.
11071+ =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
11072+ (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
11073+ ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
11074+ [%| 'cached module evidence needs unsupported inference']
11075+ [%& [u.cached cache]]
1029611076 (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
1029711077 ?: ?=(%| -.iface) [%| p.iface]
1029811078 =/ rest=jimports-result $(imports t.imports, cache cache.p.iface)
@@ -10542,6 +11322,27 @@
1054211322 (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared)
1054311323 ?~ paths [%| 'API path declaration needs unsupported analysis']
1054411324 [%& [file src u.prepared externals marks cache.p.deps u.paths]]
11325+:: Graph-aware variant preserves the caller active stack and cache.
11326+++ api-path-evidence-graph
11327+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) cache=jcache prepared=(unit iprelude)]
11328+ ^- (each iapi-path-evidence @t)
11329+ ?~ active [%| 'API analysis needs an active graph']
11330+ ?. =(i.active file) [%| 'API analysis active graph does not start at the source']
11331+ ?: (lien t.active |=(p=path =(p file))) [%| 'API analysis active graph contains a cycle']
11332+ ?. ?=([%ui %api @ %jibb ~] file) [%| 'API path evidence requires /ui/api/<agent>.jibb']
11333+ =/ parsed (parse file src)
11334+ ?: ?=(%| -.parsed) [%| 'API path evidence source does not parse']
11335+ =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
11336+ ?^ duplicate [%| (show-duplicate-fields file src u.duplicate)]
11337+ ?~ prepared [%| 'API path evidence needs the prepared prelude']
11338+ =/ public=ifile iface.u.prepared
11339+ =/ deps=jimports-result
11340+ (resolve-jibb-imports imports.p.parsed externals marks modules active values.u.prepared molds.u.prepared cache `public)
11341+ ?: ?=(%| -.deps) [%| p.deps]
11342+ =/ paths=(unit (list iapi-path-typed))
11343+ (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared)
11344+ ?~ paths [%| 'API path declaration needs unsupported analysis']
11345+ [%& [file src u.prepared externals marks cache.p.deps u.paths]]
1054511346::
1054611347:: This query classifies a unique path declaration only. Missing evidence
1054711348:: or a nonunique name is unknown; it proves nothing about an ask value.
@@ -10637,13 +11438,206 @@
1063711438 =/ surs=(list term) (collect-sur-imports imports.mod)
1063811439 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1063911440 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10640− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~]
11441+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~]
11442+ =/ mts=(each imold-types @t) (module-mold-types molds state)
11443+ ?: ?=(%| -.mts) [%| p.mts]
11444+ =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
11445+ ?. (module-values-complete ordinary env.resolution) [%| 'API ordinary definitions need unsupported inference']
11446+ [%& [evidence env.resolution p.mts u.mark-types artifacts.resolution]]
11447+:: Preserve the same graph context through supporting definitions.
11448+++ api-support-analysis-graph
11449+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) cache=jcache prepared=(unit iprelude)]
11450+ ^- (each iapi-support-evidence @t)
11451+ =/ path-result (api-path-evidence-graph file src externals marks modules active cache prepared)
11452+ ?: ?=(%| -.path-result) [%| p.path-result]
11453+ =/ evidence=iapi-path-evidence p.path-result
11454+ =/ parsed (parse file src)
11455+ ?: ?=(%| -.parsed) [%| 'API source does not parse']
11456+ =/ mod=module p.parsed
11457+ =/ ordinary=(list def)
11458+ (skim defs.mod |=(d=def !&(?=(%mold -.d) |(=(%paths name.d) =(%poke name.d)))))
11459+ =/ prep=iprelude prepared.evidence
11460+ ?. (module-scope-valid mod(defs ordinary) values.prep molds.prep) [%| 'API ordinary scope needs unsupported inference']
11461+ =/ vals=(list term) (global-value-names ordinary)
11462+ ?: (lien vals |=(n=term =(n %main))) [%| 'API module kind needs unsupported inference']
11463+ =/ declared=(list term) (collect-mark-imports imports.mod)
11464+ =/ mark-types=(unit (list iapi-mark-type)) (api-diff-types declared marks declared)
11465+ ?~ mark-types [%| 'API declared marks need unsupported inference']
11466+ =/ prelude=(unit ifile) `iface.prep
11467+ =/ deps=jimports-result
11468+ (resolve-jibb-imports imports.mod externals marks modules active values.prep molds.prep dependencies.evidence prelude)
11469+ ?: ?=(%| -.deps) [%| p.deps]
11470+ =/ molds=imolds (collect-simple-molds ordinary)
11471+ =/ globals=(list term) (weld values.prep (weld (import-binding-names imports.mod) vals))
11472+ =/ surs=(list term) (collect-sur-imports imports.mod)
11473+ =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
11474+ =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11475+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~]
1064111476 =/ mts=(each imold-types @t) (module-mold-types molds state)
1064211477 ?: ?=(%| -.mts) [%| p.mts]
1064311478 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
1064411479 ?. (module-values-complete ordinary env.resolution) [%| 'API ordinary definitions need unsupported inference']
1064511480 [%& [evidence env.resolution p.mts u.mark-types artifacts.resolution]]
1064611481::
11482+:: Type-analysis artifact for one plain request. The resolver may publish
11483+:: its interface only together with trusted source and reader evidence.
11484+:: No lowering or runtime validator exists.
11485+:: Value watchability remains unproved even for a watchable declaration.
11486++$ ione-request-interface
11487+ [support=iapi-support-evidence parts=iapi-request-parts iface=ifile]
11488+++ request-compatible-ask
11489+ |= prelude=iprelude
11490+ ^- (unit ischeme)
11491+ =/ public=ifile iface.prelude
11492+ ?. =(at.public /lib/jibb/prelude/jibb) ~
11493+ =/ ask=(unit ischeme) (find-jibb-mold %ask public)
11494+ ?~ ask ~
11495+ ?. ?=([@ ~] vars.u.ask) ~
11496+ ?. ?=(%union -.typ.u.ask) ~
11497+ ?. =(origin.typ.u.ask `[/lib/jibb/internal/jibb %ask]) ~
11498+ ?. (identity-union-parameters vars.u.ask args.typ.u.ask) ~
11499+ =/ m=@ud i.vars.u.ask
11500+ ?: (itype-var-is-atom m typ.u.ask) ~
11501+ ?. (levy (itype-vars typ.u.ask) |=(n=@ud =(n m))) ~
11502+ ?: (itype-has-tag typ.u.ask) ~
11503+ =/ private=(list iwidth-dependency)
11504+ (skim dependencies.public |=(d=iwidth-dependency =(at.d /lib/jibb/internal/jibb)))
11505+ ?. ?=([* ~] private) ~
11506+ ?~ source.i.private ~
11507+ =/ path=(unit ischeme) (find-jibb-mold %path public)
11508+ ?~ path ~
11509+ ?^ vars.u.path ~
11510+ =/ path-type=itype [%collection %list ~[[%atom %ta]]]
11511+ ?. =(typ.u.path path-type) ~
11512+ =/ unit-template=(unit ischeme) (find-jibb-mold %unit public)
11513+ ?~ unit-template ~
11514+ ?. (standard-unit-template u.unit-template /lib/jibb/prelude/jibb) ~
11515+ =/ state-unit=(unit itype) (template-apply u.unit-template ~[[%noun ~]])
11516+ ?~ state-unit ~
11517+ =/ path-unit=(unit itype) (template-apply u.unit-template ~[path-type])
11518+ ?~ path-unit ~
11519+ =/ output=itype [%cell [%face %state [%noun ~]] [%face %message [%var m]]]
11520+ =/ agent-input=itype [%cell [%face %mark [%atom %tas]] [%cell [%face %state u.state-unit] [%face %fact [%noun ~]]]]
11521+ =/ store-input=itype [%cell [%face %state u.state-unit] [%face %fact [%noun ~]]]
11522+ =/ pure-case=itype [%cell [%const [%term %tas %pure '%pure']] [%face %value [%var m]]]
11523+ =/ agent-case=itype
11524+ [%cell [%const [%term %tas %agent '%agent']] [%cell [%face %api [%atom %t]] [%cell [%face %case [%atom %tas]] [%cell [%face %agent [%atom %tas]] [%cell [%face %path path-type] [%cell [%face %scry u.path-unit] [%face %receive [%fn agent-input output]]]]]]]]
11525+ =/ store-case=itype
11526+ [%cell [%const [%term %tas %store '%store']] [%cell [%face %module [%atom %t]] [%cell [%face %name [%atom %tas]] [%face %receive [%fn store-input output]]]]]
11527+ ?. =(cases.typ.u.ask ~[pure-case agent-case store-case]) ~
11528+ ask
11529+::
11530+:: The first supported standalone API has exactly one mark import and one
11531+:: plain path declaration, with no other definitions or imports. No partial
11532+:: success is published when source, schema, or a required mold is unknown.
11533+++ one-request-interface-source
11534+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle prepared=(unit iprelude)]
11535+ ^- (each ione-request-interface @t)
11536+ =/ out (api-support-analysis-source file src externals marks modules prepared)
11537+ ?: ?=(%| -.out) [%| p.out]
11538+ =/ support=iapi-support-evidence p.out
11539+ =/ ev=iapi-path-evidence paths.support
11540+ =/ parsed (parse file src)
11541+ ?: ?=(%| -.parsed) [%| 'request source does not parse']
11542+ =/ mod=module p.parsed
11543+ ?. ?=(?([[%mark *] ~] [[%mark *] [%mark *] ~]) imports.mod) [%| 'request imports need unsupported inference']
11544+ ?. ?=([[%mold *] ~] defs.mod) [%| 'request definitions need unsupported inference']
11545+ ?. =(%paths name.i.defs.mod) [%| 'request declaration needs unsupported inference']
11546+ ?. ?=([* ~] paths.ev) [%| 'request count needs unsupported inference']
11547+ =/ p=iapi-path-typed i.paths.ev
11548+ =/ parts=(unit iapi-request-parts) (api-request-parts `ev name.path.p)
11549+ ?~ parts [%| 'request components need unsupported inference']
11550+ ?. ?=(?(~ [* ~]) parameters.u.parts) [%| 'request parameters need unsupported inference']
11551+ ?: &(?=(^ fold.u.parts) ?=(^ parameters.u.parts)) [%| 'request parameter and fold need unsupported inference']
11552+ ?^ scry.path.p [%| 'request scry needs unsupported inference']
11553+ =/ valid-marks=?
11554+ ?~ fold.u.parts ?=([* ~] marks.support)
11555+ ?=([* [* ~]] marks.support)
11556+ ?. valid-marks [%| 'request marks need unsupported inference']
11557+ =/ fold-open=?
11558+ ?~ fold.u.parts |
11559+ |(?=(^ (itype-vars u.fold.u.parts)) (itype-has-tag u.fold.u.parts))
11560+ ?: fold-open [%| 'request fold needs unsupported inference']
11561+ ?^ (itype-vars reply-sample.u.parts) [%| 'request payload needs unsupported inference']
11562+ ?: (itype-has-tag reply-sample.u.parts) [%| 'request payload needs unsupported inference']
11563+ =/ ask=(unit ischeme) (request-compatible-ask prepared.ev)
11564+ ?~ ask [%| 'request ask needs unsupported inference']
11565+ =/ result=(unit itype) (template-apply u.ask ~[[%var 0]])
11566+ ?~ result [%| 'request ask needs unsupported inference']
11567+ =/ callback=itype [%fn reply-sample.u.parts [%var 0]]
11568+ =/ sample=itype
11569+ ?^ fold.u.parts [%cell callback u.fold.u.parts]
11570+ ?~ parameters.u.parts callback
11571+ [%cell typ.i.parameters.u.parts callback]
11572+ =/ scheme=ischeme [[%fn sample u.result] ~[0]]
11573+ =/ exports=imold-types
11574+ (turn marks.support |=(m=iapi-mark-type [name.m [typ.m ~]]))
11575+ =/ prelude=iprelude prepared.ev
11576+ =/ public=ifile iface.prelude
11577+ ?~ source.public [%| 'request prelude source needs unsupported inference']
11578+ =/ private=(list iwidth-dependency)
11579+ (skim dependencies.public |=(d=iwidth-dependency =(at.d /lib/jibb/internal/jibb)))
11580+ ?. ?=([* ~] private) [%| 'request internal source needs unsupported inference']
11581+ ?~ source.i.private [%| 'request internal source needs unsupported inference']
11582+ =/ req=irequest-evidence
11583+ [file name.path.p p src u.source.public u.source.i.private values.prelude molds.prelude externals marks]
11584+ =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
11585+ [%& [support u.parts interface]]
11586+:: Graph-aware request artifact; resolver use remains type-only.
11587+++ one-request-interface-graph
11588+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) cache=jcache prepared=(unit iprelude)]
11589+ ^- (each ione-request-interface @t)
11590+ =/ out (api-support-analysis-graph file src externals marks modules active cache prepared)
11591+ ?: ?=(%| -.out) [%| p.out]
11592+ =/ support=iapi-support-evidence p.out
11593+ =/ ev=iapi-path-evidence paths.support
11594+ =/ parsed (parse file src)
11595+ ?: ?=(%| -.parsed) [%| 'request source does not parse']
11596+ =/ mod=module p.parsed
11597+ ?. ?=(?([[%mark *] ~] [[%mark *] [%mark *] ~]) imports.mod) [%| 'request imports need unsupported inference']
11598+ ?. ?=([[%mold *] ~] defs.mod) [%| 'request definitions need unsupported inference']
11599+ ?. =(%paths name.i.defs.mod) [%| 'request declaration needs unsupported inference']
11600+ ?. ?=([* ~] paths.ev) [%| 'request count needs unsupported inference']
11601+ =/ p=iapi-path-typed i.paths.ev
11602+ =/ parts=(unit iapi-request-parts) (api-request-parts `ev name.path.p)
11603+ ?~ parts [%| 'request components need unsupported inference']
11604+ ?. ?=(?(~ [* ~]) parameters.u.parts) [%| 'request parameters need unsupported inference']
11605+ ?: &(?=(^ fold.u.parts) ?=(^ parameters.u.parts)) [%| 'request parameter and fold need unsupported inference']
11606+ ?^ scry.path.p [%| 'request scry needs unsupported inference']
11607+ =/ valid-marks=?
11608+ ?~ fold.u.parts ?=([* ~] marks.support)
11609+ ?=([* [* ~]] marks.support)
11610+ ?. valid-marks [%| 'request marks need unsupported inference']
11611+ =/ fold-open=?
11612+ ?~ fold.u.parts |
11613+ |(?=(^ (itype-vars u.fold.u.parts)) (itype-has-tag u.fold.u.parts))
11614+ ?: fold-open [%| 'request fold needs unsupported inference']
11615+ ?^ (itype-vars reply-sample.u.parts) [%| 'request payload needs unsupported inference']
11616+ ?: (itype-has-tag reply-sample.u.parts) [%| 'request payload needs unsupported inference']
11617+ =/ ask=(unit ischeme) (request-compatible-ask prepared.ev)
11618+ ?~ ask [%| 'request ask needs unsupported inference']
11619+ =/ result=(unit itype) (template-apply u.ask ~[[%var 0]])
11620+ ?~ result [%| 'request ask needs unsupported inference']
11621+ =/ callback=itype [%fn reply-sample.u.parts [%var 0]]
11622+ =/ sample=itype
11623+ ?^ fold.u.parts [%cell callback u.fold.u.parts]
11624+ ?~ parameters.u.parts callback
11625+ [%cell typ.i.parameters.u.parts callback]
11626+ =/ scheme=ischeme [[%fn sample u.result] ~[0]]
11627+ =/ exports=imold-types
11628+ (turn marks.support |=(m=iapi-mark-type [name.m [typ.m ~]]))
11629+ =/ prelude=iprelude prepared.ev
11630+ =/ public=ifile iface.prelude
11631+ ?~ source.public [%| 'request prelude source needs unsupported inference']
11632+ =/ private=(list iwidth-dependency)
11633+ (skim dependencies.public |=(d=iwidth-dependency =(at.d /lib/jibb/internal/jibb)))
11634+ ?. ?=([* ~] private) [%| 'request internal source needs unsupported inference']
11635+ ?~ source.i.private [%| 'request internal source needs unsupported inference']
11636+ =/ req=irequest-evidence
11637+ [file name.path.p p src u.source.public u.source.i.private values.prelude molds.prelude externals marks]
11638+ =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
11639+ [%& [support u.parts interface]]
11640+::
1064711641++ api-mark-exports
1064811642 |= [marks=(list term) all=(list term) externals=imark-externals]
1064911643 ^- imold-types
@@ -10687,7 +11681,133 @@
1068711681 =/ mark=(unit itype) (find-imported-mark n mark-externals marks)
1068811682 ?~ mark ~
1068911683 =/ sc=ischeme [[%fn u.mark typ.u.poke] ~]
10690− `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]] ~ ~ ~]
11684+ `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]] ~ ~ ~ ~]
11685+::
11686+:: Source-proven ordinary helpers validate each selected /sur dependency.
11687+:: Unused or less direct cores remain unsupported by this first interface.
11688+++ api-sur-covered
11689+ |= [surs=(list term) defs=(list def) externals=iexternals all=(list term)]
11690+ ^- ?
11691+ ?~ surs &
11692+ =/ found=(list def)
11693+ %+ skim defs
11694+ |= d=def
11695+ ?. ?=(%mold -.d) |
11696+ ?. ?=(%ref -.shape.d) |
11697+ ?. ?=([@ [@ ~]] names.shape.d) |
11698+ =(i.t.names.shape.d i.surs)
11699+ ?~ found |
11700+ =/ selected=def i.found
11701+ ?. ?=(%mold -.selected) |
11702+ =/ sh=shape shape.selected
11703+ ?. ?=(%ref -.sh) |
11704+ ?. ?=([@ [@ ~]] names.sh) |
11705+ =/ checked=(unit itype) (find-imported-mold i.surs i.names.sh externals all)
11706+ ?~ checked |
11707+ $(surs t.surs)
11708+::
11709++$ imulti-request-gates [values=ienv requests=(list irequest-evidence)]
11710+++ api-request-gates
11711+ |= [paths=(list iapi-path-typed) ev=iapi-path-evidence ask=ischeme file=path src=@t public=@t internal=@t externals=iexternals marks=imark-externals fuel=@ud]
11712+ ^- (unit imulti-request-gates)
11713+ ?~ paths `[~ ~]
11714+ ?: =(0 fuel) ~
11715+ =/ p=iapi-path-typed i.paths
11716+ =/ parts=(unit iapi-request-parts) (api-request-parts `ev name.path.p)
11717+ ?~ parts ~
11718+ ?. ?=(?(~ [* ~]) parameters.u.parts) ~
11719+ ?: &(?=(^ fold.u.parts) ?=(^ parameters.u.parts)) ~
11720+ ?^ scry.path.p ~
11721+ ?^ (itype-vars reply-sample.u.parts) ~
11722+ ?: (itype-has-tag reply-sample.u.parts) ~
11723+ =/ open-fold=?
11724+ ?~ fold.u.parts |
11725+ |(?=(^ (itype-vars u.fold.u.parts)) (itype-has-tag u.fold.u.parts))
11726+ ?: open-fold ~
11727+ =/ result=(unit itype) (template-apply ask ~[[%var 0]])
11728+ ?~ result ~
11729+ =/ callback=itype [%fn reply-sample.u.parts [%var 0]]
11730+ =/ sample=itype
11731+ ?^ fold.u.parts [%cell callback u.fold.u.parts]
11732+ ?~ parameters.u.parts callback
11733+ [%cell typ.i.parameters.u.parts callback]
11734+ =/ scheme=ischeme [[%fn sample u.result] ~[0]]
11735+ =/ prep=iprelude prepared.ev
11736+ =/ req=irequest-evidence
11737+ [file name.path.p p src public internal values.prep molds.prep externals marks]
11738+ =/ rest=(unit imulti-request-gates)
11739+ $(paths t.paths, fuel (dec fuel))
11740+ ?~ rest ~
11741+ `[[[name.path.p scheme] values.u.rest] [req requests.u.rest]]
11742+::
11743+++ api-poke-from-checked
11744+ |= [file=path mod=module marks=imark-externals values=(list term) molds=(list term) prelude=(unit ifile)]
11745+ ^- (unit [values=ienv derived=(list iderived)])
11746+ =/ pokes=(list def)
11747+ (skim defs.mod |=(d=def &(?=(%mold -.d) =(%poke name.d))))
11748+ ?~ pokes `[~ ~]
11749+ ?. ?=([* ~] pokes) ~
11750+ =/ declared=(list term) (collect-mark-imports imports.mod)
11751+ =/ ns=(unit (list term)) (api-poke-mark-names pokes declared)
11752+ ?~ ns ~
11753+ ?. ?=([@ ~] u.ns) ~
11754+ =/ matching=(list import)
11755+ %+ skim imports.mod
11756+ |= i=import
11757+ ?. ?=(%mark -.i) |
11758+ =(mark.i i.u.ns)
11759+ ?. ?=([* ~] matching) ~
11760+ =/ checked=(unit ifile)
11761+ (api-poke-interface file mod(defs pokes, imports matching) marks values molds prelude)
11762+ ?~ checked ~
11763+ `[values.u.checked derived.u.checked]
11764+::
11765+:: The partial interface is published atomically: all paths, ordinary
11766+:: source definitions, declared marks and the poke must check. Unselected
11767+:: /sur bindings, runtime validation and value watchability remain unproved.
11768+++ multi-request-interface-graph
11769+ |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) cache=jcache prepared=(unit iprelude)]
11770+ ^- (each [iface=ifile cache=jcache] @t)
11771+ =/ out (api-support-analysis-graph file src externals marks modules active cache prepared)
11772+ ?: ?=(%| -.out) [%| p.out]
11773+ =/ support=iapi-support-evidence p.out
11774+ =/ ev=iapi-path-evidence paths.support
11775+ =/ parsed (parse file src)
11776+ ?: ?=(%| -.parsed) [%| 'request source does not parse']
11777+ =/ mod=module p.parsed
11778+ ?. (levy imports.mod |=(i=import ?=(?(%mark %sur) -.i)))
11779+ [%| 'request imports need unsupported inference']
11780+ =/ surs=(list term) (collect-sur-imports imports.mod)
11781+ ?. (api-sur-covered surs defs.mod externals surs)
11782+ [%| 'API source dependency needs unsupported inference']
11783+ ?~ paths.ev [%| 'request count needs unsupported inference']
11784+ =/ ask=(unit ischeme) (request-compatible-ask prepared.ev)
11785+ ?~ ask [%| 'request ask needs unsupported inference']
11786+ =/ prep=iprelude prepared.ev
11787+ =/ public=ifile iface.prep
11788+ ?~ source.public [%| 'request prelude source needs unsupported inference']
11789+ =/ private=(list iwidth-dependency)
11790+ (skim dependencies.public |=(d=iwidth-dependency =(at.d /lib/jibb/internal/jibb)))
11791+ ?. ?=([* ~] private) [%| 'request internal source needs unsupported inference']
11792+ ?~ source.i.private [%| 'request internal source needs unsupported inference']
11793+ =/ gates=(unit imulti-request-gates)
11794+ (api-request-gates paths.ev ev u.ask file src u.source.public u.source.i.private externals marks 256)
11795+ ?~ gates [%| 'request paths need unsupported inference']
11796+ =/ poke=(unit [values=ienv derived=(list iderived)])
11797+ (api-poke-from-checked file mod marks values.prep molds.prep `public)
11798+ ?~ poke [%| 'API poke needs unsupported inference']
11799+ =/ mark-molds=imold-types
11800+ (turn marks.support |=(m=iapi-mark-type [name.m [typ.m ~]]))
11801+ =/ exports=imold-types (weld mark-molds molds.support)
11802+ =/ names=(list term) (turn exports |=(m=[name=term template=ischeme] name.m))
11803+ ?. (levy names |=(n=term (unique-value-name n names)))
11804+ [%| 'API exported molds need unsupported inference']
11805+ =/ env=ienv (weld values.u.gates (weld values.u.poke values.support))
11806+ =/ graph=irequest-graph
11807+ [(silt `(list path)`~[file]) requests.u.gates modules `public values.prep molds.prep externals marks]
11808+ =/ iface=ifile
11809+ [env exports file derived.u.poke elaborations.support ~ `src `graph]
11810+ [%& [iface dependencies.ev]]
1069111811::
1069211812++ infer-jibb-file
1069311813 |= [at=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
@@ -10699,9 +11819,26 @@
1069911819 ?^ duplicate [%| (show-duplicate-fields at src u.duplicate)]
1070011820 ?: ?=([%ui %api *] at)
1070111821 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
10702− ?~ iface [%| (crip "API module needs unsupported inference: {(spud at)}")]
10703− =/ checked=ifile u.iface(source `src)
10704− [%& [checked [[at checked] cache]]]
11822+ ?^ iface
11823+ =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
11824+ [%& [checked [[at checked] cache]]]
11825+ ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
11826+ =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
11827+ =/ narrow=?
11828+ ?. ?=([[%mark *] ~] imports.mod) |
11829+ ?. ?=([[%mold *] ~] defs.mod) |
11830+ ?. =(%paths name.i.defs.mod) |
11831+ !?=(%union -.shape.i.defs.mod)
11832+ ?: narrow
11833+ =/ request=(each ione-request-interface @t)
11834+ (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
11835+ ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
11836+ =/ checked=ifile iface.p.request
11837+ [%& [checked [[at checked] dependencies.paths.support.p.request]]]
11838+ =/ multi=(each [iface=ifile cache=jcache] @t)
11839+ (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
11840+ ?: ?=(%| -.multi) [%| (crip "API module needs unsupported inference: {(spud at)}")]
11841+ [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
1070511842 ?. (module-scope-valid mod prelude-values prelude-molds)
1070611843 ?: (pending-declared-poke at mod prelude-values prelude-molds)
1070711844 [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
@@ -10711,22 +11848,98 @@
1071111848 [%| (crip "module kind needs unsupported inference: {(spud at)}")]
1071211849 =/ js=jimports-result (resolve-jibb-imports imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
1071311850 ?: ?=(%| -.js) [%| p.js]
10714− =/ molds=imolds (collect-simple-molds defs.mod)
11851+ =/ collected=grec-collected
11852+ ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
11853+ (grec-collect-molds defs.mod)
11854+ =/ molds=imolds molds.collected
1071511855 =/ globals=(list term) (weld prelude-values (weld (import-binding-names imports.mod) vals))
1071611856 =/ surs=(list term) (collect-sur-imports imports.mod)
1071711857 =/ marks=(list term) (collect-mark-imports imports.mod)
1071811858 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1071911859 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10720− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~]
11860+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~]
11861+ :: Source and scope were checked above; preserve that exact root and prelude.
11862+ :: This first integration only indexes import-free library sources.
11863+ =/ index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])
11864+ ?^ imports.mod ~
11865+ ?~ prelude ~
11866+ =/ standard=(unit ischeme) (find-jibb-mold %list u.prelude)
11867+ ?~ standard ~
11868+ ?. =(u.standard [[%collection %list ~[[%var 0]]] ~[0]]) ~
11869+ =/ index=(map term shape) proofs.collected
11870+ ?. !=(index *(map term shape)) ~
11871+ ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
11872+ `[at src u.prelude index]
11873+ =. grec-index.state index
1072111874 =/ mts=(each imold-types @t) (module-mold-types molds state)
1072211875 ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
10723− =/ resolution=iresolved (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
11876+ =/ resolution=iresolved
11877+ ?~ index
11878+ (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
11879+ (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
1072411880 =/ env=ienv env.resolution
1072511881 ?. (module-values-complete defs.mod env)
1072611882 [%| (crip "module definitions need unsupported inference: {(spud at)}")]
10727− =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src]
11883+ =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
11884+ =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
11885+ ?~ graph [%| 'module request evidence needs unsupported inference']
11886+ =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
1072811887 [%& [iface [[at iface] cache.p.js]]]
1072911888::
11889+:: A source-bound analysis of one named mold, not a module, island,
11890+:: request, watchability or runtime check. The host owns the trusted
11891+:: prepared prelude, canonical paths and reader/source version identities.
11892+:: The 256-node cap covers only classification, not source/graph work.
11893++$ igate-free-mold
11894+ [at=path source=@t name=term prepared=iprelude externals=iexternals marks=imark-externals modules=jbundle dependencies=jcache mold=ischeme requested=@ud budget=@ud result=igate-free]
11895+++ gate-free-mold-source
11896+ |= [file=path src=@t name=term externals=iexternals marks=imark-externals modules=jbundle prepared=(unit iprelude) fuel=@ud]
11897+ ^- (each igate-free-mold @t)
11898+ ?~ file [%| 'mold analysis needs a path ending in jibb']
11899+ ?. =(%jibb (rear file)) [%| 'mold analysis needs a path ending in jibb']
11900+ ?: |(=(file /lib/jibb/internal/jibb) =(file /lib/jibb/primitives/jibb))
11901+ [%| 'the prelude internal modules are private']
11902+ ?: ?=([%ui %api *] file) [%| 'API declarations need unsupported mold analysis']
11903+ ?: ?=([%ui %stores *] file) [%| 'store declarations need unsupported mold analysis']
11904+ =/ entries=jbundle (skim modules |=(m=jsource =(file at.m)))
11905+ ?: (gth (lent entries) 1) [%| 'duplicate root module sources']
11906+ =/ wrong-root=? ?~(entries | !=(source.i.entries src))
11907+ ?: wrong-root [%| 'root module source does not match bundle']
11908+ =/ parsed (parse file src)
11909+ ?: ?=(%| -.parsed) [%| 'mold source does not parse']
11910+ =/ mod=module p.parsed
11911+ =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
11912+ ?^ duplicate [%| (show-duplicate-fields file src u.duplicate)]
11913+ ?~ prepared [%| 'mold analysis needs the prepared prelude']
11914+ ?. (module-scope-valid mod values.u.prepared molds.u.prepared)
11915+ [%| 'mold source has conflicting or unsupported scope']
11916+ =/ selected=(list def)
11917+ (skim defs.mod |=(d=def &(?=(%mold -.d) =(name.d name))))
11918+ ?~ selected [%| 'selected mold is not declared']
11919+ ?^ t.selected [%| 'selected mold is not unique']
11920+ ?> ?=(%mold -.i.selected)
11921+ =/ public=ifile iface.u.prepared
11922+ =/ js=jimports-result
11923+ (resolve-jibb-imports imports.mod externals marks modules ~[file] values.u.prepared molds.u.prepared ~ `public)
11924+ ?: ?=(%| -.js) [%| p.js]
11925+ =/ ms=imolds (collect-simple-molds defs.mod)
11926+ =/ vals=(list term) (global-value-names defs.mod)
11927+ =/ globals=(list term) (weld values.u.prepared (weld (import-binding-names imports.mod) vals))
11928+ =/ surs=(list term) (collect-sur-imports imports.mod)
11929+ =/ declared=(list term) (collect-mark-imports imports.mod)
11930+ =/ reserved=(list term) (weld molds.u.prepared (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
11931+ =/ top=(list term) (turn ms |=(m=[name=term body=shape] name.m))
11932+ =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~ ~ ~ ~]
11933+ =/ inferred=(unit [template=ischeme state=istate])
11934+ (infer-mold-template shape.i.selected state(active ~[name], in-mold &))
11935+ ?~ inferred [%| 'selected mold needs unsupported inference']
11936+ =/ template=ischeme template.u.inferred
11937+ =. typ.template (label-direct-union typ.template shape.i.selected name state)
11938+ =. typ.template (itype-normalize typ.template sub.state.u.inferred)
11939+ =/ cap=@ud (min fuel 256)
11940+ =/ analysis=igate-free (gate-free-type typ.template cap ~)
11941+ [%& [file src name u.prepared externals marks modules cache.p.js template fuel cap analysis]]
11942+::
1073011943:: +golden-types-with-modules fails closed for imports without prelude
1073111944:: scope. +golden-types-with-prelude resolves supported library graphs;
1073211945:: its report remains partial and unreachable sources are not examined.
@@ -10833,6 +12046,8 @@
1083312046 =/ resolution=iresolved (resolve-groups ds molds globals externals surs mark-externals marks jimports reserved-molds file prelude)
1083412047 =/ cycles=(list icycle) (definite-value-cycles ds globals)
1083512048 =/ env=ienv env.resolution
12049+ =/ source-defs=(map term def) (direct-checked-gates ds env)
12050+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
1083612051 =/ lines=(list @t) ~
1083712052 |-
1083812053 ?~ ds (of-wain:format ['partial inference; module not checked' (flop lines)])
@@ -10852,7 +12067,9 @@
1085212067 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
1085312068 $(ds t.ds, lines [line lines])
1085412069 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10855− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~]
12070+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~]
12071+ =. gate-defs.initial source-defs
12072+ =. head-evidence.initial heads
1085612073 =. initial (reserve-def-caps val.d initial)
1085712074 =/ result=iresult
1085812075 ?: |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
@@ -10892,4 +12109,121 @@
1089212109 =/ printable=itype (canonical-itype typ vars)
1089312110 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype printable ~)}{(show-atom-constraint printable)}")
1089412111 $(ds t.ds, lines [line lines])
12112+:: Experimental per-module, source-derived recursive tree index.
12113+:: The two tags and the exact children/list/self layout are fixed-shape
12114+:: checks, so ordinary definitions incur no type-tree or source scans.
12115+++ grec-tagged-fields
12116+ |= sh=shape
12117+ ^- (unit [tag=@ fields=(list field)])
12118+ ?. ?=(%cell -.sh) ~
12119+ ?~ fields.sh ~
12120+ =/ head=field i.fields.sh
12121+ ?. ?=(%bare -.head) ~
12122+ ?. ?=(%const -.shape.head) ~
12123+ ?. &(?=(%term form.lit.shape.head) =(%tas aura.lit.shape.head)) ~
12124+ `[val.lit.shape.head t.fields.sh]
12125+++ grec-tree-children
12126+ |= [fs=(list field) param=@t]
12127+ ^- (unit field)
12128+ ?~ fs ~
12129+ ?~ t.fs `i.fs
12130+ ?^ t.t.fs ~
12131+ =/ event=field i.fs
12132+ =/ kids=field i.t.fs
12133+ ?. &(?=(%face -.event) ?=(%face -.kids)) ~
12134+ ?. !=(name.event name.kids) ~
12135+ ?. ?=(%fn -.shape.event) ~
12136+ ?. ?=(%aura -.sample.shape.event) ~
12137+ ?. =(%t aura.sample.shape.event) ~
12138+ ?. ?=(%tvar -.product.shape.event) ~
12139+ ?. =(param name.product.shape.event) ~
12140+ `kids
12141+::
12142+++ grec-tree-proof
12143+ |= [name=term sh=shape]
12144+ ^- ?
12145+ ?. ?=(%generic -.sh) |
12146+ ?. ?=([@ ~] vars.sh) |
12147+ =/ param=@t i.vars.sh
12148+ ?. ?=(%union -.body.sh) |
12149+ ?. ?=([* [* ~]] cases.body.sh) |
12150+ =/ a=(unit [tag=@ fields=(list field)]) (grec-tagged-fields i.cases.body.sh)
12151+ =/ b=(unit [tag=@ fields=(list field)]) (grec-tagged-fields i.t.cases.body.sh)
12152+ ?~ a |
12153+ ?~ b |
12154+ ?. !=(tag.u.a tag.u.b) |
12155+ ?. ?=([* ~] fields.u.a) |
12156+ =/ value=field i.fields.u.a
12157+ ?. ?=(%face -.value) |
12158+ ?. ?=(%aura -.shape.value) |
12159+ ?. =(%t aura.shape.value) |
12160+ =/ selected=(unit field) (grec-tree-children fields.u.b param)
12161+ ?~ selected |
12162+ =/ kids=field u.selected
12163+ ?. ?=(%face -.kids) |
12164+ ?. ?=(%apply -.shape.kids) |
12165+ ?. =(ref.shape.kids ~[%list]) |
12166+ ?. ?=([* ~] args.shape.kids) |
12167+ =/ self=shape i.args.shape.kids
12168+ ?. ?=(%apply -.self) |
12169+ ?. =(ref.self ~[name]) |
12170+ ?. ?=([* ~] args.self) |
12171+ ?. ?=(%tvar -.i.args.self) |
12172+ =(name.i.args.self param)
12173++$ grec-collected [molds=imolds proofs=(map term shape)]
12174+:: Experimental one-layer analysis view, never an exported mold identity.
12175+++ grec-unfold-view
12176+ |= [typ=itype fuel=@ud]
12177+ ^- (unit [view=itype left=@ud])
12178+ ?. ?=(%grec -.typ) ~
12179+ ?: =(fuel 0) ~
12180+ ?. ?=([* ~] args.typ) ~
12181+ =/ sh=shape proof.typ
12182+ ?. (grec-tree-proof name.typ sh) ~
12183+ ?> ?=(%generic -.sh)
12184+ ?> ?=([@ ~] vars.sh)
12185+ ?> ?=(%union -.body.sh)
12186+ ?> ?=([* [* ~]] cases.body.sh)
12187+ =/ ca=shape i.cases.body.sh
12188+ =/ cb=shape i.t.cases.body.sh
12189+ ?> ?=(%cell -.ca)
12190+ ?> ?=(%cell -.cb)
12191+ ?> ?=([* [* ~]] fields.ca)
12192+ ?> ?=([* *] fields.cb)
12193+ =/ tag-a=field i.fields.ca
12194+ =/ tag-b=field i.fields.cb
12195+ ?> ?=(%bare -.tag-a)
12196+ ?> ?=(%bare -.tag-b)
12197+ ?> ?=(%const -.shape.tag-a)
12198+ ?> ?=(%const -.shape.tag-b)
12199+ =/ text-field=field i.t.fields.ca
12200+ ?> ?=(%face -.text-field)
12201+ =/ branch=(list field) t.fields.cb
12202+ =/ kids=(unit field) (grec-tree-children branch i.vars.sh)
12203+ ?~ kids ~
12204+ ?> ?=(%face -.u.kids)
12205+ =/ children=itype [%face name.u.kids [%collection %list ~[typ]]]
12206+ ?> ?=(^ branch)
12207+ =/ payload=itype
12208+ ?~ t.branch children
12209+ =/ event=field i.branch
12210+ ?> ?=(%face -.event)
12211+ [%cell [%face name.event [%fn [%atom %t] i.args.typ]] children]
12212+ =/ leaf=itype [%cell [%const lit.shape.tag-a] [%face name.text-field [%atom %t]]]
12213+ =/ node=itype [%cell [%const lit.shape.tag-b] payload]
12214+ `[[%union ~[leaf node] ~ ~ ~] (dec fuel)]
12215+::
12216+++ grec-collect-molds
12217+ |= ds=(list def)
12218+ ^- grec-collected
12219+ ?~ ds [~ *(map term shape)]
12220+ =/ rest=grec-collected $(ds t.ds)
12221+ ?. ?=(%mold -.i.ds) rest
12222+ =/ name=term name.i.ds
12223+ =/ body=shape shape.i.ds
12224+ =/ proofs=(map term shape) proofs.rest
12225+ =? proofs (grec-tree-proof name body) (~(put by proofs) name body)
12226+ [[[name body] molds.rest] proofs]
12227+::
12228+
1089512229--
jibb-dev/lib/jibb/prelude.jibb+31
@@ -337,3 +337,34 @@
337337
338338+$ ask |$ [M] (ask.internal M)
339339++ pure |= x=M ^- (ask M) [%pure x]
340+
341+:: This mold describes the value; island watchability needs separate proof.
342++$ sub |$ [M]
343+ [%watch a=(ask M)]
344+ [%every gap=@dr reply=$-(@da M)]
345+ [%url reply=$-(path M)]
346+
347+:: Count a finite list with the source-backed addition gate.
348+++ lent |= xs=(list A)
349+ ^- @ud
350+ ?- xs
351+ ~ 0
352+ [item rest] (add 1 (lent rest))
353+
354+++ lth |= args=[A A]
355+ ?- args
356+ [x y] (gth y x)
357+
358+++ gte |= args=[A A]
359+ ?- args
360+ [x y] (not (gth y x))
361+
362+++ lte |= args=[A A]
363+ ?- args
364+ [x y] (not (gth x y))
365+
366+++ zing |= xss=(list (list A))
367+ ^- (list A)
368+ ?- xss
369+ ~ ~
370+ [xs rest] (weld xs (zing rest))
tests/golden/types-constructor-context/about.txtnew file+1
@@ -0,0 +1 @@
1+Constructor callback results require a known contextual union. This case checks unknown, matching, missing and wrong payload cases, aliases, written capitals and pending obligations.
tests/golden/types-constructor-context/source.jibbnew file+37
@@ -0,0 +1,37 @@
1++$ msg
2+ [%got value=@t]
3+ %other
4++$ alias msg
5++$ wrong-payload
6+ [%got value=@p]
7+ %other
8++$ missing
9+ [%different value=@t]
10+ %other
11++$ maybe |$ [A]
12+ [%got value=A]
13+ %other
14+++ call |= callback=$-(@t M) (callback "payload")
15+++ call-ship |= callback=$-(@p M) (callback ~zod)
16+++ unknown (call |=%got)
17+++ later-context ^- msg (call |=%got)
18+++ named-alias ^- alias (call |=%got)
19+++ wrong-context ^- wrong-payload (call |=%got)
20+++ missing-case ^- missing (call |=%got)
21+++ generic-context ^- (maybe @t) (call |=%got)
22+++ generic-wrong ^- (maybe @p) (call |=%got)
23+++ generic-right-ship ^- (maybe @p) (call-ship |=%got)
24+++ named-capital |= value=A
25+ ^- (maybe A)
26+ (|=(callback=$-(A M) (callback value)) |=%got)
27+++ discarded-pending
28+ ~& %unrelated
29+ ^- msg (call |=%got)
30+++ discarded-constructor
31+ ~& |=%missing
32+ ^- msg (call |=%got)
33+++ existing-no-context ^- $-(@t msg) |=%got
34+++ wrong-existing ^- $-(@p msg) |=%got
35+++ later-use ^- msg unknown
36+++ noun-context ^- * (call |=%got)
37+++ other-known-origin ^- (ask @t) (call |=%got)
tests/golden/types-constructor-context/tokens.txtnew file+289
@@ -0,0 +1,289 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %got
6+2:9 name value
7+2:14 tight glyph =
8+2:15 tight aura @t
9+2:17 tight glyph ]
10+3:3 NEWLINE
11+3:3 lit %other
12+4:1 DEDENT
13+4:1 NEWLINE
14+4:1 glyph +$
15+4:4 name alias
16+4:10 name msg
17+5:1 NEWLINE
18+5:1 glyph +$
19+5:4 name wrong-payload
20+6:3 INDENT
21+6:3 glyph [
22+6:4 tight lit %got
23+6:9 name value
24+6:14 tight glyph =
25+6:15 tight aura @p
26+6:17 tight glyph ]
27+7:3 NEWLINE
28+7:3 lit %other
29+8:1 DEDENT
30+8:1 NEWLINE
31+8:1 glyph +$
32+8:4 name missing
33+9:3 INDENT
34+9:3 glyph [
35+9:4 tight lit %different
36+9:15 name value
37+9:20 tight glyph =
38+9:21 tight aura @t
39+9:23 tight glyph ]
40+10:3 NEWLINE
41+10:3 lit %other
42+11:1 DEDENT
43+11:1 NEWLINE
44+11:1 glyph +$
45+11:4 name maybe
46+11:10 glyph |$
47+11:13 glyph [
48+11:14 tight tvar A
49+11:15 tight glyph ]
50+12:3 INDENT
51+12:3 glyph [
52+12:4 tight lit %got
53+12:9 name value
54+12:14 tight glyph =
55+12:15 tight tvar A
56+12:16 tight glyph ]
57+13:3 NEWLINE
58+13:3 lit %other
59+14:1 DEDENT
60+14:1 NEWLINE
61+14:1 glyph ++
62+14:4 name call
63+14:9 glyph |=
64+14:12 name callback
65+14:20 tight glyph =
66+14:21 tight glyph $-(
67+14:24 tight aura @t
68+14:27 tvar M
69+14:28 tight glyph )
70+14:30 glyph (
71+14:31 tight name callback
72+14:40 str "payload"
73+14:49 tight glyph )
74+15:1 NEWLINE
75+15:1 glyph ++
76+15:4 name call-ship
77+15:14 glyph |=
78+15:17 name callback
79+15:25 tight glyph =
80+15:26 tight glyph $-(
81+15:29 tight aura @p
82+15:32 tvar M
83+15:33 tight glyph )
84+15:35 glyph (
85+15:36 tight name callback
86+15:45 lit ~zod
87+15:49 tight glyph )
88+16:1 NEWLINE
89+16:1 glyph ++
90+16:4 name unknown
91+16:12 glyph (
92+16:13 tight name call
93+16:18 glyph |=
94+16:20 tight lit %got
95+16:24 tight glyph )
96+17:1 NEWLINE
97+17:1 glyph ++
98+17:4 name later-context
99+17:18 glyph ^-
100+17:21 name msg
101+17:25 glyph (
102+17:26 tight name call
103+17:31 glyph |=
104+17:33 tight lit %got
105+17:37 tight glyph )
106+18:1 NEWLINE
107+18:1 glyph ++
108+18:4 name named-alias
109+18:16 glyph ^-
110+18:19 name alias
111+18:25 glyph (
112+18:26 tight name call
113+18:31 glyph |=
114+18:33 tight lit %got
115+18:37 tight glyph )
116+19:1 NEWLINE
117+19:1 glyph ++
118+19:4 name wrong-context
119+19:18 glyph ^-
120+19:21 name wrong-payload
121+19:35 glyph (
122+19:36 tight name call
123+19:41 glyph |=
124+19:43 tight lit %got
125+19:47 tight glyph )
126+20:1 NEWLINE
127+20:1 glyph ++
128+20:4 name missing-case
129+20:17 glyph ^-
130+20:20 name missing
131+20:28 glyph (
132+20:29 tight name call
133+20:34 glyph |=
134+20:36 tight lit %got
135+20:40 tight glyph )
136+21:1 NEWLINE
137+21:1 glyph ++
138+21:4 name generic-context
139+21:20 glyph ^-
140+21:23 glyph (
141+21:24 tight name maybe
142+21:30 aura @t
143+21:32 tight glyph )
144+21:34 glyph (
145+21:35 tight name call
146+21:40 glyph |=
147+21:42 tight lit %got
148+21:46 tight glyph )
149+22:1 NEWLINE
150+22:1 glyph ++
151+22:4 name generic-wrong
152+22:18 glyph ^-
153+22:21 glyph (
154+22:22 tight name maybe
155+22:28 aura @p
156+22:30 tight glyph )
157+22:32 glyph (
158+22:33 tight name call
159+22:38 glyph |=
160+22:40 tight lit %got
161+22:44 tight glyph )
162+23:1 NEWLINE
163+23:1 glyph ++
164+23:4 name generic-right-ship
165+23:23 glyph ^-
166+23:26 glyph (
167+23:27 tight name maybe
168+23:33 aura @p
169+23:35 tight glyph )
170+23:37 glyph (
171+23:38 tight name call-ship
172+23:48 glyph |=
173+23:50 tight lit %got
174+23:54 tight glyph )
175+24:1 NEWLINE
176+24:1 glyph ++
177+24:4 name named-capital
178+24:18 glyph |=
179+24:21 name value
180+24:26 tight glyph =
181+24:27 tight tvar A
182+25:3 INDENT
183+25:3 glyph ^-
184+25:6 glyph (
185+25:7 tight name maybe
186+25:13 tvar A
187+25:14 tight glyph )
188+26:5 INDENT
189+26:5 glyph (
190+26:6 tight glyph |=(
191+26:9 tight name callback
192+26:17 tight glyph =
193+26:18 tight glyph $-(
194+26:21 tight tvar A
195+26:23 tvar M
196+26:24 tight glyph )
197+26:26 glyph (
198+26:27 tight name callback
199+26:36 name value
200+26:41 tight glyph )
201+26:42 tight glyph )
202+26:44 glyph |=
203+26:46 tight lit %got
204+26:50 tight glyph )
205+27:1 DEDENT
206+27:1 DEDENT
207+27:1 NEWLINE
208+27:1 glyph ++
209+27:4 name discarded-pending
210+28:3 INDENT
211+28:3 glyph ~&
212+28:6 lit %unrelated
213+29:5 INDENT
214+29:5 glyph ^-
215+29:8 name msg
216+29:12 glyph (
217+29:13 tight name call
218+29:18 glyph |=
219+29:20 tight lit %got
220+29:24 tight glyph )
221+30:1 DEDENT
222+30:1 DEDENT
223+30:1 NEWLINE
224+30:1 glyph ++
225+30:4 name discarded-constructor
226+31:3 INDENT
227+31:3 glyph ~&
228+31:6 glyph |=
229+31:8 tight lit %missing
230+32:5 INDENT
231+32:5 glyph ^-
232+32:8 name msg
233+32:12 glyph (
234+32:13 tight name call
235+32:18 glyph |=
236+32:20 tight lit %got
237+32:24 tight glyph )
238+33:1 DEDENT
239+33:1 DEDENT
240+33:1 NEWLINE
241+33:1 glyph ++
242+33:4 name existing-no-context
243+33:24 glyph ^-
244+33:27 glyph $-(
245+33:30 tight aura @t
246+33:33 name msg
247+33:36 tight glyph )
248+33:38 glyph |=
249+33:40 tight lit %got
250+34:1 NEWLINE
251+34:1 glyph ++
252+34:4 name wrong-existing
253+34:19 glyph ^-
254+34:22 glyph $-(
255+34:25 tight aura @p
256+34:28 name msg
257+34:31 tight glyph )
258+34:33 glyph |=
259+34:35 tight lit %got
260+35:1 NEWLINE
261+35:1 glyph ++
262+35:4 name later-use
263+35:14 glyph ^-
264+35:17 name msg
265+35:21 name unknown
266+36:1 NEWLINE
267+36:1 glyph ++
268+36:4 name noun-context
269+36:17 glyph ^-
270+36:20 glyph *
271+36:22 glyph (
272+36:23 tight name call
273+36:28 glyph |=
274+36:30 tight lit %got
275+36:34 tight glyph )
276+37:1 NEWLINE
277+37:1 glyph ++
278+37:4 name other-known-origin
279+37:23 glyph ^-
280+37:26 glyph (
281+37:27 tight name ask
282+37:31 aura @t
283+37:33 tight glyph )
284+37:35 glyph (
285+37:36 tight name call
286+37:41 glyph |=
287+37:43 tight lit %got
288+37:47 tight glyph )
289+37:48 NEWLINE
tests/golden/types-constructor-context/tree.txtnew file+130
@@ -0,0 +1,130 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %got)
6+ (face 2:9 value (aura 2:15 @t)))
7+ (const 3:3 %other)))
8+ (mold 4:1 alias (ref 4:10 msg))
9+ (mold 5:1 wrong-payload
10+ (union 6:3
11+ (cell 6:3
12+ (const 6:4 %got)
13+ (face 6:9 value (aura 6:15 @p)))
14+ (const 7:3 %other)))
15+ (mold 8:1 missing
16+ (union 9:3
17+ (cell 9:3
18+ (const 9:4 %different)
19+ (face 9:15 value (aura 9:21 @t)))
20+ (const 10:3 %other)))
21+ (mold 11:1 maybe
22+ (generic 11:10 A
23+ (union 12:3
24+ (cell 12:3
25+ (const 12:4 %got)
26+ (face 12:9 value (tvar 12:15 A)))
27+ (const 13:3 %other))))
28+ (value 14:1 call
29+ (gate 14:9
30+ (face 14:12 callback
31+ (fn 14:21 (aura 14:24 @t) (tvar 14:27 M)))
32+ (group 14:30
33+ (call 14:31 (wing 14:31 callback) (str 14:40 "payload")))))
34+ (value 15:1 call-ship
35+ (gate 15:14
36+ (face 15:17 callback
37+ (fn 15:26 (aura 15:29 @p) (tvar 15:32 M)))
38+ (group 15:35
39+ (call 15:36 (wing 15:36 callback) (lit 15:45 ~zod)))))
40+ (value 16:1 unknown
41+ (group 16:12
42+ (call 16:13 (wing 16:13 call) (ctor 16:18 %got))))
43+ (value 17:1 later-context
44+ (cast 17:18
45+ (ref 17:21 msg)
46+ (group 17:25
47+ (call 17:26 (wing 17:26 call) (ctor 17:31 %got)))))
48+ (value 18:1 named-alias
49+ (cast 18:16
50+ (ref 18:19 alias)
51+ (group 18:25
52+ (call 18:26 (wing 18:26 call) (ctor 18:31 %got)))))
53+ (value 19:1 wrong-context
54+ (cast 19:18
55+ (ref 19:21 wrong-payload)
56+ (group 19:35
57+ (call 19:36 (wing 19:36 call) (ctor 19:41 %got)))))
58+ (value 20:1 missing-case
59+ (cast 20:17
60+ (ref 20:20 missing)
61+ (group 20:28
62+ (call 20:29 (wing 20:29 call) (ctor 20:34 %got)))))
63+ (value 21:1 generic-context
64+ (cast 21:20
65+ (apply 21:23 maybe (aura 21:30 @t))
66+ (group 21:34
67+ (call 21:35 (wing 21:35 call) (ctor 21:40 %got)))))
68+ (value 22:1 generic-wrong
69+ (cast 22:18
70+ (apply 22:21 maybe (aura 22:28 @p))
71+ (group 22:32
72+ (call 22:33 (wing 22:33 call) (ctor 22:38 %got)))))
73+ (value 23:1 generic-right-ship
74+ (cast 23:23
75+ (apply 23:26 maybe (aura 23:33 @p))
76+ (group 23:37
77+ (call 23:38 (wing 23:38 call-ship) (ctor 23:48 %got)))))
78+ (value 24:1 named-capital
79+ (gate 24:18
80+ (face 24:21 value (tvar 24:27 A))
81+ (body 25:3
82+ (cast 25:3
83+ (apply 25:6 maybe (tvar 25:13 A))
84+ (body 26:5
85+ (group 26:5
86+ (call 26:6
87+ (gate-wide 26:6
88+ (face 26:9 callback
89+ (fn 26:18 (tvar 26:21 A) (tvar 26:23 M)))
90+ (group 26:26
91+ (call 26:27 (wing 26:27 callback) (wing 26:36 value))))
92+ (ctor 26:44 %got))))))))
93+ (value 27:1 discarded-pending
94+ (body 28:3
95+ (trace 28:3
96+ (lit 28:6 %unrelated)
97+ (body 29:5
98+ (cast 29:5
99+ (ref 29:8 msg)
100+ (group 29:12
101+ (call 29:13 (wing 29:13 call) (ctor 29:18 %got))))))))
102+ (value 30:1 discarded-constructor
103+ (body 31:3
104+ (trace 31:3
105+ (ctor 31:6 %missing)
106+ (body 32:5
107+ (cast 32:5
108+ (ref 32:8 msg)
109+ (group 32:12
110+ (call 32:13 (wing 32:13 call) (ctor 32:18 %got))))))))
111+ (value 33:1 existing-no-context
112+ (cast 33:24
113+ (fn 33:27 (aura 33:30 @t) (ref 33:33 msg))
114+ (ctor 33:38 %got)))
115+ (value 34:1 wrong-existing
116+ (cast 34:19
117+ (fn 34:22 (aura 34:25 @p) (ref 34:28 msg))
118+ (ctor 34:33 %got)))
119+ (value 35:1 later-use
120+ (cast 35:14 (ref 35:17 msg) (wing 35:21 unknown)))
121+ (value 36:1 noun-context
122+ (cast 36:17
123+ (noun 36:20)
124+ (group 36:22
125+ (call 36:23 (wing 36:23 call) (ctor 36:28 %got)))))
126+ (value 37:1 other-known-origin
127+ (cast 37:23
128+ (apply 37:26 ask (aura 37:31 @t))
129+ (group 37:35
130+ (call 37:36 (wing 37:36 call) (ctor 37:41 %got))))))
tests/golden/types-constructor-context/types.txtnew file+54
@@ -0,0 +1,54 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ alias: not checked
4++$ wrong-payload: cases proven disjoint; mold not checked
5++$ missing: cases proven disjoint; mold not checked
6++$ maybe: cases proven disjoint; mold not checked
7+++ call: $-($-(@t A) A)
8+++ call-ship: $-($-(@p A) A)
9+++ unknown: call constraint is not supported by partial inference
10+++ later-context: msg
11+++ named-alias: msg
12+++ wrong-context: call's sample and argument types do not unify
13+/tests/golden/types-constructor-context/source.jibb:19:36: called gate
14+++ wrong-context ^- wrong-payload (call |=%got)
15+ ^
16+/tests/golden/types-constructor-context/source.jibb:19:41: argument
17+++ wrong-context ^- wrong-payload (call |=%got)
18+ ^
19+++ missing-case: call's sample and argument types do not unify
20+/tests/golden/types-constructor-context/source.jibb:20:29: called gate
21+++ missing-case ^- missing (call |=%got)
22+ ^
23+/tests/golden/types-constructor-context/source.jibb:20:34: argument
24+++ missing-case ^- missing (call |=%got)
25+ ^
26+++ generic-context: (maybe @t)
27+++ generic-wrong: call's sample and argument types do not unify
28+/tests/golden/types-constructor-context/source.jibb:22:33: called gate
29+++ generic-wrong ^- (maybe @p) (call |=%got)
30+ ^
31+/tests/golden/types-constructor-context/source.jibb:22:38: argument
32+++ generic-wrong ^- (maybe @p) (call |=%got)
33+ ^
34+++ generic-right-ship: (maybe @p)
35+++ named-capital: explicit capital constraints are not supported by partial inference
36+++ discarded-pending: tag needs context in partial inference
37+++ discarded-constructor: tag needs context in partial inference
38+++ existing-no-context: $-(@t msg)
39+++ wrong-existing: cast mold and expression type do not unify
40+/tests/golden/types-constructor-context/source.jibb:34:22: cast mold
41+++ wrong-existing ^- $-(@p msg) |=%got
42+ ^
43+/tests/golden/types-constructor-context/source.jibb:34:33: expression
44+++ wrong-existing ^- $-(@p msg) |=%got
45+ ^
46+++ later-use: name is not available to partial inference
47+++ noun-context: call's sample and argument types do not unify
48+/tests/golden/types-constructor-context/source.jibb:36:23: called gate has type $-($-(@t *) *)
49+++ noun-context ^- * (call |=%got)
50+ ^
51+/tests/golden/types-constructor-context/source.jibb:36:28: argument
52+++ noun-context ^- * (call |=%got)
53+ ^
54+++ other-known-origin: cast mold is not supported by partial inference
tests/golden/types-equal-head-disjoint/about.txtnew file+2
@@ -0,0 +1,2 @@
1+source: equal literal heads may have disjoint payloads and are compared by noun.
2+tests: Singleton payloads %alpha and %beta select distinct same-head cases; @t and @p cases overlap at zero. Incompatible samples and unrelated pending literals fail closed.
tests/golden/types-equal-head-disjoint/source.jibbnew file+25
@@ -0,0 +1,25 @@
1++$ split
2+ [%one value=@t]
3+ [%one value=@p]
4++$ split-zero
5+ [~ value=@t]
6+ [%.y value=@p]
7++$ nullable
8+ ~
9+ [~ value=@t]
10+++ cord ^- $-(@t split) |=%one
11+++ ship ^- $-(@p split) |=%one
12+++ neither ^- $-(@ud split) |=%one
13+++ zero-cord ^- $-(@t split-zero) |=%$
14+++ zero-ship ^- $-(@p split-zero) |=%$
15+++ zero-neither ^- $-(@ud split-zero) |=%$
16+++ contextual ^- $-(@t nullable) |=%$
17+++ pending
18+ ~& %orphan
19+ ^- $-(@t split) |=%one
20++$ exact
21+ [%same %alpha]
22+ [%same %beta]
23+++ first ^- $-(%alpha exact) |=%same
24+++ second ^- $-(%beta exact) |=%same
25+++ no-case ^- $-(%other exact) |=%same
tests/golden/types-equal-head-disjoint/tokens.txtnew file+179
@@ -0,0 +1,179 @@
1+1:1 glyph +$
2+1:4 name split
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %one
6+2:9 name value
7+2:14 tight glyph =
8+2:15 tight aura @t
9+2:17 tight glyph ]
10+3:3 NEWLINE
11+3:3 glyph [
12+3:4 tight lit %one
13+3:9 name value
14+3:14 tight glyph =
15+3:15 tight aura @p
16+3:17 tight glyph ]
17+4:1 DEDENT
18+4:1 NEWLINE
19+4:1 glyph +$
20+4:4 name split-zero
21+5:3 INDENT
22+5:3 glyph [
23+5:4 tight lit ~
24+5:6 name value
25+5:11 tight glyph =
26+5:12 tight aura @t
27+5:14 tight glyph ]
28+6:3 NEWLINE
29+6:3 glyph [
30+6:4 tight lit %.y
31+6:8 name value
32+6:13 tight glyph =
33+6:14 tight aura @p
34+6:16 tight glyph ]
35+7:1 DEDENT
36+7:1 NEWLINE
37+7:1 glyph +$
38+7:4 name nullable
39+8:3 INDENT
40+8:3 lit ~
41+9:3 NEWLINE
42+9:3 glyph [
43+9:4 tight lit ~
44+9:6 name value
45+9:11 tight glyph =
46+9:12 tight aura @t
47+9:14 tight glyph ]
48+10:1 DEDENT
49+10:1 NEWLINE
50+10:1 glyph ++
51+10:4 name cord
52+10:9 glyph ^-
53+10:12 glyph $-(
54+10:15 tight aura @t
55+10:18 name split
56+10:23 tight glyph )
57+10:25 glyph |=
58+10:27 tight lit %one
59+11:1 NEWLINE
60+11:1 glyph ++
61+11:4 name ship
62+11:9 glyph ^-
63+11:12 glyph $-(
64+11:15 tight aura @p
65+11:18 name split
66+11:23 tight glyph )
67+11:25 glyph |=
68+11:27 tight lit %one
69+12:1 NEWLINE
70+12:1 glyph ++
71+12:4 name neither
72+12:12 glyph ^-
73+12:15 glyph $-(
74+12:18 tight aura @ud
75+12:22 name split
76+12:27 tight glyph )
77+12:29 glyph |=
78+12:31 tight lit %one
79+13:1 NEWLINE
80+13:1 glyph ++
81+13:4 name zero-cord
82+13:14 glyph ^-
83+13:17 glyph $-(
84+13:20 tight aura @t
85+13:23 name split-zero
86+13:33 tight glyph )
87+13:35 glyph |=
88+13:37 tight lit %$
89+14:1 NEWLINE
90+14:1 glyph ++
91+14:4 name zero-ship
92+14:14 glyph ^-
93+14:17 glyph $-(
94+14:20 tight aura @p
95+14:23 name split-zero
96+14:33 tight glyph )
97+14:35 glyph |=
98+14:37 tight lit %$
99+15:1 NEWLINE
100+15:1 glyph ++
101+15:4 name zero-neither
102+15:17 glyph ^-
103+15:20 glyph $-(
104+15:23 tight aura @ud
105+15:27 name split-zero
106+15:37 tight glyph )
107+15:39 glyph |=
108+15:41 tight lit %$
109+16:1 NEWLINE
110+16:1 glyph ++
111+16:4 name contextual
112+16:15 glyph ^-
113+16:18 glyph $-(
114+16:21 tight aura @t
115+16:24 name nullable
116+16:32 tight glyph )
117+16:34 glyph |=
118+16:36 tight lit %$
119+17:1 NEWLINE
120+17:1 glyph ++
121+17:4 name pending
122+18:3 INDENT
123+18:3 glyph ~&
124+18:6 lit %orphan
125+19:5 INDENT
126+19:5 glyph ^-
127+19:8 glyph $-(
128+19:11 tight aura @t
129+19:14 name split
130+19:19 tight glyph )
131+19:21 glyph |=
132+19:23 tight lit %one
133+20:1 DEDENT
134+20:1 DEDENT
135+20:1 NEWLINE
136+20:1 glyph +$
137+20:4 name exact
138+21:3 INDENT
139+21:3 glyph [
140+21:4 tight lit %same
141+21:10 lit %alpha
142+21:16 tight glyph ]
143+22:3 NEWLINE
144+22:3 glyph [
145+22:4 tight lit %same
146+22:10 lit %beta
147+22:15 tight glyph ]
148+23:1 DEDENT
149+23:1 NEWLINE
150+23:1 glyph ++
151+23:4 name first
152+23:10 glyph ^-
153+23:13 glyph $-(
154+23:16 tight lit %alpha
155+23:23 name exact
156+23:28 tight glyph )
157+23:30 glyph |=
158+23:32 tight lit %same
159+24:1 NEWLINE
160+24:1 glyph ++
161+24:4 name second
162+24:11 glyph ^-
163+24:14 glyph $-(
164+24:17 tight lit %beta
165+24:23 name exact
166+24:28 tight glyph )
167+24:30 glyph |=
168+24:32 tight lit %same
169+25:1 NEWLINE
170+25:1 glyph ++
171+25:4 name no-case
172+25:12 glyph ^-
173+25:15 glyph $-(
174+25:18 tight lit %other
175+25:25 name exact
176+25:30 tight glyph )
177+25:32 glyph |=
178+25:34 tight lit %same
179+25:39 NEWLINE
tests/golden/types-equal-head-disjoint/tree.txtnew file+75
@@ -0,0 +1,75 @@
1+(module
2+ (mold 1:1 split
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %one)
6+ (face 2:9 value (aura 2:15 @t)))
7+ (cell 3:3
8+ (const 3:4 %one)
9+ (face 3:9 value (aura 3:15 @p)))))
10+ (mold 4:1 split-zero
11+ (union 5:3
12+ (cell 5:3
13+ (const 5:4 ~)
14+ (face 5:6 value (aura 5:12 @t)))
15+ (cell 6:3
16+ (const 6:4 %.y)
17+ (face 6:8 value (aura 6:14 @p)))))
18+ (mold 7:1 nullable
19+ (union 8:3
20+ (const 8:3 ~)
21+ (cell 9:3
22+ (const 9:4 ~)
23+ (face 9:6 value (aura 9:12 @t)))))
24+ (value 10:1 cord
25+ (cast 10:9
26+ (fn 10:12 (aura 10:15 @t) (ref 10:18 split))
27+ (ctor 10:25 %one)))
28+ (value 11:1 ship
29+ (cast 11:9
30+ (fn 11:12 (aura 11:15 @p) (ref 11:18 split))
31+ (ctor 11:25 %one)))
32+ (value 12:1 neither
33+ (cast 12:12
34+ (fn 12:15 (aura 12:18 @ud) (ref 12:22 split))
35+ (ctor 12:29 %one)))
36+ (value 13:1 zero-cord
37+ (cast 13:14
38+ (fn 13:17 (aura 13:20 @t) (ref 13:23 split-zero))
39+ (ctor 13:35 %$)))
40+ (value 14:1 zero-ship
41+ (cast 14:14
42+ (fn 14:17 (aura 14:20 @p) (ref 14:23 split-zero))
43+ (ctor 14:35 %$)))
44+ (value 15:1 zero-neither
45+ (cast 15:17
46+ (fn 15:20 (aura 15:23 @ud) (ref 15:27 split-zero))
47+ (ctor 15:39 %$)))
48+ (value 16:1 contextual
49+ (cast 16:15
50+ (fn 16:18 (aura 16:21 @t) (ref 16:24 nullable))
51+ (ctor 16:34 %$)))
52+ (value 17:1 pending
53+ (body 18:3
54+ (trace 18:3
55+ (lit 18:6 %orphan)
56+ (body 19:5
57+ (cast 19:5
58+ (fn 19:8 (aura 19:11 @t) (ref 19:14 split))
59+ (ctor 19:21 %one))))))
60+ (mold 20:1 exact
61+ (union 21:3
62+ (cell 21:3 (const 21:4 %same) (const 21:10 %alpha))
63+ (cell 22:3 (const 22:4 %same) (const 22:10 %beta))))
64+ (value 23:1 first
65+ (cast 23:10
66+ (fn 23:13 (const 23:16 %alpha) (ref 23:23 exact))
67+ (ctor 23:30 %same)))
68+ (value 24:1 second
69+ (cast 24:11
70+ (fn 24:14 (const 24:17 %beta) (ref 24:23 exact))
71+ (ctor 24:30 %same)))
72+ (value 25:1 no-case
73+ (cast 25:12
74+ (fn 25:15 (const 25:18 %other) (ref 25:25 exact))
75+ (ctor 25:32 %same))))
tests/golden/types-equal-head-disjoint/types.txtnew file+34
@@ -0,0 +1,34 @@
1+partial inference; module not checked
2++$ split: overlapping cases; mold not checked
3+/tests/golden/types-equal-head-disjoint/source.jibb:2:3: first union case
4+ [%one value=@t]
5+ ^
6+/tests/golden/types-equal-head-disjoint/source.jibb:3:3: overlapping case
7+ [%one value=@p]
8+ ^
9++$ split-zero: overlapping cases; mold not checked
10+/tests/golden/types-equal-head-disjoint/source.jibb:5:3: first union case
11+ [~ value=@t]
12+ ^
13+/tests/golden/types-equal-head-disjoint/source.jibb:6:3: overlapping case
14+ [%.y value=@p]
15+ ^
16++$ nullable: cases proven disjoint; mold not checked
17+++ cord: cast mold is not supported by partial inference
18+++ ship: cast mold is not supported by partial inference
19+++ neither: cast mold is not supported by partial inference
20+++ zero-cord: cast mold is not supported by partial inference
21+++ zero-ship: cast mold is not supported by partial inference
22+++ zero-neither: cast mold is not supported by partial inference
23+++ contextual: $-(@t nullable)
24+++ pending: cast mold is not supported by partial inference
25++$ exact: cases proven disjoint; mold not checked
26+++ first: $-(%alpha exact)
27+++ second: $-(%beta exact)
28+++ no-case: cast mold and expression type do not unify
29+/tests/golden/types-equal-head-disjoint/source.jibb:25:15: cast mold
30+++ no-case ^- $-(%other exact) |=%same
31+ ^
32+/tests/golden/types-equal-head-disjoint/source.jibb:25:32: expression
33+++ no-case ^- $-(%other exact) |=%same
34+ ^
tests/golden/types-generic-result-context/about.txtnew file+1
@@ -0,0 +1 @@
1+Context can reach a directly known generic union result, including reordered and repeated aliases, distinct nominal arguments, independent uses, pending tags and a missing case. These are partial inference reports.
tests/golden/types-generic-result-context/source.jibbnew file+24
@@ -0,0 +1,24 @@
1++$ msg
2+ %idle
3+ %busy
4++$ other
5+ %idle
6+ %busy
7++$ choice |$ [A B]
8+ [%one value=A]
9+ [%two value=B]
10++$ swap |$ [A B] (choice B A)
11++$ repeated |$ [A] (choice A A)
12++$ phantom |$ [A B] (choice A @p)
13+++ wrap |= x=A ^- (choice A @p) [%one x]
14+++ wrap-repeat |= x=A ^- (repeated A) [%one x]
15+++ use-msg ^- (choice msg @p) (wrap %idle)
16+++ use-alias ^- (swap @p msg) (wrap %idle)
17+++ use-repeated ^- (repeated msg) (wrap-repeat %idle)
18+++ use-distinct ^- (choice other @p) (wrap %idle)
19+++ independent |= [m=msg n=other]
20+ [(^- (choice msg @p) (wrap m)) (^- (choice other @p) (wrap n))]
21+++ pending
22+ ~& %orphan
23+ ^- (choice msg @p) (wrap %idle)
24+++ wrong-case ^- (choice msg @p) (wrap %absent)
tests/golden/types-generic-result-context/tokens.txtnew file+233
@@ -0,0 +1,233 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %idle
5+3:3 NEWLINE
6+3:3 lit %busy
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph +$
10+4:4 name other
11+5:3 INDENT
12+5:3 lit %idle
13+6:3 NEWLINE
14+6:3 lit %busy
15+7:1 DEDENT
16+7:1 NEWLINE
17+7:1 glyph +$
18+7:4 name choice
19+7:11 glyph |$
20+7:14 glyph [
21+7:15 tight tvar A
22+7:17 tvar B
23+7:18 tight glyph ]
24+8:3 INDENT
25+8:3 glyph [
26+8:4 tight lit %one
27+8:9 name value
28+8:14 tight glyph =
29+8:15 tight tvar A
30+8:16 tight glyph ]
31+9:3 NEWLINE
32+9:3 glyph [
33+9:4 tight lit %two
34+9:9 name value
35+9:14 tight glyph =
36+9:15 tight tvar B
37+9:16 tight glyph ]
38+10:1 DEDENT
39+10:1 NEWLINE
40+10:1 glyph +$
41+10:4 name swap
42+10:9 glyph |$
43+10:12 glyph [
44+10:13 tight tvar A
45+10:15 tvar B
46+10:16 tight glyph ]
47+10:18 glyph (
48+10:19 tight name choice
49+10:26 tvar B
50+10:28 tvar A
51+10:29 tight glyph )
52+11:1 NEWLINE
53+11:1 glyph +$
54+11:4 name repeated
55+11:13 glyph |$
56+11:16 glyph [
57+11:17 tight tvar A
58+11:18 tight glyph ]
59+11:20 glyph (
60+11:21 tight name choice
61+11:28 tvar A
62+11:30 tvar A
63+11:31 tight glyph )
64+12:1 NEWLINE
65+12:1 glyph +$
66+12:4 name phantom
67+12:12 glyph |$
68+12:15 glyph [
69+12:16 tight tvar A
70+12:18 tvar B
71+12:19 tight glyph ]
72+12:21 glyph (
73+12:22 tight name choice
74+12:29 tvar A
75+12:31 aura @p
76+12:33 tight glyph )
77+13:1 NEWLINE
78+13:1 glyph ++
79+13:4 name wrap
80+13:9 glyph |=
81+13:12 name x
82+13:13 tight glyph =
83+13:14 tight tvar A
84+13:16 glyph ^-
85+13:19 glyph (
86+13:20 tight name choice
87+13:27 tvar A
88+13:29 aura @p
89+13:31 tight glyph )
90+13:33 glyph [
91+13:34 tight lit %one
92+13:39 name x
93+13:40 tight glyph ]
94+14:1 NEWLINE
95+14:1 glyph ++
96+14:4 name wrap-repeat
97+14:16 glyph |=
98+14:19 name x
99+14:20 tight glyph =
100+14:21 tight tvar A
101+14:23 glyph ^-
102+14:26 glyph (
103+14:27 tight name repeated
104+14:36 tvar A
105+14:37 tight glyph )
106+14:39 glyph [
107+14:40 tight lit %one
108+14:45 name x
109+14:46 tight glyph ]
110+15:1 NEWLINE
111+15:1 glyph ++
112+15:4 name use-msg
113+15:12 glyph ^-
114+15:15 glyph (
115+15:16 tight name choice
116+15:23 name msg
117+15:27 aura @p
118+15:29 tight glyph )
119+15:31 glyph (
120+15:32 tight name wrap
121+15:37 lit %idle
122+15:42 tight glyph )
123+16:1 NEWLINE
124+16:1 glyph ++
125+16:4 name use-alias
126+16:14 glyph ^-
127+16:17 glyph (
128+16:18 tight name swap
129+16:23 aura @p
130+16:26 name msg
131+16:29 tight glyph )
132+16:31 glyph (
133+16:32 tight name wrap
134+16:37 lit %idle
135+16:42 tight glyph )
136+17:1 NEWLINE
137+17:1 glyph ++
138+17:4 name use-repeated
139+17:17 glyph ^-
140+17:20 glyph (
141+17:21 tight name repeated
142+17:30 name msg
143+17:33 tight glyph )
144+17:35 glyph (
145+17:36 tight name wrap-repeat
146+17:48 lit %idle
147+17:53 tight glyph )
148+18:1 NEWLINE
149+18:1 glyph ++
150+18:4 name use-distinct
151+18:17 glyph ^-
152+18:20 glyph (
153+18:21 tight name choice
154+18:28 name other
155+18:34 aura @p
156+18:36 tight glyph )
157+18:38 glyph (
158+18:39 tight name wrap
159+18:44 lit %idle
160+18:49 tight glyph )
161+19:1 NEWLINE
162+19:1 glyph ++
163+19:4 name independent
164+19:16 glyph |=
165+19:19 glyph [
166+19:20 tight name m
167+19:21 tight glyph =
168+19:22 tight name msg
169+19:26 name n
170+19:27 tight glyph =
171+19:28 tight name other
172+19:33 tight glyph ]
173+20:3 INDENT
174+20:3 glyph [
175+20:4 tight glyph (
176+20:5 tight glyph ^-
177+20:8 glyph (
178+20:9 tight name choice
179+20:16 name msg
180+20:20 aura @p
181+20:22 tight glyph )
182+20:24 glyph (
183+20:25 tight name wrap
184+20:30 name m
185+20:31 tight glyph )
186+20:32 tight glyph )
187+20:34 glyph (
188+20:35 tight glyph ^-
189+20:38 glyph (
190+20:39 tight name choice
191+20:46 name other
192+20:52 aura @p
193+20:54 tight glyph )
194+20:56 glyph (
195+20:57 tight name wrap
196+20:62 name n
197+20:63 tight glyph )
198+20:64 tight glyph )
199+20:65 tight glyph ]
200+21:1 DEDENT
201+21:1 NEWLINE
202+21:1 glyph ++
203+21:4 name pending
204+22:3 INDENT
205+22:3 glyph ~&
206+22:6 lit %orphan
207+23:5 INDENT
208+23:5 glyph ^-
209+23:8 glyph (
210+23:9 tight name choice
211+23:16 name msg
212+23:20 aura @p
213+23:22 tight glyph )
214+23:24 glyph (
215+23:25 tight name wrap
216+23:30 lit %idle
217+23:35 tight glyph )
218+24:1 DEDENT
219+24:1 DEDENT
220+24:1 NEWLINE
221+24:1 glyph ++
222+24:4 name wrong-case
223+24:15 glyph ^-
224+24:18 glyph (
225+24:19 tight name choice
226+24:26 name msg
227+24:30 aura @p
228+24:32 tight glyph )
229+24:34 glyph (
230+24:35 tight name wrap
231+24:40 lit %absent
232+24:47 tight glyph )
233+24:48 NEWLINE
tests/golden/types-generic-result-context/tree.txtnew file+86
@@ -0,0 +1,86 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3 (const 2:3 %idle) (const 3:3 %busy)))
4+ (mold 4:1 other
5+ (union 5:3 (const 5:3 %idle) (const 6:3 %busy)))
6+ (mold 7:1 choice
7+ (generic 7:11 A B
8+ (union 8:3
9+ (cell 8:3
10+ (const 8:4 %one)
11+ (face 8:9 value (tvar 8:15 A)))
12+ (cell 9:3
13+ (const 9:4 %two)
14+ (face 9:9 value (tvar 9:15 B))))))
15+ (mold 10:1 swap
16+ (generic 10:9 A B
17+ (apply 10:18 choice (tvar 10:26 B) (tvar 10:28 A))))
18+ (mold 11:1 repeated
19+ (generic 11:13 A
20+ (apply 11:20 choice (tvar 11:28 A) (tvar 11:30 A))))
21+ (mold 12:1 phantom
22+ (generic 12:12 A B
23+ (apply 12:21 choice (tvar 12:29 A) (aura 12:31 @p))))
24+ (value 13:1 wrap
25+ (gate 13:9
26+ (face 13:12 x (tvar 13:14 A))
27+ (cast 13:16
28+ (apply 13:19 choice (tvar 13:27 A) (aura 13:29 @p))
29+ (tuple 13:33 (lit 13:34 %one) (wing 13:39 x)))))
30+ (value 14:1 wrap-repeat
31+ (gate 14:16
32+ (face 14:19 x (tvar 14:21 A))
33+ (cast 14:23
34+ (apply 14:26 repeated (tvar 14:36 A))
35+ (tuple 14:39 (lit 14:40 %one) (wing 14:45 x)))))
36+ (value 15:1 use-msg
37+ (cast 15:12
38+ (apply 15:15 choice (ref 15:23 msg) (aura 15:27 @p))
39+ (group 15:31
40+ (call 15:32 (wing 15:32 wrap) (lit 15:37 %idle)))))
41+ (value 16:1 use-alias
42+ (cast 16:14
43+ (apply 16:17 swap (aura 16:23 @p) (ref 16:26 msg))
44+ (group 16:31
45+ (call 16:32 (wing 16:32 wrap) (lit 16:37 %idle)))))
46+ (value 17:1 use-repeated
47+ (cast 17:17
48+ (apply 17:20 repeated (ref 17:30 msg))
49+ (group 17:35
50+ (call 17:36 (wing 17:36 wrap-repeat) (lit 17:48 %idle)))))
51+ (value 18:1 use-distinct
52+ (cast 18:17
53+ (apply 18:20 choice (ref 18:28 other) (aura 18:34 @p))
54+ (group 18:38
55+ (call 18:39 (wing 18:39 wrap) (lit 18:44 %idle)))))
56+ (value 19:1 independent
57+ (gate 19:16
58+ (cell 19:19
59+ (face 19:20 m (ref 19:22 msg))
60+ (face 19:26 n (ref 19:28 other)))
61+ (body 20:3
62+ (tuple 20:3
63+ (group 20:4
64+ (cast 20:5
65+ (apply 20:8 choice (ref 20:16 msg) (aura 20:20 @p))
66+ (group 20:24
67+ (call 20:25 (wing 20:25 wrap) (wing 20:30 m)))))
68+ (group 20:34
69+ (cast 20:35
70+ (apply 20:38 choice (ref 20:46 other) (aura 20:52 @p))
71+ (group 20:56
72+ (call 20:57 (wing 20:57 wrap) (wing 20:62 n)))))))))
73+ (value 21:1 pending
74+ (body 22:3
75+ (trace 22:3
76+ (lit 22:6 %orphan)
77+ (body 23:5
78+ (cast 23:5
79+ (apply 23:8 choice (ref 23:16 msg) (aura 23:20 @p))
80+ (group 23:24
81+ (call 23:25 (wing 23:25 wrap) (lit 23:30 %idle))))))))
82+ (value 24:1 wrong-case
83+ (cast 24:15
84+ (apply 24:18 choice (ref 24:26 msg) (aura 24:30 @p))
85+ (group 24:34
86+ (call 24:35 (wing 24:35 wrap) (lit 24:40 %absent))))))
tests/golden/types-generic-result-context/types.txtnew file+22
@@ -0,0 +1,22 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ other: cases proven disjoint; mold not checked
4++$ choice: cases proven disjoint; mold not checked
5++$ swap: not checked
6++$ repeated: not checked
7++$ phantom: not checked
8+++ wrap: $-(A (choice A @p))
9+++ wrap-repeat: $-(A (choice A A))
10+++ use-msg: (choice msg @p)
11+++ use-alias: (choice msg @p)
12+++ use-repeated: (choice msg msg)
13+++ use-distinct: (choice other @p)
14+++ independent: $-([m=msg n=other] [(choice msg @p) (choice other @p)])
15+++ pending: tag needs context in partial inference
16+++ wrong-case: msg has no case `%absent`
17+/tests/golden/types-generic-result-context/source.jibb:24:35: expected union
18+++ wrong-case ^- (choice msg @p) (wrap %absent)
19+ ^
20+/tests/golden/types-generic-result-context/source.jibb:24:40: tag
21+++ wrong-case ^- (choice msg @p) (wrap %absent)
22+ ^
tests/golden/types-literal-constructor-nouns/about.txtnew file+2
@@ -0,0 +1,2 @@
1+source: equality of literal molds is based on their runtime nouns.
2+tests: The `%$` constructor matches null-, loobean-zero- and term-zero-headed cells. Overlapping same-noun cases are rejected. Wrong payload, absent tags and unrelated pending constraints remain checked. This is a partial inference report.
tests/golden/types-literal-constructor-nouns/source.jibbnew file+25
@@ -0,0 +1,25 @@
1++$ null-head [~ value=@t]
2++$ flag-head [%.y value=@t]
3++$ dollar-head [%$ value=@t]
4++$ pair-null
5+ ~
6+ [~ value=@t]
7++$ overlap-null
8+ [~ value=@t]
9+ [%$ value=@t]
10++$ overlap-flag
11+ [%.y value=@t]
12+ [%$ value=@t]
13++$ overlap-three
14+ [~ value=@t]
15+ [%.y value=@t]
16+ [%$ value=@t]
17+++ null-ctor ^- $-(@t null-head) |=%$
18+++ flag-ctor ^- $-(@t flag-head) |=%$
19+++ dollar-ctor ^- $-(@t dollar-head) |=%$
20+++ unit-like-ctor ^- $-(@t pair-null) |=%$
21+++ wrong-payload ^- $-(@p null-head) |=%$
22+++ missing-tag ^- $-(@t null-head) |=%missing
23+++ pending
24+ ~& %unrelated
25+ ^- $-(@t null-head) |=%$
tests/golden/types-literal-constructor-nouns/tokens.txtnew file+177
@@ -0,0 +1,177 @@
1+1:1 glyph +$
2+1:4 name null-head
3+1:14 glyph [
4+1:15 tight lit ~
5+1:17 name value
6+1:22 tight glyph =
7+1:23 tight aura @t
8+1:25 tight glyph ]
9+2:1 NEWLINE
10+2:1 glyph +$
11+2:4 name flag-head
12+2:14 glyph [
13+2:15 tight lit %.y
14+2:19 name value
15+2:24 tight glyph =
16+2:25 tight aura @t
17+2:27 tight glyph ]
18+3:1 NEWLINE
19+3:1 glyph +$
20+3:4 name dollar-head
21+3:16 glyph [
22+3:17 tight lit %$
23+3:20 name value
24+3:25 tight glyph =
25+3:26 tight aura @t
26+3:28 tight glyph ]
27+4:1 NEWLINE
28+4:1 glyph +$
29+4:4 name pair-null
30+5:3 INDENT
31+5:3 lit ~
32+6:3 NEWLINE
33+6:3 glyph [
34+6:4 tight lit ~
35+6:6 name value
36+6:11 tight glyph =
37+6:12 tight aura @t
38+6:14 tight glyph ]
39+7:1 DEDENT
40+7:1 NEWLINE
41+7:1 glyph +$
42+7:4 name overlap-null
43+8:3 INDENT
44+8:3 glyph [
45+8:4 tight lit ~
46+8:6 name value
47+8:11 tight glyph =
48+8:12 tight aura @t
49+8:14 tight glyph ]
50+9:3 NEWLINE
51+9:3 glyph [
52+9:4 tight lit %$
53+9:7 name value
54+9:12 tight glyph =
55+9:13 tight aura @t
56+9:15 tight glyph ]
57+10:1 DEDENT
58+10:1 NEWLINE
59+10:1 glyph +$
60+10:4 name overlap-flag
61+11:3 INDENT
62+11:3 glyph [
63+11:4 tight lit %.y
64+11:8 name value
65+11:13 tight glyph =
66+11:14 tight aura @t
67+11:16 tight glyph ]
68+12:3 NEWLINE
69+12:3 glyph [
70+12:4 tight lit %$
71+12:7 name value
72+12:12 tight glyph =
73+12:13 tight aura @t
74+12:15 tight glyph ]
75+13:1 DEDENT
76+13:1 NEWLINE
77+13:1 glyph +$
78+13:4 name overlap-three
79+14:3 INDENT
80+14:3 glyph [
81+14:4 tight lit ~
82+14:6 name value
83+14:11 tight glyph =
84+14:12 tight aura @t
85+14:14 tight glyph ]
86+15:3 NEWLINE
87+15:3 glyph [
88+15:4 tight lit %.y
89+15:8 name value
90+15:13 tight glyph =
91+15:14 tight aura @t
92+15:16 tight glyph ]
93+16:3 NEWLINE
94+16:3 glyph [
95+16:4 tight lit %$
96+16:7 name value
97+16:12 tight glyph =
98+16:13 tight aura @t
99+16:15 tight glyph ]
100+17:1 DEDENT
101+17:1 NEWLINE
102+17:1 glyph ++
103+17:4 name null-ctor
104+17:14 glyph ^-
105+17:17 glyph $-(
106+17:20 tight aura @t
107+17:23 name null-head
108+17:32 tight glyph )
109+17:34 glyph |=
110+17:36 tight lit %$
111+18:1 NEWLINE
112+18:1 glyph ++
113+18:4 name flag-ctor
114+18:14 glyph ^-
115+18:17 glyph $-(
116+18:20 tight aura @t
117+18:23 name flag-head
118+18:32 tight glyph )
119+18:34 glyph |=
120+18:36 tight lit %$
121+19:1 NEWLINE
122+19:1 glyph ++
123+19:4 name dollar-ctor
124+19:16 glyph ^-
125+19:19 glyph $-(
126+19:22 tight aura @t
127+19:25 name dollar-head
128+19:36 tight glyph )
129+19:38 glyph |=
130+19:40 tight lit %$
131+20:1 NEWLINE
132+20:1 glyph ++
133+20:4 name unit-like-ctor
134+20:19 glyph ^-
135+20:22 glyph $-(
136+20:25 tight aura @t
137+20:28 name pair-null
138+20:37 tight glyph )
139+20:39 glyph |=
140+20:41 tight lit %$
141+21:1 NEWLINE
142+21:1 glyph ++
143+21:4 name wrong-payload
144+21:18 glyph ^-
145+21:21 glyph $-(
146+21:24 tight aura @p
147+21:27 name null-head
148+21:36 tight glyph )
149+21:38 glyph |=
150+21:40 tight lit %$
151+22:1 NEWLINE
152+22:1 glyph ++
153+22:4 name missing-tag
154+22:16 glyph ^-
155+22:19 glyph $-(
156+22:22 tight aura @t
157+22:25 name null-head
158+22:34 tight glyph )
159+22:36 glyph |=
160+22:38 tight lit %missing
161+23:1 NEWLINE
162+23:1 glyph ++
163+23:4 name pending
164+24:3 INDENT
165+24:3 glyph ~&
166+24:6 lit %unrelated
167+25:5 INDENT
168+25:5 glyph ^-
169+25:8 glyph $-(
170+25:11 tight aura @t
171+25:14 name null-head
172+25:23 tight glyph )
173+25:25 glyph |=
174+25:27 tight lit %$
175+25:29 DEDENT
176+25:29 DEDENT
177+25:29 NEWLINE
tests/golden/types-literal-constructor-nouns/tree.txtnew file+78
@@ -0,0 +1,78 @@
1+(module
2+ (mold 1:1 null-head
3+ (cell 1:14
4+ (const 1:15 ~)
5+ (face 1:17 value (aura 1:23 @t))))
6+ (mold 2:1 flag-head
7+ (cell 2:14
8+ (const 2:15 %.y)
9+ (face 2:19 value (aura 2:25 @t))))
10+ (mold 3:1 dollar-head
11+ (cell 3:16
12+ (const 3:17 %$)
13+ (face 3:20 value (aura 3:26 @t))))
14+ (mold 4:1 pair-null
15+ (union 5:3
16+ (const 5:3 ~)
17+ (cell 6:3
18+ (const 6:4 ~)
19+ (face 6:6 value (aura 6:12 @t)))))
20+ (mold 7:1 overlap-null
21+ (union 8:3
22+ (cell 8:3
23+ (const 8:4 ~)
24+ (face 8:6 value (aura 8:12 @t)))
25+ (cell 9:3
26+ (const 9:4 %$)
27+ (face 9:7 value (aura 9:13 @t)))))
28+ (mold 10:1 overlap-flag
29+ (union 11:3
30+ (cell 11:3
31+ (const 11:4 %.y)
32+ (face 11:8 value (aura 11:14 @t)))
33+ (cell 12:3
34+ (const 12:4 %$)
35+ (face 12:7 value (aura 12:13 @t)))))
36+ (mold 13:1 overlap-three
37+ (union 14:3
38+ (cell 14:3
39+ (const 14:4 ~)
40+ (face 14:6 value (aura 14:12 @t)))
41+ (cell 15:3
42+ (const 15:4 %.y)
43+ (face 15:8 value (aura 15:14 @t)))
44+ (cell 16:3
45+ (const 16:4 %$)
46+ (face 16:7 value (aura 16:13 @t)))))
47+ (value 17:1 null-ctor
48+ (cast 17:14
49+ (fn 17:17 (aura 17:20 @t) (ref 17:23 null-head))
50+ (ctor 17:34 %$)))
51+ (value 18:1 flag-ctor
52+ (cast 18:14
53+ (fn 18:17 (aura 18:20 @t) (ref 18:23 flag-head))
54+ (ctor 18:34 %$)))
55+ (value 19:1 dollar-ctor
56+ (cast 19:16
57+ (fn 19:19 (aura 19:22 @t) (ref 19:25 dollar-head))
58+ (ctor 19:38 %$)))
59+ (value 20:1 unit-like-ctor
60+ (cast 20:19
61+ (fn 20:22 (aura 20:25 @t) (ref 20:28 pair-null))
62+ (ctor 20:39 %$)))
63+ (value 21:1 wrong-payload
64+ (cast 21:18
65+ (fn 21:21 (aura 21:24 @p) (ref 21:27 null-head))
66+ (ctor 21:38 %$)))
67+ (value 22:1 missing-tag
68+ (cast 22:16
69+ (fn 22:19 (aura 22:22 @t) (ref 22:25 null-head))
70+ (ctor 22:36 %missing)))
71+ (value 23:1 pending
72+ (body 24:3
73+ (trace 24:3
74+ (lit 24:6 %unrelated)
75+ (body 25:5
76+ (cast 25:5
77+ (fn 25:8 (aura 25:11 @t) (ref 25:14 null-head))
78+ (ctor 25:25 %$)))))))
tests/golden/types-literal-constructor-nouns/types.txtnew file+45
@@ -0,0 +1,45 @@
1+partial inference; module not checked
2++$ null-head: not checked
3++$ flag-head: not checked
4++$ dollar-head: not checked
5++$ pair-null: cases proven disjoint; mold not checked
6++$ overlap-null: overlapping cases; mold not checked
7+/tests/golden/types-literal-constructor-nouns/source.jibb:8:3: first union case
8+ [~ value=@t]
9+ ^
10+/tests/golden/types-literal-constructor-nouns/source.jibb:9:3: overlapping case
11+ [%$ value=@t]
12+ ^
13++$ overlap-flag: overlapping cases; mold not checked
14+/tests/golden/types-literal-constructor-nouns/source.jibb:11:3: first union case
15+ [%.y value=@t]
16+ ^
17+/tests/golden/types-literal-constructor-nouns/source.jibb:12:3: overlapping case
18+ [%$ value=@t]
19+ ^
20++$ overlap-three: overlapping cases; mold not checked
21+/tests/golden/types-literal-constructor-nouns/source.jibb:14:3: first union case
22+ [~ value=@t]
23+ ^
24+/tests/golden/types-literal-constructor-nouns/source.jibb:15:3: overlapping case
25+ [%.y value=@t]
26+ ^
27+++ null-ctor: $-(@t [~ value=@t])
28+++ flag-ctor: $-(@t [%.y value=@t])
29+++ dollar-ctor: $-(@t [%$ value=@t])
30+++ unit-like-ctor: $-(@t pair-null)
31+++ wrong-payload: cast mold and expression type do not unify
32+/tests/golden/types-literal-constructor-nouns/source.jibb:21:21: cast mold has type $-(@p [~ value=@t])
33+++ wrong-payload ^- $-(@p null-head) |=%$
34+ ^
35+/tests/golden/types-literal-constructor-nouns/source.jibb:21:38: expression
36+++ wrong-payload ^- $-(@p null-head) |=%$
37+ ^
38+++ missing-tag: cast mold and expression type do not unify
39+/tests/golden/types-literal-constructor-nouns/source.jibb:22:19: cast mold has type $-(@t [~ value=@t])
40+++ missing-tag ^- $-(@t null-head) |=%missing
41+ ^
42+/tests/golden/types-literal-constructor-nouns/source.jibb:22:36: expression
43+++ missing-tag ^- $-(@t null-head) |=%missing
44+ ^
45+++ pending: tag needs context in partial inference
tests/golden/types-loobean-singleton-source/about.txtnew file+2
@@ -0,0 +1,2 @@
1+source: literal equality uses runtime nouns while typed aura constraints remain directional.
2+tests: Loobean singleton molds and equal-noun terms, wrong singleton, ordinary loobean widening to ? and @, invalid widening to typed auras, and constructor matching a loobean-headed case. This is a partial inference report.
tests/golden/types-loobean-singleton-source/source.jibbnew file+22
@@ -0,0 +1,22 @@
1++$ yes %.y
2++$ no %.n
3++$ flag-headed [%.y value=@t]
4+++ yes-flag ^- yes %.y
5+++ yes-term ^- yes %$
6+++ wrong-flag ^- yes %.n
7+++ normal-flag ^- ? %.y
8+++ normal-any ^- @ %.y
9+++ wrong-tas ^- @tas %.y
10+++ wrong-ta ^- @ta %.y
11+++ wrong-ud ^- @ud %.y
12+++ named-value ^- yes %.y
13+++ named-as-flag ^- ? named-value
14+++ named-as-any ^- @ named-value
15+++ named-as-tas ^- @tas named-value
16+++ named-as-ta ^- @ta named-value
17+++ named-as-ud ^- @ud named-value
18+++ loobean-constructor ^- $-(@t flag-headed) |=%$
19+++ literal-f ^- @f %.y
20+++ flag-f |= b=? ^- @f b
21+++ named-f ^- @f named-value
22+++ explicit-tag ^- @tas (^- %$ %.y)
tests/golden/types-loobean-singleton-source/tokens.txtnew file+143
@@ -0,0 +1,143 @@
1+1:1 glyph +$
2+1:4 name yes
3+1:8 lit %.y
4+2:1 NEWLINE
5+2:1 glyph +$
6+2:4 name no
7+2:7 lit %.n
8+3:1 NEWLINE
9+3:1 glyph +$
10+3:4 name flag-headed
11+3:16 glyph [
12+3:17 tight lit %.y
13+3:21 name value
14+3:26 tight glyph =
15+3:27 tight aura @t
16+3:29 tight glyph ]
17+4:1 NEWLINE
18+4:1 glyph ++
19+4:4 name yes-flag
20+4:13 glyph ^-
21+4:16 name yes
22+4:20 lit %.y
23+5:1 NEWLINE
24+5:1 glyph ++
25+5:4 name yes-term
26+5:13 glyph ^-
27+5:16 name yes
28+5:20 lit %$
29+6:1 NEWLINE
30+6:1 glyph ++
31+6:4 name wrong-flag
32+6:15 glyph ^-
33+6:18 name yes
34+6:22 lit %.n
35+7:1 NEWLINE
36+7:1 glyph ++
37+7:4 name normal-flag
38+7:16 glyph ^-
39+7:19 glyph ?
40+7:21 lit %.y
41+8:1 NEWLINE
42+8:1 glyph ++
43+8:4 name normal-any
44+8:15 glyph ^-
45+8:18 aura @
46+8:20 lit %.y
47+9:1 NEWLINE
48+9:1 glyph ++
49+9:4 name wrong-tas
50+9:14 glyph ^-
51+9:17 aura @tas
52+9:22 lit %.y
53+10:1 NEWLINE
54+10:1 glyph ++
55+10:4 name wrong-ta
56+10:13 glyph ^-
57+10:16 aura @ta
58+10:20 lit %.y
59+11:1 NEWLINE
60+11:1 glyph ++
61+11:4 name wrong-ud
62+11:13 glyph ^-
63+11:16 aura @ud
64+11:20 lit %.y
65+12:1 NEWLINE
66+12:1 glyph ++
67+12:4 name named-value
68+12:16 glyph ^-
69+12:19 name yes
70+12:23 lit %.y
71+13:1 NEWLINE
72+13:1 glyph ++
73+13:4 name named-as-flag
74+13:18 glyph ^-
75+13:21 glyph ?
76+13:23 name named-value
77+14:1 NEWLINE
78+14:1 glyph ++
79+14:4 name named-as-any
80+14:17 glyph ^-
81+14:20 aura @
82+14:22 name named-value
83+15:1 NEWLINE
84+15:1 glyph ++
85+15:4 name named-as-tas
86+15:17 glyph ^-
87+15:20 aura @tas
88+15:25 name named-value
89+16:1 NEWLINE
90+16:1 glyph ++
91+16:4 name named-as-ta
92+16:16 glyph ^-
93+16:19 aura @ta
94+16:23 name named-value
95+17:1 NEWLINE
96+17:1 glyph ++
97+17:4 name named-as-ud
98+17:16 glyph ^-
99+17:19 aura @ud
100+17:23 name named-value
101+18:1 NEWLINE
102+18:1 glyph ++
103+18:4 name loobean-constructor
104+18:24 glyph ^-
105+18:27 glyph $-(
106+18:30 tight aura @t
107+18:33 name flag-headed
108+18:44 tight glyph )
109+18:46 glyph |=
110+18:48 tight lit %$
111+19:1 NEWLINE
112+19:1 glyph ++
113+19:4 name literal-f
114+19:14 glyph ^-
115+19:17 aura @f
116+19:20 lit %.y
117+20:1 NEWLINE
118+20:1 glyph ++
119+20:4 name flag-f
120+20:11 glyph |=
121+20:14 name b
122+20:15 tight glyph =
123+20:16 tight glyph ?
124+20:18 glyph ^-
125+20:21 aura @f
126+20:24 name b
127+21:1 NEWLINE
128+21:1 glyph ++
129+21:4 name named-f
130+21:12 glyph ^-
131+21:15 aura @f
132+21:18 name named-value
133+22:1 NEWLINE
134+22:1 glyph ++
135+22:4 name explicit-tag
136+22:17 glyph ^-
137+22:20 aura @tas
138+22:25 glyph (
139+22:26 tight glyph ^-
140+22:29 lit %$
141+22:32 lit %.y
142+22:35 tight glyph )
143+22:36 NEWLINE
tests/golden/types-loobean-singleton-source/tree.txtnew file+52
@@ -0,0 +1,52 @@
1+(module
2+ (mold 1:1 yes (const 1:8 %.y))
3+ (mold 2:1 no (const 2:7 %.n))
4+ (mold 3:1 flag-headed
5+ (cell 3:16
6+ (const 3:17 %.y)
7+ (face 3:21 value (aura 3:27 @t))))
8+ (value 4:1 yes-flag
9+ (cast 4:13 (ref 4:16 yes) (lit 4:20 %.y)))
10+ (value 5:1 yes-term
11+ (cast 5:13 (ref 5:16 yes) (lit 5:20 %$)))
12+ (value 6:1 wrong-flag
13+ (cast 6:15 (ref 6:18 yes) (lit 6:22 %.n)))
14+ (value 7:1 normal-flag
15+ (cast 7:16 (flag 7:19) (lit 7:21 %.y)))
16+ (value 8:1 normal-any
17+ (cast 8:15 (aura 8:18 @) (lit 8:20 %.y)))
18+ (value 9:1 wrong-tas
19+ (cast 9:14 (aura 9:17 @tas) (lit 9:22 %.y)))
20+ (value 10:1 wrong-ta
21+ (cast 10:13 (aura 10:16 @ta) (lit 10:20 %.y)))
22+ (value 11:1 wrong-ud
23+ (cast 11:13 (aura 11:16 @ud) (lit 11:20 %.y)))
24+ (value 12:1 named-value
25+ (cast 12:16 (ref 12:19 yes) (lit 12:23 %.y)))
26+ (value 13:1 named-as-flag
27+ (cast 13:18 (flag 13:21) (wing 13:23 named-value)))
28+ (value 14:1 named-as-any
29+ (cast 14:17 (aura 14:20 @) (wing 14:22 named-value)))
30+ (value 15:1 named-as-tas
31+ (cast 15:17 (aura 15:20 @tas) (wing 15:25 named-value)))
32+ (value 16:1 named-as-ta
33+ (cast 16:16 (aura 16:19 @ta) (wing 16:23 named-value)))
34+ (value 17:1 named-as-ud
35+ (cast 17:16 (aura 17:19 @ud) (wing 17:23 named-value)))
36+ (value 18:1 loobean-constructor
37+ (cast 18:24
38+ (fn 18:27 (aura 18:30 @t) (ref 18:33 flag-headed))
39+ (ctor 18:46 %$)))
40+ (value 19:1 literal-f
41+ (cast 19:14 (aura 19:17 @f) (lit 19:20 %.y)))
42+ (value 20:1 flag-f
43+ (gate 20:11
44+ (face 20:14 b (flag 20:16))
45+ (cast 20:18 (aura 20:21 @f) (wing 20:24 b))))
46+ (value 21:1 named-f
47+ (cast 21:12 (aura 21:15 @f) (wing 21:18 named-value)))
48+ (value 22:1 explicit-tag
49+ (cast 22:17
50+ (aura 22:20 @tas)
51+ (group 22:25
52+ (cast 22:26 (const 22:29 %$) (lit 22:32 %.y))))))
tests/golden/types-loobean-singleton-source/types.txtnew file+65
@@ -0,0 +1,65 @@
1+partial inference; module not checked
2++$ yes: not checked
3++$ no: not checked
4++$ flag-headed: not checked
5+++ yes-flag: %.y
6+++ yes-term: %.y
7+++ wrong-flag: cast mold and expression type do not unify
8+/tests/golden/types-loobean-singleton-source/source.jibb:6:18: cast mold has type %.y
9+++ wrong-flag ^- yes %.n
10+ ^
11+/tests/golden/types-loobean-singleton-source/source.jibb:6:22: expression has type %.n
12+++ wrong-flag ^- yes %.n
13+ ^
14+++ normal-flag: ?
15+++ normal-any: @
16+++ wrong-tas: cast mold and expression type do not unify
17+/tests/golden/types-loobean-singleton-source/source.jibb:9:17: cast mold has type @tas
18+++ wrong-tas ^- @tas %.y
19+ ^
20+/tests/golden/types-loobean-singleton-source/source.jibb:9:22: expression has type ?
21+++ wrong-tas ^- @tas %.y
22+ ^
23+++ wrong-ta: cast mold and expression type do not unify
24+/tests/golden/types-loobean-singleton-source/source.jibb:10:16: cast mold has type @ta
25+++ wrong-ta ^- @ta %.y
26+ ^
27+/tests/golden/types-loobean-singleton-source/source.jibb:10:20: expression has type ?
28+++ wrong-ta ^- @ta %.y
29+ ^
30+++ wrong-ud: cast mold and expression type do not unify
31+/tests/golden/types-loobean-singleton-source/source.jibb:11:16: cast mold has type @ud
32+++ wrong-ud ^- @ud %.y
33+ ^
34+/tests/golden/types-loobean-singleton-source/source.jibb:11:20: expression has type ?
35+++ wrong-ud ^- @ud %.y
36+ ^
37+++ named-value: %.y
38+++ named-as-flag: ?
39+++ named-as-any: @
40+++ named-as-tas: cast mold and expression type do not unify
41+/tests/golden/types-loobean-singleton-source/source.jibb:15:20: cast mold has type @tas
42+++ named-as-tas ^- @tas named-value
43+ ^
44+/tests/golden/types-loobean-singleton-source/source.jibb:15:25: expression has type %.y
45+++ named-as-tas ^- @tas named-value
46+ ^
47+++ named-as-ta: cast mold and expression type do not unify
48+/tests/golden/types-loobean-singleton-source/source.jibb:16:19: cast mold has type @ta
49+++ named-as-ta ^- @ta named-value
50+ ^
51+/tests/golden/types-loobean-singleton-source/source.jibb:16:23: expression has type %.y
52+++ named-as-ta ^- @ta named-value
53+ ^
54+++ named-as-ud: cast mold and expression type do not unify
55+/tests/golden/types-loobean-singleton-source/source.jibb:17:19: cast mold has type @ud
56+++ named-as-ud ^- @ud named-value
57+ ^
58+/tests/golden/types-loobean-singleton-source/source.jibb:17:23: expression has type %.y
59+++ named-as-ud ^- @ud named-value
60+ ^
61+++ loobean-constructor: $-(@t [%.y value=@t])
62+++ literal-f: cast constraint is not supported by partial inference
63+++ flag-f: cast constraint is not supported by partial inference
64+++ named-f: cast constraint is not supported by partial inference
65+++ explicit-tag: @tas
tests/golden/types-loobean-union-context/about.txtnew file+2
@@ -0,0 +1,2 @@
1+source: literal singleton cases compare by runtime noun.
2+tests: Null, term-zero and loobean singleton contexts across direct unions; unequal values, overlapping singleton cases, unknown targets and pending constraints.
tests/golden/types-loobean-union-context/source.jibbnew file+28
@@ -0,0 +1,28 @@
1++$ maybe
2+ ~
3+ [~ value=@t]
4++$ term-zero
5+ %$
6+ [%some value=@t]
7++$ flag-zero
8+ %.y
9+ [%some value=@t]
10++$ repeated
11+ ~
12+ %.y
13++$ number-one
14+ %.n
15+ [%some value=@t]
16+++ as-null ^- maybe %.y
17+++ bad-null ^- maybe %.n
18+++ null-as-term ^- term-zero ~
19+++ flag-as-term ^- term-zero %.y
20+++ term-as-flag ^- flag-zero %$
21+++ null-as-flag ^- flag-zero ~
22+++ yes-as-flag ^- flag-zero %.y
23+++ no-as-one ^- number-one %.n
24+++ no-as-zero ^- flag-zero %.n
25+++ pending
26+ ~& %unrelated
27+ ^- maybe %.y
28+++ unknown |= x=A ^- A %.y
tests/golden/types-loobean-union-context/tokens.txtnew file+136
@@ -0,0 +1,136 @@
1+1:1 glyph +$
2+1:4 name maybe
3+2:3 INDENT
4+2:3 lit ~
5+3:3 NEWLINE
6+3:3 glyph [
7+3:4 tight lit ~
8+3:6 name value
9+3:11 tight glyph =
10+3:12 tight aura @t
11+3:14 tight glyph ]
12+4:1 DEDENT
13+4:1 NEWLINE
14+4:1 glyph +$
15+4:4 name term-zero
16+5:3 INDENT
17+5:3 lit %$
18+6:3 NEWLINE
19+6:3 glyph [
20+6:4 tight lit %some
21+6:10 name value
22+6:15 tight glyph =
23+6:16 tight aura @t
24+6:18 tight glyph ]
25+7:1 DEDENT
26+7:1 NEWLINE
27+7:1 glyph +$
28+7:4 name flag-zero
29+8:3 INDENT
30+8:3 lit %.y
31+9:3 NEWLINE
32+9:3 glyph [
33+9:4 tight lit %some
34+9:10 name value
35+9:15 tight glyph =
36+9:16 tight aura @t
37+9:18 tight glyph ]
38+10:1 DEDENT
39+10:1 NEWLINE
40+10:1 glyph +$
41+10:4 name repeated
42+11:3 INDENT
43+11:3 lit ~
44+12:3 NEWLINE
45+12:3 lit %.y
46+13:1 DEDENT
47+13:1 NEWLINE
48+13:1 glyph +$
49+13:4 name number-one
50+14:3 INDENT
51+14:3 lit %.n
52+15:3 NEWLINE
53+15:3 glyph [
54+15:4 tight lit %some
55+15:10 name value
56+15:15 tight glyph =
57+15:16 tight aura @t
58+15:18 tight glyph ]
59+16:1 DEDENT
60+16:1 NEWLINE
61+16:1 glyph ++
62+16:4 name as-null
63+16:12 glyph ^-
64+16:15 name maybe
65+16:21 lit %.y
66+17:1 NEWLINE
67+17:1 glyph ++
68+17:4 name bad-null
69+17:13 glyph ^-
70+17:16 name maybe
71+17:22 lit %.n
72+18:1 NEWLINE
73+18:1 glyph ++
74+18:4 name null-as-term
75+18:17 glyph ^-
76+18:20 name term-zero
77+18:30 lit ~
78+19:1 NEWLINE
79+19:1 glyph ++
80+19:4 name flag-as-term
81+19:17 glyph ^-
82+19:20 name term-zero
83+19:30 lit %.y
84+20:1 NEWLINE
85+20:1 glyph ++
86+20:4 name term-as-flag
87+20:17 glyph ^-
88+20:20 name flag-zero
89+20:30 lit %$
90+21:1 NEWLINE
91+21:1 glyph ++
92+21:4 name null-as-flag
93+21:17 glyph ^-
94+21:20 name flag-zero
95+21:30 lit ~
96+22:1 NEWLINE
97+22:1 glyph ++
98+22:4 name yes-as-flag
99+22:16 glyph ^-
100+22:19 name flag-zero
101+22:29 lit %.y
102+23:1 NEWLINE
103+23:1 glyph ++
104+23:4 name no-as-one
105+23:14 glyph ^-
106+23:17 name number-one
107+23:28 lit %.n
108+24:1 NEWLINE
109+24:1 glyph ++
110+24:4 name no-as-zero
111+24:15 glyph ^-
112+24:18 name flag-zero
113+24:28 lit %.n
114+25:1 NEWLINE
115+25:1 glyph ++
116+25:4 name pending
117+26:3 INDENT
118+26:3 glyph ~&
119+26:6 lit %unrelated
120+27:5 INDENT
121+27:5 glyph ^-
122+27:8 name maybe
123+27:14 lit %.y
124+28:1 DEDENT
125+28:1 DEDENT
126+28:1 NEWLINE
127+28:1 glyph ++
128+28:4 name unknown
129+28:12 glyph |=
130+28:15 name x
131+28:16 tight glyph =
132+28:17 tight tvar A
133+28:19 glyph ^-
134+28:22 tvar A
135+28:24 lit %.y
136+28:27 NEWLINE
tests/golden/types-loobean-union-context/tree.txtnew file+55
@@ -0,0 +1,55 @@
1+(module
2+ (mold 1:1 maybe
3+ (union 2:3
4+ (const 2:3 ~)
5+ (cell 3:3
6+ (const 3:4 ~)
7+ (face 3:6 value (aura 3:12 @t)))))
8+ (mold 4:1 term-zero
9+ (union 5:3
10+ (const 5:3 %$)
11+ (cell 6:3
12+ (const 6:4 %some)
13+ (face 6:10 value (aura 6:16 @t)))))
14+ (mold 7:1 flag-zero
15+ (union 8:3
16+ (const 8:3 %.y)
17+ (cell 9:3
18+ (const 9:4 %some)
19+ (face 9:10 value (aura 9:16 @t)))))
20+ (mold 10:1 repeated
21+ (union 11:3 (const 11:3 ~) (const 12:3 %.y)))
22+ (mold 13:1 number-one
23+ (union 14:3
24+ (const 14:3 %.n)
25+ (cell 15:3
26+ (const 15:4 %some)
27+ (face 15:10 value (aura 15:16 @t)))))
28+ (value 16:1 as-null
29+ (cast 16:12 (ref 16:15 maybe) (lit 16:21 %.y)))
30+ (value 17:1 bad-null
31+ (cast 17:13 (ref 17:16 maybe) (lit 17:22 %.n)))
32+ (value 18:1 null-as-term
33+ (cast 18:17 (ref 18:20 term-zero) (lit 18:30 ~)))
34+ (value 19:1 flag-as-term
35+ (cast 19:17 (ref 19:20 term-zero) (lit 19:30 %.y)))
36+ (value 20:1 term-as-flag
37+ (cast 20:17 (ref 20:20 flag-zero) (lit 20:30 %$)))
38+ (value 21:1 null-as-flag
39+ (cast 21:17 (ref 21:20 flag-zero) (lit 21:30 ~)))
40+ (value 22:1 yes-as-flag
41+ (cast 22:16 (ref 22:19 flag-zero) (lit 22:29 %.y)))
42+ (value 23:1 no-as-one
43+ (cast 23:14 (ref 23:17 number-one) (lit 23:28 %.n)))
44+ (value 24:1 no-as-zero
45+ (cast 24:15 (ref 24:18 flag-zero) (lit 24:28 %.n)))
46+ (value 25:1 pending
47+ (body 26:3
48+ (trace 26:3
49+ (lit 26:6 %unrelated)
50+ (body 27:5
51+ (cast 27:5 (ref 27:8 maybe) (lit 27:14 %.y))))))
52+ (value 28:1 unknown
53+ (gate 28:12
54+ (face 28:15 x (tvar 28:17 A))
55+ (cast 28:19 (tvar 28:22 A) (lit 28:24 %.y)))))
tests/golden/types-loobean-union-context/types.txtnew file+35
@@ -0,0 +1,35 @@
1+partial inference; module not checked
2++$ maybe: cases proven disjoint; mold not checked
3++$ term-zero: cases proven disjoint; mold not checked
4++$ flag-zero: cases proven disjoint; mold not checked
5++$ repeated: overlapping cases; mold not checked
6+/tests/golden/types-loobean-union-context/source.jibb:11:3: first union case
7+ ~
8+ ^
9+/tests/golden/types-loobean-union-context/source.jibb:12:3: overlapping case
10+ %.y
11+ ^
12++$ number-one: cases proven disjoint; mold not checked
13+++ as-null: maybe
14+++ bad-null: cast mold and expression type do not unify
15+/tests/golden/types-loobean-union-context/source.jibb:17:16: cast mold
16+++ bad-null ^- maybe %.n
17+ ^
18+/tests/golden/types-loobean-union-context/source.jibb:17:22: expression has type ?
19+++ bad-null ^- maybe %.n
20+ ^
21+++ null-as-term: term-zero
22+++ flag-as-term: term-zero
23+++ term-as-flag: flag-zero
24+++ null-as-flag: flag-zero
25+++ yes-as-flag: flag-zero
26+++ no-as-one: number-one
27+++ no-as-zero: cast mold and expression type do not unify
28+/tests/golden/types-loobean-union-context/source.jibb:24:18: cast mold
29+++ no-as-zero ^- flag-zero %.n
30+ ^
31+/tests/golden/types-loobean-union-context/source.jibb:24:28: expression has type ?
32+++ no-as-zero ^- flag-zero %.n
33+ ^
34+++ pending: tag needs context in partial inference
35+++ unknown: explicit capital constraints are not supported by partial inference
tests/golden/types-nested-noun-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Tag resolution: "It works for cases whose head is a literal with the same noun as the tag, regardless of how that literal is written"; `|=%$` also constructs a case headed by `%.y` or `~`.
2+tests: Null, loobean-zero and term-zero input/head combinations with nested generic payloads; missing, mismatched, ambiguous and unknown contexts remain conservative.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-nested-noun-context/source.jibbnew file+35
@@ -0,0 +1,35 @@
1++$ msg
2+ %ready
3+ %idle
4++$ inner |$ [A]
5+ [%one item=A]
6+ [%two item=A]
7++$ null-out |$ [A]
8+ [~ item=(inner A)]
9+ [%other value=@ud]
10++$ flag-out |$ [A]
11+ [%.y item=(inner A)]
12+ [%other value=@ud]
13++$ term-out |$ [A]
14+ [%$ item=(inner A)]
15+ [%other value=@ud]
16++$ competitors |$ [A]
17+ [~ item=(inner A)]
18+ [%.y value=@p]
19+++ inner |= x=A ^- (inner A) [%one x]
20+++ null-null ^- (null-out msg) [~ (inner %ready)]
21+++ flag-null ^- (null-out msg) [%.y (inner %ready)]
22+++ term-null ^- (null-out msg) [%$ (inner %ready)]
23+++ null-flag ^- (flag-out msg) [~ (inner %ready)]
24+++ flag-flag ^- (flag-out msg) [%.y (inner %ready)]
25+++ term-flag ^- (flag-out msg) [%$ (inner %ready)]
26+++ null-term ^- (term-out msg) [~ (inner %ready)]
27+++ flag-term ^- (term-out msg) [%.y (inner %ready)]
28+++ term-term ^- (term-out msg) [%$ (inner %ready)]
29+++ wrong-inner ^- (null-out msg) [%$ (inner %missing)]
30+++ wrong-payload ^- (flag-out @t) [~ (inner ~zod)]
31+++ pending
32+ ~& %orphan
33+ ^- (term-out msg) [%.y (inner %ready)]
34+++ unknown-target |= x=A ^- A [~ (inner %ready)]
35+++ ambiguous ^- (competitors msg) [~ (inner %ready)]
tests/golden/types-nested-noun-context/tokens.txtnew file+363
@@ -0,0 +1,363 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %ready
5+3:3 NEWLINE
6+3:3 lit %idle
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph +$
10+4:4 name inner
11+4:10 glyph |$
12+4:13 glyph [
13+4:14 tight tvar A
14+4:15 tight glyph ]
15+5:3 INDENT
16+5:3 glyph [
17+5:4 tight lit %one
18+5:9 name item
19+5:13 tight glyph =
20+5:14 tight tvar A
21+5:15 tight glyph ]
22+6:3 NEWLINE
23+6:3 glyph [
24+6:4 tight lit %two
25+6:9 name item
26+6:13 tight glyph =
27+6:14 tight tvar A
28+6:15 tight glyph ]
29+7:1 DEDENT
30+7:1 NEWLINE
31+7:1 glyph +$
32+7:4 name null-out
33+7:13 glyph |$
34+7:16 glyph [
35+7:17 tight tvar A
36+7:18 tight glyph ]
37+8:3 INDENT
38+8:3 glyph [
39+8:4 tight lit ~
40+8:6 name item
41+8:10 tight glyph =
42+8:11 tight glyph (
43+8:12 tight name inner
44+8:18 tvar A
45+8:19 tight glyph )
46+8:20 tight glyph ]
47+9:3 NEWLINE
48+9:3 glyph [
49+9:4 tight lit %other
50+9:11 name value
51+9:16 tight glyph =
52+9:17 tight aura @ud
53+9:20 tight glyph ]
54+10:1 DEDENT
55+10:1 NEWLINE
56+10:1 glyph +$
57+10:4 name flag-out
58+10:13 glyph |$
59+10:16 glyph [
60+10:17 tight tvar A
61+10:18 tight glyph ]
62+11:3 INDENT
63+11:3 glyph [
64+11:4 tight lit %.y
65+11:8 name item
66+11:12 tight glyph =
67+11:13 tight glyph (
68+11:14 tight name inner
69+11:20 tvar A
70+11:21 tight glyph )
71+11:22 tight glyph ]
72+12:3 NEWLINE
73+12:3 glyph [
74+12:4 tight lit %other
75+12:11 name value
76+12:16 tight glyph =
77+12:17 tight aura @ud
78+12:20 tight glyph ]
79+13:1 DEDENT
80+13:1 NEWLINE
81+13:1 glyph +$
82+13:4 name term-out
83+13:13 glyph |$
84+13:16 glyph [
85+13:17 tight tvar A
86+13:18 tight glyph ]
87+14:3 INDENT
88+14:3 glyph [
89+14:4 tight lit %$
90+14:7 name item
91+14:11 tight glyph =
92+14:12 tight glyph (
93+14:13 tight name inner
94+14:19 tvar A
95+14:20 tight glyph )
96+14:21 tight glyph ]
97+15:3 NEWLINE
98+15:3 glyph [
99+15:4 tight lit %other
100+15:11 name value
101+15:16 tight glyph =
102+15:17 tight aura @ud
103+15:20 tight glyph ]
104+16:1 DEDENT
105+16:1 NEWLINE
106+16:1 glyph +$
107+16:4 name competitors
108+16:16 glyph |$
109+16:19 glyph [
110+16:20 tight tvar A
111+16:21 tight glyph ]
112+17:3 INDENT
113+17:3 glyph [
114+17:4 tight lit ~
115+17:6 name item
116+17:10 tight glyph =
117+17:11 tight glyph (
118+17:12 tight name inner
119+17:18 tvar A
120+17:19 tight glyph )
121+17:20 tight glyph ]
122+18:3 NEWLINE
123+18:3 glyph [
124+18:4 tight lit %.y
125+18:8 name value
126+18:13 tight glyph =
127+18:14 tight aura @p
128+18:16 tight glyph ]
129+19:1 DEDENT
130+19:1 NEWLINE
131+19:1 glyph ++
132+19:4 name inner
133+19:10 glyph |=
134+19:13 name x
135+19:14 tight glyph =
136+19:15 tight tvar A
137+19:17 glyph ^-
138+19:20 glyph (
139+19:21 tight name inner
140+19:27 tvar A
141+19:28 tight glyph )
142+19:30 glyph [
143+19:31 tight lit %one
144+19:36 name x
145+19:37 tight glyph ]
146+20:1 NEWLINE
147+20:1 glyph ++
148+20:4 name null-null
149+20:14 glyph ^-
150+20:17 glyph (
151+20:18 tight name null-out
152+20:27 name msg
153+20:30 tight glyph )
154+20:32 glyph [
155+20:33 tight lit ~
156+20:35 glyph (
157+20:36 tight name inner
158+20:42 lit %ready
159+20:48 tight glyph )
160+20:49 tight glyph ]
161+21:1 NEWLINE
162+21:1 glyph ++
163+21:4 name flag-null
164+21:14 glyph ^-
165+21:17 glyph (
166+21:18 tight name null-out
167+21:27 name msg
168+21:30 tight glyph )
169+21:32 glyph [
170+21:33 tight lit %.y
171+21:37 glyph (
172+21:38 tight name inner
173+21:44 lit %ready
174+21:50 tight glyph )
175+21:51 tight glyph ]
176+22:1 NEWLINE
177+22:1 glyph ++
178+22:4 name term-null
179+22:14 glyph ^-
180+22:17 glyph (
181+22:18 tight name null-out
182+22:27 name msg
183+22:30 tight glyph )
184+22:32 glyph [
185+22:33 tight lit %$
186+22:36 glyph (
187+22:37 tight name inner
188+22:43 lit %ready
189+22:49 tight glyph )
190+22:50 tight glyph ]
191+23:1 NEWLINE
192+23:1 glyph ++
193+23:4 name null-flag
194+23:14 glyph ^-
195+23:17 glyph (
196+23:18 tight name flag-out
197+23:27 name msg
198+23:30 tight glyph )
199+23:32 glyph [
200+23:33 tight lit ~
201+23:35 glyph (
202+23:36 tight name inner
203+23:42 lit %ready
204+23:48 tight glyph )
205+23:49 tight glyph ]
206+24:1 NEWLINE
207+24:1 glyph ++
208+24:4 name flag-flag
209+24:14 glyph ^-
210+24:17 glyph (
211+24:18 tight name flag-out
212+24:27 name msg
213+24:30 tight glyph )
214+24:32 glyph [
215+24:33 tight lit %.y
216+24:37 glyph (
217+24:38 tight name inner
218+24:44 lit %ready
219+24:50 tight glyph )
220+24:51 tight glyph ]
221+25:1 NEWLINE
222+25:1 glyph ++
223+25:4 name term-flag
224+25:14 glyph ^-
225+25:17 glyph (
226+25:18 tight name flag-out
227+25:27 name msg
228+25:30 tight glyph )
229+25:32 glyph [
230+25:33 tight lit %$
231+25:36 glyph (
232+25:37 tight name inner
233+25:43 lit %ready
234+25:49 tight glyph )
235+25:50 tight glyph ]
236+26:1 NEWLINE
237+26:1 glyph ++
238+26:4 name null-term
239+26:14 glyph ^-
240+26:17 glyph (
241+26:18 tight name term-out
242+26:27 name msg
243+26:30 tight glyph )
244+26:32 glyph [
245+26:33 tight lit ~
246+26:35 glyph (
247+26:36 tight name inner
248+26:42 lit %ready
249+26:48 tight glyph )
250+26:49 tight glyph ]
251+27:1 NEWLINE
252+27:1 glyph ++
253+27:4 name flag-term
254+27:14 glyph ^-
255+27:17 glyph (
256+27:18 tight name term-out
257+27:27 name msg
258+27:30 tight glyph )
259+27:32 glyph [
260+27:33 tight lit %.y
261+27:37 glyph (
262+27:38 tight name inner
263+27:44 lit %ready
264+27:50 tight glyph )
265+27:51 tight glyph ]
266+28:1 NEWLINE
267+28:1 glyph ++
268+28:4 name term-term
269+28:14 glyph ^-
270+28:17 glyph (
271+28:18 tight name term-out
272+28:27 name msg
273+28:30 tight glyph )
274+28:32 glyph [
275+28:33 tight lit %$
276+28:36 glyph (
277+28:37 tight name inner
278+28:43 lit %ready
279+28:49 tight glyph )
280+28:50 tight glyph ]
281+29:1 NEWLINE
282+29:1 glyph ++
283+29:4 name wrong-inner
284+29:16 glyph ^-
285+29:19 glyph (
286+29:20 tight name null-out
287+29:29 name msg
288+29:32 tight glyph )
289+29:34 glyph [
290+29:35 tight lit %$
291+29:38 glyph (
292+29:39 tight name inner
293+29:45 lit %missing
294+29:53 tight glyph )
295+29:54 tight glyph ]
296+30:1 NEWLINE
297+30:1 glyph ++
298+30:4 name wrong-payload
299+30:18 glyph ^-
300+30:21 glyph (
301+30:22 tight name flag-out
302+30:31 aura @t
303+30:33 tight glyph )
304+30:35 glyph [
305+30:36 tight lit ~
306+30:38 glyph (
307+30:39 tight name inner
308+30:45 lit ~zod
309+30:49 tight glyph )
310+30:50 tight glyph ]
311+31:1 NEWLINE
312+31:1 glyph ++
313+31:4 name pending
314+32:3 INDENT
315+32:3 glyph ~&
316+32:6 lit %orphan
317+33:5 INDENT
318+33:5 glyph ^-
319+33:8 glyph (
320+33:9 tight name term-out
321+33:18 name msg
322+33:21 tight glyph )
323+33:23 glyph [
324+33:24 tight lit %.y
325+33:28 glyph (
326+33:29 tight name inner
327+33:35 lit %ready
328+33:41 tight glyph )
329+33:42 tight glyph ]
330+34:1 DEDENT
331+34:1 DEDENT
332+34:1 NEWLINE
333+34:1 glyph ++
334+34:4 name unknown-target
335+34:19 glyph |=
336+34:22 name x
337+34:23 tight glyph =
338+34:24 tight tvar A
339+34:26 glyph ^-
340+34:29 tvar A
341+34:31 glyph [
342+34:32 tight lit ~
343+34:34 glyph (
344+34:35 tight name inner
345+34:41 lit %ready
346+34:47 tight glyph )
347+34:48 tight glyph ]
348+35:1 NEWLINE
349+35:1 glyph ++
350+35:4 name ambiguous
351+35:14 glyph ^-
352+35:17 glyph (
353+35:18 tight name competitors
354+35:30 name msg
355+35:33 tight glyph )
356+35:35 glyph [
357+35:36 tight lit ~
358+35:38 glyph (
359+35:39 tight name inner
360+35:45 lit %ready
361+35:51 tight glyph )
362+35:52 tight glyph ]
363+35:53 NEWLINE
tests/golden/types-nested-noun-context/tree.txtnew file+162
@@ -0,0 +1,162 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3 (const 2:3 %ready) (const 3:3 %idle)))
4+ (mold 4:1 inner
5+ (generic 4:10 A
6+ (union 5:3
7+ (cell 5:3
8+ (const 5:4 %one)
9+ (face 5:9 item (tvar 5:14 A)))
10+ (cell 6:3
11+ (const 6:4 %two)
12+ (face 6:9 item (tvar 6:14 A))))))
13+ (mold 7:1 null-out
14+ (generic 7:13 A
15+ (union 8:3
16+ (cell 8:3
17+ (const 8:4 ~)
18+ (face 8:6 item
19+ (apply 8:11 inner (tvar 8:18 A))))
20+ (cell 9:3
21+ (const 9:4 %other)
22+ (face 9:11 value (aura 9:17 @ud))))))
23+ (mold 10:1 flag-out
24+ (generic 10:13 A
25+ (union 11:3
26+ (cell 11:3
27+ (const 11:4 %.y)
28+ (face 11:8 item
29+ (apply 11:13 inner (tvar 11:20 A))))
30+ (cell 12:3
31+ (const 12:4 %other)
32+ (face 12:11 value (aura 12:17 @ud))))))
33+ (mold 13:1 term-out
34+ (generic 13:13 A
35+ (union 14:3
36+ (cell 14:3
37+ (const 14:4 %$)
38+ (face 14:7 item
39+ (apply 14:12 inner (tvar 14:19 A))))
40+ (cell 15:3
41+ (const 15:4 %other)
42+ (face 15:11 value (aura 15:17 @ud))))))
43+ (mold 16:1 competitors
44+ (generic 16:16 A
45+ (union 17:3
46+ (cell 17:3
47+ (const 17:4 ~)
48+ (face 17:6 item
49+ (apply 17:11 inner (tvar 17:18 A))))
50+ (cell 18:3
51+ (const 18:4 %.y)
52+ (face 18:8 value (aura 18:14 @p))))))
53+ (value 19:1 inner
54+ (gate 19:10
55+ (face 19:13 x (tvar 19:15 A))
56+ (cast 19:17
57+ (apply 19:20 inner (tvar 19:27 A))
58+ (tuple 19:30 (lit 19:31 %one) (wing 19:36 x)))))
59+ (value 20:1 null-null
60+ (cast 20:14
61+ (apply 20:17 null-out (ref 20:27 msg))
62+ (tuple 20:32
63+ (lit 20:33 ~)
64+ (group 20:35
65+ (call 20:36 (wing 20:36 inner) (lit 20:42 %ready))))))
66+ (value 21:1 flag-null
67+ (cast 21:14
68+ (apply 21:17 null-out (ref 21:27 msg))
69+ (tuple 21:32
70+ (lit 21:33 %.y)
71+ (group 21:37
72+ (call 21:38 (wing 21:38 inner) (lit 21:44 %ready))))))
73+ (value 22:1 term-null
74+ (cast 22:14
75+ (apply 22:17 null-out (ref 22:27 msg))
76+ (tuple 22:32
77+ (lit 22:33 %$)
78+ (group 22:36
79+ (call 22:37 (wing 22:37 inner) (lit 22:43 %ready))))))
80+ (value 23:1 null-flag
81+ (cast 23:14
82+ (apply 23:17 flag-out (ref 23:27 msg))
83+ (tuple 23:32
84+ (lit 23:33 ~)
85+ (group 23:35
86+ (call 23:36 (wing 23:36 inner) (lit 23:42 %ready))))))
87+ (value 24:1 flag-flag
88+ (cast 24:14
89+ (apply 24:17 flag-out (ref 24:27 msg))
90+ (tuple 24:32
91+ (lit 24:33 %.y)
92+ (group 24:37
93+ (call 24:38 (wing 24:38 inner) (lit 24:44 %ready))))))
94+ (value 25:1 term-flag
95+ (cast 25:14
96+ (apply 25:17 flag-out (ref 25:27 msg))
97+ (tuple 25:32
98+ (lit 25:33 %$)
99+ (group 25:36
100+ (call 25:37 (wing 25:37 inner) (lit 25:43 %ready))))))
101+ (value 26:1 null-term
102+ (cast 26:14
103+ (apply 26:17 term-out (ref 26:27 msg))
104+ (tuple 26:32
105+ (lit 26:33 ~)
106+ (group 26:35
107+ (call 26:36 (wing 26:36 inner) (lit 26:42 %ready))))))
108+ (value 27:1 flag-term
109+ (cast 27:14
110+ (apply 27:17 term-out (ref 27:27 msg))
111+ (tuple 27:32
112+ (lit 27:33 %.y)
113+ (group 27:37
114+ (call 27:38 (wing 27:38 inner) (lit 27:44 %ready))))))
115+ (value 28:1 term-term
116+ (cast 28:14
117+ (apply 28:17 term-out (ref 28:27 msg))
118+ (tuple 28:32
119+ (lit 28:33 %$)
120+ (group 28:36
121+ (call 28:37 (wing 28:37 inner) (lit 28:43 %ready))))))
122+ (value 29:1 wrong-inner
123+ (cast 29:16
124+ (apply 29:19 null-out (ref 29:29 msg))
125+ (tuple 29:34
126+ (lit 29:35 %$)
127+ (group 29:38
128+ (call 29:39 (wing 29:39 inner) (lit 29:45 %missing))))))
129+ (value 30:1 wrong-payload
130+ (cast 30:18
131+ (apply 30:21 flag-out (aura 30:31 @t))
132+ (tuple 30:35
133+ (lit 30:36 ~)
134+ (group 30:38
135+ (call 30:39 (wing 30:39 inner) (lit 30:45 ~zod))))))
136+ (value 31:1 pending
137+ (body 32:3
138+ (trace 32:3
139+ (lit 32:6 %orphan)
140+ (body 33:5
141+ (cast 33:5
142+ (apply 33:8 term-out (ref 33:18 msg))
143+ (tuple 33:23
144+ (lit 33:24 %.y)
145+ (group 33:28
146+ (call 33:29 (wing 33:29 inner) (lit 33:35 %ready)))))))))
147+ (value 34:1 unknown-target
148+ (gate 34:19
149+ (face 34:22 x (tvar 34:24 A))
150+ (cast 34:26
151+ (tvar 34:29 A)
152+ (tuple 34:31
153+ (lit 34:32 ~)
154+ (group 34:34
155+ (call 34:35 (wing 34:35 inner) (lit 34:41 %ready)))))))
156+ (value 35:1 ambiguous
157+ (cast 35:14
158+ (apply 35:17 competitors (ref 35:30 msg))
159+ (tuple 35:35
160+ (lit 35:36 ~)
161+ (group 35:38
162+ (call 35:39 (wing 35:39 inner) (lit 35:45 %ready)))))))
tests/golden/types-nested-noun-context/types.txtnew file+34
@@ -0,0 +1,34 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ inner: cases proven disjoint; mold not checked
4++$ null-out: cases proven disjoint; mold not checked
5++$ flag-out: cases proven disjoint; mold not checked
6++$ term-out: cases proven disjoint; mold not checked
7++$ competitors: case disjointness unresolved; mold not checked
8+++ inner: $-(A (inner A))
9+++ null-null: (null-out msg)
10+++ flag-null: (null-out msg)
11+++ term-null: (null-out msg)
12+++ null-flag: (flag-out msg)
13+++ flag-flag: (flag-out msg)
14+++ term-flag: (flag-out msg)
15+++ null-term: (term-out msg)
16+++ flag-term: (term-out msg)
17+++ term-term: (term-out msg)
18+++ wrong-inner: msg has no case `%missing`
19+/tests/golden/types-nested-noun-context/source.jibb:29:39: expected union
20+++ wrong-inner ^- (null-out msg) [%$ (inner %missing)]
21+ ^
22+/tests/golden/types-nested-noun-context/source.jibb:29:45: tag
23+++ wrong-inner ^- (null-out msg) [%$ (inner %missing)]
24+ ^
25+++ wrong-payload: call's sample and argument types do not unify
26+/tests/golden/types-nested-noun-context/source.jibb:30:39: called gate
27+++ wrong-payload ^- (flag-out @t) [~ (inner ~zod)]
28+ ^
29+/tests/golden/types-nested-noun-context/source.jibb:30:45: argument has type @p
30+++ wrong-payload ^- (flag-out @t) [~ (inner ~zod)]
31+ ^
32+++ pending: tag needs context in partial inference
33+++ unknown-target: explicit capital constraints are not supported by partial inference
34+++ ambiguous: cast mold is not supported by partial inference
tests/golden/types-nested-shallow-preserve/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Literals by context: "Number and cell literals resolve like tags: each waits for its context"; Literals: `gap+%s2` is `[%gap %s2]`.
2+tests: Previously supported nested pair and direct-cell contexts stay inferred through lists and calls; calls, groups, casts and constructors preserve errors and pending constraints. Unknown targets fail closed.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-nested-shallow-preserve/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-nested-shallow-preserve/source.jibbnew file+30
@@ -0,0 +1,30 @@
1++$ length
2+ [%fill n=@ud]
3+ %shrink
4++$ attr
5+ [%width length]
6+ [%gap @tas]
7+++ number-id |= x=@ud x
8+++ plain ^- attr width+[%fill 1]
9+++ direct ^- attr [%width [%fill 1]]
10+++ list ^- (list attr) ~[width+[%fill 1]]
11+++ accept |= value=attr value
12+++ call (accept width+[%fill 1])
13+++ simple-call ^- attr width+[%fill (number-id 1)]
14+++ grouped-call ^- attr width+[%fill ((number-id 1))]
15+++ cast-call ^- attr width+[%fill (^- @ud (number-id 1))]
16+++ nested-call ^- attr width+[%fill (number-id (number-id 1))]
17+++ bad-tag ^- attr width+[%missing 1]
18+++ bad-number ^- attr width+[%fill "bad"]
19+++ pending
20+ ~& %unrelated
21+ ^- attr width+[%fill (number-id 1)]
22+++ singleton ^- attr width+%shrink
23++$ event
24+ [%got value=@t]
25+ %idle
26++$ envelope
27+ [%handler callback=$-(@t event)]
28+ [%empty value=@ud]
29+++ constructor ^- envelope [%handler |=%got]
30+++ unknown-target |= x=A ^- A width+[%fill (number-id 1)]
tests/golden/types-nested-shallow-preserve/tokens.txtnew file+271
@@ -0,0 +1,271 @@
1+1:1 glyph +$
2+1:4 name length
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %fill
6+2:10 name n
7+2:11 tight glyph =
8+2:12 tight aura @ud
9+2:15 tight glyph ]
10+3:3 NEWLINE
11+3:3 lit %shrink
12+4:1 DEDENT
13+4:1 NEWLINE
14+4:1 glyph +$
15+4:4 name attr
16+5:3 INDENT
17+5:3 glyph [
18+5:4 tight lit %width
19+5:11 name length
20+5:17 tight glyph ]
21+6:3 NEWLINE
22+6:3 glyph [
23+6:4 tight lit %gap
24+6:9 aura @tas
25+6:13 tight glyph ]
26+7:1 DEDENT
27+7:1 NEWLINE
28+7:1 glyph ++
29+7:4 name number-id
30+7:14 glyph |=
31+7:17 name x
32+7:18 tight glyph =
33+7:19 tight aura @ud
34+7:23 name x
35+8:1 NEWLINE
36+8:1 glyph ++
37+8:4 name plain
38+8:10 glyph ^-
39+8:13 name attr
40+8:18 name width
41+8:23 tight glyph +
42+8:24 tight glyph [
43+8:25 tight lit %fill
44+8:31 lit 1
45+8:32 tight glyph ]
46+9:1 NEWLINE
47+9:1 glyph ++
48+9:4 name direct
49+9:11 glyph ^-
50+9:14 name attr
51+9:19 glyph [
52+9:20 tight lit %width
53+9:27 glyph [
54+9:28 tight lit %fill
55+9:34 lit 1
56+9:35 tight glyph ]
57+9:36 tight glyph ]
58+10:1 NEWLINE
59+10:1 glyph ++
60+10:4 name list
61+10:9 glyph ^-
62+10:12 glyph (
63+10:13 tight name list
64+10:18 name attr
65+10:22 tight glyph )
66+10:24 glyph ~[
67+10:26 tight name width
68+10:31 tight glyph +
69+10:32 tight glyph [
70+10:33 tight lit %fill
71+10:39 lit 1
72+10:40 tight glyph ]
73+10:41 tight glyph ]
74+11:1 NEWLINE
75+11:1 glyph ++
76+11:4 name accept
77+11:11 glyph |=
78+11:14 name value
79+11:19 tight glyph =
80+11:20 tight name attr
81+11:25 name value
82+12:1 NEWLINE
83+12:1 glyph ++
84+12:4 name call
85+12:9 glyph (
86+12:10 tight name accept
87+12:17 name width
88+12:22 tight glyph +
89+12:23 tight glyph [
90+12:24 tight lit %fill
91+12:30 lit 1
92+12:31 tight glyph ]
93+12:32 tight glyph )
94+13:1 NEWLINE
95+13:1 glyph ++
96+13:4 name simple-call
97+13:16 glyph ^-
98+13:19 name attr
99+13:24 name width
100+13:29 tight glyph +
101+13:30 tight glyph [
102+13:31 tight lit %fill
103+13:37 glyph (
104+13:38 tight name number-id
105+13:48 lit 1
106+13:49 tight glyph )
107+13:50 tight glyph ]
108+14:1 NEWLINE
109+14:1 glyph ++
110+14:4 name grouped-call
111+14:17 glyph ^-
112+14:20 name attr
113+14:25 name width
114+14:30 tight glyph +
115+14:31 tight glyph [
116+14:32 tight lit %fill
117+14:38 glyph (
118+14:39 tight glyph (
119+14:40 tight name number-id
120+14:50 lit 1
121+14:51 tight glyph )
122+14:52 tight glyph )
123+14:53 tight glyph ]
124+15:1 NEWLINE
125+15:1 glyph ++
126+15:4 name cast-call
127+15:14 glyph ^-
128+15:17 name attr
129+15:22 name width
130+15:27 tight glyph +
131+15:28 tight glyph [
132+15:29 tight lit %fill
133+15:35 glyph (
134+15:36 tight glyph ^-
135+15:39 aura @ud
136+15:43 glyph (
137+15:44 tight name number-id
138+15:54 lit 1
139+15:55 tight glyph )
140+15:56 tight glyph )
141+15:57 tight glyph ]
142+16:1 NEWLINE
143+16:1 glyph ++
144+16:4 name nested-call
145+16:16 glyph ^-
146+16:19 name attr
147+16:24 name width
148+16:29 tight glyph +
149+16:30 tight glyph [
150+16:31 tight lit %fill
151+16:37 glyph (
152+16:38 tight name number-id
153+16:48 glyph (
154+16:49 tight name number-id
155+16:59 lit 1
156+16:60 tight glyph )
157+16:61 tight glyph )
158+16:62 tight glyph ]
159+17:1 NEWLINE
160+17:1 glyph ++
161+17:4 name bad-tag
162+17:12 glyph ^-
163+17:15 name attr
164+17:20 name width
165+17:25 tight glyph +
166+17:26 tight glyph [
167+17:27 tight lit %missing
168+17:36 lit 1
169+17:37 tight glyph ]
170+18:1 NEWLINE
171+18:1 glyph ++
172+18:4 name bad-number
173+18:15 glyph ^-
174+18:18 name attr
175+18:23 name width
176+18:28 tight glyph +
177+18:29 tight glyph [
178+18:30 tight lit %fill
179+18:36 str "bad"
180+18:41 tight glyph ]
181+19:1 NEWLINE
182+19:1 glyph ++
183+19:4 name pending
184+20:3 INDENT
185+20:3 glyph ~&
186+20:6 lit %unrelated
187+21:5 INDENT
188+21:5 glyph ^-
189+21:8 name attr
190+21:13 name width
191+21:18 tight glyph +
192+21:19 tight glyph [
193+21:20 tight lit %fill
194+21:26 glyph (
195+21:27 tight name number-id
196+21:37 lit 1
197+21:38 tight glyph )
198+21:39 tight glyph ]
199+22:1 DEDENT
200+22:1 DEDENT
201+22:1 NEWLINE
202+22:1 glyph ++
203+22:4 name singleton
204+22:14 glyph ^-
205+22:17 name attr
206+22:22 name width
207+22:27 tight glyph +
208+22:28 tight lit %shrink
209+23:1 NEWLINE
210+23:1 glyph +$
211+23:4 name event
212+24:3 INDENT
213+24:3 glyph [
214+24:4 tight lit %got
215+24:9 name value
216+24:14 tight glyph =
217+24:15 tight aura @t
218+24:17 tight glyph ]
219+25:3 NEWLINE
220+25:3 lit %idle
221+26:1 DEDENT
222+26:1 NEWLINE
223+26:1 glyph +$
224+26:4 name envelope
225+27:3 INDENT
226+27:3 glyph [
227+27:4 tight lit %handler
228+27:13 name callback
229+27:21 tight glyph =
230+27:22 tight glyph $-(
231+27:25 tight aura @t
232+27:28 name event
233+27:33 tight glyph )
234+27:34 tight glyph ]
235+28:3 NEWLINE
236+28:3 glyph [
237+28:4 tight lit %empty
238+28:11 name value
239+28:16 tight glyph =
240+28:17 tight aura @ud
241+28:20 tight glyph ]
242+29:1 DEDENT
243+29:1 NEWLINE
244+29:1 glyph ++
245+29:4 name constructor
246+29:16 glyph ^-
247+29:19 name envelope
248+29:28 glyph [
249+29:29 tight lit %handler
250+29:38 glyph |=
251+29:40 tight lit %got
252+29:44 tight glyph ]
253+30:1 NEWLINE
254+30:1 glyph ++
255+30:4 name unknown-target
256+30:19 glyph |=
257+30:22 name x
258+30:23 tight glyph =
259+30:24 tight tvar A
260+30:26 glyph ^-
261+30:29 tvar A
262+30:31 name width
263+30:36 tight glyph +
264+30:37 tight glyph [
265+30:38 tight lit %fill
266+30:44 glyph (
267+30:45 tight name number-id
268+30:55 lit 1
269+30:56 tight glyph )
270+30:57 tight glyph ]
271+30:58 NEWLINE
tests/golden/types-nested-shallow-preserve/tree.txtnew file+136
@@ -0,0 +1,136 @@
1+(module
2+ (mold 1:1 length
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %fill)
6+ (face 2:10 n (aura 2:12 @ud)))
7+ (const 3:3 %shrink)))
8+ (mold 4:1 attr
9+ (union 5:3
10+ (cell 5:3 (const 5:4 %width) (ref 5:11 length))
11+ (cell 6:3 (const 6:4 %gap) (aura 6:9 @tas))))
12+ (value 7:1 number-id
13+ (gate 7:14
14+ (face 7:17 x (aura 7:19 @ud))
15+ (wing 7:23 x)))
16+ (value 8:1 plain
17+ (cast 8:10
18+ (ref 8:13 attr)
19+ (pair 8:18 width
20+ (tuple 8:24 (lit 8:25 %fill) (lit 8:31 1)))))
21+ (value 9:1 direct
22+ (cast 9:11
23+ (ref 9:14 attr)
24+ (tuple 9:19
25+ (lit 9:20 %width)
26+ (tuple 9:27 (lit 9:28 %fill) (lit 9:34 1)))))
27+ (value 10:1 list
28+ (cast 10:9
29+ (apply 10:12 list (ref 10:18 attr))
30+ (list 10:24
31+ (pair 10:26 width
32+ (tuple 10:32 (lit 10:33 %fill) (lit 10:39 1))))))
33+ (value 11:1 accept
34+ (gate 11:11
35+ (face 11:14 value (ref 11:20 attr))
36+ (wing 11:25 value)))
37+ (value 12:1 call
38+ (group 12:9
39+ (call 12:10
40+ (wing 12:10 accept)
41+ (pair 12:17 width
42+ (tuple 12:23 (lit 12:24 %fill) (lit 12:30 1))))))
43+ (value 13:1 simple-call
44+ (cast 13:16
45+ (ref 13:19 attr)
46+ (pair 13:24 width
47+ (tuple 13:30
48+ (lit 13:31 %fill)
49+ (group 13:37
50+ (call 13:38 (wing 13:38 number-id) (lit 13:48 1)))))))
51+ (value 14:1 grouped-call
52+ (cast 14:17
53+ (ref 14:20 attr)
54+ (pair 14:25 width
55+ (tuple 14:31
56+ (lit 14:32 %fill)
57+ (group 14:38
58+ (group 14:39
59+ (call 14:40 (wing 14:40 number-id) (lit 14:50 1))))))))
60+ (value 15:1 cast-call
61+ (cast 15:14
62+ (ref 15:17 attr)
63+ (pair 15:22 width
64+ (tuple 15:28
65+ (lit 15:29 %fill)
66+ (group 15:35
67+ (cast 15:36
68+ (aura 15:39 @ud)
69+ (group 15:43
70+ (call 15:44 (wing 15:44 number-id) (lit 15:54 1)))))))))
71+ (value 16:1 nested-call
72+ (cast 16:16
73+ (ref 16:19 attr)
74+ (pair 16:24 width
75+ (tuple 16:30
76+ (lit 16:31 %fill)
77+ (group 16:37
78+ (call 16:38
79+ (wing 16:38 number-id)
80+ (group 16:48
81+ (call 16:49 (wing 16:49 number-id) (lit 16:59 1)))))))))
82+ (value 17:1 bad-tag
83+ (cast 17:12
84+ (ref 17:15 attr)
85+ (pair 17:20 width
86+ (tuple 17:26 (lit 17:27 %missing) (lit 17:36 1)))))
87+ (value 18:1 bad-number
88+ (cast 18:15
89+ (ref 18:18 attr)
90+ (pair 18:23 width
91+ (tuple 18:29 (lit 18:30 %fill) (str 18:36 "bad")))))
92+ (value 19:1 pending
93+ (body 20:3
94+ (trace 20:3
95+ (lit 20:6 %unrelated)
96+ (body 21:5
97+ (cast 21:5
98+ (ref 21:8 attr)
99+ (pair 21:13 width
100+ (tuple 21:19
101+ (lit 21:20 %fill)
102+ (group 21:26
103+ (call 21:27 (wing 21:27 number-id) (lit 21:37 1))))))))))
104+ (value 22:1 singleton
105+ (cast 22:14
106+ (ref 22:17 attr)
107+ (pair 22:22 width (lit 22:28 %shrink))))
108+ (mold 23:1 event
109+ (union 24:3
110+ (cell 24:3
111+ (const 24:4 %got)
112+ (face 24:9 value (aura 24:15 @t)))
113+ (const 25:3 %idle)))
114+ (mold 26:1 envelope
115+ (union 27:3
116+ (cell 27:3
117+ (const 27:4 %handler)
118+ (face 27:13 callback
119+ (fn 27:22 (aura 27:25 @t) (ref 27:28 event))))
120+ (cell 28:3
121+ (const 28:4 %empty)
122+ (face 28:11 value (aura 28:17 @ud)))))
123+ (value 29:1 constructor
124+ (cast 29:16
125+ (ref 29:19 envelope)
126+ (tuple 29:28 (lit 29:29 %handler) (ctor 29:38 %got))))
127+ (value 30:1 unknown-target
128+ (gate 30:19
129+ (face 30:22 x (tvar 30:24 A))
130+ (cast 30:26
131+ (tvar 30:29 A)
132+ (pair 30:31 width
133+ (tuple 30:37
134+ (lit 30:38 %fill)
135+ (group 30:44
136+ (call 30:45 (wing 30:45 number-id) (lit 30:55 1)))))))))
tests/golden/types-nested-shallow-preserve/types.txtnew file+33
@@ -0,0 +1,33 @@
1+partial inference; module not checked
2++$ length: cases proven disjoint; mold not checked
3++$ attr: cases proven disjoint; mold not checked
4+++ number-id: $-(@ud @ud)
5+++ plain: attr
6+++ direct: attr
7+++ list: (list attr)
8+++ accept: $-(attr attr)
9+++ call: attr
10+++ simple-call: attr
11+++ grouped-call: attr
12+++ cast-call: attr
13+++ nested-call: attr
14+++ bad-tag: cast mold and expression type do not unify
15+/tests/golden/types-nested-shallow-preserve/source.jibb:17:15: cast mold
16+++ bad-tag ^- attr width+[%missing 1]
17+ ^
18+/tests/golden/types-nested-shallow-preserve/source.jibb:17:20: expression
19+++ bad-tag ^- attr width+[%missing 1]
20+ ^
21+++ bad-number: cast mold and expression type do not unify
22+/tests/golden/types-nested-shallow-preserve/source.jibb:18:18: cast mold
23+++ bad-number ^- attr width+[%fill "bad"]
24+ ^
25+/tests/golden/types-nested-shallow-preserve/source.jibb:18:23: expression
26+++ bad-number ^- attr width+[%fill "bad"]
27+ ^
28+++ pending: tag needs context in partial inference
29+++ singleton: attr
30++$ event: cases proven disjoint; mold not checked
31++$ envelope: cases proven disjoint; mold not checked
32+++ constructor: envelope
33+++ unknown-target: explicit capital constraints are not supported by partial inference
tests/golden/types-nested-union-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Literals by context: "Number and cell literals resolve like tags: each waits for its context"; Molds: "Tags take their union from context".
2+tests: Nested named-union expressions, invalid and unknown contexts, shared and independent generic variables, unresolved tags and nulls. Unproven case coverage remains unsupported. This is a partial inference report.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-nested-union-context/source.jibbnew file+59
@@ -0,0 +1,59 @@
1++$ msg
2+ %go
3+ %stay
4++$ alt
5+ %go
6+ %stay
7++$ payload |$ [A]
8+ [%value item=A]
9+ %empty
10++$ box |$ [A]
11+ [%wrap item=(payload A)]
12+ %none
13++$ reverse |$ [A B]
14+ [%left item=A]
15+ [%right item=B]
16+++ lift |= x=A ^- (payload A) [%value x]
17+++ direct ^- (payload msg) (lift %go)
18+++ nested ^- (box msg) [%wrap (lift %go)]
19+++ nested-alias |= p=(payload msg) ^- (box msg) [%wrap p]
20+++ nested-typed ^- (box msg) [%wrap (lift (^- msg %go))]
21+++ nested-cord ^- (box @t) [%wrap (lift "hi")]
22+++ nested-ship ^- (box @p) [%wrap (lift ~zod)]
23+++ independent |= [t=@t p=@p]
24+ [(^- (box @t) [%wrap (lift t)]) (^- (box @p) [%wrap (lift p)])]
25+++ wrong-payload ^- (box @t) [%wrap (lift ~zod)]
26+++ wrong-tag ^- (box msg) [%wrap (lift %absent)]
27+++ wrong-origin |= x=alt ^- (box msg) [%wrap (lift x)]
28+++ generic |= x=A ^- (box A) [%wrap (lift x)]
29+++ repeated |= x=A ^- [a=(box A) b=(box A)] [a=[%wrap (lift x)] b=[%wrap (lift x)]]
30+++ unrelated-pending
31+ ~& %orphan
32+ ^- (box msg) [%wrap (lift %go)]
33+++ pending-null
34+ ~& ~
35+ ^- (box msg) [%wrap (lift %go)]
36+++ discarded-constructor
37+ ~& |=%orphan
38+ ^- (box msg) [%wrap (lift %go)]
39+++ unknown-output [%wrap (lift %go)]
40+++ unknown-target |= x=A ^- A [%wrap (lift %go)]
41+++ outer-callback |= [p=(payload A) fn=$-((payload A) B)] (fn p)
42+++ ctor-context ^- (box @t) (outer-callback (lift "hi") |=%wrap)
43+++ other-case ^- (box @t) %none
44++$ full-payload |$ [A]
45+ [%value item=A]
46+ [%skip code=@ud]
47++$ full-box |$ [A]
48+ [%wrap item=(full-payload A)]
49+ [%other code=@ud]
50+++ make-full |= x=A ^- (full-payload A) [%value x]
51+++ full-valid ^- (full-box msg) [%wrap (make-full %go)]
52+++ full-cord ^- (full-box @t) [%wrap (make-full "hi")]
53+++ full-ship ^- (full-box @p) [%wrap (make-full ~zod)]
54+++ full-generic |= x=A ^- (full-box A) [%wrap (make-full x)]
55+++ full-wrong ^- (full-box @t) [%wrap (make-full ~zod)]
56+++ full-missing ^- (full-box msg) [%wrap (make-full %missing)]
57+++ full-pending
58+ ~& %orphan
59+ ^- (full-box msg) [%wrap (make-full %go)]
tests/golden/types-nested-union-context/tokens.txtnew file+660
@@ -0,0 +1,660 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %go
5+3:3 NEWLINE
6+3:3 lit %stay
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph +$
10+4:4 name alt
11+5:3 INDENT
12+5:3 lit %go
13+6:3 NEWLINE
14+6:3 lit %stay
15+7:1 DEDENT
16+7:1 NEWLINE
17+7:1 glyph +$
18+7:4 name payload
19+7:12 glyph |$
20+7:15 glyph [
21+7:16 tight tvar A
22+7:17 tight glyph ]
23+8:3 INDENT
24+8:3 glyph [
25+8:4 tight lit %value
26+8:11 name item
27+8:15 tight glyph =
28+8:16 tight tvar A
29+8:17 tight glyph ]
30+9:3 NEWLINE
31+9:3 lit %empty
32+10:1 DEDENT
33+10:1 NEWLINE
34+10:1 glyph +$
35+10:4 name box
36+10:8 glyph |$
37+10:11 glyph [
38+10:12 tight tvar A
39+10:13 tight glyph ]
40+11:3 INDENT
41+11:3 glyph [
42+11:4 tight lit %wrap
43+11:10 name item
44+11:14 tight glyph =
45+11:15 tight glyph (
46+11:16 tight name payload
47+11:24 tvar A
48+11:25 tight glyph )
49+11:26 tight glyph ]
50+12:3 NEWLINE
51+12:3 lit %none
52+13:1 DEDENT
53+13:1 NEWLINE
54+13:1 glyph +$
55+13:4 name reverse
56+13:12 glyph |$
57+13:15 glyph [
58+13:16 tight tvar A
59+13:18 tvar B
60+13:19 tight glyph ]
61+14:3 INDENT
62+14:3 glyph [
63+14:4 tight lit %left
64+14:10 name item
65+14:14 tight glyph =
66+14:15 tight tvar A
67+14:16 tight glyph ]
68+15:3 NEWLINE
69+15:3 glyph [
70+15:4 tight lit %right
71+15:11 name item
72+15:15 tight glyph =
73+15:16 tight tvar B
74+15:17 tight glyph ]
75+16:1 DEDENT
76+16:1 NEWLINE
77+16:1 glyph ++
78+16:4 name lift
79+16:9 glyph |=
80+16:12 name x
81+16:13 tight glyph =
82+16:14 tight tvar A
83+16:16 glyph ^-
84+16:19 glyph (
85+16:20 tight name payload
86+16:28 tvar A
87+16:29 tight glyph )
88+16:31 glyph [
89+16:32 tight lit %value
90+16:39 name x
91+16:40 tight glyph ]
92+17:1 NEWLINE
93+17:1 glyph ++
94+17:4 name direct
95+17:11 glyph ^-
96+17:14 glyph (
97+17:15 tight name payload
98+17:23 name msg
99+17:26 tight glyph )
100+17:28 glyph (
101+17:29 tight name lift
102+17:34 lit %go
103+17:37 tight glyph )
104+18:1 NEWLINE
105+18:1 glyph ++
106+18:4 name nested
107+18:11 glyph ^-
108+18:14 glyph (
109+18:15 tight name box
110+18:19 name msg
111+18:22 tight glyph )
112+18:24 glyph [
113+18:25 tight lit %wrap
114+18:31 glyph (
115+18:32 tight name lift
116+18:37 lit %go
117+18:40 tight glyph )
118+18:41 tight glyph ]
119+19:1 NEWLINE
120+19:1 glyph ++
121+19:4 name nested-alias
122+19:17 glyph |=
123+19:20 name p
124+19:21 tight glyph =
125+19:22 tight glyph (
126+19:23 tight name payload
127+19:31 name msg
128+19:34 tight glyph )
129+19:36 glyph ^-
130+19:39 glyph (
131+19:40 tight name box
132+19:44 name msg
133+19:47 tight glyph )
134+19:49 glyph [
135+19:50 tight lit %wrap
136+19:56 name p
137+19:57 tight glyph ]
138+20:1 NEWLINE
139+20:1 glyph ++
140+20:4 name nested-typed
141+20:17 glyph ^-
142+20:20 glyph (
143+20:21 tight name box
144+20:25 name msg
145+20:28 tight glyph )
146+20:30 glyph [
147+20:31 tight lit %wrap
148+20:37 glyph (
149+20:38 tight name lift
150+20:43 glyph (
151+20:44 tight glyph ^-
152+20:47 name msg
153+20:51 lit %go
154+20:54 tight glyph )
155+20:55 tight glyph )
156+20:56 tight glyph ]
157+21:1 NEWLINE
158+21:1 glyph ++
159+21:4 name nested-cord
160+21:16 glyph ^-
161+21:19 glyph (
162+21:20 tight name box
163+21:24 aura @t
164+21:26 tight glyph )
165+21:28 glyph [
166+21:29 tight lit %wrap
167+21:35 glyph (
168+21:36 tight name lift
169+21:41 str "hi"
170+21:45 tight glyph )
171+21:46 tight glyph ]
172+22:1 NEWLINE
173+22:1 glyph ++
174+22:4 name nested-ship
175+22:16 glyph ^-
176+22:19 glyph (
177+22:20 tight name box
178+22:24 aura @p
179+22:26 tight glyph )
180+22:28 glyph [
181+22:29 tight lit %wrap
182+22:35 glyph (
183+22:36 tight name lift
184+22:41 lit ~zod
185+22:45 tight glyph )
186+22:46 tight glyph ]
187+23:1 NEWLINE
188+23:1 glyph ++
189+23:4 name independent
190+23:16 glyph |=
191+23:19 glyph [
192+23:20 tight name t
193+23:21 tight glyph =
194+23:22 tight aura @t
195+23:25 name p
196+23:26 tight glyph =
197+23:27 tight aura @p
198+23:29 tight glyph ]
199+24:3 INDENT
200+24:3 glyph [
201+24:4 tight glyph (
202+24:5 tight glyph ^-
203+24:8 glyph (
204+24:9 tight name box
205+24:13 aura @t
206+24:15 tight glyph )
207+24:17 glyph [
208+24:18 tight lit %wrap
209+24:24 glyph (
210+24:25 tight name lift
211+24:30 name t
212+24:31 tight glyph )
213+24:32 tight glyph ]
214+24:33 tight glyph )
215+24:35 glyph (
216+24:36 tight glyph ^-
217+24:39 glyph (
218+24:40 tight name box
219+24:44 aura @p
220+24:46 tight glyph )
221+24:48 glyph [
222+24:49 tight lit %wrap
223+24:55 glyph (
224+24:56 tight name lift
225+24:61 name p
226+24:62 tight glyph )
227+24:63 tight glyph ]
228+24:64 tight glyph )
229+24:65 tight glyph ]
230+25:1 DEDENT
231+25:1 NEWLINE
232+25:1 glyph ++
233+25:4 name wrong-payload
234+25:18 glyph ^-
235+25:21 glyph (
236+25:22 tight name box
237+25:26 aura @t
238+25:28 tight glyph )
239+25:30 glyph [
240+25:31 tight lit %wrap
241+25:37 glyph (
242+25:38 tight name lift
243+25:43 lit ~zod
244+25:47 tight glyph )
245+25:48 tight glyph ]
246+26:1 NEWLINE
247+26:1 glyph ++
248+26:4 name wrong-tag
249+26:14 glyph ^-
250+26:17 glyph (
251+26:18 tight name box
252+26:22 name msg
253+26:25 tight glyph )
254+26:27 glyph [
255+26:28 tight lit %wrap
256+26:34 glyph (
257+26:35 tight name lift
258+26:40 lit %absent
259+26:47 tight glyph )
260+26:48 tight glyph ]
261+27:1 NEWLINE
262+27:1 glyph ++
263+27:4 name wrong-origin
264+27:17 glyph |=
265+27:20 name x
266+27:21 tight glyph =
267+27:22 tight name alt
268+27:26 glyph ^-
269+27:29 glyph (
270+27:30 tight name box
271+27:34 name msg
272+27:37 tight glyph )
273+27:39 glyph [
274+27:40 tight lit %wrap
275+27:46 glyph (
276+27:47 tight name lift
277+27:52 name x
278+27:53 tight glyph )
279+27:54 tight glyph ]
280+28:1 NEWLINE
281+28:1 glyph ++
282+28:4 name generic
283+28:12 glyph |=
284+28:15 name x
285+28:16 tight glyph =
286+28:17 tight tvar A
287+28:19 glyph ^-
288+28:22 glyph (
289+28:23 tight name box
290+28:27 tvar A
291+28:28 tight glyph )
292+28:30 glyph [
293+28:31 tight lit %wrap
294+28:37 glyph (
295+28:38 tight name lift
296+28:43 name x
297+28:44 tight glyph )
298+28:45 tight glyph ]
299+29:1 NEWLINE
300+29:1 glyph ++
301+29:4 name repeated
302+29:13 glyph |=
303+29:16 name x
304+29:17 tight glyph =
305+29:18 tight tvar A
306+29:20 glyph ^-
307+29:23 glyph [
308+29:24 tight name a
309+29:25 tight glyph =
310+29:26 tight glyph (
311+29:27 tight name box
312+29:31 tvar A
313+29:32 tight glyph )
314+29:34 name b
315+29:35 tight glyph =
316+29:36 tight glyph (
317+29:37 tight name box
318+29:41 tvar A
319+29:42 tight glyph )
320+29:43 tight glyph ]
321+29:45 glyph [
322+29:46 tight name a
323+29:47 tight glyph =
324+29:48 tight glyph [
325+29:49 tight lit %wrap
326+29:55 glyph (
327+29:56 tight name lift
328+29:61 name x
329+29:62 tight glyph )
330+29:63 tight glyph ]
331+29:65 name b
332+29:66 tight glyph =
333+29:67 tight glyph [
334+29:68 tight lit %wrap
335+29:74 glyph (
336+29:75 tight name lift
337+29:80 name x
338+29:81 tight glyph )
339+29:82 tight glyph ]
340+29:83 tight glyph ]
341+30:1 NEWLINE
342+30:1 glyph ++
343+30:4 name unrelated-pending
344+31:3 INDENT
345+31:3 glyph ~&
346+31:6 lit %orphan
347+32:5 INDENT
348+32:5 glyph ^-
349+32:8 glyph (
350+32:9 tight name box
351+32:13 name msg
352+32:16 tight glyph )
353+32:18 glyph [
354+32:19 tight lit %wrap
355+32:25 glyph (
356+32:26 tight name lift
357+32:31 lit %go
358+32:34 tight glyph )
359+32:35 tight glyph ]
360+33:1 DEDENT
361+33:1 DEDENT
362+33:1 NEWLINE
363+33:1 glyph ++
364+33:4 name pending-null
365+34:3 INDENT
366+34:3 glyph ~&
367+34:6 lit ~
368+35:5 INDENT
369+35:5 glyph ^-
370+35:8 glyph (
371+35:9 tight name box
372+35:13 name msg
373+35:16 tight glyph )
374+35:18 glyph [
375+35:19 tight lit %wrap
376+35:25 glyph (
377+35:26 tight name lift
378+35:31 lit %go
379+35:34 tight glyph )
380+35:35 tight glyph ]
381+36:1 DEDENT
382+36:1 DEDENT
383+36:1 NEWLINE
384+36:1 glyph ++
385+36:4 name discarded-constructor
386+37:3 INDENT
387+37:3 glyph ~&
388+37:6 glyph |=
389+37:8 tight lit %orphan
390+38:5 INDENT
391+38:5 glyph ^-
392+38:8 glyph (
393+38:9 tight name box
394+38:13 name msg
395+38:16 tight glyph )
396+38:18 glyph [
397+38:19 tight lit %wrap
398+38:25 glyph (
399+38:26 tight name lift
400+38:31 lit %go
401+38:34 tight glyph )
402+38:35 tight glyph ]
403+39:1 DEDENT
404+39:1 DEDENT
405+39:1 NEWLINE
406+39:1 glyph ++
407+39:4 name unknown-output
408+39:19 glyph [
409+39:20 tight lit %wrap
410+39:26 glyph (
411+39:27 tight name lift
412+39:32 lit %go
413+39:35 tight glyph )
414+39:36 tight glyph ]
415+40:1 NEWLINE
416+40:1 glyph ++
417+40:4 name unknown-target
418+40:19 glyph |=
419+40:22 name x
420+40:23 tight glyph =
421+40:24 tight tvar A
422+40:26 glyph ^-
423+40:29 tvar A
424+40:31 glyph [
425+40:32 tight lit %wrap
426+40:38 glyph (
427+40:39 tight name lift
428+40:44 lit %go
429+40:47 tight glyph )
430+40:48 tight glyph ]
431+41:1 NEWLINE
432+41:1 glyph ++
433+41:4 name outer-callback
434+41:19 glyph |=
435+41:22 glyph [
436+41:23 tight name p
437+41:24 tight glyph =
438+41:25 tight glyph (
439+41:26 tight name payload
440+41:34 tvar A
441+41:35 tight glyph )
442+41:37 name fn
443+41:39 tight glyph =
444+41:40 tight glyph $-(
445+41:43 tight glyph (
446+41:44 tight name payload
447+41:52 tvar A
448+41:53 tight glyph )
449+41:55 tvar B
450+41:56 tight glyph )
451+41:57 tight glyph ]
452+41:59 glyph (
453+41:60 tight name fn
454+41:63 name p
455+41:64 tight glyph )
456+42:1 NEWLINE
457+42:1 glyph ++
458+42:4 name ctor-context
459+42:17 glyph ^-
460+42:20 glyph (
461+42:21 tight name box
462+42:25 aura @t
463+42:27 tight glyph )
464+42:29 glyph (
465+42:30 tight name outer-callback
466+42:45 glyph (
467+42:46 tight name lift
468+42:51 str "hi"
469+42:55 tight glyph )
470+42:57 glyph |=
471+42:59 tight lit %wrap
472+42:64 tight glyph )
473+43:1 NEWLINE
474+43:1 glyph ++
475+43:4 name other-case
476+43:15 glyph ^-
477+43:18 glyph (
478+43:19 tight name box
479+43:23 aura @t
480+43:25 tight glyph )
481+43:27 lit %none
482+44:1 NEWLINE
483+44:1 glyph +$
484+44:4 name full-payload
485+44:17 glyph |$
486+44:20 glyph [
487+44:21 tight tvar A
488+44:22 tight glyph ]
489+45:3 INDENT
490+45:3 glyph [
491+45:4 tight lit %value
492+45:11 name item
493+45:15 tight glyph =
494+45:16 tight tvar A
495+45:17 tight glyph ]
496+46:3 NEWLINE
497+46:3 glyph [
498+46:4 tight lit %skip
499+46:10 name code
500+46:14 tight glyph =
501+46:15 tight aura @ud
502+46:18 tight glyph ]
503+47:1 DEDENT
504+47:1 NEWLINE
505+47:1 glyph +$
506+47:4 name full-box
507+47:13 glyph |$
508+47:16 glyph [
509+47:17 tight tvar A
510+47:18 tight glyph ]
511+48:3 INDENT
512+48:3 glyph [
513+48:4 tight lit %wrap
514+48:10 name item
515+48:14 tight glyph =
516+48:15 tight glyph (
517+48:16 tight name full-payload
518+48:29 tvar A
519+48:30 tight glyph )
520+48:31 tight glyph ]
521+49:3 NEWLINE
522+49:3 glyph [
523+49:4 tight lit %other
524+49:11 name code
525+49:15 tight glyph =
526+49:16 tight aura @ud
527+49:19 tight glyph ]
528+50:1 DEDENT
529+50:1 NEWLINE
530+50:1 glyph ++
531+50:4 name make-full
532+50:14 glyph |=
533+50:17 name x
534+50:18 tight glyph =
535+50:19 tight tvar A
536+50:21 glyph ^-
537+50:24 glyph (
538+50:25 tight name full-payload
539+50:38 tvar A
540+50:39 tight glyph )
541+50:41 glyph [
542+50:42 tight lit %value
543+50:49 name x
544+50:50 tight glyph ]
545+51:1 NEWLINE
546+51:1 glyph ++
547+51:4 name full-valid
548+51:15 glyph ^-
549+51:18 glyph (
550+51:19 tight name full-box
551+51:28 name msg
552+51:31 tight glyph )
553+51:33 glyph [
554+51:34 tight lit %wrap
555+51:40 glyph (
556+51:41 tight name make-full
557+51:51 lit %go
558+51:54 tight glyph )
559+51:55 tight glyph ]
560+52:1 NEWLINE
561+52:1 glyph ++
562+52:4 name full-cord
563+52:14 glyph ^-
564+52:17 glyph (
565+52:18 tight name full-box
566+52:27 aura @t
567+52:29 tight glyph )
568+52:31 glyph [
569+52:32 tight lit %wrap
570+52:38 glyph (
571+52:39 tight name make-full
572+52:49 str "hi"
573+52:53 tight glyph )
574+52:54 tight glyph ]
575+53:1 NEWLINE
576+53:1 glyph ++
577+53:4 name full-ship
578+53:14 glyph ^-
579+53:17 glyph (
580+53:18 tight name full-box
581+53:27 aura @p
582+53:29 tight glyph )
583+53:31 glyph [
584+53:32 tight lit %wrap
585+53:38 glyph (
586+53:39 tight name make-full
587+53:49 lit ~zod
588+53:53 tight glyph )
589+53:54 tight glyph ]
590+54:1 NEWLINE
591+54:1 glyph ++
592+54:4 name full-generic
593+54:17 glyph |=
594+54:20 name x
595+54:21 tight glyph =
596+54:22 tight tvar A
597+54:24 glyph ^-
598+54:27 glyph (
599+54:28 tight name full-box
600+54:37 tvar A
601+54:38 tight glyph )
602+54:40 glyph [
603+54:41 tight lit %wrap
604+54:47 glyph (
605+54:48 tight name make-full
606+54:58 name x
607+54:59 tight glyph )
608+54:60 tight glyph ]
609+55:1 NEWLINE
610+55:1 glyph ++
611+55:4 name full-wrong
612+55:15 glyph ^-
613+55:18 glyph (
614+55:19 tight name full-box
615+55:28 aura @t
616+55:30 tight glyph )
617+55:32 glyph [
618+55:33 tight lit %wrap
619+55:39 glyph (
620+55:40 tight name make-full
621+55:50 lit ~zod
622+55:54 tight glyph )
623+55:55 tight glyph ]
624+56:1 NEWLINE
625+56:1 glyph ++
626+56:4 name full-missing
627+56:17 glyph ^-
628+56:20 glyph (
629+56:21 tight name full-box
630+56:30 name msg
631+56:33 tight glyph )
632+56:35 glyph [
633+56:36 tight lit %wrap
634+56:42 glyph (
635+56:43 tight name make-full
636+56:53 lit %missing
637+56:61 tight glyph )
638+56:62 tight glyph ]
639+57:1 NEWLINE
640+57:1 glyph ++
641+57:4 name full-pending
642+58:3 INDENT
643+58:3 glyph ~&
644+58:6 lit %orphan
645+59:5 INDENT
646+59:5 glyph ^-
647+59:8 glyph (
648+59:9 tight name full-box
649+59:18 name msg
650+59:21 tight glyph )
651+59:23 glyph [
652+59:24 tight lit %wrap
653+59:30 glyph (
654+59:31 tight name make-full
655+59:41 lit %go
656+59:44 tight glyph )
657+59:45 tight glyph ]
658+59:46 DEDENT
659+59:46 DEDENT
660+59:46 NEWLINE
tests/golden/types-nested-union-context/tree.txtnew file+302
@@ -0,0 +1,302 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3 (const 2:3 %go) (const 3:3 %stay)))
4+ (mold 4:1 alt
5+ (union 5:3 (const 5:3 %go) (const 6:3 %stay)))
6+ (mold 7:1 payload
7+ (generic 7:12 A
8+ (union 8:3
9+ (cell 8:3
10+ (const 8:4 %value)
11+ (face 8:11 item (tvar 8:16 A)))
12+ (const 9:3 %empty))))
13+ (mold 10:1 box
14+ (generic 10:8 A
15+ (union 11:3
16+ (cell 11:3
17+ (const 11:4 %wrap)
18+ (face 11:10 item
19+ (apply 11:15 payload (tvar 11:24 A))))
20+ (const 12:3 %none))))
21+ (mold 13:1 reverse
22+ (generic 13:12 A B
23+ (union 14:3
24+ (cell 14:3
25+ (const 14:4 %left)
26+ (face 14:10 item (tvar 14:15 A)))
27+ (cell 15:3
28+ (const 15:4 %right)
29+ (face 15:11 item (tvar 15:16 B))))))
30+ (value 16:1 lift
31+ (gate 16:9
32+ (face 16:12 x (tvar 16:14 A))
33+ (cast 16:16
34+ (apply 16:19 payload (tvar 16:28 A))
35+ (tuple 16:31 (lit 16:32 %value) (wing 16:39 x)))))
36+ (value 17:1 direct
37+ (cast 17:11
38+ (apply 17:14 payload (ref 17:23 msg))
39+ (group 17:28
40+ (call 17:29 (wing 17:29 lift) (lit 17:34 %go)))))
41+ (value 18:1 nested
42+ (cast 18:11
43+ (apply 18:14 box (ref 18:19 msg))
44+ (tuple 18:24
45+ (lit 18:25 %wrap)
46+ (group 18:31
47+ (call 18:32 (wing 18:32 lift) (lit 18:37 %go))))))
48+ (value 19:1 nested-alias
49+ (gate 19:17
50+ (face 19:20 p
51+ (apply 19:22 payload (ref 19:31 msg)))
52+ (cast 19:36
53+ (apply 19:39 box (ref 19:44 msg))
54+ (tuple 19:49 (lit 19:50 %wrap) (wing 19:56 p)))))
55+ (value 20:1 nested-typed
56+ (cast 20:17
57+ (apply 20:20 box (ref 20:25 msg))
58+ (tuple 20:30
59+ (lit 20:31 %wrap)
60+ (group 20:37
61+ (call 20:38
62+ (wing 20:38 lift)
63+ (group 20:43
64+ (cast 20:44 (ref 20:47 msg) (lit 20:51 %go))))))))
65+ (value 21:1 nested-cord
66+ (cast 21:16
67+ (apply 21:19 box (aura 21:24 @t))
68+ (tuple 21:28
69+ (lit 21:29 %wrap)
70+ (group 21:35
71+ (call 21:36 (wing 21:36 lift) (str 21:41 "hi"))))))
72+ (value 22:1 nested-ship
73+ (cast 22:16
74+ (apply 22:19 box (aura 22:24 @p))
75+ (tuple 22:28
76+ (lit 22:29 %wrap)
77+ (group 22:35
78+ (call 22:36 (wing 22:36 lift) (lit 22:41 ~zod))))))
79+ (value 23:1 independent
80+ (gate 23:16
81+ (cell 23:19
82+ (face 23:20 t (aura 23:22 @t))
83+ (face 23:25 p (aura 23:27 @p)))
84+ (body 24:3
85+ (tuple 24:3
86+ (group 24:4
87+ (cast 24:5
88+ (apply 24:8 box (aura 24:13 @t))
89+ (tuple 24:17
90+ (lit 24:18 %wrap)
91+ (group 24:24
92+ (call 24:25 (wing 24:25 lift) (wing 24:30 t))))))
93+ (group 24:35
94+ (cast 24:36
95+ (apply 24:39 box (aura 24:44 @p))
96+ (tuple 24:48
97+ (lit 24:49 %wrap)
98+ (group 24:55
99+ (call 24:56 (wing 24:56 lift) (wing 24:61 p))))))))))
100+ (value 25:1 wrong-payload
101+ (cast 25:18
102+ (apply 25:21 box (aura 25:26 @t))
103+ (tuple 25:30
104+ (lit 25:31 %wrap)
105+ (group 25:37
106+ (call 25:38 (wing 25:38 lift) (lit 25:43 ~zod))))))
107+ (value 26:1 wrong-tag
108+ (cast 26:14
109+ (apply 26:17 box (ref 26:22 msg))
110+ (tuple 26:27
111+ (lit 26:28 %wrap)
112+ (group 26:34
113+ (call 26:35 (wing 26:35 lift) (lit 26:40 %absent))))))
114+ (value 27:1 wrong-origin
115+ (gate 27:17
116+ (face 27:20 x (ref 27:22 alt))
117+ (cast 27:26
118+ (apply 27:29 box (ref 27:34 msg))
119+ (tuple 27:39
120+ (lit 27:40 %wrap)
121+ (group 27:46
122+ (call 27:47 (wing 27:47 lift) (wing 27:52 x)))))))
123+ (value 28:1 generic
124+ (gate 28:12
125+ (face 28:15 x (tvar 28:17 A))
126+ (cast 28:19
127+ (apply 28:22 box (tvar 28:27 A))
128+ (tuple 28:30
129+ (lit 28:31 %wrap)
130+ (group 28:37
131+ (call 28:38 (wing 28:38 lift) (wing 28:43 x)))))))
132+ (value 29:1 repeated
133+ (gate 29:13
134+ (face 29:16 x (tvar 29:18 A))
135+ (cast 29:20
136+ (cell 29:23
137+ (face 29:24 a
138+ (apply 29:26 box (tvar 29:31 A)))
139+ (face 29:34 b
140+ (apply 29:36 box (tvar 29:41 A))))
141+ (tuple 29:45
142+ (face 29:46 a
143+ (tuple 29:48
144+ (lit 29:49 %wrap)
145+ (group 29:55
146+ (call 29:56 (wing 29:56 lift) (wing 29:61 x)))))
147+ (face 29:65 b
148+ (tuple 29:67
149+ (lit 29:68 %wrap)
150+ (group 29:74
151+ (call 29:75 (wing 29:75 lift) (wing 29:80 x)))))))))
152+ (value 30:1 unrelated-pending
153+ (body 31:3
154+ (trace 31:3
155+ (lit 31:6 %orphan)
156+ (body 32:5
157+ (cast 32:5
158+ (apply 32:8 box (ref 32:13 msg))
159+ (tuple 32:18
160+ (lit 32:19 %wrap)
161+ (group 32:25
162+ (call 32:26 (wing 32:26 lift) (lit 32:31 %go)))))))))
163+ (value 33:1 pending-null
164+ (body 34:3
165+ (trace 34:3
166+ (lit 34:6 ~)
167+ (body 35:5
168+ (cast 35:5
169+ (apply 35:8 box (ref 35:13 msg))
170+ (tuple 35:18
171+ (lit 35:19 %wrap)
172+ (group 35:25
173+ (call 35:26 (wing 35:26 lift) (lit 35:31 %go)))))))))
174+ (value 36:1 discarded-constructor
175+ (body 37:3
176+ (trace 37:3
177+ (ctor 37:6 %orphan)
178+ (body 38:5
179+ (cast 38:5
180+ (apply 38:8 box (ref 38:13 msg))
181+ (tuple 38:18
182+ (lit 38:19 %wrap)
183+ (group 38:25
184+ (call 38:26 (wing 38:26 lift) (lit 38:31 %go)))))))))
185+ (value 39:1 unknown-output
186+ (tuple 39:19
187+ (lit 39:20 %wrap)
188+ (group 39:26
189+ (call 39:27 (wing 39:27 lift) (lit 39:32 %go)))))
190+ (value 40:1 unknown-target
191+ (gate 40:19
192+ (face 40:22 x (tvar 40:24 A))
193+ (cast 40:26
194+ (tvar 40:29 A)
195+ (tuple 40:31
196+ (lit 40:32 %wrap)
197+ (group 40:38
198+ (call 40:39 (wing 40:39 lift) (lit 40:44 %go)))))))
199+ (value 41:1 outer-callback
200+ (gate 41:19
201+ (cell 41:22
202+ (face 41:23 p
203+ (apply 41:25 payload (tvar 41:34 A)))
204+ (face 41:37 fn
205+ (fn 41:40
206+ (apply 41:43 payload (tvar 41:52 A))
207+ (tvar 41:55 B))))
208+ (group 41:59
209+ (call 41:60 (wing 41:60 fn) (wing 41:63 p)))))
210+ (value 42:1 ctor-context
211+ (cast 42:17
212+ (apply 42:20 box (aura 42:25 @t))
213+ (group 42:29
214+ (call 42:30
215+ (wing 42:30 outer-callback)
216+ (group 42:45
217+ (call 42:46 (wing 42:46 lift) (str 42:51 "hi")))
218+ (ctor 42:57 %wrap)))))
219+ (value 43:1 other-case
220+ (cast 43:15
221+ (apply 43:18 box (aura 43:23 @t))
222+ (lit 43:27 %none)))
223+ (mold 44:1 full-payload
224+ (generic 44:17 A
225+ (union 45:3
226+ (cell 45:3
227+ (const 45:4 %value)
228+ (face 45:11 item (tvar 45:16 A)))
229+ (cell 46:3
230+ (const 46:4 %skip)
231+ (face 46:10 code (aura 46:15 @ud))))))
232+ (mold 47:1 full-box
233+ (generic 47:13 A
234+ (union 48:3
235+ (cell 48:3
236+ (const 48:4 %wrap)
237+ (face 48:10 item
238+ (apply 48:15 full-payload (tvar 48:29 A))))
239+ (cell 49:3
240+ (const 49:4 %other)
241+ (face 49:11 code (aura 49:16 @ud))))))
242+ (value 50:1 make-full
243+ (gate 50:14
244+ (face 50:17 x (tvar 50:19 A))
245+ (cast 50:21
246+ (apply 50:24 full-payload (tvar 50:38 A))
247+ (tuple 50:41 (lit 50:42 %value) (wing 50:49 x)))))
248+ (value 51:1 full-valid
249+ (cast 51:15
250+ (apply 51:18 full-box (ref 51:28 msg))
251+ (tuple 51:33
252+ (lit 51:34 %wrap)
253+ (group 51:40
254+ (call 51:41 (wing 51:41 make-full) (lit 51:51 %go))))))
255+ (value 52:1 full-cord
256+ (cast 52:14
257+ (apply 52:17 full-box (aura 52:27 @t))
258+ (tuple 52:31
259+ (lit 52:32 %wrap)
260+ (group 52:38
261+ (call 52:39 (wing 52:39 make-full) (str 52:49 "hi"))))))
262+ (value 53:1 full-ship
263+ (cast 53:14
264+ (apply 53:17 full-box (aura 53:27 @p))
265+ (tuple 53:31
266+ (lit 53:32 %wrap)
267+ (group 53:38
268+ (call 53:39 (wing 53:39 make-full) (lit 53:49 ~zod))))))
269+ (value 54:1 full-generic
270+ (gate 54:17
271+ (face 54:20 x (tvar 54:22 A))
272+ (cast 54:24
273+ (apply 54:27 full-box (tvar 54:37 A))
274+ (tuple 54:40
275+ (lit 54:41 %wrap)
276+ (group 54:47
277+ (call 54:48 (wing 54:48 make-full) (wing 54:58 x)))))))
278+ (value 55:1 full-wrong
279+ (cast 55:15
280+ (apply 55:18 full-box (aura 55:28 @t))
281+ (tuple 55:32
282+ (lit 55:33 %wrap)
283+ (group 55:39
284+ (call 55:40 (wing 55:40 make-full) (lit 55:50 ~zod))))))
285+ (value 56:1 full-missing
286+ (cast 56:17
287+ (apply 56:20 full-box (ref 56:30 msg))
288+ (tuple 56:35
289+ (lit 56:36 %wrap)
290+ (group 56:42
291+ (call 56:43 (wing 56:43 make-full) (lit 56:53 %missing))))))
292+ (value 57:1 full-pending
293+ (body 58:3
294+ (trace 58:3
295+ (lit 58:6 %orphan)
296+ (body 59:5
297+ (cast 59:5
298+ (apply 59:8 full-box (ref 59:18 msg))
299+ (tuple 59:23
300+ (lit 59:24 %wrap)
301+ (group 59:30
302+ (call 59:31 (wing 59:31 make-full) (lit 59:41 %go))))))))))
tests/golden/types-nested-union-context/types.txtnew file+49
@@ -0,0 +1,49 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ alt: cases proven disjoint; mold not checked
4++$ payload: cases proven disjoint; mold not checked
5++$ box: cases proven disjoint; mold not checked
6++$ reverse: cases proven disjoint; mold not checked
7+++ lift: $-(A (payload A))
8+++ direct: (payload msg)
9+++ nested: cast constraint is not supported by partial inference
10+++ nested-alias: cast constraint is not supported by partial inference
11+++ nested-typed: cast constraint is not supported by partial inference
12+++ nested-cord: cast constraint is not supported by partial inference
13+++ nested-ship: cast constraint is not supported by partial inference
14+++ independent: cast constraint is not supported by partial inference
15+++ wrong-payload: cast constraint is not supported by partial inference
16+++ wrong-tag: cast constraint is not supported by partial inference
17+++ wrong-origin: cast constraint is not supported by partial inference
18+++ generic: cast constraint is not supported by partial inference
19+++ repeated: cast constraint is not supported by partial inference
20+++ unrelated-pending: cast constraint is not supported by partial inference
21+++ pending-null: cast constraint is not supported by partial inference
22+++ discarded-constructor: cast constraint is not supported by partial inference
23+++ unknown-output: tag needs context in partial inference
24+++ unknown-target: explicit capital constraints are not supported by partial inference
25+++ outer-callback: $-([p=(payload A) fn=$-((payload A) B)] B)
26+++ ctor-context: (box @t)
27+++ other-case: (box @t)
28++$ full-payload: cases proven disjoint; mold not checked
29++$ full-box: cases proven disjoint; mold not checked
30+++ make-full: $-(A (full-payload A))
31+++ full-valid: (full-box msg)
32+++ full-cord: (full-box @t)
33+++ full-ship: (full-box @p)
34+++ full-generic: $-(A (full-box A))
35+++ full-wrong: call's sample and argument types do not unify
36+/tests/golden/types-nested-union-context/source.jibb:55:40: called gate
37+++ full-wrong ^- (full-box @t) [%wrap (make-full ~zod)]
38+ ^
39+/tests/golden/types-nested-union-context/source.jibb:55:50: argument has type @p
40+++ full-wrong ^- (full-box @t) [%wrap (make-full ~zod)]
41+ ^
42+++ full-missing: msg has no case `%missing`
43+/tests/golden/types-nested-union-context/source.jibb:56:43: expected union
44+++ full-missing ^- (full-box msg) [%wrap (make-full %missing)]
45+ ^
46+/tests/golden/types-nested-union-context/source.jibb:56:53: tag
47+++ full-missing ^- (full-box msg) [%wrap (make-full %missing)]
48+ ^
49+++ full-pending: tag needs context in partial inference
tests/golden/types-null-context/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Tag resolution: "A tag literal or `~` gets a fresh type variable and a pending constraint"; `|=%typed` "works for cases tagged at their head".
2−tests: Contextual null and a null-headed cell fit their respective cases. A null-headed case is not a `%$` constructor; a term-headed `%$` case is.
2+tests: Contextual null and a null-headed cell fit their respective cases. Null- and term-headed zero cases both accept a `%$` constructor because their literal heads are equal nouns.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-null-context/source.jibb+1−1
@@ -4,5 +4,5 @@
44+$ dollar [%$ value=@t]
55++ empty ^- maybe ~
66++ present ^- maybe [~ "hi"]
7−++ bad-constructor ^- $-(@t maybe) |=%$
7+++ null-constructor ^- $-(@t maybe) |=%$
88++ dollar-constructor ^- $-(@t dollar) |=%$
tests/golden/types-null-context/tokens.txt+8−8
@@ -36,14 +36,14 @@
36366:28 tight glyph ]
37377:1 NEWLINE
38387:1 glyph ++
39−7:4 name bad-constructor
40−7:20 glyph ^-
41−7:23 glyph $-(
42−7:26 tight aura @t
43−7:29 name maybe
44−7:34 tight glyph )
45−7:36 glyph |=
46−7:38 tight lit %$
39+7:4 name null-constructor
40+7:21 glyph ^-
41+7:24 glyph $-(
42+7:27 tight aura @t
43+7:30 name maybe
44+7:35 tight glyph )
45+7:37 glyph |=
46+7:39 tight lit %$
47478:1 NEWLINE
48488:1 glyph ++
49498:4 name dollar-constructor
tests/golden/types-null-context/tree.txt+4−4
@@ -15,10 +15,10 @@
1515 (cast 6:12
1616 (ref 6:15 maybe)
1717 (tuple 6:21 (lit 6:22 ~) (str 6:24 "hi"))))
18− (value 7:1 bad-constructor
19− (cast 7:20
20− (fn 7:23 (aura 7:26 @t) (ref 7:29 maybe))
21− (ctor 7:36 %$)))
18+ (value 7:1 null-constructor
19+ (cast 7:21
20+ (fn 7:24 (aura 7:27 @t) (ref 7:30 maybe))
21+ (ctor 7:37 %$)))
2222 (value 8:1 dollar-constructor
2323 (cast 8:23
2424 (fn 8:26 (aura 8:29 @t) (ref 8:32 dollar))
tests/golden/types-null-context/types.txt+1−7
@@ -3,11 +3,5 @@ partial inference; module not checked
33+$ dollar: not checked
44++ empty: maybe
55++ present: maybe
6−++ bad-constructor: cast mold and expression type do not unify
7−/tests/golden/types-null-context/source.jibb:7:23: cast mold
8−++ bad-constructor ^- $-(@t maybe) |=%$
9− ^
10−/tests/golden/types-null-context/source.jibb:7:36: expression
11−++ bad-constructor ^- $-(@t maybe) |=%$
12− ^
6+++ null-constructor: $-(@t maybe)
137++ dollar-constructor: $-(@t [%$ value=@t])
tests/golden/types-partial-union-nested-nouns/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Molds, Unions: "Cases must differ as nouns"; "a cell with an empty position at any depth is itself empty".
2+tests: Nested zero literals compare by noun across spelling, while distinct nested constants are disjoint. An empty field below an unknown gate makes the whole cell empty; without that field, gate inhabitation is unknown. A fully inhabited cell overlaps the noun mold. This reports pairwise partial mold analysis, not checked molds.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-partial-union-nested-nouns/source.jibbnew file+18
@@ -0,0 +1,18 @@
1++$ nested-zero
2+ [%tag [%$ @t]]
3+ [%tag [~ @t]]
4++$ nested-flag-zero
5+ [%tag [%.y @t]]
6+ [%tag [%$ @t]]
7++$ nested-distinct
8+ [%tag [%a @t]]
9+ [%tag [%b @t]]
10++$ empty-beneath-unknown
11+ *
12+ [%tag [$-(@t @t) !!]]
13++$ unknown-inhabitation
14+ *
15+ [%tag [$-(@t @t) @t]]
16++$ known-inhabitation
17+ *
18+ [%tag [@t @p]]
tests/golden/types-partial-union-nested-nouns/tokens.txtnew file+108
@@ -0,0 +1,108 @@
1+1:1 glyph +$
2+1:4 name nested-zero
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %tag
6+2:9 glyph [
7+2:10 tight lit %$
8+2:13 aura @t
9+2:15 tight glyph ]
10+2:16 tight glyph ]
11+3:3 NEWLINE
12+3:3 glyph [
13+3:4 tight lit %tag
14+3:9 glyph [
15+3:10 tight lit ~
16+3:12 aura @t
17+3:14 tight glyph ]
18+3:15 tight glyph ]
19+4:1 DEDENT
20+4:1 NEWLINE
21+4:1 glyph +$
22+4:4 name nested-flag-zero
23+5:3 INDENT
24+5:3 glyph [
25+5:4 tight lit %tag
26+5:9 glyph [
27+5:10 tight lit %.y
28+5:14 aura @t
29+5:16 tight glyph ]
30+5:17 tight glyph ]
31+6:3 NEWLINE
32+6:3 glyph [
33+6:4 tight lit %tag
34+6:9 glyph [
35+6:10 tight lit %$
36+6:13 aura @t
37+6:15 tight glyph ]
38+6:16 tight glyph ]
39+7:1 DEDENT
40+7:1 NEWLINE
41+7:1 glyph +$
42+7:4 name nested-distinct
43+8:3 INDENT
44+8:3 glyph [
45+8:4 tight lit %tag
46+8:9 glyph [
47+8:10 tight lit %a
48+8:13 aura @t
49+8:15 tight glyph ]
50+8:16 tight glyph ]
51+9:3 NEWLINE
52+9:3 glyph [
53+9:4 tight lit %tag
54+9:9 glyph [
55+9:10 tight lit %b
56+9:13 aura @t
57+9:15 tight glyph ]
58+9:16 tight glyph ]
59+10:1 DEDENT
60+10:1 NEWLINE
61+10:1 glyph +$
62+10:4 name empty-beneath-unknown
63+11:3 INDENT
64+11:3 glyph *
65+12:3 NEWLINE
66+12:3 glyph [
67+12:4 tight lit %tag
68+12:9 glyph [
69+12:10 tight glyph $-(
70+12:13 tight aura @t
71+12:16 aura @t
72+12:18 tight glyph )
73+12:20 glyph !!
74+12:22 tight glyph ]
75+12:23 tight glyph ]
76+13:1 DEDENT
77+13:1 NEWLINE
78+13:1 glyph +$
79+13:4 name unknown-inhabitation
80+14:3 INDENT
81+14:3 glyph *
82+15:3 NEWLINE
83+15:3 glyph [
84+15:4 tight lit %tag
85+15:9 glyph [
86+15:10 tight glyph $-(
87+15:13 tight aura @t
88+15:16 aura @t
89+15:18 tight glyph )
90+15:20 aura @t
91+15:22 tight glyph ]
92+15:23 tight glyph ]
93+16:1 DEDENT
94+16:1 NEWLINE
95+16:1 glyph +$
96+16:4 name known-inhabitation
97+17:3 INDENT
98+17:3 glyph *
99+18:3 NEWLINE
100+18:3 glyph [
101+18:4 tight lit %tag
102+18:9 glyph [
103+18:10 tight aura @t
104+18:13 aura @p
105+18:15 tight glyph ]
106+18:16 tight glyph ]
107+18:17 DEDENT
108+18:17 NEWLINE
tests/golden/types-partial-union-nested-nouns/tree.txtnew file+47
@@ -0,0 +1,47 @@
1+(module
2+ (mold 1:1 nested-zero
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %tag)
6+ (cell 2:9 (const 2:10 %$) (aura 2:13 @t)))
7+ (cell 3:3
8+ (const 3:4 %tag)
9+ (cell 3:9 (const 3:10 ~) (aura 3:12 @t)))))
10+ (mold 4:1 nested-flag-zero
11+ (union 5:3
12+ (cell 5:3
13+ (const 5:4 %tag)
14+ (cell 5:9 (const 5:10 %.y) (aura 5:14 @t)))
15+ (cell 6:3
16+ (const 6:4 %tag)
17+ (cell 6:9 (const 6:10 %$) (aura 6:13 @t)))))
18+ (mold 7:1 nested-distinct
19+ (union 8:3
20+ (cell 8:3
21+ (const 8:4 %tag)
22+ (cell 8:9 (const 8:10 %a) (aura 8:13 @t)))
23+ (cell 9:3
24+ (const 9:4 %tag)
25+ (cell 9:9 (const 9:10 %b) (aura 9:13 @t)))))
26+ (mold 10:1 empty-beneath-unknown
27+ (union 11:3
28+ (noun 11:3)
29+ (cell 12:3
30+ (const 12:4 %tag)
31+ (cell 12:9
32+ (fn 12:10 (aura 12:13 @t) (aura 12:16 @t))
33+ (void 12:20)))))
34+ (mold 13:1 unknown-inhabitation
35+ (union 14:3
36+ (noun 14:3)
37+ (cell 15:3
38+ (const 15:4 %tag)
39+ (cell 15:9
40+ (fn 15:10 (aura 15:13 @t) (aura 15:16 @t))
41+ (aura 15:20 @t)))))
42+ (mold 16:1 known-inhabitation
43+ (union 17:3
44+ (noun 17:3)
45+ (cell 18:3
46+ (const 18:4 %tag)
47+ (cell 18:9 (aura 18:10 @t) (aura 18:13 @p))))))
tests/golden/types-partial-union-nested-nouns/types.txtnew file+25
@@ -0,0 +1,25 @@
1+partial inference; module not checked
2++$ nested-zero: overlapping cases; mold not checked
3+/tests/golden/types-partial-union-nested-nouns/source.jibb:2:3: first union case
4+ [%tag [%$ @t]]
5+ ^
6+/tests/golden/types-partial-union-nested-nouns/source.jibb:3:3: overlapping case
7+ [%tag [~ @t]]
8+ ^
9++$ nested-flag-zero: overlapping cases; mold not checked
10+/tests/golden/types-partial-union-nested-nouns/source.jibb:5:3: first union case
11+ [%tag [%.y @t]]
12+ ^
13+/tests/golden/types-partial-union-nested-nouns/source.jibb:6:3: overlapping case
14+ [%tag [%$ @t]]
15+ ^
16++$ nested-distinct: cases proven disjoint; mold not checked
17++$ empty-beneath-unknown: cases proven disjoint; mold not checked
18++$ unknown-inhabitation: case disjointness unresolved; mold not checked
19++$ known-inhabitation: overlapping cases; mold not checked
20+/tests/golden/types-partial-union-nested-nouns/source.jibb:17:3: first union case
21+ *
22+ ^
23+/tests/golden/types-partial-union-nested-nouns/source.jibb:18:3: overlapping case
24+ [%tag [@t @p]]
25+ ^
tests/golden/types-prelude-arithmetic/about.txt+1−1
@@ -1,4 +1,4 @@
11source: docs/spec/grammar.md, Molds, Atoms: "Arithmetic rejects loobean operands: `?` contains only 0 and 1, while an arithmetic result need not."
2−tests: The source-backed add, dec and gth wrappers preserve numeric auras, constrained generic types, and independent comparison behavior. Loobean operands are rejected by add and dec; lent remains unavailable. Primitive lowering, jet recognition and execution remain unfinished. The module report is partial.
2+tests: The source-backed add, dec and gth wrappers preserve numeric auras, constrained generic types, and independent comparison behavior. Loobean operands are rejected by add and dec; the source-backed lent infers list lengths. Primitive lowering, jet recognition and execution remain unfinished. The module report is partial.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-prelude-arithmetic/source.jibb+1−1
@@ -15,7 +15,7 @@
1515++ add-hex (add 0x1 0x2)
1616++ reject-bool-dec (dec %.n)
1717++ dec-hex (dec 0x2)
18−++ unavailable-length (lent ~["a"])
18+++ list-length (lent ~["a"])
1919++ captured |= x=? (add x x)
2020++ captured-local |= x=?
2121 ++ local |= y=? (add x y)
tests/golden/types-prelude-arithmetic/tokens.txt+7−7
@@ -142,13 +142,13 @@
14214217:20 tight glyph )
14314318:1 NEWLINE
14414418:1 glyph ++
145−18:4 name unavailable-length
146−18:23 glyph (
147−18:24 tight name lent
148−18:29 glyph ~[
149−18:31 tight str "a"
150−18:34 tight glyph ]
151−18:35 tight glyph )
145+18:4 name list-length
146+18:16 glyph (
147+18:17 tight name lent
148+18:22 glyph ~[
149+18:24 tight str "a"
150+18:27 tight glyph ]
151+18:28 tight glyph )
15215219:1 NEWLINE
15315319:1 glyph ++
15415419:4 name captured
tests/golden/types-prelude-arithmetic/tree.txt+5−5
@@ -57,11 +57,11 @@
5757 (value 17:1 dec-hex
5858 (group 17:12
5959 (call 17:13 (wing 17:13 dec) (lit 17:17 0x2))))
60− (value 18:1 unavailable-length
61− (group 18:23
62− (call 18:24
63− (wing 18:24 lent)
64− (list 18:29 (str 18:31 "a")))))
60+ (value 18:1 list-length
61+ (group 18:16
62+ (call 18:17
63+ (wing 18:17 lent)
64+ (list 18:22 (str 18:24 "a")))))
6565 (value 19:1 captured
6666 (gate 19:13
6767 (face 19:16 x (flag 19:18))
tests/golden/types-prelude-arithmetic/types.txt+1−1
@@ -38,7 +38,7 @@ partial inference; module not checked
3838++ reject-bool-dec (dec %.n)
3939 ^
4040++ dec-hex: @ux
41−++ unavailable-length: name is not available to partial inference
41+++ list-length: @ud
4242++ captured: call's sample and argument types do not unify
4343/tests/golden/types-prelude-arithmetic/source.jibb:19:21: called gate has type $-([A A] A) where A is an atom other than ?
4444++ captured |= x=? (add x x)
tests/golden/types-prelude-cmd/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Overview, Effects: `cmd` is a generic union with `%poke`, `%go`, `%wait`, `%now` and `%who` cases; a poke carries a reply over `(unit @t)`.
2−tests: The doc-exact source-backed prelude mold and its five cases infer, retain independently instantiated message types, and work in list context. Incorrect URL, message, callback result and list item types report mismatches; an unsupported callback sample or cross-instantiation fails closed. The full module remains unchecked.
2+tests: The doc-exact source-backed prelude mold and its five cases infer, retain independently instantiated message types, and work in list context. Incorrect URL, message, callback result, list item and cross-instantiation types report mismatches; an unsupported callback sample fails closed. The full module remains unchecked.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-prelude-cmd/types.txt+7−1
@@ -47,4 +47,10 @@ partial inference; module not checked
4747++ wrong-case ^- (cmd @t) %oops
4848 ^
4949++ use-text: $-((cmd @t) (cmd @t))
50−++ cross: call constraint is not supported by partial inference
50+++ cross: call's sample and argument types do not unify
51+/tests/golden/types-prelude-cmd/source.jibb:21:21: called gate
52+++ cross (use-text (wrap ~zod))
53+ ^
54+/tests/golden/types-prelude-cmd/source.jibb:21:26: argument has type @p
55+++ cross (use-text (wrap ~zod))
56+ ^
tests/golden/types-prelude-comparison/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Molds, Atoms: "Comparison may take loobeans and returns `?`." The prelude inventory includes `lth`, `gte`, and `lte`.
2+tests: Source-backed comparisons infer for less, greater and equal ordered operands, both loobean orders, a shared generic atom type and matching hex auras. Distinct explicit auras fail closed. The report is partial; backend lowering, execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-comparison/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-comparison/source.jibbnew file+18
@@ -0,0 +1,18 @@
1+++ less (lth 1 2)
2+++ greater (lth 2 1)
3+++ equal (lth 1 1)
4+++ gte-less (gte 1 2)
5+++ gte-greater (gte 2 1)
6+++ gte-equal (gte 1 1)
7+++ lte-less (lte 1 2)
8+++ lte-greater (lte 2 1)
9+++ lte-equal (lte 1 1)
10+++ flags-forward (gte %.y %.n)
11+++ flags-reverse (lte %.n %.y)
12+++ flags-equal (lth %.y %.y)
13+++ hex (lth 0x1 0x2)
14+++ generic-lth |= [a=A b=A] (lth a b)
15+++ generic-gte |= [a=A b=A] (gte a b)
16+++ generic-lte |= [a=A b=A] (lte a b)
17+++ bad-aura (lth 0x1 (^- @ud 1))
18+++ bad-kind (gte ~zod "text")
tests/golden/types-prelude-comparison/tokens.txtnew file+175
@@ -0,0 +1,175 @@
1+1:1 glyph ++
2+1:4 name less
3+1:9 glyph (
4+1:10 tight name lth
5+1:14 lit 1
6+1:16 lit 2
7+1:17 tight glyph )
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name greater
11+2:12 glyph (
12+2:13 tight name lth
13+2:17 lit 2
14+2:19 lit 1
15+2:20 tight glyph )
16+3:1 NEWLINE
17+3:1 glyph ++
18+3:4 name equal
19+3:10 glyph (
20+3:11 tight name lth
21+3:15 lit 1
22+3:17 lit 1
23+3:18 tight glyph )
24+4:1 NEWLINE
25+4:1 glyph ++
26+4:4 name gte-less
27+4:13 glyph (
28+4:14 tight name gte
29+4:18 lit 1
30+4:20 lit 2
31+4:21 tight glyph )
32+5:1 NEWLINE
33+5:1 glyph ++
34+5:4 name gte-greater
35+5:16 glyph (
36+5:17 tight name gte
37+5:21 lit 2
38+5:23 lit 1
39+5:24 tight glyph )
40+6:1 NEWLINE
41+6:1 glyph ++
42+6:4 name gte-equal
43+6:14 glyph (
44+6:15 tight name gte
45+6:19 lit 1
46+6:21 lit 1
47+6:22 tight glyph )
48+7:1 NEWLINE
49+7:1 glyph ++
50+7:4 name lte-less
51+7:13 glyph (
52+7:14 tight name lte
53+7:18 lit 1
54+7:20 lit 2
55+7:21 tight glyph )
56+8:1 NEWLINE
57+8:1 glyph ++
58+8:4 name lte-greater
59+8:16 glyph (
60+8:17 tight name lte
61+8:21 lit 2
62+8:23 lit 1
63+8:24 tight glyph )
64+9:1 NEWLINE
65+9:1 glyph ++
66+9:4 name lte-equal
67+9:14 glyph (
68+9:15 tight name lte
69+9:19 lit 1
70+9:21 lit 1
71+9:22 tight glyph )
72+10:1 NEWLINE
73+10:1 glyph ++
74+10:4 name flags-forward
75+10:18 glyph (
76+10:19 tight name gte
77+10:23 lit %.y
78+10:27 lit %.n
79+10:30 tight glyph )
80+11:1 NEWLINE
81+11:1 glyph ++
82+11:4 name flags-reverse
83+11:18 glyph (
84+11:19 tight name lte
85+11:23 lit %.n
86+11:27 lit %.y
87+11:30 tight glyph )
88+12:1 NEWLINE
89+12:1 glyph ++
90+12:4 name flags-equal
91+12:16 glyph (
92+12:17 tight name lth
93+12:21 lit %.y
94+12:25 lit %.y
95+12:28 tight glyph )
96+13:1 NEWLINE
97+13:1 glyph ++
98+13:4 name hex
99+13:8 glyph (
100+13:9 tight name lth
101+13:13 lit 0x1
102+13:17 lit 0x2
103+13:20 tight glyph )
104+14:1 NEWLINE
105+14:1 glyph ++
106+14:4 name generic-lth
107+14:16 glyph |=
108+14:19 glyph [
109+14:20 tight name a
110+14:21 tight glyph =
111+14:22 tight tvar A
112+14:24 name b
113+14:25 tight glyph =
114+14:26 tight tvar A
115+14:27 tight glyph ]
116+14:29 glyph (
117+14:30 tight name lth
118+14:34 name a
119+14:36 name b
120+14:37 tight glyph )
121+15:1 NEWLINE
122+15:1 glyph ++
123+15:4 name generic-gte
124+15:16 glyph |=
125+15:19 glyph [
126+15:20 tight name a
127+15:21 tight glyph =
128+15:22 tight tvar A
129+15:24 name b
130+15:25 tight glyph =
131+15:26 tight tvar A
132+15:27 tight glyph ]
133+15:29 glyph (
134+15:30 tight name gte
135+15:34 name a
136+15:36 name b
137+15:37 tight glyph )
138+16:1 NEWLINE
139+16:1 glyph ++
140+16:4 name generic-lte
141+16:16 glyph |=
142+16:19 glyph [
143+16:20 tight name a
144+16:21 tight glyph =
145+16:22 tight tvar A
146+16:24 name b
147+16:25 tight glyph =
148+16:26 tight tvar A
149+16:27 tight glyph ]
150+16:29 glyph (
151+16:30 tight name lte
152+16:34 name a
153+16:36 name b
154+16:37 tight glyph )
155+17:1 NEWLINE
156+17:1 glyph ++
157+17:4 name bad-aura
158+17:13 glyph (
159+17:14 tight name lth
160+17:18 lit 0x1
161+17:22 glyph (
162+17:23 tight glyph ^-
163+17:26 aura @ud
164+17:30 lit 1
165+17:31 tight glyph )
166+17:32 tight glyph )
167+18:1 NEWLINE
168+18:1 glyph ++
169+18:4 name bad-kind
170+18:13 glyph (
171+18:14 tight name gte
172+18:18 lit ~zod
173+18:23 str "text"
174+18:29 tight glyph )
175+18:30 NEWLINE
tests/golden/types-prelude-comparison/tree.txtnew file+71
@@ -0,0 +1,71 @@
1+(module
2+ (value 1:1 less
3+ (group 1:9
4+ (call 1:10 (wing 1:10 lth) (lit 1:14 1) (lit 1:16 2))))
5+ (value 2:1 greater
6+ (group 2:12
7+ (call 2:13 (wing 2:13 lth) (lit 2:17 2) (lit 2:19 1))))
8+ (value 3:1 equal
9+ (group 3:10
10+ (call 3:11 (wing 3:11 lth) (lit 3:15 1) (lit 3:17 1))))
11+ (value 4:1 gte-less
12+ (group 4:13
13+ (call 4:14 (wing 4:14 gte) (lit 4:18 1) (lit 4:20 2))))
14+ (value 5:1 gte-greater
15+ (group 5:16
16+ (call 5:17 (wing 5:17 gte) (lit 5:21 2) (lit 5:23 1))))
17+ (value 6:1 gte-equal
18+ (group 6:14
19+ (call 6:15 (wing 6:15 gte) (lit 6:19 1) (lit 6:21 1))))
20+ (value 7:1 lte-less
21+ (group 7:13
22+ (call 7:14 (wing 7:14 lte) (lit 7:18 1) (lit 7:20 2))))
23+ (value 8:1 lte-greater
24+ (group 8:16
25+ (call 8:17 (wing 8:17 lte) (lit 8:21 2) (lit 8:23 1))))
26+ (value 9:1 lte-equal
27+ (group 9:14
28+ (call 9:15 (wing 9:15 lte) (lit 9:19 1) (lit 9:21 1))))
29+ (value 10:1 flags-forward
30+ (group 10:18
31+ (call 10:19 (wing 10:19 gte) (lit 10:23 %.y) (lit 10:27 %.n))))
32+ (value 11:1 flags-reverse
33+ (group 11:18
34+ (call 11:19 (wing 11:19 lte) (lit 11:23 %.n) (lit 11:27 %.y))))
35+ (value 12:1 flags-equal
36+ (group 12:16
37+ (call 12:17 (wing 12:17 lth) (lit 12:21 %.y) (lit 12:25 %.y))))
38+ (value 13:1 hex
39+ (group 13:8
40+ (call 13:9 (wing 13:9 lth) (lit 13:13 0x1) (lit 13:17 0x2))))
41+ (value 14:1 generic-lth
42+ (gate 14:16
43+ (cell 14:19
44+ (face 14:20 a (tvar 14:22 A))
45+ (face 14:24 b (tvar 14:26 A)))
46+ (group 14:29
47+ (call 14:30 (wing 14:30 lth) (wing 14:34 a) (wing 14:36 b)))))
48+ (value 15:1 generic-gte
49+ (gate 15:16
50+ (cell 15:19
51+ (face 15:20 a (tvar 15:22 A))
52+ (face 15:24 b (tvar 15:26 A)))
53+ (group 15:29
54+ (call 15:30 (wing 15:30 gte) (wing 15:34 a) (wing 15:36 b)))))
55+ (value 16:1 generic-lte
56+ (gate 16:16
57+ (cell 16:19
58+ (face 16:20 a (tvar 16:22 A))
59+ (face 16:24 b (tvar 16:26 A)))
60+ (group 16:29
61+ (call 16:30 (wing 16:30 lte) (wing 16:34 a) (wing 16:36 b)))))
62+ (value 17:1 bad-aura
63+ (group 17:13
64+ (call 17:14
65+ (wing 17:14 lth)
66+ (lit 17:18 0x1)
67+ (group 17:22
68+ (cast 17:23 (aura 17:26 @ud) (lit 17:30 1))))))
69+ (value 18:1 bad-kind
70+ (group 18:13
71+ (call 18:14 (wing 18:14 gte) (lit 18:18 ~zod) (str 18:23 "text")))))
tests/golden/types-prelude-comparison/types.txtnew file+31
@@ -0,0 +1,31 @@
1+partial inference; module not checked
2+++ less: ?
3+++ greater: ?
4+++ equal: ?
5+++ gte-less: ?
6+++ gte-greater: ?
7+++ gte-equal: ?
8+++ lte-less: ?
9+++ lte-greater: ?
10+++ lte-equal: ?
11+++ flags-forward: ?
12+++ flags-reverse: ?
13+++ flags-equal: ?
14+++ hex: ?
15+++ generic-lth: $-([a=A b=A] ?) where A is an atom
16+++ generic-gte: $-([a=A b=A] ?) where A is an atom
17+++ generic-lte: $-([a=A b=A] ?) where A is an atom
18+++ bad-aura: call's sample and argument types do not unify
19+/tests/golden/types-prelude-comparison/source.jibb:17:14: called gate has type $-([A A] ?) where A is an atom
20+++ bad-aura (lth 0x1 (^- @ud 1))
21+ ^
22+/tests/golden/types-prelude-comparison/source.jibb:17:18: argument has type [@ux @ud]
23+++ bad-aura (lth 0x1 (^- @ud 1))
24+ ^
25+++ bad-kind: call's sample and argument types do not unify
26+/tests/golden/types-prelude-comparison/source.jibb:18:14: called gate has type $-([A A] ?) where A is an atom
27+++ bad-kind (gte ~zod "text")
28+ ^
29+/tests/golden/types-prelude-comparison/source.jibb:18:18: argument has type [@p @t]
30+++ bad-kind (gte ~zod "text")
31+ ^
tests/golden/types-prelude-lent/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, The prelude: "Lists | 2b | turn, weld, snag, lent, sort, skim"
2+tests: Source-backed lent checks empty and cons lists, values of different element types including gates, and an independently generic list argument; a non-list fails with both sites. The source implements length by recursion and addition. This checks partial inference only; lowering, execution and jet recognition remain unfinished.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-lent/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-lent/source.jibbnew file+8
@@ -0,0 +1,8 @@
1+++ empty (lent ~)
2+++ singleton (lent ~["a"])
3+++ cons (lent ["a" ~])
4+++ numbers (lent ~[1 2])
5+++ ships (lent ~[~zod ~nec])
6+++ gate-list (lent ~[same])
7+++ generic |= xs=(list A) (lent xs)
8+++ bad (lent "not a list")
tests/golden/types-prelude-lent/tokens.txtnew file+76
@@ -0,0 +1,76 @@
1+1:1 glyph ++
2+1:4 name empty
3+1:10 glyph (
4+1:11 tight name lent
5+1:16 lit ~
6+1:17 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name singleton
10+2:14 glyph (
11+2:15 tight name lent
12+2:20 glyph ~[
13+2:22 tight str "a"
14+2:25 tight glyph ]
15+2:26 tight glyph )
16+3:1 NEWLINE
17+3:1 glyph ++
18+3:4 name cons
19+3:9 glyph (
20+3:10 tight name lent
21+3:15 glyph [
22+3:16 tight str "a"
23+3:20 lit ~
24+3:21 tight glyph ]
25+3:22 tight glyph )
26+4:1 NEWLINE
27+4:1 glyph ++
28+4:4 name numbers
29+4:12 glyph (
30+4:13 tight name lent
31+4:18 glyph ~[
32+4:20 tight lit 1
33+4:22 lit 2
34+4:23 tight glyph ]
35+4:24 tight glyph )
36+5:1 NEWLINE
37+5:1 glyph ++
38+5:4 name ships
39+5:10 glyph (
40+5:11 tight name lent
41+5:16 glyph ~[
42+5:18 tight lit ~zod
43+5:23 lit ~nec
44+5:27 tight glyph ]
45+5:28 tight glyph )
46+6:1 NEWLINE
47+6:1 glyph ++
48+6:4 name gate-list
49+6:14 glyph (
50+6:15 tight name lent
51+6:20 glyph ~[
52+6:22 tight name same
53+6:26 tight glyph ]
54+6:27 tight glyph )
55+7:1 NEWLINE
56+7:1 glyph ++
57+7:4 name generic
58+7:12 glyph |=
59+7:15 name xs
60+7:17 tight glyph =
61+7:18 tight glyph (
62+7:19 tight name list
63+7:24 tvar A
64+7:25 tight glyph )
65+7:27 glyph (
66+7:28 tight name lent
67+7:33 name xs
68+7:35 tight glyph )
69+8:1 NEWLINE
70+8:1 glyph ++
71+8:4 name bad
72+8:8 glyph (
73+8:9 tight name lent
74+8:14 str "not a list"
75+8:26 tight glyph )
76+8:27 NEWLINE
tests/golden/types-prelude-lent/tree.txtnew file+38
@@ -0,0 +1,38 @@
1+(module
2+ (value 1:1 empty
3+ (group 1:10
4+ (call 1:11 (wing 1:11 lent) (lit 1:16 ~))))
5+ (value 2:1 singleton
6+ (group 2:14
7+ (call 2:15
8+ (wing 2:15 lent)
9+ (list 2:20 (str 2:22 "a")))))
10+ (value 3:1 cons
11+ (group 3:9
12+ (call 3:10
13+ (wing 3:10 lent)
14+ (tuple 3:15 (str 3:16 "a") (lit 3:20 ~)))))
15+ (value 4:1 numbers
16+ (group 4:12
17+ (call 4:13
18+ (wing 4:13 lent)
19+ (list 4:18 (lit 4:20 1) (lit 4:22 2)))))
20+ (value 5:1 ships
21+ (group 5:10
22+ (call 5:11
23+ (wing 5:11 lent)
24+ (list 5:16 (lit 5:18 ~zod) (lit 5:23 ~nec)))))
25+ (value 6:1 gate-list
26+ (group 6:14
27+ (call 6:15
28+ (wing 6:15 lent)
29+ (list 6:20 (wing 6:22 same)))))
30+ (value 7:1 generic
31+ (gate 7:12
32+ (face 7:15 xs
33+ (apply 7:18 list (tvar 7:24 A)))
34+ (group 7:27
35+ (call 7:28 (wing 7:28 lent) (wing 7:33 xs)))))
36+ (value 8:1 bad
37+ (group 8:8
38+ (call 8:9 (wing 8:9 lent) (str 8:14 "not a list")))))
tests/golden/types-prelude-lent/types.txtnew file+15
@@ -0,0 +1,15 @@
1+partial inference; module not checked
2+++ empty: @ud
3+++ singleton: @ud
4+++ cons: @ud
5+++ numbers: @ud
6+++ ships: @ud
7+++ gate-list: @ud
8+++ generic: $-((list A) @ud)
9+++ bad: call's sample and argument types do not unify
10+/tests/golden/types-prelude-lent/source.jibb:8:9: called gate has type $-((list A) @ud)
11+++ bad (lent "not a list")
12+ ^
13+/tests/golden/types-prelude-lent/source.jibb:8:14: argument has type @t
14+++ bad (lent "not a list")
15+ ^
tests/golden/types-prelude-sub-nested/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Effects: `+$ sub |$ [M]` includes `[%watch a=(ask M)]`; "A request such as `(todos.todo |=%got)` comes from a declared path or a store's `state`."
2+tests: Source-backed `(sub msg)` context reaches nested `pure`, including independent and generic uses, missing tags, mismatched payloads, distinct origins and pending constraints. This is a partial inference report and does not prove a value is watchable or executable.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-sub-nested/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-prelude-sub-nested/source.jibbnew file+20
@@ -0,0 +1,20 @@
1++$ msg
2+ %idle
3+ %busy
4++$ other
5+ %idle
6+ %busy
7+++ direct ^- (ask msg) (pure %idle)
8+++ watch ^- (sub msg) [%watch (pure %idle)]
9+++ watch-typed ^- (sub msg) [%watch (pure (^- msg %idle))]
10+++ watch-cord ^- (sub @t) [%watch (pure "hi")]
11+++ watch-ship ^- (sub @p) [%watch (pure ~zod)]
12+++ wrong ^- (sub @t) [%watch (pure ~zod)]
13+++ missing ^- (sub msg) [%watch (pure %missing)]
14+++ alien |= x=other ^- (sub msg) [%watch (pure x)]
15+++ generic |= x=A ^- (sub A) [%watch (pure x)]
16+++ pending
17+ ~& %orphan
18+ ^- (sub msg) [%watch (pure %idle)]
19+++ unknown |= x=A [%watch (pure x)]
20+++ unknown-target |= x=A ^- A [%watch (pure %idle)]
tests/golden/types-prelude-sub-nested/tokens.txtnew file+211
@@ -0,0 +1,211 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %idle
5+3:3 NEWLINE
6+3:3 lit %busy
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph +$
10+4:4 name other
11+5:3 INDENT
12+5:3 lit %idle
13+6:3 NEWLINE
14+6:3 lit %busy
15+7:1 DEDENT
16+7:1 NEWLINE
17+7:1 glyph ++
18+7:4 name direct
19+7:11 glyph ^-
20+7:14 glyph (
21+7:15 tight name ask
22+7:19 name msg
23+7:22 tight glyph )
24+7:24 glyph (
25+7:25 tight name pure
26+7:30 lit %idle
27+7:35 tight glyph )
28+8:1 NEWLINE
29+8:1 glyph ++
30+8:4 name watch
31+8:10 glyph ^-
32+8:13 glyph (
33+8:14 tight name sub
34+8:18 name msg
35+8:21 tight glyph )
36+8:23 glyph [
37+8:24 tight lit %watch
38+8:31 glyph (
39+8:32 tight name pure
40+8:37 lit %idle
41+8:42 tight glyph )
42+8:43 tight glyph ]
43+9:1 NEWLINE
44+9:1 glyph ++
45+9:4 name watch-typed
46+9:16 glyph ^-
47+9:19 glyph (
48+9:20 tight name sub
49+9:24 name msg
50+9:27 tight glyph )
51+9:29 glyph [
52+9:30 tight lit %watch
53+9:37 glyph (
54+9:38 tight name pure
55+9:43 glyph (
56+9:44 tight glyph ^-
57+9:47 name msg
58+9:51 lit %idle
59+9:56 tight glyph )
60+9:57 tight glyph )
61+9:58 tight glyph ]
62+10:1 NEWLINE
63+10:1 glyph ++
64+10:4 name watch-cord
65+10:15 glyph ^-
66+10:18 glyph (
67+10:19 tight name sub
68+10:23 aura @t
69+10:25 tight glyph )
70+10:27 glyph [
71+10:28 tight lit %watch
72+10:35 glyph (
73+10:36 tight name pure
74+10:41 str "hi"
75+10:45 tight glyph )
76+10:46 tight glyph ]
77+11:1 NEWLINE
78+11:1 glyph ++
79+11:4 name watch-ship
80+11:15 glyph ^-
81+11:18 glyph (
82+11:19 tight name sub
83+11:23 aura @p
84+11:25 tight glyph )
85+11:27 glyph [
86+11:28 tight lit %watch
87+11:35 glyph (
88+11:36 tight name pure
89+11:41 lit ~zod
90+11:45 tight glyph )
91+11:46 tight glyph ]
92+12:1 NEWLINE
93+12:1 glyph ++
94+12:4 name wrong
95+12:10 glyph ^-
96+12:13 glyph (
97+12:14 tight name sub
98+12:18 aura @t
99+12:20 tight glyph )
100+12:22 glyph [
101+12:23 tight lit %watch
102+12:30 glyph (
103+12:31 tight name pure
104+12:36 lit ~zod
105+12:40 tight glyph )
106+12:41 tight glyph ]
107+13:1 NEWLINE
108+13:1 glyph ++
109+13:4 name missing
110+13:12 glyph ^-
111+13:15 glyph (
112+13:16 tight name sub
113+13:20 name msg
114+13:23 tight glyph )
115+13:25 glyph [
116+13:26 tight lit %watch
117+13:33 glyph (
118+13:34 tight name pure
119+13:39 lit %missing
120+13:47 tight glyph )
121+13:48 tight glyph ]
122+14:1 NEWLINE
123+14:1 glyph ++
124+14:4 name alien
125+14:10 glyph |=
126+14:13 name x
127+14:14 tight glyph =
128+14:15 tight name other
129+14:21 glyph ^-
130+14:24 glyph (
131+14:25 tight name sub
132+14:29 name msg
133+14:32 tight glyph )
134+14:34 glyph [
135+14:35 tight lit %watch
136+14:42 glyph (
137+14:43 tight name pure
138+14:48 name x
139+14:49 tight glyph )
140+14:50 tight glyph ]
141+15:1 NEWLINE
142+15:1 glyph ++
143+15:4 name generic
144+15:12 glyph |=
145+15:15 name x
146+15:16 tight glyph =
147+15:17 tight tvar A
148+15:19 glyph ^-
149+15:22 glyph (
150+15:23 tight name sub
151+15:27 tvar A
152+15:28 tight glyph )
153+15:30 glyph [
154+15:31 tight lit %watch
155+15:38 glyph (
156+15:39 tight name pure
157+15:44 name x
158+15:45 tight glyph )
159+15:46 tight glyph ]
160+16:1 NEWLINE
161+16:1 glyph ++
162+16:4 name pending
163+17:3 INDENT
164+17:3 glyph ~&
165+17:6 lit %orphan
166+18:5 INDENT
167+18:5 glyph ^-
168+18:8 glyph (
169+18:9 tight name sub
170+18:13 name msg
171+18:16 tight glyph )
172+18:18 glyph [
173+18:19 tight lit %watch
174+18:26 glyph (
175+18:27 tight name pure
176+18:32 lit %idle
177+18:37 tight glyph )
178+18:38 tight glyph ]
179+19:1 DEDENT
180+19:1 DEDENT
181+19:1 NEWLINE
182+19:1 glyph ++
183+19:4 name unknown
184+19:12 glyph |=
185+19:15 name x
186+19:16 tight glyph =
187+19:17 tight tvar A
188+19:19 glyph [
189+19:20 tight lit %watch
190+19:27 glyph (
191+19:28 tight name pure
192+19:33 name x
193+19:34 tight glyph )
194+19:35 tight glyph ]
195+20:1 NEWLINE
196+20:1 glyph ++
197+20:4 name unknown-target
198+20:19 glyph |=
199+20:22 name x
200+20:23 tight glyph =
201+20:24 tight tvar A
202+20:26 glyph ^-
203+20:29 tvar A
204+20:31 glyph [
205+20:32 tight lit %watch
206+20:39 glyph (
207+20:40 tight name pure
208+20:45 lit %idle
209+20:50 tight glyph )
210+20:51 tight glyph ]
211+20:52 NEWLINE
tests/golden/types-prelude-sub-nested/tree.txtnew file+100
@@ -0,0 +1,100 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3 (const 2:3 %idle) (const 3:3 %busy)))
4+ (mold 4:1 other
5+ (union 5:3 (const 5:3 %idle) (const 6:3 %busy)))
6+ (value 7:1 direct
7+ (cast 7:11
8+ (apply 7:14 ask (ref 7:19 msg))
9+ (group 7:24
10+ (call 7:25 (wing 7:25 pure) (lit 7:30 %idle)))))
11+ (value 8:1 watch
12+ (cast 8:10
13+ (apply 8:13 sub (ref 8:18 msg))
14+ (tuple 8:23
15+ (lit 8:24 %watch)
16+ (group 8:31
17+ (call 8:32 (wing 8:32 pure) (lit 8:37 %idle))))))
18+ (value 9:1 watch-typed
19+ (cast 9:16
20+ (apply 9:19 sub (ref 9:24 msg))
21+ (tuple 9:29
22+ (lit 9:30 %watch)
23+ (group 9:37
24+ (call 9:38
25+ (wing 9:38 pure)
26+ (group 9:43
27+ (cast 9:44 (ref 9:47 msg) (lit 9:51 %idle))))))))
28+ (value 10:1 watch-cord
29+ (cast 10:15
30+ (apply 10:18 sub (aura 10:23 @t))
31+ (tuple 10:27
32+ (lit 10:28 %watch)
33+ (group 10:35
34+ (call 10:36 (wing 10:36 pure) (str 10:41 "hi"))))))
35+ (value 11:1 watch-ship
36+ (cast 11:15
37+ (apply 11:18 sub (aura 11:23 @p))
38+ (tuple 11:27
39+ (lit 11:28 %watch)
40+ (group 11:35
41+ (call 11:36 (wing 11:36 pure) (lit 11:41 ~zod))))))
42+ (value 12:1 wrong
43+ (cast 12:10
44+ (apply 12:13 sub (aura 12:18 @t))
45+ (tuple 12:22
46+ (lit 12:23 %watch)
47+ (group 12:30
48+ (call 12:31 (wing 12:31 pure) (lit 12:36 ~zod))))))
49+ (value 13:1 missing
50+ (cast 13:12
51+ (apply 13:15 sub (ref 13:20 msg))
52+ (tuple 13:25
53+ (lit 13:26 %watch)
54+ (group 13:33
55+ (call 13:34 (wing 13:34 pure) (lit 13:39 %missing))))))
56+ (value 14:1 alien
57+ (gate 14:10
58+ (face 14:13 x (ref 14:15 other))
59+ (cast 14:21
60+ (apply 14:24 sub (ref 14:29 msg))
61+ (tuple 14:34
62+ (lit 14:35 %watch)
63+ (group 14:42
64+ (call 14:43 (wing 14:43 pure) (wing 14:48 x)))))))
65+ (value 15:1 generic
66+ (gate 15:12
67+ (face 15:15 x (tvar 15:17 A))
68+ (cast 15:19
69+ (apply 15:22 sub (tvar 15:27 A))
70+ (tuple 15:30
71+ (lit 15:31 %watch)
72+ (group 15:38
73+ (call 15:39 (wing 15:39 pure) (wing 15:44 x)))))))
74+ (value 16:1 pending
75+ (body 17:3
76+ (trace 17:3
77+ (lit 17:6 %orphan)
78+ (body 18:5
79+ (cast 18:5
80+ (apply 18:8 sub (ref 18:13 msg))
81+ (tuple 18:18
82+ (lit 18:19 %watch)
83+ (group 18:26
84+ (call 18:27 (wing 18:27 pure) (lit 18:32 %idle)))))))))
85+ (value 19:1 unknown
86+ (gate 19:12
87+ (face 19:15 x (tvar 19:17 A))
88+ (tuple 19:19
89+ (lit 19:20 %watch)
90+ (group 19:27
91+ (call 19:28 (wing 19:28 pure) (wing 19:33 x))))))
92+ (value 20:1 unknown-target
93+ (gate 20:19
94+ (face 20:22 x (tvar 20:24 A))
95+ (cast 20:26
96+ (tvar 20:29 A)
97+ (tuple 20:31
98+ (lit 20:32 %watch)
99+ (group 20:39
100+ (call 20:40 (wing 20:40 pure) (lit 20:45 %idle))))))))
tests/golden/types-prelude-sub-nested/types.txtnew file+27
@@ -0,0 +1,27 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ other: cases proven disjoint; mold not checked
4+++ direct: (ask msg)
5+++ watch: (sub msg)
6+++ watch-typed: (sub msg)
7+++ watch-cord: (sub @t)
8+++ watch-ship: (sub @p)
9+++ wrong: call's sample and argument types do not unify
10+/tests/golden/types-prelude-sub-nested/source.jibb:12:31: called gate
11+++ wrong ^- (sub @t) [%watch (pure ~zod)]
12+ ^
13+/tests/golden/types-prelude-sub-nested/source.jibb:12:36: argument has type @p
14+++ wrong ^- (sub @t) [%watch (pure ~zod)]
15+ ^
16+++ missing: msg has no case `%missing`
17+/tests/golden/types-prelude-sub-nested/source.jibb:13:34: expected union
18+++ missing ^- (sub msg) [%watch (pure %missing)]
19+ ^
20+/tests/golden/types-prelude-sub-nested/source.jibb:13:39: tag
21+++ missing ^- (sub msg) [%watch (pure %missing)]
22+ ^
23+++ alien: call constraint is not supported by partial inference
24+++ generic: $-(A (sub A))
25+++ pending: tag needs context in partial inference
26+++ unknown: tag needs context in partial inference
27+++ unknown-target: explicit capital constraints are not supported by partial inference
tests/golden/types-prelude-sub/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Effects, the exact source-backed generic sub declaration.
2+tests: Watch, timer and URL construction and matching; public ask identity on a watch binder; independent message types, incorrect callbacks and pending constraints. This partial inference report is not island watchability proof or a runtime claim.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-sub/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-prelude-sub/source.jibbnew file+37
@@ -0,0 +1,37 @@
1++$ msg
2+ [%got value=@t]
3+ %done
4+++ watch-value |= a=(ask msg) ^- (sub msg) [%watch a]
5+++ watch-cord |= a=(ask @t) ^- (sub @t) [%watch a]
6+++ wrong-watch |= a=(ask @p) ^- (sub @t) [%watch a]
7+++ periodic ^- (sub @t) [%every gap=~s1 reply=|=(date=@da "tick")]
8+++ route ^- (sub @t) [%url reply=|=(p=path "path")]
9+++ wrong-reply ^- (sub @t) [%every gap=~s1 reply=|=(date=@p "bad")]
10+++ incomplete |= s=(sub msg)
11+ ?- s
12+ [%watch ask] %done
13+ [%every gap reply] %done
14+++ complete |= s=(sub msg)
15+ ?- s
16+ [%watch ask] %done
17+ [%every gap reply] %done
18+ [%url reply] %done
19+
20++$ my-msg
21+ [%got value=@t]
22+ %idle
23+++ take-watch |= s=(sub my-msg)
24+ ^- (ask my-msg)
25+ ?- s
26+ [%watch a] a
27+ [%every gap reply] !!
28+ [%url reply] !!
29+++ watch-pure ^- (sub my-msg) [%watch (pure %idle)]
30+++ watch-generic |= a=(ask A) ^- (sub A) [%watch a]
31+++ independent-text |= a=(ask @t) ^- (sub @t) [%watch a]
32+++ independent-ship |= a=(ask @p) ^- (sub @p) [%watch a]
33+++ wrong-watch-generic |= a=(ask @p) ^- (sub @t) [%watch a]
34+
35+++ pure-direct ^- (ask my-msg) (pure %idle)
36+++ pure-typed ^- (ask my-msg) (pure (^- my-msg %idle))
37+++ pure-wrong ^- (ask my-msg) (pure %absent)
tests/golden/types-prelude-sub/tokens.txtnew file+380
@@ -0,0 +1,380 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %got
6+2:9 name value
7+2:14 tight glyph =
8+2:15 tight aura @t
9+2:17 tight glyph ]
10+3:3 NEWLINE
11+3:3 lit %done
12+4:1 DEDENT
13+4:1 NEWLINE
14+4:1 glyph ++
15+4:4 name watch-value
16+4:16 glyph |=
17+4:19 name a
18+4:20 tight glyph =
19+4:21 tight glyph (
20+4:22 tight name ask
21+4:26 name msg
22+4:29 tight glyph )
23+4:31 glyph ^-
24+4:34 glyph (
25+4:35 tight name sub
26+4:39 name msg
27+4:42 tight glyph )
28+4:44 glyph [
29+4:45 tight lit %watch
30+4:52 name a
31+4:53 tight glyph ]
32+5:1 NEWLINE
33+5:1 glyph ++
34+5:4 name watch-cord
35+5:15 glyph |=
36+5:18 name a
37+5:19 tight glyph =
38+5:20 tight glyph (
39+5:21 tight name ask
40+5:25 aura @t
41+5:27 tight glyph )
42+5:29 glyph ^-
43+5:32 glyph (
44+5:33 tight name sub
45+5:37 aura @t
46+5:39 tight glyph )
47+5:41 glyph [
48+5:42 tight lit %watch
49+5:49 name a
50+5:50 tight glyph ]
51+6:1 NEWLINE
52+6:1 glyph ++
53+6:4 name wrong-watch
54+6:16 glyph |=
55+6:19 name a
56+6:20 tight glyph =
57+6:21 tight glyph (
58+6:22 tight name ask
59+6:26 aura @p
60+6:28 tight glyph )
61+6:30 glyph ^-
62+6:33 glyph (
63+6:34 tight name sub
64+6:38 aura @t
65+6:40 tight glyph )
66+6:42 glyph [
67+6:43 tight lit %watch
68+6:50 name a
69+6:51 tight glyph ]
70+7:1 NEWLINE
71+7:1 glyph ++
72+7:4 name periodic
73+7:13 glyph ^-
74+7:16 glyph (
75+7:17 tight name sub
76+7:21 aura @t
77+7:23 tight glyph )
78+7:25 glyph [
79+7:26 tight lit %every
80+7:33 name gap
81+7:36 tight glyph =
82+7:37 tight lit ~s1
83+7:41 name reply
84+7:46 tight glyph =
85+7:47 tight glyph |=(
86+7:50 tight name date
87+7:54 tight glyph =
88+7:55 tight aura @da
89+7:59 str "tick"
90+7:65 tight glyph )
91+7:66 tight glyph ]
92+8:1 NEWLINE
93+8:1 glyph ++
94+8:4 name route
95+8:10 glyph ^-
96+8:13 glyph (
97+8:14 tight name sub
98+8:18 aura @t
99+8:20 tight glyph )
100+8:22 glyph [
101+8:23 tight lit %url
102+8:28 name reply
103+8:33 tight glyph =
104+8:34 tight glyph |=(
105+8:37 tight name p
106+8:38 tight glyph =
107+8:39 tight name path
108+8:44 str "path"
109+8:50 tight glyph )
110+8:51 tight glyph ]
111+9:1 NEWLINE
112+9:1 glyph ++
113+9:4 name wrong-reply
114+9:16 glyph ^-
115+9:19 glyph (
116+9:20 tight name sub
117+9:24 aura @t
118+9:26 tight glyph )
119+9:28 glyph [
120+9:29 tight lit %every
121+9:36 name gap
122+9:39 tight glyph =
123+9:40 tight lit ~s1
124+9:44 name reply
125+9:49 tight glyph =
126+9:50 tight glyph |=(
127+9:53 tight name date
128+9:57 tight glyph =
129+9:58 tight aura @p
130+9:61 str "bad"
131+9:66 tight glyph )
132+9:67 tight glyph ]
133+10:1 NEWLINE
134+10:1 glyph ++
135+10:4 name incomplete
136+10:15 glyph |=
137+10:18 name s
138+10:19 tight glyph =
139+10:20 tight glyph (
140+10:21 tight name sub
141+10:25 name msg
142+10:28 tight glyph )
143+11:3 INDENT
144+11:3 glyph ?-
145+11:6 name s
146+12:5 INDENT
147+12:5 glyph [
148+12:6 tight lit %watch
149+12:13 name ask
150+12:16 tight glyph ]
151+12:18 lit %done
152+13:5 NEWLINE
153+13:5 glyph [
154+13:6 tight lit %every
155+13:13 name gap
156+13:17 name reply
157+13:22 tight glyph ]
158+13:24 lit %done
159+14:1 DEDENT
160+14:1 DEDENT
161+14:1 NEWLINE
162+14:1 glyph ++
163+14:4 name complete
164+14:13 glyph |=
165+14:16 name s
166+14:17 tight glyph =
167+14:18 tight glyph (
168+14:19 tight name sub
169+14:23 name msg
170+14:26 tight glyph )
171+15:3 INDENT
172+15:3 glyph ?-
173+15:6 name s
174+16:5 INDENT
175+16:5 glyph [
176+16:6 tight lit %watch
177+16:13 name ask
178+16:16 tight glyph ]
179+16:18 lit %done
180+17:5 NEWLINE
181+17:5 glyph [
182+17:6 tight lit %every
183+17:13 name gap
184+17:17 name reply
185+17:22 tight glyph ]
186+17:24 lit %done
187+18:5 NEWLINE
188+18:5 glyph [
189+18:6 tight lit %url
190+18:11 name reply
191+18:16 tight glyph ]
192+18:18 lit %done
193+20:1 DEDENT
194+20:1 DEDENT
195+20:1 NEWLINE
196+20:1 glyph +$
197+20:4 name my-msg
198+21:3 INDENT
199+21:3 glyph [
200+21:4 tight lit %got
201+21:9 name value
202+21:14 tight glyph =
203+21:15 tight aura @t
204+21:17 tight glyph ]
205+22:3 NEWLINE
206+22:3 lit %idle
207+23:1 DEDENT
208+23:1 NEWLINE
209+23:1 glyph ++
210+23:4 name take-watch
211+23:15 glyph |=
212+23:18 name s
213+23:19 tight glyph =
214+23:20 tight glyph (
215+23:21 tight name sub
216+23:25 name my-msg
217+23:31 tight glyph )
218+24:3 INDENT
219+24:3 glyph ^-
220+24:6 glyph (
221+24:7 tight name ask
222+24:11 name my-msg
223+24:17 tight glyph )
224+25:5 INDENT
225+25:5 glyph ?-
226+25:8 name s
227+26:7 INDENT
228+26:7 glyph [
229+26:8 tight lit %watch
230+26:15 name a
231+26:16 tight glyph ]
232+26:18 name a
233+27:7 NEWLINE
234+27:7 glyph [
235+27:8 tight lit %every
236+27:15 name gap
237+27:19 name reply
238+27:24 tight glyph ]
239+27:26 glyph !!
240+28:7 NEWLINE
241+28:7 glyph [
242+28:8 tight lit %url
243+28:13 name reply
244+28:18 tight glyph ]
245+28:20 glyph !!
246+29:1 DEDENT
247+29:1 DEDENT
248+29:1 DEDENT
249+29:1 NEWLINE
250+29:1 glyph ++
251+29:4 name watch-pure
252+29:15 glyph ^-
253+29:18 glyph (
254+29:19 tight name sub
255+29:23 name my-msg
256+29:29 tight glyph )
257+29:31 glyph [
258+29:32 tight lit %watch
259+29:39 glyph (
260+29:40 tight name pure
261+29:45 lit %idle
262+29:50 tight glyph )
263+29:51 tight glyph ]
264+30:1 NEWLINE
265+30:1 glyph ++
266+30:4 name watch-generic
267+30:18 glyph |=
268+30:21 name a
269+30:22 tight glyph =
270+30:23 tight glyph (
271+30:24 tight name ask
272+30:28 tvar A
273+30:29 tight glyph )
274+30:31 glyph ^-
275+30:34 glyph (
276+30:35 tight name sub
277+30:39 tvar A
278+30:40 tight glyph )
279+30:42 glyph [
280+30:43 tight lit %watch
281+30:50 name a
282+30:51 tight glyph ]
283+31:1 NEWLINE
284+31:1 glyph ++
285+31:4 name independent-text
286+31:21 glyph |=
287+31:24 name a
288+31:25 tight glyph =
289+31:26 tight glyph (
290+31:27 tight name ask
291+31:31 aura @t
292+31:33 tight glyph )
293+31:35 glyph ^-
294+31:38 glyph (
295+31:39 tight name sub
296+31:43 aura @t
297+31:45 tight glyph )
298+31:47 glyph [
299+31:48 tight lit %watch
300+31:55 name a
301+31:56 tight glyph ]
302+32:1 NEWLINE
303+32:1 glyph ++
304+32:4 name independent-ship
305+32:21 glyph |=
306+32:24 name a
307+32:25 tight glyph =
308+32:26 tight glyph (
309+32:27 tight name ask
310+32:31 aura @p
311+32:33 tight glyph )
312+32:35 glyph ^-
313+32:38 glyph (
314+32:39 tight name sub
315+32:43 aura @p
316+32:45 tight glyph )
317+32:47 glyph [
318+32:48 tight lit %watch
319+32:55 name a
320+32:56 tight glyph ]
321+33:1 NEWLINE
322+33:1 glyph ++
323+33:4 name wrong-watch-generic
324+33:24 glyph |=
325+33:27 name a
326+33:28 tight glyph =
327+33:29 tight glyph (
328+33:30 tight name ask
329+33:34 aura @p
330+33:36 tight glyph )
331+33:38 glyph ^-
332+33:41 glyph (
333+33:42 tight name sub
334+33:46 aura @t
335+33:48 tight glyph )
336+33:50 glyph [
337+33:51 tight lit %watch
338+33:58 name a
339+33:59 tight glyph ]
340+35:1 NEWLINE
341+35:1 glyph ++
342+35:4 name pure-direct
343+35:16 glyph ^-
344+35:19 glyph (
345+35:20 tight name ask
346+35:24 name my-msg
347+35:30 tight glyph )
348+35:32 glyph (
349+35:33 tight name pure
350+35:38 lit %idle
351+35:43 tight glyph )
352+36:1 NEWLINE
353+36:1 glyph ++
354+36:4 name pure-typed
355+36:15 glyph ^-
356+36:18 glyph (
357+36:19 tight name ask
358+36:23 name my-msg
359+36:29 tight glyph )
360+36:31 glyph (
361+36:32 tight name pure
362+36:37 glyph (
363+36:38 tight glyph ^-
364+36:41 name my-msg
365+36:48 lit %idle
366+36:53 tight glyph )
367+36:54 tight glyph )
368+37:1 NEWLINE
369+37:1 glyph ++
370+37:4 name pure-wrong
371+37:15 glyph ^-
372+37:18 glyph (
373+37:19 tight name ask
374+37:23 name my-msg
375+37:29 tight glyph )
376+37:31 glyph (
377+37:32 tight name pure
378+37:37 lit %absent
379+37:44 tight glyph )
380+37:45 NEWLINE
tests/golden/types-prelude-sub/tree.txtnew file+164
@@ -0,0 +1,164 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %got)
6+ (face 2:9 value (aura 2:15 @t)))
7+ (const 3:3 %done)))
8+ (value 4:1 watch-value
9+ (gate 4:16
10+ (face 4:19 a
11+ (apply 4:21 ask (ref 4:26 msg)))
12+ (cast 4:31
13+ (apply 4:34 sub (ref 4:39 msg))
14+ (tuple 4:44 (lit 4:45 %watch) (wing 4:52 a)))))
15+ (value 5:1 watch-cord
16+ (gate 5:15
17+ (face 5:18 a
18+ (apply 5:20 ask (aura 5:25 @t)))
19+ (cast 5:29
20+ (apply 5:32 sub (aura 5:37 @t))
21+ (tuple 5:41 (lit 5:42 %watch) (wing 5:49 a)))))
22+ (value 6:1 wrong-watch
23+ (gate 6:16
24+ (face 6:19 a
25+ (apply 6:21 ask (aura 6:26 @p)))
26+ (cast 6:30
27+ (apply 6:33 sub (aura 6:38 @t))
28+ (tuple 6:42 (lit 6:43 %watch) (wing 6:50 a)))))
29+ (value 7:1 periodic
30+ (cast 7:13
31+ (apply 7:16 sub (aura 7:21 @t))
32+ (tuple 7:25
33+ (lit 7:26 %every)
34+ (face 7:33 gap (lit 7:37 ~s1))
35+ (face 7:41 reply
36+ (gate-wide 7:47
37+ (face 7:50 date (aura 7:55 @da))
38+ (str 7:59 "tick"))))))
39+ (value 8:1 route
40+ (cast 8:10
41+ (apply 8:13 sub (aura 8:18 @t))
42+ (tuple 8:22
43+ (lit 8:23 %url)
44+ (face 8:28 reply
45+ (gate-wide 8:34
46+ (face 8:37 p (ref 8:39 path))
47+ (str 8:44 "path"))))))
48+ (value 9:1 wrong-reply
49+ (cast 9:16
50+ (apply 9:19 sub (aura 9:24 @t))
51+ (tuple 9:28
52+ (lit 9:29 %every)
53+ (face 9:36 gap (lit 9:40 ~s1))
54+ (face 9:44 reply
55+ (gate-wide 9:50
56+ (face 9:53 date (aura 9:58 @p))
57+ (str 9:61 "bad"))))))
58+ (value 10:1 incomplete
59+ (gate 10:15
60+ (face 10:18 s
61+ (apply 10:20 sub (ref 10:25 msg)))
62+ (body 11:3
63+ (branch 11:3
64+ (wing 11:6 s)
65+ (arm 12:5
66+ (cell 12:5 (lit 12:6 %watch) (bind 12:13 ask))
67+ (lit 12:18 %done))
68+ (arm 13:5
69+ (cell 13:5 (lit 13:6 %every) (bind 13:13 gap) (bind 13:17 reply))
70+ (lit 13:24 %done))))))
71+ (value 14:1 complete
72+ (gate 14:13
73+ (face 14:16 s
74+ (apply 14:18 sub (ref 14:23 msg)))
75+ (body 15:3
76+ (branch 15:3
77+ (wing 15:6 s)
78+ (arm 16:5
79+ (cell 16:5 (lit 16:6 %watch) (bind 16:13 ask))
80+ (lit 16:18 %done))
81+ (arm 17:5
82+ (cell 17:5 (lit 17:6 %every) (bind 17:13 gap) (bind 17:17 reply))
83+ (lit 17:24 %done))
84+ (arm 18:5
85+ (cell 18:5 (lit 18:6 %url) (bind 18:11 reply))
86+ (lit 18:18 %done))))))
87+ (mold 20:1 my-msg
88+ (union 21:3
89+ (cell 21:3
90+ (const 21:4 %got)
91+ (face 21:9 value (aura 21:15 @t)))
92+ (const 22:3 %idle)))
93+ (value 23:1 take-watch
94+ (gate 23:15
95+ (face 23:18 s
96+ (apply 23:20 sub (ref 23:25 my-msg)))
97+ (body 24:3
98+ (cast 24:3
99+ (apply 24:6 ask (ref 24:11 my-msg))
100+ (body 25:5
101+ (branch 25:5
102+ (wing 25:8 s)
103+ (arm 26:7
104+ (cell 26:7 (lit 26:8 %watch) (bind 26:15 a))
105+ (wing 26:18 a))
106+ (arm 27:7
107+ (cell 27:7 (lit 27:8 %every) (bind 27:15 gap) (bind 27:19 reply))
108+ (crash 27:26))
109+ (arm 28:7
110+ (cell 28:7 (lit 28:8 %url) (bind 28:13 reply))
111+ (crash 28:20))))))))
112+ (value 29:1 watch-pure
113+ (cast 29:15
114+ (apply 29:18 sub (ref 29:23 my-msg))
115+ (tuple 29:31
116+ (lit 29:32 %watch)
117+ (group 29:39
118+ (call 29:40 (wing 29:40 pure) (lit 29:45 %idle))))))
119+ (value 30:1 watch-generic
120+ (gate 30:18
121+ (face 30:21 a
122+ (apply 30:23 ask (tvar 30:28 A)))
123+ (cast 30:31
124+ (apply 30:34 sub (tvar 30:39 A))
125+ (tuple 30:42 (lit 30:43 %watch) (wing 30:50 a)))))
126+ (value 31:1 independent-text
127+ (gate 31:21
128+ (face 31:24 a
129+ (apply 31:26 ask (aura 31:31 @t)))
130+ (cast 31:35
131+ (apply 31:38 sub (aura 31:43 @t))
132+ (tuple 31:47 (lit 31:48 %watch) (wing 31:55 a)))))
133+ (value 32:1 independent-ship
134+ (gate 32:21
135+ (face 32:24 a
136+ (apply 32:26 ask (aura 32:31 @p)))
137+ (cast 32:35
138+ (apply 32:38 sub (aura 32:43 @p))
139+ (tuple 32:47 (lit 32:48 %watch) (wing 32:55 a)))))
140+ (value 33:1 wrong-watch-generic
141+ (gate 33:24
142+ (face 33:27 a
143+ (apply 33:29 ask (aura 33:34 @p)))
144+ (cast 33:38
145+ (apply 33:41 sub (aura 33:46 @t))
146+ (tuple 33:50 (lit 33:51 %watch) (wing 33:58 a)))))
147+ (value 35:1 pure-direct
148+ (cast 35:16
149+ (apply 35:19 ask (ref 35:24 my-msg))
150+ (group 35:32
151+ (call 35:33 (wing 35:33 pure) (lit 35:38 %idle)))))
152+ (value 36:1 pure-typed
153+ (cast 36:15
154+ (apply 36:18 ask (ref 36:23 my-msg))
155+ (group 36:31
156+ (call 36:32
157+ (wing 36:32 pure)
158+ (group 36:37
159+ (cast 36:38 (ref 36:41 my-msg) (lit 36:48 %idle)))))))
160+ (value 37:1 pure-wrong
161+ (cast 37:15
162+ (apply 37:18 ask (ref 37:23 my-msg))
163+ (group 37:31
164+ (call 37:32 (wing 37:32 pure) (lit 37:37 %absent))))))
tests/golden/types-prelude-sub/types.txtnew file+32
@@ -0,0 +1,32 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3+++ watch-value: $-((ask msg) (sub msg))
4+++ watch-cord: $-((ask @t) (sub @t))
5+++ wrong-watch: cast constraint is not supported by partial inference
6+++ periodic: (sub @t)
7+++ route: (sub @t)
8+++ wrong-reply: cast mold and expression type do not unify
9+/tests/golden/types-prelude-sub/source.jibb:9:19: cast mold
10+++ wrong-reply ^- (sub @t) [%every gap=~s1 reply=|=(date=@p "bad")]
11+ ^
12+/tests/golden/types-prelude-sub/source.jibb:9:28: expression
13+++ wrong-reply ^- (sub @t) [%every gap=~s1 reply=|=(date=@p "bad")]
14+ ^
15+++ incomplete: union branch result matching needs unsupported inference
16+++ complete: union branch result matching needs unsupported inference
17++$ my-msg: cases proven disjoint; mold not checked
18+++ take-watch: $-((sub my-msg) (ask my-msg))
19+++ watch-pure: (sub my-msg)
20+++ watch-generic: $-((ask A) (sub A))
21+++ independent-text: $-((ask @t) (sub @t))
22+++ independent-ship: $-((ask @p) (sub @p))
23+++ wrong-watch-generic: cast constraint is not supported by partial inference
24+++ pure-direct: (ask my-msg)
25+++ pure-typed: (ask my-msg)
26+++ pure-wrong: my-msg has no case `%absent`
27+/tests/golden/types-prelude-sub/source.jibb:37:32: expected union
28+++ pure-wrong ^- (ask my-msg) (pure %absent)
29+ ^
30+/tests/golden/types-prelude-sub/source.jibb:37:37: tag
31+++ pure-wrong ^- (ask my-msg) (pure %absent)
32+ ^
tests/golden/types-prelude-zing/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Hoon's standard library regrouped, written in Jibb"; the Lists row includes section 2b.
2+tests: Source-backed zing infers empty and nested text lists, ship elements, independently generic element types and gate elements, and reports both sites for a non-list. The Jibb type is homogeneous (list (list A)) to (list A); Hoon's raw heterogeneous noun-list behavior is outside this type. This checks partial inference only; backend execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-zing/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-zing/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ empty (zing (^- (list (list @t)) ~))
2+++ nested (zing ~[~["a" "b"] ~[] ~["c"]])
3+++ ships (zing ~[~[~zod] ~[~nec]])
4+++ generic |= xss=(list (list A)) (zing xss)
5+++ gates |= xss=(list (list $-(A B))) (zing xss)
6+++ bad (zing "not a list of lists")
tests/golden/types-prelude-zing/tokens.txtnew file+92
@@ -0,0 +1,92 @@
1+1:1 glyph ++
2+1:4 name empty
3+1:10 glyph (
4+1:11 tight name zing
5+1:16 glyph (
6+1:17 tight glyph ^-
7+1:20 glyph (
8+1:21 tight name list
9+1:26 glyph (
10+1:27 tight name list
11+1:32 aura @t
12+1:34 tight glyph )
13+1:35 tight glyph )
14+1:37 lit ~
15+1:38 tight glyph )
16+1:39 tight glyph )
17+2:1 NEWLINE
18+2:1 glyph ++
19+2:4 name nested
20+2:11 glyph (
21+2:12 tight name zing
22+2:17 glyph ~[
23+2:19 tight glyph ~[
24+2:21 tight str "a"
25+2:25 str "b"
26+2:28 tight glyph ]
27+2:30 glyph ~[
28+2:32 tight glyph ]
29+2:34 glyph ~[
30+2:36 tight str "c"
31+2:39 tight glyph ]
32+2:40 tight glyph ]
33+2:41 tight glyph )
34+3:1 NEWLINE
35+3:1 glyph ++
36+3:4 name ships
37+3:10 glyph (
38+3:11 tight name zing
39+3:16 glyph ~[
40+3:18 tight glyph ~[
41+3:20 tight lit ~zod
42+3:24 tight glyph ]
43+3:26 glyph ~[
44+3:28 tight lit ~nec
45+3:32 tight glyph ]
46+3:33 tight glyph ]
47+3:34 tight glyph )
48+4:1 NEWLINE
49+4:1 glyph ++
50+4:4 name generic
51+4:12 glyph |=
52+4:15 name xss
53+4:18 tight glyph =
54+4:19 tight glyph (
55+4:20 tight name list
56+4:25 glyph (
57+4:26 tight name list
58+4:31 tvar A
59+4:32 tight glyph )
60+4:33 tight glyph )
61+4:35 glyph (
62+4:36 tight name zing
63+4:41 name xss
64+4:44 tight glyph )
65+5:1 NEWLINE
66+5:1 glyph ++
67+5:4 name gates
68+5:10 glyph |=
69+5:13 name xss
70+5:16 tight glyph =
71+5:17 tight glyph (
72+5:18 tight name list
73+5:23 glyph (
74+5:24 tight name list
75+5:29 glyph $-(
76+5:32 tight tvar A
77+5:34 tvar B
78+5:35 tight glyph )
79+5:36 tight glyph )
80+5:37 tight glyph )
81+5:39 glyph (
82+5:40 tight name zing
83+5:45 name xss
84+5:48 tight glyph )
85+6:1 NEWLINE
86+6:1 glyph ++
87+6:4 name bad
88+6:8 glyph (
89+6:9 tight name zing
90+6:14 str "not a list of lists"
91+6:35 tight glyph )
92+6:36 NEWLINE
tests/golden/types-prelude-zing/tree.txtnew file+43
@@ -0,0 +1,43 @@
1+(module
2+ (value 1:1 empty
3+ (group 1:10
4+ (call 1:11
5+ (wing 1:11 zing)
6+ (group 1:16
7+ (cast 1:17
8+ (apply 1:20 list
9+ (apply 1:26 list (aura 1:32 @t)))
10+ (lit 1:37 ~))))))
11+ (value 2:1 nested
12+ (group 2:11
13+ (call 2:12
14+ (wing 2:12 zing)
15+ (list 2:17
16+ (list 2:19 (str 2:21 "a") (str 2:25 "b"))
17+ (list 2:30)
18+ (list 2:34 (str 2:36 "c"))))))
19+ (value 3:1 ships
20+ (group 3:10
21+ (call 3:11
22+ (wing 3:11 zing)
23+ (list 3:16
24+ (list 3:18 (lit 3:20 ~zod))
25+ (list 3:26 (lit 3:28 ~nec))))))
26+ (value 4:1 generic
27+ (gate 4:12
28+ (face 4:15 xss
29+ (apply 4:19 list
30+ (apply 4:25 list (tvar 4:31 A))))
31+ (group 4:35
32+ (call 4:36 (wing 4:36 zing) (wing 4:41 xss)))))
33+ (value 5:1 gates
34+ (gate 5:10
35+ (face 5:13 xss
36+ (apply 5:17 list
37+ (apply 5:23 list
38+ (fn 5:29 (tvar 5:32 A) (tvar 5:34 B)))))
39+ (group 5:39
40+ (call 5:40 (wing 5:40 zing) (wing 5:45 xss)))))
41+ (value 6:1 bad
42+ (group 6:8
43+ (call 6:9 (wing 6:9 zing) (str 6:14 "not a list of lists")))))
tests/golden/types-prelude-zing/types.txtnew file+13
@@ -0,0 +1,13 @@
1+partial inference; module not checked
2+++ empty: (list @t)
3+++ nested: (list @t)
4+++ ships: (list @p)
5+++ generic: $-((list (list A)) (list A))
6+++ gates: $-((list (list $-(A B))) (list $-(A B)))
7+++ bad: call's sample and argument types do not unify
8+/tests/golden/types-prelude-zing/source.jibb:6:9: called gate has type $-((list (list A)) (list A))
9+++ bad (zing "not a list of lists")
10+ ^
11+/tests/golden/types-prelude-zing/source.jibb:6:14: argument has type @t
12+++ bad (zing "not a list of lists")
13+ ^
tests/golden/types-request-normal/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Agent APIs: "A path case is a request name, a path and a type. A plain mold is full state"; Effects: "its reply always gets full state."
2+tests: A real mark and one plain API path infer imported request calls at independent cord, ship and generic reply types; wrong callbacks, non-gates, extra arguments and pending constraints remain failures or unsupported. This partial report neither checks watchability nor implements request lowering or runtime validation.
3+expect: parses
4+expect-types: partial inference; module not checked
tests/golden/types-request-normal/mar/full.txtnew file+5
@@ -0,0 +1,5 @@
1+|_ a=@t
2+++ grab |% ++ noun @t --
3+++ grow |% ++ noun a --
4+++ grad %noun
5+--
tests/golden/types-request-normal/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/types-request-normal/module-trees.txtnew file+5
@@ -0,0 +1,5 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mold 2:1 paths
5+ (cell 2:10 (const 2:11 %plain) (path 2:18 /plain) (ref 2:25 full))))
tests/golden/types-request-normal/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/types-request-normal/modules/ui/api/demo.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %full
2++$ paths [%plain /plain full]
tests/golden/types-request-normal/source.jibbnew file+9
@@ -0,0 +1,9 @@
1+/= api /ui/api/demo
2+++ cord (plain.api |=(x=@t "ok"))
3+++ ship (plain.api |=(x=@t ~zod))
4+++ generic |= convert=$-(@t A) (plain.api convert)
5+++ wrong-callback (plain.api |=(x=@p "wrong"))
6+++ wrong-value (plain.api "wrong")
7+++ extra (plain.api |=(x=@t "ok") "extra")
8+++ pending ~& %pending
9+ (plain.api |=(x=@t "ok"))
tests/golden/types-request-normal/tokens.txtnew file+95
@@ -0,0 +1,95 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name cord
12+2:9 glyph (
13+2:10 tight wing plain.api
14+2:20 glyph |=(
15+2:23 tight name x
16+2:24 tight glyph =
17+2:25 tight aura @t
18+2:28 str "ok"
19+2:32 tight glyph )
20+2:33 tight glyph )
21+3:1 NEWLINE
22+3:1 glyph ++
23+3:4 name ship
24+3:9 glyph (
25+3:10 tight wing plain.api
26+3:20 glyph |=(
27+3:23 tight name x
28+3:24 tight glyph =
29+3:25 tight aura @t
30+3:28 lit ~zod
31+3:32 tight glyph )
32+3:33 tight glyph )
33+4:1 NEWLINE
34+4:1 glyph ++
35+4:4 name generic
36+4:12 glyph |=
37+4:15 name convert
38+4:22 tight glyph =
39+4:23 tight glyph $-(
40+4:26 tight aura @t
41+4:29 tvar A
42+4:30 tight glyph )
43+4:32 glyph (
44+4:33 tight wing plain.api
45+4:43 name convert
46+4:50 tight glyph )
47+5:1 NEWLINE
48+5:1 glyph ++
49+5:4 name wrong-callback
50+5:19 glyph (
51+5:20 tight wing plain.api
52+5:30 glyph |=(
53+5:33 tight name x
54+5:34 tight glyph =
55+5:35 tight aura @p
56+5:38 str "wrong"
57+5:45 tight glyph )
58+5:46 tight glyph )
59+6:1 NEWLINE
60+6:1 glyph ++
61+6:4 name wrong-value
62+6:16 glyph (
63+6:17 tight wing plain.api
64+6:27 str "wrong"
65+6:34 tight glyph )
66+7:1 NEWLINE
67+7:1 glyph ++
68+7:4 name extra
69+7:10 glyph (
70+7:11 tight wing plain.api
71+7:21 glyph |=(
72+7:24 tight name x
73+7:25 tight glyph =
74+7:26 tight aura @t
75+7:29 str "ok"
76+7:33 tight glyph )
77+7:35 str "extra"
78+7:42 tight glyph )
79+8:1 NEWLINE
80+8:1 glyph ++
81+8:4 name pending
82+8:12 glyph ~&
83+8:15 lit %pending
84+9:3 INDENT
85+9:3 glyph (
86+9:4 tight wing plain.api
87+9:14 glyph |=(
88+9:17 tight name x
89+9:18 tight glyph =
90+9:19 tight aura @t
91+9:22 str "ok"
92+9:26 tight glyph )
93+9:27 tight glyph )
94+9:28 DEDENT
95+9:28 NEWLINE
tests/golden/types-request-normal/tree.txtnew file+50
@@ -0,0 +1,50 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 cord
4+ (group 2:9
5+ (call 2:10
6+ (wing 2:10 plain.api)
7+ (gate-wide 2:20
8+ (face 2:23 x (aura 2:25 @t))
9+ (str 2:28 "ok")))))
10+ (value 3:1 ship
11+ (group 3:9
12+ (call 3:10
13+ (wing 3:10 plain.api)
14+ (gate-wide 3:20
15+ (face 3:23 x (aura 3:25 @t))
16+ (lit 3:28 ~zod)))))
17+ (value 4:1 generic
18+ (gate 4:12
19+ (face 4:15 convert
20+ (fn 4:23 (aura 4:26 @t) (tvar 4:29 A)))
21+ (group 4:32
22+ (call 4:33 (wing 4:33 plain.api) (wing 4:43 convert)))))
23+ (value 5:1 wrong-callback
24+ (group 5:19
25+ (call 5:20
26+ (wing 5:20 plain.api)
27+ (gate-wide 5:30
28+ (face 5:33 x (aura 5:35 @p))
29+ (str 5:38 "wrong")))))
30+ (value 6:1 wrong-value
31+ (group 6:16
32+ (call 6:17 (wing 6:17 plain.api) (str 6:27 "wrong"))))
33+ (value 7:1 extra
34+ (group 7:10
35+ (call 7:11
36+ (wing 7:11 plain.api)
37+ (gate-wide 7:21
38+ (face 7:24 x (aura 7:26 @t))
39+ (str 7:29 "ok"))
40+ (str 7:35 "extra"))))
41+ (value 8:1 pending
42+ (trace 8:12
43+ (lit 8:15 %pending)
44+ (body 9:3
45+ (group 9:3
46+ (call 9:4
47+ (wing 9:4 plain.api)
48+ (gate-wide 9:14
49+ (face 9:17 x (aura 9:19 @t))
50+ (str 9:22 "ok"))))))))
tests/golden/types-request-normal/types.txtnew file+26
@@ -0,0 +1,26 @@
1+partial inference; module not checked
2+++ cord: (ask @t)
3+++ ship: (ask @p)
4+++ generic: $-($-(@t A) (ask A))
5+++ wrong-callback: call's sample and argument types do not unify
6+/tests/golden/types-request-normal/source.jibb:5:20: called gate
7+++ wrong-callback (plain.api |=(x=@p "wrong"))
8+ ^
9+/tests/golden/types-request-normal/source.jibb:5:30: argument has type $-(@p @t)
10+++ wrong-callback (plain.api |=(x=@p "wrong"))
11+ ^
12+++ wrong-value: call's sample and argument types do not unify
13+/tests/golden/types-request-normal/source.jibb:6:17: called gate
14+++ wrong-value (plain.api "wrong")
15+ ^
16+/tests/golden/types-request-normal/source.jibb:6:27: argument has type @t
17+++ wrong-value (plain.api "wrong")
18+ ^
19+++ extra: call's sample and argument types do not unify
20+/tests/golden/types-request-normal/source.jibb:7:11: called gate
21+++ extra (plain.api |=(x=@t "ok") "extra")
22+ ^
23+/tests/golden/types-request-normal/source.jibb:7:21: argument has type [$-(@t @t) @t]
24+++ extra (plain.api |=(x=@t "ok") "extra")
25+ ^
26+++ pending: tag needs context in partial inference
tests/importer/about.txt+3−1
@@ -9,7 +9,9 @@ explicit union argument when the exact call wrapper and collection provenance
99are validated and all union cases are static and pairwise disjoint. Cases
1010cover overlap, collapsed branches, multiple or nested unions, dependent
1111branches, forged subject, sample and tail wrappers, and a shadowed
12−collection. Tagged source cases exercise bare null payloads, overlapping tags and hidden
12+collection. `explicit-unknown` has distinct outer tags and a local `word` alias
13+for `@t`, so its source cases can be proved disjoint. `explicit-wut-overlap` and `explicit-collapsed`
14+now have positive overlap witnesses from the original source cases. Tagged source cases exercise bare null payloads, overlapping tags and hidden
1315invalid dependencies, named payload dependencies, valid and collapsed enums,
1416direct and transitively aliased overlaps, nested collections, shadowed jar and
1517jug dependencies, Ford-name collisions, zuse local-name precedence and the
tests/importer/tree.txt+3−3
@@ -74,11 +74,11 @@ explicit-graph: error: Hoon union disjointness could not be verified
7474explicit-graph-unsupported: error: signed and float auras cannot be imported
7575explicit-wut-safe: (union [ok @ud] [err @t])
7676explicit-percent-overlap: error: Hoon union disjointness could not be verified
77−explicit-wut-overlap: error: Hoon union disjointness could not be verified
78−explicit-collapsed: error: Hoon union disjointness could not be verified
77+explicit-wut-overlap: error: Hoon union cases overlap
78+explicit-collapsed: error: Hoon union cases overlap
7979explicit-subsumed: error: Hoon union disjointness could not be verified
8080explicit-three: (union [a @ud] [b @t] [c @p])
81−explicit-unknown: error: a Hoon union needs a source-level disjointness check
81+explicit-unknown: (union [x @t] [y @t])
8282explicit-nested: error: Hoon union disjointness could not be verified
8383collection-union-wrapper: valid; forged subject, sample and tail rejected
8484collection-union-list: (list (union [x @ud] [y @t]))
tests/lib/jibb-bridge.hoon+5−2
@@ -136,6 +136,9 @@
136136 [%fixture %raw-rec [%& [%ref %fixture %chain]]]
137137 [%fixture %bad-arity [%& [%apply %list ~[[%atom %t ~] [%atom %ud ~]]]]]
138138 [%fixture %bad-argument [%& [%apply %list ~[[%fork ~[[%atom %tas [~ %a]] [%atom %tas [~ %a]]]]]]]]
139+ [%fixture %mixed-zero (read-named-diagnostic:jibb-import %fixture %mixed-zero cor)]
140+ [%fixture %separate-tags (read %separate-tags)]
141+ [%fixture %separate-terms (read %separate-terms)]
139142 [%fixture %nested-choice (read %nested-choice)]
140143 [%fixture %collapsed (read %collapsed)]
141144 [%fixture %dollar (read %dollar)]
@@ -150,7 +153,7 @@
150153 [%fixture %duplicate [%& [%atom %ud ~]]]
151154 [%missing %title [%& [%atom %t ~]]]
152155 ==
153− =/ report=@t (golden-types-imports:jibb /test/jibb src external)
156+ =/ report=@t (golden-types-with-reader-diagnostics:jibb /test/jibb src external ~)
154157 =/ dep=@t (crip "/- fixture\0a++ chain-id |= x=chain.fixture x\0a")
155158 =/ root=@t (crip "/= helper /ui/helper\0a++ use chain-id.helper\0a")
156159 =/ prelude=@t (crip "++ prelude-id |= x x\0a")
@@ -161,5 +164,5 @@
161164 (crip "/- fixture\0a++ canonical ^- (unit @t) `\"hi\"\0a++ lookalike ^- zero-lookalike.fixture `\"hi\"\0a")
162165 =/ unit-report=@t
163166 (golden-types-with-prelude:jibb /ui/unit-client/jibb unit-client external ~ ~ unit-prelude)
164− (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' (cat 3 recursive-list-synthetic (cat 3 '\0a' named-recursive-synthetic))))))))))
167+ (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0areader-mixed-zero: {(show-result:jibb-import (read %mixed-zero))}\0areader-separate-tags: {(show-result:jibb-import (read %separate-tags))}\0areader-separate-terms: {(show-result:jibb-import (read %separate-terms))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' (cat 3 recursive-list-synthetic (cat 3 '\0a' named-recursive-synthetic))))))))))
165168--
tests/lib/jibb-closed-gate-guards.hoonnew file+60
@@ -0,0 +1,60 @@
1+:: Closed-gate sample labels must not erase nested faces or uncertain origins.
2+/+ jibb
3+|%
4+++ closed-gate-guard-errors
5+ ^- (list tape)
6+ =/ t=itype:jibb [%atom %t]
7+ =/ p=itype:jibb [%atom %p]
8+ =/ n=itype:jibb [%atom %ud]
9+ =/ tag=itype:jibb [%const [%term %tas %delta '%delta']]
10+ =/ payload=itype:jibb [%cell tag n]
11+ =/ bare=itype:jibb [%cell payload t]
12+ =/ named=itype:jibb [%cell [%face %diff payload] [%face %state t]]
13+ =/ differently-named=itype:jibb [%cell [%face %other payload] [%face %state t]]
14+ =/ face-one=itype:jibb [%face %first t]
15+ =/ face-two=itype:jibb [%face %second t]
16+ =/ inner-one=itype:jibb [%cell face-one n]
17+ =/ inner-two=itype:jibb [%cell face-two n]
18+ =/ nested-a=itype:jibb [%cell [%face %diff inner-one] [%face %state t]]
19+ =/ nested-b=itype:jibb [%cell inner-two t]
20+ =/ tail-a=itype:jibb [%cell payload [%face %rest [%cell t n]]]
21+ =/ tail-b=itype:jibb [%cell payload [%cell t n]]
22+ =/ samples-mismatch=itype:jibb [%cell payload p]
23+ =/ cases=(list [label=@t actual=itype:jibb expected=itype:jibb sub=isub:jibb want=?])
24+ :~ ['named fold to bare' [%fn named t] [%fn bare t] ~ &]
25+ ['same named gate' [%fn named t] [%fn named t] ~ &]
26+ ['different slot names' [%fn named t] [%fn differently-named t] ~ |]
27+ ['different nested names' [%fn nested-a t] [%fn nested-b t] ~ |]
28+ ['faced tail versus cell' [%fn tail-a t] [%fn tail-b t] ~ |]
29+ ['different result face' [%fn bare face-one] [%fn bare face-two] ~ |]
30+ ['faced result versus bare' [%fn bare face-one] [%fn bare t] ~ |]
31+ ['wrong sample aura' [%fn named t] [%fn samples-mismatch t] ~ |]
32+ ['wrong result aura' [%fn named p] [%fn bare t] ~ |]
33+ ['open sample' [%fn [%var 0] t] [%fn bare t] ~ &]
34+ ['variable-bound sample' [%fn [%var 0] t] [%fn bare t] ~[[0 named]] |]
35+ ['variable-bound actual function' [%var 0] [%fn bare t] ~[[0 [%fn named t]]] |]
36+ ['variable-bound expected function' [%fn bare t] [%var 0] ~[[0 [%fn named t]]] |]
37+ ==
38+ =/ outcomes=(list @t)
39+ %+ turn cases
40+ |= c=[label=@t actual=itype:jibb expected=itype:jibb sub=isub:jibb want=?]
41+ =/ fit=ifit:jibb (itype-fit:jibb actual.c expected.c sub.c 1)
42+ ?: =(want.c ?=(%ok -.fit)) ''
43+ (cat 3 label.c ': unexpected fit')
44+ =/ bad=(list @t) (skim outcomes |=(s=@t !=(s '')))
45+ =/ build
46+ |= depth=@ud
47+ ^- [a=itype:jibb b=itype:jibb]
48+ =/ a=itype:jibb [%face %inside t]
49+ =/ b=itype:jibb t
50+ |-
51+ ?: =(depth 0) [a b]
52+ $(depth (dec depth), a [%fn [%cell a t] t], b [%fn [%cell b t] t])
53+ =/ deep (build 12)
54+ =/ deep-fit=ifit:jibb (itype-fit:jibb a.deep b.deep ~ 0)
55+ =? bad !?=(%unknown -.deep-fit) ['nested gate face uncertainty changed' bad]
56+ (turn bad trip)
57+++ test-closed-gate-guards
58+ ^- tang
59+ (turn closed-gate-guard-errors |=(reason=tape leaf+reason))
60+--
tests/lib/jibb-constructor-fit-guards.hoonnew file+128
@@ -0,0 +1,128 @@
1+:: Constructor cases distinguish proven absence from unknown cases.
2+/+ jibb
3+|%
4+++ constructor-base-errors
5+ ^- (list tape)
6+ =/ tag=lit:jibb [%term %tas %got '%got']
7+ =/ t=itype:jibb [%atom %t]
8+ =/ p=itype:jibb [%atom %p]
9+ =/ good=itype:jibb [%cell [%const tag] t]
10+ =/ bad-payload=itype:jibb [%cell [%const tag] p]
11+ =/ wrong=itype:jibb [%cell [%const [%term %tas %other '%other']] t]
12+ =/ tests=(list [name=@t cases=(list itype:jibb) sub=isub:jibb expected=?(%ok %bad %unknown)])
13+ :~ ['known matching' ~[good] ~ %ok]
14+ ['known missing' ~[wrong] ~ %bad]
15+ ['mismatched payload' ~[bad-payload] ~ %bad]
16+ ['explicit noun' ~[[%noun ~]] ~ %bad]
17+ ['unbound case' ~[[%var 0]] ~ %unknown]
18+ ['bound case remains uncertain' ~[[%var 0]] ~[[0 good]] %unknown]
19+ ['unknown case alongside match' ~[good [%var 0]] ~ %unknown]
20+ ['unbound head' ~[[%cell [%var 0] t]] ~ %unknown]
21+ ['bound head remains uncertain' ~[[%cell [%var 0] t]] ~[[0 [%const tag]]] %unknown]
22+ ['faced unknown case' ~[[%face %part good]] ~ %unknown]
23+ ['known atom face at head' ~[[%cell [%face %text t] [%const tag]]] ~ %bad]
24+ ['nested face at head' ~[[%cell [%face %outer [%face %inner t]] [%const tag]]] ~ %unknown]
25+ ==
26+ =/ failures=(list @t)
27+ %+ turn tests
28+ |= test=[name=@t cases=(list itype:jibb) sub=isub:jibb expected=?(%ok %bad %unknown)]
29+ =/ got=ifit:jibb (itype-fit-ctor-cases:jibb tag t cases.test sub.test 1)
30+ ?: =(expected.test -.got) ''
31+ (cat 3 name.test ': unexpected status')
32+ :: Null and other zero-valued literals have different source forms.
33+ =/ zero-tag=lit:jibb [%term %tas 0 '%$']
34+ =/ null-head=itype:jibb [%cell [%const [%null %n 0 '~']] t]
35+ =/ flag-head=itype:jibb [%cell [%const [%loobean %f 0 '%.y']] t]
36+ =/ term-head=itype:jibb [%cell [%const zero-tag] t]
37+ =/ variable-head=itype:jibb [%cell [%var 0] t]
38+ =/ zero-tests=(list [name=@t cases=(list itype:jibb) sub=isub:jibb expected=?(%ok %bad %unknown)])
39+ :~ ['null head' ~[null-head] ~ %ok]
40+ ['loobean zero head' ~[flag-head] ~ %ok]
41+ ['matching term zero head' ~[term-head] ~ %ok]
42+ ['unknown zero head' ~[variable-head] ~ %unknown]
43+ ['bound unknown zero head' ~[variable-head] ~[[0 [%const zero-tag]]] %unknown]
44+ ['unknown competitor' ~[null-head variable-head] ~ %unknown]
45+ ['loobean competitor' ~[term-head flag-head] ~ %unknown]
46+ ==
47+ =/ zero-failures=(list @t)
48+ %+ turn zero-tests
49+ |= test=[name=@t cases=(list itype:jibb) sub=isub:jibb expected=?(%ok %bad %unknown)]
50+ =/ got=ifit:jibb (itype-fit-ctor-cases:jibb zero-tag t cases.test sub.test 1)
51+ ?: =(expected.test -.got) ''
52+ (cat 3 name.test ': unexpected status')
53+ =/ failures (skim (weld failures zero-failures) |=(x=@t !=(x '')))
54+ (turn failures trip)
55+++ payload-candidates-errors
56+ ^- (list tape)
57+ =/ tag=lit:jibb [%term %tas %one '%one']
58+ =/ c=itype:jibb [%atom %t]
59+ =/ p=itype:jibb [%atom %p]
60+ =/ ud=itype:jibb [%atom %ud]
61+ =/ good=itype:jibb [%cell [%const tag] c]
62+ =/ other=itype:jibb [%cell [%const tag] p]
63+ =/ unknown=itype:jibb [%cell [%const tag] [%var 0]]
64+ =/ tests=(list [label=@t sample=itype:jibb cases=(list itype:jibb) want=?(%ok %bad %unknown)])
65+ :~ ['one fit' c ~[other good] %ok]
66+ ['one fit reversed' c ~[good other] %ok]
67+ ['second fit' p ~[good other] %ok]
68+ ['none fit' ud ~[good other] %bad]
69+ ['two fit' c ~[good good] %unknown]
70+ ['unknown rival' c ~[good unknown] %unknown]
71+ ['unknown rival first' c ~[unknown good] %unknown]
72+ ==
73+ =/ errors=(list @t)
74+ %+ turn tests
75+ |= test=[label=@t sample=itype:jibb cases=(list itype:jibb) want=?(%ok %bad %unknown)]
76+ =/ got=ifit:jibb (itype-fit-ctor-cases:jibb tag sample.test cases.test ~ 1)
77+ ?: =(want.test -.got) ''
78+ (cat 3 label.test ': unexpected status')
79+ =/ errors (skim errors |=(x=@t !=(x '')))
80+ (turn errors trip)
81+++ flag-fit-errors
82+ ^- (list tape)
83+ =/ flag=itype:jibb [%flag ~]
84+ =/ f=itype:jibb [%atom %f]
85+ =/ yes=itype:jibb [%const [%loobean %f 0 '%.y']]
86+ =/ tests=(list [label=@t actual=itype:jibb expected=itype:jibb sub=isub:jibb want=?(%ok %bad %unknown)])
87+ :~ ['flag to f' flag f ~ %unknown]
88+ ['bound flag to f' [%var 0] f ~[[0 flag]] %unknown]
89+ ['flag to bound f' flag [%var 0] ~[[0 f]] %unknown]
90+ ['singleton to f' yes f ~ %unknown]
91+ ['singleton to any' yes [%any-atom ~] ~ %ok]
92+ ['singleton to flag' yes flag ~ %ok]
93+ ['singleton to tas' yes [%atom %tas] ~ %bad]
94+ ==
95+ =/ errors=(list @t)
96+ %+ turn tests
97+ |= test=[label=@t actual=itype:jibb expected=itype:jibb sub=isub:jibb want=?(%ok %bad %unknown)]
98+ =/ got=ifit:jibb (itype-fit:jibb actual.test expected.test sub.test 1)
99+ ?: =(want.test -.got) ''
100+ (cat 3 label.test ': unexpected status')
101+ =/ errors (skim errors |=(x=@t !=(x '')))
102+ (turn errors trip)
103+++ singleton-union-errors
104+ ^- (list tape)
105+ =/ nil=itype:jibb [%const [%null %n 0 '~']]
106+ =/ yes=itype:jibb [%const [%loobean %f 0 '%.y']]
107+ =/ cell=itype:jibb [%cell nil [%atom %t]]
108+ =/ tests=(list [name=@t typ=itype:jibb expect=?])
109+ :~ ['literal and cell' [%union ~[nil cell] ~ ~ ~] &]
110+ ['duplicate same-noun literals' [%union ~[nil yes] ~ ~ ~] |]
111+ ['variable competitor' [%union ~[nil [%var 0]] ~ ~ ~] |]
112+ ['faced competitor' [%union ~[nil [%face %other cell]] ~ ~ ~] |]
113+ ['collection competitor' [%union ~[nil [%collection %list ~[[%atom %t]]]] ~ ~ ~] |]
114+ ['variable root' [%var 0] |]
115+ ==
116+ =/ errs=(list @t)
117+ %+ turn tests
118+ |= test=[name=@t typ=itype:jibb expect=?]
119+ ?: =(expect.test (explicit-singleton-in-union:jibb typ.test 0)) ''
120+ (cat 3 name.test ': incorrect singleton proof')
121+ (turn (skim errs |=(x=@t !=(x ''))) trip)
122+++ constructor-fit-guard-errors
123+ ^- (list tape)
124+ (weld constructor-base-errors (weld payload-candidates-errors (weld flag-fit-errors singleton-union-errors)))
125+++ test-constructor-fit-guards
126+ ^- tang
127+ (turn constructor-fit-guard-errors |=(reason=tape leaf+reason))
128+--
tests/lib/jibb-direct-gate-guards.hoonnew file+172
@@ -0,0 +1,172 @@
1+:: Direct layout evidence must retain provenance and final face constraints.
2+/+ jibb
3+|%
4+++ direct-evidence-errors
5+ ^- (list tape)
6+ =/ pre=@t '++ apply |= [f=$-([A B] B) n=@t] f\0a'
7+ =/ dupe=@t '++ apply |= [f=$-([A B] B) n=@t] f\0a++ apply |= [f=$-([A B] B) n=@t] f\0a'
8+ =/ root=@t '++ target |= [a=@t b=@p] b\0a++ main (apply target "x")\0a'
9+ =/ parsed (parse:jibb /tests/test/jibb root)
10+ ?> ?=(%& -.parsed)
11+ =/ ds=(list def:jibb) defs.p.parsed
12+ ?> ?=(^ ds)
13+ ?> ?=(^ t.ds)
14+ ?> ?=(%value -.i.t.ds)
15+ =/ expr=expr:jibb val.i.t.ds
16+ =? expr ?=(%group -.expr) inner.expr
17+ =/ txt=itype:jibb [%atom %t]
18+ =/ ship=itype:jibb [%atom %p]
19+ =/ target=itype:jibb [%fn [%cell [%face %a txt] [%face %b ship]] ship]
20+ =/ expected-fn=itype:jibb [%fn [%cell [%var 0] [%var 1]] [%var 1]]
21+ =/ expected-sample=itype:jibb [%cell [%face %f expected-fn] [%face %n txt]]
22+ =/ actual=itype:jibb [%cell target txt]
23+ =/ scheme=ischeme:jibb [[%fn expected-sample expected-fn] ~[0 1]]
24+ =/ changed=ischeme:jibb [[%fn expected-sample ship] ~[0 1]]
25+ =/ iface=ifile:jibb [~[[%apply scheme]] ~ /lib/jibb/prelude/jibb ~ ~ ~ `pre ~]
26+ =/ stale=ifile:jibb iface(values ~[[%apply changed]])
27+ =/ dup=ifile:jibb iface(source `dupe)
28+ =/ env=ienv:jibb ~[[%target [target ~]]]
29+ =/ registry=(map term def:jibb) (direct-checked-gates:jibb ds env)
30+ =/ evidence=(unit igate-prelude-evidence:jibb) (direct-prelude-evidence:jibb ds `iface)
31+ ?> ?=(^ evidence)
32+ =/ st=istate:jibb *istate:jibb
33+ =. st st(globals ~[%apply %target %main], prelude `iface, gate-defs registry, head-evidence evidence, next 10)
34+ =/ good=(unit ifit:jibb) (direct-gate-call-fit:jibb expr actual expected-sample env st)
35+ =/ bad=(unit ifit:jibb) (direct-gate-call-fit:jibb expr actual expected-sample env st(prelude `stale))
36+ =/ dupe-evidence=(unit igate-prelude-evidence:jibb) (direct-prelude-evidence:jibb ds `dup)
37+ =/ head=(unit def:jibb) (~(get by gates.u.evidence) %apply)
38+ ?> ?=(^ head)
39+ =/ head-sample=(unit sample:jibb) (direct-gate-sample:jibb u.head)
40+ ?> ?=(^ head-sample)
41+ ?> ?=(%cell -.u.head-sample)
42+ ?> ?=(%call -.expr)
43+ =/ pos=ifit:jibb (direct-positional-fit:jibb args.expr items.u.head-sample actual expected-sample env st ~ 10)
44+ =/ checks=(list @t)
45+ :~
46+ ?:(?=(%ok -.pos) 'positional-fit-ok' 'BAD-positional-fit')
47+ ?:(?=(^ good) 'original-evidence-usable' 'BAD-original-evidence')
48+ ?: &(?=(~ bad) =(source.iface source.stale) =(at.iface at.stale) !=(values.iface values.stale))
49+ 'changed-value-scheme-rejected'
50+ 'BAD-stale-evidence'
51+ ?:(?=(~ dupe-evidence) 'duplicate-source-rejected' 'BAD-duplicate-source')
52+ ==
53+
54+ ?: =(checks ~['positional-fit-ok' 'original-evidence-usable' 'changed-value-scheme-rejected' 'duplicate-source-rejected']) ~
55+ ~["direct-evidence-errors direct gate guard failed"]
56+++ late-face-errors
57+ ^- (list tape)
58+ =/ pre=@t '++ apply |= [first=[foo=A] second=A f=$-([C D] D)] f\0a'
59+ =/ dupe=@t '++ apply |= [f=$-([A B] B) n=@t] f\0a++ apply |= [f=$-([A B] B) n=@t] f\0a'
60+ =/ root=@t '++ target |= [a=@t b=@p] b\0a++ main (apply x y target)\0a'
61+ =/ parsed (parse:jibb /tests/test/jibb root)
62+ ?> ?=(%& -.parsed)
63+ =/ ds=(list def:jibb) defs.p.parsed
64+ ?> ?=(^ ds)
65+ ?> ?=(^ t.ds)
66+ ?> ?=(%value -.i.t.ds)
67+ =/ expr=expr:jibb val.i.t.ds
68+ =? expr ?=(%group -.expr) inner.expr
69+ =/ txt=itype:jibb [%atom %t]
70+ =/ ship=itype:jibb [%atom %p]
71+ =/ target=itype:jibb [%fn [%cell [%face %a txt] [%face %b ship]] ship]
72+ =/ expected-fn=itype:jibb [%fn [%cell [%var 1] [%var 2]] [%var 2]]
73+ =/ expected-sample=itype:jibb [%cell [%face %first [%face %foo [%var 0]]] [%cell [%face %second [%var 0]] [%face %f expected-fn]]]
74+ =/ actual=itype:jibb [%cell [%var 0] [%cell txt target]]
75+ =/ scheme=ischeme:jibb [[%fn expected-sample expected-fn] ~[0 1]]
76+ =/ changed=ischeme:jibb [[%fn expected-sample ship] ~[0 1]]
77+ =/ iface=ifile:jibb [~[[%apply scheme]] ~ /lib/jibb/prelude/jibb ~ ~ ~ `pre ~]
78+ =/ stale=ifile:jibb iface(values ~[[%apply changed]])
79+ =/ dup=ifile:jibb iface(source `dupe)
80+ =/ env=ienv:jibb ~[[%target [target ~]]]
81+ =/ registry=(map term def:jibb) (direct-checked-gates:jibb ds env)
82+ =/ evidence=(unit igate-prelude-evidence:jibb) (direct-prelude-evidence:jibb ds `iface)
83+ ?> ?=(^ evidence)
84+ =/ st=istate:jibb *istate:jibb
85+ =. st st(globals ~[%apply %target %main], prelude `iface, gate-defs registry, head-evidence evidence, next 10)
86+ =/ good=(unit ifit:jibb) (direct-gate-call-fit:jibb expr actual expected-sample env st)
87+ =/ bad=(unit ifit:jibb) (direct-gate-call-fit:jibb expr actual expected-sample env st(prelude `stale))
88+ =/ dupe-evidence=(unit igate-prelude-evidence:jibb) (direct-prelude-evidence:jibb ds `dup)
89+ =/ head=(unit def:jibb) (~(get by gates.u.evidence) %apply)
90+ ?> ?=(^ head)
91+ =/ head-sample=(unit sample:jibb) (direct-gate-sample:jibb u.head)
92+ ?> ?=(^ head-sample)
93+ ?> ?=(%cell -.u.head-sample)
94+ ?> ?=(%call -.expr)
95+ =/ pos=ifit:jibb (direct-positional-fit:jibb args.expr items.u.head-sample actual expected-sample env st ~ 10)
96+ =/ checks=(list @t)
97+ :~
98+ ?: ?=(%ok -.pos)
99+ ?:((itype-positional-slot-face-asym:jibb [%var 0] [%face %foo [%var 0]] sub.pos) 'LATE-FACE-ASYMMETRY' 'no-late-asymmetry')
100+ 'no-positional-fit'
101+ ?:(?=(%ok -.pos) 'positional-fit-ok' 'BAD-positional-fit')
102+ ?:(?=(^ good) 'original-evidence-usable' 'late-face-rejected')
103+ ?: &(?=(~ bad) =(source.iface source.stale) =(at.iface at.stale) !=(values.iface values.stale))
104+ 'changed-value-scheme-rejected'
105+ 'BAD-stale-evidence'
106+ ?:(?=(~ dupe-evidence) 'duplicate-source-rejected' 'BAD-duplicate-source')
107+ ==
108+
109+ ?: =(checks ~['LATE-FACE-ASYMMETRY' 'positional-fit-ok' 'late-face-rejected' 'changed-value-scheme-rejected' 'duplicate-source-rejected']) ~
110+ ~["late-face-errors direct gate guard failed"]
111+++ symmetric-face-errors
112+ ^- (list tape)
113+ =/ pre=@t '++ apply |= [first=[foo=A] second=A f=$-([C D] D)] f\0a'
114+ =/ dupe=@t '++ apply |= [f=$-([A B] B) n=@t] f\0a++ apply |= [f=$-([A B] B) n=@t] f\0a'
115+ =/ root=@t '++ target |= [a=@t b=@p] b\0a++ main (apply x y target)\0a'
116+ =/ parsed (parse:jibb /tests/test/jibb root)
117+ ?> ?=(%& -.parsed)
118+ =/ ds=(list def:jibb) defs.p.parsed
119+ ?> ?=(^ ds)
120+ ?> ?=(^ t.ds)
121+ ?> ?=(%value -.i.t.ds)
122+ =/ expr=expr:jibb val.i.t.ds
123+ =? expr ?=(%group -.expr) inner.expr
124+ =/ txt=itype:jibb [%atom %t]
125+ =/ ship=itype:jibb [%atom %p]
126+ =/ target=itype:jibb [%fn [%cell [%face %a txt] [%face %b ship]] ship]
127+ =/ expected-fn=itype:jibb [%fn [%cell [%var 1] [%var 2]] [%var 2]]
128+ =/ expected-sample=itype:jibb [%cell [%face %first [%face %foo [%var 0]]] [%cell [%face %second [%var 0]] [%face %f expected-fn]]]
129+ =/ actual=itype:jibb [%cell [%face %foo [%var 0]] [%cell txt target]]
130+ =/ scheme=ischeme:jibb [[%fn expected-sample expected-fn] ~[0 1]]
131+ =/ changed=ischeme:jibb [[%fn expected-sample ship] ~[0 1]]
132+ =/ iface=ifile:jibb [~[[%apply scheme]] ~ /lib/jibb/prelude/jibb ~ ~ ~ `pre ~]
133+ =/ stale=ifile:jibb iface(values ~[[%apply changed]])
134+ =/ dup=ifile:jibb iface(source `dupe)
135+ =/ env=ienv:jibb ~[[%target [target ~]]]
136+ =/ registry=(map term def:jibb) (direct-checked-gates:jibb ds env)
137+ =/ evidence=(unit igate-prelude-evidence:jibb) (direct-prelude-evidence:jibb ds `iface)
138+ ?> ?=(^ evidence)
139+ =/ st=istate:jibb *istate:jibb
140+ =. st st(globals ~[%apply %target %main], prelude `iface, gate-defs registry, head-evidence evidence, next 10)
141+ =/ good=(unit ifit:jibb) (direct-gate-call-fit:jibb expr actual expected-sample env st)
142+ =/ bad=(unit ifit:jibb) (direct-gate-call-fit:jibb expr actual expected-sample env st(prelude `stale))
143+ =/ dupe-evidence=(unit igate-prelude-evidence:jibb) (direct-prelude-evidence:jibb ds `dup)
144+ =/ head=(unit def:jibb) (~(get by gates.u.evidence) %apply)
145+ ?> ?=(^ head)
146+ =/ head-sample=(unit sample:jibb) (direct-gate-sample:jibb u.head)
147+ ?> ?=(^ head-sample)
148+ ?> ?=(%cell -.u.head-sample)
149+ ?> ?=(%call -.expr)
150+ =/ pos=ifit:jibb (direct-positional-fit:jibb args.expr items.u.head-sample actual expected-sample env st ~ 10)
151+ =/ checks=(list @t)
152+ :~
153+ ?: ?=(%ok -.pos)
154+ ?:((itype-positional-slot-face-asym:jibb [%face %foo [%var 0]] [%face %foo [%var 0]] sub.pos) 'LATE-FACE-ASYMMETRY' 'symmetric-after-later-binding')
155+ 'no-positional-fit'
156+ ?:(?=(%ok -.pos) 'positional-fit-ok' 'BAD-positional-fit')
157+ ?:(?=(^ good) 'original-evidence-usable' 'BAD-original-evidence')
158+ ?: &(?=(~ bad) =(source.iface source.stale) =(at.iface at.stale) !=(values.iface values.stale))
159+ 'changed-value-scheme-rejected'
160+ 'BAD-stale-evidence'
161+ ?:(?=(~ dupe-evidence) 'duplicate-source-rejected' 'BAD-duplicate-source')
162+ ==
163+
164+ ?: =(checks ~['symmetric-after-later-binding' 'positional-fit-ok' 'original-evidence-usable' 'changed-value-scheme-rejected' 'duplicate-source-rejected']) ~
165+ ~["symmetric-face-errors direct gate guard failed"]
166+++ direct-gate-guard-errors
167+ ^- (list tape)
168+ (weld direct-evidence-errors (weld late-face-errors symmetric-face-errors))
169+++ test-direct-gate-guards
170+ ^- tang
171+ (turn direct-gate-guard-errors |=(reason=tape leaf+reason))
172+--
tests/lib/jibb-direct-gate-source.hoonnew file+46
@@ -0,0 +1,46 @@
1+:: Exercise direct-source gate layouts through a synthetic program scaffold.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* source %txt /tests/type-direct-gate/source/txt
6+/* expected %txt /tests/type-direct-gate/expected/txt
7+|%
8+++ text
9+ |= lines=wain
10+ ^- @t
11+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
12+++ direct-gate-prepared
13+ |= [prelude=@t internal=@t]
14+ ^- (unit iprelude:jibb)
15+ :: This element is test-only; it does not prescribe a runtime shape.
16+ =/ extra=@t '\0a+$ element |$ [M] [%node item=M]\0a+$ program |$ [D X M]\0a [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]\0a++ program |= [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]\0a ^- (program D X M) [init update view subs]\0a++ choose-layout |= [f=$-([A B] C) value=[A B]] (f value)\0a++ higher |= [f=$-([@t [x=@t y=@p]] @t) marker=?] f\0a++ higher-generic |= [f=$-([@t X] X) state=X] state\0a'
17+ (prepare-prelude-with-internal:jibb (cat 3 prelude extra) internal)
18+++ direct-gate-source-output
19+ |= [src=@t prepared=(unit iprelude:jibb)]
20+ ^- @t
21+ (golden-types-with-prepared-prelude:jibb /tests/sub/client/jibb src ~ ~ ~ prepared)
22+++ direct-gate-projection-errors
23+ |= prepared=(unit iprelude:jibb)
24+ ^- (list tape)
25+ ?~ prepared ~["synthetic prelude did not prepare"]
26+ =/ src=@t '+$ message\0a %start\0a %stop\0a+$ record [count=@ud label=@t]\0a++ init-record |= input=@t ^- record [count=0 label=input]\0a++ view-record |= state=record ^- (element message) [%node %start]\0a++ subs-record |= state=record ^- (list (sub message)) ~\0a++ update-proj-good |= [msg=message state=record]\0a ^- [record (list (cmd message))]\0a [(proj [count=0 label="projected" extra=%.y]) ~]\0a++ program-projection (program init-record update-proj-good view-record subs-record)\0a'
27+ =/ out=jfile-result:jibb (infer-jibb-file:jibb /tests/direct/client/jibb src ~ ~ ~ ~[/tests/direct/client/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
28+ ?: ?=(%| -.out) ~["projection-bearing module did not infer"]
29+ =/ defs=(list iwidth-definition:jibb) (skim elaborations.iface.p.out |=(d=iwidth-definition:jibb =(%update-proj-good name.d)))
30+ ?~ defs ~["projection-bearing update lost its elaboration"]
31+ ?~ projections.i.defs ~["projection action is missing"]
32+ ?: !=(1 (lent projections.i.defs)) ~["unexpected projection action count"]
33+ ?. =(steps.i.projections.i.defs ~[[%count 2] [%label 6]]) ~["projection axes changed"]
34+ ~
35+++ test-direct-gate-source
36+ ^- tang
37+ ?~ source ~[leaf+"direct gate source is missing"]
38+ ?~ expected ~[leaf+"direct gate expected output is missing"]
39+ =/ prepared=(unit iprelude:jibb) (direct-gate-prepared real-prelude real-internal)
40+ =/ errors=(list tape) (direct-gate-projection-errors prepared)
41+ ?^ errors (turn errors |=(reason=tape leaf+reason))
42+ =/ got=@t (direct-gate-source-output (text source) prepared)
43+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
44+ ~[leaf+"direct gate source output differs from its golden"]
45+ ~
46+--
tests/lib/jibb-gate-free-guards.hoonnew file+79
@@ -0,0 +1,79 @@
1+:: Budgeted gate-free verdicts require a witness and an inhabited sibling.
2+/+ jibb
3+|%
4+++ gate-free-guard-errors
5+ ^- (list tape)
6+ =/ atom=itype:jibb [%atom %t]
7+ =/ flag=itype:jibb [%flag ~]
8+ =/ noun=itype:jibb [%noun ~]
9+ =/ var=itype:jibb [%var 0]
10+ =/ gate=itype:jibb [%fn atom atom]
11+ =/ item=itype:jibb [%cell [%face %id [%atom %ud]] [%cell [%face %done flag] [%face %text atom]]]
12+ =/ model=itype:jibb [%cell [%face %todos [%collection %list ~[item]]] [%cell [%face %draft atom] [%face %error [%union ~[[%const [%null %n 0 '~']] [%cell [%const [%null %n 0 '~']] [%face %u atom]]] ~ ~ ~]]]]
13+ =/ with-callback=itype:jibb [%cell [%face %data atom] [%face %callback gate]]
14+ =/ ask-like=itype:jibb [%union ~[[%cell [%const [%term %tas %pure '%pure']] [%face %value atom]] [%cell [%const [%term %tas %agent '%agent']] [%face %receive gate]]] ~ ~ ~]
15+ =/ sub-like=itype:jibb [%union ~[[%cell [%const [%term %tas %watch '%watch']] [%face %request ask-like]] [%cell [%const [%term %tas %every '%every']] [%face %reply gate]]] ~ ~ ~]
16+ =/ controls=(list [name=@t typ=itype:jibb fuel=@ud want=?(%yes %no %unknown)])
17+ :~ ['atom' atom 8 %yes]
18+ ['flag' flag 8 %yes]
19+ ['atom variable' [%avar 0] 8 %yes]
20+ ['open variable' var 8 %unknown]
21+ ['noun' noun 8 %unknown]
22+ ['raw gate' gate 8 %no]
23+ ['data item' item 30 %yes]
24+ ['todo model' model 100 %yes]
25+ ['callback field' with-callback 30 %no]
26+ ['ask receiver' ask-like 100 %no]
27+ ['subscription receiver' sub-like 100 %no]
28+ ['list of data items' [%collection %list ~[item]] 40 %yes]
29+ ['list of gates' [%collection %list ~[gate]] 20 %no]
30+ ['other collection' [%collection %map ~[atom atom]] 20 %unknown]
31+ ['open list member' [%collection %list ~[var]] 20 %unknown]
32+ ['known-inhabited noun after gate' [%cell gate noun] 30 %no]
33+ ['known-inhabited noun before gate' [%cell noun gate] 30 %no]
34+ ['unknown sibling after gate' [%cell gate var] 30 %unknown]
35+ ['unknown sibling before gate' [%cell var gate] 30 %unknown]
36+ ['nested unknown sibling' [%cell [%face %callback gate] [%face %other var]] 30 %unknown]
37+ ['unknown union and gate union' [%union ~[var gate] ~ ~ ~] 30 %no]
38+ ['empty union' [%union ~ ~ ~ ~] 30 %unknown]
39+ ['validated jrec qath' [%jrec /lib/jibb/internal/jibb %qath ~ %i %ta %t] 30 %yes]
40+ ['jrec gate sibling' [%cell gate [%jrec /lib/jibb/internal/jibb %qath ~ %i %ta %t]] 30 %no]
41+ ['jrec list member' [%collection %list ~[[%jrec /lib/jibb/internal/jibb %qath ~ %i %ta %t]]] 30 %yes]
42+ ['nominal recursion' [%recursive %sur %node ~] 30 %unknown]
43+ ['unknown sibling budget' [%cell gate var] 2 %unknown]
44+ ['known sibling budget' [%cell gate atom] 2 %unknown]
45+ ['zero budget' atom 0 %unknown]
46+ ['one atom budget' atom 1 %yes]
47+ ['cell needs 3 visits' [%cell atom flag] 2 %unknown]
48+ ['cell exact 3 visits' [%cell atom flag] 3 %yes]
49+ ==
50+ =/ errors=(list @t)
51+ %+ turn controls
52+ |= c=[name=@t typ=itype:jibb fuel=@ud want=?(%yes %no %unknown)]
53+ =/ result=igate-free:jibb (gate-free-type:jibb typ.c fuel.c ~)
54+ ?: =(want.c verdict.result) ''
55+ (cat 3 name.c ': wrong verdict')
56+ =/ a=igate-free:jibb (gate-free-type:jibb with-callback 30 ~)
57+ =? errors !=(path.a `~[[%tail ~] [%field %callback]]) ['callback path incorrect' errors]
58+ =/ b=igate-free:jibb (gate-free-type:jibb [%collection %list ~[gate]] 20 ~)
59+ =? errors !=(path.b `~[[%item ~]]) ['list path incorrect' errors]
60+ =/ c=igate-free:jibb (gate-free-type:jibb model 100 ~)
61+ =? errors ?=(^ path.c) ['gate-free result carries witness path' errors]
62+ :: The explicit budget is shared across the entire normalized type.
63+ =/ deep
64+ |= depth=@ud
65+ ^- itype:jibb
66+ =/ out=itype:jibb [%atom %t]
67+ |-
68+ ?: =(0 depth) out
69+ $(depth (dec depth), out [%face %nested out])
70+ =/ fits=igate-free:jibb (gate-free-type:jibb (deep 255) 256 ~)
71+ =/ exceeds=igate-free:jibb (gate-free-type:jibb (deep 256) 256 ~)
72+ =? errors !=(%yes verdict.fits) ['256 node budget rejected exact fit' errors]
73+ =? errors !=(%unknown verdict.exceeds) ['257 node budget did not fail closed' errors]
74+ =/ errors (skim errors |=(x=@t !=(x '')))
75+ (turn errors trip)
76+++ test-gate-free-guards
77+ ^- tang
78+ (turn gate-free-guard-errors |=(reason=tape leaf+reason))
79+--
tests/lib/jibb-gate-free-source.hoonnew file+95
@@ -0,0 +1,95 @@
1+:: Source-backed mold analysis of the actual todo model; not island checking.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+/* source %txt /tests/type-gate-free/todo/txt
12+/* gate-source %txt /tests/type-gate-free/todo-gate/txt
13+/* noun-source %txt /tests/type-gate-free/todo-noun/txt
14+/* expected %txt /tests/type-gate-free/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ gate-free-source-report
21+ |= [public=@t private=@t sur-text=@t action-text=@t todos-text=@t update-text=@t item-text=@t api-text=@t source-text=@t gate-text=@t noun-text=@t]
22+ ^- @t
23+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
24+ ?~ prepared 'prelude unavailable'
25+ =/ todo=type -:(ride -:!>(..zuse) sur-text)
26+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
27+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action-text))
28+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos-text))
29+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update-text))
30+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item-text))
31+ =/ marks=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
32+ =/ item-input=* (read-named:jibb-import %todo %item todo)
33+ =/ inputs=iexternals:jibb ~[[%todo %item item-input]]
34+ =/ modules=jbundle:jibb ~[[/ui/api/todo/jibb api-text]]
35+ =/ at=path /ui/todo-list/jibb
36+ =/ model (gate-free-mold-source:jibb at source-text %model inputs marks modules prepared 256)
37+ ?: ?=(%| -.model) 'todo model unavailable'
38+ ?. =(%yes verdict.result.p.model) 'todo model not proven gate-free'
39+ ?. &(=(at.p.model at) =(source.p.model source-text) =(name.p.model %model) =(prepared.p.model u.prepared) =(externals.p.model inputs) =(marks.p.model marks) =(modules.p.model modules)) 'source evidence changed'
40+ ?~ dependencies.p.model 'resolved dependency evidence missing'
41+ ?. ?=(%cell -.typ.mold.p.model) 'selected model scheme missing'
42+ ?. &(=(256 requested.p.model) =(256 budget.p.model)) 'requested budget not retained'
43+ =/ callback (gate-free-mold-source:jibb at gate-text %model inputs marks modules prepared 256)
44+ ?: ?=(%| -.callback) 'callback model unavailable'
45+ ?. =(%no verdict.result.p.callback) 'callback was not found'
46+ ?~ path.result.p.callback 'callback path missing'
47+ ?. (lien u.path.result.p.callback |=(part=igf-segment:jibb ?=([%field %callback] part))) 'callback field not in witness'
48+ =/ noun (gate-free-mold-source:jibb at noun-text %model inputs marks modules prepared 256)
49+ ?: ?=(%| -.noun) 'noun model unavailable'
50+ ?. =(%unknown verdict.result.p.noun) 'noun model not unknown'
51+ =/ tiny=@t '+$ sample @t\0a'
52+ =/ low (gate-free-mold-source:jibb /tests/tiny/jibb tiny %sample ~ ~ ~ prepared 0)
53+ ?: ?=(%| -.low) 'zero fuel unavailable'
54+ ?. &(=(%unknown verdict.result.p.low) =(0 budget.p.low)) 'zero fuel not unknown'
55+ =/ capped (gate-free-mold-source:jibb /tests/tiny/jibb tiny %sample ~ ~ ~ prepared 999)
56+ ?: ?=(%| -.capped) 'large fuel unavailable'
57+ ?. &(=(999 requested.p.capped) =(256 budget.p.capped) =(%yes verdict.result.p.capped) =(255 left.result.p.capped)) 'fuel cap incorrect'
58+ =/ matched (gate-free-mold-source:jibb /tests/tiny/jibb tiny %sample ~ ~ ~[[/tests/tiny/jibb tiny]] prepared 256)
59+ ?: ?=(%| -.matched) 'matching root source rejected'
60+ =/ unused-sur=@t '/- unused\0a+$ sample @t\0a'
61+ =/ unused (gate-free-mold-source:jibb /tests/tiny/jibb unused-sur %sample ~ ~ ~ prepared 256)
62+ ?: ?=(%| -.unused) 'unused sur source unexpectedly required'
63+ =/ cycle-source=@t '/= child /tests/child\0a+$ sample @t\0a'
64+ =/ child-source=@t '/= root /tests/tiny\0a+$ child @t\0a'
65+ =/ cycle (gate-free-mold-source:jibb /tests/tiny/jibb cycle-source %sample ~ ~ ~[[/tests/child/jibb child-source]] prepared 256)
66+ ?. ?=(%| -.cycle) 'root import cycle accepted'
67+ =/ unprepared (gate-free-mold-source:jibb /tests/tiny/jibb tiny %sample ~ ~ ~ ~ 256)
68+ ?. ?=(%| -.unprepared) 'missing prelude accepted'
69+ =/ cases=(list [name=@t path=path src=@t mold=term external=iexternals:jibb mark=imark-externals:jibb bundle=jbundle:jibb])
70+ :~ ['missing mold' at source-text %missing inputs marks modules]
71+ ['missing API' at source-text %model inputs marks ~]
72+ ['missing mark' at source-text %model inputs (skim marks |=(m=[mark=term result=*] !=(%todo-update mark.m))) modules]
73+ ['root mismatch' at source-text %model inputs marks [[at gate-text] modules]]
74+ ['duplicate root' at source-text %model inputs marks [[at source-text] [at source-text] modules]]
75+ ['duplicate field' at (cat 3 source-text '\0a+$ duplicate [x=@t x=@p]\0a') %model inputs marks modules]
76+ ['invalid syntax' at '++ incomplete |=' %model inputs marks modules]
77+ ['private root' /lib/jibb/internal/jibb source-text %model inputs marks modules]
78+ ['API root' /ui/api/todo/jibb source-text %model inputs marks modules]
79+ ['store root poke' /ui/stores/cart/jibb '+$ poke @t\0a' %poke ~ ~ ~]
80+ ==
81+ =/ errors=(list @t)
82+ %+ turn cases
83+ |= c=[name=@t path=path src=@t mold=term external=iexternals:jibb mark=imark-externals:jibb bundle=jbundle:jibb]
84+ =/ got (gate-free-mold-source:jibb path.c src.c mold.c external.c mark.c bundle.c prepared 256)
85+ ?: ?=(%| -.got) ''
86+ (cat 3 name.c ': unexpectedly succeeded')
87+ =/ errors (skim errors |=(x=@t !=(x '')))
88+ ?^ errors (of-wain:format errors)
89+ 'todo model: gate-free\0acallback model: gate at callback\0anoun model: unknown\0azero fuel: unknown\0aoversized fuel: capped\0ainvalid inputs: rejected\0asource evidence: retained\0amatching root and unused sur: accepted\0aroot import cycle: rejected'
90+++ test-gate-free-source
91+ ^- tang
92+ =/ actual (gate-free-source-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source) (text gate-source) (text noun-source))
93+ ?. =((to-wain:format (cat 3 actual '\0a')) expected) ~[leaf+"gate-free mold report differs from expected"]
94+ ~
95+--
tests/lib/jibb-generic-construction.hoonnew file+141
@@ -0,0 +1,141 @@
1+:: Source-proven generic tree construction; not a backend/runtime test.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* tree %txt /tests/type-generic-construction/tree/txt
6+/* alias %txt /tests/type-generic-construction/alias/txt
7+/* client %txt /tests/type-generic-construction/client/txt
8+/* alias-client %txt /tests/type-generic-construction/alias-client/txt
9+/* tree-no-event %txt /tests/type-generic-construction/tree-no-event/txt
10+/* no-event-client %txt /tests/type-generic-construction/no-event-client/txt
11+/* owner-positive %txt /tests/type-generic-construction/owner-positive/txt
12+/* owner-negative %txt /tests/type-generic-construction/owner-negative/txt
13+/* sibling-values %txt /tests/type-generic-construction/sibling-values/txt
14+/* expected %txt /tests/type-generic-construction/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ line
21+ |= [label=@t ok=?]
22+ ^- @t
23+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
24+++ construction-output
25+ |= [pre=@t internal=@t tree=@t alias=@t client=@t alias-client=@t tree-no-event=@t no-event-client=@t owner-positive=@t owner-negative=@t sibling-values=@t]
26+ ^- @t
27+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
28+ ?~ prep 'BAD prelude preparation'
29+ :: Complete owner is checked by the real source interface, not this unit state.
30+ =/ owner=jfile-result:jibb
31+ (infer-jibb-file:jibb /ui/tree/jibb owner-positive ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
32+ ?: ?=(%| -.owner) 'BAD valid owner'
33+ =/ bad-owner=jfile-result:jibb
34+ (infer-jibb-file:jibb /ui/tree/jibb owner-negative ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35+ =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-negative)
36+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.owner)
37+ ?~ mold 'BAD owner mold'
38+ ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
39+ =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
40+ =/ target=itype:jibb typ.u.mold(args ~[[%atom %t]])
41+ ?> ?=(%grec -.generic)
42+ ?> ?=(%grec -.target)
43+ =/ owner-leaf=(unit ischeme:jibb) (ienv-lookup:jibb %made-leaf values.iface.p.owner)
44+ =/ owner-node=(unit ischeme:jibb) (ienv-lookup:jibb %made-node values.iface.p.owner)
45+ =/ leaf-ok=? ?~(owner-leaf | &(?=(~ vars.u.owner-leaf) =(target typ.u.owner-leaf)))
46+ =/ node-ok=? ?~(owner-node | &(?=(~ vars.u.owner-node) =(target typ.u.owner-node)))
47+ =/ foreign=itype:jibb target(at /ui/foreign/jibb)
48+ =/ view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb generic 2)
49+ ?~ view 'BAD generic view'
50+ =/ target-view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb target 2)
51+ ?~ target-view 'BAD target view'
52+ =/ expected-leaf=itype:jibb [%cell [%const [%term %tas %text '%text']] [%face %value [%atom %t]]]
53+ =/ expected-node=itype:jibb [%cell [%const [%term %tas %node '%node']] [%cell [%face %event [%fn [%atom %t] [%var 42]]] [%face %children [%collection %list ~[generic]]]]]
54+ =/ expected-view=itype:jibb [%union ~[expected-leaf expected-node] ~ ~ ~]
55+ =/ wrong-view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb foreign 2)
56+ =/ malformed=shape:jibb *shape:jibb
57+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/tree/values/jibb sibling-values)
58+ ?: ?=(%| -.parsed) 'BAD values parse'
59+ =/ ds=(list def:jibb) defs.p.parsed
60+ ?. ?=([* [* [* [* ~]]]] ds) 'BAD values count'
61+ =/ a=def:jibb i.ds
62+ =/ b=def:jibb i.t.ds
63+ =/ c=def:jibb i.t.t.ds
64+ =/ d=def:jibb i.t.t.t.ds
65+ ?. &(?=(%value -.a) ?=(%value -.b) ?=(%value -.c) ?=(%value -.d)) 'BAD value declarations'
66+ =/ env=ienv:jibb ~[[%text-event [[%fn [%atom %t] [%atom %t]] ~]]]
67+ =/ tag=ipending:jibb [100 [%term %tas %unrelated '%unrelated']]
68+ =/ projection=iwprojection:jibb *iwprojection:jibb
69+ =/ st=istate:jibb *istate:jibb
70+ =. st st(next 201, prelude `iface.u.prep, tags ~[tag], holes ~[[99 (span-of:jibb val.a)]], projections ~[projection])
71+ =/ r0=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 0) (span-of:jibb val.a))
72+ =/ r1=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 1) (span-of:jibb val.a))
73+ =/ rnode=iresult:jibb (infer-call-context-arg:jibb val.b target env st(jrec-fuel 1) (span-of:jibb val.b))
74+ =/ short=iresult:jibb (infer-call-context-arg:jibb val.c target env st(jrec-fuel 1) (span-of:jibb val.c))
75+ =/ nested=iresult:jibb (infer-call-context-arg:jibb val.c target env st(jrec-fuel 2) (span-of:jibb val.c))
76+ =/ sibling-short=iresult:jibb (infer-call-context-arg:jibb val.d target env st(jrec-fuel 2) (span-of:jibb val.d))
77+ =/ siblings=iresult:jibb (infer-call-context-arg:jibb val.d target env st(jrec-fuel 3) (span-of:jibb val.d))
78+ =/ retry=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 1) (span-of:jibb val.a))
79+ =/ failed-retry=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 0) (span-of:jibb val.a))
80+ =/ rvar=iresult:jibb (infer-call-context-arg:jibb val.b generic env st(jrec-fuel 1) (span-of:jibb val.b))
81+ =/ hidden=istate:jibb st(sub ~[[200 target]], jrec-fuel 2)
82+ =/ rhidden=iresult:jibb (infer-call-context-arg:jibb val.a [%var 200] env hidden (span-of:jibb val.a))
83+ =/ hidden-safe=?
84+ ?: ?=(%| -.rhidden) &
85+ =/ fit=ifit:jibb (itype-fit:jibb typ.p.rhidden [%var 200] sub.state.p.rhidden next.state.p.rhidden)
86+ ?=(%unknown -.fit)
87+ =/ exact=isub:jibb (turn (gulf 1 4.096) |=(n=@ud [(add 1.000 n) [%atom %t]]))
88+ =/ over=isub:jibb [[9.999 [%atom %t]] exact]
89+ =/ face-exact=isub:jibb (turn (gulf 1 4.095) |=(n=@ud [(add 1.000 n) [%atom %t]]))
90+ =/ checks=(list [label=@t ok=?])
91+ :~ ['complete owner' ?=(%& -.owner)]
92+ ['owner exports constructed nominal values' &(leaf-ok node-ok)]
93+ ['invalid owner declined' &(?=(%& -.bad-parse) ?=(%| -.bad-owner))]
94+ ['view spends one step' =(1 left.u.view)]
95+ ['view retains argument and child identity' =(expected-view view.u.view)]
96+ ['zero view fuel declined' ?=(~ (grec-unfold-view:jibb generic 0))]
97+ ['malformed proof declined' ?=(~ (grec-unfold-view:jibb generic(proof malformed) 2))]
98+ ['foreign recursive tail retained' ?:(?=(~ wrong-view) | !=(view.u.wrong-view view.u.target-view))]
99+ ['zero inference fuel declined' ?=(%| -.r0)]
100+ ['one-step leaf retains nominal identity' ?:(?=(%& -.r1) &(=(target typ.p.r1) =(0 jrec-fuel.state.p.r1)) |)]
101+ ['one-step node succeeds' ?:(?=(%& -.rnode) &(=(target typ.p.rnode) =(0 jrec-fuel.state.p.rnode)) |)]
102+ ['nested one-step declined' ?=(%| -.short)]
103+ ['nested two-step succeeds' ?:(?=(%& -.nested) &(=(target typ.p.nested) =(0 jrec-fuel.state.p.nested)) |)]
104+ ['siblings share fuel' &(?=(%| -.sibling-short) ?:(?=(%& -.siblings) =(0 jrec-fuel.state.p.siblings) |))]
105+ ['same-state retry agrees' =(r1 retry)]
106+ ['failed retry agrees' =(r0 failed-retry)]
107+ ['argument binding retains source identity' ?:(?=(%& -.rvar) =(target (itype-normalize:jibb typ.p.rvar sub.state.p.rvar)) |)]
108+ ['pending tag retained' ?:(?=(%& -.r1) (lien tags.state.p.r1 |=(entry=ipending:jibb =(entry tag))) |)]
109+ ['pending hole retained' ?:(?=(%& -.r1) =(holes.st holes.state.p.r1) |)]
110+ ['projection evidence retained' ?:(?=(%& -.r1) =(projections.st projections.state.p.r1) |)]
111+ ['hidden variable declined' hidden-safe]
112+ ['scan exact limit' (grec-direct-context:jibb target exact)]
113+ ['scan over limit declined' !(grec-direct-context:jibb target over)]
114+ ['faced scan exact limit' (grec-direct-context:jibb [%face %field target] face-exact)]
115+ ['faced scan over limit declined' !(grec-direct-context:jibb [%face %field target] exact)]
116+ ['structural substitution declined' !(grec-direct-context:jibb target ~[[9 [%cell [%atom %t] [%atom %t]]]])]
117+ ==
118+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
119+ =/ small=jbundle:jibb ~[[/ui/tree/jibb tree-no-event] [/ui/tree-two/jibb tree-no-event]]
120+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
121+ =/ aliases=@t (golden-types-with-prepared-prelude:jibb /tests/tree/alias-client/jibb alias-client ~ ~ modules prep)
122+ =/ no-event=@t (golden-types-with-prepared-prelude:jibb /tests/tree/no-event-client/jibb no-event-client ~ ~ small prep)
123+ (cat 3 (of-wain:format (turn checks line)) (cat 3 '\0a' (cat 3 report (cat 3 '\0a' (cat 3 aliases (cat 3 '\0a' no-event))))))
124+++ test-generic-construction
125+ ^- tang
126+ ?~ tree ~[leaf+"tree source missing"]
127+ ?~ alias ~[leaf+"alias source missing"]
128+ ?~ client ~[leaf+"client source missing"]
129+ ?~ alias-client ~[leaf+"alias client missing"]
130+ ?~ tree-no-event ~[leaf+"tree without event missing"]
131+ ?~ no-event-client ~[leaf+"no-event client missing"]
132+ ?~ owner-positive ~[leaf+"owner source missing"]
133+ ?~ owner-negative ~[leaf+"invalid owner source missing"]
134+ ?~ sibling-values ~[leaf+"sibling source missing"]
135+ ?~ expected ~[leaf+"expected output missing"]
136+ =/ actual=@t
137+ (construction-output real-prelude real-internal (text tree) (text alias) (text client) (text alias-client) (text tree-no-event) (text no-event-client) (text owner-positive) (text owner-negative) (text sibling-values))
138+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
139+ ~[leaf+"generic construction output differs from expected"]
140+ ~
141+--
tests/lib/jibb-generic-pattern.hoonnew file+132
@@ -0,0 +1,132 @@
1+:: Source-proven generic recursive patterns; no backend/runtime claim.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* tree %txt /tests/type-generic-construction/tree/txt
6+/* alias %txt /tests/type-generic-construction/alias/txt
7+/* tree-no-event %txt /tests/type-generic-construction/tree-no-event/txt
8+/* client %txt /tests/type-generic-pattern/client/txt
9+/* no-event %txt /tests/type-generic-pattern/no-event/txt
10+/* values %txt /tests/type-generic-pattern/values/txt
11+/* poly-values %txt /tests/type-generic-pattern/poly-values/txt
12+/* owner %txt /tests/type-generic-pattern/owner/txt
13+/* owner-bad %txt /tests/type-generic-pattern/owner-bad/txt
14+/* expected %txt /tests/type-generic-pattern/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ line
21+ |= [label=@t ok=?]
22+ ^- @t
23+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
24+++ pattern-output
25+ |= [pre=@t internal=@t tree=@t alias=@t tree-no-event=@t client=@t no-event=@t values=@t poly-values=@t owner=@t owner-bad=@t]
26+ ^- @t
27+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
28+ ?~ prep 'BAD prelude preparation'
29+ =/ checked=jfile-result:jibb
30+ (infer-jibb-file:jibb /ui/tree/jibb owner ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
31+ ?: ?=(%| -.checked) 'BAD valid owner'
32+ =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-bad)
33+ =/ bad=jfile-result:jibb
34+ (infer-jibb-file:jibb /ui/tree/jibb owner-bad ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.checked)
36+ ?~ mold 'BAD owner mold'
37+ ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
38+ =/ target=itype:jibb typ.u.mold(args ~[[%atom %t]])
39+ =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
40+ ?> ?=(%grec -.target)
41+ ?> ?=(%grec -.generic)
42+ =/ desc=(unit ischeme:jibb) (ienv-lookup:jibb %describe values.iface.p.checked)
43+ =/ children=(unit ischeme:jibb) (ienv-lookup:jibb %children values.iface.p.checked)
44+ =/ rebuild=(unit ischeme:jibb) (ienv-lookup:jibb %rebuild values.iface.p.checked)
45+ ?~ desc 'BAD owner describe missing'
46+ ?~ children 'BAD owner children missing'
47+ ?~ rebuild 'BAD owner rebuild missing'
48+ ?. &(?=(%fn -.typ.u.desc) ?=(%fn -.typ.u.children) ?=(%fn -.typ.u.rebuild)) 'BAD owner gate types'
49+ ?. ?=([@ ~] vars.u.children) 'BAD owner children quantification'
50+ =/ desc-sample=itype:jibb sample.typ.u.desc
51+ =/ children-sample=itype:jibb sample.typ.u.children
52+ =/ rebuild-sample=itype:jibb sample.typ.u.rebuild
53+ =? desc-sample ?=(%face -.desc-sample) body.desc-sample
54+ =? children-sample ?=(%face -.children-sample) body.children-sample
55+ =? rebuild-sample ?=(%face -.rebuild-sample) body.rebuild-sample
56+ =/ quantified=itype:jibb typ.u.mold(args ~[[%var i.vars.u.children]])
57+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/tree/values/jibb values)
58+ ?: ?=(%| -.parsed) 'BAD values parse'
59+ =/ ds=(list def:jibb) defs.p.parsed
60+ ?. ?=([* [* ~]] ds) 'BAD value count'
61+ =/ a=def:jibb i.ds
62+ =/ b=def:jibb i.t.ds
63+ ?. &(?=(%value -.a) ?=(%value -.b)) 'BAD value declarations'
64+ =/ parsed-poly=(each module:jibb error:jibb) (parse:jibb /tests/tree/poly/jibb poly-values)
65+ ?: ?=(%| -.parsed-poly) 'BAD polymorphic values parse'
66+ =/ ps=(list def:jibb) defs.p.parsed-poly
67+ ?. ?=([* ~] ps) 'BAD polymorphic value count'
68+ =/ p=def:jibb i.ps
69+ ?. ?=(%value -.p) 'BAD polymorphic value'
70+ ?. ?=(%branch -.val.p) 'BAD polymorphic branch'
71+ =/ env=ienv:jibb ~[[%x [target ~]]]
72+ =/ poly=ienv:jibb ~[[%x [generic ~[42]]]]
73+ =/ tag=ipending:jibb [100 [%term %tas %unrelated '%unrelated']]
74+ =/ projection=iwprojection:jibb *iwprojection:jibb
75+ =/ st=istate:jibb *istate:jibb
76+ =. st st(next 201, prelude `iface.u.prep, tags ~[tag], holes ~[[99 (span-of:jibb val.a)]], projections ~[projection])
77+ =/ zero=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 0))
78+ =/ one=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 1))
79+ =/ short=iresult:jibb (infer-fragment:jibb val.b env st(jrec-fuel 1))
80+ =/ nested=iresult:jibb (infer-fragment:jibb val.b env st(jrec-fuel 2))
81+ =/ retry=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 1))
82+ =/ hidden=ienv:jibb ~[[%x [[%var 200] ~]]]
83+ =/ hidden-result=iresult:jibb (infer-fragment:jibb val.a hidden st(sub ~[[200 target]], jrec-fuel 2))
84+ =/ first=(unit iresult:jibb) (grec-single-wing-subject:jibb subject.val.p poly st(jrec-fuel 4))
85+ =/ second=(unit iresult:jibb) (grec-single-wing-subject:jibb subject.val.p poly st(next 202, jrec-fuel 4))
86+ ?~ first 'BAD first scheme lookup'
87+ ?~ second 'BAD second scheme lookup'
88+ ?. &(?=(%& -.u.first) ?=(%& -.u.second)) 'BAD scheme inference'
89+ =/ ft=itype:jibb typ.p.u.first
90+ =/ stype=itype:jibb typ.p.u.second
91+ ?. &(?=(%grec -.ft) ?=(%grec -.stype)) 'BAD scheme nominal identity'
92+ ?. &(?=([* ~] args.ft) ?=([* ~] args.stype)) 'BAD scheme argument count'
93+ =/ pmissing=iresult:jibb (infer-fragment:jibb val.p poly st(jrec-fuel 4))
94+ =/ checks=(list [label=@t ok=?])
95+ :~ ['owner describe has nominal sample and text result' &(=(target desc-sample) =([%atom %t] product.typ.u.desc))]
96+ ['owner rebuild preserves nominal identity' &(=(target rebuild-sample) =(target product.typ.u.rebuild))]
97+ ['owner children preserves quantified recursive identity' &(=(quantified children-sample) =([%collection %list ~[quantified]] product.typ.u.children))]
98+ ['invalid owner parses and is rejected' &(?=(%& -.bad-parse) ?=(%| -.bad))]
99+ ['zero fuel declined' ?=(%| -.zero)]
100+ ['one-step match' ?:(?=(%& -.one) &(=([%atom %t] typ.p.one) =(0 jrec-fuel.state.p.one)) |)]
101+ ['nested match requires two steps' &(?=(%| -.short) ?:(?=(%& -.nested) =(0 jrec-fuel.state.p.nested) |))]
102+ ['same-state retry agrees' =(one retry)]
103+ ['pending tag retained' ?:(?=(%& -.one) (lien tags.state.p.one |=(entry=ipending:jibb =(entry tag))) |)]
104+ ['pending hole retained' ?:(?=(%& -.one) =(holes.st holes.state.p.one) |)]
105+ ['projection evidence retained' ?:(?=(%& -.one) =(projections.st projections.state.p.one) |)]
106+ ['raw bound variable declined' ?=(%| -.hidden-result)]
107+ ['polymorphic scheme gets fresh identities' &(=([%var 201] i.args.ft) =([%var 202] i.args.stype) =(at.ft at.stype) =(name.ft name.stype) =(proof.ft proof.stype))]
108+ ['polymorphic missing arm declined' ?=(%| -.pmissing)]
109+ ==
110+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
111+ =/ small=jbundle:jibb ~[[/ui/tree/jibb tree-no-event]]
112+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
113+ =/ noreport=@t (golden-types-with-prepared-prelude:jibb /tests/tree/no-event/jibb no-event ~ ~ small prep)
114+ (cat 3 (of-wain:format (turn checks line)) (cat 3 '\0a' (cat 3 report (cat 3 '\0a' noreport))))
115+++ test-generic-pattern
116+ ^- tang
117+ ?~ tree ~[leaf+"tree source missing"]
118+ ?~ alias ~[leaf+"alias source missing"]
119+ ?~ tree-no-event ~[leaf+"tree without event missing"]
120+ ?~ client ~[leaf+"client source missing"]
121+ ?~ no-event ~[leaf+"no-event client missing"]
122+ ?~ values ~[leaf+"values source missing"]
123+ ?~ poly-values ~[leaf+"polymorphic values source missing"]
124+ ?~ owner ~[leaf+"owner source missing"]
125+ ?~ owner-bad ~[leaf+"invalid owner source missing"]
126+ ?~ expected ~[leaf+"expected output missing"]
127+ =/ actual=@t
128+ (pattern-output real-prelude real-internal (text tree) (text alias) (text tree-no-event) (text client) (text no-event) (text values) (text poly-values) (text owner) (text owner-bad))
129+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
130+ ~[leaf+"generic pattern output differs from expected"]
131+ ~
132+--
tests/lib/jibb-generic-recursion.hoonnew file+170
@@ -0,0 +1,170 @@
1+:: Source-backed recursive identities; this is not a runtime element model.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* tree %txt /tests/type-generic-recursion/tree/txt
6+/* changed %txt /tests/type-generic-recursion/tree-changed/txt
7+/* alias %txt /tests/type-generic-recursion/alias/txt
8+/* client %txt /tests/type-generic-recursion/client/txt
9+/* bad-mold %txt /tests/type-generic-recursion/bad-mold/txt
10+/* bad-constructor %txt /tests/type-generic-recursion/bad-constructor/txt
11+/* bad-parameter %txt /tests/type-generic-recursion/bad-parameter/txt
12+/* local-shadow %txt /tests/type-generic-recursion/local-shadow/txt
13+/* local-distinct %txt /tests/type-generic-recursion/local-distinct/txt
14+/* local-only %txt /tests/type-generic-recursion/local-only/txt
15+/* list-shadow %txt /tests/type-generic-recursion/list-shadow/txt
16+/* chain %txt /tests/type-generic-recursion/chain/txt
17+/* bad-match %txt /tests/type-generic-recursion/bad-match/txt
18+/* expected %txt /tests/type-generic-recursion/expected/txt
19+|%
20+++ text
21+ |= lines=wain
22+ ^- @t
23+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
24+++ altered-list-source
25+ |= pre=@t
26+ ^- (unit @t)
27+ =/ lines=wain (to-wain:format pre)
28+ =/ old=@t ' [i=A t=(list A)]'
29+ =/ matches=(list @t) (skim lines |=(line=@t =(line old)))
30+ ?. =(1 (lent matches)) ~
31+ =/ changed=wain (turn lines |=(line=@t ?:(=(line old) ' [i=@t t=(list A)]' line)))
32+ `(text changed)
33+++ result-line
34+ |= [label=@t ok=?]
35+ ^- @t
36+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
37+++ generic-output
38+ |= [pre=@t internal=@t tree=@t changed=@t alias=@t client=@t invalid=(list [label=@t src=@t]) shadow=@t chain=@t]
39+ ^- @t
40+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
41+ ?~ prep 'BAD prelude preparation'
42+ =/ module=jfile-result:jibb
43+ (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
44+ ?: ?=(%| -.module) (cat 3 'BAD recursive module: ' p.module)
45+ =/ scheme=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.module)
46+ ?~ scheme 'BAD missing recursive mold'
47+ ?. ?=(%grec -.typ.u.scheme) 'BAD missing recursive identity'
48+ =/ typ=itype:jibb typ.u.scheme
49+ ?> ?=(%grec -.typ)
50+ =/ t=itype:jibb typ(args ~[[%atom %t]])
51+ ?> ?=(%grec -.t)
52+ =/ p=itype:jibb typ(args ~[[%atom %p]])
53+ =/ variable=itype:jibb typ(args ~[[%var 91]])
54+ =/ other=itype:jibb t(at /ui/other/jibb)
55+ =/ numeric=itype:jibb [%cell t [%nvar 99]]
56+ =/ chain-parsed=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb chain)
57+ ?: ?=(%| -.chain-parsed) 'BAD chain source parse'
58+ =/ chain-molds=imolds:jibb (collect-simple-molds:jibb defs.p.chain-parsed)
59+ =/ chain-shape=(unit shape:jibb) (find-simple-mold:jibb %chain chain-molds)
60+ ?~ chain-shape 'BAD chain source mold'
61+ =/ no-index=istate:jibb *istate:jibb
62+ =. no-index no-index(at /ui/tree/jibb, molds chain-molds, top-molds ~[%chain], prelude `iface.u.prep)
63+ =/ checks=(list [label=@t ok=?])
64+ :~ ['source module complete' ?=([%& *] module)]
65+ ['generic mold quantified' =(1 (lent vars.u.scheme))]
66+ ['distinct arguments decline' ?=(~ (itype-unify:jibb t p ~))]
67+ ['distinct origins decline' ?=(~ (itype-unify:jibb t other ~))]
68+ ['occurs check' ?=(~ (itype-unify:jibb [%var 91] variable ~))]
69+ ['cell construction stays opaque' =(%unknown -:(itype-fit:jibb [%cell [%atom %tas] [%atom %t]] t ~ 0))]
70+ ['noun construction stays opaque' =(%unknown -:(itype-fit:jibb [%noun ~] t ~ 0))]
71+ ['unindexed recursion declined' ?=(~ (simple-source-generic-recursive:jibb %chain u.chain-shape ~[[%atom %t]] no-index))]
72+ ['alteration rejects missing line' ?=(~ (altered-list-source 'absent'))]
73+ ['alteration rejects repeated line' ?=(~ (altered-list-source (text ~[' [i=A t=(list A)]' ' [i=A t=(list A)]'])))]
74+ ['gate freedom unknown' =(%unknown verdict:(gate-free-type:jibb t 64 ~))]
75+ ['gate defaulting conservative' &((itype-has-gate:jibb t) =(numeric (default-decimals:jibb numeric)))]
76+ ==
77+ =/ invalid-lines=(list @t)
78+ %+ turn invalid
79+ |= c=[label=@t src=@t]
80+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb src.c)
81+ =/ r=jfile-result:jibb
82+ (infer-jibb-file:jibb /ui/tree/jibb src.c ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
83+ (result-line label.c &(?=(%& -.parsed) ?=(%| -.r)))
84+ =/ shadow-result=jfile-result:jibb
85+ (infer-jibb-file:jibb /ui/tree/jibb shadow ~ ~ ~ ~[/ui/tree/jibb] values.u.prep ~ ~ `iface.u.prep)
86+ =/ altered-source=(unit @t) (altered-list-source pre)
87+ ?~ altered-source 'BAD canonical list source was missing or repeated'
88+ =/ altered=@t u.altered-source
89+ =/ altered-prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb altered internal)
90+ =/ altered-result=jfile-result:jibb
91+ ?~ altered-prep [%| 'altered prelude unavailable']
92+ (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.altered-prep molds.u.altered-prep ~ `iface.u.altered-prep)
93+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/tree/client/jibb client)
94+ ?: ?=(%| -.parsed) 'BAD client parse'
95+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
96+ =/ first=jimports-result:jibb
97+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
98+ ?: ?=(%| -.first) 'BAD import resolution'
99+ =/ reuse=jimports-result:jibb
100+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
101+ =/ changed-modules=jbundle:jibb ~[[/ui/tree/jibb changed] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
102+ =/ stale=jimports-result:jibb
103+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ changed-modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
104+ =/ fresh=jimports-result:jibb
105+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ changed-modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
106+ =/ duplicate-modules=jbundle:jibb [[/ui/tree/jibb tree] modules]
107+ =/ duplicate=jimports-result:jibb
108+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ duplicate-modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
109+ =/ cycle=jimports-result:jibb
110+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/ui/tree/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
111+ =/ prelude-other=ifile:jibb iface.u.prep(source ~)
112+ =/ mismatch=jimports-result:jibb
113+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `prelude-other)
114+ =/ old=(unit ifile:jibb) (find-jibb-interface:jibb %first resolved.p.first)
115+ =/ new=(unit ifile:jibb) ?:(?=(%& -.fresh) (find-jibb-interface:jibb %first resolved.p.fresh) ~)
116+ =/ shape-changed=?
117+ ?~ old |
118+ ?~ new |
119+ =/ a=(unit ischeme:jibb) (find-jibb-mold:jibb %element u.old)
120+ =/ b=(unit ischeme:jibb) (find-jibb-mold:jibb %element u.new)
121+ ?~ a |
122+ ?~ b |
123+ ?. &(?=(%grec -.typ.u.a) ?=(%grec -.typ.u.b)) |
124+ !=(proof.typ.u.a proof.typ.u.b)
125+ =/ reuse-ok=? ?:(?=(%| -.reuse) | =(resolved.p.first resolved.p.reuse))
126+ =/ shadow-parsed=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb shadow)
127+ =/ altered-parsed=(each module:jibb error:jibb) (parse:jibb /lib/jibb/prelude/jibb altered)
128+ =/ more=(list [label=@t ok=?])
129+ :~ ['unreserved local list shadow declined' &(?=(%& -.shadow-parsed) ?=(%| -.shadow-result))]
130+ ['altered prelude list declined' &(?=(%& -.altered-parsed) ?=(%| -.altered-result))]
131+ ['cached source reuse' reuse-ok]
132+ ['changed source invalidates cache' ?=(%| -.stale)]
133+ ['changed source fresh proof' &(?=(%& -.fresh) shape-changed)]
134+ ['duplicate source declined' ?=(%| -.duplicate)]
135+ ['active import cycle declined' ?=(%| -.cycle)]
136+ ['changed prelude invalidates cache' ?=(%| -.mismatch)]
137+ ==
138+ =/ lines=(list @t) (weld (turn checks result-line) (weld invalid-lines (turn more result-line)))
139+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
140+ (cat 3 (of-wain:format lines) (cat 3 '\0a' report))
141+++ test-generic-recursion
142+ ^- tang
143+ ?~ tree ~[leaf+"recursive source is missing"]
144+ ?~ changed ~[leaf+"changed recursive source is missing"]
145+ ?~ alias ~[leaf+"recursive alias is missing"]
146+ ?~ client ~[leaf+"recursive client is missing"]
147+ ?~ bad-mold ~[leaf+"invalid mold fixture is missing"]
148+ ?~ bad-constructor ~[leaf+"constructor fixture is missing"]
149+ ?~ bad-match ~[leaf+"match fixture is missing"]
150+ ?~ bad-parameter ~[leaf+"parameter fixture is missing"]
151+ ?~ local-shadow ~[leaf+"local shadow fixture is missing"]
152+ ?~ local-distinct ~[leaf+"distinct local shadow fixture is missing"]
153+ ?~ local-only ~[leaf+"local recursion fixture is missing"]
154+ ?~ list-shadow ~[leaf+"list shadow fixture is missing"]
155+ ?~ chain ~[leaf+"unindexed chain fixture is missing"]
156+ ?~ expected ~[leaf+"recursive expected output is missing"]
157+ =/ invalid=(list [label=@t src=@t])
158+ :~ ['unused mold hole declined' (text bad-mold)]
159+ ['invalid constructor declined' (text bad-constructor)]
160+ ['invalid matching declined' (text bad-match)]
161+ ['nonuniform recursion declined' (text bad-parameter)]
162+ ['identical local shadow declined' (text local-shadow)]
163+ ['different local shadow declined' (text local-distinct)]
164+ ['local recursion declined' (text local-only)]
165+ ==
166+ =/ actual=@t (generic-output real-prelude real-internal (text tree) (text changed) (text alias) (text client) invalid (text list-shadow) (text chain))
167+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
168+ ~[leaf+"generic recursion output differs from expected"]
169+ ~
170+--
tests/lib/jibb-import-overlap.hoonnew file+80
@@ -0,0 +1,80 @@
1+/+ jibb, jibb-import
2+/* sur %txt /tests/type-import-overlap/sur/txt
3+/* source %txt /tests/type-import-overlap/source/txt
4+/* expected %txt /tests/type-import-overlap/expected/txt
5+|%
6+++ text
7+ |= lines=wain
8+ ^- @t
9+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
10+++ test-import-overlap
11+ ^- tang
12+ ?~ sur ~[leaf+"overlap fixture source is missing"]
13+ ?~ source ~[leaf+"overlap fixture client is missing"]
14+ ?~ expected ~[leaf+"overlap fixture expected output is missing"]
15+ =/ got (overlap-output (text sur) (text source))
16+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
17+ ~[leaf+"overlap output differs from expected"]
18+ ~
19+++ bounded-screen-status
20+^- @t
21+?. ?=(~ (bounded-no-spec-unions:jibb-import [1 2] 2)) 'three-node noun exceeded limit'
22+=/ exact (bounded-no-spec-unions:jibb-import [1 2] 3)
23+?. =(exact `0) 'three-node exact budget failed'
24+?. ?=(~ (bounded-no-spec-unions:jibb-import [[[[1 2] 3] 4] 5] 8)) 'deep noun exceeded limit'
25+?. =((bounded-no-spec-unions:jibb-import [[[[1 2] 3] 4] 5] 9) `0) 'deep exact budget failed'
26+?. ?=(~ (bounded-no-spec-unions:jibb-import [1 2 3 4 5] 8)) 'wide noun exceeded limit'
27+?. =((bounded-no-spec-unions:jibb-import [1 2 3 4 5] 9) `0) 'wide exact budget failed'
28+?. ?=(~ (bounded-no-spec-unions:jibb-import [%bcwt [[1 2] [[3 4] 0]]] 100)) 'nested $? accepted'
29+?. ?=(~ (bounded-no-spec-unions:jibb-import [%bccn [[1 2] [[3 4] 0]]] 100)) 'nested $% accepted'
30+?. ?=(~ (bounded-no-spec-unions:jibb-import [%bckt [1 2] [3 4]] 100)) 'nested $^ accepted'
31+=/ very-deep=*
32+ =/ n=@ud 1.000
33+ =/ node=* 0
34+ |-
35+ ?: =(n 0) node
36+ $(n (dec n), node [node n])
37+?. =((bounded-no-spec-unions:jibb-import very-deep 2.001) `0) 'deep 2,001-node exact budget failed'
38+?. ?=(~ (bounded-no-spec-unions:jibb-import very-deep 2.000)) 'deep 2,001-node limit exceeded'
39+=/ xs=(list spec)
40+ (turn (gulf 1 128) |=(n=@ud `spec`[%bccl ~[[%leaf %tas n] [%base [%atom %t]]]]))
41+?~ xs 'generated source cases missing'
42+=/ first=(unit @ud) (bounded-no-spec-unions:jibb-import i.xs 1.000)
43+?~ first 'simple source case unavailable'
44+=/ total=@ud (mul 128 (sub 1.000 u.first))
45+=/ at=(unit (list tagged-case:jibb-import)) (tagged-bounded-cases:jibb-import xs ~ total 128)
46+?~ at '128 exact cases rejected'
47+?. =((lent u.at) 128) 'a source case was omitted'
48+?. ?=(~ (tagged-bounded-cases:jibb-import xs ~ (dec total) 128)) 'source node limit exceeded'
49+=/ over=(list spec) (weld xs ~[`spec`[%bccl ~[[%leaf %tas 129] [%base [%atom %t]]]]])
50+?. ?=(~ (tagged-bounded-cases:jibb-import over ~ 100.000 128)) '129 cases exceeded limit'
51+=/ nested=spec [%bccl ~[[%leaf %tas %x] [%bcwt ~[[%leaf %tas %a] [%leaf %tas %b]]]]]
52+?. ?=(~ (tagged-bounded-cases:jibb-import ~[nested] ~ 1.000 128)) 'nested union case accepted'
53+=/ unknown=spec [%base [%atom %t]]
54+?. ?=(~ (tagged-bounded-cases:jibb-import ~[unknown] ~ 1.000 128)) 'non-tagged source accepted'
55+'bounded source screen controls passed'
56+
57+++ overlap-output
58+ |= [sur-text=@t src=@t]
59+ ^- @t
60+ =/ cor=type -:(ride -:!>(..zuse) sur-text)
61+ =/ names=(list term)
62+ ~[%mixed-zero %nonzero %unequal-singletons %swapped %separate-tags %separate-terms %different-value %different-tail %unknown-middle %unsupported-gate %dollar-percent %identical %cross-zero %boolean-tail %empty-tail]
63+ =/ cases=wall
64+ %+ turn names
65+ |= n=term
66+ "{(trip n)}: {(show-import-diagnostic:jibb-import (read-named-diagnostic:jibb-import %fixture n cor))}"
67+ =/ other=type (~(play ut cor) (ream '*separate-tags'))
68+ =/ provenance=wall
69+ :~ "mismatched-selected: {(show-result:jibb-import (read-mold-in:jibb-import %fixture %mixed-zero other cor))}"
70+ "missing: {(show-result:jibb-import (read-named:jibb-import %fixture %missing cor))}"
71+ "bare-zuse: {(show-result:jibb-import (read-named:jibb-import %fixture %mixed-zero -:!>(..zuse)))}"
72+ ==
73+ =/ external=(list [module=term name=term result=*])
74+ :~ [%fixture %mixed-zero (read-named-diagnostic:jibb-import %fixture %mixed-zero cor)]
75+ [%fixture %separate-tags (read-named-diagnostic:jibb-import %fixture %separate-tags cor)]
76+ [%fixture %unknown-middle (read-named-diagnostic:jibb-import %fixture %unknown-middle cor)]
77+ ==
78+ =/ report=@t (golden-types-with-reader-diagnostics:jibb /ui/test/jibb src external ~)
79+ (cat 3 (of-wain:format (turn (weld cases (weld ~[(trip bounded-screen-status)] provenance)) |=(line=tape (crip line)))) (cat 3 '\0a' report))
80+--
tests/lib/jibb-import-structural.hoonnew file+82
@@ -0,0 +1,82 @@
1+/+ jibb, jibb-import
2+/* sur %txt /tests/type-import-structural/sur/txt
3+/* source %txt /tests/type-import-structural/source/txt
4+/* expected %txt /tests/type-import-structural/expected/txt
5+|%
6+++ text
7+ |= lines=wain
8+ ^- @t
9+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
10+++ test-import-structural
11+ ^- tang
12+ ?~ sur ~[leaf+"structural overlap /sur is missing"]
13+ ?~ source ~[leaf+"structural overlap client is missing"]
14+ ?~ expected ~[leaf+"structural overlap expected is missing"]
15+ =/ got (structural-output (text sur) (text source))
16+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
17+ ~[leaf+"structural overlap output differs from expected"]
18+ ~
19+++ structural-output
20+ |= [sur-text=@t src=@t]
21+ ^- @t
22+ =/ cor=type -:(ride -:!>(..zuse) sur-text)
23+ =/ names=(list term)
24+ ~[%same-alias %separate-alias %deep-match %deep-distinct %tail-distinct %later-overlap %many-safe %open-atoms %different-aura]
25+ =/ cases=wall
26+ %+ turn names
27+ |= n=term
28+ "{(trip n)}: {(show-import-diagnostic:jibb-import (read-named-diagnostic:jibb-import %fixture n cor))}"
29+ =/ ext=(list [module=term name=term result=*])
30+ :~ [%fixture %deep-match (read-named-diagnostic:jibb-import %fixture %deep-match cor)]
31+ [%fixture %separate-alias (read-named-diagnostic:jibb-import %fixture %separate-alias cor)]
32+ [%fixture %different-aura (read-named-diagnostic:jibb-import %fixture %different-aura cor)]
33+ [%fixture %later-overlap (read-named-diagnostic:jibb-import %fixture %later-overlap cor)]
34+ ==
35+ =/ report=@t (golden-types-with-reader-diagnostics:jibb /ui/structural/jibb src ext ~)
36+ =/ zero=imported:jibb-import [%atom %tas `0]
37+ =/ one=imported:jibb-import [%atom %tas `1]
38+ =/ two=imported:jibb-import [%atom %tas `2]
39+ =/ txt=imported:jibb-import [%atom %t ~]
40+ =/ ship=imported:jibb-import [%atom %p ~]
41+ =/ flag=imported:jibb-import [%atom %f ~]
42+ =/ opaque=imported:jibb-import [%ref %m %x]
43+ =/ named=imported:jibb-import [%named %m %x zero]
44+ =/ arm (local-arm-source:jibb-import cor %later-overlap)
45+ ?~ arm !!
46+ =/ shape (local-mold-spec:jibb-import u.arm %later-overlap)
47+ ?~ shape !!
48+ =/ body (tagged-default-union:jibb-import u.shape 4)
49+ ?~ body !!
50+ ?> ?=([%bcwt *] u.body)
51+ =/ specs=(list spec) p.u.body
52+ ?~ specs !!
53+ =/ checks=(list [label=@t ok=?])
54+ :~ ['same literal' ?=([~ [%.y *]] (overlap-pair:jibb-import zero zero 20))]
55+ ['different literals' ?=([~ [%.n *]] (overlap-pair:jibb-import one two 20))]
56+ ['named expands' ?=([~ [%.y *]] (overlap-pair:jibb-import named zero 20))]
57+ ['opaque declines' ?=([~ [%.n *]] (overlap-pair:jibb-import opaque opaque 20))]
58+ ['opaque versus noun' ?=([~ [%.n *]] (overlap-pair:jibb-import opaque [%noun ~] 20))]
59+ ['unknown aura' ?=([~ [%.n *]] (overlap-pair:jibb-import ship txt 20))]
60+ ['open admits zero' ?=([~ [%.y *]] (overlap-pair:jibb-import flag zero 20))]
61+ ['different tail' ?=([~ [%.n *]] (overlap-pair:jibb-import [%cell zero one] [%cell zero two] 20))]
62+ ['nested face' ?=([~ [%.y *]] (overlap-pair:jibb-import [%face %a [%cell named one]] [%face %b [%cell zero one]] 20))]
63+ ['fork later case' ?=([~ [%.y *]] (overlap-pair:jibb-import [%fork ~[one zero]] zero 20))]
64+ ['empty fuel' ?=(~ (overlap-pair:jibb-import zero zero 0))]
65+ ['cell needs both' ?=(~ (overlap-pair:jibb-import [%cell zero one] [%cell zero one] 2))]
66+ ['later pair' ?=([~ [%.y *]] (overlap-case-pairs:jibb-import ~[one two zero zero] 100))]
67+ ['pair fuel' ?=(~ (overlap-case-pairs:jibb-import ~[one two zero zero] 2))]
68+ ['void' ?=([~ [%.n *]] (overlap-pair:jibb-import [%void ~] [%noun ~] 20))]
69+ ['void position' ?=([~ [%.n *]] (overlap-pair:jibb-import [%cell zero [%void ~]] [%cell zero [%noun ~]] 20))]
70+ ['opaque apply' ?=([~ [%.n *]] (overlap-pair:jibb-import [%apply %list ~[txt]] [%noun ~] 20))]
71+ ['source node fuel' ?=(~ (overlap-source-cases:jibb-import specs 1 128))]
72+ ['source case cap' ?=(~ (overlap-source-cases:jibb-import specs 4.096 3))]
73+ ['wrong projected head' !(overlap-projections-match:jibb-import ~[[%a i.specs]] ~[[%cell [%atom %tas `%b] txt]])]
74+ ['wrong case count' !(overlap-projections-match:jibb-import ~[[%a i.specs]] ~)]
75+ ==
76+ =/ results=wall
77+ %+ turn checks
78+ |= c=[label=@t ok=?]
79+ "{(trip label.c)}: {?:(ok.c "ok" "BAD")}"
80+ =/ lines=(list @t) (turn (weld cases results) |=(line=tape (crip line)))
81+ (cat 3 (of-wain:format lines) (cat 3 '\0a' report))
82+--
tests/lib/jibb-nested-union-guards.hoonnew file+67
@@ -0,0 +1,67 @@
1+:: Nested tagged-case context requires a direct union and unique explicit case.
2+/+ jibb
3+|%
4+++ nested-union-base-errors
5+ ^- (list tape)
6+ =/ a=itype:jibb [%cell [%const [%term %tas %a '%a']] [%atom %t]]
7+ =/ b=itype:jibb [%cell [%const [%term %tas %b '%b']] [%atom %p]]
8+ =/ union=itype:jibb [%union ~[a b] ~ ~ ~]
9+ =/ variable=itype:jibb [%var 0]
10+ =/ bound=isub:jibb ~[[0 union]]
11+ =/ failures=(list tape) ~
12+ =? failures !(contextual-direct-union:jibb union)
13+ ["direct union not recognized" failures]
14+ =? failures !(contextual-direct-union:jibb [%face %item union])
15+ ["explicit faced union not recognized" failures]
16+ =? failures (contextual-direct-union:jibb variable)
17+ ["variable-bound root treated as direct union" failures]
18+ =/ tests=(list [label=@t target=itype:jibb tag=@ sub=isub:jibb expect=?])
19+ :~ ['unique tag' union %a ~ &]
20+ ['missing tag' union %missing ~ |]
21+ ['null-headed zero' [%union ~[[%cell [%const [%null %n 0 '~']] [%atom %t]] b] ~ ~ ~] 0 ~ &]
22+ ['loobean-headed zero' [%union ~[[%cell [%const [%loobean %f 0 '%.y']] [%atom %t]] b] ~ ~ ~] 0 ~ &]
23+ ['term-headed zero' [%union ~[[%cell [%const [%term %tas 0 '%$']] [%atom %t]] b] ~ ~ ~] 0 ~ &]
24+ ['equal zero heads' [%union ~[[%cell [%const [%null %n 0 '~']] [%atom %t]] [%cell [%const [%loobean %f 0 '%.y']] [%atom %p]]] ~ ~ ~] 0 ~ |]
25+ ['variable root' variable %a bound |]
26+ ['bare term competitor' [%union ~[a [%const [%term %tas %b '%b']]] ~ ~ ~] %a ~ |]
27+ ['null competitor' [%union ~[a [%const [%null %n 0 '~']]] ~ ~ ~] %a ~ |]
28+ ['variable competitor' [%union ~[a variable] ~ ~ ~] %a bound |]
29+ ['variable head' [%union ~[a [%cell variable [%atom %t]]] ~ ~ ~] %a bound |]
30+ ['duplicate tag' [%union ~[a a] ~ ~ ~] %a ~ |]
31+ ['duplicate other head' [%union ~[a b [%cell [%const [%term %tas %b '%b']] [%atom %t]]] ~ ~ ~] %a ~ |]
32+ ['faced competitor' [%union ~[a [%face %x b]] ~ ~ ~] %a ~ |]
33+ ==
34+ =/ errs=(list @t)
35+ %+ turn tests
36+ |= test=[label=@t target=itype:jibb tag=@ sub=isub:jibb expect=?]
37+ =/ found=(unit itype:jibb) (contextual-tagged-case:jibb target.test tag.test sub.test)
38+ ?: =(expect.test ?=(^ found)) ''
39+ (cat 3 label.test ': incorrect case selection')
40+ (weld (turn (skim errs |=(x=@t !=(x ''))) trip) failures)
41+++ nested-union-substitution-errors
42+ ^- (list tape)
43+ =/ tests=(list [name=@t sub=isub:jibb want=?])
44+ :~ ['empty' ~ &]
45+ ['atom' ~[[0 [%atom %t]]] &]
46+ ['variable chain to atom' ~[[0 [%var 1]] [1 [%atom %t]]] &]
47+ ['cell' ~[[0 [%cell [%atom %t] [%atom %p]]]] |]
48+ ['face' ~[[0 [%face %x [%atom %t]]]] |]
49+ ['gate' ~[[0 [%fn [%atom %t] [%atom %t]]]] |]
50+ ['union' ~[[0 [%union ~[[%const [%term %tas %x '%x']]] ~ ~ ~]]] |]
51+ ['collection' ~[[0 [%collection %list ~[[%atom %t]]]]] |]
52+ ['variable chain to union' ~[[0 [%var 1]] [1 [%union ~[[%const [%term %tas %x '%x']]] ~ ~ ~]]] |]
53+ ==
54+ =/ errors=(list @t)
55+ %+ turn tests
56+ |= test=[name=@t sub=isub:jibb want=?]
57+ ?: =(want.test (contextual-simple-sub:jibb sub.test)) ''
58+ (cat 3 name.test ': incorrect provenance')
59+ =/ errors (skim errors |=(x=@t !=(x '')))
60+ (turn errors trip)
61+++ nested-union-guard-errors
62+ ^- (list tape)
63+ (weld nested-union-base-errors nested-union-substitution-errors)
64+++ test-nested-union-guards
65+ ^- tang
66+ (turn nested-union-guard-errors |=(reason=tape leaf+reason))
67+--
tests/lib/jibb-request-guards.hoonnew file+149
@@ -0,0 +1,149 @@
1+:: Source-backed request certificate and cache boundary checks.
2+/+ jibb
3+/* public %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+|%
6+++ request-guard-report
7+ ^- @t
8+ =/ prelude=@t public
9+ =/ src=@t '/% %full\0a+$ paths [%plain /plain full]\0a'
10+ =/ left=@t '/= api /ui/api/demo\0a++ left |= reply=$-(@t A) (plain.api reply)\0a'
11+ =/ right=@t '/= api /ui/api/demo\0a++ right |= reply=$-(@t A) (plain.api reply)\0a'
12+ =/ diamond=@t '/= left /lib/left\0a/= right /lib/right\0a++ cord (left.left |=(x=@t "ok"))\0a++ ship (right.right |=(x=@t ~zod))\0a'
13+ =/ reverse=@t '/= right /lib/right\0a/= left /lib/left\0a++ ship (right.right |=(x=@t ~zod))\0a++ cord (left.left |=(x=@t "ok"))\0a'
14+ =/ other=@t '/= api /ui/api/other\0a++ other |= reply=$-(@t A) (plain.api reply)\0a'
15+ =/ twoapi=@t '/= left /lib/left\0a/= other /lib/other-helper\0a++ cord (left.left |=(x=@t "ok"))\0a++ ship (other.other |=(x=@t ~zod))\0a'
16+ =/ changed=@t '/% %full\0a+$ paths [%changed /changed full]\0a'
17+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
18+ ?~ prep 'prelude unavailable'
19+ =/ api=path /ui/api/demo/jibb
20+ =/ client=path /lib/client/jibb
21+ =/ left-at=path /lib/left/jibb
22+ =/ right-at=path /lib/right/jibb
23+ =/ marks=imark-externals:jibb ~[[%full [%& [%atom %t ~]]]]
24+ =/ bundle=jbundle:jibb ~[[api src] [left-at left] [right-at right]]
25+ =/ pre=(unit ifile:jibb) `iface.u.prep
26+ =/ fresh (infer-jibb-file:jibb client diamond ~ marks bundle ~[client] values.u.prep molds.u.prep ~ pre)
27+ ?: ?=(%| -.fresh) (cat 3 'diamond failed: ' p.fresh)
28+ =/ left-iface=(unit ifile:jibb) (find-jibb-cache:jibb left-at cache.p.fresh)
29+ =/ right-iface=(unit ifile:jibb) (find-jibb-cache:jibb right-at cache.p.fresh)
30+ ?~ left-iface 'left interface missing'
31+ ?~ right-iface 'right interface missing'
32+ ?~ graph.u.left-iface 'left source graph missing'
33+ ?~ graph.u.right-iface 'right source graph missing'
34+ ?. ?=([* ~] requests.u.graph.u.left-iface) 'left source certificate missing'
35+ ?. ?=([* ~] requests.u.graph.u.right-iface) 'right source certificate missing'
36+ =/ detached=jcache:jibb ~[[left-at u.left-iface] [right-at u.right-iface]]
37+ =/ reused (infer-jibb-file:jibb client diamond ~ marks bundle ~[client] values.u.prep molds.u.prep detached pre)
38+ ?: ?=(%| -.reused) (cat 3 'detached helper certificates rejected: ' p.reused)
39+ ?~ graph.iface.p.reused 'diamond graph missing'
40+ ?. ?=([* ~] requests.u.graph.iface.p.reused) 'diamond request evidence missing or duplicated'
41+ =/ reversed (infer-jibb-file:jibb client reverse ~ marks bundle ~[client] values.u.prep molds.u.prep detached pre)
42+ ?: ?=(%| -.reversed) (cat 3 'reversed diamond rejected: ' p.reversed)
43+ ?~ graph.iface.p.reversed 'reversed diamond graph missing'
44+ ?. ?=([* ~] requests.u.graph.iface.p.reversed) 'reversed diamond duplicated request'
45+ =/ other-api=path /ui/api/other/jibb
46+ =/ other-at=path /lib/other-helper/jibb
47+ =/ multi-bundle=jbundle:jibb ~[[api src] [left-at left] [other-api src] [other-at other]]
48+ =/ multi (infer-jibb-file:jibb client twoapi ~ marks multi-bundle ~[client] values.u.prep molds.u.prep ~ pre)
49+ ?: ?=(%| -.multi) (cat 3 'different API paths failed: ' p.multi)
50+ ?~ graph.iface.p.multi 'different API graph missing'
51+ =/ all=(list irequest-evidence:jibb) requests.u.graph.iface.p.multi
52+ ?. =((lent all) 2) 'distinct API path requests were merged'
53+ ?. =((lent (skim all |=(r=irequest-evidence:jibb =(api-at.r api)))) 1) 'original API identity lost'
54+ ?. =((lent (skim all |=(r=irequest-evidence:jibb =(api-at.r other-api)))) 1) 'other API identity lost'
55+ =/ missing-api=jbundle:jibb ~[[left-at left] [right-at right]]
56+ =/ absent (infer-jibb-file:jibb client diamond ~ marks missing-api ~[client] values.u.prep molds.u.prep detached pre)
57+ ?: ?=(%& -.absent) 'missing certified API source accepted'
58+ =/ different-api=jbundle:jibb ~[[api changed] [left-at left] [right-at right]]
59+ =/ stale (infer-jibb-file:jibb client diamond ~ marks different-api ~[client] values.u.prep molds.u.prep detached pre)
60+ ?: ?=(%& -.stale) 'changed API source accepted'
61+ =/ duplicate-api=jbundle:jibb ~[[api src] [api src] [left-at left] [right-at right]]
62+ =/ duplicate (infer-jibb-file:jibb client diamond ~ marks duplicate-api ~[client] values.u.prep molds.u.prep detached pre)
63+ ?: ?=(%& -.duplicate) 'duplicate certified API sources accepted'
64+ =/ different-marks=imark-externals:jibb ~[[%full [%& [%atom %p ~]]]]
65+ =/ stale-mark (infer-jibb-file:jibb client diamond ~ different-marks bundle ~[client] values.u.prep molds.u.prep detached pre)
66+ ?: ?=(%& -.stale-mark) 'changed reader result accepted'
67+ =/ changed-public=@t (cat 3 prelude '\0a:: modified\0a')
68+ =/ public-prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb changed-public internal)
69+ ?~ public-prep 'comment-only prelude did not prepare'
70+ =/ stale-public (infer-jibb-file:jibb client diamond ~ marks bundle ~[client] values.u.public-prep molds.u.public-prep detached `iface.u.public-prep)
71+ ?: ?=(%& -.stale-public) 'changed public source accepted'
72+ =/ changed-internal=@t (cat 3 internal '\0a:: modified\0a')
73+ =/ internal-prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude changed-internal)
74+ ?~ internal-prep 'comment-only internal did not prepare'
75+ =/ stale-internal (infer-jibb-file:jibb client diamond ~ marks bundle ~[client] values.u.internal-prep molds.u.internal-prep detached `iface.u.internal-prep)
76+ ?: ?=(%& -.stale-internal) 'changed internal source accepted'
77+ 'certificate controls passed'
78+++ request-legacy-report
79+ ^- @t
80+ =/ prelude=@t public
81+ =/ src=@t '/% %full\0a+$ paths [%plain /plain full]\0a'
82+ =/ helper=@t '/= api /ui/api/demo\0a++ fetch |= reply=$-(@t A) (plain.api reply)\0a'
83+ =/ transitive=@t '/= lib /lib/helper\0a++ cord (fetch.lib |=(x=@t "ok"))\0a++ ship (fetch.lib |=(x=@t ~zod))\0a'
84+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
85+ ?~ prep 'prelude unavailable'
86+ =/ api=path /ui/api/demo/jibb
87+ =/ client=path /lib/client/jibb
88+ =/ helper-at=path /lib/helper/jibb
89+ =/ marks=imark-externals:jibb ~[[%full [%& [%atom %t ~]]]]
90+ =/ bundle=jbundle:jibb ~[[api src] [helper-at helper]]
91+ =/ pre=(unit ifile:jibb) `iface.u.prep
92+ =/ simple=@t '++ value "old"\0a'
93+ =/ simple-root=@t '/= h /lib/helper\0a++ value value.h\0a'
94+ =/ simple-bundle=jbundle:jibb ~[[helper-at simple]]
95+ =/ simple-built (infer-jibb-file:jibb helper-at simple ~ marks simple-bundle ~[helper-at] values.u.prep molds.u.prep ~ pre)
96+ ?: ?=(%| -.simple-built) 'simple helper setup failed'
97+ =/ legacy=ifile:jibb iface.p.simple-built(graph ~)
98+ =/ old-cache=jcache:jibb ~[[helper-at legacy]]
99+ =/ rebuilt (infer-jibb-file:jibb client simple-root ~ marks simple-bundle ~[client] values.u.prep molds.u.prep old-cache pre)
100+ ?: ?=(%| -.rebuilt) (cat 3 'legacy simple rebuild failed: ' p.rebuilt)
101+ =/ simple-new=(unit ifile:jibb) (find-jibb-cache:jibb helper-at cache.p.rebuilt)
102+ ?~ simple-new 'rebuilt simple helper missing'
103+ ?~ graph.u.simple-new 'simple helper was not recertified'
104+ =/ upgraded (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep old-cache pre)
105+ ?: ?=(%| -.upgraded) (cat 3 'legacy changed helper failed: ' p.upgraded)
106+ =/ new=(unit ifile:jibb) (find-jibb-cache:jibb helper-at cache.p.upgraded)
107+ ?~ new 'rebuilt request helper missing'
108+ ?. =(source.u.new `helper) 'legacy helper source survived'
109+ ?~ graph.u.new 'request helper graph missing'
110+ ?. ?=([* ~] requests.u.graph.u.new) 'request helper evidence missing'
111+ =/ duplicated=jcache:jibb ~[[helper-at legacy] [helper-at legacy]]
112+ =/ duplicate-rebuilt (infer-jibb-file:jibb client simple-root ~ marks simple-bundle ~[client] values.u.prep molds.u.prep duplicated pre)
113+ ?: ?=(%| -.duplicate-rebuilt) 'duplicate legacy rebuild failed'
114+ =/ helper-entries (skim cache.p.duplicate-rebuilt |=(c=[at=path iface=ifile:jibb] =(at.c helper-at)))
115+ ?. ?=([* ~] helper-entries) 'duplicate stale helper entries remained'
116+ =/ api-iface=(unit ifile:jibb) (find-jibb-cache:jibb api cache.p.upgraded)
117+ ?~ api-iface 'rebuilt API interface missing'
118+ =/ legacy-api=ifile:jibb u.api-iface(graph ~)
119+ =/ both-stale=jcache:jibb ~[[helper-at legacy] [api legacy-api]]
120+ =/ child-rebuilt (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep both-stale pre)
121+ ?: ?=(%| -.child-rebuilt) 'transitive unknown child rebuild failed'
122+ =/ api-new=(unit ifile:jibb) (find-jibb-cache:jibb api cache.p.child-rebuilt)
123+ ?~ api-new 'rebuilt transitive API missing'
124+ ?~ graph.u.api-new 'rebuilt transitive API has no graph'
125+ ?. ?=([* ~] requests.u.graph.u.api-new) 'rebuilt transitive API request missing'
126+ =/ mismatched=ifile:jibb legacy(at /lib/other/jibb)
127+ =/ bad-cache=jcache:jibb ~[[helper-at mismatched]]
128+ =/ wrong (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep bad-cache pre)
129+ ?: ?=(%& -.wrong) 'cache key and interface path mismatch accepted'
130+ =/ old-client=@t '++ text "safe"\0a'
131+ =/ dep=@t '/= c /lib/client\0a++ value text.c\0a'
132+ =/ root=@t '/= h /lib/helper\0a++ x value.h\0a'
133+ =/ cycle-bundle=jbundle:jibb ~[[client old-client] [helper-at dep]]
134+ =/ cycle-legacy=ifile:jibb legacy(source `dep)
135+ =/ cycle-cache=jcache:jibb ~[[helper-at cycle-legacy]]
136+ =/ cycle (infer-jibb-file:jibb client root ~ marks cycle-bundle ~[client] values.u.prep molds.u.prep cycle-cache pre)
137+ ?: ?=(%& -.cycle) 'legacy ancestor cycle accepted'
138+ 'legacy cache controls passed'
139+++ request-guard-errors
140+ ^- (list tape)
141+ =/ result=@t request-guard-report
142+ ?. =(result 'certificate controls passed') ~[(trip result)]
143+ =/ legacy=@t request-legacy-report
144+ ?: =(legacy 'legacy cache controls passed') ~
145+ ~[(trip legacy)]
146+++ test-request-guard
147+ ^- tang
148+ (turn request-guard-errors |=(reason=tape leaf+reason))
149+--
tests/lib/jibb-sub-guards.hoonnew file+37
@@ -0,0 +1,37 @@
1+:: Source-backed sub retains the public ask and depends on its actual source.
2+/+ jibb
3+/* public %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+|%
6+++ sub-guard-errors
7+ ^- (list tape)
8+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
9+ ?~ prep ~["real prelude did not prepare"]
10+ ?~ (find-jibb-mold:jibb %sub iface.u.prep) ~["sub is unavailable in real prelude"]
11+ =/ intro=@t '/= internal /lib/jibb/internal\0a'
12+ =/ list-src=@t '+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a'
13+ =/ unit-src=@t '+$ unit |$ [A]\0a ~\0a [~ u=A]\0a'
14+ =/ ask-src=@t '+$ ask |$ [M] (ask.internal M)\0a'
15+ =/ path-src=@t '+$ knot @ta\0a+$ path (list knot)\0a'
16+ =/ sub-src=@t '+$ sub |$ [M]\0a [%watch a=(ask M)]\0a [%every gap=@dr reply=$-(@da M)]\0a [%url reply=$-(path M)]\0a'
17+ =/ cases=(list [label=@t src=@t want=?])
18+ :~ ['minimal' (rap 3 ~[intro list-src unit-src ask-src path-src sub-src]) &]
19+ ['missing ask' (rap 3 ~[intro list-src unit-src path-src sub-src]) |]
20+ ['missing list' (rap 3 ~[intro unit-src ask-src path-src sub-src]) |]
21+ ['missing unit' (rap 3 ~[intro list-src ask-src path-src sub-src]) |]
22+ ['missing path' (rap 3 ~[intro list-src unit-src ask-src sub-src]) |]
23+ ['altered list' (rap 3 ~[intro '+$ list |$ [A] ~\0a' unit-src ask-src path-src sub-src]) |]
24+ ['valid alternate path' (rap 3 ~[intro list-src unit-src ask-src '+$ path @t\0a' sub-src]) &]
25+ ==
26+ =/ failures=(list @t)
27+ %+ turn cases
28+ |= c=[label=@t src=@t want=?]
29+ =/ p=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb src.c internal)
30+ =/ present=? ?~(p | ?=(^ (find-jibb-mold:jibb %sub iface.u.p)))
31+ ?: =(want.c present) ''
32+ (cat 3 label.c ': unexpected availability')
33+ (turn (skim failures |=(x=@t !=(x ''))) trip)
34+++ test-sub-guards
35+ ^- tang
36+ (turn sub-guard-errors |=(reason=tape leaf+reason))
37+--
tests/lib/jibb-todo-api.hoonnew file+85
@@ -0,0 +1,85 @@
1+:: The exact todo API reaches partial client inference through real /sur and mark readers.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+/* source %txt /tests/type-todo-api/source/txt
12+/* negative %txt /tests/type-todo-api/negative/txt
13+/* unsupported %txt /tests/type-todo-api/unsupported/txt
14+/* expected %txt /tests/type-todo-api/expected/txt
15+/* negative-expected %txt /tests/type-todo-api/negative-expected/txt
16+|%
17+++ text
18+ |= lines=wain
19+ ^- @t
20+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
21+++ todo-run
22+ |= [prelude=@t internal=@t sur=@t action=@t todos=@t update=@t item=@t api=@t source=@t negative=@t unsupported=@t]
23+ ^- [report=@t bad-report=@t guards=@t]
24+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
25+ ?~ prepared ['prelude unavailable' 'prelude unavailable' 'prelude unavailable']
26+ =/ todo=type -:(ride -:!>(..zuse) sur)
27+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
28+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action))
29+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos))
30+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update))
31+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item))
32+ =/ mark-inputs=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
33+ =/ item-input=* (read-named:jibb-import %todo %item todo)
34+ =/ inputs=iexternals:jibb ~[[%todo %item item-input]]
35+ =/ modules=jbundle:jibb ~[[/ui/api/todo/jibb api]]
36+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/type-todo-api/source/jibb source inputs mark-inputs modules prepared)
37+ =/ bad-report=@t (golden-types-with-prepared-prelude:jibb /tests/type-todo-api/negative/jibb negative inputs mark-inputs modules prepared)
38+ =/ guards=@t
39+ =/ out (infer-jibb-file:jibb /ui/api/todo/jibb api inputs mark-inputs ~ ~[/ui/api/todo/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
40+ ?: ?=(%| -.out) (cat 3 'actual API failed: ' p.out)
41+ =/ iface=ifile:jibb iface.p.out
42+ ?. =(source.iface `api) 'actual API source changed'
43+ =/ names=(list term) (turn values.iface |=(x=[name=term scheme=ischeme:jibb] name.x))
44+ =/ required-values=(list term) ~[%todo-action %todos %changes %todo-by-id]
45+ ?. (levy required-values |=(x=term (lien names |=(y=term =(x y))))) 'derived value missing'
46+ =/ mnames=(list term) (turn molds.iface |=(x=[name=term template=ischeme:jibb] name.x))
47+ =/ required-molds=(list term) ~[%item %todo-action %todos %todo-update %todo-item]
48+ ?. (levy required-molds |=(x=term (lien mnames |=(y=term =(x y))))) 'expected mold export missing'
49+ ?: (lien mnames |=(x=term =(%todo x))) '/sur import face was re-exported'
50+ ?~ graph.iface 'API certificate missing'
51+ ?. =((lent requests.u.graph.iface) 3) 'request evidence count wrong'
52+ =/ missing-mark=imark-externals:jibb (skim mark-inputs |=(x=[mark=term result=*] !=(%todo-update mark.x)))
53+ =/ duplicate-mark=imark-externals:jibb [[%todo-action ma] mark-inputs]
54+ =/ duplicate-sur=iexternals:jibb [[%todo %item item-input] inputs]
55+ =/ cases=(list [label=@t src=@t externals=iexternals:jibb marks=imark-externals:jibb])
56+ :~ ['missing selected sur mold' api ~ mark-inputs]
57+ ['duplicate selected sur mold' api duplicate-sur mark-inputs]
58+ ['missing mark' api inputs missing-mark]
59+ ['duplicate mark' api inputs duplicate-mark]
60+ ['unsupported request sibling' unsupported inputs mark-inputs]
61+ ['unrelated invalid mold' (cat 3 api '\0a+$ invalid missing\0a') inputs mark-inputs]
62+ ['unrelated invalid value' (cat 3 api '\0a++ invalid missing\0a') inputs mark-inputs]
63+ ['private import' (cat 3 '/= secret /lib/jibb/internal\0a' api) inputs mark-inputs]
64+ ==
65+ =/ failures=(list @t)
66+ %+ turn cases
67+ |= c=[label=@t src=@t externals=iexternals:jibb marks=imark-externals:jibb]
68+ =/ bad (infer-jibb-file:jibb /ui/api/todo/jibb src.c externals.c marks.c ~ ~[/ui/api/todo/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
69+ ?: ?=(%| -.bad) ''
70+ (cat 3 label.c ': unexpectedly published')
71+ =/ bad=(list @t) (skim failures |=(x=@t !=(x '')))
72+ ?~ bad 'real todo interface and atomic guards passed'
73+ (of-wain:format bad)
74+ [report bad-report guards]
75+++ test-todo-api
76+ ^- tang
77+ =/ out (todo-run prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source) (text negative) (text unsupported))
78+ ?. =((to-wain:format (cat 3 report.out '\0a')) expected)
79+ ~[leaf+"todo API report differs from expected"]
80+ ?. =((to-wain:format (cat 3 bad-report.out '\0a')) negative-expected)
81+ ~[leaf+"todo API negative report differs from expected"]
82+ ?. =(guards.out 'real todo interface and atomic guards passed')
83+ ~[leaf+(trip guards.out)]
84+ ~
85+--
tests/lib/jibb-todo-partial.hoonnew file+58
@@ -0,0 +1,58 @@
1+:: The exact todo island through real readers: partial reports only.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+/* source %txt /tests/type-gate-free/todo/txt
12+/* expected %txt /tests/type-todo-partial/expected/txt
13+|%
14+++ text
15+ |= lines=wain
16+ ^- @t
17+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
18+++ todo-island-report
19+ |= [public=@t private=@t sur-text=@t action-text=@t todos-text=@t update-text=@t item-text=@t api-text=@t source-text=@t]
20+ ^- @t
21+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
22+ ?~ prepared 'prelude unavailable'
23+ =/ todo=type -:(ride -:!>(..zuse) sur-text)
24+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
25+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action-text))
26+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos-text))
27+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update-text))
28+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item-text))
29+ =/ marks=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
30+ =/ item-input=* (read-named:jibb-import %todo %item todo)
31+ =/ inputs=iexternals:jibb ~[[%todo %item item-input]]
32+ =/ modules=jbundle:jibb ~[[/ui/api/todo/jibb api-text]]
33+ =/ at=path /ui/todo-list/jibb
34+ =/ normal=@t (golden-types-with-prepared-prelude:jibb at source-text inputs marks modules prepared)
35+ =/ missing-mark=imark-externals:jibb (skim marks |=(x=[mark=term result=*] !=(%todo-update mark.x)))
36+ =/ duplicate-mark=imark-externals:jibb [[%todo-action ma] marks]
37+ =/ negative=(list [label=@t externals=iexternals:jibb marks=imark-externals:jibb])
38+ :~ ['missing-mark' inputs missing-mark]
39+ ['duplicate-mark' inputs duplicate-mark]
40+ ['missing-selected-sur' ~ marks]
41+ ==
42+ =/ failures=(list @t)
43+ %+ turn negative
44+ |= c=[label=@t externals=iexternals:jibb marks=imark-externals:jibb]
45+ =/ bad (infer-jibb-file:jibb /ui/api/todo/jibb api-text externals.c marks.c ~ ~[/ui/api/todo/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
46+ ?: ?=(%| -.bad) (cat 3 label.c ': rejected')
47+ (cat 3 label.c ': BAD accepted')
48+ =/ missing-module=@t (golden-types-with-prepared-prelude:jibb at source-text inputs marks ~ prepared)
49+ (of-wain:format (weld ~['unchanged todo: partial inference only' normal 'negative API imports'] (weld failures ~['missing module: partial report' missing-module])))
50+++ test-todo-partial
51+ ^- tang
52+ ?~ source ~[leaf+"todo source fixture is missing"]
53+ ?~ expected ~[leaf+"todo partial report is missing"]
54+ =/ report=@t (todo-island-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source))
55+ ?. =((to-wain:format (cat 3 report '\0a')) expected)
56+ ~[leaf+"unchanged todo partial report differs from its golden"]
57+ ~
58+--
tests/lib/jibb.hoon+1307−1208
@@ -1374,995 +1374,1062 @@
13741374/* tok-418 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
13751375/* tre-418 %txt /tests/golden/types-cell-pattern-tail/tree/txt
13761376/* typ-418 %txt /tests/golden/types-cell-pattern-tail/types/txt
1377−/* src-419 %jibb /tests/golden/types-deferred-call-context/source/jibb
1378−/* tok-419 %txt /tests/golden/types-deferred-call-context/tokens/txt
1379−/* tre-419 %txt /tests/golden/types-deferred-call-context/tree/txt
1380−/* typ-419 %txt /tests/golden/types-deferred-call-context/types/txt
1381−/* src-420 %jibb /tests/golden/types-flag-branch-context/source/jibb
1382−/* tok-420 %txt /tests/golden/types-flag-branch-context/tokens/txt
1383−/* tre-420 %txt /tests/golden/types-flag-branch-context/tree/txt
1384−/* typ-420 %txt /tests/golden/types-flag-branch-context/types/txt
1385−/* src-421 %jibb /tests/golden/types-generic-arity/source/jibb
1386−/* tok-421 %txt /tests/golden/types-generic-arity/tokens/txt
1387−/* tre-421 %txt /tests/golden/types-generic-arity/tree/txt
1388−/* typ-421 %txt /tests/golden/types-generic-arity/types/txt
1389−/* src-422 %jibb /tests/golden/types-generic-face-inference/source/jibb
1390−/* tok-422 %txt /tests/golden/types-generic-face-inference/tokens/txt
1391−/* tre-422 %txt /tests/golden/types-generic-face-inference/tree/txt
1392−/* typ-422 %txt /tests/golden/types-generic-face-inference/types/txt
1393−/* src-423 %jibb /tests/golden/types-generic-gates/source/jibb
1394−/* tok-423 %txt /tests/golden/types-generic-gates/tokens/txt
1395−/* tre-423 %txt /tests/golden/types-generic-gates/tree/txt
1396−/* typ-423 %txt /tests/golden/types-generic-gates/types/txt
1397−/* src-424 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1398−/* tok-424 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1399−/* tre-424 %txt /tests/golden/types-generic-import-reverse/tree/txt
1400−/* mod-424-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1401−/* typ-424 %txt /tests/golden/types-generic-import-reverse/types/txt
1402−/* mtre-424 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1403−/* src-425 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1404−/* tok-425 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1405−/* tre-425 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1406−/* typ-425 %txt /tests/golden/types-generic-lexical-alias/types/txt
1407−/* src-426 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1408−/* tok-426 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1409−/* tre-426 %txt /tests/golden/types-generic-local-parameter/tree/txt
1410−/* typ-426 %txt /tests/golden/types-generic-local-parameter/types/txt
1411−/* src-427 %jibb /tests/golden/types-generic-local-scope/source/jibb
1412−/* tok-427 %txt /tests/golden/types-generic-local-scope/tokens/txt
1413−/* tre-427 %txt /tests/golden/types-generic-local-scope/tree/txt
1414−/* typ-427 %txt /tests/golden/types-generic-local-scope/types/txt
1415−/* src-428 %jibb /tests/golden/types-generic-module/source/jibb
1416−/* tok-428 %txt /tests/golden/types-generic-module/tokens/txt
1417−/* tre-428 %txt /tests/golden/types-generic-module/tree/txt
1418−/* mod-428-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1419−/* typ-428 %txt /tests/golden/types-generic-module/types/txt
1420−/* mtre-428 %txt /tests/golden/types-generic-module/module-trees/txt
1421−/* src-429 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1422−/* tok-429 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1423−/* tre-429 %txt /tests/golden/types-generic-nested-scope/tree/txt
1424−/* typ-429 %txt /tests/golden/types-generic-nested-scope/types/txt
1425−/* src-430 %jibb /tests/golden/types-generic-parameters/source/jibb
1426−/* tok-430 %txt /tests/golden/types-generic-parameters/tokens/txt
1427−/* tre-430 %txt /tests/golden/types-generic-parameters/tree/txt
1428−/* typ-430 %txt /tests/golden/types-generic-parameters/types/txt
1429−/* src-431 %jibb /tests/golden/types-generic-record/source/jibb
1430−/* tok-431 %txt /tests/golden/types-generic-record/tokens/txt
1431−/* tre-431 %txt /tests/golden/types-generic-record/tree/txt
1432−/* typ-431 %txt /tests/golden/types-generic-record/types/txt
1433−/* src-432 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1434−/* tok-432 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1435−/* tre-432 %txt /tests/golden/types-generic-recursive-union/tree/txt
1436−/* typ-432 %txt /tests/golden/types-generic-recursive-union/types/txt
1437−/* src-433 %jibb /tests/golden/types-generic-repeated/source/jibb
1438−/* tok-433 %txt /tests/golden/types-generic-repeated/tokens/txt
1439−/* tre-433 %txt /tests/golden/types-generic-repeated/tree/txt
1440−/* typ-433 %txt /tests/golden/types-generic-repeated/types/txt
1441−/* src-434 %jibb /tests/golden/types-generic-union-alias/source/jibb
1442−/* tok-434 %txt /tests/golden/types-generic-union-alias/tokens/txt
1443−/* tre-434 %txt /tests/golden/types-generic-union-alias/tree/txt
1444−/* typ-434 %txt /tests/golden/types-generic-union-alias/types/txt
1445−/* src-435 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1446−/* tok-435 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1447−/* tre-435 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1448−/* mod-435-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1449−/* typ-435 %txt /tests/golden/types-generic-union-alias-face/types/txt
1450−/* mtre-435 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1451−/* src-436 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1452−/* tok-436 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1453−/* tre-436 %txt /tests/golden/types-generic-union-capitals/tree/txt
1454−/* typ-436 %txt /tests/golden/types-generic-union-capitals/types/txt
1455−/* src-437 %jibb /tests/golden/types-generic-union-errors/source/jibb
1456−/* tok-437 %txt /tests/golden/types-generic-union-errors/tokens/txt
1457−/* tre-437 %txt /tests/golden/types-generic-union-errors/tree/txt
1458−/* typ-437 %txt /tests/golden/types-generic-union-errors/types/txt
1459−/* src-438 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1460−/* tok-438 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1461−/* tre-438 %txt /tests/golden/types-generic-union-escaping/tree/txt
1462−/* mod-438-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1463−/* mod-438-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1464−/* typ-438 %txt /tests/golden/types-generic-union-escaping/types/txt
1465−/* mtre-438 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1466−/* src-439 %jibb /tests/golden/types-generic-union-import/source/jibb
1467−/* tok-439 %txt /tests/golden/types-generic-union-import/tokens/txt
1468−/* tre-439 %txt /tests/golden/types-generic-union-import/tree/txt
1469−/* mod-439-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1470−/* mod-439-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1471−/* typ-439 %txt /tests/golden/types-generic-union-import/types/txt
1472−/* mtre-439 %txt /tests/golden/types-generic-union-import/module-trees/txt
1473−/* src-440 %jibb /tests/golden/types-generic-union-local/source/jibb
1474−/* tok-440 %txt /tests/golden/types-generic-union-local/tokens/txt
1475−/* tre-440 %txt /tests/golden/types-generic-union-local/tree/txt
1476−/* typ-440 %txt /tests/golden/types-generic-union-local/types/txt
1477−/* src-441 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1478−/* tok-441 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1479−/* tre-441 %txt /tests/golden/types-generic-union-transitive/tree/txt
1480−/* mod-441-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1481−/* mod-441-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1482−/* typ-441 %txt /tests/golden/types-generic-union-transitive/types/txt
1483−/* mtre-441 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1484−/* src-442 %jibb /tests/golden/types-hole-concrete/source/jibb
1485−/* tok-442 %txt /tests/golden/types-hole-concrete/tokens/txt
1486−/* tre-442 %txt /tests/golden/types-hole-concrete/tree/txt
1487−/* typ-442 %txt /tests/golden/types-hole-concrete/types/txt
1488−/* src-443 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1489−/* tok-443 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1490−/* tre-443 %txt /tests/golden/types-hole-generic-mold/tree/txt
1491−/* typ-443 %txt /tests/golden/types-hole-generic-mold/types/txt
1492−/* src-444 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1493−/* tok-444 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1494−/* tre-444 %txt /tests/golden/types-hole-local-boundary/tree/txt
1495−/* typ-444 %txt /tests/golden/types-hole-local-boundary/types/txt
1496−/* src-445 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1497−/* tok-445 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1498−/* tre-445 %txt /tests/golden/types-hole-module-boundary/tree/txt
1499−/* mod-445-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1500−/* typ-445 %txt /tests/golden/types-hole-module-boundary/types/txt
1501−/* mtre-445 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1502−/* src-446 %jibb /tests/golden/types-hole-named-complex/source/jibb
1503−/* tok-446 %txt /tests/golden/types-hole-named-complex/tokens/txt
1504−/* tre-446 %txt /tests/golden/types-hole-named-complex/tree/txt
1505−/* typ-446 %txt /tests/golden/types-hole-named-complex/types/txt
1506−/* src-447 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1507−/* tok-447 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1508−/* tre-447 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1509−/* typ-447 %txt /tests/golden/types-hole-numeric-capture/types/txt
1510−/* src-448 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1511−/* tok-448 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1512−/* tre-448 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1513−/* typ-448 %txt /tests/golden/types-hole-unbound-mold/types/txt
1514−/* src-449 %jibb /tests/golden/types-hole-unsupported/source/jibb
1515−/* tok-449 %txt /tests/golden/types-hole-unsupported/tokens/txt
1516−/* tre-449 %txt /tests/golden/types-hole-unsupported/tree/txt
1517−/* typ-449 %txt /tests/golden/types-hole-unsupported/types/txt
1518−/* src-450 %jibb /tests/golden/types-hole-user-generic/source/jibb
1519−/* tok-450 %txt /tests/golden/types-hole-user-generic/tokens/txt
1520−/* tre-450 %txt /tests/golden/types-hole-user-generic/tree/txt
1521−/* typ-450 %txt /tests/golden/types-hole-user-generic/types/txt
1522−/* src-451 %jibb /tests/golden/types-hole-user-named/source/jibb
1523−/* tok-451 %txt /tests/golden/types-hole-user-named/tokens/txt
1524−/* tre-451 %txt /tests/golden/types-hole-user-named/tree/txt
1525−/* typ-451 %txt /tests/golden/types-hole-user-named/types/txt
1526−/* src-452 %jibb /tests/golden/types-hole-user-value/source/jibb
1527−/* tok-452 %txt /tests/golden/types-hole-user-value/tokens/txt
1528−/* tre-452 %txt /tests/golden/types-hole-user-value/tree/txt
1529−/* typ-452 %txt /tests/golden/types-hole-user-value/types/txt
1530−/* src-453 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1531−/* tok-453 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1532−/* tre-453 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1533−/* typ-453 %txt /tests/golden/types-import-duplicate-mark/types/txt
1534−/* mark-453-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1535−/* src-454 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1536−/* tok-454 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1537−/* tre-454 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1538−/* typ-454 %txt /tests/golden/types-import-duplicate-sur/types/txt
1539−/* imp-454-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1540−/* imp-454-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1541−/* imp-454-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1542−/* src-455 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1543−/* tok-455 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1544−/* tre-455 %txt /tests/golden/types-import-hoon-flags/tree/txt
1545−/* typ-455 %txt /tests/golden/types-import-hoon-flags/types/txt
1546−/* imp-455-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1547−/* imp-455-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1548−/* imp-455-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1549−/* imp-455-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1550−/* src-456 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1551−/* tok-456 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1552−/* tre-456 %txt /tests/golden/types-import-hoon-noun/tree/txt
1553−/* typ-456 %txt /tests/golden/types-import-hoon-noun/types/txt
1554−/* imp-456-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1555−/* imp-456-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1556−/* imp-456-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1557−/* imp-456-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1558−/* src-457 %jibb /tests/golden/types-import-mark/source/jibb
1559−/* tok-457 %txt /tests/golden/types-import-mark/tokens/txt
1560−/* tre-457 %txt /tests/golden/types-import-mark/tree/txt
1561−/* typ-457 %txt /tests/golden/types-import-mark/types/txt
1562−/* imp-457-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1563−/* mark-457-1 %txt /tests/golden/types-import-mark/mar/label/txt
1564−/* src-458 %jibb /tests/golden/types-import-mark-record/source/jibb
1565−/* tok-458 %txt /tests/golden/types-import-mark-record/tokens/txt
1566−/* tre-458 %txt /tests/golden/types-import-mark-record/tree/txt
1567−/* typ-458 %txt /tests/golden/types-import-mark-record/types/txt
1568−/* mark-458-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1569−/* mark-458-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1570−/* src-459 %jibb /tests/golden/types-import-missing-mold/source/jibb
1571−/* tok-459 %txt /tests/golden/types-import-missing-mold/tokens/txt
1572−/* tre-459 %txt /tests/golden/types-import-missing-mold/tree/txt
1573−/* typ-459 %txt /tests/golden/types-import-missing-mold/types/txt
1574−/* imp-459-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1575−/* src-460 %jibb /tests/golden/types-import-sur/source/jibb
1576−/* tok-460 %txt /tests/golden/types-import-sur/tokens/txt
1577−/* tre-460 %txt /tests/golden/types-import-sur/tree/txt
1578−/* typ-460 %txt /tests/golden/types-import-sur/types/txt
1579−/* imp-460-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1580−/* imp-460-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1581−/* src-461 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1582−/* tok-461 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1583−/* tre-461 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1584−/* mod-461-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1585−/* typ-461 %txt /tests/golden/types-import-sur-record-graph/types/txt
1586−/* imp-461-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1587−/* mtre-461 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1588−/* src-462 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1589−/* tok-462 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1590−/* tre-462 %txt /tests/golden/types-import-tlon-notes/tree/txt
1591−/* typ-462 %txt /tests/golden/types-import-tlon-notes/types/txt
1592−/* imp-462-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1593−/* imp-462-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1594−/* imp-462-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1595−/* imp-462-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1596−/* imp-462-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1597−/* imp-462-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1598−/* imp-462-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1599−/* src-463 %jibb /tests/golden/types-list-branch/source/jibb
1600−/* tok-463 %txt /tests/golden/types-list-branch/tokens/txt
1601−/* tre-463 %txt /tests/golden/types-list-branch/tree/txt
1602−/* typ-463 %txt /tests/golden/types-list-branch/types/txt
1603−/* src-464 %jibb /tests/golden/types-list-cons/source/jibb
1604−/* tok-464 %txt /tests/golden/types-list-cons/tokens/txt
1605−/* tre-464 %txt /tests/golden/types-list-cons/tree/txt
1606−/* typ-464 %txt /tests/golden/types-list-cons/types/txt
1607−/* src-465 %jibb /tests/golden/types-list-context/source/jibb
1608−/* tok-465 %txt /tests/golden/types-list-context/tokens/txt
1609−/* tre-465 %txt /tests/golden/types-list-context/tree/txt
1610−/* typ-465 %txt /tests/golden/types-list-context/types/txt
1611−/* src-466 %jibb /tests/golden/types-list-imported/source/jibb
1612−/* tok-466 %txt /tests/golden/types-list-imported/tokens/txt
1613−/* tre-466 %txt /tests/golden/types-list-imported/tree/txt
1614−/* typ-466 %txt /tests/golden/types-list-imported/types/txt
1615−/* imp-466-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1616−/* imp-466-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1617−/* src-467 %jibb /tests/golden/types-list-open/source/jibb
1618−/* tok-467 %txt /tests/golden/types-list-open/tokens/txt
1619−/* tre-467 %txt /tests/golden/types-list-open/tree/txt
1620−/* typ-467 %txt /tests/golden/types-list-open/types/txt
1621−/* src-468 %jibb /tests/golden/types-list-open-constraints/source/jibb
1622−/* tok-468 %txt /tests/golden/types-list-open-constraints/tokens/txt
1623−/* tre-468 %txt /tests/golden/types-list-open-constraints/tree/txt
1624−/* typ-468 %txt /tests/golden/types-list-open-constraints/types/txt
1625−/* src-469 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1626−/* tok-469 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1627−/* tre-469 %txt /tests/golden/types-list-pattern-imported/tree/txt
1628−/* typ-469 %txt /tests/golden/types-list-pattern-imported/types/txt
1629−/* imp-469-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1630−/* imp-469-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1631−/* src-470 %jibb /tests/golden/types-list-patterns/source/jibb
1632−/* tok-470 %txt /tests/golden/types-list-patterns/tokens/txt
1633−/* tre-470 %txt /tests/golden/types-list-patterns/tree/txt
1634−/* typ-470 %txt /tests/golden/types-list-patterns/types/txt
1635−/* src-471 %jibb /tests/golden/types-list-zero-fit/source/jibb
1636−/* tok-471 %txt /tests/golden/types-list-zero-fit/tokens/txt
1637−/* tre-471 %txt /tests/golden/types-list-zero-fit/tree/txt
1638−/* typ-471 %txt /tests/golden/types-list-zero-fit/types/txt
1639−/* src-472 %jibb /tests/golden/types-local-capitals/source/jibb
1640−/* tok-472 %txt /tests/golden/types-local-capitals/tokens/txt
1641−/* tre-472 %txt /tests/golden/types-local-capitals/tree/txt
1642−/* typ-472 %txt /tests/golden/types-local-capitals/types/txt
1643−/* src-473 %jibb /tests/golden/types-local-recursive/source/jibb
1644−/* tok-473 %txt /tests/golden/types-local-recursive/tokens/txt
1645−/* tre-473 %txt /tests/golden/types-local-recursive/tree/txt
1646−/* typ-473 %txt /tests/golden/types-local-recursive/types/txt
1647−/* src-474 %jibb /tests/golden/types-local-scc/source/jibb
1648−/* tok-474 %txt /tests/golden/types-local-scc/tokens/txt
1649−/* tre-474 %txt /tests/golden/types-local-scc/tree/txt
1650−/* typ-474 %txt /tests/golden/types-local-scc/types/txt
1651−/* src-475 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1652−/* tok-475 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1653−/* tre-475 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1654−/* typ-475 %txt /tests/golden/types-local-scc-adversarial/types/txt
1655−/* src-476 %jibb /tests/golden/types-missing-tag-context/source/jibb
1656−/* tok-476 %txt /tests/golden/types-missing-tag-context/tokens/txt
1657−/* tre-476 %txt /tests/golden/types-missing-tag-context/tree/txt
1658−/* typ-476 %txt /tests/golden/types-missing-tag-context/types/txt
1659−/* src-477 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1660−/* tok-477 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1661−/* tre-477 %txt /tests/golden/types-missing-tag-imported/tree/txt
1662−/* typ-477 %txt /tests/golden/types-missing-tag-imported/types/txt
1663−/* imp-477-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1664−/* imp-477-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1665−/* src-478 %jibb /tests/golden/types-missing-tag-named/source/jibb
1666−/* tok-478 %txt /tests/golden/types-missing-tag-named/tokens/txt
1667−/* tre-478 %txt /tests/golden/types-missing-tag-named/tree/txt
1668−/* typ-478 %txt /tests/golden/types-missing-tag-named/types/txt
1669−/* src-479 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1670−/* tok-479 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1671−/* tre-479 %txt /tests/golden/types-module-field-duplicate/tree/txt
1672−/* mod-479-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1673−/* typ-479 %txt /tests/golden/types-module-field-duplicate/types/txt
1674−/* mtre-479 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1675−/* src-480 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1676−/* tok-480 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1677−/* tre-480 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1678−/* mod-480-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1679−/* typ-480 %txt /tests/golden/types-module-field-nonrecord/types/txt
1680−/* mtre-480 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1681−/* src-481 %jibb /tests/golden/types-module-field-path/source/jibb
1682−/* tok-481 %txt /tests/golden/types-module-field-path/tokens/txt
1683−/* tre-481 %txt /tests/golden/types-module-field-path/tree/txt
1684−/* mod-481-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1685−/* typ-481 %txt /tests/golden/types-module-field-path/types/txt
1686−/* mtre-481 %txt /tests/golden/types-module-field-path/module-trees/txt
1687−/* src-482 %jibb /tests/golden/types-module-field-shadow/source/jibb
1688−/* tok-482 %txt /tests/golden/types-module-field-shadow/tokens/txt
1689−/* tre-482 %txt /tests/golden/types-module-field-shadow/tree/txt
1690−/* mod-482-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1691−/* typ-482 %txt /tests/golden/types-module-field-shadow/types/txt
1692−/* mtre-482 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1693−/* src-483 %jibb /tests/golden/types-module-fixtures/source/jibb
1694−/* tok-483 %txt /tests/golden/types-module-fixtures/tokens/txt
1695−/* tre-483 %txt /tests/golden/types-module-fixtures/tree/txt
1696−/* mod-483-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1697−/* mod-483-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1698−/* typ-483 %txt /tests/golden/types-module-fixtures/types/txt
1699−/* mtre-483 %txt /tests/golden/types-module-fixtures/module-trees/txt
1700−/* src-484 %jibb /tests/golden/types-module-mixed/source/jibb
1701−/* tok-484 %txt /tests/golden/types-module-mixed/tokens/txt
1702−/* tre-484 %txt /tests/golden/types-module-mixed/tree/txt
1703−/* mod-484-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1704−/* typ-484 %txt /tests/golden/types-module-mixed/types/txt
1705−/* imp-484-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1706−/* mark-484-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1707−/* mtre-484 %txt /tests/golden/types-module-mixed/module-trees/txt
1708−/* src-485 %jibb /tests/golden/types-multi-call/source/jibb
1709−/* tok-485 %txt /tests/golden/types-multi-call/tokens/txt
1710−/* tre-485 %txt /tests/golden/types-multi-call/tree/txt
1711−/* typ-485 %txt /tests/golden/types-multi-call/types/txt
1712−/* src-486 %jibb /tests/golden/types-multi-import/source/jibb
1713−/* tok-486 %txt /tests/golden/types-multi-import/tokens/txt
1714−/* tre-486 %txt /tests/golden/types-multi-import/tree/txt
1715−/* mod-486-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1716−/* typ-486 %txt /tests/golden/types-multi-import/types/txt
1717−/* mtre-486 %txt /tests/golden/types-multi-import/module-trees/txt
1718−/* src-487 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1719−/* tok-487 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1720−/* tre-487 %txt /tests/golden/types-nested-missing-tag/tree/txt
1721−/* typ-487 %txt /tests/golden/types-nested-missing-tag/types/txt
1722−/* src-488 %jibb /tests/golden/types-null-context/source/jibb
1723−/* tok-488 %txt /tests/golden/types-null-context/tokens/txt
1724−/* tre-488 %txt /tests/golden/types-null-context/tree/txt
1725−/* typ-488 %txt /tests/golden/types-null-context/types/txt
1726−/* src-489 %jibb /tests/golden/types-null-overlap/source/jibb
1727−/* tok-489 %txt /tests/golden/types-null-overlap/tokens/txt
1728−/* tre-489 %txt /tests/golden/types-null-overlap/tree/txt
1729−/* typ-489 %txt /tests/golden/types-null-overlap/types/txt
1730−/* src-490 %jibb /tests/golden/types-null-unresolved/source/jibb
1731−/* tok-490 %txt /tests/golden/types-null-unresolved/tokens/txt
1732−/* tre-490 %txt /tests/golden/types-null-unresolved/tree/txt
1733−/* typ-490 %txt /tests/golden/types-null-unresolved/types/txt
1734−/* src-491 %jibb /tests/golden/types-pair-context/source/jibb
1735−/* tok-491 %txt /tests/golden/types-pair-context/tokens/txt
1736−/* tre-491 %txt /tests/golden/types-pair-context/tree/txt
1737−/* typ-491 %txt /tests/golden/types-pair-context/types/txt
1738−/* src-492 %jibb /tests/golden/types-partial-apply/source/jibb
1739−/* tok-492 %txt /tests/golden/types-partial-apply/tokens/txt
1740−/* tre-492 %txt /tests/golden/types-partial-apply/tree/txt
1741−/* typ-492 %txt /tests/golden/types-partial-apply/types/txt
1742−/* src-493 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1743−/* tok-493 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1744−/* tre-493 %txt /tests/golden/types-partial-atom-alias/tree/txt
1745−/* typ-493 %txt /tests/golden/types-partial-atom-alias/types/txt
1746−/* src-494 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1747−/* tok-494 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1748−/* tre-494 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1749−/* typ-494 %txt /tests/golden/types-partial-atom-constraint/types/txt
1750−/* src-495 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1751−/* tok-495 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1752−/* tre-495 %txt /tests/golden/types-partial-atom-widening/tree/txt
1753−/* typ-495 %txt /tests/golden/types-partial-atom-widening/types/txt
1754−/* src-496 %jibb /tests/golden/types-partial-aura/source/jibb
1755−/* tok-496 %txt /tests/golden/types-partial-aura/tokens/txt
1756−/* tre-496 %txt /tests/golden/types-partial-aura/tree/txt
1757−/* typ-496 %txt /tests/golden/types-partial-aura/types/txt
1758−/* src-497 %jibb /tests/golden/types-partial-aura-family/source/jibb
1759−/* tok-497 %txt /tests/golden/types-partial-aura-family/tokens/txt
1760−/* tre-497 %txt /tests/golden/types-partial-aura-family/tree/txt
1761−/* typ-497 %txt /tests/golden/types-partial-aura-family/types/txt
1762−/* src-498 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1763−/* tok-498 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1764−/* tre-498 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1765−/* typ-498 %txt /tests/golden/types-partial-aura-generalization/types/txt
1766−/* src-499 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1767−/* tok-499 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1768−/* tre-499 %txt /tests/golden/types-partial-bare-atom/tree/txt
1769−/* typ-499 %txt /tests/golden/types-partial-bare-atom/types/txt
1770−/* src-500 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1771−/* tok-500 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1772−/* tre-500 %txt /tests/golden/types-partial-branch-widening/tree/txt
1773−/* typ-500 %txt /tests/golden/types-partial-branch-widening/types/txt
1774−/* src-501 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1775−/* tok-501 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1776−/* tre-501 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1777−/* typ-501 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1778−/* src-502 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1779−/* tok-502 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1780−/* tre-502 %txt /tests/golden/types-partial-decimal-default/tree/txt
1781−/* typ-502 %txt /tests/golden/types-partial-decimal-default/types/txt
1782−/* src-503 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1783−/* tok-503 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1784−/* tre-503 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1785−/* typ-503 %txt /tests/golden/types-partial-dependency-chain/types/txt
1786−/* src-504 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1787−/* tok-504 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1788−/* tre-504 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1789−/* typ-504 %txt /tests/golden/types-partial-explicit-capital/types/txt
1790−/* src-505 %jibb /tests/golden/types-partial-forward/source/jibb
1791−/* tok-505 %txt /tests/golden/types-partial-forward/tokens/txt
1792−/* tre-505 %txt /tests/golden/types-partial-forward/tree/txt
1793−/* typ-505 %txt /tests/golden/types-partial-forward/types/txt
1794−/* src-506 %jibb /tests/golden/types-partial-generalization/source/jibb
1795−/* tok-506 %txt /tests/golden/types-partial-generalization/tokens/txt
1796−/* tre-506 %txt /tests/golden/types-partial-generalization/tree/txt
1797−/* typ-506 %txt /tests/golden/types-partial-generalization/types/txt
1798−/* src-507 %jibb /tests/golden/types-partial-identity/source/jibb
1799−/* tok-507 %txt /tests/golden/types-partial-identity/tokens/txt
1800−/* tre-507 %txt /tests/golden/types-partial-identity/tree/txt
1801−/* typ-507 %txt /tests/golden/types-partial-identity/types/txt
1802−/* src-508 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1803−/* tok-508 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1804−/* tre-508 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1805−/* typ-508 %txt /tests/golden/types-partial-independent-atoms/types/txt
1806−/* src-509 %jibb /tests/golden/types-partial-local-molds/source/jibb
1807−/* tok-509 %txt /tests/golden/types-partial-local-molds/tokens/txt
1808−/* tre-509 %txt /tests/golden/types-partial-local-molds/tree/txt
1809−/* typ-509 %txt /tests/golden/types-partial-local-molds/types/txt
1810−/* src-510 %jibb /tests/golden/types-partial-locals/source/jibb
1811−/* tok-510 %txt /tests/golden/types-partial-locals/tokens/txt
1812−/* tre-510 %txt /tests/golden/types-partial-locals/tree/txt
1813−/* typ-510 %txt /tests/golden/types-partial-locals/types/txt
1814−/* src-511 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1815−/* tok-511 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1816−/* tre-511 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1817−/* typ-511 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1818−/* src-512 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1819−/* tok-512 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1820−/* tre-512 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1821−/* typ-512 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1822−/* src-513 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1823−/* tok-513 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1824−/* tre-513 %txt /tests/golden/types-partial-mold-composite/tree/txt
1825−/* typ-513 %txt /tests/golden/types-partial-mold-composite/types/txt
1826−/* src-514 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1827−/* tok-514 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1828−/* tre-514 %txt /tests/golden/types-partial-mold-forward/tree/txt
1829−/* typ-514 %txt /tests/golden/types-partial-mold-forward/types/txt
1830−/* src-515 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1831−/* tok-515 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1832−/* tre-515 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1833−/* typ-515 %txt /tests/golden/types-partial-mold-recursive/types/txt
1834−/* src-516 %jibb /tests/golden/types-partial-occurs/source/jibb
1835−/* tok-516 %txt /tests/golden/types-partial-occurs/tokens/txt
1836−/* tre-516 %txt /tests/golden/types-partial-occurs/tree/txt
1837−/* typ-516 %txt /tests/golden/types-partial-occurs/types/txt
1838−/* src-517 %jibb /tests/golden/types-partial-projection/source/jibb
1839−/* tok-517 %txt /tests/golden/types-partial-projection/tokens/txt
1840−/* tre-517 %txt /tests/golden/types-partial-projection/tree/txt
1841−/* typ-517 %txt /tests/golden/types-partial-projection/types/txt
1842−/* src-518 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1843−/* tok-518 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1844−/* tre-518 %txt /tests/golden/types-partial-shadow-global/tree/txt
1845−/* typ-518 %txt /tests/golden/types-partial-shadow-global/types/txt
1846−/* src-519 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1847−/* tok-519 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1848−/* tre-519 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1849−/* typ-519 %txt /tests/golden/types-partial-shared-tvar/types/txt
1850−/* src-520 %jibb /tests/golden/types-partial-union-cases/source/jibb
1851−/* tok-520 %txt /tests/golden/types-partial-union-cases/tokens/txt
1852−/* tre-520 %txt /tests/golden/types-partial-union-cases/tree/txt
1853−/* typ-520 %txt /tests/golden/types-partial-union-cases/types/txt
1854−/* src-521 %jibb /tests/golden/types-partial-union-edges/source/jibb
1855−/* tok-521 %txt /tests/golden/types-partial-union-edges/tokens/txt
1856−/* tre-521 %txt /tests/golden/types-partial-union-edges/tree/txt
1857−/* typ-521 %txt /tests/golden/types-partial-union-edges/types/txt
1858−/* src-522 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1859−/* tok-522 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1860−/* tre-522 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1861−/* typ-522 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1862−/* src-523 %jibb /tests/golden/types-positional-faces/source/jibb
1863−/* tok-523 %txt /tests/golden/types-positional-faces/tokens/txt
1864−/* tre-523 %txt /tests/golden/types-positional-faces/tree/txt
1865−/* typ-523 %txt /tests/golden/types-positional-faces/types/txt
1866−/* src-524 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1867−/* tok-524 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1868−/* tre-524 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1869−/* typ-524 %txt /tests/golden/types-prelude-arithmetic/types/txt
1870−/* src-525 %jibb /tests/golden/types-prelude-ask/source/jibb
1871−/* tok-525 %txt /tests/golden/types-prelude-ask/tokens/txt
1872−/* tre-525 %txt /tests/golden/types-prelude-ask/tree/txt
1873−/* typ-525 %txt /tests/golden/types-prelude-ask/types/txt
1874−/* src-526 %jibb /tests/golden/types-prelude-bond/source/jibb
1875−/* tok-526 %txt /tests/golden/types-prelude-bond/tokens/txt
1876−/* tre-526 %txt /tests/golden/types-prelude-bond/tree/txt
1877−/* typ-526 %txt /tests/golden/types-prelude-bond/types/txt
1878−/* src-527 %jibb /tests/golden/types-prelude-cmd/source/jibb
1879−/* tok-527 %txt /tests/golden/types-prelude-cmd/tokens/txt
1880−/* tre-527 %txt /tests/golden/types-prelude-cmd/tree/txt
1881−/* typ-527 %txt /tests/golden/types-prelude-cmd/types/txt
1882−/* src-528 %jibb /tests/golden/types-prelude-direct/source/jibb
1883−/* tok-528 %txt /tests/golden/types-prelude-direct/tokens/txt
1884−/* tre-528 %txt /tests/golden/types-prelude-direct/tree/txt
1885−/* typ-528 %txt /tests/golden/types-prelude-direct/types/txt
1886−/* src-529 %jibb /tests/golden/types-prelude-functional/source/jibb
1887−/* tok-529 %txt /tests/golden/types-prelude-functional/tokens/txt
1888−/* tre-529 %txt /tests/golden/types-prelude-functional/tree/txt
1889−/* typ-529 %txt /tests/golden/types-prelude-functional/types/txt
1890−/* src-530 %jibb /tests/golden/types-prelude-generic-alias/source/jibb
1891−/* tok-530 %txt /tests/golden/types-prelude-generic-alias/tokens/txt
1892−/* tre-530 %txt /tests/golden/types-prelude-generic-alias/tree/txt
1893−/* mod-530-1 %jibb /tests/golden/types-prelude-generic-alias/modules/ui/alias-helper/jibb
1894−/* typ-530 %txt /tests/golden/types-prelude-generic-alias/types/txt
1895−/* mtre-530 %txt /tests/golden/types-prelude-generic-alias/module-trees/txt
1896−/* src-531 %jibb /tests/golden/types-prelude-interface/source/jibb
1897−/* tok-531 %txt /tests/golden/types-prelude-interface/tokens/txt
1898−/* tre-531 %txt /tests/golden/types-prelude-interface/tree/txt
1899−/* mod-531-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1900−/* mod-531-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1901−/* typ-531 %txt /tests/golden/types-prelude-interface/types/txt
1902−/* mtre-531 %txt /tests/golden/types-prelude-interface/module-trees/txt
1903−/* src-532 %jibb /tests/golden/types-prelude-like/source/jibb
1904−/* tok-532 %txt /tests/golden/types-prelude-like/tokens/txt
1905−/* tre-532 %txt /tests/golden/types-prelude-like/tree/txt
1906−/* typ-532 %txt /tests/golden/types-prelude-like/types/txt
1907−/* src-533 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1908−/* tok-533 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1909−/* tre-533 %txt /tests/golden/types-prelude-list-alias/tree/txt
1910−/* typ-533 %txt /tests/golden/types-prelude-list-alias/types/txt
1911−/* src-534 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1912−/* tok-534 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1913−/* tre-534 %txt /tests/golden/types-prelude-list-functions/tree/txt
1914−/* mod-534-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1915−/* typ-534 %txt /tests/golden/types-prelude-list-functions/types/txt
1916−/* mtre-534 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1917−/* src-535 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1918−/* tok-535 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1919−/* tre-535 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1920−/* typ-535 %txt /tests/golden/types-prelude-list-helpers/types/txt
1921−/* src-536 %jibb /tests/golden/types-prelude-predicates/source/jibb
1922−/* tok-536 %txt /tests/golden/types-prelude-predicates/tokens/txt
1923−/* tre-536 %txt /tests/golden/types-prelude-predicates/tree/txt
1924−/* typ-536 %txt /tests/golden/types-prelude-predicates/types/txt
1925−/* src-537 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1926−/* tok-537 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1927−/* tre-537 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1928−/* typ-537 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1929−/* src-538 %jibb /tests/golden/types-proj-explicit-context/source/jibb
1930−/* tok-538 %txt /tests/golden/types-proj-explicit-context/tokens/txt
1931−/* tre-538 %txt /tests/golden/types-proj-explicit-context/tree/txt
1932−/* typ-538 %txt /tests/golden/types-proj-explicit-context/types/txt
1933−/* src-539 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
1934−/* tok-539 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
1935−/* tre-539 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
1936−/* typ-539 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
1937−/* src-540 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
1938−/* tok-540 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
1939−/* tre-540 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
1940−/* mod-540-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
1941−/* typ-540 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
1942−/* mtre-540 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
1943−/* src-541 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
1944−/* tok-541 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
1945−/* tre-541 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
1946−/* mod-541-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
1947−/* typ-541 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
1948−/* mtre-541 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
1949−/* src-542 %jibb /tests/golden/types-proj-reserved-local/source/jibb
1950−/* tok-542 %txt /tests/golden/types-proj-reserved-local/tokens/txt
1951−/* tre-542 %txt /tests/golden/types-proj-reserved-local/tree/txt
1952−/* typ-542 %txt /tests/golden/types-proj-reserved-local/types/txt
1953−/* src-543 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
1954−/* tok-543 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
1955−/* tre-543 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
1956−/* typ-543 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
1957−/* src-544 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
1958−/* tok-544 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
1959−/* tre-544 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
1960−/* typ-544 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
1961−/* src-545 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
1962−/* tok-545 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
1963−/* tre-545 %txt /tests/golden/types-proj-reserved-mold/tree/txt
1964−/* typ-545 %txt /tests/golden/types-proj-reserved-mold/types/txt
1965−/* src-546 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
1966−/* tok-546 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
1967−/* tre-546 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
1968−/* typ-546 %txt /tests/golden/types-proj-reserved-pattern/types/txt
1969−/* src-547 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
1970−/* tok-547 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
1971−/* tre-547 %txt /tests/golden/types-proj-reserved-positive/tree/txt
1972−/* typ-547 %txt /tests/golden/types-proj-reserved-positive/types/txt
1973−/* src-548 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
1974−/* tok-548 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
1975−/* tre-548 %txt /tests/golden/types-proj-reserved-sample/tree/txt
1976−/* typ-548 %txt /tests/golden/types-proj-reserved-sample/types/txt
1977−/* src-549 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
1978−/* tok-549 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
1979−/* tre-549 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
1980−/* typ-549 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
1981−/* src-550 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
1982−/* tok-550 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
1983−/* tre-550 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
1984−/* typ-550 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
1985−/* src-551 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
1986−/* tok-551 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
1987−/* tre-551 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
1988−/* typ-551 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
1989−/* src-552 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
1990−/* tok-552 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
1991−/* tre-552 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
1992−/* typ-552 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
1993−/* src-553 %jibb /tests/golden/types-proj-reserved-value/source/jibb
1994−/* tok-553 %txt /tests/golden/types-proj-reserved-value/tokens/txt
1995−/* tre-553 %txt /tests/golden/types-proj-reserved-value/tree/txt
1996−/* typ-553 %txt /tests/golden/types-proj-reserved-value/types/txt
1997−/* src-554 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
1998−/* tok-554 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
1999−/* tre-554 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2000−/* typ-554 %txt /tests/golden/types-proj-single-duplicate/types/txt
2001−/* src-555 %jibb /tests/golden/types-proj-single-field/source/jibb
2002−/* tok-555 %txt /tests/golden/types-proj-single-field/tokens/txt
2003−/* tre-555 %txt /tests/golden/types-proj-single-field/tree/txt
2004−/* typ-555 %txt /tests/golden/types-proj-single-field/types/txt
2005−/* src-556 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2006−/* tok-556 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2007−/* tre-556 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2008−/* typ-556 %txt /tests/golden/types-proj-single-sample-face/types/txt
2009−/* src-557 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2010−/* tok-557 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2011−/* tre-557 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2012−/* typ-557 %txt /tests/golden/types-proj-single-wrapped/types/txt
2013−/* src-558 %jibb /tests/golden/types-qath-faces/source/jibb
2014−/* tok-558 %txt /tests/golden/types-qath-faces/tokens/txt
2015−/* tre-558 %txt /tests/golden/types-qath-faces/tree/txt
2016−/* typ-558 %txt /tests/golden/types-qath-faces/types/txt
2017−/* src-559 %jibb /tests/golden/types-qath-holes/source/jibb
2018−/* tok-559 %txt /tests/golden/types-qath-holes/tokens/txt
2019−/* tre-559 %txt /tests/golden/types-qath-holes/tree/txt
2020−/* typ-559 %txt /tests/golden/types-qath-holes/types/txt
2021−/* src-560 %jibb /tests/golden/types-qath-module-identity/source/jibb
2022−/* tok-560 %txt /tests/golden/types-qath-module-identity/tokens/txt
2023−/* tre-560 %txt /tests/golden/types-qath-module-identity/tree/txt
2024−/* mod-560-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2025−/* mod-560-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2026−/* mod-560-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2027−/* typ-560 %txt /tests/golden/types-qath-module-identity/types/txt
2028−/* mtre-560 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2029−/* src-561 %jibb /tests/golden/types-qath-recursive/source/jibb
2030−/* tok-561 %txt /tests/golden/types-qath-recursive/tokens/txt
2031−/* tre-561 %txt /tests/golden/types-qath-recursive/tree/txt
2032−/* typ-561 %txt /tests/golden/types-qath-recursive/types/txt
2033−/* src-562 %jibb /tests/golden/types-record-bound-variable/source/jibb
2034−/* tok-562 %txt /tests/golden/types-record-bound-variable/tokens/txt
2035−/* tre-562 %txt /tests/golden/types-record-bound-variable/tree/txt
2036−/* typ-562 %txt /tests/golden/types-record-bound-variable/types/txt
2037−/* src-563 %jibb /tests/golden/types-record-cast-context/source/jibb
2038−/* tok-563 %txt /tests/golden/types-record-cast-context/tokens/txt
2039−/* tre-563 %txt /tests/golden/types-record-cast-context/tree/txt
2040−/* typ-563 %txt /tests/golden/types-record-cast-context/types/txt
2041−/* src-564 %jibb /tests/golden/types-record-change/source/jibb
2042−/* tok-564 %txt /tests/golden/types-record-change/tokens/txt
2043−/* tre-564 %txt /tests/golden/types-record-change/tree/txt
2044−/* typ-564 %txt /tests/golden/types-record-change/types/txt
2045−/* src-565 %jibb /tests/golden/types-record-change-generic/source/jibb
2046−/* tok-565 %txt /tests/golden/types-record-change-generic/tokens/txt
2047−/* tre-565 %txt /tests/golden/types-record-change-generic/tree/txt
2048−/* typ-565 %txt /tests/golden/types-record-change-generic/types/txt
2049−/* src-566 %jibb /tests/golden/types-record-faces/source/jibb
2050−/* tok-566 %txt /tests/golden/types-record-faces/tokens/txt
2051−/* tre-566 %txt /tests/golden/types-record-faces/tree/txt
2052−/* typ-566 %txt /tests/golden/types-record-faces/types/txt
2053−/* src-567 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2054−/* tok-567 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2055−/* tre-567 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2056−/* typ-567 %txt /tests/golden/types-record-field-edit-separate/types/txt
2057−/* src-568 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2058−/* tok-568 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2059−/* tre-568 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2060−/* typ-568 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2061−/* src-569 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2062−/* tok-569 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2063−/* tre-569 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2064−/* typ-569 %txt /tests/golden/types-record-field-expr-separate/types/txt
2065−/* src-570 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2066−/* tok-570 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2067−/* tre-570 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2068−/* mod-570-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2069−/* typ-570 %txt /tests/golden/types-record-field-module-reachable/types/txt
2070−/* mtre-570 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2071−/* src-571 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2072−/* tok-571 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2073−/* tre-571 %txt /tests/golden/types-record-field-module-unused/tree/txt
2074−/* mod-571-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2075−/* mod-571-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2076−/* typ-571 %txt /tests/golden/types-record-field-module-unused/types/txt
2077−/* mtre-571 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2078−/* src-572 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2079−/* tok-572 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2080−/* tre-572 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2081−/* typ-572 %txt /tests/golden/types-record-field-nested-mold/types/txt
2082−/* src-573 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2083−/* tok-573 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2084−/* tre-573 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2085−/* typ-573 %txt /tests/golden/types-record-field-outer-inner/types/txt
2086−/* src-574 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2087−/* tok-574 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2088−/* tre-574 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2089−/* typ-574 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2090−/* src-575 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2091−/* tok-575 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2092−/* tre-575 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2093−/* typ-575 %txt /tests/golden/types-record-field-separate-molds/types/txt
2094−/* src-576 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2095−/* tok-576 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2096−/* tre-576 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2097−/* typ-576 %txt /tests/golden/types-record-field-unused-mold/types/txt
2098−/* src-577 %jibb /tests/golden/types-record-import/source/jibb
2099−/* tok-577 %txt /tests/golden/types-record-import/tokens/txt
2100−/* tre-577 %txt /tests/golden/types-record-import/tree/txt
2101−/* mod-577-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2102−/* typ-577 %txt /tests/golden/types-record-import/types/txt
2103−/* mtre-577 %txt /tests/golden/types-record-import/module-trees/txt
2104−/* src-578 %jibb /tests/golden/types-record-local-scheme/source/jibb
2105−/* tok-578 %txt /tests/golden/types-record-local-scheme/tokens/txt
2106−/* tre-578 %txt /tests/golden/types-record-local-scheme/tree/txt
2107−/* typ-578 %txt /tests/golden/types-record-local-scheme/types/txt
2108−/* src-579 %jibb /tests/golden/types-record-nested/source/jibb
2109−/* tok-579 %txt /tests/golden/types-record-nested/tokens/txt
2110−/* tre-579 %txt /tests/golden/types-record-nested/tree/txt
2111−/* typ-579 %txt /tests/golden/types-record-nested/types/txt
2112−/* src-580 %jibb /tests/golden/types-record-to-tuple/source/jibb
2113−/* tok-580 %txt /tests/golden/types-record-to-tuple/tokens/txt
2114−/* tre-580 %txt /tests/golden/types-record-to-tuple/tree/txt
2115−/* typ-580 %txt /tests/golden/types-record-to-tuple/types/txt
2116−/* src-581 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2117−/* tok-581 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2118−/* tre-581 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2119−/* typ-581 %txt /tests/golden/types-recursion-scc-failures/types/txt
2120−/* src-582 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2121−/* tok-582 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2122−/* tre-582 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2123−/* typ-582 %txt /tests/golden/types-recursion-scc-groups/types/txt
2124−/* src-583 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2125−/* tok-583 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2126−/* tre-583 %txt /tests/golden/types-recursion-scc-import/tree/txt
2127−/* mod-583-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2128−/* typ-583 %txt /tests/golden/types-recursion-scc-import/types/txt
2129−/* mtre-583 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2130−/* src-584 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2131−/* tok-584 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2132−/* tre-584 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2133−/* mod-584-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2134−/* typ-584 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2135−/* mtre-584 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2136−/* src-585 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2137−/* tok-585 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2138−/* tre-585 %txt /tests/golden/types-recursion-scc-local/tree/txt
2139−/* typ-585 %txt /tests/golden/types-recursion-scc-local/types/txt
2140−/* src-586 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2141−/* tok-586 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2142−/* tre-586 %txt /tests/golden/types-recursion-scc-order/tree/txt
2143−/* typ-586 %txt /tests/golden/types-recursion-scc-order/types/txt
2144−/* src-587 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2145−/* tok-587 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2146−/* tre-587 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2147−/* typ-587 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2148−/* src-588 %jibb /tests/golden/types-recursive-branch/source/jibb
2149−/* tok-588 %txt /tests/golden/types-recursive-branch/tokens/txt
2150−/* tre-588 %txt /tests/golden/types-recursive-branch/tree/txt
2151−/* typ-588 %txt /tests/golden/types-recursive-branch/types/txt
2152−/* src-589 %jibb /tests/golden/types-recursive-gate/source/jibb
2153−/* tok-589 %txt /tests/golden/types-recursive-gate/tokens/txt
2154−/* tre-589 %txt /tests/golden/types-recursive-gate/tree/txt
2155−/* typ-589 %txt /tests/golden/types-recursive-gate/types/txt
2156−/* src-590 %jibb /tests/golden/types-recursive-sample/source/jibb
2157−/* tok-590 %txt /tests/golden/types-recursive-sample/tokens/txt
2158−/* tre-590 %txt /tests/golden/types-recursive-sample/tree/txt
2159−/* typ-590 %txt /tests/golden/types-recursive-sample/types/txt
2160−/* src-591 %jibb /tests/golden/types-scope-library-poke/source/jibb
2161−/* tok-591 %txt /tests/golden/types-scope-library-poke/tokens/txt
2162−/* tre-591 %txt /tests/golden/types-scope-library-poke/tree/txt
2163−/* typ-591 %txt /tests/golden/types-scope-library-poke/types/txt
2164−/* src-592 %jibb /tests/golden/types-scope-root-api/source/jibb
2165−/* tok-592 %txt /tests/golden/types-scope-root-api/tokens/txt
2166−/* tre-592 %txt /tests/golden/types-scope-root-api/tree/txt
2167−/* typ-592 %txt /tests/golden/types-scope-root-api/types/txt
2168−/* src-593 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2169−/* tok-593 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2170−/* tre-593 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2171−/* typ-593 %txt /tests/golden/types-scope-store-duplicate/types/txt
2172−/* src-594 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2173−/* tok-594 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2174−/* tre-594 %txt /tests/golden/types-scope-store-shadow/tree/txt
2175−/* typ-594 %txt /tests/golden/types-scope-store-shadow/types/txt
2176−/* src-595 %jibb /tests/golden/types-single-case-pattern/source/jibb
2177−/* tok-595 %txt /tests/golden/types-single-case-pattern/tokens/txt
2178−/* tre-595 %txt /tests/golden/types-single-case-pattern/tree/txt
2179−/* typ-595 %txt /tests/golden/types-single-case-pattern/types/txt
2180−/* src-596 %jibb /tests/golden/types-string-interpolation/source/jibb
2181−/* tok-596 %txt /tests/golden/types-string-interpolation/tokens/txt
2182−/* tre-596 %txt /tests/golden/types-string-interpolation/tree/txt
2183−/* typ-596 %txt /tests/golden/types-string-interpolation/types/txt
2184−/* src-597 %jibb /tests/golden/types-tuple-context/source/jibb
2185−/* tok-597 %txt /tests/golden/types-tuple-context/tokens/txt
2186−/* tre-597 %txt /tests/golden/types-tuple-context/tree/txt
2187−/* typ-597 %txt /tests/golden/types-tuple-context/types/txt
2188−/* src-598 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2189−/* tok-598 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2190−/* tre-598 %txt /tests/golden/types-tuple-context-nested/tree/txt
2191−/* typ-598 %txt /tests/golden/types-tuple-context-nested/types/txt
2192−/* src-599 %jibb /tests/golden/types-union-alias/source/jibb
2193−/* tok-599 %txt /tests/golden/types-union-alias/tokens/txt
2194−/* tre-599 %txt /tests/golden/types-union-alias/tree/txt
2195−/* typ-599 %txt /tests/golden/types-union-alias/types/txt
2196−/* src-600 %jibb /tests/golden/types-union-branch-context/source/jibb
2197−/* tok-600 %txt /tests/golden/types-union-branch-context/tokens/txt
2198−/* tre-600 %txt /tests/golden/types-union-branch-context/tree/txt
2199−/* typ-600 %txt /tests/golden/types-union-branch-context/types/txt
2200−/* src-601 %jibb /tests/golden/types-union-branch-pending/source/jibb
2201−/* tok-601 %txt /tests/golden/types-union-branch-pending/tokens/txt
2202−/* tre-601 %txt /tests/golden/types-union-branch-pending/tree/txt
2203−/* typ-601 %txt /tests/golden/types-union-branch-pending/types/txt
2204−/* src-602 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2205−/* tok-602 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2206−/* tre-602 %txt /tests/golden/types-union-constructor-shape/tree/txt
2207−/* typ-602 %txt /tests/golden/types-union-constructor-shape/types/txt
2208−/* src-603 %jibb /tests/golden/types-union-context-flow/source/jibb
2209−/* tok-603 %txt /tests/golden/types-union-context-flow/tokens/txt
2210−/* tre-603 %txt /tests/golden/types-union-context-flow/tree/txt
2211−/* typ-603 %txt /tests/golden/types-union-context-flow/types/txt
2212−/* src-604 %jibb /tests/golden/types-union-finite/source/jibb
2213−/* tok-604 %txt /tests/golden/types-union-finite/tokens/txt
2214−/* tre-604 %txt /tests/golden/types-union-finite/tree/txt
2215−/* typ-604 %txt /tests/golden/types-union-finite/types/txt
2216−/* src-605 %jibb /tests/golden/types-union-finite-context/source/jibb
2217−/* tok-605 %txt /tests/golden/types-union-finite-context/tokens/txt
2218−/* tre-605 %txt /tests/golden/types-union-finite-context/tree/txt
2219−/* typ-605 %txt /tests/golden/types-union-finite-context/types/txt
2220−/* src-606 %jibb /tests/golden/types-union-finite-generic/source/jibb
2221−/* tok-606 %txt /tests/golden/types-union-finite-generic/tokens/txt
2222−/* tre-606 %txt /tests/golden/types-union-finite-generic/tree/txt
2223−/* typ-606 %txt /tests/golden/types-union-finite-generic/types/txt
2224−/* src-607 %jibb /tests/golden/types-union-finite-limit/source/jibb
2225−/* tok-607 %txt /tests/golden/types-union-finite-limit/tokens/txt
2226−/* tre-607 %txt /tests/golden/types-union-finite-limit/tree/txt
2227−/* typ-607 %txt /tests/golden/types-union-finite-limit/types/txt
2228−/* src-608 %jibb /tests/golden/types-union-import/source/jibb
2229−/* tok-608 %txt /tests/golden/types-union-import/tokens/txt
2230−/* tre-608 %txt /tests/golden/types-union-import/tree/txt
2231−/* mod-608-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2232−/* typ-608 %txt /tests/golden/types-union-import/types/txt
2233−/* mtre-608 %txt /tests/golden/types-union-import/module-trees/txt
2234−/* src-609 %jibb /tests/golden/types-union-local-pending/source/jibb
2235−/* tok-609 %txt /tests/golden/types-union-local-pending/tokens/txt
2236−/* tre-609 %txt /tests/golden/types-union-local-pending/tree/txt
2237−/* typ-609 %txt /tests/golden/types-union-local-pending/types/txt
2238−/* src-610 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2239−/* tok-610 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2240−/* tre-610 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2241−/* typ-610 %txt /tests/golden/types-union-nonwing-subject/types/txt
2242−/* src-611 %jibb /tests/golden/types-union-overlap/source/jibb
2243−/* tok-611 %txt /tests/golden/types-union-overlap/tokens/txt
2244−/* tre-611 %txt /tests/golden/types-union-overlap/tree/txt
2245−/* typ-611 %txt /tests/golden/types-union-overlap/types/txt
2246−/* src-612 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2247−/* tok-612 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2248−/* tre-612 %txt /tests/golden/types-union-overlap-nested/tree/txt
2249−/* typ-612 %txt /tests/golden/types-union-overlap-nested/types/txt
2250−/* src-613 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2251−/* tok-613 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2252−/* tre-613 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2253−/* typ-613 %txt /tests/golden/types-union-pattern-result-context/types/txt
2254−/* src-614 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2255−/* tok-614 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2256−/* tre-614 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2257−/* typ-614 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2258−/* src-615 %jibb /tests/golden/types-union-patterns/source/jibb
2259−/* tok-615 %txt /tests/golden/types-union-patterns/tokens/txt
2260−/* tre-615 %txt /tests/golden/types-union-patterns/tree/txt
2261−/* typ-615 %txt /tests/golden/types-union-patterns/types/txt
2262−/* src-616 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2263−/* tok-616 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2264−/* tre-616 %txt /tests/golden/types-union-patterns-generic/tree/txt
2265−/* typ-616 %txt /tests/golden/types-union-patterns-generic/types/txt
2266−/* src-617 %jibb /tests/golden/types-union-patterns-import/source/jibb
2267−/* tok-617 %txt /tests/golden/types-union-patterns-import/tokens/txt
2268−/* tre-617 %txt /tests/golden/types-union-patterns-import/tree/txt
2269−/* mod-617-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2270−/* typ-617 %txt /tests/golden/types-union-patterns-import/types/txt
2271−/* mtre-617 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2272−/* src-618 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2273−/* tok-618 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2274−/* tre-618 %txt /tests/golden/types-union-phantom-generic/tree/txt
2275−/* typ-618 %txt /tests/golden/types-union-phantom-generic/types/txt
2276−/* src-619 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2277−/* tok-619 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2278−/* tre-619 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2279−/* mod-619-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2280−/* mod-619-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2281−/* typ-619 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2282−/* mtre-619 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2283−/* src-620 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2284−/* tok-620 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2285−/* tre-620 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2286−/* mod-620-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2287−/* typ-620 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2288−/* mtre-620 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2289−/* src-621 %jibb /tests/golden/types-union-print-distinct/source/jibb
2290−/* tok-621 %txt /tests/golden/types-union-print-distinct/tokens/txt
2291−/* tre-621 %txt /tests/golden/types-union-print-distinct/tree/txt
2292−/* mod-621-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2293−/* mod-621-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2294−/* mod-621-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2295−/* typ-621 %txt /tests/golden/types-union-print-distinct/types/txt
2296−/* mtre-621 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2297−/* src-622 %jibb /tests/golden/types-union-print-escape/source/jibb
2298−/* tok-622 %txt /tests/golden/types-union-print-escape/tokens/txt
2299−/* tre-622 %txt /tests/golden/types-union-print-escape/tree/txt
2300−/* typ-622 %txt /tests/golden/types-union-print-escape/types/txt
2301−/* src-623 %jibb /tests/golden/types-union-print-local/source/jibb
2302−/* tok-623 %txt /tests/golden/types-union-print-local/tokens/txt
2303−/* tre-623 %txt /tests/golden/types-union-print-local/tree/txt
2304−/* typ-623 %txt /tests/golden/types-union-print-local/types/txt
2305−/* src-624 %jibb /tests/golden/types-union-print-nested/source/jibb
2306−/* tok-624 %txt /tests/golden/types-union-print-nested/tokens/txt
2307−/* tre-624 %txt /tests/golden/types-union-print-nested/tree/txt
2308−/* typ-624 %txt /tests/golden/types-union-print-nested/types/txt
2309−/* src-625 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2310−/* tok-625 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2311−/* tre-625 %txt /tests/golden/types-union-print-same-origin/tree/txt
2312−/* mod-625-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2313−/* typ-625 %txt /tests/golden/types-union-print-same-origin/types/txt
2314−/* mtre-625 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2315−/* src-626 %jibb /tests/golden/types-union-print-transitive/source/jibb
2316−/* tok-626 %txt /tests/golden/types-union-print-transitive/tokens/txt
2317−/* tre-626 %txt /tests/golden/types-union-print-transitive/tree/txt
2318−/* mod-626-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2319−/* mod-626-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2320−/* typ-626 %txt /tests/golden/types-union-print-transitive/types/txt
2321−/* mtre-626 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2322−/* src-627 %jibb /tests/golden/types-union-singleton/source/jibb
2323−/* tok-627 %txt /tests/golden/types-union-singleton/tokens/txt
2324−/* tre-627 %txt /tests/golden/types-union-singleton/tree/txt
2325−/* typ-627 %txt /tests/golden/types-union-singleton/types/txt
2326−/* src-628 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2327−/* tok-628 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2328−/* tre-628 %txt /tests/golden/types-union-tag-atoms/tree/txt
2329−/* typ-628 %txt /tests/golden/types-union-tag-atoms/types/txt
2330−/* src-629 %jibb /tests/golden/types-union-tags/source/jibb
2331−/* tok-629 %txt /tests/golden/types-union-tags/tokens/txt
2332−/* tre-629 %txt /tests/golden/types-union-tags/tree/txt
2333−/* typ-629 %txt /tests/golden/types-union-tags/types/txt
2334−/* src-630 %jibb /tests/golden/types-union-unresolved/source/jibb
2335−/* tok-630 %txt /tests/golden/types-union-unresolved/tokens/txt
2336−/* tre-630 %txt /tests/golden/types-union-unresolved/tree/txt
2337−/* typ-630 %txt /tests/golden/types-union-unresolved/types/txt
2338−/* src-631 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2339−/* tok-631 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2340−/* tre-631 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2341−/* typ-631 %txt /tests/golden/types-union-unresolved-flow/types/txt
2342−/* src-632 %jibb /tests/golden/types-unit-construction/source/jibb
2343−/* tok-632 %txt /tests/golden/types-unit-construction/tokens/txt
2344−/* tre-632 %txt /tests/golden/types-unit-construction/tree/txt
2345−/* typ-632 %txt /tests/golden/types-unit-construction/types/txt
2346−/* src-633 %jibb /tests/golden/types-unit-context/source/jibb
2347−/* tok-633 %txt /tests/golden/types-unit-context/tokens/txt
2348−/* tre-633 %txt /tests/golden/types-unit-context/tree/txt
2349−/* typ-633 %txt /tests/golden/types-unit-context/types/txt
2350−/* src-634 %jibb /tests/golden/types-unit-patterns/source/jibb
2351−/* tok-634 %txt /tests/golden/types-unit-patterns/tokens/txt
2352−/* tre-634 %txt /tests/golden/types-unit-patterns/tree/txt
2353−/* typ-634 %txt /tests/golden/types-unit-patterns/types/txt
2354−/* src-635 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2355−/* tok-635 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2356−/* tre-635 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2357−/* typ-635 %txt /tests/golden/types-value-cycle-shadow/types/txt
2358−/* src-636 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2359−/* tok-636 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2360−/* tre-636 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2361−/* typ-636 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2362−/* src-637 %jibb /tests/golden/types-value-cycles/source/jibb
2363−/* tok-637 %txt /tests/golden/types-value-cycles/tokens/txt
2364−/* tre-637 %txt /tests/golden/types-value-cycles/tree/txt
2365−/* typ-637 %txt /tests/golden/types-value-cycles/types/txt
1377+/* src-419 %jibb /tests/golden/types-constructor-context/source/jibb
1378+/* tok-419 %txt /tests/golden/types-constructor-context/tokens/txt
1379+/* tre-419 %txt /tests/golden/types-constructor-context/tree/txt
1380+/* typ-419 %txt /tests/golden/types-constructor-context/types/txt
1381+/* src-420 %jibb /tests/golden/types-deferred-call-context/source/jibb
1382+/* tok-420 %txt /tests/golden/types-deferred-call-context/tokens/txt
1383+/* tre-420 %txt /tests/golden/types-deferred-call-context/tree/txt
1384+/* typ-420 %txt /tests/golden/types-deferred-call-context/types/txt
1385+/* src-421 %jibb /tests/golden/types-equal-head-disjoint/source/jibb
1386+/* tok-421 %txt /tests/golden/types-equal-head-disjoint/tokens/txt
1387+/* tre-421 %txt /tests/golden/types-equal-head-disjoint/tree/txt
1388+/* typ-421 %txt /tests/golden/types-equal-head-disjoint/types/txt
1389+/* src-422 %jibb /tests/golden/types-flag-branch-context/source/jibb
1390+/* tok-422 %txt /tests/golden/types-flag-branch-context/tokens/txt
1391+/* tre-422 %txt /tests/golden/types-flag-branch-context/tree/txt
1392+/* typ-422 %txt /tests/golden/types-flag-branch-context/types/txt
1393+/* src-423 %jibb /tests/golden/types-generic-arity/source/jibb
1394+/* tok-423 %txt /tests/golden/types-generic-arity/tokens/txt
1395+/* tre-423 %txt /tests/golden/types-generic-arity/tree/txt
1396+/* typ-423 %txt /tests/golden/types-generic-arity/types/txt
1397+/* src-424 %jibb /tests/golden/types-generic-face-inference/source/jibb
1398+/* tok-424 %txt /tests/golden/types-generic-face-inference/tokens/txt
1399+/* tre-424 %txt /tests/golden/types-generic-face-inference/tree/txt
1400+/* typ-424 %txt /tests/golden/types-generic-face-inference/types/txt
1401+/* src-425 %jibb /tests/golden/types-generic-gates/source/jibb
1402+/* tok-425 %txt /tests/golden/types-generic-gates/tokens/txt
1403+/* tre-425 %txt /tests/golden/types-generic-gates/tree/txt
1404+/* typ-425 %txt /tests/golden/types-generic-gates/types/txt
1405+/* src-426 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1406+/* tok-426 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1407+/* tre-426 %txt /tests/golden/types-generic-import-reverse/tree/txt
1408+/* mod-426-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1409+/* typ-426 %txt /tests/golden/types-generic-import-reverse/types/txt
1410+/* mtre-426 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1411+/* src-427 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1412+/* tok-427 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1413+/* tre-427 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1414+/* typ-427 %txt /tests/golden/types-generic-lexical-alias/types/txt
1415+/* src-428 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1416+/* tok-428 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1417+/* tre-428 %txt /tests/golden/types-generic-local-parameter/tree/txt
1418+/* typ-428 %txt /tests/golden/types-generic-local-parameter/types/txt
1419+/* src-429 %jibb /tests/golden/types-generic-local-scope/source/jibb
1420+/* tok-429 %txt /tests/golden/types-generic-local-scope/tokens/txt
1421+/* tre-429 %txt /tests/golden/types-generic-local-scope/tree/txt
1422+/* typ-429 %txt /tests/golden/types-generic-local-scope/types/txt
1423+/* src-430 %jibb /tests/golden/types-generic-module/source/jibb
1424+/* tok-430 %txt /tests/golden/types-generic-module/tokens/txt
1425+/* tre-430 %txt /tests/golden/types-generic-module/tree/txt
1426+/* mod-430-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1427+/* typ-430 %txt /tests/golden/types-generic-module/types/txt
1428+/* mtre-430 %txt /tests/golden/types-generic-module/module-trees/txt
1429+/* src-431 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1430+/* tok-431 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1431+/* tre-431 %txt /tests/golden/types-generic-nested-scope/tree/txt
1432+/* typ-431 %txt /tests/golden/types-generic-nested-scope/types/txt
1433+/* src-432 %jibb /tests/golden/types-generic-parameters/source/jibb
1434+/* tok-432 %txt /tests/golden/types-generic-parameters/tokens/txt
1435+/* tre-432 %txt /tests/golden/types-generic-parameters/tree/txt
1436+/* typ-432 %txt /tests/golden/types-generic-parameters/types/txt
1437+/* src-433 %jibb /tests/golden/types-generic-record/source/jibb
1438+/* tok-433 %txt /tests/golden/types-generic-record/tokens/txt
1439+/* tre-433 %txt /tests/golden/types-generic-record/tree/txt
1440+/* typ-433 %txt /tests/golden/types-generic-record/types/txt
1441+/* src-434 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1442+/* tok-434 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1443+/* tre-434 %txt /tests/golden/types-generic-recursive-union/tree/txt
1444+/* typ-434 %txt /tests/golden/types-generic-recursive-union/types/txt
1445+/* src-435 %jibb /tests/golden/types-generic-repeated/source/jibb
1446+/* tok-435 %txt /tests/golden/types-generic-repeated/tokens/txt
1447+/* tre-435 %txt /tests/golden/types-generic-repeated/tree/txt
1448+/* typ-435 %txt /tests/golden/types-generic-repeated/types/txt
1449+/* src-436 %jibb /tests/golden/types-generic-result-context/source/jibb
1450+/* tok-436 %txt /tests/golden/types-generic-result-context/tokens/txt
1451+/* tre-436 %txt /tests/golden/types-generic-result-context/tree/txt
1452+/* typ-436 %txt /tests/golden/types-generic-result-context/types/txt
1453+/* src-437 %jibb /tests/golden/types-generic-union-alias/source/jibb
1454+/* tok-437 %txt /tests/golden/types-generic-union-alias/tokens/txt
1455+/* tre-437 %txt /tests/golden/types-generic-union-alias/tree/txt
1456+/* typ-437 %txt /tests/golden/types-generic-union-alias/types/txt
1457+/* src-438 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1458+/* tok-438 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1459+/* tre-438 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1460+/* mod-438-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1461+/* typ-438 %txt /tests/golden/types-generic-union-alias-face/types/txt
1462+/* mtre-438 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1463+/* src-439 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1464+/* tok-439 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1465+/* tre-439 %txt /tests/golden/types-generic-union-capitals/tree/txt
1466+/* typ-439 %txt /tests/golden/types-generic-union-capitals/types/txt
1467+/* src-440 %jibb /tests/golden/types-generic-union-errors/source/jibb
1468+/* tok-440 %txt /tests/golden/types-generic-union-errors/tokens/txt
1469+/* tre-440 %txt /tests/golden/types-generic-union-errors/tree/txt
1470+/* typ-440 %txt /tests/golden/types-generic-union-errors/types/txt
1471+/* src-441 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1472+/* tok-441 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1473+/* tre-441 %txt /tests/golden/types-generic-union-escaping/tree/txt
1474+/* mod-441-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1475+/* mod-441-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1476+/* typ-441 %txt /tests/golden/types-generic-union-escaping/types/txt
1477+/* mtre-441 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1478+/* src-442 %jibb /tests/golden/types-generic-union-import/source/jibb
1479+/* tok-442 %txt /tests/golden/types-generic-union-import/tokens/txt
1480+/* tre-442 %txt /tests/golden/types-generic-union-import/tree/txt
1481+/* mod-442-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1482+/* mod-442-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1483+/* typ-442 %txt /tests/golden/types-generic-union-import/types/txt
1484+/* mtre-442 %txt /tests/golden/types-generic-union-import/module-trees/txt
1485+/* src-443 %jibb /tests/golden/types-generic-union-local/source/jibb
1486+/* tok-443 %txt /tests/golden/types-generic-union-local/tokens/txt
1487+/* tre-443 %txt /tests/golden/types-generic-union-local/tree/txt
1488+/* typ-443 %txt /tests/golden/types-generic-union-local/types/txt
1489+/* src-444 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1490+/* tok-444 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1491+/* tre-444 %txt /tests/golden/types-generic-union-transitive/tree/txt
1492+/* mod-444-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1493+/* mod-444-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1494+/* typ-444 %txt /tests/golden/types-generic-union-transitive/types/txt
1495+/* mtre-444 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1496+/* src-445 %jibb /tests/golden/types-hole-concrete/source/jibb
1497+/* tok-445 %txt /tests/golden/types-hole-concrete/tokens/txt
1498+/* tre-445 %txt /tests/golden/types-hole-concrete/tree/txt
1499+/* typ-445 %txt /tests/golden/types-hole-concrete/types/txt
1500+/* src-446 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1501+/* tok-446 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1502+/* tre-446 %txt /tests/golden/types-hole-generic-mold/tree/txt
1503+/* typ-446 %txt /tests/golden/types-hole-generic-mold/types/txt
1504+/* src-447 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1505+/* tok-447 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1506+/* tre-447 %txt /tests/golden/types-hole-local-boundary/tree/txt
1507+/* typ-447 %txt /tests/golden/types-hole-local-boundary/types/txt
1508+/* src-448 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1509+/* tok-448 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1510+/* tre-448 %txt /tests/golden/types-hole-module-boundary/tree/txt
1511+/* mod-448-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1512+/* typ-448 %txt /tests/golden/types-hole-module-boundary/types/txt
1513+/* mtre-448 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1514+/* src-449 %jibb /tests/golden/types-hole-named-complex/source/jibb
1515+/* tok-449 %txt /tests/golden/types-hole-named-complex/tokens/txt
1516+/* tre-449 %txt /tests/golden/types-hole-named-complex/tree/txt
1517+/* typ-449 %txt /tests/golden/types-hole-named-complex/types/txt
1518+/* src-450 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1519+/* tok-450 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1520+/* tre-450 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1521+/* typ-450 %txt /tests/golden/types-hole-numeric-capture/types/txt
1522+/* src-451 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1523+/* tok-451 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1524+/* tre-451 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1525+/* typ-451 %txt /tests/golden/types-hole-unbound-mold/types/txt
1526+/* src-452 %jibb /tests/golden/types-hole-unsupported/source/jibb
1527+/* tok-452 %txt /tests/golden/types-hole-unsupported/tokens/txt
1528+/* tre-452 %txt /tests/golden/types-hole-unsupported/tree/txt
1529+/* typ-452 %txt /tests/golden/types-hole-unsupported/types/txt
1530+/* src-453 %jibb /tests/golden/types-hole-user-generic/source/jibb
1531+/* tok-453 %txt /tests/golden/types-hole-user-generic/tokens/txt
1532+/* tre-453 %txt /tests/golden/types-hole-user-generic/tree/txt
1533+/* typ-453 %txt /tests/golden/types-hole-user-generic/types/txt
1534+/* src-454 %jibb /tests/golden/types-hole-user-named/source/jibb
1535+/* tok-454 %txt /tests/golden/types-hole-user-named/tokens/txt
1536+/* tre-454 %txt /tests/golden/types-hole-user-named/tree/txt
1537+/* typ-454 %txt /tests/golden/types-hole-user-named/types/txt
1538+/* src-455 %jibb /tests/golden/types-hole-user-value/source/jibb
1539+/* tok-455 %txt /tests/golden/types-hole-user-value/tokens/txt
1540+/* tre-455 %txt /tests/golden/types-hole-user-value/tree/txt
1541+/* typ-455 %txt /tests/golden/types-hole-user-value/types/txt
1542+/* src-456 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1543+/* tok-456 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1544+/* tre-456 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1545+/* typ-456 %txt /tests/golden/types-import-duplicate-mark/types/txt
1546+/* mark-456-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1547+/* src-457 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1548+/* tok-457 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1549+/* tre-457 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1550+/* typ-457 %txt /tests/golden/types-import-duplicate-sur/types/txt
1551+/* imp-457-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1552+/* imp-457-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1553+/* imp-457-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1554+/* src-458 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1555+/* tok-458 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1556+/* tre-458 %txt /tests/golden/types-import-hoon-flags/tree/txt
1557+/* typ-458 %txt /tests/golden/types-import-hoon-flags/types/txt
1558+/* imp-458-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1559+/* imp-458-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1560+/* imp-458-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1561+/* imp-458-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1562+/* src-459 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1563+/* tok-459 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1564+/* tre-459 %txt /tests/golden/types-import-hoon-noun/tree/txt
1565+/* typ-459 %txt /tests/golden/types-import-hoon-noun/types/txt
1566+/* imp-459-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1567+/* imp-459-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1568+/* imp-459-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1569+/* imp-459-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1570+/* src-460 %jibb /tests/golden/types-import-mark/source/jibb
1571+/* tok-460 %txt /tests/golden/types-import-mark/tokens/txt
1572+/* tre-460 %txt /tests/golden/types-import-mark/tree/txt
1573+/* typ-460 %txt /tests/golden/types-import-mark/types/txt
1574+/* imp-460-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1575+/* mark-460-1 %txt /tests/golden/types-import-mark/mar/label/txt
1576+/* src-461 %jibb /tests/golden/types-import-mark-record/source/jibb
1577+/* tok-461 %txt /tests/golden/types-import-mark-record/tokens/txt
1578+/* tre-461 %txt /tests/golden/types-import-mark-record/tree/txt
1579+/* typ-461 %txt /tests/golden/types-import-mark-record/types/txt
1580+/* mark-461-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1581+/* mark-461-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1582+/* src-462 %jibb /tests/golden/types-import-missing-mold/source/jibb
1583+/* tok-462 %txt /tests/golden/types-import-missing-mold/tokens/txt
1584+/* tre-462 %txt /tests/golden/types-import-missing-mold/tree/txt
1585+/* typ-462 %txt /tests/golden/types-import-missing-mold/types/txt
1586+/* imp-462-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1587+/* src-463 %jibb /tests/golden/types-import-sur/source/jibb
1588+/* tok-463 %txt /tests/golden/types-import-sur/tokens/txt
1589+/* tre-463 %txt /tests/golden/types-import-sur/tree/txt
1590+/* typ-463 %txt /tests/golden/types-import-sur/types/txt
1591+/* imp-463-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1592+/* imp-463-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1593+/* src-464 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1594+/* tok-464 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1595+/* tre-464 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1596+/* mod-464-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1597+/* typ-464 %txt /tests/golden/types-import-sur-record-graph/types/txt
1598+/* imp-464-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1599+/* mtre-464 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1600+/* src-465 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1601+/* tok-465 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1602+/* tre-465 %txt /tests/golden/types-import-tlon-notes/tree/txt
1603+/* typ-465 %txt /tests/golden/types-import-tlon-notes/types/txt
1604+/* imp-465-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1605+/* imp-465-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1606+/* imp-465-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1607+/* imp-465-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1608+/* imp-465-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1609+/* imp-465-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1610+/* imp-465-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1611+/* src-466 %jibb /tests/golden/types-list-branch/source/jibb
1612+/* tok-466 %txt /tests/golden/types-list-branch/tokens/txt
1613+/* tre-466 %txt /tests/golden/types-list-branch/tree/txt
1614+/* typ-466 %txt /tests/golden/types-list-branch/types/txt
1615+/* src-467 %jibb /tests/golden/types-list-cons/source/jibb
1616+/* tok-467 %txt /tests/golden/types-list-cons/tokens/txt
1617+/* tre-467 %txt /tests/golden/types-list-cons/tree/txt
1618+/* typ-467 %txt /tests/golden/types-list-cons/types/txt
1619+/* src-468 %jibb /tests/golden/types-list-context/source/jibb
1620+/* tok-468 %txt /tests/golden/types-list-context/tokens/txt
1621+/* tre-468 %txt /tests/golden/types-list-context/tree/txt
1622+/* typ-468 %txt /tests/golden/types-list-context/types/txt
1623+/* src-469 %jibb /tests/golden/types-list-imported/source/jibb
1624+/* tok-469 %txt /tests/golden/types-list-imported/tokens/txt
1625+/* tre-469 %txt /tests/golden/types-list-imported/tree/txt
1626+/* typ-469 %txt /tests/golden/types-list-imported/types/txt
1627+/* imp-469-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1628+/* imp-469-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1629+/* src-470 %jibb /tests/golden/types-list-open/source/jibb
1630+/* tok-470 %txt /tests/golden/types-list-open/tokens/txt
1631+/* tre-470 %txt /tests/golden/types-list-open/tree/txt
1632+/* typ-470 %txt /tests/golden/types-list-open/types/txt
1633+/* src-471 %jibb /tests/golden/types-list-open-constraints/source/jibb
1634+/* tok-471 %txt /tests/golden/types-list-open-constraints/tokens/txt
1635+/* tre-471 %txt /tests/golden/types-list-open-constraints/tree/txt
1636+/* typ-471 %txt /tests/golden/types-list-open-constraints/types/txt
1637+/* src-472 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1638+/* tok-472 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1639+/* tre-472 %txt /tests/golden/types-list-pattern-imported/tree/txt
1640+/* typ-472 %txt /tests/golden/types-list-pattern-imported/types/txt
1641+/* imp-472-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1642+/* imp-472-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1643+/* src-473 %jibb /tests/golden/types-list-patterns/source/jibb
1644+/* tok-473 %txt /tests/golden/types-list-patterns/tokens/txt
1645+/* tre-473 %txt /tests/golden/types-list-patterns/tree/txt
1646+/* typ-473 %txt /tests/golden/types-list-patterns/types/txt
1647+/* src-474 %jibb /tests/golden/types-list-zero-fit/source/jibb
1648+/* tok-474 %txt /tests/golden/types-list-zero-fit/tokens/txt
1649+/* tre-474 %txt /tests/golden/types-list-zero-fit/tree/txt
1650+/* typ-474 %txt /tests/golden/types-list-zero-fit/types/txt
1651+/* src-475 %jibb /tests/golden/types-literal-constructor-nouns/source/jibb
1652+/* tok-475 %txt /tests/golden/types-literal-constructor-nouns/tokens/txt
1653+/* tre-475 %txt /tests/golden/types-literal-constructor-nouns/tree/txt
1654+/* typ-475 %txt /tests/golden/types-literal-constructor-nouns/types/txt
1655+/* src-476 %jibb /tests/golden/types-local-capitals/source/jibb
1656+/* tok-476 %txt /tests/golden/types-local-capitals/tokens/txt
1657+/* tre-476 %txt /tests/golden/types-local-capitals/tree/txt
1658+/* typ-476 %txt /tests/golden/types-local-capitals/types/txt
1659+/* src-477 %jibb /tests/golden/types-local-recursive/source/jibb
1660+/* tok-477 %txt /tests/golden/types-local-recursive/tokens/txt
1661+/* tre-477 %txt /tests/golden/types-local-recursive/tree/txt
1662+/* typ-477 %txt /tests/golden/types-local-recursive/types/txt
1663+/* src-478 %jibb /tests/golden/types-local-scc/source/jibb
1664+/* tok-478 %txt /tests/golden/types-local-scc/tokens/txt
1665+/* tre-478 %txt /tests/golden/types-local-scc/tree/txt
1666+/* typ-478 %txt /tests/golden/types-local-scc/types/txt
1667+/* src-479 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1668+/* tok-479 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1669+/* tre-479 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1670+/* typ-479 %txt /tests/golden/types-local-scc-adversarial/types/txt
1671+/* src-480 %jibb /tests/golden/types-loobean-singleton-source/source/jibb
1672+/* tok-480 %txt /tests/golden/types-loobean-singleton-source/tokens/txt
1673+/* tre-480 %txt /tests/golden/types-loobean-singleton-source/tree/txt
1674+/* typ-480 %txt /tests/golden/types-loobean-singleton-source/types/txt
1675+/* src-481 %jibb /tests/golden/types-loobean-union-context/source/jibb
1676+/* tok-481 %txt /tests/golden/types-loobean-union-context/tokens/txt
1677+/* tre-481 %txt /tests/golden/types-loobean-union-context/tree/txt
1678+/* typ-481 %txt /tests/golden/types-loobean-union-context/types/txt
1679+/* src-482 %jibb /tests/golden/types-missing-tag-context/source/jibb
1680+/* tok-482 %txt /tests/golden/types-missing-tag-context/tokens/txt
1681+/* tre-482 %txt /tests/golden/types-missing-tag-context/tree/txt
1682+/* typ-482 %txt /tests/golden/types-missing-tag-context/types/txt
1683+/* src-483 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1684+/* tok-483 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1685+/* tre-483 %txt /tests/golden/types-missing-tag-imported/tree/txt
1686+/* typ-483 %txt /tests/golden/types-missing-tag-imported/types/txt
1687+/* imp-483-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1688+/* imp-483-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1689+/* src-484 %jibb /tests/golden/types-missing-tag-named/source/jibb
1690+/* tok-484 %txt /tests/golden/types-missing-tag-named/tokens/txt
1691+/* tre-484 %txt /tests/golden/types-missing-tag-named/tree/txt
1692+/* typ-484 %txt /tests/golden/types-missing-tag-named/types/txt
1693+/* src-485 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1694+/* tok-485 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1695+/* tre-485 %txt /tests/golden/types-module-field-duplicate/tree/txt
1696+/* mod-485-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1697+/* typ-485 %txt /tests/golden/types-module-field-duplicate/types/txt
1698+/* mtre-485 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1699+/* src-486 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1700+/* tok-486 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1701+/* tre-486 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1702+/* mod-486-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1703+/* typ-486 %txt /tests/golden/types-module-field-nonrecord/types/txt
1704+/* mtre-486 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1705+/* src-487 %jibb /tests/golden/types-module-field-path/source/jibb
1706+/* tok-487 %txt /tests/golden/types-module-field-path/tokens/txt
1707+/* tre-487 %txt /tests/golden/types-module-field-path/tree/txt
1708+/* mod-487-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1709+/* typ-487 %txt /tests/golden/types-module-field-path/types/txt
1710+/* mtre-487 %txt /tests/golden/types-module-field-path/module-trees/txt
1711+/* src-488 %jibb /tests/golden/types-module-field-shadow/source/jibb
1712+/* tok-488 %txt /tests/golden/types-module-field-shadow/tokens/txt
1713+/* tre-488 %txt /tests/golden/types-module-field-shadow/tree/txt
1714+/* mod-488-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1715+/* typ-488 %txt /tests/golden/types-module-field-shadow/types/txt
1716+/* mtre-488 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1717+/* src-489 %jibb /tests/golden/types-module-fixtures/source/jibb
1718+/* tok-489 %txt /tests/golden/types-module-fixtures/tokens/txt
1719+/* tre-489 %txt /tests/golden/types-module-fixtures/tree/txt
1720+/* mod-489-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1721+/* mod-489-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1722+/* typ-489 %txt /tests/golden/types-module-fixtures/types/txt
1723+/* mtre-489 %txt /tests/golden/types-module-fixtures/module-trees/txt
1724+/* src-490 %jibb /tests/golden/types-module-mixed/source/jibb
1725+/* tok-490 %txt /tests/golden/types-module-mixed/tokens/txt
1726+/* tre-490 %txt /tests/golden/types-module-mixed/tree/txt
1727+/* mod-490-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1728+/* typ-490 %txt /tests/golden/types-module-mixed/types/txt
1729+/* imp-490-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1730+/* mark-490-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1731+/* mtre-490 %txt /tests/golden/types-module-mixed/module-trees/txt
1732+/* src-491 %jibb /tests/golden/types-multi-call/source/jibb
1733+/* tok-491 %txt /tests/golden/types-multi-call/tokens/txt
1734+/* tre-491 %txt /tests/golden/types-multi-call/tree/txt
1735+/* typ-491 %txt /tests/golden/types-multi-call/types/txt
1736+/* src-492 %jibb /tests/golden/types-multi-import/source/jibb
1737+/* tok-492 %txt /tests/golden/types-multi-import/tokens/txt
1738+/* tre-492 %txt /tests/golden/types-multi-import/tree/txt
1739+/* mod-492-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1740+/* typ-492 %txt /tests/golden/types-multi-import/types/txt
1741+/* mtre-492 %txt /tests/golden/types-multi-import/module-trees/txt
1742+/* src-493 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1743+/* tok-493 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1744+/* tre-493 %txt /tests/golden/types-nested-missing-tag/tree/txt
1745+/* typ-493 %txt /tests/golden/types-nested-missing-tag/types/txt
1746+/* src-494 %jibb /tests/golden/types-nested-noun-context/source/jibb
1747+/* tok-494 %txt /tests/golden/types-nested-noun-context/tokens/txt
1748+/* tre-494 %txt /tests/golden/types-nested-noun-context/tree/txt
1749+/* typ-494 %txt /tests/golden/types-nested-noun-context/types/txt
1750+/* src-495 %jibb /tests/golden/types-nested-shallow-preserve/source/jibb
1751+/* tok-495 %txt /tests/golden/types-nested-shallow-preserve/tokens/txt
1752+/* tre-495 %txt /tests/golden/types-nested-shallow-preserve/tree/txt
1753+/* typ-495 %txt /tests/golden/types-nested-shallow-preserve/types/txt
1754+/* src-496 %jibb /tests/golden/types-nested-union-context/source/jibb
1755+/* tok-496 %txt /tests/golden/types-nested-union-context/tokens/txt
1756+/* tre-496 %txt /tests/golden/types-nested-union-context/tree/txt
1757+/* typ-496 %txt /tests/golden/types-nested-union-context/types/txt
1758+/* src-497 %jibb /tests/golden/types-null-context/source/jibb
1759+/* tok-497 %txt /tests/golden/types-null-context/tokens/txt
1760+/* tre-497 %txt /tests/golden/types-null-context/tree/txt
1761+/* typ-497 %txt /tests/golden/types-null-context/types/txt
1762+/* src-498 %jibb /tests/golden/types-null-overlap/source/jibb
1763+/* tok-498 %txt /tests/golden/types-null-overlap/tokens/txt
1764+/* tre-498 %txt /tests/golden/types-null-overlap/tree/txt
1765+/* typ-498 %txt /tests/golden/types-null-overlap/types/txt
1766+/* src-499 %jibb /tests/golden/types-null-unresolved/source/jibb
1767+/* tok-499 %txt /tests/golden/types-null-unresolved/tokens/txt
1768+/* tre-499 %txt /tests/golden/types-null-unresolved/tree/txt
1769+/* typ-499 %txt /tests/golden/types-null-unresolved/types/txt
1770+/* src-500 %jibb /tests/golden/types-pair-context/source/jibb
1771+/* tok-500 %txt /tests/golden/types-pair-context/tokens/txt
1772+/* tre-500 %txt /tests/golden/types-pair-context/tree/txt
1773+/* typ-500 %txt /tests/golden/types-pair-context/types/txt
1774+/* src-501 %jibb /tests/golden/types-partial-apply/source/jibb
1775+/* tok-501 %txt /tests/golden/types-partial-apply/tokens/txt
1776+/* tre-501 %txt /tests/golden/types-partial-apply/tree/txt
1777+/* typ-501 %txt /tests/golden/types-partial-apply/types/txt
1778+/* src-502 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1779+/* tok-502 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1780+/* tre-502 %txt /tests/golden/types-partial-atom-alias/tree/txt
1781+/* typ-502 %txt /tests/golden/types-partial-atom-alias/types/txt
1782+/* src-503 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1783+/* tok-503 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1784+/* tre-503 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1785+/* typ-503 %txt /tests/golden/types-partial-atom-constraint/types/txt
1786+/* src-504 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1787+/* tok-504 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1788+/* tre-504 %txt /tests/golden/types-partial-atom-widening/tree/txt
1789+/* typ-504 %txt /tests/golden/types-partial-atom-widening/types/txt
1790+/* src-505 %jibb /tests/golden/types-partial-aura/source/jibb
1791+/* tok-505 %txt /tests/golden/types-partial-aura/tokens/txt
1792+/* tre-505 %txt /tests/golden/types-partial-aura/tree/txt
1793+/* typ-505 %txt /tests/golden/types-partial-aura/types/txt
1794+/* src-506 %jibb /tests/golden/types-partial-aura-family/source/jibb
1795+/* tok-506 %txt /tests/golden/types-partial-aura-family/tokens/txt
1796+/* tre-506 %txt /tests/golden/types-partial-aura-family/tree/txt
1797+/* typ-506 %txt /tests/golden/types-partial-aura-family/types/txt
1798+/* src-507 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1799+/* tok-507 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1800+/* tre-507 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1801+/* typ-507 %txt /tests/golden/types-partial-aura-generalization/types/txt
1802+/* src-508 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1803+/* tok-508 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1804+/* tre-508 %txt /tests/golden/types-partial-bare-atom/tree/txt
1805+/* typ-508 %txt /tests/golden/types-partial-bare-atom/types/txt
1806+/* src-509 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1807+/* tok-509 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1808+/* tre-509 %txt /tests/golden/types-partial-branch-widening/tree/txt
1809+/* typ-509 %txt /tests/golden/types-partial-branch-widening/types/txt
1810+/* src-510 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1811+/* tok-510 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1812+/* tre-510 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1813+/* typ-510 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1814+/* src-511 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1815+/* tok-511 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1816+/* tre-511 %txt /tests/golden/types-partial-decimal-default/tree/txt
1817+/* typ-511 %txt /tests/golden/types-partial-decimal-default/types/txt
1818+/* src-512 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1819+/* tok-512 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1820+/* tre-512 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1821+/* typ-512 %txt /tests/golden/types-partial-dependency-chain/types/txt
1822+/* src-513 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1823+/* tok-513 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1824+/* tre-513 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1825+/* typ-513 %txt /tests/golden/types-partial-explicit-capital/types/txt
1826+/* src-514 %jibb /tests/golden/types-partial-forward/source/jibb
1827+/* tok-514 %txt /tests/golden/types-partial-forward/tokens/txt
1828+/* tre-514 %txt /tests/golden/types-partial-forward/tree/txt
1829+/* typ-514 %txt /tests/golden/types-partial-forward/types/txt
1830+/* src-515 %jibb /tests/golden/types-partial-generalization/source/jibb
1831+/* tok-515 %txt /tests/golden/types-partial-generalization/tokens/txt
1832+/* tre-515 %txt /tests/golden/types-partial-generalization/tree/txt
1833+/* typ-515 %txt /tests/golden/types-partial-generalization/types/txt
1834+/* src-516 %jibb /tests/golden/types-partial-identity/source/jibb
1835+/* tok-516 %txt /tests/golden/types-partial-identity/tokens/txt
1836+/* tre-516 %txt /tests/golden/types-partial-identity/tree/txt
1837+/* typ-516 %txt /tests/golden/types-partial-identity/types/txt
1838+/* src-517 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1839+/* tok-517 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1840+/* tre-517 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1841+/* typ-517 %txt /tests/golden/types-partial-independent-atoms/types/txt
1842+/* src-518 %jibb /tests/golden/types-partial-local-molds/source/jibb
1843+/* tok-518 %txt /tests/golden/types-partial-local-molds/tokens/txt
1844+/* tre-518 %txt /tests/golden/types-partial-local-molds/tree/txt
1845+/* typ-518 %txt /tests/golden/types-partial-local-molds/types/txt
1846+/* src-519 %jibb /tests/golden/types-partial-locals/source/jibb
1847+/* tok-519 %txt /tests/golden/types-partial-locals/tokens/txt
1848+/* tre-519 %txt /tests/golden/types-partial-locals/tree/txt
1849+/* typ-519 %txt /tests/golden/types-partial-locals/types/txt
1850+/* src-520 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1851+/* tok-520 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1852+/* tre-520 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1853+/* typ-520 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1854+/* src-521 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1855+/* tok-521 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1856+/* tre-521 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1857+/* typ-521 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1858+/* src-522 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1859+/* tok-522 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1860+/* tre-522 %txt /tests/golden/types-partial-mold-composite/tree/txt
1861+/* typ-522 %txt /tests/golden/types-partial-mold-composite/types/txt
1862+/* src-523 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1863+/* tok-523 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1864+/* tre-523 %txt /tests/golden/types-partial-mold-forward/tree/txt
1865+/* typ-523 %txt /tests/golden/types-partial-mold-forward/types/txt
1866+/* src-524 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1867+/* tok-524 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1868+/* tre-524 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1869+/* typ-524 %txt /tests/golden/types-partial-mold-recursive/types/txt
1870+/* src-525 %jibb /tests/golden/types-partial-occurs/source/jibb
1871+/* tok-525 %txt /tests/golden/types-partial-occurs/tokens/txt
1872+/* tre-525 %txt /tests/golden/types-partial-occurs/tree/txt
1873+/* typ-525 %txt /tests/golden/types-partial-occurs/types/txt
1874+/* src-526 %jibb /tests/golden/types-partial-projection/source/jibb
1875+/* tok-526 %txt /tests/golden/types-partial-projection/tokens/txt
1876+/* tre-526 %txt /tests/golden/types-partial-projection/tree/txt
1877+/* typ-526 %txt /tests/golden/types-partial-projection/types/txt
1878+/* src-527 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1879+/* tok-527 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1880+/* tre-527 %txt /tests/golden/types-partial-shadow-global/tree/txt
1881+/* typ-527 %txt /tests/golden/types-partial-shadow-global/types/txt
1882+/* src-528 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1883+/* tok-528 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1884+/* tre-528 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1885+/* typ-528 %txt /tests/golden/types-partial-shared-tvar/types/txt
1886+/* src-529 %jibb /tests/golden/types-partial-union-cases/source/jibb
1887+/* tok-529 %txt /tests/golden/types-partial-union-cases/tokens/txt
1888+/* tre-529 %txt /tests/golden/types-partial-union-cases/tree/txt
1889+/* typ-529 %txt /tests/golden/types-partial-union-cases/types/txt
1890+/* src-530 %jibb /tests/golden/types-partial-union-edges/source/jibb
1891+/* tok-530 %txt /tests/golden/types-partial-union-edges/tokens/txt
1892+/* tre-530 %txt /tests/golden/types-partial-union-edges/tree/txt
1893+/* typ-530 %txt /tests/golden/types-partial-union-edges/types/txt
1894+/* src-531 %jibb /tests/golden/types-partial-union-nested-nouns/source/jibb
1895+/* tok-531 %txt /tests/golden/types-partial-union-nested-nouns/tokens/txt
1896+/* tre-531 %txt /tests/golden/types-partial-union-nested-nouns/tree/txt
1897+/* typ-531 %txt /tests/golden/types-partial-union-nested-nouns/types/txt
1898+/* src-532 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1899+/* tok-532 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1900+/* tre-532 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1901+/* typ-532 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1902+/* src-533 %jibb /tests/golden/types-positional-faces/source/jibb
1903+/* tok-533 %txt /tests/golden/types-positional-faces/tokens/txt
1904+/* tre-533 %txt /tests/golden/types-positional-faces/tree/txt
1905+/* typ-533 %txt /tests/golden/types-positional-faces/types/txt
1906+/* src-534 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1907+/* tok-534 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1908+/* tre-534 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1909+/* typ-534 %txt /tests/golden/types-prelude-arithmetic/types/txt
1910+/* src-535 %jibb /tests/golden/types-prelude-ask/source/jibb
1911+/* tok-535 %txt /tests/golden/types-prelude-ask/tokens/txt
1912+/* tre-535 %txt /tests/golden/types-prelude-ask/tree/txt
1913+/* typ-535 %txt /tests/golden/types-prelude-ask/types/txt
1914+/* src-536 %jibb /tests/golden/types-prelude-bond/source/jibb
1915+/* tok-536 %txt /tests/golden/types-prelude-bond/tokens/txt
1916+/* tre-536 %txt /tests/golden/types-prelude-bond/tree/txt
1917+/* typ-536 %txt /tests/golden/types-prelude-bond/types/txt
1918+/* src-537 %jibb /tests/golden/types-prelude-cmd/source/jibb
1919+/* tok-537 %txt /tests/golden/types-prelude-cmd/tokens/txt
1920+/* tre-537 %txt /tests/golden/types-prelude-cmd/tree/txt
1921+/* typ-537 %txt /tests/golden/types-prelude-cmd/types/txt
1922+/* src-538 %jibb /tests/golden/types-prelude-comparison/source/jibb
1923+/* tok-538 %txt /tests/golden/types-prelude-comparison/tokens/txt
1924+/* tre-538 %txt /tests/golden/types-prelude-comparison/tree/txt
1925+/* typ-538 %txt /tests/golden/types-prelude-comparison/types/txt
1926+/* src-539 %jibb /tests/golden/types-prelude-direct/source/jibb
1927+/* tok-539 %txt /tests/golden/types-prelude-direct/tokens/txt
1928+/* tre-539 %txt /tests/golden/types-prelude-direct/tree/txt
1929+/* typ-539 %txt /tests/golden/types-prelude-direct/types/txt
1930+/* src-540 %jibb /tests/golden/types-prelude-functional/source/jibb
1931+/* tok-540 %txt /tests/golden/types-prelude-functional/tokens/txt
1932+/* tre-540 %txt /tests/golden/types-prelude-functional/tree/txt
1933+/* typ-540 %txt /tests/golden/types-prelude-functional/types/txt
1934+/* src-541 %jibb /tests/golden/types-prelude-generic-alias/source/jibb
1935+/* tok-541 %txt /tests/golden/types-prelude-generic-alias/tokens/txt
1936+/* tre-541 %txt /tests/golden/types-prelude-generic-alias/tree/txt
1937+/* mod-541-1 %jibb /tests/golden/types-prelude-generic-alias/modules/ui/alias-helper/jibb
1938+/* typ-541 %txt /tests/golden/types-prelude-generic-alias/types/txt
1939+/* mtre-541 %txt /tests/golden/types-prelude-generic-alias/module-trees/txt
1940+/* src-542 %jibb /tests/golden/types-prelude-interface/source/jibb
1941+/* tok-542 %txt /tests/golden/types-prelude-interface/tokens/txt
1942+/* tre-542 %txt /tests/golden/types-prelude-interface/tree/txt
1943+/* mod-542-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1944+/* mod-542-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1945+/* typ-542 %txt /tests/golden/types-prelude-interface/types/txt
1946+/* mtre-542 %txt /tests/golden/types-prelude-interface/module-trees/txt
1947+/* src-543 %jibb /tests/golden/types-prelude-lent/source/jibb
1948+/* tok-543 %txt /tests/golden/types-prelude-lent/tokens/txt
1949+/* tre-543 %txt /tests/golden/types-prelude-lent/tree/txt
1950+/* typ-543 %txt /tests/golden/types-prelude-lent/types/txt
1951+/* src-544 %jibb /tests/golden/types-prelude-like/source/jibb
1952+/* tok-544 %txt /tests/golden/types-prelude-like/tokens/txt
1953+/* tre-544 %txt /tests/golden/types-prelude-like/tree/txt
1954+/* typ-544 %txt /tests/golden/types-prelude-like/types/txt
1955+/* src-545 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1956+/* tok-545 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1957+/* tre-545 %txt /tests/golden/types-prelude-list-alias/tree/txt
1958+/* typ-545 %txt /tests/golden/types-prelude-list-alias/types/txt
1959+/* src-546 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1960+/* tok-546 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1961+/* tre-546 %txt /tests/golden/types-prelude-list-functions/tree/txt
1962+/* mod-546-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1963+/* typ-546 %txt /tests/golden/types-prelude-list-functions/types/txt
1964+/* mtre-546 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1965+/* src-547 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1966+/* tok-547 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1967+/* tre-547 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1968+/* typ-547 %txt /tests/golden/types-prelude-list-helpers/types/txt
1969+/* src-548 %jibb /tests/golden/types-prelude-predicates/source/jibb
1970+/* tok-548 %txt /tests/golden/types-prelude-predicates/tokens/txt
1971+/* tre-548 %txt /tests/golden/types-prelude-predicates/tree/txt
1972+/* typ-548 %txt /tests/golden/types-prelude-predicates/types/txt
1973+/* src-549 %jibb /tests/golden/types-prelude-sub/source/jibb
1974+/* tok-549 %txt /tests/golden/types-prelude-sub/tokens/txt
1975+/* tre-549 %txt /tests/golden/types-prelude-sub/tree/txt
1976+/* typ-549 %txt /tests/golden/types-prelude-sub/types/txt
1977+/* src-550 %jibb /tests/golden/types-prelude-sub-nested/source/jibb
1978+/* tok-550 %txt /tests/golden/types-prelude-sub-nested/tokens/txt
1979+/* tre-550 %txt /tests/golden/types-prelude-sub-nested/tree/txt
1980+/* typ-550 %txt /tests/golden/types-prelude-sub-nested/types/txt
1981+/* src-551 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1982+/* tok-551 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1983+/* tre-551 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1984+/* typ-551 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1985+/* src-552 %jibb /tests/golden/types-prelude-zing/source/jibb
1986+/* tok-552 %txt /tests/golden/types-prelude-zing/tokens/txt
1987+/* tre-552 %txt /tests/golden/types-prelude-zing/tree/txt
1988+/* typ-552 %txt /tests/golden/types-prelude-zing/types/txt
1989+/* src-553 %jibb /tests/golden/types-proj-explicit-context/source/jibb
1990+/* tok-553 %txt /tests/golden/types-proj-explicit-context/tokens/txt
1991+/* tre-553 %txt /tests/golden/types-proj-explicit-context/tree/txt
1992+/* typ-553 %txt /tests/golden/types-proj-explicit-context/types/txt
1993+/* src-554 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
1994+/* tok-554 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
1995+/* tre-554 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
1996+/* typ-554 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
1997+/* src-555 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
1998+/* tok-555 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
1999+/* tre-555 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2000+/* mod-555-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2001+/* typ-555 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2002+/* mtre-555 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2003+/* src-556 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2004+/* tok-556 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2005+/* tre-556 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2006+/* mod-556-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2007+/* typ-556 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2008+/* mtre-556 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2009+/* src-557 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2010+/* tok-557 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2011+/* tre-557 %txt /tests/golden/types-proj-reserved-local/tree/txt
2012+/* typ-557 %txt /tests/golden/types-proj-reserved-local/types/txt
2013+/* src-558 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2014+/* tok-558 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2015+/* tre-558 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2016+/* typ-558 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2017+/* src-559 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2018+/* tok-559 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2019+/* tre-559 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2020+/* typ-559 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2021+/* src-560 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2022+/* tok-560 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2023+/* tre-560 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2024+/* typ-560 %txt /tests/golden/types-proj-reserved-mold/types/txt
2025+/* src-561 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2026+/* tok-561 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2027+/* tre-561 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2028+/* typ-561 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2029+/* src-562 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2030+/* tok-562 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2031+/* tre-562 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2032+/* typ-562 %txt /tests/golden/types-proj-reserved-positive/types/txt
2033+/* src-563 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2034+/* tok-563 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2035+/* tre-563 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2036+/* typ-563 %txt /tests/golden/types-proj-reserved-sample/types/txt
2037+/* src-564 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2038+/* tok-564 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2039+/* tre-564 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2040+/* typ-564 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2041+/* src-565 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2042+/* tok-565 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2043+/* tre-565 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2044+/* typ-565 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2045+/* src-566 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2046+/* tok-566 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2047+/* tre-566 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2048+/* typ-566 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2049+/* src-567 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2050+/* tok-567 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2051+/* tre-567 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2052+/* typ-567 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2053+/* src-568 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2054+/* tok-568 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2055+/* tre-568 %txt /tests/golden/types-proj-reserved-value/tree/txt
2056+/* typ-568 %txt /tests/golden/types-proj-reserved-value/types/txt
2057+/* src-569 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2058+/* tok-569 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2059+/* tre-569 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2060+/* typ-569 %txt /tests/golden/types-proj-single-duplicate/types/txt
2061+/* src-570 %jibb /tests/golden/types-proj-single-field/source/jibb
2062+/* tok-570 %txt /tests/golden/types-proj-single-field/tokens/txt
2063+/* tre-570 %txt /tests/golden/types-proj-single-field/tree/txt
2064+/* typ-570 %txt /tests/golden/types-proj-single-field/types/txt
2065+/* src-571 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2066+/* tok-571 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2067+/* tre-571 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2068+/* typ-571 %txt /tests/golden/types-proj-single-sample-face/types/txt
2069+/* src-572 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2070+/* tok-572 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2071+/* tre-572 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2072+/* typ-572 %txt /tests/golden/types-proj-single-wrapped/types/txt
2073+/* src-573 %jibb /tests/golden/types-qath-faces/source/jibb
2074+/* tok-573 %txt /tests/golden/types-qath-faces/tokens/txt
2075+/* tre-573 %txt /tests/golden/types-qath-faces/tree/txt
2076+/* typ-573 %txt /tests/golden/types-qath-faces/types/txt
2077+/* src-574 %jibb /tests/golden/types-qath-holes/source/jibb
2078+/* tok-574 %txt /tests/golden/types-qath-holes/tokens/txt
2079+/* tre-574 %txt /tests/golden/types-qath-holes/tree/txt
2080+/* typ-574 %txt /tests/golden/types-qath-holes/types/txt
2081+/* src-575 %jibb /tests/golden/types-qath-module-identity/source/jibb
2082+/* tok-575 %txt /tests/golden/types-qath-module-identity/tokens/txt
2083+/* tre-575 %txt /tests/golden/types-qath-module-identity/tree/txt
2084+/* mod-575-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2085+/* mod-575-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2086+/* mod-575-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2087+/* typ-575 %txt /tests/golden/types-qath-module-identity/types/txt
2088+/* mtre-575 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2089+/* src-576 %jibb /tests/golden/types-qath-recursive/source/jibb
2090+/* tok-576 %txt /tests/golden/types-qath-recursive/tokens/txt
2091+/* tre-576 %txt /tests/golden/types-qath-recursive/tree/txt
2092+/* typ-576 %txt /tests/golden/types-qath-recursive/types/txt
2093+/* src-577 %jibb /tests/golden/types-record-bound-variable/source/jibb
2094+/* tok-577 %txt /tests/golden/types-record-bound-variable/tokens/txt
2095+/* tre-577 %txt /tests/golden/types-record-bound-variable/tree/txt
2096+/* typ-577 %txt /tests/golden/types-record-bound-variable/types/txt
2097+/* src-578 %jibb /tests/golden/types-record-cast-context/source/jibb
2098+/* tok-578 %txt /tests/golden/types-record-cast-context/tokens/txt
2099+/* tre-578 %txt /tests/golden/types-record-cast-context/tree/txt
2100+/* typ-578 %txt /tests/golden/types-record-cast-context/types/txt
2101+/* src-579 %jibb /tests/golden/types-record-change/source/jibb
2102+/* tok-579 %txt /tests/golden/types-record-change/tokens/txt
2103+/* tre-579 %txt /tests/golden/types-record-change/tree/txt
2104+/* typ-579 %txt /tests/golden/types-record-change/types/txt
2105+/* src-580 %jibb /tests/golden/types-record-change-generic/source/jibb
2106+/* tok-580 %txt /tests/golden/types-record-change-generic/tokens/txt
2107+/* tre-580 %txt /tests/golden/types-record-change-generic/tree/txt
2108+/* typ-580 %txt /tests/golden/types-record-change-generic/types/txt
2109+/* src-581 %jibb /tests/golden/types-record-faces/source/jibb
2110+/* tok-581 %txt /tests/golden/types-record-faces/tokens/txt
2111+/* tre-581 %txt /tests/golden/types-record-faces/tree/txt
2112+/* typ-581 %txt /tests/golden/types-record-faces/types/txt
2113+/* src-582 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2114+/* tok-582 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2115+/* tre-582 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2116+/* typ-582 %txt /tests/golden/types-record-field-edit-separate/types/txt
2117+/* src-583 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2118+/* tok-583 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2119+/* tre-583 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2120+/* typ-583 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2121+/* src-584 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2122+/* tok-584 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2123+/* tre-584 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2124+/* typ-584 %txt /tests/golden/types-record-field-expr-separate/types/txt
2125+/* src-585 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2126+/* tok-585 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2127+/* tre-585 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2128+/* mod-585-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2129+/* typ-585 %txt /tests/golden/types-record-field-module-reachable/types/txt
2130+/* mtre-585 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2131+/* src-586 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2132+/* tok-586 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2133+/* tre-586 %txt /tests/golden/types-record-field-module-unused/tree/txt
2134+/* mod-586-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2135+/* mod-586-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2136+/* typ-586 %txt /tests/golden/types-record-field-module-unused/types/txt
2137+/* mtre-586 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2138+/* src-587 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2139+/* tok-587 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2140+/* tre-587 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2141+/* typ-587 %txt /tests/golden/types-record-field-nested-mold/types/txt
2142+/* src-588 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2143+/* tok-588 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2144+/* tre-588 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2145+/* typ-588 %txt /tests/golden/types-record-field-outer-inner/types/txt
2146+/* src-589 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2147+/* tok-589 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2148+/* tre-589 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2149+/* typ-589 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2150+/* src-590 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2151+/* tok-590 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2152+/* tre-590 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2153+/* typ-590 %txt /tests/golden/types-record-field-separate-molds/types/txt
2154+/* src-591 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2155+/* tok-591 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2156+/* tre-591 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2157+/* typ-591 %txt /tests/golden/types-record-field-unused-mold/types/txt
2158+/* src-592 %jibb /tests/golden/types-record-import/source/jibb
2159+/* tok-592 %txt /tests/golden/types-record-import/tokens/txt
2160+/* tre-592 %txt /tests/golden/types-record-import/tree/txt
2161+/* mod-592-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2162+/* typ-592 %txt /tests/golden/types-record-import/types/txt
2163+/* mtre-592 %txt /tests/golden/types-record-import/module-trees/txt
2164+/* src-593 %jibb /tests/golden/types-record-local-scheme/source/jibb
2165+/* tok-593 %txt /tests/golden/types-record-local-scheme/tokens/txt
2166+/* tre-593 %txt /tests/golden/types-record-local-scheme/tree/txt
2167+/* typ-593 %txt /tests/golden/types-record-local-scheme/types/txt
2168+/* src-594 %jibb /tests/golden/types-record-nested/source/jibb
2169+/* tok-594 %txt /tests/golden/types-record-nested/tokens/txt
2170+/* tre-594 %txt /tests/golden/types-record-nested/tree/txt
2171+/* typ-594 %txt /tests/golden/types-record-nested/types/txt
2172+/* src-595 %jibb /tests/golden/types-record-to-tuple/source/jibb
2173+/* tok-595 %txt /tests/golden/types-record-to-tuple/tokens/txt
2174+/* tre-595 %txt /tests/golden/types-record-to-tuple/tree/txt
2175+/* typ-595 %txt /tests/golden/types-record-to-tuple/types/txt
2176+/* src-596 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2177+/* tok-596 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2178+/* tre-596 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2179+/* typ-596 %txt /tests/golden/types-recursion-scc-failures/types/txt
2180+/* src-597 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2181+/* tok-597 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2182+/* tre-597 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2183+/* typ-597 %txt /tests/golden/types-recursion-scc-groups/types/txt
2184+/* src-598 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2185+/* tok-598 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2186+/* tre-598 %txt /tests/golden/types-recursion-scc-import/tree/txt
2187+/* mod-598-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2188+/* typ-598 %txt /tests/golden/types-recursion-scc-import/types/txt
2189+/* mtre-598 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2190+/* src-599 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2191+/* tok-599 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2192+/* tre-599 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2193+/* mod-599-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2194+/* typ-599 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2195+/* mtre-599 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2196+/* src-600 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2197+/* tok-600 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2198+/* tre-600 %txt /tests/golden/types-recursion-scc-local/tree/txt
2199+/* typ-600 %txt /tests/golden/types-recursion-scc-local/types/txt
2200+/* src-601 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2201+/* tok-601 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2202+/* tre-601 %txt /tests/golden/types-recursion-scc-order/tree/txt
2203+/* typ-601 %txt /tests/golden/types-recursion-scc-order/types/txt
2204+/* src-602 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2205+/* tok-602 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2206+/* tre-602 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2207+/* typ-602 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2208+/* src-603 %jibb /tests/golden/types-recursive-branch/source/jibb
2209+/* tok-603 %txt /tests/golden/types-recursive-branch/tokens/txt
2210+/* tre-603 %txt /tests/golden/types-recursive-branch/tree/txt
2211+/* typ-603 %txt /tests/golden/types-recursive-branch/types/txt
2212+/* src-604 %jibb /tests/golden/types-recursive-gate/source/jibb
2213+/* tok-604 %txt /tests/golden/types-recursive-gate/tokens/txt
2214+/* tre-604 %txt /tests/golden/types-recursive-gate/tree/txt
2215+/* typ-604 %txt /tests/golden/types-recursive-gate/types/txt
2216+/* src-605 %jibb /tests/golden/types-recursive-sample/source/jibb
2217+/* tok-605 %txt /tests/golden/types-recursive-sample/tokens/txt
2218+/* tre-605 %txt /tests/golden/types-recursive-sample/tree/txt
2219+/* typ-605 %txt /tests/golden/types-recursive-sample/types/txt
2220+/* src-606 %jibb /tests/golden/types-request-normal/source/jibb
2221+/* tok-606 %txt /tests/golden/types-request-normal/tokens/txt
2222+/* tre-606 %txt /tests/golden/types-request-normal/tree/txt
2223+/* mod-606-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2224+/* typ-606 %txt /tests/golden/types-request-normal/types/txt
2225+/* mark-606-1 %txt /tests/golden/types-request-normal/mar/full/txt
2226+/* mtre-606 %txt /tests/golden/types-request-normal/module-trees/txt
2227+/* src-607 %jibb /tests/golden/types-scope-library-poke/source/jibb
2228+/* tok-607 %txt /tests/golden/types-scope-library-poke/tokens/txt
2229+/* tre-607 %txt /tests/golden/types-scope-library-poke/tree/txt
2230+/* typ-607 %txt /tests/golden/types-scope-library-poke/types/txt
2231+/* src-608 %jibb /tests/golden/types-scope-root-api/source/jibb
2232+/* tok-608 %txt /tests/golden/types-scope-root-api/tokens/txt
2233+/* tre-608 %txt /tests/golden/types-scope-root-api/tree/txt
2234+/* typ-608 %txt /tests/golden/types-scope-root-api/types/txt
2235+/* src-609 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2236+/* tok-609 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2237+/* tre-609 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2238+/* typ-609 %txt /tests/golden/types-scope-store-duplicate/types/txt
2239+/* src-610 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2240+/* tok-610 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2241+/* tre-610 %txt /tests/golden/types-scope-store-shadow/tree/txt
2242+/* typ-610 %txt /tests/golden/types-scope-store-shadow/types/txt
2243+/* src-611 %jibb /tests/golden/types-single-case-pattern/source/jibb
2244+/* tok-611 %txt /tests/golden/types-single-case-pattern/tokens/txt
2245+/* tre-611 %txt /tests/golden/types-single-case-pattern/tree/txt
2246+/* typ-611 %txt /tests/golden/types-single-case-pattern/types/txt
2247+/* src-612 %jibb /tests/golden/types-string-interpolation/source/jibb
2248+/* tok-612 %txt /tests/golden/types-string-interpolation/tokens/txt
2249+/* tre-612 %txt /tests/golden/types-string-interpolation/tree/txt
2250+/* typ-612 %txt /tests/golden/types-string-interpolation/types/txt
2251+/* src-613 %jibb /tests/golden/types-tuple-context/source/jibb
2252+/* tok-613 %txt /tests/golden/types-tuple-context/tokens/txt
2253+/* tre-613 %txt /tests/golden/types-tuple-context/tree/txt
2254+/* typ-613 %txt /tests/golden/types-tuple-context/types/txt
2255+/* src-614 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2256+/* tok-614 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2257+/* tre-614 %txt /tests/golden/types-tuple-context-nested/tree/txt
2258+/* typ-614 %txt /tests/golden/types-tuple-context-nested/types/txt
2259+/* src-615 %jibb /tests/golden/types-union-alias/source/jibb
2260+/* tok-615 %txt /tests/golden/types-union-alias/tokens/txt
2261+/* tre-615 %txt /tests/golden/types-union-alias/tree/txt
2262+/* typ-615 %txt /tests/golden/types-union-alias/types/txt
2263+/* src-616 %jibb /tests/golden/types-union-branch-context/source/jibb
2264+/* tok-616 %txt /tests/golden/types-union-branch-context/tokens/txt
2265+/* tre-616 %txt /tests/golden/types-union-branch-context/tree/txt
2266+/* typ-616 %txt /tests/golden/types-union-branch-context/types/txt
2267+/* src-617 %jibb /tests/golden/types-union-branch-pending/source/jibb
2268+/* tok-617 %txt /tests/golden/types-union-branch-pending/tokens/txt
2269+/* tre-617 %txt /tests/golden/types-union-branch-pending/tree/txt
2270+/* typ-617 %txt /tests/golden/types-union-branch-pending/types/txt
2271+/* src-618 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2272+/* tok-618 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2273+/* tre-618 %txt /tests/golden/types-union-constructor-shape/tree/txt
2274+/* typ-618 %txt /tests/golden/types-union-constructor-shape/types/txt
2275+/* src-619 %jibb /tests/golden/types-union-context-flow/source/jibb
2276+/* tok-619 %txt /tests/golden/types-union-context-flow/tokens/txt
2277+/* tre-619 %txt /tests/golden/types-union-context-flow/tree/txt
2278+/* typ-619 %txt /tests/golden/types-union-context-flow/types/txt
2279+/* src-620 %jibb /tests/golden/types-union-finite/source/jibb
2280+/* tok-620 %txt /tests/golden/types-union-finite/tokens/txt
2281+/* tre-620 %txt /tests/golden/types-union-finite/tree/txt
2282+/* typ-620 %txt /tests/golden/types-union-finite/types/txt
2283+/* src-621 %jibb /tests/golden/types-union-finite-context/source/jibb
2284+/* tok-621 %txt /tests/golden/types-union-finite-context/tokens/txt
2285+/* tre-621 %txt /tests/golden/types-union-finite-context/tree/txt
2286+/* typ-621 %txt /tests/golden/types-union-finite-context/types/txt
2287+/* src-622 %jibb /tests/golden/types-union-finite-generic/source/jibb
2288+/* tok-622 %txt /tests/golden/types-union-finite-generic/tokens/txt
2289+/* tre-622 %txt /tests/golden/types-union-finite-generic/tree/txt
2290+/* typ-622 %txt /tests/golden/types-union-finite-generic/types/txt
2291+/* src-623 %jibb /tests/golden/types-union-finite-limit/source/jibb
2292+/* tok-623 %txt /tests/golden/types-union-finite-limit/tokens/txt
2293+/* tre-623 %txt /tests/golden/types-union-finite-limit/tree/txt
2294+/* typ-623 %txt /tests/golden/types-union-finite-limit/types/txt
2295+/* src-624 %jibb /tests/golden/types-union-import/source/jibb
2296+/* tok-624 %txt /tests/golden/types-union-import/tokens/txt
2297+/* tre-624 %txt /tests/golden/types-union-import/tree/txt
2298+/* mod-624-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2299+/* typ-624 %txt /tests/golden/types-union-import/types/txt
2300+/* mtre-624 %txt /tests/golden/types-union-import/module-trees/txt
2301+/* src-625 %jibb /tests/golden/types-union-local-pending/source/jibb
2302+/* tok-625 %txt /tests/golden/types-union-local-pending/tokens/txt
2303+/* tre-625 %txt /tests/golden/types-union-local-pending/tree/txt
2304+/* typ-625 %txt /tests/golden/types-union-local-pending/types/txt
2305+/* src-626 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2306+/* tok-626 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2307+/* tre-626 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2308+/* typ-626 %txt /tests/golden/types-union-nonwing-subject/types/txt
2309+/* src-627 %jibb /tests/golden/types-union-overlap/source/jibb
2310+/* tok-627 %txt /tests/golden/types-union-overlap/tokens/txt
2311+/* tre-627 %txt /tests/golden/types-union-overlap/tree/txt
2312+/* typ-627 %txt /tests/golden/types-union-overlap/types/txt
2313+/* src-628 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2314+/* tok-628 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2315+/* tre-628 %txt /tests/golden/types-union-overlap-nested/tree/txt
2316+/* typ-628 %txt /tests/golden/types-union-overlap-nested/types/txt
2317+/* src-629 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2318+/* tok-629 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2319+/* tre-629 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2320+/* typ-629 %txt /tests/golden/types-union-pattern-result-context/types/txt
2321+/* src-630 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2322+/* tok-630 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2323+/* tre-630 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2324+/* typ-630 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2325+/* src-631 %jibb /tests/golden/types-union-patterns/source/jibb
2326+/* tok-631 %txt /tests/golden/types-union-patterns/tokens/txt
2327+/* tre-631 %txt /tests/golden/types-union-patterns/tree/txt
2328+/* typ-631 %txt /tests/golden/types-union-patterns/types/txt
2329+/* src-632 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2330+/* tok-632 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2331+/* tre-632 %txt /tests/golden/types-union-patterns-generic/tree/txt
2332+/* typ-632 %txt /tests/golden/types-union-patterns-generic/types/txt
2333+/* src-633 %jibb /tests/golden/types-union-patterns-import/source/jibb
2334+/* tok-633 %txt /tests/golden/types-union-patterns-import/tokens/txt
2335+/* tre-633 %txt /tests/golden/types-union-patterns-import/tree/txt
2336+/* mod-633-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2337+/* typ-633 %txt /tests/golden/types-union-patterns-import/types/txt
2338+/* mtre-633 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2339+/* src-634 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2340+/* tok-634 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2341+/* tre-634 %txt /tests/golden/types-union-phantom-generic/tree/txt
2342+/* typ-634 %txt /tests/golden/types-union-phantom-generic/types/txt
2343+/* src-635 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2344+/* tok-635 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2345+/* tre-635 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2346+/* mod-635-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2347+/* mod-635-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2348+/* typ-635 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2349+/* mtre-635 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2350+/* src-636 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2351+/* tok-636 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2352+/* tre-636 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2353+/* mod-636-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2354+/* typ-636 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2355+/* mtre-636 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2356+/* src-637 %jibb /tests/golden/types-union-print-distinct/source/jibb
2357+/* tok-637 %txt /tests/golden/types-union-print-distinct/tokens/txt
2358+/* tre-637 %txt /tests/golden/types-union-print-distinct/tree/txt
2359+/* mod-637-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2360+/* mod-637-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2361+/* mod-637-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2362+/* typ-637 %txt /tests/golden/types-union-print-distinct/types/txt
2363+/* mtre-637 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2364+/* src-638 %jibb /tests/golden/types-union-print-escape/source/jibb
2365+/* tok-638 %txt /tests/golden/types-union-print-escape/tokens/txt
2366+/* tre-638 %txt /tests/golden/types-union-print-escape/tree/txt
2367+/* typ-638 %txt /tests/golden/types-union-print-escape/types/txt
2368+/* src-639 %jibb /tests/golden/types-union-print-local/source/jibb
2369+/* tok-639 %txt /tests/golden/types-union-print-local/tokens/txt
2370+/* tre-639 %txt /tests/golden/types-union-print-local/tree/txt
2371+/* typ-639 %txt /tests/golden/types-union-print-local/types/txt
2372+/* src-640 %jibb /tests/golden/types-union-print-nested/source/jibb
2373+/* tok-640 %txt /tests/golden/types-union-print-nested/tokens/txt
2374+/* tre-640 %txt /tests/golden/types-union-print-nested/tree/txt
2375+/* typ-640 %txt /tests/golden/types-union-print-nested/types/txt
2376+/* src-641 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2377+/* tok-641 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2378+/* tre-641 %txt /tests/golden/types-union-print-same-origin/tree/txt
2379+/* mod-641-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2380+/* typ-641 %txt /tests/golden/types-union-print-same-origin/types/txt
2381+/* mtre-641 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2382+/* src-642 %jibb /tests/golden/types-union-print-transitive/source/jibb
2383+/* tok-642 %txt /tests/golden/types-union-print-transitive/tokens/txt
2384+/* tre-642 %txt /tests/golden/types-union-print-transitive/tree/txt
2385+/* mod-642-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2386+/* mod-642-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2387+/* typ-642 %txt /tests/golden/types-union-print-transitive/types/txt
2388+/* mtre-642 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2389+/* src-643 %jibb /tests/golden/types-union-singleton/source/jibb
2390+/* tok-643 %txt /tests/golden/types-union-singleton/tokens/txt
2391+/* tre-643 %txt /tests/golden/types-union-singleton/tree/txt
2392+/* typ-643 %txt /tests/golden/types-union-singleton/types/txt
2393+/* src-644 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2394+/* tok-644 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2395+/* tre-644 %txt /tests/golden/types-union-tag-atoms/tree/txt
2396+/* typ-644 %txt /tests/golden/types-union-tag-atoms/types/txt
2397+/* src-645 %jibb /tests/golden/types-union-tags/source/jibb
2398+/* tok-645 %txt /tests/golden/types-union-tags/tokens/txt
2399+/* tre-645 %txt /tests/golden/types-union-tags/tree/txt
2400+/* typ-645 %txt /tests/golden/types-union-tags/types/txt
2401+/* src-646 %jibb /tests/golden/types-union-unresolved/source/jibb
2402+/* tok-646 %txt /tests/golden/types-union-unresolved/tokens/txt
2403+/* tre-646 %txt /tests/golden/types-union-unresolved/tree/txt
2404+/* typ-646 %txt /tests/golden/types-union-unresolved/types/txt
2405+/* src-647 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2406+/* tok-647 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2407+/* tre-647 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2408+/* typ-647 %txt /tests/golden/types-union-unresolved-flow/types/txt
2409+/* src-648 %jibb /tests/golden/types-unit-construction/source/jibb
2410+/* tok-648 %txt /tests/golden/types-unit-construction/tokens/txt
2411+/* tre-648 %txt /tests/golden/types-unit-construction/tree/txt
2412+/* typ-648 %txt /tests/golden/types-unit-construction/types/txt
2413+/* src-649 %jibb /tests/golden/types-unit-context/source/jibb
2414+/* tok-649 %txt /tests/golden/types-unit-context/tokens/txt
2415+/* tre-649 %txt /tests/golden/types-unit-context/tree/txt
2416+/* typ-649 %txt /tests/golden/types-unit-context/types/txt
2417+/* src-650 %jibb /tests/golden/types-unit-patterns/source/jibb
2418+/* tok-650 %txt /tests/golden/types-unit-patterns/tokens/txt
2419+/* tre-650 %txt /tests/golden/types-unit-patterns/tree/txt
2420+/* typ-650 %txt /tests/golden/types-unit-patterns/types/txt
2421+/* src-651 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2422+/* tok-651 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2423+/* tre-651 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2424+/* typ-651 %txt /tests/golden/types-value-cycle-shadow/types/txt
2425+/* src-652 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2426+/* tok-652 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2427+/* tre-652 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2428+/* typ-652 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2429+/* src-653 %jibb /tests/golden/types-value-cycles/source/jibb
2430+/* tok-653 %txt /tests/golden/types-value-cycles/tokens/txt
2431+/* tre-653 %txt /tests/golden/types-value-cycles/tree/txt
2432+/* typ-653 %txt /tests/golden/types-value-cycles/types/txt
23662433=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
23672434|%
23682435:: one arm per case
@@ -3203,444 +3270,476 @@
32033270 (weld (check ~.types-cell-pattern-schemes src-417 `tok-417 `tre-417) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-417 `typ-417 ~ ~ ~))
32043271++ test-types-cell-pattern-tail
32053272 (weld (check ~.types-cell-pattern-tail src-418 `tok-418 `tre-418) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-418 `typ-418 ~ ~ ~))
3273+++ test-types-constructor-context
3274+ (weld (check ~.types-constructor-context src-419 `tok-419 `tre-419) (check-types ~.types-constructor-context ~[%tests %golden ~.types-constructor-context %source %jibb] src-419 `typ-419))
32063275++ test-types-deferred-call-context
3207− (weld (check ~.types-deferred-call-context src-419 `tok-419 `tre-419) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-419 `typ-419 ~ ~ ~))
3276+ (weld (check ~.types-deferred-call-context src-420 `tok-420 `tre-420) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-420 `typ-420 ~ ~ ~))
3277+++ test-types-equal-head-disjoint
3278+ (weld (check ~.types-equal-head-disjoint src-421 `tok-421 `tre-421) (check-types ~.types-equal-head-disjoint ~[%tests %golden ~.types-equal-head-disjoint %source %jibb] src-421 `typ-421))
32083279++ test-types-flag-branch-context
3209− (weld (check ~.types-flag-branch-context src-420 `tok-420 `tre-420) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-420 `typ-420 ~ ~ ~))
3280+ (weld (check ~.types-flag-branch-context src-422 `tok-422 `tre-422) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-422 `typ-422 ~ ~ ~))
32103281++ test-types-generic-arity
3211− (weld (check ~.types-generic-arity src-421 `tok-421 `tre-421) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-421 `typ-421))
3282+ (weld (check ~.types-generic-arity src-423 `tok-423 `tre-423) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-423 `typ-423))
32123283++ test-types-generic-face-inference
3213− (weld (check ~.types-generic-face-inference src-422 `tok-422 `tre-422) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-422 `typ-422))
3284+ (weld (check ~.types-generic-face-inference src-424 `tok-424 `tre-424) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-424 `typ-424))
32143285++ test-types-generic-gates
3215− (weld (check ~.types-generic-gates src-423 `tok-423 `tre-423) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-423 `typ-423))
3286+ (weld (check ~.types-generic-gates src-425 `tok-425 `tre-425) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-425 `typ-425))
32163287++ test-types-generic-import-reverse
3217− (weld (weld (check ~.types-generic-import-reverse src-424 `tok-424 `tre-424) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-424 `typ-424 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-424-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-424 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-424-1]]))
3288+ (weld (weld (check ~.types-generic-import-reverse src-426 `tok-426 `tre-426) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-426 `typ-426 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-426-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-426 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-426-1]]))
32183289++ test-types-generic-lexical-alias
3219− (weld (check ~.types-generic-lexical-alias src-425 `tok-425 `tre-425) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-425 `typ-425))
3290+ (weld (check ~.types-generic-lexical-alias src-427 `tok-427 `tre-427) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-427 `typ-427))
32203291++ test-types-generic-local-parameter
3221− (weld (check ~.types-generic-local-parameter src-426 `tok-426 `tre-426) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-426 `typ-426))
3292+ (weld (check ~.types-generic-local-parameter src-428 `tok-428 `tre-428) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-428 `typ-428))
32223293++ test-types-generic-local-scope
3223− (weld (check ~.types-generic-local-scope src-427 `tok-427 `tre-427) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-427 `typ-427))
3294+ (weld (check ~.types-generic-local-scope src-429 `tok-429 `tre-429) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-429 `typ-429))
32243295++ test-types-generic-module
3225− (weld (weld (check ~.types-generic-module src-428 `tok-428 `tre-428) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-428 `typ-428 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-428-1]])) (check-module-trees ~.types-generic-module `mtre-428 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-428-1]]))
3296+ (weld (weld (check ~.types-generic-module src-430 `tok-430 `tre-430) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-430 `typ-430 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-430-1]])) (check-module-trees ~.types-generic-module `mtre-430 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-430-1]]))
32263297++ test-types-generic-nested-scope
3227− (weld (check ~.types-generic-nested-scope src-429 `tok-429 `tre-429) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-429 `typ-429))
3298+ (weld (check ~.types-generic-nested-scope src-431 `tok-431 `tre-431) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-431 `typ-431))
32283299++ test-types-generic-parameters
3229− (weld (check ~.types-generic-parameters src-430 `tok-430 `tre-430) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-430 `typ-430))
3300+ (weld (check ~.types-generic-parameters src-432 `tok-432 `tre-432) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-432 `typ-432))
32303301++ test-types-generic-record
3231− (weld (check ~.types-generic-record src-431 `tok-431 `tre-431) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-431 `typ-431))
3302+ (weld (check ~.types-generic-record src-433 `tok-433 `tre-433) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-433 `typ-433))
32323303++ test-types-generic-recursive-union
3233− (weld (check ~.types-generic-recursive-union src-432 `tok-432 `tre-432) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-432 `typ-432))
3304+ (weld (check ~.types-generic-recursive-union src-434 `tok-434 `tre-434) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-434 `typ-434))
32343305++ test-types-generic-repeated
3235− (weld (check ~.types-generic-repeated src-433 `tok-433 `tre-433) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-433 `typ-433))
3306+ (weld (check ~.types-generic-repeated src-435 `tok-435 `tre-435) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-435 `typ-435))
3307+++ test-types-generic-result-context
3308+ (weld (check ~.types-generic-result-context src-436 `tok-436 `tre-436) (check-types ~.types-generic-result-context ~[%tests %golden ~.types-generic-result-context %source %jibb] src-436 `typ-436))
32363309++ test-types-generic-union-alias
3237− (weld (check ~.types-generic-union-alias src-434 `tok-434 `tre-434) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-434 `typ-434))
3310+ (weld (check ~.types-generic-union-alias src-437 `tok-437 `tre-437) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-437 `typ-437))
32383311++ test-types-generic-union-alias-face
3239− (weld (weld (check ~.types-generic-union-alias-face src-435 `tok-435 `tre-435) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-435 `typ-435 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-435-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-435 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-435-1]]))
3312+ (weld (weld (check ~.types-generic-union-alias-face src-438 `tok-438 `tre-438) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-438 `typ-438 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-438-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-438 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-438-1]]))
32403313++ test-types-generic-union-capitals
3241− (weld (check ~.types-generic-union-capitals src-436 `tok-436 `tre-436) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-436 `typ-436))
3314+ (weld (check ~.types-generic-union-capitals src-439 `tok-439 `tre-439) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-439 `typ-439))
32423315++ test-types-generic-union-errors
3243− (weld (check ~.types-generic-union-errors src-437 `tok-437 `tre-437) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-437 `typ-437))
3316+ (weld (check ~.types-generic-union-errors src-440 `tok-440 `tre-440) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-440 `typ-440))
32443317++ test-types-generic-union-escaping
3245− (weld (weld (check ~.types-generic-union-escaping src-438 `tok-438 `tre-438) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-438 `typ-438 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-438-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-438-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-438 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-438-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-438-2]]))
3318+ (weld (weld (check ~.types-generic-union-escaping src-441 `tok-441 `tre-441) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-441 `typ-441 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-441-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-441-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-441 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-441-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-441-2]]))
32463319++ test-types-generic-union-import
3247− (weld (weld (check ~.types-generic-union-import src-439 `tok-439 `tre-439) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-439 `typ-439 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-439-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-439-2]])) (check-module-trees ~.types-generic-union-import `mtre-439 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-439-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-439-2]]))
3320+ (weld (weld (check ~.types-generic-union-import src-442 `tok-442 `tre-442) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-442 `typ-442 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-442-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-442-2]])) (check-module-trees ~.types-generic-union-import `mtre-442 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-442-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-442-2]]))
32483321++ test-types-generic-union-local
3249− (weld (check ~.types-generic-union-local src-440 `tok-440 `tre-440) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-440 `typ-440))
3322+ (weld (check ~.types-generic-union-local src-443 `tok-443 `tre-443) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-443 `typ-443))
32503323++ test-types-generic-union-transitive
3251− (weld (weld (check ~.types-generic-union-transitive src-441 `tok-441 `tre-441) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-441 `typ-441 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-441-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-441-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-441 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-441-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-441-2]]))
3324+ (weld (weld (check ~.types-generic-union-transitive src-444 `tok-444 `tre-444) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-444 `typ-444 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-444-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-444-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-444 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-444-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-444-2]]))
32523325++ test-types-hole-concrete
3253− (weld (check ~.types-hole-concrete src-442 `tok-442 `tre-442) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-442 `typ-442))
3326+ (weld (check ~.types-hole-concrete src-445 `tok-445 `tre-445) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-445 `typ-445))
32543327++ test-types-hole-generic-mold
3255− (weld (check ~.types-hole-generic-mold src-443 `tok-443 `tre-443) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-443 `typ-443))
3328+ (weld (check ~.types-hole-generic-mold src-446 `tok-446 `tre-446) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-446 `typ-446))
32563329++ test-types-hole-local-boundary
3257− (weld (check ~.types-hole-local-boundary src-444 `tok-444 `tre-444) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-444 `typ-444))
3330+ (weld (check ~.types-hole-local-boundary src-447 `tok-447 `tre-447) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-447 `typ-447))
32583331++ test-types-hole-module-boundary
3259− (weld (weld (check ~.types-hole-module-boundary src-445 `tok-445 `tre-445) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-445 `typ-445 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-445-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-445 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-445-1]]))
3332+ (weld (weld (check ~.types-hole-module-boundary src-448 `tok-448 `tre-448) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-448 `typ-448 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-448-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-448 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-448-1]]))
32603333++ test-types-hole-named-complex
3261− (weld (check ~.types-hole-named-complex src-446 `tok-446 `tre-446) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-446 `typ-446))
3334+ (weld (check ~.types-hole-named-complex src-449 `tok-449 `tre-449) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-449 `typ-449))
32623335++ test-types-hole-numeric-capture
3263− (weld (check ~.types-hole-numeric-capture src-447 `tok-447 `tre-447) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-447 `typ-447))
3336+ (weld (check ~.types-hole-numeric-capture src-450 `tok-450 `tre-450) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-450 `typ-450))
32643337++ test-types-hole-unbound-mold
3265− (weld (check ~.types-hole-unbound-mold src-448 `tok-448 `tre-448) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-448 `typ-448))
3338+ (weld (check ~.types-hole-unbound-mold src-451 `tok-451 `tre-451) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-451 `typ-451))
32663339++ test-types-hole-unsupported
3267− (weld (check ~.types-hole-unsupported src-449 `tok-449 `tre-449) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-449 `typ-449))
3340+ (weld (check ~.types-hole-unsupported src-452 `tok-452 `tre-452) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-452 `typ-452))
32683341++ test-types-hole-user-generic
3269− (weld (check ~.types-hole-user-generic src-450 `tok-450 `tre-450) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-450 `typ-450))
3342+ (weld (check ~.types-hole-user-generic src-453 `tok-453 `tre-453) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-453 `typ-453))
32703343++ test-types-hole-user-named
3271− (weld (check ~.types-hole-user-named src-451 `tok-451 `tre-451) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-451 `typ-451))
3344+ (weld (check ~.types-hole-user-named src-454 `tok-454 `tre-454) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-454 `typ-454))
32723345++ test-types-hole-user-value
3273− (weld (check ~.types-hole-user-value src-452 `tok-452 `tre-452) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-452 `typ-452))
3346+ (weld (check ~.types-hole-user-value src-455 `tok-455 `tre-455) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-455 `typ-455))
32743347++ test-types-import-duplicate-mark
3275− (weld (check ~.types-import-duplicate-mark src-453 `tok-453 `tre-453) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-453 `typ-453 ~ ~[[%duplicate mark-453-1]]))
3348+ (weld (check ~.types-import-duplicate-mark src-456 `tok-456 `tre-456) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-456 `typ-456 ~ ~[[%duplicate mark-456-1]]))
32763349++ test-types-import-duplicate-sur
3277− (weld (check ~.types-import-duplicate-sur src-454 `tok-454 `tre-454) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-454 `typ-454 ~[[%fixture %direct imp-454-1] [%fixture %nested imp-454-2] [%fixture %valid imp-454-3]]))
3350+ (weld (check ~.types-import-duplicate-sur src-457 `tok-457 `tre-457) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-457 `typ-457 ~[[%fixture %direct imp-457-1] [%fixture %nested imp-457-2] [%fixture %valid imp-457-3]]))
32783351++ test-types-import-hoon-flags
3279− (weld (check ~.types-import-hoon-flags src-455 `tok-455 `tre-455) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-455 `typ-455 ~[[%flags %flag imp-455-1] [%flags %yes imp-455-2] [%flags %no imp-455-3] [%flags %record imp-455-4]]))
3352+ (weld (check ~.types-import-hoon-flags src-458 `tok-458 `tre-458) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-458 `typ-458 ~[[%flags %flag imp-458-1] [%flags %yes imp-458-2] [%flags %no imp-458-3] [%flags %record imp-458-4]]))
32803353++ test-types-import-hoon-noun
3281− (weld (check ~.types-import-hoon-noun src-456 `tok-456 `tre-456) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-456 `typ-456 ~[[%fixture %any imp-456-1] [%fixture %payload imp-456-2] [%fixture %option imp-456-3] [%fixture %overlap imp-456-4]]))
3354+ (weld (check ~.types-import-hoon-noun src-459 `tok-459 `tre-459) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-459 `typ-459 ~[[%fixture %any imp-459-1] [%fixture %payload imp-459-2] [%fixture %option imp-459-3] [%fixture %overlap imp-459-4]]))
32823355++ test-types-import-mark
3283− (weld (check ~.types-import-mark src-457 `tok-457 `tre-457) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-457 `typ-457 ~[[%fixture %title imp-457-1]] ~[[%label mark-457-1]]))
3356+ (weld (check ~.types-import-mark src-460 `tok-460 `tre-460) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-460 `typ-460 ~[[%fixture %title imp-460-1]] ~[[%label mark-460-1]]))
32843357++ test-types-import-mark-record
3285− (weld (check ~.types-import-mark-record src-458 `tok-458 `tre-458) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-458 `typ-458 ~ ~[[%note mark-458-1] [%choice mark-458-2]]))
3358+ (weld (check ~.types-import-mark-record src-461 `tok-461 `tre-461) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-461 `typ-461 ~ ~[[%note mark-461-1] [%choice mark-461-2]]))
32863359++ test-types-import-missing-mold
3287− (weld (check ~.types-import-missing-mold src-459 `tok-459 `tre-459) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-459 `typ-459 ~[[%fixture %missing imp-459-1]]))
3360+ (weld (check ~.types-import-missing-mold src-462 `tok-462 `tre-462) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-462 `typ-462 ~[[%fixture %missing imp-462-1]]))
32883361++ test-types-import-sur
3289− (weld (check ~.types-import-sur src-460 `tok-460 `tre-460) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-460 `typ-460 ~[[%fixture %title imp-460-1] [%fixture %pair imp-460-2]]))
3362+ (weld (check ~.types-import-sur src-463 `tok-463 `tre-463) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-463 `typ-463 ~[[%fixture %title imp-463-1] [%fixture %pair imp-463-2]]))
32903363++ test-types-import-sur-record-graph
3291− (weld (weld (check ~.types-import-sur-record-graph src-461 `tok-461 `tre-461) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-461 `typ-461 ~[[%fixture %entry imp-461-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-461-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-461 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-461-1]]))
3364+ (weld (weld (check ~.types-import-sur-record-graph src-464 `tok-464 `tre-464) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-464 `typ-464 ~[[%fixture %entry imp-464-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-464 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]]))
32923365++ test-types-import-tlon-notes
3293− (weld (check ~.types-import-tlon-notes src-462 `tok-462 `tre-462) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-462 `typ-462 ~[[%notes %u-note imp-462-1] [%notes %a-note imp-462-2] [%notes %u-notebook imp-462-3] [%notes %u-notes imp-462-4] [%notes %log imp-462-5] [%notes %import-node imp-462-6] [%notes %a-notebook imp-462-7]]))
3366+ (weld (check ~.types-import-tlon-notes src-465 `tok-465 `tre-465) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-465 `typ-465 ~[[%notes %u-note imp-465-1] [%notes %a-note imp-465-2] [%notes %u-notebook imp-465-3] [%notes %u-notes imp-465-4] [%notes %log imp-465-5] [%notes %import-node imp-465-6] [%notes %a-notebook imp-465-7]]))
32943367++ test-types-list-branch
3295− (weld (check ~.types-list-branch src-463 `tok-463 `tre-463) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-463 `typ-463 ~ ~ ~))
3368+ (weld (check ~.types-list-branch src-466 `tok-466 `tre-466) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-466 `typ-466 ~ ~ ~))
32963369++ test-types-list-cons
3297− (weld (check ~.types-list-cons src-464 `tok-464 `tre-464) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-464 `typ-464 ~ ~ ~))
3370+ (weld (check ~.types-list-cons src-467 `tok-467 `tre-467) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-467 `typ-467 ~ ~ ~))
32983371++ test-types-list-context
3299− (weld (check ~.types-list-context src-465 `tok-465 `tre-465) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-465 `typ-465 ~ ~ ~))
3372+ (weld (check ~.types-list-context src-468 `tok-468 `tre-468) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-468 `typ-468 ~ ~ ~))
33003373++ test-types-list-imported
3301− (weld (check ~.types-list-imported src-466 `tok-466 `tre-466) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-466 `typ-466 ~[[%fixture %texts imp-466-1] [%fixture %ships imp-466-2]] ~ ~))
3374+ (weld (check ~.types-list-imported src-469 `tok-469 `tre-469) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-469 `typ-469 ~[[%fixture %texts imp-469-1] [%fixture %ships imp-469-2]] ~ ~))
33023375++ test-types-list-open
3303− (weld (check ~.types-list-open src-467 `tok-467 `tre-467) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-467 `typ-467 ~ ~ ~))
3376+ (weld (check ~.types-list-open src-470 `tok-470 `tre-470) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-470 `typ-470 ~ ~ ~))
33043377++ test-types-list-open-constraints
3305− (weld (check ~.types-list-open-constraints src-468 `tok-468 `tre-468) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-468 `typ-468 ~ ~ ~))
3378+ (weld (check ~.types-list-open-constraints src-471 `tok-471 `tre-471) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-471 `typ-471 ~ ~ ~))
33063379++ test-types-list-pattern-imported
3307− (weld (check ~.types-list-pattern-imported src-469 `tok-469 `tre-469) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-469 `typ-469 ~[[%fixture %texts imp-469-1] [%fixture %text-set imp-469-2]] ~ ~))
3380+ (weld (check ~.types-list-pattern-imported src-472 `tok-472 `tre-472) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-472 `typ-472 ~[[%fixture %texts imp-472-1] [%fixture %text-set imp-472-2]] ~ ~))
33083381++ test-types-list-patterns
3309− (weld (check ~.types-list-patterns src-470 `tok-470 `tre-470) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-470 `typ-470 ~ ~ ~))
3382+ (weld (check ~.types-list-patterns src-473 `tok-473 `tre-473) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-473 `typ-473 ~ ~ ~))
33103383++ test-types-list-zero-fit
3311− (weld (check ~.types-list-zero-fit src-471 `tok-471 `tre-471) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-471 `typ-471 ~ ~ ~))
3384+ (weld (check ~.types-list-zero-fit src-474 `tok-474 `tre-474) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-474 `typ-474 ~ ~ ~))
3385+++ test-types-literal-constructor-nouns
3386+ (weld (check ~.types-literal-constructor-nouns src-475 `tok-475 `tre-475) (check-types ~.types-literal-constructor-nouns ~[%tests %golden ~.types-literal-constructor-nouns %source %jibb] src-475 `typ-475))
33123387++ test-types-local-capitals
3313− (weld (check ~.types-local-capitals src-472 `tok-472 `tre-472) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-472 `typ-472 ~ ~ ~))
3388+ (weld (check ~.types-local-capitals src-476 `tok-476 `tre-476) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-476 `typ-476 ~ ~ ~))
33143389++ test-types-local-recursive
3315− (weld (check ~.types-local-recursive src-473 `tok-473 `tre-473) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-473 `typ-473 ~ ~ ~))
3390+ (weld (check ~.types-local-recursive src-477 `tok-477 `tre-477) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-477 `typ-477 ~ ~ ~))
33163391++ test-types-local-scc
3317− (weld (check ~.types-local-scc src-474 `tok-474 `tre-474) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-474 `typ-474 ~ ~ ~))
3392+ (weld (check ~.types-local-scc src-478 `tok-478 `tre-478) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-478 `typ-478 ~ ~ ~))
33183393++ test-types-local-scc-adversarial
3319− (weld (check ~.types-local-scc-adversarial src-475 `tok-475 `tre-475) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-475 `typ-475 ~ ~ ~))
3394+ (weld (check ~.types-local-scc-adversarial src-479 `tok-479 `tre-479) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-479 `typ-479 ~ ~ ~))
3395+++ test-types-loobean-singleton-source
3396+ (weld (check ~.types-loobean-singleton-source src-480 `tok-480 `tre-480) (check-types ~.types-loobean-singleton-source ~[%tests %golden ~.types-loobean-singleton-source %source %jibb] src-480 `typ-480))
3397+++ test-types-loobean-union-context
3398+ (weld (check ~.types-loobean-union-context src-481 `tok-481 `tre-481) (check-types ~.types-loobean-union-context ~[%tests %golden ~.types-loobean-union-context %source %jibb] src-481 `typ-481))
33203399++ test-types-missing-tag-context
3321− (weld (check ~.types-missing-tag-context src-476 `tok-476 `tre-476) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-476 `typ-476 ~ ~ ~))
3400+ (weld (check ~.types-missing-tag-context src-482 `tok-482 `tre-482) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-482 `typ-482 ~ ~ ~))
33223401++ test-types-missing-tag-imported
3323− (weld (check ~.types-missing-tag-imported src-477 `tok-477 `tre-477) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-477 `typ-477 ~[[%fixture %choice imp-477-1] [%fixture %nested-choice imp-477-2]]))
3402+ (weld (check ~.types-missing-tag-imported src-483 `tok-483 `tre-483) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-483 `typ-483 ~[[%fixture %choice imp-483-1] [%fixture %nested-choice imp-483-2]]))
33243403++ test-types-missing-tag-named
3325− (weld (check ~.types-missing-tag-named src-478 `tok-478 `tre-478) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-478 `typ-478 ~ ~ ~))
3404+ (weld (check ~.types-missing-tag-named src-484 `tok-484 `tre-484) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-484 `typ-484 ~ ~ ~))
33263405++ test-types-module-field-duplicate
3327− (weld (weld (check ~.types-module-field-duplicate src-479 `tok-479 `tre-479) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-479 `typ-479 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-479-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-479 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-479-1]]))
3406+ (weld (weld (check ~.types-module-field-duplicate src-485 `tok-485 `tre-485) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-485 `typ-485 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-485-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-485 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-485-1]]))
33283407++ test-types-module-field-nonrecord
3329− (weld (weld (check ~.types-module-field-nonrecord src-480 `tok-480 `tre-480) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-480 `typ-480 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-480-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-480 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-480-1]]))
3408+ (weld (weld (check ~.types-module-field-nonrecord src-486 `tok-486 `tre-486) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-486 `typ-486 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-486 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]]))
33303409++ test-types-module-field-path
3331− (weld (weld (check ~.types-module-field-path src-481 `tok-481 `tre-481) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-481 `typ-481 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-481-1]])) (check-module-trees ~.types-module-field-path `mtre-481 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-481-1]]))
3410+ (weld (weld (check ~.types-module-field-path src-487 `tok-487 `tre-487) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-487 `typ-487 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]])) (check-module-trees ~.types-module-field-path `mtre-487 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]]))
33323411++ test-types-module-field-shadow
3333− (weld (weld (check ~.types-module-field-shadow src-482 `tok-482 `tre-482) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-482 `typ-482 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-482-1]])) (check-module-trees ~.types-module-field-shadow `mtre-482 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-482-1]]))
3412+ (weld (weld (check ~.types-module-field-shadow src-488 `tok-488 `tre-488) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]])) (check-module-trees ~.types-module-field-shadow `mtre-488 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]]))
33343413++ test-types-module-fixtures
3335− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-483 `tok-483 `tre-483) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-483 `typ-483 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-483-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-483-2]])) (check-module-trees ~.types-module-fixtures `mtre-483 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-483-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-483-2]]))
3414+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-489 `tok-489 `tre-489) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-489 `typ-489 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-489-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-489-2]])) (check-module-trees ~.types-module-fixtures `mtre-489 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-489-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-489-2]]))
33363415++ test-types-module-mixed
3337− (weld (weld (check ~.types-module-mixed src-484 `tok-484 `tre-484) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-484 `typ-484 ~[[%fixture %title imp-484-1]] ~[[%label mark-484-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-484-1]])) (check-module-trees ~.types-module-mixed `mtre-484 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-484-1]]))
3416+ (weld (weld (check ~.types-module-mixed src-490 `tok-490 `tre-490) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-490 `typ-490 ~[[%fixture %title imp-490-1]] ~[[%label mark-490-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-490-1]])) (check-module-trees ~.types-module-mixed `mtre-490 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-490-1]]))
33383417++ test-types-multi-call
3339− (weld (check ~.types-multi-call src-485 `tok-485 `tre-485) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-485 `typ-485 ~ ~ ~))
3418+ (weld (check ~.types-multi-call src-491 `tok-491 `tre-491) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-491 `typ-491 ~ ~ ~))
33403419++ test-types-multi-import
3341− (weld (weld (check ~.types-multi-import src-486 `tok-486 `tre-486) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-486 `typ-486 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]])) (check-module-trees ~.types-multi-import `mtre-486 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]]))
3420+ (weld (weld (check ~.types-multi-import src-492 `tok-492 `tre-492) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-492 `typ-492 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-492-1]])) (check-module-trees ~.types-multi-import `mtre-492 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-492-1]]))
33423421++ test-types-nested-missing-tag
3343− (weld (check ~.types-nested-missing-tag src-487 `tok-487 `tre-487) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-487 `typ-487 ~ ~ ~))
3422+ (weld (check ~.types-nested-missing-tag src-493 `tok-493 `tre-493) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-493 `typ-493 ~ ~ ~))
3423+++ test-types-nested-noun-context
3424+ (weld (check ~.types-nested-noun-context src-494 `tok-494 `tre-494) (check-types ~.types-nested-noun-context ~[%tests %golden ~.types-nested-noun-context %source %jibb] src-494 `typ-494))
3425+++ test-types-nested-shallow-preserve
3426+ (weld (check ~.types-nested-shallow-preserve src-495 `tok-495 `tre-495) (check-module-types ~.types-nested-shallow-preserve ~[%tests %golden ~.types-nested-shallow-preserve %source %jibb] src-495 `typ-495 ~ ~ ~))
3427+++ test-types-nested-union-context
3428+ (weld (check ~.types-nested-union-context src-496 `tok-496 `tre-496) (check-types ~.types-nested-union-context ~[%tests %golden ~.types-nested-union-context %source %jibb] src-496 `typ-496))
33443429++ test-types-null-context
3345− (weld (check ~.types-null-context src-488 `tok-488 `tre-488) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-488 `typ-488))
3430+ (weld (check ~.types-null-context src-497 `tok-497 `tre-497) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-497 `typ-497))
33463431++ test-types-null-overlap
3347− (weld (check ~.types-null-overlap src-489 `tok-489 `tre-489) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-489 `typ-489))
3432+ (weld (check ~.types-null-overlap src-498 `tok-498 `tre-498) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-498 `typ-498))
33483433++ test-types-null-unresolved
3349− (weld (check ~.types-null-unresolved src-490 `tok-490 `tre-490) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-490 `typ-490))
3434+ (weld (check ~.types-null-unresolved src-499 `tok-499 `tre-499) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-499 `typ-499))
33503435++ test-types-pair-context
3351− (weld (check ~.types-pair-context src-491 `tok-491 `tre-491) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-491 `typ-491 ~ ~ ~))
3436+ (weld (check ~.types-pair-context src-500 `tok-500 `tre-500) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-500 `typ-500 ~ ~ ~))
33523437++ test-types-partial-apply
3353− (weld (check ~.types-partial-apply src-492 `tok-492 `tre-492) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-492 `typ-492))
3438+ (weld (check ~.types-partial-apply src-501 `tok-501 `tre-501) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-501 `typ-501))
33543439++ test-types-partial-atom-alias
3355− (weld (check ~.types-partial-atom-alias src-493 `tok-493 `tre-493) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-493 `typ-493))
3440+ (weld (check ~.types-partial-atom-alias src-502 `tok-502 `tre-502) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-502 `typ-502))
33563441++ test-types-partial-atom-constraint
3357− (weld (check ~.types-partial-atom-constraint src-494 `tok-494 `tre-494) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-494 `typ-494))
3442+ (weld (check ~.types-partial-atom-constraint src-503 `tok-503 `tre-503) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-503 `typ-503))
33583443++ test-types-partial-atom-widening
3359− (weld (check ~.types-partial-atom-widening src-495 `tok-495 `tre-495) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-495 `typ-495))
3444+ (weld (check ~.types-partial-atom-widening src-504 `tok-504 `tre-504) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-504 `typ-504))
33603445++ test-types-partial-aura
3361− (weld (check ~.types-partial-aura src-496 `tok-496 `tre-496) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-496 `typ-496))
3446+ (weld (check ~.types-partial-aura src-505 `tok-505 `tre-505) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-505 `typ-505))
33623447++ test-types-partial-aura-family
3363− (weld (check ~.types-partial-aura-family src-497 `tok-497 `tre-497) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-497 `typ-497))
3448+ (weld (check ~.types-partial-aura-family src-506 `tok-506 `tre-506) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-506 `typ-506))
33643449++ test-types-partial-aura-generalization
3365− (weld (check ~.types-partial-aura-generalization src-498 `tok-498 `tre-498) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-498 `typ-498))
3450+ (weld (check ~.types-partial-aura-generalization src-507 `tok-507 `tre-507) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-507 `typ-507))
33663451++ test-types-partial-bare-atom
3367− (weld (check ~.types-partial-bare-atom src-499 `tok-499 `tre-499) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-499 `typ-499))
3452+ (weld (check ~.types-partial-bare-atom src-508 `tok-508 `tre-508) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-508 `typ-508))
33683453++ test-types-partial-branch-widening
3369− (weld (check ~.types-partial-branch-widening src-500 `tok-500 `tre-500) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-500 `typ-500))
3454+ (weld (check ~.types-partial-branch-widening src-509 `tok-509 `tre-509) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-509 `typ-509))
33703455++ test-types-partial-conflicting-sites
3371− (weld (check ~.types-partial-conflicting-sites src-501 `tok-501 `tre-501) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-501 `typ-501))
3456+ (weld (check ~.types-partial-conflicting-sites src-510 `tok-510 `tre-510) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-510 `typ-510))
33723457++ test-types-partial-decimal-default
3373− (weld (check ~.types-partial-decimal-default src-502 `tok-502 `tre-502) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-502 `typ-502))
3458+ (weld (check ~.types-partial-decimal-default src-511 `tok-511 `tre-511) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-511 `typ-511))
33743459++ test-types-partial-dependency-chain
3375− (weld (check ~.types-partial-dependency-chain src-503 `tok-503 `tre-503) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-503 `typ-503))
3460+ (weld (check ~.types-partial-dependency-chain src-512 `tok-512 `tre-512) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-512 `typ-512))
33763461++ test-types-partial-explicit-capital
3377− (weld (check ~.types-partial-explicit-capital src-504 `tok-504 `tre-504) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-504 `typ-504))
3462+ (weld (check ~.types-partial-explicit-capital src-513 `tok-513 `tre-513) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-513 `typ-513))
33783463++ test-types-partial-forward
3379− (weld (check ~.types-partial-forward src-505 `tok-505 `tre-505) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-505 `typ-505))
3464+ (weld (check ~.types-partial-forward src-514 `tok-514 `tre-514) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-514 `typ-514))
33803465++ test-types-partial-generalization
3381− (weld (check ~.types-partial-generalization src-506 `tok-506 `tre-506) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-506 `typ-506))
3466+ (weld (check ~.types-partial-generalization src-515 `tok-515 `tre-515) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-515 `typ-515))
33823467++ test-types-partial-identity
3383− (weld (check ~.types-partial-identity src-507 `tok-507 `tre-507) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-507 `typ-507))
3468+ (weld (check ~.types-partial-identity src-516 `tok-516 `tre-516) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-516 `typ-516))
33843469++ test-types-partial-independent-atoms
3385− (weld (check ~.types-partial-independent-atoms src-508 `tok-508 `tre-508) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-508 `typ-508))
3470+ (weld (check ~.types-partial-independent-atoms src-517 `tok-517 `tre-517) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-517 `typ-517))
33863471++ test-types-partial-local-molds
3387− (weld (check ~.types-partial-local-molds src-509 `tok-509 `tre-509) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-509 `typ-509))
3472+ (weld (check ~.types-partial-local-molds src-518 `tok-518 `tre-518) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-518 `typ-518))
33883473++ test-types-partial-locals
3389− (weld (check ~.types-partial-locals src-510 `tok-510 `tre-510) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-510 `typ-510))
3474+ (weld (check ~.types-partial-locals src-519 `tok-519 `tre-519) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-519 `typ-519))
33903475++ test-types-partial-many-atom-constraints
3391− (weld (check ~.types-partial-many-atom-constraints src-511 `tok-511 `tre-511) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-511 `typ-511))
3476+ (weld (check ~.types-partial-many-atom-constraints src-520 `tok-520 `tre-520) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-520 `typ-520))
33923477++ test-types-partial-mold-bare-aura
3393− (weld (check ~.types-partial-mold-bare-aura src-512 `tok-512 `tre-512) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-512 `typ-512))
3478+ (weld (check ~.types-partial-mold-bare-aura src-521 `tok-521 `tre-521) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-521 `typ-521))
33943479++ test-types-partial-mold-composite
3395− (weld (check ~.types-partial-mold-composite src-513 `tok-513 `tre-513) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-513 `typ-513))
3480+ (weld (check ~.types-partial-mold-composite src-522 `tok-522 `tre-522) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-522 `typ-522))
33963481++ test-types-partial-mold-forward
3397− (weld (check ~.types-partial-mold-forward src-514 `tok-514 `tre-514) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-514 `typ-514))
3482+ (weld (check ~.types-partial-mold-forward src-523 `tok-523 `tre-523) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-523 `typ-523))
33983483++ test-types-partial-mold-recursive
3399− (weld (check ~.types-partial-mold-recursive src-515 `tok-515 `tre-515) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-515 `typ-515))
3484+ (weld (check ~.types-partial-mold-recursive src-524 `tok-524 `tre-524) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-524 `typ-524))
34003485++ test-types-partial-occurs
3401− (weld (check ~.types-partial-occurs src-516 `tok-516 `tre-516) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-516 `typ-516))
3486+ (weld (check ~.types-partial-occurs src-525 `tok-525 `tre-525) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-525 `typ-525))
34023487++ test-types-partial-projection
3403− (weld (check ~.types-partial-projection src-517 `tok-517 `tre-517) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-517 `typ-517))
3488+ (weld (check ~.types-partial-projection src-526 `tok-526 `tre-526) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-526 `typ-526))
34043489++ test-types-partial-shadow-global
3405− (weld (check ~.types-partial-shadow-global src-518 `tok-518 `tre-518) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-518 `typ-518))
3490+ (weld (check ~.types-partial-shadow-global src-527 `tok-527 `tre-527) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-527 `typ-527))
34063491++ test-types-partial-shared-tvar
3407− (weld (check ~.types-partial-shared-tvar src-519 `tok-519 `tre-519) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-519 `typ-519))
3492+ (weld (check ~.types-partial-shared-tvar src-528 `tok-528 `tre-528) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-528 `typ-528))
34083493++ test-types-partial-union-cases
3409− (weld (check ~.types-partial-union-cases src-520 `tok-520 `tre-520) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-520 `typ-520))
3494+ (weld (check ~.types-partial-union-cases src-529 `tok-529 `tre-529) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-529 `typ-529))
34103495++ test-types-partial-union-edges
3411− (weld (check ~.types-partial-union-edges src-521 `tok-521 `tre-521) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-521 `typ-521))
3496+ (weld (check ~.types-partial-union-edges src-530 `tok-530 `tre-530) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-530 `typ-530))
3497+++ test-types-partial-union-nested-nouns
3498+ (weld (check ~.types-partial-union-nested-nouns src-531 `tok-531 `tre-531) (check-types ~.types-partial-union-nested-nouns ~[%tests %golden ~.types-partial-union-nested-nouns %source %jibb] src-531 `typ-531))
34123499++ test-types-partial-unresolved-tag
3413− (weld (check ~.types-partial-unresolved-tag src-522 `tok-522 `tre-522) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-522 `typ-522))
3500+ (weld (check ~.types-partial-unresolved-tag src-532 `tok-532 `tre-532) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-532 `typ-532))
34143501++ test-types-positional-faces
3415− (weld (check ~.types-positional-faces src-523 `tok-523 `tre-523) (check-types ~.types-positional-faces ~[%tests %golden ~.types-positional-faces %source %jibb] src-523 `typ-523))
3502+ (weld (check ~.types-positional-faces src-533 `tok-533 `tre-533) (check-types ~.types-positional-faces ~[%tests %golden ~.types-positional-faces %source %jibb] src-533 `typ-533))
34163503++ test-types-prelude-arithmetic
3417− (weld (check ~.types-prelude-arithmetic src-524 `tok-524 `tre-524) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-524 `typ-524 ~ ~ ~))
3504+ (weld (check ~.types-prelude-arithmetic src-534 `tok-534 `tre-534) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-534 `typ-534 ~ ~ ~))
34183505++ test-types-prelude-ask
3419− (weld (check ~.types-prelude-ask src-525 `tok-525 `tre-525) (check-module-types ~.types-prelude-ask ~[%tests %golden ~.types-prelude-ask %source %jibb] src-525 `typ-525 ~ ~ ~))
3506+ (weld (check ~.types-prelude-ask src-535 `tok-535 `tre-535) (check-module-types ~.types-prelude-ask ~[%tests %golden ~.types-prelude-ask %source %jibb] src-535 `typ-535 ~ ~ ~))
34203507++ test-types-prelude-bond
3421− (weld (check ~.types-prelude-bond src-526 `tok-526 `tre-526) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-526 `typ-526 ~ ~ ~))
3508+ (weld (check ~.types-prelude-bond src-536 `tok-536 `tre-536) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-536 `typ-536 ~ ~ ~))
34223509++ test-types-prelude-cmd
3423− (weld (check ~.types-prelude-cmd src-527 `tok-527 `tre-527) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-527 `typ-527 ~ ~ ~))
3510+ (weld (check ~.types-prelude-cmd src-537 `tok-537 `tre-537) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-537 `typ-537 ~ ~ ~))
3511+++ test-types-prelude-comparison
3512+ (weld (check ~.types-prelude-comparison src-538 `tok-538 `tre-538) (check-module-types ~.types-prelude-comparison ~[%tests %golden ~.types-prelude-comparison %source %jibb] src-538 `typ-538 ~ ~ ~))
34243513++ test-types-prelude-direct
3425− (weld (check ~.types-prelude-direct src-528 `tok-528 `tre-528) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-528 `typ-528 ~ ~ ~))
3514+ (weld (check ~.types-prelude-direct src-539 `tok-539 `tre-539) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-539 `typ-539 ~ ~ ~))
34263515++ test-types-prelude-functional
3427− (weld (check ~.types-prelude-functional src-529 `tok-529 `tre-529) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-529 `typ-529 ~ ~ ~))
3516+ (weld (check ~.types-prelude-functional src-540 `tok-540 `tre-540) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-540 `typ-540 ~ ~ ~))
34283517++ test-types-prelude-generic-alias
3429− (weld (weld (check ~.types-prelude-generic-alias src-530 `tok-530 `tre-530) (check-module-types ~.types-prelude-generic-alias ~[%tests %golden ~.types-prelude-generic-alias %source %jibb] src-530 `typ-530 ~ ~ ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-530-1]])) (check-module-trees ~.types-prelude-generic-alias `mtre-530 ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-530-1]]))
3518+ (weld (weld (check ~.types-prelude-generic-alias src-541 `tok-541 `tre-541) (check-module-types ~.types-prelude-generic-alias ~[%tests %golden ~.types-prelude-generic-alias %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-541-1]])) (check-module-trees ~.types-prelude-generic-alias `mtre-541 ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-541-1]]))
34303519++ test-types-prelude-interface
3431− (weld (weld (check ~.types-prelude-interface src-531 `tok-531 `tre-531) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-531 `typ-531 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-531-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-531-2]])) (check-module-trees ~.types-prelude-interface `mtre-531 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-531-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-531-2]]))
3520+ (weld (weld (check ~.types-prelude-interface src-542 `tok-542 `tre-542) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-542 `typ-542 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-542-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-542-2]])) (check-module-trees ~.types-prelude-interface `mtre-542 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-542-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-542-2]]))
3521+++ test-types-prelude-lent
3522+ (weld (check ~.types-prelude-lent src-543 `tok-543 `tre-543) (check-module-types ~.types-prelude-lent ~[%tests %golden ~.types-prelude-lent %source %jibb] src-543 `typ-543 ~ ~ ~))
34323523++ test-types-prelude-like
3433− (weld (check ~.types-prelude-like src-532 `tok-532 `tre-532) (check-module-types ~.types-prelude-like ~[%tests %golden ~.types-prelude-like %source %jibb] src-532 `typ-532 ~ ~ ~))
3524+ (weld (check ~.types-prelude-like src-544 `tok-544 `tre-544) (check-module-types ~.types-prelude-like ~[%tests %golden ~.types-prelude-like %source %jibb] src-544 `typ-544 ~ ~ ~))
34343525++ test-types-prelude-list-alias
3435− (weld (check ~.types-prelude-list-alias src-533 `tok-533 `tre-533) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-533 `typ-533 ~ ~ ~))
3526+ (weld (check ~.types-prelude-list-alias src-545 `tok-545 `tre-545) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-545 `typ-545 ~ ~ ~))
34363527++ test-types-prelude-list-functions
3437− (weld (weld (check ~.types-prelude-list-functions src-534 `tok-534 `tre-534) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-534 `typ-534 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-534-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-534 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-534-1]]))
3528+ (weld (weld (check ~.types-prelude-list-functions src-546 `tok-546 `tre-546) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-546 `typ-546 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-546-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-546 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-546-1]]))
34383529++ test-types-prelude-list-helpers
3439− (weld (check ~.types-prelude-list-helpers src-535 `tok-535 `tre-535) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-535 `typ-535 ~ ~ ~))
3530+ (weld (check ~.types-prelude-list-helpers src-547 `tok-547 `tre-547) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-547 `typ-547 ~ ~ ~))
34403531++ test-types-prelude-predicates
3441− (weld (check ~.types-prelude-predicates src-536 `tok-536 `tre-536) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-536 `typ-536 ~ ~ ~))
3532+ (weld (check ~.types-prelude-predicates src-548 `tok-548 `tre-548) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-548 `typ-548 ~ ~ ~))
3533+++ test-types-prelude-sub
3534+ (weld (check ~.types-prelude-sub src-549 `tok-549 `tre-549) (check-module-types ~.types-prelude-sub ~[%tests %golden ~.types-prelude-sub %source %jibb] src-549 `typ-549 ~ ~ ~))
3535+++ test-types-prelude-sub-nested
3536+ (weld (check ~.types-prelude-sub-nested src-550 `tok-550 `tre-550) (check-module-types ~.types-prelude-sub-nested ~[%tests %golden ~.types-prelude-sub-nested %source %jibb] src-550 `typ-550 ~ ~ ~))
34423537++ test-types-prelude-unit-helpers
3443− (weld (check ~.types-prelude-unit-helpers src-537 `tok-537 `tre-537) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-537 `typ-537 ~ ~ ~))
3538+ (weld (check ~.types-prelude-unit-helpers src-551 `tok-551 `tre-551) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-551 `typ-551 ~ ~ ~))
3539+++ test-types-prelude-zing
3540+ (weld (check ~.types-prelude-zing src-552 `tok-552 `tre-552) (check-module-types ~.types-prelude-zing ~[%tests %golden ~.types-prelude-zing %source %jibb] src-552 `typ-552 ~ ~ ~))
34443541++ test-types-proj-explicit-context
3445− (weld (check ~.types-proj-explicit-context src-538 `tok-538 `tre-538) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-538 `typ-538 ~ ~ ~))
3542+ (weld (check ~.types-proj-explicit-context src-553 `tok-553 `tre-553) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-553 `typ-553 ~ ~ ~))
34463543++ test-types-proj-nested-no-implicit
3447− (weld (check ~.types-proj-nested-no-implicit src-539 `tok-539 `tre-539) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-539 `typ-539 ~ ~ ~))
3544+ (weld (check ~.types-proj-nested-no-implicit src-554 `tok-554 `tre-554) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-554 `typ-554 ~ ~ ~))
34483545++ test-types-proj-reserved-imported-definition
3449− (weld (weld (check ~.types-proj-reserved-imported-definition src-540 `tok-540 `tre-540) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-540 `typ-540 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-540 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-540-1]]))
3546+ (weld (weld (check ~.types-proj-reserved-imported-definition src-555 `tok-555 `tre-555) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-555 `typ-555 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-555-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-555 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-555-1]]))
34503547++ test-types-proj-reserved-jibb-import
3451− (weld (weld (check ~.types-proj-reserved-jibb-import src-541 `tok-541 `tre-541) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-541-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-541 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-541-1]]))
3548+ (weld (weld (check ~.types-proj-reserved-jibb-import src-556 `tok-556 `tre-556) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-556 `typ-556 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-556-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-556 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-556-1]]))
34523549++ test-types-proj-reserved-local
3453− (weld (check ~.types-proj-reserved-local src-542 `tok-542 `tre-542) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-542 `typ-542 ~ ~ ~))
3550+ (weld (check ~.types-proj-reserved-local src-557 `tok-557 `tre-557) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-557 `typ-557 ~ ~ ~))
34543551++ test-types-proj-reserved-local-mold
3455− (weld (check ~.types-proj-reserved-local-mold src-543 `tok-543 `tre-543) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-543 `typ-543 ~ ~ ~))
3552+ (weld (check ~.types-proj-reserved-local-mold src-558 `tok-558 `tre-558) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-558 `typ-558 ~ ~ ~))
34563553++ test-types-proj-reserved-mark-import
3457− (weld (check ~.types-proj-reserved-mark-import src-544 `tok-544 `tre-544) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-544 `typ-544 ~ ~ ~))
3554+ (weld (check ~.types-proj-reserved-mark-import src-559 `tok-559 `tre-559) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-559 `typ-559 ~ ~ ~))
34583555++ test-types-proj-reserved-mold
3459− (weld (check ~.types-proj-reserved-mold src-545 `tok-545 `tre-545) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-545 `typ-545 ~ ~ ~))
3556+ (weld (check ~.types-proj-reserved-mold src-560 `tok-560 `tre-560) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-560 `typ-560 ~ ~ ~))
34603557++ test-types-proj-reserved-pattern
3461− (weld (check ~.types-proj-reserved-pattern src-546 `tok-546 `tre-546) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-546 `typ-546 ~ ~ ~))
3558+ (weld (check ~.types-proj-reserved-pattern src-561 `tok-561 `tre-561) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-561 `typ-561 ~ ~ ~))
34623559++ test-types-proj-reserved-positive
3463− (weld (check ~.types-proj-reserved-positive src-547 `tok-547 `tre-547) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-547 `typ-547 ~ ~ ~))
3560+ (weld (check ~.types-proj-reserved-positive src-562 `tok-562 `tre-562) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-562 `typ-562 ~ ~ ~))
34643561++ test-types-proj-reserved-sample
3465− (weld (check ~.types-proj-reserved-sample src-548 `tok-548 `tre-548) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-548 `typ-548 ~ ~ ~))
3562+ (weld (check ~.types-proj-reserved-sample src-563 `tok-563 `tre-563) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-563 `typ-563 ~ ~ ~))
34663563++ test-types-proj-reserved-sur-import
3467− (weld (check ~.types-proj-reserved-sur-import src-549 `tok-549 `tre-549) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-549 `typ-549 ~ ~ ~))
3564+ (weld (check ~.types-proj-reserved-sur-import src-564 `tok-564 `tre-564) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-564 `typ-564 ~ ~ ~))
34683565++ test-types-proj-reserved-unused-pattern
3469− (weld (check ~.types-proj-reserved-unused-pattern src-550 `tok-550 `tre-550) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-550 `typ-550 ~ ~ ~))
3566+ (weld (check ~.types-proj-reserved-unused-pattern src-565 `tok-565 `tre-565) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-565 `typ-565 ~ ~ ~))
34703567++ test-types-proj-reserved-unused-sample
3471− (weld (check ~.types-proj-reserved-unused-sample src-551 `tok-551 `tre-551) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-551 `typ-551 ~ ~ ~))
3568+ (weld (check ~.types-proj-reserved-unused-sample src-566 `tok-566 `tre-566) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-566 `typ-566 ~ ~ ~))
34723569++ test-types-proj-reserved-unused-value
3473− (weld (check ~.types-proj-reserved-unused-value src-552 `tok-552 `tre-552) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-552 `typ-552 ~ ~ ~))
3570+ (weld (check ~.types-proj-reserved-unused-value src-567 `tok-567 `tre-567) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-567 `typ-567 ~ ~ ~))
34743571++ test-types-proj-reserved-value
3475− (weld (check ~.types-proj-reserved-value src-553 `tok-553 `tre-553) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-553 `typ-553 ~ ~ ~))
3572+ (weld (check ~.types-proj-reserved-value src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-568 `typ-568 ~ ~ ~))
34763573++ test-types-proj-single-duplicate
3477− (weld (check ~.types-proj-single-duplicate src-554 `tok-554 `tre-554) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-554 `typ-554 ~ ~ ~))
3574+ (weld (check ~.types-proj-single-duplicate src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-569 `typ-569 ~ ~ ~))
34783575++ test-types-proj-single-field
3479− (weld (check ~.types-proj-single-field src-555 `tok-555 `tre-555) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-555 `typ-555 ~ ~ ~))
3576+ (weld (check ~.types-proj-single-field src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-570 `typ-570 ~ ~ ~))
34803577++ test-types-proj-single-sample-face
3481− (weld (check ~.types-proj-single-sample-face src-556 `tok-556 `tre-556) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-556 `typ-556 ~ ~ ~))
3578+ (weld (check ~.types-proj-single-sample-face src-571 `tok-571 `tre-571) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-571 `typ-571 ~ ~ ~))
34823579++ test-types-proj-single-wrapped
3483− (weld (check ~.types-proj-single-wrapped src-557 `tok-557 `tre-557) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-557 `typ-557 ~ ~ ~))
3580+ (weld (check ~.types-proj-single-wrapped src-572 `tok-572 `tre-572) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-572 `typ-572 ~ ~ ~))
34843581++ test-types-qath-faces
3485− (weld (check ~.types-qath-faces src-558 `tok-558 `tre-558) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-558 `typ-558 ~ ~ ~))
3582+ (weld (check ~.types-qath-faces src-573 `tok-573 `tre-573) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-573 `typ-573 ~ ~ ~))
34863583++ test-types-qath-holes
3487− (weld (check ~.types-qath-holes src-559 `tok-559 `tre-559) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-559 `typ-559 ~ ~ ~))
3584+ (weld (check ~.types-qath-holes src-574 `tok-574 `tre-574) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-574 `typ-574 ~ ~ ~))
34883585++ test-types-qath-module-identity
3489− (weld (weld (check ~.types-qath-module-identity src-560 `tok-560 `tre-560) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-560 `typ-560 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-560-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-560-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-560-3]])) (check-module-trees ~.types-qath-module-identity `mtre-560 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-560-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-560-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-560-3]]))
3586+ (weld (weld (check ~.types-qath-module-identity src-575 `tok-575 `tre-575) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-575 `typ-575 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-575-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-575-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-575-3]])) (check-module-trees ~.types-qath-module-identity `mtre-575 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-575-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-575-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-575-3]]))
34903587++ test-types-qath-recursive
3491− (weld (check ~.types-qath-recursive src-561 `tok-561 `tre-561) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-561 `typ-561 ~ ~ ~))
3588+ (weld (check ~.types-qath-recursive src-576 `tok-576 `tre-576) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-576 `typ-576 ~ ~ ~))
34923589++ test-types-record-bound-variable
3493− (weld (check ~.types-record-bound-variable src-562 `tok-562 `tre-562) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-562 `typ-562))
3590+ (weld (check ~.types-record-bound-variable src-577 `tok-577 `tre-577) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-577 `typ-577))
34943591++ test-types-record-cast-context
3495− (weld (check ~.types-record-cast-context src-563 `tok-563 `tre-563) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-563 `typ-563 ~ ~ ~))
3592+ (weld (check ~.types-record-cast-context src-578 `tok-578 `tre-578) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-578 `typ-578 ~ ~ ~))
34963593++ test-types-record-change
3497− (weld (check ~.types-record-change src-564 `tok-564 `tre-564) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-564 `typ-564 ~ ~ ~))
3594+ (weld (check ~.types-record-change src-579 `tok-579 `tre-579) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-579 `typ-579 ~ ~ ~))
34983595++ test-types-record-change-generic
3499− (weld (check ~.types-record-change-generic src-565 `tok-565 `tre-565) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-565 `typ-565 ~ ~ ~))
3596+ (weld (check ~.types-record-change-generic src-580 `tok-580 `tre-580) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-580 `typ-580 ~ ~ ~))
35003597++ test-types-record-faces
3501− (weld (check ~.types-record-faces src-566 `tok-566 `tre-566) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-566 `typ-566))
3598+ (weld (check ~.types-record-faces src-581 `tok-581 `tre-581) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-581 `typ-581))
35023599++ test-types-record-field-edit-separate
3503− (weld (check ~.types-record-field-edit-separate src-567 `tok-567 `tre-567) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-567 `typ-567))
3600+ (weld (check ~.types-record-field-edit-separate src-582 `tok-582 `tre-582) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-582 `typ-582))
35043601++ test-types-record-field-expr-duplicate
3505− (weld (check ~.types-record-field-expr-duplicate src-568 `tok-568 `tre-568) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-568 `typ-568))
3602+ (weld (check ~.types-record-field-expr-duplicate src-583 `tok-583 `tre-583) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-583 `typ-583))
35063603++ test-types-record-field-expr-separate
3507− (weld (check ~.types-record-field-expr-separate src-569 `tok-569 `tre-569) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-569 `typ-569))
3604+ (weld (check ~.types-record-field-expr-separate src-584 `tok-584 `tre-584) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-584 `typ-584))
35083605++ test-types-record-field-module-reachable
3509− (weld (weld (check ~.types-record-field-module-reachable src-570 `tok-570 `tre-570) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-570 `typ-570 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-570-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-570 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-570-1]]))
3606+ (weld (weld (check ~.types-record-field-module-reachable src-585 `tok-585 `tre-585) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-585 `typ-585 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-585-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-585 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-585-1]]))
35103607++ test-types-record-field-module-unused
3511− (weld (weld (check ~.types-record-field-module-unused src-571 `tok-571 `tre-571) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-571 `typ-571 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-571-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-571-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-571 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-571-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-571-2]]))
3608+ (weld (weld (check ~.types-record-field-module-unused src-586 `tok-586 `tre-586) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-586 `typ-586 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-586-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-586-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-586 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-586-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-586-2]]))
35123609++ test-types-record-field-nested-mold
3513− (weld (check ~.types-record-field-nested-mold src-572 `tok-572 `tre-572) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-572 `typ-572))
3610+ (weld (check ~.types-record-field-nested-mold src-587 `tok-587 `tre-587) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-587 `typ-587))
35143611++ test-types-record-field-outer-inner
3515− (weld (check ~.types-record-field-outer-inner src-573 `tok-573 `tre-573) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-573 `typ-573))
3612+ (weld (check ~.types-record-field-outer-inner src-588 `tok-588 `tre-588) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-588 `typ-588))
35163613++ test-types-record-field-sample-duplicate
3517− (weld (check ~.types-record-field-sample-duplicate src-574 `tok-574 `tre-574) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-574 `typ-574))
3614+ (weld (check ~.types-record-field-sample-duplicate src-589 `tok-589 `tre-589) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-589 `typ-589))
35183615++ test-types-record-field-separate-molds
3519− (weld (check ~.types-record-field-separate-molds src-575 `tok-575 `tre-575) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-575 `typ-575))
3616+ (weld (check ~.types-record-field-separate-molds src-590 `tok-590 `tre-590) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-590 `typ-590))
35203617++ test-types-record-field-unused-mold
3521− (weld (check ~.types-record-field-unused-mold src-576 `tok-576 `tre-576) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-576 `typ-576))
3618+ (weld (check ~.types-record-field-unused-mold src-591 `tok-591 `tre-591) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-591 `typ-591))
35223619++ test-types-record-import
3523− (weld (weld (check ~.types-record-import src-577 `tok-577 `tre-577) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-577 `typ-577 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-577-1]])) (check-module-trees ~.types-record-import `mtre-577 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-577-1]]))
3620+ (weld (weld (check ~.types-record-import src-592 `tok-592 `tre-592) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-592 `typ-592 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-592-1]])) (check-module-trees ~.types-record-import `mtre-592 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-592-1]]))
35243621++ test-types-record-local-scheme
3525− (weld (check ~.types-record-local-scheme src-578 `tok-578 `tre-578) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-578 `typ-578))
3622+ (weld (check ~.types-record-local-scheme src-593 `tok-593 `tre-593) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-593 `typ-593))
35263623++ test-types-record-nested
3527− (weld (check ~.types-record-nested src-579 `tok-579 `tre-579) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-579 `typ-579))
3624+ (weld (check ~.types-record-nested src-594 `tok-594 `tre-594) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-594 `typ-594))
35283625++ test-types-record-to-tuple
3529− (weld (check ~.types-record-to-tuple src-580 `tok-580 `tre-580) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-580 `typ-580))
3626+ (weld (check ~.types-record-to-tuple src-595 `tok-595 `tre-595) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-595 `typ-595))
35303627++ test-types-recursion-scc-failures
3531− (weld (check ~.types-recursion-scc-failures src-581 `tok-581 `tre-581) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-581 `typ-581 ~ ~ ~))
3628+ (weld (check ~.types-recursion-scc-failures src-596 `tok-596 `tre-596) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-596 `typ-596 ~ ~ ~))
35323629++ test-types-recursion-scc-groups
3533− (weld (check ~.types-recursion-scc-groups src-582 `tok-582 `tre-582) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-582 `typ-582 ~ ~ ~))
3630+ (weld (check ~.types-recursion-scc-groups src-597 `tok-597 `tre-597) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-597 `typ-597 ~ ~ ~))
35343631++ test-types-recursion-scc-import
3535− (weld (weld (check ~.types-recursion-scc-import src-583 `tok-583 `tre-583) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-583 `typ-583 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-583-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-583 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-583-1]]))
3632+ (weld (weld (check ~.types-recursion-scc-import src-598 `tok-598 `tre-598) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-598 `typ-598 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-598-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-598 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-598-1]]))
35363633++ test-types-recursion-scc-import-bad
3537− (weld (weld (check ~.types-recursion-scc-import-bad src-584 `tok-584 `tre-584) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-584 `typ-584 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-584-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-584 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-584-1]]))
3634+ (weld (weld (check ~.types-recursion-scc-import-bad src-599 `tok-599 `tre-599) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-599 `typ-599 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-599-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-599 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-599-1]]))
35383635++ test-types-recursion-scc-local
3539− (weld (check ~.types-recursion-scc-local src-585 `tok-585 `tre-585) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-585 `typ-585 ~ ~ ~))
3636+ (weld (check ~.types-recursion-scc-local src-600 `tok-600 `tre-600) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-600 `typ-600 ~ ~ ~))
35403637++ test-types-recursion-scc-order
3541− (weld (check ~.types-recursion-scc-order src-586 `tok-586 `tre-586) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-586 `typ-586 ~ ~ ~))
3638+ (weld (check ~.types-recursion-scc-order src-601 `tok-601 `tre-601) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-601 `typ-601 ~ ~ ~))
35423639++ test-types-recursion-scc-shadow
3543− (weld (check ~.types-recursion-scc-shadow src-587 `tok-587 `tre-587) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-587 `typ-587 ~ ~ ~))
3640+ (weld (check ~.types-recursion-scc-shadow src-602 `tok-602 `tre-602) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-602 `typ-602 ~ ~ ~))
35443641++ test-types-recursive-branch
3545− (weld (check ~.types-recursive-branch src-588 `tok-588 `tre-588) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-588 `typ-588 ~ ~ ~))
3642+ (weld (check ~.types-recursive-branch src-603 `tok-603 `tre-603) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-603 `typ-603 ~ ~ ~))
35463643++ test-types-recursive-gate
3547− (weld (check ~.types-recursive-gate src-589 `tok-589 `tre-589) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-589 `typ-589))
3644+ (weld (check ~.types-recursive-gate src-604 `tok-604 `tre-604) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-604 `typ-604))
35483645++ test-types-recursive-sample
3549− (weld (check ~.types-recursive-sample src-590 `tok-590 `tre-590) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-590 `typ-590))
3646+ (weld (check ~.types-recursive-sample src-605 `tok-605 `tre-605) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-605 `typ-605))
3647+++ test-types-request-normal
3648+ (weld (weld (check ~.types-request-normal src-606 `tok-606 `tre-606) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-606 `typ-606 ~ ~[[%full mark-606-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-606-1]])) (check-module-trees ~.types-request-normal `mtre-606 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-606-1]]))
35503649++ test-types-scope-library-poke
3551− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-591 `tok-591 `tre-591) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-591 `typ-591 ~ ~ ~))
3650+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-607 `tok-607 `tre-607) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-607 `typ-607 ~ ~ ~))
35523651++ test-types-scope-root-api
3553− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-592 `tok-592 `tre-592) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-592 `typ-592 ~ ~ ~))
3652+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-608 `tok-608 `tre-608) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-608 `typ-608 ~ ~ ~))
35543653++ test-types-scope-store-duplicate
3555− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-593 `tok-593 `tre-593) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-593 `typ-593 ~ ~ ~))
3654+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-609 `tok-609 `tre-609) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-609 `typ-609 ~ ~ ~))
35563655++ test-types-scope-store-shadow
3557− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-594 `tok-594 `tre-594) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-594 `typ-594 ~ ~ ~))
3656+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-610 `tok-610 `tre-610) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-610 `typ-610 ~ ~ ~))
35583657++ test-types-single-case-pattern
3559− (weld (check ~.types-single-case-pattern src-595 `tok-595 `tre-595) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-595 `typ-595 ~ ~ ~))
3658+ (weld (check ~.types-single-case-pattern src-611 `tok-611 `tre-611) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-611 `typ-611 ~ ~ ~))
35603659++ test-types-string-interpolation
3561− (weld (check ~.types-string-interpolation src-596 `tok-596 `tre-596) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-596 `typ-596 ~ ~ ~))
3660+ (weld (check ~.types-string-interpolation src-612 `tok-612 `tre-612) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-612 `typ-612 ~ ~ ~))
35623661++ test-types-tuple-context
3563− (weld (check ~.types-tuple-context src-597 `tok-597 `tre-597) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-597 `typ-597 ~ ~ ~))
3662+ (weld (check ~.types-tuple-context src-613 `tok-613 `tre-613) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-613 `typ-613 ~ ~ ~))
35643663++ test-types-tuple-context-nested
3565− (weld (check ~.types-tuple-context-nested src-598 `tok-598 `tre-598) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-598 `typ-598 ~ ~ ~))
3664+ (weld (check ~.types-tuple-context-nested src-614 `tok-614 `tre-614) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-614 `typ-614 ~ ~ ~))
35663665++ test-types-union-alias
3567− (weld (check ~.types-union-alias src-599 `tok-599 `tre-599) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-599 `typ-599))
3666+ (weld (check ~.types-union-alias src-615 `tok-615 `tre-615) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-615 `typ-615))
35683667++ test-types-union-branch-context
3569− (weld (check ~.types-union-branch-context src-600 `tok-600 `tre-600) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-600 `typ-600))
3668+ (weld (check ~.types-union-branch-context src-616 `tok-616 `tre-616) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-616 `typ-616))
35703669++ test-types-union-branch-pending
3571− (weld (check ~.types-union-branch-pending src-601 `tok-601 `tre-601) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-601 `typ-601))
3670+ (weld (check ~.types-union-branch-pending src-617 `tok-617 `tre-617) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-617 `typ-617))
35723671++ test-types-union-constructor-shape
3573− (weld (check ~.types-union-constructor-shape src-602 `tok-602 `tre-602) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-602 `typ-602))
3672+ (weld (check ~.types-union-constructor-shape src-618 `tok-618 `tre-618) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-618 `typ-618))
35743673++ test-types-union-context-flow
3575− (weld (check ~.types-union-context-flow src-603 `tok-603 `tre-603) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-603 `typ-603))
3674+ (weld (check ~.types-union-context-flow src-619 `tok-619 `tre-619) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-619 `typ-619))
35763675++ test-types-union-finite
3577− (weld (check ~.types-union-finite src-604 `tok-604 `tre-604) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-604 `typ-604 ~ ~ ~))
3676+ (weld (check ~.types-union-finite src-620 `tok-620 `tre-620) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-620 `typ-620 ~ ~ ~))
35783677++ test-types-union-finite-context
3579− (weld (check ~.types-union-finite-context src-605 `tok-605 `tre-605) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-605 `typ-605 ~ ~ ~))
3678+ (weld (check ~.types-union-finite-context src-621 `tok-621 `tre-621) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-621 `typ-621 ~ ~ ~))
35803679++ test-types-union-finite-generic
3581− (weld (check ~.types-union-finite-generic src-606 `tok-606 `tre-606) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-606 `typ-606 ~ ~ ~))
3680+ (weld (check ~.types-union-finite-generic src-622 `tok-622 `tre-622) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-622 `typ-622 ~ ~ ~))
35823681++ test-types-union-finite-limit
3583− (weld (check ~.types-union-finite-limit src-607 `tok-607 `tre-607) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-607 `typ-607 ~ ~ ~))
3682+ (weld (check ~.types-union-finite-limit src-623 `tok-623 `tre-623) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-623 `typ-623 ~ ~ ~))
35843683++ test-types-union-import
3585− (weld (weld (check ~.types-union-import src-608 `tok-608 `tre-608) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-608 `typ-608 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-608-1]])) (check-module-trees ~.types-union-import `mtre-608 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-608-1]]))
3684+ (weld (weld (check ~.types-union-import src-624 `tok-624 `tre-624) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-624 `typ-624 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-624-1]])) (check-module-trees ~.types-union-import `mtre-624 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-624-1]]))
35863685++ test-types-union-local-pending
3587− (weld (check ~.types-union-local-pending src-609 `tok-609 `tre-609) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-609 `typ-609))
3686+ (weld (check ~.types-union-local-pending src-625 `tok-625 `tre-625) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-625 `typ-625))
35883687++ test-types-union-nonwing-subject
3589− (weld (check ~.types-union-nonwing-subject src-610 `tok-610 `tre-610) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-610 `typ-610 ~ ~ ~))
3688+ (weld (check ~.types-union-nonwing-subject src-626 `tok-626 `tre-626) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-626 `typ-626 ~ ~ ~))
35903689++ test-types-union-overlap
3591− (weld (check ~.types-union-overlap src-611 `tok-611 `tre-611) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-611 `typ-611))
3690+ (weld (check ~.types-union-overlap src-627 `tok-627 `tre-627) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-627 `typ-627))
35923691++ test-types-union-overlap-nested
3593− (weld (check ~.types-union-overlap-nested src-612 `tok-612 `tre-612) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-612 `typ-612))
3692+ (weld (check ~.types-union-overlap-nested src-628 `tok-628 `tre-628) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-628 `typ-628))
35943693++ test-types-union-pattern-result-context
3595− (weld (check ~.types-union-pattern-result-context src-613 `tok-613 `tre-613) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-613 `typ-613 ~ ~ ~))
3694+ (weld (check ~.types-union-pattern-result-context src-629 `tok-629 `tre-629) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-629 `typ-629 ~ ~ ~))
35963695++ test-types-union-pattern-result-controls
3597− (weld (check ~.types-union-pattern-result-controls src-614 `tok-614 `tre-614) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-614 `typ-614 ~ ~ ~))
3696+ (weld (check ~.types-union-pattern-result-controls src-630 `tok-630 `tre-630) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-630 `typ-630 ~ ~ ~))
35983697++ test-types-union-patterns
3599− (weld (check ~.types-union-patterns src-615 `tok-615 `tre-615) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-615 `typ-615 ~ ~ ~))
3698+ (weld (check ~.types-union-patterns src-631 `tok-631 `tre-631) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-631 `typ-631 ~ ~ ~))
36003699++ test-types-union-patterns-generic
3601− (weld (check ~.types-union-patterns-generic src-616 `tok-616 `tre-616) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-616 `typ-616 ~ ~ ~))
3700+ (weld (check ~.types-union-patterns-generic src-632 `tok-632 `tre-632) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-632 `typ-632 ~ ~ ~))
36023701++ test-types-union-patterns-import
3603− (weld (weld (check ~.types-union-patterns-import src-617 `tok-617 `tre-617) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-617 `typ-617 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-617-1]])) (check-module-trees ~.types-union-patterns-import `mtre-617 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-617-1]]))
3702+ (weld (weld (check ~.types-union-patterns-import src-633 `tok-633 `tre-633) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-633 `typ-633 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-633-1]])) (check-module-trees ~.types-union-patterns-import `mtre-633 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-633-1]]))
36043703++ test-types-union-phantom-generic
3605− (weld (check ~.types-union-phantom-generic src-618 `tok-618 `tre-618) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-618 `typ-618))
3704+ (weld (check ~.types-union-phantom-generic src-634 `tok-634 `tre-634) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-634 `typ-634))
36063705++ test-types-union-polymorphic-identity
3607− (weld (weld (check ~.types-union-polymorphic-identity src-619 `tok-619 `tre-619) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-619 `typ-619 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-619-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-619-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-619 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-619-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-619-2]]))
3706+ (weld (weld (check ~.types-union-polymorphic-identity src-635 `tok-635 `tre-635) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-635 `typ-635 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-635-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-635-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-635 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-635-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-635-2]]))
36083707++ test-types-union-print-cross-namespace
3609− (weld (weld (check ~.types-union-print-cross-namespace src-620 `tok-620 `tre-620) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-620 `typ-620 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-620-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-620 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-620-1]]))
3708+ (weld (weld (check ~.types-union-print-cross-namespace src-636 `tok-636 `tre-636) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-636 `typ-636 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-636-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-636 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-636-1]]))
36103709++ test-types-union-print-distinct
3611− (weld (weld (check ~.types-union-print-distinct src-621 `tok-621 `tre-621) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-621 `typ-621 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-621-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-621-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-621-3]])) (check-module-trees ~.types-union-print-distinct `mtre-621 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-621-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-621-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-621-3]]))
3710+ (weld (weld (check ~.types-union-print-distinct src-637 `tok-637 `tre-637) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-637 `typ-637 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-637-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-637-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-637-3]])) (check-module-trees ~.types-union-print-distinct `mtre-637 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-637-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-637-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-637-3]]))
36123711++ test-types-union-print-escape
3613− (weld (check ~.types-union-print-escape src-622 `tok-622 `tre-622) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-622 `typ-622))
3712+ (weld (check ~.types-union-print-escape src-638 `tok-638 `tre-638) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-638 `typ-638))
36143713++ test-types-union-print-local
3615− (weld (check ~.types-union-print-local src-623 `tok-623 `tre-623) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-623 `typ-623))
3714+ (weld (check ~.types-union-print-local src-639 `tok-639 `tre-639) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-639 `typ-639))
36163715++ test-types-union-print-nested
3617− (weld (check ~.types-union-print-nested src-624 `tok-624 `tre-624) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-624 `typ-624))
3716+ (weld (check ~.types-union-print-nested src-640 `tok-640 `tre-640) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-640 `typ-640))
36183717++ test-types-union-print-same-origin
3619− (weld (weld (check ~.types-union-print-same-origin src-625 `tok-625 `tre-625) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-625 `typ-625 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-625-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-625 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-625-1]]))
3718+ (weld (weld (check ~.types-union-print-same-origin src-641 `tok-641 `tre-641) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-641 `typ-641 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-641-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-641 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-641-1]]))
36203719++ test-types-union-print-transitive
3621− (weld (weld (check ~.types-union-print-transitive src-626 `tok-626 `tre-626) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-626 `typ-626 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-626-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-626-2]])) (check-module-trees ~.types-union-print-transitive `mtre-626 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-626-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-626-2]]))
3720+ (weld (weld (check ~.types-union-print-transitive src-642 `tok-642 `tre-642) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-642 `typ-642 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-642-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-642-2]])) (check-module-trees ~.types-union-print-transitive `mtre-642 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-642-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-642-2]]))
36223721++ test-types-union-singleton
3623− (weld (check ~.types-union-singleton src-627 `tok-627 `tre-627) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-627 `typ-627))
3722+ (weld (check ~.types-union-singleton src-643 `tok-643 `tre-643) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-643 `typ-643))
36243723++ test-types-union-tag-atoms
3625− (weld (check ~.types-union-tag-atoms src-628 `tok-628 `tre-628) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-628 `typ-628))
3724+ (weld (check ~.types-union-tag-atoms src-644 `tok-644 `tre-644) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-644 `typ-644))
36263725++ test-types-union-tags
3627− (weld (check ~.types-union-tags src-629 `tok-629 `tre-629) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-629 `typ-629))
3726+ (weld (check ~.types-union-tags src-645 `tok-645 `tre-645) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-645 `typ-645))
36283727++ test-types-union-unresolved
3629− (weld (check ~.types-union-unresolved src-630 `tok-630 `tre-630) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-630 `typ-630))
3728+ (weld (check ~.types-union-unresolved src-646 `tok-646 `tre-646) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-646 `typ-646))
36303729++ test-types-union-unresolved-flow
3631− (weld (check ~.types-union-unresolved-flow src-631 `tok-631 `tre-631) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-631 `typ-631))
3730+ (weld (check ~.types-union-unresolved-flow src-647 `tok-647 `tre-647) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-647 `typ-647))
36323731++ test-types-unit-construction
3633− (weld (check ~.types-unit-construction src-632 `tok-632 `tre-632) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-632 `typ-632 ~ ~ ~))
3732+ (weld (check ~.types-unit-construction src-648 `tok-648 `tre-648) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-648 `typ-648 ~ ~ ~))
36343733++ test-types-unit-context
3635− (weld (check ~.types-unit-context src-633 `tok-633 `tre-633) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-633 `typ-633 ~ ~ ~))
3734+ (weld (check ~.types-unit-context src-649 `tok-649 `tre-649) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-649 `typ-649 ~ ~ ~))
36363735++ test-types-unit-patterns
3637− (weld (check ~.types-unit-patterns src-634 `tok-634 `tre-634) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-634 `typ-634))
3736+ (weld (check ~.types-unit-patterns src-650 `tok-650 `tre-650) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-650 `typ-650))
36383737++ test-types-value-cycle-shadow
3639− (weld (check ~.types-value-cycle-shadow src-635 `tok-635 `tre-635) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-635 `typ-635 ~ ~ ~))
3738+ (weld (check ~.types-value-cycle-shadow src-651 `tok-651 `tre-651) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-651 `typ-651 ~ ~ ~))
36403739++ test-types-value-cycle-unsupported
3641− (weld (check ~.types-value-cycle-unsupported src-636 `tok-636 `tre-636) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-636 `typ-636 ~ ~ ~))
3740+ (weld (check ~.types-value-cycle-unsupported src-652 `tok-652 `tre-652) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-652 `typ-652 ~ ~ ~))
36423741++ test-types-value-cycles
3643− (weld (check ~.types-value-cycles src-637 `tok-637 `tre-637) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-637 `typ-637 ~ ~ ~))
3742+ (weld (check ~.types-value-cycles src-653 `tok-653 `tre-653) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-653 `typ-653 ~ ~ ~))
36443743::
36453744:: +check: run golden:jibb on a case and compare both outputs
36463745::
tests/type-direct-gate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: “A body can't force two distinct capitals to be equal; use the same capital wherever a type must be shared.”
2+tests: A source-backed test prelude with a deliberately synthetic element and program exercises direct named and unnamed higher-order gates, record-valued models, nested field faces, incompatible samples, shared and distinct capitals, pending tags, aliases, captured and distinct capitals, equal-flattened source layouts, and projection-bearing bodies. It does not establish an island kind, runtime representation, or watchability.
3+expect: parses
4+expect-types: a partial inference report
tests/type-direct-gate/expected.txtnew file+86
@@ -0,0 +1,86 @@
1+partial inference; module not checked
2++$ message: cases proven disjoint; mold not checked
3+++ init: $-(@t @ud)
4+++ update: $-([msg=message state=@ud] [@ud (list (cmd message))])
5+++ view: $-(@ud [%node item=message])
6+++ subs: $-(@ud (list (sub message)))
7+++ direct: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
8+++ wrong-init: $-(@p @ud)
9+++ different-data: [init=$-(@p @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
10+++ wrong-update: $-([msg=message state=@p] [@p (list (cmd message))])
11+++ mismatched-model: call constraint is not supported by partial inference
12+++ wrong-view: $-(@p [%node item=message])
13+++ mismatched-view: call constraint is not supported by partial inference
14+++ wrong-subs: $-(@p (list (sub message)))
15+++ mismatched-subs: call constraint is not supported by partial inference
16++$ other: cases proven disjoint; mold not checked
17+++ wrong-msg-update: $-([msg=other state=@ud] [@ud (list (cmd other))])
18+++ mismatched-message: call constraint is not supported by partial inference
19+++ pending: tag needs context in partial inference
20+++ program-value: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]])
21+++ update-unfaced: $-([message @ud] [@ud (list (cmd message))])
22+++ direct-unfaced: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
23++$ record: not checked
24+++ init-record: $-(@t [count=@ud label=@t])
25+++ update-record: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
26+++ update-record-unfaced: $-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
27+++ view-record: $-([count=@ud label=@t] [%node item=message])
28+++ subs-record: $-([count=@ud label=@t] (list (sub message)))
29+++ program-record: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
30+++ program-record-unfaced: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
31+++ bad-update-record: $-([msg=message state=[other=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
32+++ program-wrong-nested-face: call constraint is not supported by partial inference
33+++ update-pending: tag needs context in partial inference
34+++ program-pending: name is not available to partial inference
35+++ update-proj: $-([msg=message state=[count=@ud [label=@t extra=?]]] [[count=@ud label=@t] (list (cmd message))])
36+++ pass-fn: $-($-([A B] C) $-([A B] C))
37+++ pass-named: $-([msg=message state=@ud] [@ud (list (cmd message))])
38+++ pass-unnamed: $-([message @ud] [@ud (list (cmd message))])
39+++ forced-same: $-($-([A A] @t) $-([A A] @t))
40+++ forced-distinct: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
41+/tests/sub/client.jibb:55:29: first type variable
42+++ forced-distinct |= f=$-([A B] @t) (forced-same f)
43+ ^
44+/tests/sub/client.jibb:55:31: second type variable
45+++ forced-distinct |= f=$-([A B] @t) (forced-same f)
46+ ^
47+++ known-label: $-($-([left=@t right=@p] @ud) $-([left=@t right=@p] @ud))
48+++ matching-label: $-([left=@t right=@p] @ud)
49+++ different-label: $-([x=@t y=@p] @ud)
50+++ match-label: $-([left=@t right=@p] @ud)
51+++ mismatch-label: call's sample and argument types do not unify
52+/tests/sub/client.jibb:60:20: called gate has type $-($-([left=@t right=@p] @ud) $-([left=@t right=@p] @ud))
53+++ mismatch-label (known-label different-label)
54+ ^
55+/tests/sub/client.jibb:60:32: argument has type $-([x=@t y=@p] @ud)
56+++ mismatch-label (known-label different-label)
57+ ^
58+++ unknown-call: $-($-([A B] C) $-([A B] C))
59+++ update-proj-good: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
60+++ program-projection: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
61+++ program-alias: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]])
62+++ through-head-alias: call constraint is not supported by partial inference
63+++ update-alias: $-([msg=message state=@ud] [@ud (list (cmd message))])
64+++ through-arg-alias: call constraint is not supported by partial inference
65+++ select-update: branch tag or union context is not supported by partial inference
66+++ through-branch: name is not available to partial inference
67+++ local-shadow: sample shadows a name
68+++ nested-layout: $-([a=@t [x=@t y=@p]] @t)
69+++ flat-layout: $-([a=@t [x=@t y=@p]] @t)
70+++ nested-accept: call constraint is not supported by partial inference
71+++ flat-accept: call constraint is not supported by partial inference
72+++ higher-nested: $-([@t [x=@t y=@p]] @t)
73+++ higher-flat: $-([@t [x=@t y=@p]] @t)
74+++ nested-ret: $-([a=@t [x=@t y=@p]] [x=@t y=@p])
75+++ flat-ret: $-([a=@t [x=@t y=@p]] [x=@t y=@p])
76+++ higher-generic-nested: [x=@t y=@p]
77+++ higher-generic-flat: call constraint is not supported by partial inference
78+++ global-id: $-(A A)
79+++ capture-good: $-([a=@t state=A] A)
80+++ capture-text: @t
81+++ capture-ship: @p
82+++ capture-bad: $-([a=A state=B] A)
83+++ capture-distinct: call constraint is not supported by partial inference
84+++ capture-caller: call constraint is not supported by partial inference
85+++ capture-local: call constraint is not supported by partial inference
86+++ capture-distinct-caller: call constraint is not supported by partial inference
tests/type-direct-gate/source.txtnew file+96
@@ -0,0 +1,96 @@
1++$ message
2+ %start
3+ %stop
4+++ init |= input=@t ^- @ud 1
5+++ update |= [msg=message state=@ud]
6+ ^- [@ud (list (cmd message))] [state ~]
7+++ view |= state=@ud ^- (element message) [%node %start]
8+++ subs |= state=@ud ^- (list (sub message)) ~
9+++ direct (program init update view subs)
10+++ wrong-init |= input=@p ^- @ud 1
11+++ different-data (program wrong-init update view subs)
12+++ wrong-update |= [msg=message state=@p]
13+ ^- [@p (list (cmd message))] [state ~]
14+++ mismatched-model (program init wrong-update view subs)
15+++ wrong-view |= state=@p ^- (element message) [%node %start]
16+++ mismatched-view (program init update wrong-view subs)
17+++ wrong-subs |= state=@p ^- (list (sub message)) ~
18+++ mismatched-subs (program init update view wrong-subs)
19++$ other
20+ %start
21+ %stop
22+++ wrong-msg-update |= [msg=other state=@ud]
23+ ^- [@ud (list (cmd other))] [state ~]
24+++ mismatched-message (program init wrong-msg-update view subs)
25+++ pending
26+ ~& %unrelated
27+ (program init update view subs)
28+++ program-value program
29+++ update-unfaced |= input=[message @ud]
30+ ^- [@ud (list (cmd message))] [0 ~]
31+++ direct-unfaced (program init update-unfaced view subs)
32++$ record [count=@ud label=@t]
33+++ init-record |= input=@t ^- record [count=0 label=input]
34+++ update-record |= [msg=message state=record]
35+ ^- [record (list (cmd message))] [state ~]
36+++ update-record-unfaced |= args=[message record]
37+ ^- [record (list (cmd message))] [[count=0 label=""] ~]
38+++ view-record |= state=record ^- (element message) [%node %start]
39+++ subs-record |= state=record ^- (list (sub message)) ~
40+++ program-record (program init-record update-record view-record subs-record)
41+++ program-record-unfaced (program init-record update-record-unfaced view-record subs-record)
42+++ bad-update-record |= [msg=message state=[other=@ud label=@t]]
43+ ^- [record (list (cmd message))] [[count=0 label=""] ~]
44+++ program-wrong-nested-face (program init-record bad-update-record view-record subs-record)
45+++ update-pending |= [msg=message state=record]
46+ ~& %orphan
47+ ^- [record (list (cmd message))] [state ~]
48+++ program-pending (program init-record update-pending view-record subs-record)
49+++ update-proj |= [msg=message state=[count=@ud label=@t extra=?]]
50+ ^- [record (list (cmd message))] [(proj state) ~]
51+++ pass-fn |= f=$-([A B] C) f
52+++ pass-named (pass-fn update)
53+++ pass-unnamed (pass-fn update-unfaced)
54+++ forced-same |= f=$-([A A] @t) f
55+++ forced-distinct |= f=$-([A B] @t) (forced-same f)
56+++ known-label |= f=$-([left=@t right=@p] @ud) f
57+++ matching-label |= [left=@t right=@p] ^- @ud 0
58+++ different-label |= [x=@t y=@p] ^- @ud 0
59+++ match-label (known-label matching-label)
60+++ mismatch-label (known-label different-label)
61+++ unknown-call |= f (pass-fn f)
62+++ update-proj-good |= [msg=message state=record]
63+ ^- [record (list (cmd message))]
64+ [(proj [count=0 label="projected" extra=%.y]) ~]
65+++ program-projection (program init-record update-proj-good view-record subs-record)
66+++ program-alias program
67+++ through-head-alias (program-alias init update view subs)
68+++ update-alias update
69+++ through-arg-alias (program init update-alias view subs)
70+++ select-update |= flag=?
71+ ?- flag
72+ %.y update
73+ %.n update-unfaced
74+++ through-branch (program init (select-update %.y) view subs)
75+++ local-shadow |= update (program init update view subs)
76+++ nested-layout |= [a=@t [x=@t y=@p]] a
77+++ flat-layout |= [a=@t x=@t y=@p] a
78+++ nested-accept (choose-layout nested-layout ["first" ["second" ~zod]])
79+++ flat-accept (choose-layout flat-layout ["first" ["second" ~zod]])
80+++ higher-nested (higher nested-layout %.y)
81+++ higher-flat (higher flat-layout %.y)
82+++ nested-ret |= [a=@t [x=@t y=@p]] [x=x y=y]
83+++ flat-ret |= [a=@t x=@t y=@p] [x=x y=y]
84+++ higher-generic-nested (higher-generic nested-ret [x="two" y=~zod])
85+++ higher-generic-flat (higher-generic flat-ret [x="two" y=~zod])
86+++ global-id |= x=A x
87+++ capture-good |= [a=@t state=A] (global-id state)
88+++ capture-text (higher-generic capture-good "hello")
89+++ capture-ship (higher-generic capture-good ~zod)
90+++ capture-bad |= [a=A state=B] (global-id a)
91+++ capture-distinct (higher-generic capture-bad ~zod)
92+++ capture-caller |= value=A (higher-generic capture-good value)
93+++ capture-local |= value=A
94+ ++ local-function |= [a=@t state=A] value
95+ (higher-generic local-function value)
96+++ capture-distinct-caller |= [left=A right=B] ^- B (higher-generic capture-good left)
tests/type-gate-free/about.txtnew file+1
@@ -0,0 +1 @@
1+The unchanged todo island source is used only to resolve its model mold through the actual todo API, /sur and mark readers. The eval runner verifies its copy matches the application source. Controls also add a callback or noun field and exercise unavailable, malformed and ambiguous input. This is partial mold analysis only: no complete module, island kind, runtime or watchability claim is made.
tests/type-gate-free/expected.txtnew file+9
@@ -0,0 +1,9 @@
1+todo model: gate-free
2+callback model: gate at callback
3+noun model: unknown
4+zero fuel: unknown
5+oversized fuel: capped
6+invalid inputs: rejected
7+source evidence: retained
8+matching root and unused sur: accepted
9+root import cycle: rejected
tests/type-gate-free/todo-gate.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t) callback=$-(@t @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-gate-free/todo-noun.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t) opaque=*]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-gate-free/todo.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-generic-construction/about.txtnew file+9
@@ -0,0 +1,9 @@
1+source: docs/spec/grammar.md:57,135 — “Molds may be recursive”; “recursive molds go by name and module”.
2+
3+This shared eval/ship fixture checks a narrow source-proven tree construction
4+slice. It exercises both recognized source shapes, type arguments and aliases,
5+nominal origins, contextual field and payload constraints, shared fuel, and
6+unrelated pending state. The source reports are explicitly partial; a separate
7+owner check requires the entire library to succeed before interface export.
8+The view and substitution scan limits do not bound all inference or retries.
9+No runtime lowering, watchability, island acceptance or backend claim is made.
tests/type-generic-construction/alias-client.txtnew file+12
@@ -0,0 +1,12 @@
1+/= first /ui/tree
2+/= again /ui/tree
3+/= second /ui/tree-two
4+/= via /ui/tree-alias
5+++ text-event |= x=@t x
6+++ ship-event |= x=@t ~zod
7+++ via-leaf ^- (alias.via @t) [%text value="x"]
8+++ via-node ^- (alias.via @p) [%node event=ship-event children=~]
9+++ cross-alias |= x=(alias.via @t) ^- (element.first @t) [%node event=text-event children=~[x]]
10+++ cross-owner |= x=(element.again @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
11+++ wrong-owner |= x=(element.second @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
12+++ wrong-arg |= x=(alias.via @p) ^- (element.first @t) [%node event=text-event children=~[x]]
tests/type-generic-construction/alias.txtnew file+3
@@ -0,0 +1,3 @@
1+/= source /ui/tree
2++$ alias |$ [A] (element.source A)
3+++ identity |= x=(alias A) x
tests/type-generic-construction/client.txtnew file+24
@@ -0,0 +1,24 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+++ text-event |= value=@t value
4+++ ship-event |= value=@t ~zod
5+++ leaf ^- (element.first @t) [%text value="hi"]
6+++ ship-leaf ^- (element.first @p) [%text value="hi"]
7+++ node ^- (element.first @t) [%node event=text-event children=~]
8+++ ship-node ^- (element.first @p) [%node event=ship-event children=~]
9+++ nested ^- (element.first @t) [%node event=text-event children=~[[%text value="x"]]]
10+++ wrong-event ^- (element.first @p) [%node event=text-event children=~]
11+++ wrong-leaf ^- (element.first @t) [%text value=~zod]
12+++ wrong-label ^- (element.first @t) [%text other="hi"]
13+++ bad-tag ^- (element.first @t) [%missing value="hi"]
14+++ foreign |= x=(element.second @t) ^- (element.first @t) [%node event=text-event children=~[x]]
15+++ generic |= event=$-(@t A) ^- (element.first A) [%node event=event children=~]
16+++ pending |= x=(element.first @t) [%missing x]
17+++ extra ^- (element.first @t) [%text value="hi" extra="bad"]
18+++ misplaced ^- (element.first @t) [%text value=~zod]
19+++ bad-child ^- (element.first @t) [%node event=text-event children=~["bad"]]
20+++ bad-children ^- (element.first @t) [%node event=text-event children="bad"]
21+++ label-swap ^- (element.first @t) [%node children=~ event=text-event]
22+++ wrong-nominal |= child=(element.second @p) ^- (element.first @t) [%node event=text-event children=~[child]]
23+++ wrong-argument |= child=(element.first @p) ^- (element.first @t) [%node event=text-event children=~[child]]
24+++ keep-generic |= f=$-(@t A) ^- (element.first A) [%node event=f children=~[[%text value="x"]]]
tests/type-generic-construction/expected.txtnew file+65
@@ -0,0 +1,65 @@
1+complete owner: ok
2+owner exports constructed nominal values: ok
3+invalid owner declined: ok
4+view spends one step: ok
5+view retains argument and child identity: ok
6+zero view fuel declined: ok
7+malformed proof declined: ok
8+foreign recursive tail retained: ok
9+zero inference fuel declined: ok
10+one-step leaf retains nominal identity: ok
11+one-step node succeeds: ok
12+nested one-step declined: ok
13+nested two-step succeeds: ok
14+siblings share fuel: ok
15+same-state retry agrees: ok
16+failed retry agrees: ok
17+argument binding retains source identity: ok
18+pending tag retained: ok
19+pending hole retained: ok
20+projection evidence retained: ok
21+hidden variable declined: ok
22+scan exact limit: ok
23+scan over limit declined: ok
24+faced scan exact limit: ok
25+faced scan over limit declined: ok
26+structural substitution declined: ok
27+partial inference; module not checked
28+++ text-event: $-(@t @t)
29+++ ship-event: $-(@t @p)
30+++ leaf: (element.first @t)
31+++ ship-leaf: (element.first @p)
32+++ node: (element.first @t)
33+++ ship-node: (element.first @p)
34+++ nested: (element.first @t)
35+++ wrong-event: recursive mold case does not fit its source shape
36+++ wrong-leaf: recursive mold case does not fit its source shape
37+++ wrong-label: recursive mold case does not fit its source shape
38+++ bad-tag: recursive mold constructor has no matching case
39+++ foreign: list item constraint is not supported by partial inference
40+++ generic: $-($-(@t A) (element.first A))
41+++ pending: tag needs context in partial inference
42+++ extra: recursive mold case does not fit its source shape
43+++ misplaced: recursive mold case does not fit its source shape
44+++ bad-child: list item constraint is not supported by partial inference
45+++ bad-children: recursive mold case needs unsupported inference
46+++ label-swap: recursive mold case does not fit its source shape
47+++ wrong-nominal: list item constraint is not supported by partial inference
48+++ wrong-argument: list item constraint is not supported by partial inference
49+++ keep-generic: $-($-(@t A) (element.first A))
50+partial inference; module not checked
51+++ text-event: $-(@t @t)
52+++ ship-event: $-(@t @p)
53+++ via-leaf: (alias.via @t)
54+++ via-node: (alias.via @p)
55+++ cross-alias: $-((alias.via @t) (element.first @t))
56+++ cross-owner: $-((element.again @t) (alias.via @t))
57+++ wrong-owner: list item constraint is not supported by partial inference
58+++ wrong-arg: list item constraint is not supported by partial inference
59+partial inference; module not checked
60+++ leaf: (element.first @t)
61+++ node: (element.first @p)
62+++ nested: (element.first @t)
63+++ generic: $-(A (element.first A))
64+++ wrong-owner: list item constraint is not supported by partial inference
65+++ wrong-field: recursive mold case needs unsupported inference
tests/type-generic-construction/no-event-client.txtnew file+8
@@ -0,0 +1,8 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+++ leaf ^- (element.first @t) [%text value="x"]
4+++ node ^- (element.first @p) [%node children=~]
5+++ nested ^- (element.first @t) [%node children=~[[%text value="x"]]]
6+++ generic |= x=A ^- (element.first A) [%node children=~]
7+++ wrong-owner |= x=(element.second @t) ^- (element.first @t) [%node children=~[x]]
8+++ wrong-field ^- (element.first @t) [%node children="x"]
tests/type-generic-construction/owner-negative.txtnew file+10
@@ -0,0 +1,10 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ text-event |= x=@t x
8+++ made-leaf ^- (element @t) [%text value="x"]
9+++ made-node ^- (element @t) [%node event=text-event children=~[[%text value="x"]]]
10+++ invalid ^- (element @t) [%text value=~zod]
tests/type-generic-construction/owner-positive.txtnew file+9
@@ -0,0 +1,9 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ text-event |= x=@t x
8+++ made-leaf ^- (element @t) [%text value="x"]
9+++ made-node ^- (element @t) [%node event=text-event children=~[[%text value="x"]]]
tests/type-generic-construction/sibling-values.txtnew file+4
@@ -0,0 +1,4 @@
1+++ leaf [%text value="x"]
2+++ node [%node event=text-event children=~]
3+++ nested [%node event=text-event children=~[[%text value="x"]]]
4+++ siblings [%node event=text-event children=~[[%text value="x"] [%text value="y"]]]
tests/type-generic-construction/tree-no-event.txtnew file+4
@@ -0,0 +1,4 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node children=(list (element M))]
4+++ generic-id |= x=(element A) x
tests/type-generic-construction/tree.txtnew file+6
@@ -0,0 +1,6 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
tests/type-generic-pattern/about.txtnew file+8
@@ -0,0 +1,8 @@
1+source: docs/spec/grammar.md:57,135 — “Molds may be recursive”; “recursive molds go by name and module”.
2+
3+This shared eval/ship fixture checks a narrow source-proven recursive tree
4+pattern slice, including explicit tags, binder scopes, payload arguments,
5+recursive children, aliases, coverage failures and shared fuel. The source client reports are explicitly partial. A separate owner check requires
6+all ordinary definitions to succeed before interface export. Whole-case
7+binders, nested patterns and unresolved recursive origins remain unsupported.
8+No runtime lowering, watchability, island acceptance or backend claim is made.
tests/type-generic-pattern/client.txtnew file+114
@@ -0,0 +1,114 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+/= via /ui/tree-alias
4+++ describe |= x=(element.first @t)
5+ ?- x
6+ [%text value] value
7+ [%node event children] (event "click")
8+++ reverse |= x=(element.first @p)
9+ ?- x
10+ [%node event children] (event "click")
11+ [%text value] ~zod
12+++ generic-children |= x=(element.first A)
13+ ^- (list (element.first A)) ?- x
14+ [%text value] ~
15+ [%node event kids] kids
16+++ alias-children |= x=(alias.via @p)
17+ ^- (list (element.first @p)) ?- x
18+ [%text value] ~
19+ [%node event kids] kids
20+++ rebuild |= x=(element.first @t)
21+ ^- (element.first @t) ?- x
22+ [%text value] [%text value=value]
23+ [%node event children] [%node event=event children=children]
24+++ wrong-return |= x=(element.first @t)
25+ ?- x
26+ [%text value] value
27+ [%node event kids] ~zod
28+++ duplicate |= x=(element.first @t)
29+ ?- x
30+ [%text a] a
31+ [%text b] b
32+++ missing |= x=(element.first @t)
33+ ?- x
34+ [%text a] a
35+++ shadow |= x=(element.first @t)
36+ ?- x
37+ [%text x] x
38+ [%node event kids] "node"
39+++ bad-tag |= x=(element.first @t)
40+ ?- x
41+ [%text value] value
42+ [%other event kids] "node"
43+++ whole-tail |= x=(element.first @t)
44+ ?- x
45+ [%text value] value
46+ [%node payload] payload
47+++ unknown |= x
48+ ?- x
49+ [%text value] value
50+ [%node event kids] "node"
51+++ pending |= x=(element.first @t)
52+ ?- x
53+ [%text value] [%unrelated value]
54+ [%node event kids] [%unrelated "node"]
55+++ dead |= x=(element.first @t)
56+ ?- x
57+ [%text a] a
58+ [%node event kids] (event "ok")
59+ [%text b] b
60+++ wild |= x=(element.first @t)
61+ ?- x
62+ [%text *] "text"
63+ [%node * *] "node"
64+++ whole-wild |= x=(element.first @t)
65+ ?- x
66+ [%text value] value
67+ * "other"
68+++ foreign-children |= x=(element.first @t)
69+ ^- (list (element.second @t)) ?- x
70+ [%text value] ~
71+ [%node event kids] kids
72+++ wrong-argument |= x=(element.first @t)
73+ ^- (list (element.first @p)) ?- x
74+ [%text value] ~
75+ [%node event kids] kids
76+++ nested-child |= x=(element.first @t)
77+ ?- x
78+ [%text value] value
79+ [%node event kids] ?- kids
80+ ~ "empty"
81+ [item remainder] ?- item
82+ [%text value] value
83+ [%node action rest] (action "click")
84+++ duplicate-binder |= x=(element.first @t)
85+ ?- x
86+ [%text value] value
87+ [%node event event] "node"
88+++ target-shadow |= x=(element.first @t)
89+ ?- x
90+ [%text value] value
91+ [%node event x] "node"
92+++ grouped |= x=(element.first @t)
93+ ?- (x)
94+ [%text value] value
95+ [%node event kids] (event "click")
96+++ called |= x=(element.first @t)
97+ ?- (generic-id.first x)
98+ [%text value] value
99+ [%node event kids] (event "click")
100+++ missing-context |= x=(element.first @t)
101+ ^- @t ?- x
102+ [%text item] item
103+++ missing-node |= x=(element.first @t)
104+ ?- x
105+ [%node action kids] (action "click")
106+++ single-wild |= x=(element.first @t)
107+ ?- x
108+ * "all"
109+++ single-bind |= x=(element.first @t)
110+ ?- x
111+ all all
112+++ polymorphic-source ^- (element.first A) [%text value="source"]
113+++ polymorphic-match ?- polymorphic-source
114+ [%text text] text
tests/type-generic-pattern/expected.txtnew file+55
@@ -0,0 +1,55 @@
1+owner describe has nominal sample and text result: ok
2+owner rebuild preserves nominal identity: ok
3+owner children preserves quantified recursive identity: ok
4+invalid owner parses and is rejected: ok
5+zero fuel declined: ok
6+one-step match: ok
7+nested match requires two steps: ok
8+same-state retry agrees: ok
9+pending tag retained: ok
10+pending hole retained: ok
11+projection evidence retained: ok
12+raw bound variable declined: ok
13+polymorphic scheme gets fresh identities: ok
14+polymorphic missing arm declined: ok
15+partial inference; module not checked
16+++ describe: $-((element.first @t) @t)
17+++ reverse: $-((element.first @p) @p)
18+++ generic-children: $-((element.first A) (list (element.first A)))
19+++ alias-children: $-((alias.via @p) (list (element.first @p)))
20+++ rebuild: $-((element.first @t) (element.first @t))
21+++ wrong-return: union branch result matching needs unsupported inference
22+++ duplicate: branch arm is covered by earlier arms
23+/tests/tree/client.jibb:31:5: covered arm
24+ [%text b] b
25+ ^
26+++ missing: missing union case [%node [event=$-(@t @t) children=(list (element.first @t))]]
27+++ shadow: pattern binder shadows a name
28+++ bad-tag: branch is not supported by partial inference
29+++ whole-tail: branch is not supported by partial inference
30+++ unknown: branch is not supported by partial inference
31+++ pending: union branch result matching needs unsupported inference
32+++ dead: branch is not supported by partial inference
33+++ wild: $-((element.first @t) @t)
34+++ whole-wild: branch is not supported by partial inference
35+++ foreign-children: union branch result constraint is not supported by partial inference
36+++ wrong-argument: union branch result constraint is not supported by partial inference
37+++ nested-child: $-((element.first @t) @t)
38+++ duplicate-binder: pattern binder shadows a name
39+++ target-shadow: pattern binder shadows a name
40+++ grouped: $-((element.first @t) @t)
41+++ called: $-((element.first @t) @t)
42+++ missing-context: missing union case [%node [event=$-(@t @t) children=(list (element.first @t))]]
43+++ missing-node: missing union case [%text value=@t]
44+++ single-wild: branch is not supported by partial inference
45+++ single-bind: branch is not supported by partial inference
46+++ polymorphic-source: (element.first A)
47+++ polymorphic-match: missing union case [%node [event=$-(@t A) children=(list (element.first A))]]
48+partial inference; module not checked
49+++ words: $-((element.first @t) @t)
50+++ children: $-((element.first A) (list (element.first A)))
51+++ duplicate: branch arm is covered by earlier arms
52+/tests/tree/no-event.jibb:13:5: covered arm
53+ [%text b] b
54+ ^
55+++ nested-pattern: branch is not supported by partial inference
tests/type-generic-pattern/no-event.txtnew file+17
@@ -0,0 +1,17 @@
1+/= first /ui/tree
2+++ words |= x=(element.first @t)
3+ ?- x
4+ [%text value] value
5+ [%node kids] "node"
6+++ children |= x=(element.first A)
7+ ^- (list (element.first A)) ?- x
8+ [%text value] ~
9+ [%node kids] kids
10+++ duplicate |= x=(element.first @t)
11+ ?- x
12+ [%text a] a
13+ [%text b] b
14+++ nested-pattern |= x=(element.first @t)
15+ ?- x
16+ [%text value] value
17+ [%node [first rest]] "node"
tests/type-generic-pattern/owner-bad.txtnew file+22
@@ -0,0 +1,22 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ describe |= x=(element @t)
8+ ?- x
9+ [%text value] value
10+ [%node event kids] (event "click")
11+++ children |= x=(element A)
12+ ^- (list (element A)) ?- x
13+ [%text value] ~
14+ [%node event kids] kids
15+++ rebuild |= x=(element @t)
16+ ^- (element @t) ?- x
17+ [%text value] [%text value=value]
18+ [%node event kids] [%node event=event children=kids]
19+++ wrong |= x=(element @t)
20+ ?- x
21+ [%text value] value
22+ [%node event event] "bad"
tests/type-generic-pattern/owner.txtnew file+18
@@ -0,0 +1,18 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ describe |= x=(element @t)
8+ ?- x
9+ [%text value] value
10+ [%node event kids] (event "click")
11+++ children |= x=(element A)
12+ ^- (list (element A)) ?- x
13+ [%text value] ~
14+ [%node event kids] kids
15+++ rebuild |= x=(element @t)
16+ ^- (element @t) ?- x
17+ [%text value] [%text value=value]
18+ [%node event kids] [%node event=event children=kids]
tests/type-generic-pattern/poly-values.txtnew file+2
@@ -0,0 +1,2 @@
1+++ missing ?- x
2+ [%text value] value
tests/type-generic-pattern/values.txtnew file+10
@@ -0,0 +1,10 @@
1+++ simple ?- x
2+ [%text value] value
3+ [%node event kids] (event "click")
4+++ nested ?- x
5+ [%text value] value
6+ [%node event kids] ?- kids
7+ ~ "empty"
8+ [item remainder] ?- item
9+ [%text value] value
10+ [%node action rest] (action "click")
tests/type-generic-recursion/about.txtnew file+14
@@ -0,0 +1,14 @@
1+source: docs/spec/grammar.md:57,135,162 — “Molds may be recursive”; “recursive molds go by name and module”; a number defaults when its `++` is checked.
2+
3+This shared eval and ship fixture checks a deliberately narrow source-backed
4+recursive identity: two distinct tagged cases, a text leaf and a node with a
5+message-producing gate and a list of recursive children. The test-only tree is
6+not a chosen element representation. A complete import-free owner module must
7+check before its interface is published. Same-origin aliases retain identity,
8+while different origins, unproved casts and broader matching remain unsupported.
9+A wrong-aura constructor fails the complete owner check. An opaque recursive type prevents premature numeric defaulting;
10+its gate-freedom remains unknown. Source/cache/prelude changes, cycles,
11+nonuniform recursion, invalid unused molds and local shadows fail closed.
12+
13+The client report explicitly remains partial. No runtime layout, program kind,
14+watchability or backend behavior is claimed.
tests/type-generic-recursion/alias.txtnew file+3
@@ -0,0 +1,3 @@
1+/= source /ui/tree
2++$ alias |$ [A] (element.source A)
3+++ identity |= x=(alias A) x
tests/type-generic-recursion/bad-constructor.txtnew file+8
@@ -0,0 +1,8 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+
8+++ construct ^- (element @t) [%text value=~zod]
tests/type-generic-recursion/bad-match.txtnew file+10
@@ -0,0 +1,10 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ match |= x=(element @t)
8+ ?- x
9+ [%text value] value
10+ [%node event event] "node"
tests/type-generic-recursion/bad-mold.txtnew file+8
@@ -0,0 +1,8 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+
8++$ unused _
tests/type-generic-recursion/bad-parameter.txtnew file+6
@@ -0,0 +1,6 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element @t))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
tests/type-generic-recursion/chain.txtnew file+3
@@ -0,0 +1,3 @@
1++$ chain |$ [A]
2+ ~
3+ [i=A t=(chain A)]
tests/type-generic-recursion/client.txtnew file+11
@@ -0,0 +1,11 @@
1+/= first /ui/tree
2+/= again /ui/tree
3+/= second /ui/tree-two
4+/= via /ui/tree-alias
5+++ from-first |= x=(element.first @t) x
6+++ from-again |= x=(element.again @p) x
7+++ same-origin |= x=(element.first @t) ^- (element.again @t) x
8+++ from-alias |= x=(alias.via @t) x
9+++ through-alias |= x=(element.first @t) ^- (alias.via @t) x
10+++ different-origin |= x=(element.first @t) ^- (element.second @t) x
11+++ independent |= [a=(element.first @t) b=(element.first @p)] [(generic-id.first a) (generic-id.first b)]
tests/type-generic-recursion/expected.txtnew file+35
@@ -0,0 +1,35 @@
1+source module complete: ok
2+generic mold quantified: ok
3+distinct arguments decline: ok
4+distinct origins decline: ok
5+occurs check: ok
6+cell construction stays opaque: ok
7+noun construction stays opaque: ok
8+unindexed recursion declined: ok
9+alteration rejects missing line: ok
10+alteration rejects repeated line: ok
11+gate freedom unknown: ok
12+gate defaulting conservative: ok
13+unused mold hole declined: ok
14+invalid constructor declined: ok
15+invalid matching declined: ok
16+nonuniform recursion declined: ok
17+identical local shadow declined: ok
18+different local shadow declined: ok
19+local recursion declined: ok
20+unreserved local list shadow declined: ok
21+altered prelude list declined: ok
22+cached source reuse: ok
23+changed source invalidates cache: ok
24+changed source fresh proof: ok
25+duplicate source declined: ok
26+active import cycle declined: ok
27+changed prelude invalidates cache: ok
28+partial inference; module not checked
29+++ from-first: $-((element.first @t) (element.first @t))
30+++ from-again: $-((element.again @p) (element.again @p))
31+++ same-origin: $-((element.first @t) (element.again @t))
32+++ from-alias: $-((alias.via @t) (alias.via @t))
33+++ through-alias: $-((element.first @t) (alias.via @t))
34+++ different-origin: cast constraint is not supported by partial inference
35+++ independent: $-([a=(element.first @t) b=(element.first @p)] [(element.first @t) (element.first @p)])
tests/type-generic-recursion/list-shadow.txtnew file+4
@@ -0,0 +1,4 @@
1++$ list |$ [M] [%fake value=M]
2++$ element |$ [M]
3+ [%text value=@t]
4+ [%node children=(list (element M))]
tests/type-generic-recursion/local-distinct.txtnew file+11
@@ -0,0 +1,11 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ shadow |= x=@t
8+ +$ element |$ [M]
9+ [%different value=@t]
10+ [%node event=$-(@t M) children=(list (element M))]
11+ x
tests/type-generic-recursion/local-only.txtnew file+11
@@ -0,0 +1,11 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ local-only |= x=@t
8+ +$ local-tree |$ [M]
9+ [%text value=@t]
10+ [%node event=$-(@t M) children=(list (local-tree M))]
11+ x
tests/type-generic-recursion/local-shadow.txtnew file+11
@@ -0,0 +1,11 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
7+++ shadow |= x=@t
8+ +$ element |$ [M]
9+ [%text value=@t]
10+ [%node event=$-(@t M) children=(list (element M))]
11+ x
tests/type-generic-recursion/tree-changed.txtnew file+6
@@ -0,0 +1,6 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%branch event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
tests/type-generic-recursion/tree.txtnew file+6
@@ -0,0 +1,6 @@
1++$ element |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (element M))]
4+++ text-id |= x=(element @t) x
5+++ ship-id |= x=(element @p) x
6+++ generic-id |= x=(element A) x
tests/type-import-overlap/about.txtnew file+24
@@ -0,0 +1,24 @@
1+Source-aware Hoon `$?` cases are independently evaluated before the reader
2+proves a shared runtime noun or a disjoint pair of literal outer tags. The
3+positive overlap witness checks supported projected atoms, cells, faces and
4+forks across the original cases. It compares singleton noun values regardless
5+of aura. Some overlap shapes remain unsupported.
6+
7+The mixed-aura zero and nonzero controls prove actual overlap. Boolean tails
8+share loobean nouns, and `~` is the null singleton, which overlaps `@t`; unequal,
9+opaque and other unproven payloads remain unsupported. The structured diagnostic
10+bridge reports a definite overlap at the Jibb use site, while the disjoint
11+case infers and an unresolved case stays unsupported. The Hoon source case
12+locations are unavailable in this fixture and are not claimed. This is a
13+partial report and does not prove the whole module was checked. This named
14+reader proof is not a mark-reader overlap diagnostic.
15+
16+The existing 4,096 source-proof fuel limits dependency-spec visits. Chapter
17+lookup, Hoon play, type projection, parsing and all other work are outside
18+that limit. Unknown or exhausted source proof stays unsupported.
19+
20+The added `$?` source screen caps the total raw noun nodes at 4,096 and
21+the case count at 128 before checking tags. The shared guard exercises exact
22+and exceeded budgets, deep and wide inputs, nested union forms, and unknown
23+source cases. These limits do not meter atom sizes, chapter lookup, Hoon play,
24+reader projection or other work. The pre-existing `$%` path is unchanged.
tests/type-import-overlap/expected.txtnew file+26
@@ -0,0 +1,26 @@
1+mixed-zero: invalid/overlap: Hoon union cases overlap
2+nonzero: invalid/overlap: Hoon union cases overlap
3+unequal-singletons: unsupported: a Hoon union needs a source-level disjointness check
4+swapped: invalid/overlap: Hoon union cases overlap
5+separate-tags: (union [left [ @t]] [right [(union @f:0 @f:1) @t]])
6+separate-terms: (union [left [ @t]] [right [yes @t]])
7+different-value: unsupported: a Hoon union needs a source-level disjointness check
8+different-tail: unsupported: a Hoon union needs a source-level disjointness check
9+unknown-middle: unsupported: a Hoon union needs a source-level disjointness check
10+unsupported-gate: unsupported: a Hoon union needs a source-level disjointness check
11+dollar-percent: (union [left [ @t]] [right [yes @t]])
12+identical: invalid/overlap: Hoon union cases overlap
13+cross-zero: invalid/overlap: Hoon union cases overlap
14+boolean-tail: invalid/overlap: Hoon union cases overlap
15+empty-tail: invalid/overlap: Hoon union cases overlap
16+bounded source screen controls passed
17+mismatched-selected: error: Hoon module provenance does not match the selected mold
18+missing: error: Hoon mold `missing` is not declared
19+bare-zuse: error: Hoon module provenance is unavailable
20+partial inference; module not checked
21+++ overlap: Hoon union cases overlap
22+/ui/test.jibb:2:17: invalid imported mold
23+++ overlap |= x=mixed-zero.fixture x
24+ ^
25+++ disjoint: $-(([%left [%$ @t]] [%right [? @t]]) ([%left [%$ @t]] [%right [? @t]]))
26+++ unknown: sample mold is not supported by partial inference
tests/type-import-overlap/source.txtnew file+4
@@ -0,0 +1,4 @@
1+/- fixture
2+++ overlap |= x=mixed-zero.fixture x
3+++ disjoint |= x=separate-tags.fixture x
4+++ unknown |= x=unknown-middle.fixture x
tests/type-import-overlap/sur.txtnew file+17
@@ -0,0 +1,17 @@
1+|%
2++$ mixed-zero $?([%tag %$ @t] [%tag ? @t])
3++$ nonzero $?([%tag %.n @t] [%tag ? @t])
4++$ unequal-singletons $?([%tag %.n @t] [%tag %$ @t])
5++$ swapped $?([%tag ? @t] [%tag %$ @t])
6++$ separate-tags $?([%left %$ @t] [%right ? @t])
7++$ separate-terms $?([%left %$ @t] [%right %yes @t])
8++$ different-value $?([%tag %yes @t] [%tag ? @t])
9++$ different-tail $?([%tag %$ @t] [%tag ? @p])
10++$ unknown-middle $?([%tag * @t] [%tag ? @t])
11++$ unsupported-gate $?([%tag %$ @t] [%tag ? $-(@t @t)])
12++$ dollar-percent $%([%left %$ @t] [%right %yes @t])
13++$ identical $?([%tag %$ @t] [%tag %$ @t])
14++$ cross-zero $?([%tag %.y @t] [%tag %$ @t])
15++$ boolean-tail $?([%tag %$ ?] [%tag ? ?])
16++$ empty-tail $?([%tag %$ ~] [%tag ? @t])
17+--
tests/type-import-structural/about.txtnew file+14
@@ -0,0 +1,14 @@
1+The actual Hoon source includes local aliases, nested cells, equal and unequal
2+singleton nouns, open auras and three-/four-case unions. The reader reports a
3+definite overlap only when its bounded structural witness finds a shared noun;
4+otherwise ordinary source-aware disjointness checks can still recover a union,
5+or the outcome remains unsupported. The checker report is partial and points
6+to the Jibb mold use; source-case positions are unavailable here.
7+
8+Low-level controls exercise void at the root and in a cell, opaque references
9+and applications, named and faced nodes, nested alternatives, source/tag
10+mismatches and source, pair and type-node fuel. The attempted Hoon source form
11+`+$ never !!` did not compile, so the void controls use an actual `%void`
12+reader node and do not claim a source-level empty mold. The positive proof
13+only bounds specific traversals; Hoon play, projection, chapter lookup, atom
14+byte sizes and the preexisting whole-graph checks are outside those budgets.
tests/type-import-structural/expected.txtnew file+41
@@ -0,0 +1,41 @@
1+same-alias: invalid/overlap: Hoon union cases overlap
2+separate-alias: (union [tag [one @t]] [tag [two @t]])
3+deep-match: invalid/overlap: Hoon union cases overlap
4+deep-distinct: (union [tag [[inner [one three]] @t]] [tag [[inner [two three]] @t]])
5+tail-distinct: unsupported: a Hoon union needs a source-level disjointness check
6+later-overlap: invalid/overlap: Hoon union cases overlap
7+many-safe: (union [tag [one @t]] [tag [two @t]] [tag [three @t]])
8+open-atoms: invalid/overlap: Hoon union cases overlap
9+different-aura: unsupported: Hoon union disjointness could not be verified
10+same literal: ok
11+different literals: ok
12+named expands: ok
13+opaque declines: ok
14+opaque versus noun: ok
15+unknown aura: ok
16+open admits zero: ok
17+different tail: ok
18+nested face: ok
19+fork later case: ok
20+empty fuel: ok
21+cell needs both: ok
22+later pair: ok
23+pair fuel: ok
24+void: ok
25+void position: ok
26+opaque apply: ok
27+source node fuel: ok
28+source case cap: ok
29+wrong projected head: ok
30+wrong case count: ok
31+partial inference; module not checked
32+++ overlap: Hoon union cases overlap
33+/ui/structural.jibb:2:20: invalid imported mold
34+++ overlap |= x=deep-match.fixture x
35+ ^
36+++ distinct: $-(([%tag [%one @t]] [%tag [%two @t]]) ([%tag [%one @t]] [%tag [%two @t]]))
37+++ unknown: sample mold is not supported by partial inference
38+++ multi: Hoon union cases overlap
39+/ui/structural.jibb:5:18: invalid imported mold
40+++ multi |= x=later-overlap.fixture x
41+ ^
tests/type-import-structural/source.txtnew file+5
@@ -0,0 +1,5 @@
1+/- fixture
2+++ overlap |= x=deep-match.fixture x
3+++ distinct |= x=separate-alias.fixture x
4+++ unknown |= x=different-aura.fixture x
5+++ multi |= x=later-overlap.fixture x
tests/type-import-structural/sur.txtnew file+12
@@ -0,0 +1,12 @@
1+|%
2++$ scalar ?(%$ %one)
3++$ same-alias $?([%tag scalar @t] [%tag %$ @t])
4++$ separate-alias $?([%tag %one @t] [%tag %two @t])
5++$ deep-match $?([%tag [%inner [%.y %three]] @t] [%tag [%inner [%$ %three]] @t])
6++$ deep-distinct $?([%tag [%inner [%one %three]] @t] [%tag [%inner [%two %three]] @t])
7++$ tail-distinct $?([%tag %$ %one] [%tag %.y %two])
8++$ later-overlap $?([%x %one @t] [%y %one @t] [%tag %.y @t] [%tag %$ @t])
9++$ many-safe $?([%tag %one @t] [%tag %two @t] [%tag %three @t])
10++$ open-atoms $?([%tag @t @ud] [%tag @tas @t])
11++$ different-aura $?([%tag @p @t] [%tag @t @t])
12+--
tests/type-import/about.txt+10−2
@@ -22,8 +22,16 @@ Jibb-written collection molds remain unsupported.
2222A self-recursive /sur mold is an opaque module/name identity. Distinct names
2323or modules conflict; aliases, foreign references, unfolding and out-of-scope
2424names remain unsupported. The fixture checks these limits as well as malformed
25−references and overlapping recursive graphs. The reader itself rejects an
26−overlapping source union before Hoon can collapse it. A missing import and a
25+references and overlapping recursive graphs. The reader rejects the overlapping
26+source union instead of publishing a collapsed result. A missing import and a
2727duplicate supplied mold fail closed. The types output is partial and does not
2828claim that the module was checked. The same fixture runs under urbit eval and
2929through -test on the fake ship.
30+
31+The real-reader mixed-zero case places `%$` and `?` under the same outer tag;
32+both allow the noun zero, so the reader reports definite overlap. The distinct-tag
33+`%$`/`?` case and distinct-tag term singletons are successful reader/checker
34+controls. The reader also reports definite overlap for the collapsed source
35+whose two cases are both `[%x @ud]`. The overlap error points at the Jibb use site; the Hoon source case
36+positions are not available in this fixture. These are source-aware
37+reads and the checker report remains partial.
tests/type-import/expected.txt+10−1
@@ -104,7 +104,16 @@ partial inference; module not checked
104104++ flag-extra: sample mold is not supported by partial inference
105105++ flag-faced: sample mold is not supported by partial inference
106106++ flag-malformed: sample mold is not supported by partial inference
107−reader-collapsed: error: Hoon union disjointness could not be verified
107+++ mixed-zero: Hoon union cases overlap
108+/test.jibb:81:20: invalid imported mold
109+++ mixed-zero |= x=mixed-zero.fixture x
110+ ^
111+++ separate-tags: $-(([%left [%$ @t]] [%right [? @t]]) ([%left [%$ @t]] [%right [? @t]]))
112+++ separate-terms: $-(([%left [%$ @t]] [%right [%yes @t]]) ([%left [%$ @t]] [%right [%yes @t]]))
113+reader-collapsed: error: Hoon union cases overlap
114+reader-mixed-zero: error: Hoon union cases overlap
115+reader-separate-tags: (union [left [ @t]] [right [(union @f:0 @f:1) @t]])
116+reader-separate-terms: (union [left [ @t]] [right [yes @t]])
108117partial inference; module not checked
109118++ use: recursive mold name is not available in this scope
110119partial inference; module not checked
tests/type-import/source.txt+5
@@ -76,3 +76,8 @@
7676++ flag-extra |= x=flag-extra.fixture x
7777++ flag-faced |= x=flag-faced.fixture x
7878++ flag-malformed |= x=flag-malformed.fixture x
79+
80+:: Real source-aware nested mixed-aura cases.
81+++ mixed-zero |= x=mixed-zero.fixture x
82+++ separate-tags |= x=separate-tags.fixture x
83+++ separate-terms |= x=separate-terms.fixture x
tests/type-import/sur.txt+3
@@ -21,4 +21,7 @@
2121+$ zero-choice $@(~ [text=@t n=@ud])
2222+$ zero-nested [entry=zero-choice code=@ud]
2323+$ zero-lookalike $@(~ [~ @t])
24++$ mixed-zero $?([%tag %$ @t] [%tag ? @t])
25++$ separate-tags $?([%left %$ @t] [%right ? @t])
26++$ separate-terms $?([%left %$ @t] [%right %yes @t])
2427--
tests/type-todo-api/about.txtnew file+1
@@ -0,0 +1 @@
1+The exact my-app todo API is checked with its actual /sur and mark reader fixtures. The eval runner verifies that the API fixture matches the application source. Positive and negative reports cover request callback polymorphism, the named one-diff fold, typed path arguments, poke, exported molds and a typed subscription expression. The interface guards check source and request evidence and reject missing or duplicate inputs, unsupported sibling declarations and private imports. Reports are partial inference, not a complete module check or runtime/watchability proof.
tests/type-todo-api/expected.txtnew file+17
@@ -0,0 +1,17 @@
1+partial inference; module not checked
2+++ fold: $-([d=[%todo-update ([%added item=[id=@ud [done=? text=@t]]] [%toggled id=@ud])] s=(list [id=@ud [done=? text=@t]])] (list [id=@ud [done=? text=@t]]))
3+++ todos-cord: (ask @t)
4+++ todos-ship: (ask @p)
5+++ by-id-cord: (ask @t)
6+++ by-id-ship: (ask @p)
7+++ changes-cord: (ask @t)
8+++ changes-ship: (ask @p)
9+++ action: poke
10+++ item-id: $-([id=@ud [done=? text=@t]] @ud)
11+++ action-id: $-(([%add text=@t] [%toggle id=@ud]) ([%add text=@t] [%toggle id=@ud]))
12+++ todos-id: $-((list [id=@ud [done=? text=@t]]) (list [id=@ud [done=? text=@t]]))
13+++ update-id: $-(([%added item=[id=@ud [done=? text=@t]]] [%toggled id=@ud]) ([%added item=[id=@ud [done=? text=@t]]] [%toggled id=@ud]))
14+++ item-mark-id: $-([id=@ud [done=? text=@t]] [id=@ud [done=? text=@t]])
15++$ model: not checked
16++$ msg: cases proven disjoint; mold not checked
17+++ subs: $-([todos=(list [id=@ud [done=? text=@t]]) [draft=@t error=(unit @t)]] (list (sub msg)))
tests/type-todo-api/negative-expected.txtnew file+26
@@ -0,0 +1,26 @@
1+partial inference; module not checked
2+++ no-sur-export: sample mold is not supported by partial inference
3+++ bad-param: call's sample and argument types do not unify
4+/tests/type-todo-api/negative.jibb:3:15: called gate
5+++ bad-param (todo-by-id.api ~zod |=(x=todo-item.api "ok"))
6+ ^
7+/tests/type-todo-api/negative.jibb:3:30: argument has type @p
8+++ bad-param (todo-by-id.api ~zod |=(x=todo-item.api "ok"))
9+ ^
10+++ missing-fold: call constraint is not supported by partial inference
11+++ bad-action: call's sample and argument types do not unify
12+/tests/type-todo-api/negative.jibb:5:16: called gate
13+++ bad-action (todo-action.api [%typo text="hello"])
14+ ^
15+/tests/type-todo-api/negative.jibb:5:32: argument
16+++ bad-action (todo-action.api [%typo text="hello"])
17+ ^
18++$ msg: cases proven disjoint; mold not checked
19+++ missing: call's sample and argument types do not unify
20+/tests/type-todo-api/negative.jibb:9:26: called gate
21+++ missing ^- (ask msg) (todos.api |=%absent)
22+ ^
23+/tests/type-todo-api/negative.jibb:9:36: argument
24+++ missing ^- (ask msg) (todos.api |=%absent)
25+ ^
26+++ pending: tag needs context in partial inference
tests/type-todo-api/negative.txtnew file+12
@@ -0,0 +1,12 @@
1+/= api /ui/api/todo
2+++ no-sur-export |= x=todo.api x
3+++ bad-param (todo-by-id.api ~zod |=(x=todo-item.api "ok"))
4+++ missing-fold (changes.api |=(xs=todos.api "ok"))
5+++ bad-action (todo-action.api [%typo text="hello"])
6++$ msg
7+ [%got todos=(list item.api)]
8+ %other
9+++ missing ^- (ask msg) (todos.api |=%absent)
10+++ pending
11+ ~& %unrelated
12+ ^- (ask msg) (todos.api |=%got)
tests/type-todo-api/source.txtnew file+21
@@ -0,0 +1,21 @@
1+/= api /ui/api/todo
2+++ fold |= [d=[%todo-update todo-update.api] s=todos.api] s
3+++ todos-cord (todos.api |=(xs=todos.api "ok"))
4+++ todos-ship (todos.api |=(xs=todos.api ~zod))
5+++ by-id-cord (todo-by-id.api 1 |=(x=todo-item.api "ok"))
6+++ by-id-ship (todo-by-id.api 2 |=(x=todo-item.api ~zod))
7+++ changes-cord (changes.api |=(xs=todos.api "ok") fold)
8+++ changes-ship (changes.api |=(xs=todos.api ~zod) fold)
9+++ action (todo-action.api [%add text="hello"])
10+++ item-id |= x=item.api id.x
11+++ action-id |= x=todo-action.api x
12+++ todos-id |= x=todos.api x
13+++ update-id |= x=todo-update.api x
14+++ item-mark-id |= x=todo-item.api x
15++$ model [todos=(list item.api) draft=@t error=(unit @t)]
16++$ msg
17+ [%got todos=(list item.api)]
18+ %other
19+++ subs |= m=model
20+ ^- (list (sub msg))
21+ ~[[%watch (todos.api |=%got)]]
tests/type-todo-api/unsupported.txtnew file+13
@@ -0,0 +1,13 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todos /todos todos]
12+ [%changes /changes (facts todos todo-update todo-item)]
13+ [%todo-by-id /todo/[id=@ud] todo-item]
tests/type-todo-partial/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Worked examples: “`main.todo-list` is a record of exactly `init`, `update`, `view` and `subs`, whose types fix the data, model and messages.”
2+tests: The unchanged todo island is resolved using the real prelude, todo API, source-aware Hoon `/sur`, and mark readers. The report records partial inference only; it does not claim the module, island kind, gate-free conditions, runtime, or watchability were checked. Missing and duplicate marks, an unavailable selected `/sur` mold, and an unavailable API module remain rejected or explicitly unavailable. The eval runner verifies the mounted todo and API fixtures match their app sources.
3+expect: parses
4+expect-types: a partial inference report
tests/type-todo-partial/expected.txtnew file+17
@@ -0,0 +1,17 @@
1+unchanged todo: partial inference only
2+partial inference; module not checked
3+++ main: name is not available to partial inference
4++$ model: not checked
5++$ msg: cases proven disjoint; mold not checked
6+++ init: `~` needs context in partial inference
7+++ update: name is not available to partial inference
8+++ subs: call constraint is not supported by partial inference
9+++ view: name is not available to partial inference
10+++ row-of: name is not available to partial inference
11+negative API imports
12+missing-mark: rejected
13+duplicate-mark: rejected
14+missing-selected-sur: rejected
15+missing module: partial report
16+partial inference; module not checked
17+module source missing: /ui/api/todo/jibb
tools/testdata/ship-selftest+37−1
@@ -304,13 +304,49 @@ def generator_checks(tmp):
304304 check('default assembly keeps the repository test programs',
305305 {'tests/lib/jibb.hoon', 'tests/lib/jibb-import.hoon',
306306 'tests/lib/jibb-import-default.hoon',
307+ 'tests/lib/jibb-import-overlap.hoon',
308+ 'tests/lib/jibb-import-structural.hoon',
307309 'tests/lib/jibb-typecheck.hoon', 'tests/lib/jibb-bridge.hoon',
308310 'tests/lib/jibb-arithmetic-guards.hoon',
309311 'tests/lib/jibb-positional-face-guards.hoon',
310312 'tests/lib/jibb-generic-alias.hoon',
313+ 'tests/lib/jibb-generic-recursion.hoon',
314+ 'tests/lib/jibb-generic-construction.hoon',
315+ 'tests/lib/jibb-generic-pattern.hoon',
311316 'tests/lib/jibb-api-evidence.hoon',
312− 'tests/lib/jibb-ask-guards.hoon'}
317+ 'tests/lib/jibb-ask-guards.hoon',
318+ 'tests/lib/jibb-request-guards.hoon',
319+ 'tests/lib/jibb-closed-gate-guards.hoon',
320+ 'tests/lib/jibb-direct-gate-guards.hoon',
321+ 'tests/lib/jibb-direct-gate-source.hoon',
322+ 'tests/lib/jibb-todo-api.hoon',
323+ 'tests/lib/jibb-todo-partial.hoon',
324+ 'tests/lib/jibb-constructor-fit-guards.hoon',
325+ 'tests/lib/jibb-sub-guards.hoon',
326+ 'tests/lib/jibb-nested-union-guards.hoon',
327+ 'tests/lib/jibb-gate-free-guards.hoon',
328+ 'tests/lib/jibb-gate-free-source.hoon'}
313329 <= normal_tests, sorted(normal_tests))
330+ check('generic recursion source and golden are assembled',
331+ {f'tests/type-generic-recursion/{name}.txt' for name in (
332+ 'tree', 'tree-changed', 'alias', 'client', 'bad-mold',
333+ 'bad-constructor', 'bad-match', 'bad-parameter', 'local-shadow',
334+ 'local-distinct', 'local-only', 'list-shadow', 'chain', 'expected')} <= set(normal.files))
335+ check('generic construction sources and golden are assembled',
336+ {f'tests/type-generic-construction/{name}.txt' for name in (
337+ 'tree', 'alias', 'client', 'alias-client', 'tree-no-event',
338+ 'no-event-client', 'owner-positive', 'owner-negative',
339+ 'sibling-values', 'expected')} <= set(normal.files))
340+ check('generic pattern sources and golden are assembled',
341+ {f'tests/type-generic-pattern/{name}.txt' for name in (
342+ 'client', 'no-event', 'values', 'poly-values', 'owner',
343+ 'owner-bad', 'expected')} <= set(normal.files))
344+ check('direct gate source and golden are assembled',
345+ {'tests/type-direct-gate/source.txt', 'tests/type-direct-gate/expected.txt'}
346+ <= set(normal.files))
347+ check('todo partial golden and reused sources are assembled',
348+ {'tests/type-todo-partial/expected.txt', 'tests/type-gate-free/todo.txt',
349+ 'tests/type-api-paths/api.txt'} <= set(normal.files))
314350 for label, kwargs in (('custom library', {'lib': STUB}),
315351 ('custom goldens', {'golden': CASES}),
316352 ('both overrides', {'lib': STUB, 'golden': CASES})):
tools/testdata/zing-hoon-reference.hoonnew file+17
@@ -0,0 +1,17 @@
1+:: Compare a Hoon translation of Jibb zing's recursion with Hoon's zing.
2+:: This does not run Jibb, test lowering, or prove jet recognition.
3+^- @t
4+=/ flatten |= xss=(list (list @ud))
5+ ^- (list @ud)
6+ ?~ xss ~
7+ (weld i.xss $(xss t.xss))
8+=/ cases=(list (list (list @ud)))
9+ :~ ~
10+ ~[~]
11+ ~[~[1 2] ~ ~[3]]
12+ ~[~[0] ~[3 2 1] ~]
13+ ==
14+|-
15+?~ cases 'Hoon flattening reference: 4 cases passed'
16+?. =((flatten i.cases) (zing i.cases)) 'BAD Hoon flattening mismatch'
17+$(cases t.cases)
tools/type-closed-gate-guards-testnew file+29
@@ -0,0 +1,29 @@
1+#!/usr/bin/env python3
2+"""Run the shared closed gate fit guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-closed-gate-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ suite\n' + tests +
16+ '\n=/ failures=(list tape) closed-gate-guard-errors:suite\n^- @t\n' +
17+ "?~ failures 'closed gate guards passed'\n" +
18+ '(of-wain:format (turn failures crip))\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-positional-guards-') as tmp:
20+ program = Path(tmp) / 'guards.hoon'
21+ program.write_text(expression)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib,
23+ '--raw', '-f', str(program)], stdout=subprocess.PIPE)
24+if result.returncode:
25+ sys.exit(result.returncode)
26+if result.stdout != b'closed gate guards passed\n':
27+ sys.stderr.buffer.write(result.stdout)
28+ sys.exit(1)
29+print('closed gate fit guards passed')
tools/type-constructor-fit-guards-testnew file+29
@@ -0,0 +1,29 @@
1+#!/usr/bin/env python3
2+"""Run the shared constructor-fit source/typing guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-constructor-fit-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ suite\n' + tests +
16+ '\n=/ failures=(list tape) constructor-fit-guard-errors:suite\n^- @t\n' +
17+ "?~ failures 'constructor-fit guards passed'\n" +
18+ '(of-wain:format (turn failures crip))\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-positional-guards-') as tmp:
20+ program = Path(tmp) / 'guards.hoon'
21+ program.write_text(expression)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib,
23+ '--raw', '-f', str(program)], stdout=subprocess.PIPE)
24+if result.returncode:
25+ sys.exit(result.returncode)
26+if result.stdout != b'constructor-fit guards passed\n':
27+ sys.stderr.buffer.write(result.stdout)
28+ sys.exit(1)
29+print('constructor-fit source/typing guards passed')
tools/type-direct-gate-testnew file+64
@@ -0,0 +1,64 @@
1+#!/usr/bin/env python3
2+"""Check source-backed direct gate layouts and provenance under eval."""
3+from pathlib import Path
4+import argparse
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+parser = argparse.ArgumentParser(description=__doc__)
12+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
13+parser.add_argument('--update', action='store_true')
14+args = parser.parse_args()
15+fixture = root / 'tests/type-direct-gate'
16+prelude = root / 'jibb-dev/lib/jibb/prelude.jibb'
17+internal = root / 'jibb-dev/lib/jibb/internal.jibb'
18+
19+def body(name):
20+ text = (root / 'tests/lib' / name).read_text()
21+ return text[text.index('\n|%\n') + 1:]
22+
23+def run(program, cords=()):
24+ with tempfile.TemporaryDirectory(prefix='jibb-direct-gate-') as tmp:
25+ path = Path(tmp) / 'test.hoon'
26+ path.write_text(program)
27+ return subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
28+ '-f', str(path), *cords], stdout=subprocess.PIPE)
29+
30+source_program = ('=/ jibb .\n=/ real-prelude=@t prelude\n=/ real-internal=@t internal\n'
31+ '=/ source=wain (to-wain:format source-text)\n=/ expected=wain ~\n'
32+ '=/ suite\n' + body('jibb-direct-gate-source.hoon') +
33+ '\n^- @t\n=/ prepared=(unit iprelude:jibb) (direct-gate-prepared:suite real-prelude real-internal)\n'
34+ '=/ failures=(list tape) (direct-gate-projection-errors:suite prepared)\n'
35+ '?~ failures (direct-gate-source-output:suite source-text prepared)\n'
36+ '(of-wain:format (turn failures crip))\n')
37+result = run(source_program, ['--cord', 'source-text=' + str(fixture / 'source.txt'),
38+ '--cord', 'prelude=' + str(prelude),
39+ '--cord', 'internal=' + str(internal)])
40+if result.returncode:
41+ sys.exit(result.returncode)
42+expected_path = fixture / 'expected.txt'
43+if args.update:
44+ expected_path.write_bytes(result.stdout)
45+else:
46+ expected = expected_path.read_bytes()
47+ if result.stdout != expected:
48+ sys.stderr.writelines(difflib.unified_diff(
49+ expected.decode().splitlines(keepends=True),
50+ result.stdout.decode().splitlines(keepends=True),
51+ fromfile='expected.txt', tofile='actual types'))
52+ sys.exit(1)
53+
54+guard_program = ('=/ jibb .\n=/ suite\n' + body('jibb-direct-gate-guards.hoon') +
55+ '\n=/ failures=(list tape) direct-gate-guard-errors:suite\n^- @t\n'
56+ "?~ failures 'direct gate guards passed'\n"
57+ '(of-wain:format (turn failures crip))\n')
58+result = run(guard_program)
59+if result.returncode:
60+ sys.exit(result.returncode)
61+if result.stdout != b'direct gate guards passed\n':
62+ sys.stderr.buffer.write(result.stdout)
63+ sys.exit(1)
64+print('direct gate source and provenance guards passed')
tools/type-gate-free-guards-testnew file+29
@@ -0,0 +1,29 @@
1+#!/usr/bin/env python3
2+"""Run the shared gate-free type guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-gate-free-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ suite\n' + tests +
16+ '\n=/ failures=(list tape) gate-free-guard-errors:suite\n^- @t\n' +
17+ "?~ failures 'gate-free guards passed'\n" +
18+ '(of-wain:format (turn failures crip))\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-gate-free-guards-') as tmp:
20+ program = Path(tmp) / 'guards.hoon'
21+ program.write_text(expression)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib,
23+ '--raw', '-f', str(program)], stdout=subprocess.PIPE)
24+if result.returncode:
25+ sys.exit(result.returncode)
26+if result.stdout != b'gate-free guards passed\n':
27+ sys.stderr.buffer.write(result.stdout)
28+ sys.exit(1)
29+print('gate-free type guards passed')
tools/type-gate-free-source-testnew file+50
@@ -0,0 +1,50 @@
1+#!/usr/bin/env python3
2+"""Run real-reader gate-free mold analysis without claiming island checking."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+fixture = root / 'tests/type-gate-free/todo.txt'
14+if fixture.read_bytes() != (root / 'my-app/ui/todo-list.jibb').read_bytes():
15+ sys.exit('todo source fixture differs from my-app/ui/todo-list.jibb')
16+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
17+tests = (root / 'tests/lib/jibb-gate-free-source.hoon').read_text()
18+tests = tests[tests.index('\n|%\n') + 1:]
19+names = ('sur', 'action', 'todos', 'update', 'item', 'api', 'source',
20+ 'gate-source', 'noun-source', 'expected')
21+program = ('=/ jibb .\n=/ jibb-import\n' + reader + '\n' +
22+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
23+ for name in names) +
24+ '=/ suite\n' + tests +
25+ '\n^- @t\n(gate-free-source-report:suite prelude internal sur-text action-text todos-text update-text item-text api-text source-text gate-source-text noun-source-text)\n')
26+fixtures = {'sur': 'tests/type-api-paths/todo-sur.txt',
27+ 'action': 'tests/type-api-paths/todo-action.txt',
28+ 'todos': 'tests/type-api-paths/todos.txt',
29+ 'update': 'tests/type-api-paths/todo-update.txt',
30+ 'item': 'tests/type-api-paths/todo-item.txt',
31+ 'api': 'tests/type-api-paths/api.txt',
32+ 'source': 'tests/type-gate-free/todo.txt',
33+ 'gate-source': 'tests/type-gate-free/todo-gate.txt',
34+ 'noun-source': 'tests/type-gate-free/todo-noun.txt',
35+ 'expected': 'tests/type-gate-free/expected.txt'}
36+with tempfile.TemporaryDirectory(prefix='jibb-gate-free-source-') as tmp:
37+ path = Path(tmp) / 'source.hoon'
38+ path.write_text(program)
39+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path),
40+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
41+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
42+ for name, filename in fixtures.items():
43+ command += ['--cord', name + '-text=' + str(root / filename)]
44+ result = subprocess.run(command, stdout=subprocess.PIPE)
45+if result.returncode:
46+ sys.exit(result.returncode)
47+if result.stdout != (root / 'tests/type-gate-free/expected.txt').read_bytes():
48+ sys.stderr.buffer.write(result.stdout)
49+ sys.exit('gate-free source report differs from expected')
50+print('real todo gate-free mold analysis passed')
tools/type-generic-construction-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Check source-backed generic recursive construction under eval."""
3+from pathlib import Path
4+import argparse
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+parser = argparse.ArgumentParser(description=__doc__)
12+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
13+parser.add_argument('--update', action='store_true')
14+args = parser.parse_args()
15+fixture = root / 'tests/type-generic-construction'
16+source = (root / 'tests/lib/jibb-generic-construction.hoon').read_text()
17+source = source[source.index('\n|%\n') + 1:]
18+names = ['tree', 'alias', 'client', 'alias-client', 'tree-no-event',
19+ 'no-event-client', 'owner-positive', 'owner-negative', 'sibling-values']
20+cords = [item for name in names
21+ for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
22+cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
23+ '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
24+bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n'
25+ for name in names)
26+program = ("=/ jibb .\n=/ real-prelude=@t prelude\n"
27+ "=/ real-internal=@t internal\n" + bindings +
28+ "=/ expected=wain ~\n=/ suite\n" + source +
29+ "\n^- @t\n(construction-output:suite prelude internal " +
30+ ' '.join(name + '-text' for name in names) + ")\n")
31+with tempfile.TemporaryDirectory(prefix='jibb-generic-construction-') as tmp:
32+ path = Path(tmp) / 'test.hoon'
33+ path.write_text(program)
34+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
35+ '-f', str(path), *cords], stdout=subprocess.PIPE)
36+if result.returncode:
37+ sys.exit(result.returncode)
38+expected_path = fixture / 'expected.txt'
39+if args.update:
40+ expected_path.write_bytes(result.stdout)
41+else:
42+ expected = expected_path.read_bytes()
43+ if result.stdout != expected:
44+ sys.stderr.writelines(difflib.unified_diff(
45+ expected.decode().splitlines(keepends=True),
46+ result.stdout.decode().splitlines(keepends=True),
47+ fromfile='expected.txt', tofile='actual'))
48+ sys.exit(1)
49+print('source-backed generic construction guards passed')
tools/type-generic-pattern-testnew file+52
@@ -0,0 +1,52 @@
1+#!/usr/bin/env python3
2+"""Check source-backed generic recursive pattern inference under eval."""
3+from pathlib import Path
4+import argparse
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+parser = argparse.ArgumentParser(description=__doc__)
12+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
13+parser.add_argument('--update', action='store_true')
14+args = parser.parse_args()
15+fixture = root / 'tests/type-generic-pattern'
16+shared = root / 'tests/type-generic-construction'
17+source = (root / 'tests/lib/jibb-generic-pattern.hoon').read_text()
18+source = source[source.index('\n|%\n') + 1:]
19+reused = ['tree', 'alias', 'tree-no-event']
20+names = ['client', 'no-event', 'values', 'poly-values', 'owner', 'owner-bad']
21+cords = [item for name in reused
22+ for item in ('--cord', f'{name}-text={shared / (name + ".txt")}')]
23+cords += [item for name in names
24+ for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
25+cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
26+ '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
27+bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n'
28+ for name in reused + names)
29+program = ("=/ jibb .\n=/ real-prelude=@t prelude\n"
30+ "=/ real-internal=@t internal\n" + bindings +
31+ "=/ expected=wain ~\n=/ suite\n" + source +
32+ "\n^- @t\n(pattern-output:suite prelude internal " +
33+ ' '.join(name + '-text' for name in reused + names) + ")\n")
34+with tempfile.TemporaryDirectory(prefix='jibb-generic-pattern-') as tmp:
35+ path = Path(tmp) / 'test.hoon'
36+ path.write_text(program)
37+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
38+ '-f', str(path), *cords], stdout=subprocess.PIPE)
39+if result.returncode:
40+ sys.exit(result.returncode)
41+expected_path = fixture / 'expected.txt'
42+if args.update:
43+ expected_path.write_bytes(result.stdout)
44+else:
45+ expected = expected_path.read_bytes()
46+ if result.stdout != expected:
47+ sys.stderr.writelines(difflib.unified_diff(
48+ expected.decode().splitlines(keepends=True),
49+ result.stdout.decode().splitlines(keepends=True),
50+ fromfile='expected.txt', tofile='actual'))
51+ sys.exit(1)
52+print('source-backed generic pattern guards passed')
tools/type-generic-recursion-testnew file+61
@@ -0,0 +1,61 @@
1+#!/usr/bin/env python3
2+"""Check indexed recursive source identity, aliases and cache under eval."""
3+from pathlib import Path
4+import argparse
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+parser = argparse.ArgumentParser(description=__doc__)
12+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
13+parser.add_argument('--update', action='store_true')
14+args = parser.parse_args()
15+fixture = root / 'tests/type-generic-recursion'
16+source = (root / 'tests/lib/jibb-generic-recursion.hoon').read_text()
17+source = source[source.index('\n|%\n') + 1:]
18+names = ['tree', 'changed', 'alias', 'client', 'bad-mold', 'bad-constructor',
19+ 'bad-parameter', 'local-shadow', 'local-distinct', 'local-only',
20+ 'list-shadow', 'chain', 'bad-match']
21+files = ['tree', 'tree-changed', 'alias', 'client', 'bad-mold', 'bad-constructor',
22+ 'bad-parameter', 'local-shadow', 'local-distinct', 'local-only',
23+ 'list-shadow', 'chain', 'bad-match']
24+cords = [item for name, file in zip(names, files)
25+ for item in ('--cord', f'{name}-text={fixture / (file + ".txt")}')]
26+cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
27+ '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
28+bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n'
29+ for name in names)
30+program = ("=/ jibb .\n=/ real-prelude=@t prelude\n"
31+ "=/ real-internal=@t internal\n" + bindings +
32+ "=/ expected=wain ~\n=/ suite\n" + source +
33+ "\n^- @t\n=/ invalid=(list [label=@t src=@t])\n"
34+ " :~ ['unused mold hole declined' bad-mold-text]\n"
35+ " ['invalid constructor declined' bad-constructor-text]\n"
36+ " ['invalid matching declined' bad-match-text]\n"
37+ " ['nonuniform recursion declined' bad-parameter-text]\n"
38+ " ['identical local shadow declined' local-shadow-text]\n"
39+ " ['different local shadow declined' local-distinct-text]\n"
40+ " ['local recursion declined' local-only-text]\n"
41+ " ==\n"
42+ "(generic-output:suite prelude internal tree-text changed-text alias-text client-text invalid list-shadow-text chain-text)\n")
43+with tempfile.TemporaryDirectory(prefix='jibb-generic-recursion-') as tmp:
44+ path = Path(tmp) / 'test.hoon'
45+ path.write_text(program)
46+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
47+ '-f', str(path), *cords], stdout=subprocess.PIPE)
48+if result.returncode:
49+ sys.exit(result.returncode)
50+expected_path = fixture / 'expected.txt'
51+if args.update:
52+ expected_path.write_bytes(result.stdout)
53+else:
54+ expected = expected_path.read_bytes()
55+ if result.stdout != expected:
56+ sys.stderr.writelines(difflib.unified_diff(
57+ expected.decode().splitlines(keepends=True),
58+ result.stdout.decode().splitlines(keepends=True),
59+ fromfile='expected.txt', tofile='actual'))
60+ sys.exit(1)
61+print('source-backed generic recursion guards passed')
tools/type-import-overlap-testnew file+33
@@ -0,0 +1,33 @@
1+#!/usr/bin/env python3
2+"""Run the shared source-aware overlap bridge under urbit eval."""
3+from pathlib import Path
4+import difflib
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+fixture = root / 'tests/type-import-overlap'
11+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
12+tests = (root / 'tests/lib/jibb-import-overlap.hoon').read_text()
13+tests = tests[tests.index('\n|%\n') + 1:]
14+program = ('=/ jibb .\n=/ jibb-import\n' + reader +
15+ '\n=/ sur=wain (to-wain:format sur-text)\n=/ source=wain (to-wain:format source-text)\n=/ expected=wain (to-wain:format expected-text)\n=/ bridge\n' + tests + '\n(overlap-output:bridge sur-text source-text)\n')
16+with tempfile.TemporaryDirectory(prefix='jibb-import-overlap-') as tmp:
17+ path = Path(tmp) / 'bridge.hoon'
18+ path.write_text(program)
19+ result = subprocess.run([str(root / 'tools/hoon'), '--raw', '-f', str(path),
20+ '--cord', 'sur-text=' + str(fixture / 'sur.txt'),
21+ '--cord', 'source-text=' + str(fixture / 'source.txt'),
22+ '--cord', 'expected-text=' + str(fixture / 'expected.txt')], stdout=subprocess.PIPE)
23+if result.returncode:
24+ sys.exit(result.returncode)
25+if '--capture' in sys.argv:
26+ sys.stdout.buffer.write(result.stdout)
27+ sys.exit()
28+expected = (fixture / 'expected.txt').read_bytes()
29+if result.stdout != expected:
30+ sys.stderr.writelines(difflib.unified_diff(expected.decode().splitlines(keepends=True),
31+ result.stdout.decode().splitlines(keepends=True), fromfile='expected', tofile='actual'))
32+ sys.exit(1)
33+print('source-aware overlap bridge passed')
tools/type-import-structural-testnew file+36
@@ -0,0 +1,36 @@
1+#!/usr/bin/env python3
2+"""Run the shared structural source-overlap fixture under urbit eval."""
3+from pathlib import Path
4+import difflib
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+fixture = root / 'tests/type-import-structural'
11+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
12+tests = (root / 'tests/lib/jibb-import-structural.hoon').read_text()
13+tests = tests[tests.index('\n|%\n') + 1:]
14+program = ('=/ jibb .\n=/ jibb-import\n' + reader +
15+ '\n=/ sur=wain (to-wain:format sur-text)\n'
16+ '=/ source=wain (to-wain:format source-text)\n'
17+ '=/ expected=wain (to-wain:format expected-text)\n'
18+ '=/ bridge\n' + tests + '\n(structural-output:bridge sur-text source-text)\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-import-structural-') as tmp:
20+ path = Path(tmp) / 'bridge.hoon'
21+ path.write_text(program)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--raw', '-f', str(path),
23+ '--cord', 'sur-text=' + str(fixture / 'sur.txt'),
24+ '--cord', 'source-text=' + str(fixture / 'source.txt'),
25+ '--cord', 'expected-text=' + str(fixture / 'expected.txt')], stdout=subprocess.PIPE)
26+if result.returncode:
27+ sys.exit(result.returncode)
28+if '--capture' in sys.argv:
29+ sys.stdout.buffer.write(result.stdout)
30+ sys.exit()
31+expected = (fixture / 'expected.txt').read_bytes()
32+if result.stdout != expected:
33+ sys.stderr.writelines(difflib.unified_diff(expected.decode().splitlines(keepends=True),
34+ result.stdout.decode().splitlines(keepends=True), fromfile='expected', tofile='actual'))
35+ sys.exit(1)
36+print('structural source-overlap bridge passed')
tools/type-nested-union-guards-testnew file+29
@@ -0,0 +1,29 @@
1+#!/usr/bin/env python3
2+"""Run the shared nested union context guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-nested-union-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ suite\n' + tests +
16+ '\n=/ failures=(list tape) nested-union-guard-errors:suite\n^- @t\n' +
17+ "?~ failures 'nested union guards passed'\n" +
18+ '(of-wain:format (turn failures crip))\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-nested-union-guards-') as tmp:
20+ program = Path(tmp) / 'guards.hoon'
21+ program.write_text(expression)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib,
23+ '--raw', '-f', str(program)], stdout=subprocess.PIPE)
24+if result.returncode:
25+ sys.exit(result.returncode)
26+if result.stdout != b'nested union guards passed\n':
27+ sys.stderr.buffer.write(result.stdout)
28+ sys.exit(1)
29+print('nested union context guards passed')
tools/type-request-guards-testnew file+31
@@ -0,0 +1,31 @@
1+#!/usr/bin/env python3
2+"""Run the request certificate and cache provenance guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-request-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ suite\n' + tests +
16+ '\n=/ failures=(list tape) request-guard-errors:suite\n^- @t\n' +
17+ "?~ failures 'request guards passed'\n" +
18+ '(of-wain:format (turn failures crip))\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-request-guards-') as tmp:
20+ program = Path(tmp) / 'guards.hoon'
21+ program.write_text(expression)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
23+ '--cord', 'public=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
24+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb'),
25+ '-f', str(program)], stdout=subprocess.PIPE)
26+if result.returncode:
27+ sys.exit(result.returncode)
28+if result.stdout != b'request guards passed\n':
29+ sys.stderr.buffer.write(result.stdout)
30+ sys.exit(1)
31+print('request certificate and cache guards passed')
tools/type-sub-guards-testnew file+31
@@ -0,0 +1,31 @@
1+#!/usr/bin/env python3
2+"""Run the shared sub source/typing guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-sub-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ suite\n' + tests +
16+ '\n=/ failures=(list tape) sub-guard-errors:suite\n^- @t\n' +
17+ "?~ failures 'sub guards passed'\n" +
18+ '(of-wain:format (turn failures crip))\n')
19+with tempfile.TemporaryDirectory(prefix='jibb-positional-guards-') as tmp:
20+ program = Path(tmp) / 'guards.hoon'
21+ program.write_text(expression)
22+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib,
23+ '--raw', '--cord', 'public=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
24+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb'),
25+ '-f', str(program)], stdout=subprocess.PIPE)
26+if result.returncode:
27+ sys.exit(result.returncode)
28+if result.stdout != b'sub guards passed\n':
29+ sys.stderr.buffer.write(result.stdout)
30+ sys.exit(1)
31+print('sub source/typing guards passed')
tools/type-todo-api-testnew file+62
@@ -0,0 +1,62 @@
1+#!/usr/bin/env python3
2+"""Check the exact todo API through the real /sur and mark readers."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+fixture = root / 'tests/type-api-paths/api.txt'
14+actual = root / 'my-app/ui/api/todo.jibb'
15+if fixture.read_bytes() != actual.read_bytes():
16+ sys.exit('todo API fixture differs from my-app/ui/api/todo.jibb')
17+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
18+tests = (root / 'tests/lib/jibb-todo-api.hoon').read_text()
19+tests = tests[tests.index('\n|%\n') + 1:]
20+names = ('sur', 'action', 'todos', 'update', 'item', 'api', 'source',
21+ 'negative', 'unsupported', 'expected', 'negative-expected')
22+program = ('=/ jibb .\n=/ jibb-import\n' + reader + '\n' +
23+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
24+ for name in names) +
25+ '=/ suite\n' + tests +
26+ '\n=/ out (todo-run:suite prelude internal sur-text action-text todos-text update-text item-text api-text source-text negative-text unsupported-text)\n'
27+ "^- @t\n(of-wain:format ~[report.out '===NEGATIVE===' bad-report.out '===GUARD===' guards.out])\n")
28+fixtures = {'sur': 'tests/type-api-paths/todo-sur.txt',
29+ 'action': 'tests/type-api-paths/todo-action.txt',
30+ 'todos': 'tests/type-api-paths/todos.txt',
31+ 'update': 'tests/type-api-paths/todo-update.txt',
32+ 'item': 'tests/type-api-paths/todo-item.txt',
33+ 'api': 'tests/type-api-paths/api.txt',
34+ **{name: 'tests/type-todo-api/' + name + '.txt'
35+ for name in ('source', 'negative', 'unsupported', 'expected', 'negative-expected')}}
36+with tempfile.TemporaryDirectory(prefix='jibb-todo-api-') as tmp:
37+ path = Path(tmp) / 'todo.hoon'
38+ path.write_text(program)
39+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path),
40+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
41+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
42+ for name, filename in fixtures.items():
43+ command += ['--cord', name + '-text=' + str(root / filename)]
44+ result = subprocess.run(command, stdout=subprocess.PIPE)
45+if result.returncode:
46+ sys.exit(result.returncode)
47+try:
48+ positive, rest = result.stdout.split(b'\n===NEGATIVE===\n', 1)
49+ negative, guard = rest.split(b'\n===GUARD===\n', 1)
50+except ValueError:
51+ sys.stderr.buffer.write(result.stdout)
52+ sys.exit('todo API test output was malformed')
53+if positive + b'\n' != (root / 'tests/type-todo-api/expected.txt').read_bytes():
54+ sys.stderr.buffer.write(positive + b'\n')
55+ sys.exit('todo API positive report differs from expected')
56+if negative + b'\n' != (root / 'tests/type-todo-api/negative-expected.txt').read_bytes():
57+ sys.stderr.buffer.write(negative + b'\n')
58+ sys.exit('todo API negative report differs from expected')
59+if guard != b'real todo interface and atomic guards passed\n':
60+ sys.stderr.buffer.write(guard)
61+ sys.exit('todo API interface guards failed')
62+print('real todo API reader and partial checker passed')
tools/type-todo-partial-testnew file+55
@@ -0,0 +1,55 @@
1+#!/usr/bin/env python3
2+"""Report partial inference of the unchanged todo island through real readers."""
3+from pathlib import Path
4+import argparse
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+stage = Path(__file__).resolve().parent.parent
11+parser = argparse.ArgumentParser(description=__doc__)
12+parser.add_argument('--repo', type=Path, default=stage, help=argparse.SUPPRESS)
13+parser.add_argument('--lib')
14+args = parser.parse_args()
15+root = args.repo.resolve()
16+if args.lib is None:
17+ args.lib = str(root / 'jibb-dev/lib/jibb.hoon')
18+for fixture, actual in (('tests/type-gate-free/todo.txt', 'my-app/ui/todo-list.jibb'),
19+ ('tests/type-api-paths/api.txt', 'my-app/ui/api/todo.jibb')):
20+ if (root / fixture).read_bytes() != (root / actual).read_bytes():
21+ sys.exit(f'{fixture} differs from {actual}')
22+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
23+tests = (stage / 'tests/lib/jibb-todo-partial.hoon').read_text()
24+tests = tests[tests.index('\n|%\n') + 1:]
25+names = ('sur', 'action', 'todos', 'update', 'item', 'api', 'source')
26+program = ('=/ jibb .\n=/ jibb-import\n' + reader + '\n' +
27+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
28+ for name in names) + '=/ expected=wain ~\n=/ suite\n' + tests +
29+ '\n^- @t\n(todo-island-report:suite prelude internal sur-text action-text todos-text update-text item-text api-text source-text)\n')
30+fixtures = {'sur': 'tests/type-api-paths/todo-sur.txt',
31+ 'action': 'tests/type-api-paths/todo-action.txt',
32+ 'todos': 'tests/type-api-paths/todos.txt',
33+ 'update': 'tests/type-api-paths/todo-update.txt',
34+ 'item': 'tests/type-api-paths/todo-item.txt',
35+ 'api': 'tests/type-api-paths/api.txt',
36+ 'source': 'tests/type-gate-free/todo.txt'}
37+with tempfile.TemporaryDirectory(prefix='jibb-todo-partial-') as tmp:
38+ path = Path(tmp) / 'todo.hoon'
39+ path.write_text(program)
40+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path),
41+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
42+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
43+ for name, filename in fixtures.items():
44+ command += ['--cord', name + '-text=' + str(root / filename)]
45+ result = subprocess.run(command, stdout=subprocess.PIPE)
46+if result.returncode:
47+ sys.exit(result.returncode)
48+expected = (stage / 'tests/type-todo-partial/expected.txt').read_bytes()
49+if result.stdout != expected:
50+ sys.stderr.writelines(difflib.unified_diff(
51+ expected.decode().splitlines(keepends=True),
52+ result.stdout.decode().splitlines(keepends=True),
53+ fromfile='expected.txt', tofile='actual'))
54+ sys.exit('todo partial report differs from expected')
55+print('unchanged todo partial reader report passed')