on master help sign in
343 files changed+12154−2260
since splitsnapshots
unifiedsplit
README.md+3−1 docs/compiler.md+28−2 docs/development.md+37 docs/prelude-inventory.md+7−3 docs/status.md+65−9 jibb-dev/lib/jibb.hoon+1978−81 jibb-dev/lib/jibb/internal.jibb+2 jibb-dev/lib/jibb/prelude.jibb+143 tests/golden/module-import-cycle/source.jibb+1−1 tests/golden/module-import-cycle/tokens.txt+6−6 tests/golden/module-import-cycle/tree.txt+3−3 tests/golden/module-import-identity/source.jibb+1−1 tests/golden/module-import-identity/tokens.txt+5−5 tests/golden/module-import-identity/tree.txt+3−3 tests/golden/module-import-identity/types.txt+1−1 tests/golden/module-import-transitive/source.jibb+1−1 tests/golden/module-import-transitive/tokens.txt+6−6 tests/golden/module-import-transitive/tree.txt+3−3 tests/golden/module-import-transitive/types.txt+1−1 tests/golden/module-import-unused-invalid/source.jibb+1−1 tests/golden/module-import-unused-invalid/tokens.txt+6−6 tests/golden/module-import-unused-invalid/tree.txt+3−3 tests/golden/module-import-unused-invalid/types.txt+1−1 tests/golden/types-arithmetic-module/source.jibb+1−1 tests/golden/types-arithmetic-module/tokens.txt+8−8 tests/golden/types-arithmetic-module/tree.txt+5−5 tests/golden/types-arithmetic-module/types.txt+1−1 tests/golden/types-cell-branch-context/about.txt+4 tests/golden/types-cell-branch-context/modules.txt+1 tests/golden/types-cell-branch-context/source.jibb+37 tests/golden/types-cell-branch-context/tokens.txt+308 tests/golden/types-cell-branch-context/tree.txt+156 tests/golden/types-cell-branch-context/types.txt+11 tests/golden/types-cell-pattern-schemes/source.jibb+1−1 tests/golden/types-cell-pattern-schemes/tokens.txt+7−7 tests/golden/types-cell-pattern-schemes/tree.txt+3−3 tests/golden/types-cell-pattern-schemes/types.txt+1−1 tests/golden/types-generic-result-context/source.jibb+9−9 tests/golden/types-generic-result-context/tokens.txt+65−65 tests/golden/types-generic-result-context/tree.txt+24−24 tests/golden/types-generic-result-context/types.txt+6−6 tests/golden/types-generic-union-escaping/module-trees.txt+4−4 tests/golden/types-generic-union-escaping/modules/ui/mid.jibb+1−1 tests/golden/types-generic-union-escaping/source.jibb+1−1 tests/golden/types-generic-union-escaping/tokens.txt+1−1 tests/golden/types-generic-union-escaping/tree.txt+1−1 tests/golden/types-list-patterns/about.txt+1−1 tests/golden/types-list-patterns/types.txt+1−1 tests/golden/types-nested-shallow-preserve/source.jibb+15−15 tests/golden/types-nested-shallow-preserve/tokens.txt+107−107 tests/golden/types-nested-shallow-preserve/tree.txt+61−61 tests/golden/types-nested-shallow-preserve/types.txt+20−20 tests/golden/types-pair-context/source.jibb+14−14 tests/golden/types-pair-context/tokens.txt+71−71 tests/golden/types-pair-context/tree.txt+34−34 tests/golden/types-pair-context/types.txt+19−19 tests/golden/types-partial-aura-family/source.jibb+1−1 tests/golden/types-partial-aura-family/tokens.txt+8−8 tests/golden/types-partial-aura-family/tree.txt+4−4 tests/golden/types-partial-aura-family/types.txt+1−1 tests/golden/types-partial-locals/source.jibb+2−2 tests/golden/types-partial-locals/tokens.txt+10−10 tests/golden/types-partial-locals/tree.txt+5−5 tests/golden/types-partial-locals/types.txt+1−1 tests/golden/types-prelude-bond/source.jibb+1−1 tests/golden/types-prelude-bond/tokens.txt+12−12 tests/golden/types-prelude-bond/tree.txt+6−6 tests/golden/types-prelude-bond/types.txt+1−1 tests/golden/types-prelude-cmd/source.jibb+4−4 tests/golden/types-prelude-cmd/tokens.txt+30−30 tests/golden/types-prelude-cmd/tree.txt+13−13 tests/golden/types-prelude-cmd/types.txt+7−7 tests/golden/types-prelude-lead-late/about.txt+4 tests/golden/types-prelude-lead-late/modules.txt+1 tests/golden/types-prelude-lead-late/source.jibb+10 tests/golden/types-prelude-lead-late/tokens.txt+151 tests/golden/types-prelude-lead-late/tree.txt+83 tests/golden/types-prelude-lead-late/types.txt+17 tests/golden/types-prelude-list-alias/source.jibb+1−1 tests/golden/types-prelude-list-alias/tokens.txt+9−9 tests/golden/types-prelude-list-alias/tree.txt+5−5 tests/golden/types-prelude-list-alias/types.txt+1−1 tests/golden/types-prelude-succ/about.txt+4 tests/golden/types-prelude-succ/modules.txt+1 tests/golden/types-prelude-succ/source.jibb+4 tests/golden/types-prelude-succ/tokens.txt+32 tests/golden/types-prelude-succ/tree.txt+15 tests/golden/types-prelude-succ/types.txt+11 tests/golden/types-prelude-text/about.txt+4 tests/golden/types-prelude-text/modules.txt+1 tests/golden/types-prelude-text/source.jibb+8 tests/golden/types-prelude-text/tokens.txt+66 tests/golden/types-prelude-text/tree.txt+36 tests/golden/types-prelude-text/types.txt+26 tests/golden/types-prelude-ui/about.txt+4 tests/golden/types-prelude-ui/modules.txt+1 tests/golden/types-prelude-ui/source.jibb+77 tests/golden/types-prelude-ui/tokens.txt+710 tests/golden/types-prelude-ui/tree.txt+291 tests/golden/types-prelude-ui/types.txt+84 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-recursion-scc-import/source.jibb+1−1 tests/golden/types-recursion-scc-import/tokens.txt+7−7 tests/golden/types-recursion-scc-import/tree.txt+5−5 tests/golden/types-recursion-scc-import/types.txt+1−1 tests/golden/types-union-finite-context/source.jibb+1−1 tests/golden/types-union-finite-context/tokens.txt+3−3 tests/golden/types-union-finite-context/tree.txt+2−2 tests/golden/types-union-finite-limit/about.txt+1−1 tests/golden/types-union-finite-limit/types.txt+1−1 tests/golden/types-union-nonwing-subject/source.jibb+13−13 tests/golden/types-union-nonwing-subject/tokens.txt+54−54 tests/golden/types-union-nonwing-subject/tree.txt+26−26 tests/golden/types-union-nonwing-subject/types.txt+3−3 tests/golden/types-union-runtime-equality/about.txt+3 tests/golden/types-union-runtime-equality/source.jibb+16 tests/golden/types-union-runtime-equality/tokens.txt+96 tests/golden/types-union-runtime-equality/tree.txt+37 tests/golden/types-union-runtime-equality/types.txt+25 tests/golden/types-union-source-alias/about.txt+4 tests/golden/types-union-source-alias/source.jibb+18 tests/golden/types-union-source-alias/tokens.txt+119 tests/golden/types-union-source-alias/tree.txt+41 tests/golden/types-union-source-alias/types.txt+23 tests/golden/types-unit-context/source.jibb+3−3 tests/golden/types-unit-context/tokens.txt+33−33 tests/golden/types-unit-context/tree.txt+21−21 tests/golden/types-unit-context/types.txt+15−15 tests/lib/jibb-cell-branch.hoon+53 tests/lib/jibb-deferred-context.hoon+83 tests/lib/jibb-deferred-prepared.hoon+114 tests/lib/jibb-deferred-resolver.hoon+113 tests/lib/jibb-deferred.hoon+244 tests/lib/jibb-direct-gate-source.hoon+3−3 tests/lib/jibb-empty.hoon+174 tests/lib/jibb-full-overlap-basic.hoon+143 tests/lib/jibb-full-overlap-graph.hoon+126 tests/lib/jibb-generic-construction.hoon+141 tests/lib/jibb-generic-pattern.hoon+165 tests/lib/jibb-generic-recursion.hoon+170 tests/lib/jibb-list-alias-guards.hoon+1−1 tests/lib/jibb-program-init.hoon+134 tests/lib/jibb-program-main.hoon+141 tests/lib/jibb-program-watch.hoon+209 tests/lib/jibb-request-guards.hoon+2−2 tests/lib/jibb-union-alias-overlap.hoon+107 tests/lib/jibb-union-source.hoon+152 tests/lib/jibb.hoon+1349−1301 tests/type-cell-branch/about.txt+2 tests/type-cell-branch/bad.txt+3 tests/type-cell-branch/good.txt+3 tests/type-deferred-context/about.txt+3 tests/type-deferred-context/collision-early.txt+27 tests/type-deferred-context/collision-late.txt+28 tests/type-deferred-context/dangling.txt+16 tests/type-deferred-context/duplicate.txt+14 tests/type-deferred-context/missing.txt+14 tests/type-deferred-context/plain.txt+11 tests/type-deferred-context/report.txt+15 tests/type-deferred-context/rich.txt+27 tests/type-deferred-context/simple.txt+10 tests/type-deferred-context/wrong.txt+14 tests/type-deferred-prepared/expected-control.txt+7 tests/type-deferred-prepared/expected-tuple-only.txt+4 tests/type-deferred-prepared/expected.txt+8 tests/type-deferred-prepared/good.txt+9 tests/type-deferred-prepared/imported.txt+11 tests/type-deferred-prepared/main.txt+10 tests/type-deferred-prepared/mold-collision.txt+9 tests/type-deferred-prepared/no-final-cast.txt+8 tests/type-deferred-prepared/no-prelude.txt+9 tests/type-deferred-prepared/tuple-only.txt+3 tests/type-deferred-prepared/unrelated-tag.txt+11 tests/type-deferred-prepared/wrong-draft.txt+9 tests/type-deferred-prepared/wrong-unit.txt+9 tests/type-deferred-resolver/about.txt+5 tests/type-deferred-resolver/conflict.txt+12 tests/type-deferred-resolver/duplicate.txt+12 tests/type-deferred-resolver/expected.txt+42 tests/type-deferred-resolver/face.txt+6 tests/type-deferred-resolver/good.txt+11 tests/type-deferred-resolver/hole.txt+12 tests/type-deferred-resolver/missing.txt+10 tests/type-deferred-resolver/stability-early.txt+6 tests/type-deferred-resolver/stability-late.txt+6 tests/type-deferred-resolver/stability-output-early.txt+9 tests/type-deferred-resolver/stability-output-late.txt+9 tests/type-deferred-resolver/stability-simple-early.txt+6 tests/type-deferred-resolver/stability-simple-late.txt+6 tests/type-deferred-resolver/stability-slot-early.txt+9 tests/type-deferred-resolver/stability-slot-late.txt+9 tests/type-deferred-resolver/store.txt+12 tests/type-deferred/about.txt+3 tests/type-deferred/conflict-src.txt+12 tests/type-deferred/duplicate-src.txt+12 tests/type-deferred/expected.txt+38 tests/type-deferred/face-bad-src.txt+6 tests/type-deferred/face-good-src.txt+6 tests/type-deferred/hole-src.txt+12 tests/type-deferred/local-src.txt+8 tests/type-deferred/missing-src.txt+10 tests/type-deferred/mold-hole-src.txt+12 tests/type-deferred/mutual-src.txt+7 tests/type-deferred/nested-src.txt+7 tests/type-deferred/principal-src.txt+11 tests/type-direct-gate/expected.txt+11−11 tests/type-direct-gate/source.txt+3−3 tests/type-empty/about.txt+3 tests/type-empty/dead.txt+7 tests/type-empty/expected.txt+59 tests/type-empty/face-source.txt+2 tests/type-empty/good.txt+11 tests/type-empty/late-cap.txt+16 tests/type-empty/list-dead.txt+4 tests/type-empty/list-live.txt+3 tests/type-empty/list-open.txt+3 tests/type-empty/missing.txt+6 tests/type-empty/overlap.txt+3 tests/type-empty/standard-good.txt+11 tests/type-empty/unit-dead.txt+4 tests/type-full-overlap/about.txt+3 tests/type-full-overlap/child.txt+4 tests/type-full-overlap/distinct.txt+5 tests/type-full-overlap/duplicate-generic.txt+4 tests/type-full-overlap/duplicate.txt+5 tests/type-full-overlap/expected-basic.txt+16 tests/type-full-overlap/expected-graph.txt+8 tests/type-full-overlap/generic.txt+4 tests/type-full-overlap/invalid.txt+4 tests/type-full-overlap/parent.txt+5 tests/type-full-overlap/precedence.txt+5 tests/type-full-overlap/same.txt+4 tests/type-full-overlap/unsupported.txt+4 tests/type-full-overlap/zero.txt+4 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+10 tests/type-generic-pattern/client.txt+166 tests/type-generic-pattern/expected.txt+91 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+18 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-list-alias/expected.txt+4−4 tests/type-program-main/about.txt+1 tests/type-program-main/alias-main.txt+11 tests/type-program-main/arbitrary-main.txt+10 tests/type-program-main/consumer.txt+2 tests/type-program-main/gate-data.txt+10 tests/type-program-main/gate-model.txt+11 tests/type-program-main/initializer-consumer.txt+2 tests/type-program-main/initializer-earlier.txt+10 tests/type-program-main/initializer-error.txt+10 tests/type-program-main/initializer-generic.txt+10 tests/type-program-main/initializer-message.txt+13 tests/type-program-main/initializer-missing.txt+9 tests/type-program-main/initializer-model.txt+11 tests/type-program-main/initializer-no-main.txt+10 tests/type-program-main/initializer-subs.txt+10 tests/type-program-main/initializer-tag.txt+13 tests/type-program-main/initializer-unfaced.txt+10 tests/type-program-main/initializer.txt+12 tests/type-program-main/mismatched-model.txt+10 tests/type-program-main/nonempty-subs.txt+12 tests/type-program-main/open-message.txt+7 tests/type-program-main/source.txt+12 tests/type-program-watch/about.txt+1 tests/type-todo-partial/expected.txt+2−2 tests/type-union-alias-overlap/duplicate.txt+5 tests/type-union-alias-overlap/expected.txt+25 tests/type-union-alias-overlap/flag-source.txt+7 tests/type-union-alias-overlap/multi.txt+5 tests/type-union-alias-overlap/negative.txt+16 tests/type-union-alias-overlap/nonzero.txt+4 tests/type-union-alias-overlap/opaque.txt+4 tests/type-union-alias-overlap/positive.txt+8 tests/type-union-alias-overlap/qualified.txt+5 tests/type-union-alias-overlap/wrong.txt+5 tests/type-union-source/direct-source.txt+3 tests/type-union-source/duplicate-params.txt+4 tests/type-union-source/duplicate.txt+5 tests/type-union-source/expected.txt+36 tests/type-union-source/free-source.txt+4 tests/type-union-source/good.txt+9 tests/type-union-source/hidden-ref.txt+5 tests/type-union-source/late-source.txt+4 tests/type-union-source/mixed-source.txt+8 tests/type-union-source/nested.txt+4 tests/type-union-source/qualified.txt+4 tests/type-union-source/same.txt+5 tests/type-union-source/shadow-source.txt+7 tests/type-union-source/wide-source.txt+4 tests/type-union-source/wrong.txt+5 tests/type-union-source/zero.txt+5 tools/testdata/lead-late-hoon-reference.hoon+24 tools/testdata/ship-selftest+83−1 tools/testdata/succ-hoon-reference.hoon+9 tools/testdata/zing-hoon-reference.hoon+17 tools/type-cell-branch-test+43 tools/type-deferred-context-test+31 tools/type-deferred-prepared-test+49 tools/type-deferred-resolver-test+33 tools/type-deferred-test+32 tools/type-empty-test+55 tools/type-full-overlap-test+49 tools/type-generic-construction-test+49 tools/type-generic-pattern-test+52 tools/type-generic-recursion-test+61 tools/type-program-init-test+49 tools/type-program-main-test+46 tools/type-program-watch-test+48 tools/type-union-alias-overlap-test+52 tools/type-union-source-test+55
README.md+3−1
@@ -42,7 +42,9 @@ 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-import-overlap-test`, `tools/type-import-structural-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-union-source-test`, `tools/type-union-alias-overlap-test`, `tools/type-full-overlap-test`, `tools/type-generic-recursion-test`, `tools/type-generic-construction-test`, `tools/type-generic-pattern-test`, `tools/type-deferred-test`, `tools/type-deferred-prepared-test`, `tools/type-deferred-resolver-test`, `tools/type-deferred-context-test`, `tools/type-empty-test`, `tools/type-cell-branch-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.
46+
47+The focused `tools/type-program-main-test` checks the narrow closed, subscription-free `main` slice and its shared fake-ship fixture. `tools/type-program-init-test` checks transactional initializer recovery for a synthetic direct program, including exact exported and imported types and rejection boundaries. `tools/type-program-watch-test` uses the real todo readers with synthetic program components to check one direct request value against merged API-source evidence and reject hand-built, indirect, parameterized, diff and ambiguous subscriptions. These are static checks only: they do not run an island or establish runtime watching.
4648
4749### The doc's examples
4850
docs/compiler.md+28−2
@@ -56,7 +56,7 @@ The core is split into chapters, `+| %name`, in this order:
5656| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
5757| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
5858
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a 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. 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 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.
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.
6060
6161A 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.
6262
@@ -66,6 +66,8 @@ Before the empty-capital optimization below, single sequential eval runs includi
6666
6767Restricted-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.
6868
69+A bounded source proof can also establish distinct literal heads when a union case is a one-hop application of a uniquely resolved local generic mold. It compares literal runtime nouns and checks the original mold normally before publishing an interface. The same source proof improves the partial report, which still says the mold is not checked. The new proof declines nested or qualified applications, opaque references, recursive-index states, holes and deferred obligations; other valid unions can remain unsupported. A 256-node source budget and a separate 256-entry inherited-state budget apply per attempt. They do not bound the existing pairwise union pass, parsing, atom or name sizes, or downstream checking. Prepared interfaces and inference state remain trusted inputs. `tools/type-union-source-test` and the shared ship guard exercise source resolution, reporting, rollback and these bounds. A separate positive witness can identify overlap in two-field, literal-headed cases when a unique one-hop local, one-parameter generic alias is applied to a concrete primitive payload. It compares the literal noun values and proves the payloads have a shared noun, so an empty or unknown payload is not a witness. The partial report identifies both original case sites. `infer-jibb-file-detailed` returns structured overlap evidence for the first failed mold, including the originating path, exact source, mold name and both case spans. Ordinary Jibb imports preserve a child’s evidence through source and cache checks; the legacy `infer-jibb-file` API remains a text-result adapter and renders both excerpts. Specialized API and prepared-prelude paths retain their existing generic or text-only error boundaries. This witness uses a shared 256-node source/pair budget per attempt; generic-wrapper parameter validation has a separate 256-entry cap. An unsupported earlier case may hide a later overlap. Existing pairwise union analysis, parsing, atom and name sizes, source-excerpt rendering, and downstream checking remain outside these budgets. `tools/type-union-alias-overlap-test` checks the source proof and partial report; `tools/type-full-overlap-test` checks the detailed and legacy full-module paths, source attribution and cache behavior.
70+
6971A 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.
7072
7173String 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.
@@ -88,12 +90,16 @@ A backtick constructs a unit when the supplied prelude has the validated standar
8890
8991A known union of `~` and a null-headed cell can be matched by `~` and `[~ value]` arms in either order. The payload binder is checked for shadowing. Unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported; this fragment infers the prelude’s `fall` and `need` signatures.
9092
93+The checked inference fragment represents the empty mold `!!` explicitly. A cell with a proven-empty field is empty, while a gate returning `!!` and the empty values of `(list !!)` and `(unit !!)` remain inhabited. Supported union matches discard proven-empty cases, reject unreachable list or unit payload arms, and require a proof of reachability for fixed opaque cases. A written capital may have an inhabited instance; the existing definition-boundary checks still reject forcing it to a concrete empty type. A directly known standard `(list !!)` permits a single null arm, including in a result context. Unknown and opaque types, other one-arm list subjects, and proofs exceeding their budgets fail closed. Emptiness checks use up to 256 type-node visits per fit or list/unit reachability proof and 4,096 visits when filtering union cases. These bounds do not cover substitution walking, parsing, normalization, source lookup or repeated attempts. This is a supported checking slice, not a proof of arbitrary recursive molds or runtime execution.
94+
9195A known closed union with two or more arms can be matched when each arm provably covers or excludes each remaining case. The checker first tries whole cases; when a pattern splits a case, it can expand known `?` positions into their two noun values, up to 64 alternatives across the union. Binders retain the original case type, and one arm may bind several refinements of that case. It reports missing alternatives and arms already covered, checks tags by noun value, and supports imported and generic union cases. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. When a cast or known call sample supplies a result type, a known union subject accessed by a wing, a grouped wing or a supported shallow call can propagate that context through whole-case arms and supported finite loobean refinements, 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.
9296
9397A known closed union can also provide context to each arm of a complete loobean or unit-shaped branch in a cast or a call with a known union sample. Nested branches and transparent groups work; a mismatch reports the expected union and the offending arm. General patterns and context through bodies with local definitions remain unsupported, and unrelated unresolved tags stay pending.
9498
9599The 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.
96100
101+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. Matches over explicit source tags, flat binder or wildcard fields, and nonbinding catch-alls use that same one-layer view and existing binder, coverage and branch checks. Up to 128 arms are screened per attempt; longer matches decline. A single-arm match on a direct in-scope wing can report its missing case, and a contextual one-arm call subject can use a nonbinding catch-all. 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, whole-case binders, nested recursive patterns, uncontextualized single-arm call subjects, 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.
102+
97103Self-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.
98104
99105The 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.
@@ -122,14 +128,20 @@ A two-item tuple with an explicit term, null or loobean head can receive payload
122128
123129`+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.
124130
131+A full ordinary module may export a narrow checked program `main` only as a direct, unqualified `(program init update view subs)` call with four simple wing arguments, modulo transparent grouping. The canonical prepared prelude must supply both the `program` value and mold. The ordinary source-backed program fit and all normal mold, value and request-graph checks complete first. The inferred `main` must be closed and invariantly match an instantiated `program` mold from that prelude. The initializer must have a closed gate scheme; its data and model contain no open variables and share the existing 256-node gate-free budget, with `%yes` required for both. The named subscription gate may syntactically return null through transparent casts, groups and definition-free bodies. Alternatively, after a successful request-graph merge, it may return one singleton list containing an unfaced `[%watch request]` pair whose request is a direct `case.face` call with one direct constructor callback. The face must resolve to an imported interface whose member has the exact plain derived-request scheme. Exactly one merged request evidence must match its API path and case, agree with the declaration's inner name, and appear in that interface's own graph; the interface source must equal the evidence's API source. The declaration must have no scry, diffs or path parameters. Pure or hand-built requests, helpers, aliases, re-exports, typed paths, folds, multiple subscriptions and missing or ambiguous evidence fail closed. Arbitrary or aliased mains, API/store kinds, and gates or unknowns in data/model also fail closed. This retains source and graph evidence and permits ordinary downstream imports; it neither executes the program nor implements runtime watching.
132+
133+When only that program's initializer and `main` are unresolved, a bounded transactional retry can derive the initializer's expected gate from the resolved update, view and subscription components. It instantiates all schemes above the greatest variable ID in the module and prelude, reuses the source-backed positional fit and stable replay, and leaves only the initializer's data variable open. The named initializer must be a direct gate whose transparent body is a tuple ending in null. Its own sample fixes data; ordinary inference, product and whole-gate fits, pending-tag and finalization checks, and a fresh ordinary `main` inference must all succeed before the ordinary kind and graph checks publish anything. Aliases, non-main libraries, simultaneous unresolved subscriptions, nonempty subscriptions and unrelated pending tags decline.
134+
125135Each 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.
126136
127137`+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.
128138
129−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`, `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. 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.
139+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`, `curr`, `lead`, `late`, `trip` and `tuba`; 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, arithmetic and text-conversion schemes for the Jibb-written `gth`, `add`, `dec`, `trip` and `tuba` 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. The Jibb-written `lead` and `late` are curried pair constructors: `((lead a) b)` returns `[a b]`, while `((late a) b)` returns `[b a]`. The checker infers independent argument types and accepts gates as ordinary values; neither helper invokes an input gate. A Hoon translation is compared with Hoon’s helpers by `tools/hoon --raw -f tools/testdata/lead-late-hoon-reference.hoon`. This 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.
130140
131141`+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.
132142
143+The prepared interface includes the source-backed UI molds and constructors, the full nonrecursive `element` union, and the exact `program` and `page` records and builders. Its element union erases nested child, keyed-item and table payloads to `*`, while public constructor schemes retain typed composition and independent key parameters. `types-prelude-ui` checks those schemes and selected valid and invalid compositions. A child-message mismatch currently fails closed as an unsupported list-item constraint rather than a definite mismatch diagnostic. Raw-constructor encapsulation, duplicate-attribute checks, rendering, navigation, storage and execution remain outside this slice.
144+
133145And the design notes:
134146
135147| Note | Says |
@@ -183,3 +195,17 @@ Note 4 has examples of each.
183195## Speed
184196
185197Starting `urbit eval` and building the library takes about 8 s. A 2,000-line module of 400 definitions then parses in about a second. Loops over definitions, arms, lines and items are tail calls, so a long module grows no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (note 3).
198+
199+The experimental deferred constructor path can close a small import-free library transaction when ordinary resolution stalls. It retries definitions whose earlier attempts failed from their original states, retaining only successful attempts. A transaction with at most 64 definitions makes at most 4,096 attempts; it stops after a pass with no progress. This bounds the new attempt count, not each attempt's parsing, type walks or ordinary inference. Deferred definitions are restricted to simple one-component wings, literals, static strings, gates, transparent groups and empty bodies, calls, casts and a restricted boolean branch. Each successful call or cast fit must have exactly equal normalized operands so later substitutions cannot invalidate a face check. A multi-argument call also needs closed argument, sample and product types because positional face checks depend on slot boundaries and whether the result can be a cell. Other fits fail closed. A 512-node screen bounds visited expression nodes and a separate 512-node scan bounds each stability check; neither bounds mold shapes, string-piece checks, parsing, normalization, lookup, or total repeated inference. It accepts only a direct constructor callback with a closed input, records its pending fit under the source-owned inference state, and generalizes each definition against the live environment and pending constraints. Before publication it discharges and replays every edge, rejects unresolved tags or changed replay state, and checks that all molds and values are complete. The reporter reads the committed schemes for definitions added by the transaction. API and store paths, `main`, prepared-prelude recovery, imports, recursive groups, unresolved holes or written capitals, and new projection actions remain outside this full-module path. `%grec` in the constraint or freshness scan is conservatively unsupported. This is not an island-kind, runtime, or watchability check.
200+
201+An expected cell type can supply context to both arms of a loobean branch. This slice first retains any ordinary inference that already fits. Otherwise it retries from the original state only when a syntax screen excludes nested branches, casts, gates and local bodies, and a substitution screen excludes structural bindings. Both arms must fit, their normalized results and the expected type must be closed, their result types must match, and both fits must replay without changing the final substitution or fresh-ID counter. A successful retry retains the original arm type and its written faces; a failed retry returns the original inference result. The source and substitution screens each visit at most 512 entries. This permits at most one extra attempt for an eligible branch; the screens do not bound preexisting inference, type walks, list construction, or work across separate analyses.
202+
203+In an isolated diagnostic with the real todo API and reader inputs, this cell context allowed the original update body to infer when its result type was written explicitly and experimental source-defined text helpers were supplied. The unchanged island still needs those text helpers, an actual source-backed `program` and UI interface, context propagation across definitions, island-kind checking and watchability proof. This branch change itself provides no runtime implementation or watchability evidence.
204+
205+A deferred boolean branch must use both distinct literal loobean patterns. Its subject is unified with `?`; the arms are inferred in source order without contextual retry. Equal normalized arm types are retained directly. When both written arms are direct literals that each created their own unbound pending tag, the checker can instead retain two source-owned fit obligations to a shared, monomorphic result variable. A later definition may close that variable; replay uses the ordinary literal fit, requires a closed atomic target or a union of direct constant/cell cases, and rejects faced targets and faced union cases. It replays all edges under the final substitution without adding bindings or fresh IDs. This does not support deferred list literals, union-pattern reachability, arbitrary branch expressions or prepared-prelude/imported modules. It does not establish request watchability.
206+
207+With the caller's unchanged prepared prelude, the partial report can also recover a narrow import-free, non-main ordinary library initializer. A direct tuple literal may retain one source-owned fit obligation for each newly created pending literal until a later exact result cast closes them. A separate bounded candidate screen admits a direct tuple even without a constructor call. The prepared transaction requires exact agreement among the supplied interface, value inventory and reserved molds, and retains the API, store, import and `main` exclusions. It only adds recovered entries to the partial report: the ordinary full-module resolver does not publish them. Wrong unit or draft fields, unrelated pending tags and mold-name collisions fail closed; without the later final cast, the initializer remains not checked. This does not add list-literal deferral or import-aware recovery.
208+
209+Before the no-prepared-prelude fallback, the checker screens the already parsed source for a direct single-constructor call beneath groups, gates, casts or bodies without local definitions. The screen visits at most 64 AST nodes per definition and rejects sources with more than 64 definitions or 65,536 bytes. A transaction is attempted at most once per resolver or report invocation and holds at most 64 pending edges. These limits do not bound the initial parsing, ordinary resolution, normalization, or total work across separate analyses. On the pre-recursive-index snapshot, startup-inclusive synthetic 1,000-gate comparisons had baseline/candidate user times of 25.97/29.30 seconds and 26.30/27.46 seconds in reverse order. These are limited shared-load measurements, not production benchmarks. The trimmed source-backed and direct-guard fixture passed in 28.13 seconds wall and 27.53 seconds user on one run after screening; its cases include parse-success checks in the same transaction source pass. The outer resolver and reporter each parse independently, and a fallback currently parses the source again.
210+
211+A single sequential, startup-inclusive comparison against checkpoint `c96597d` measured user CPU for an unrelated stalled library at 25.04 seconds baseline and 26.32 seconds with the screened fallback; an incompatible constructor took 25.72 and 27.16 seconds; a direct constructor that the baseline declined and the candidate resolved took 24.46 and 26.79 seconds. These are small shared-load measurements, not a production benchmark. The screen was separately checked with a trapping fallback: the unrelated source skipped it, while the eligible conflicting source reached it.
docs/development.md+37
@@ -14,6 +14,8 @@ From the plan's Setup and ground rules, and from @iko:
1414- **Push straight to `master`.** @iko reviews work in the project's chat, not in pull requests, so there are none. Run the checks below first.
1515- **Keep docs/ current**: [status.md](status.md) when a milestone moves, [open-questions.md](open-questions.md) when a question is settled or found.
1616
17+The source-backed generic-union guard can be run under eval with `tools/type-union-source-test`; its `test-union-source` arm is also assembled for the fake ship. It checks a bounded partial inference slice, not general union completeness. `tools/type-union-alias-overlap-test` exercises the separate positive overlap witness and its shared ship test arm. `tools/type-full-overlap-test` checks structured full-module overlap evidence and the legacy error text under eval; both of its test arms are assembled for the fake ship.
18+
1719## Setting up a machine
1820
1921The tools need Python 3 and `urbit` (vere) on `PATH`; the ship tools also need a fake `~zod` and click. Everything so far ran with vere 4.6 on Linux.
@@ -64,6 +66,9 @@ git clone https://github.com/urbit/tools /root/src/tools
6466| `tools/type-import-test` | Composes the Hoon importer with the partial checker and compares `tests/type-import/expected.txt` under eval |
6567| `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 |
6668| `tools/type-import-structural-test` | Checks multi-case and nested Hoon union overlap witnesses under eval and on the ship |
69+| `tools/type-union-source-test` | Checks bounded local generic-alias disjointness and state guards under eval and on the ship |
70+| `tools/type-union-alias-overlap-test` | Checks source-backed generic-alias overlap witnesses under eval and on the ship |
71+| `tools/type-full-overlap-test` | Checks structured full-module overlap evidence and imported-source attribution |
6772| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
6873| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
6974| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
@@ -72,15 +77,27 @@ git clone https://github.com/urbit/tools /root/src/tools
7277| `tools/type-api-evidence-test` | Runs source, scope, reader-result and declaration-watchability evidence guards under eval and on the ship |
7378| `tools/type-hole-guards-test` | Runs the shared hole-defaulting and API interface guards under eval; the same checks run on the ship |
7479| `tools/type-list-alias-test` | Runs the shared prelude list-alias and provenance guards under eval and on the ship |
80+| `tools/type-generic-recursion-test` | Checks source-backed generic recursive identity and provenance under eval and on the ship |
81+| `tools/type-generic-construction-test` | Checks source-backed one-layer recursive construction, provenance and fuel under eval and on the ship |
82+| `tools/type-generic-pattern-test` | Checks source-backed recursive patterns, catch-all coverage, state and per-attempt fuel/arm limits under eval and on the ship |
83+| `tools/type-deferred-test` | Checks the bounded source-owned deferred inference transaction under eval and on the ship |
84+| `tools/type-deferred-resolver-test` | Checks deferred resolution, report consistency and atomic failure under eval and on the ship |
85+| `tools/type-deferred-context-test` | Checks deferred source order and literal branch contexts under eval and on the ship |
86+| `tools/type-deferred-prepared-test` | Checks prepared-prelude tuple initializer recovery, exact partial reports and fail-closed guards under eval and on the ship |
87+| `tools/type-cell-branch-test` | Checks closed-cell branch context, rollback and bounded retry screens under eval and on the ship |
7588| `tools/type-generic-alias-test` | Runs public/private generic union alias and provenance guards under eval and on the ship |
7689| `tools/type-positional-face-guards-test` | Runs positional-call and nested-face guards under eval and on the ship |
7790| `tools/type-qath-guards-test` | Runs source-provenance, recursive unfolding and face guards under eval and on the ship |
7891| `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 |
7992| `tools/type-todo-api-test` | Exercises the actual todo API through the real Hoon readers and partial checker |
8093| `tools/type-direct-gate-test` | Checks a synthetic source-backed program report and direct gate provenance under eval and on the ship |
94+| `tools/type-program-main-test` | Checks the narrow closed subscription-free program-main interface, downstream import and rejection guards under eval and on the ship |
95+| `tools/type-program-init-test` | Checks transactional direct-program initializer recovery, exact exported/imported types and fail-closed boundaries under eval and on the ship |
96+| `tools/type-program-watch-test` | Checks direct singleton request-value watchability against merged real-todo evidence, exact types/imports and rejection boundaries under eval and on the ship |
8197| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
8298| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
8399| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
100+| `tools/type-empty-test` | Checks source-backed empty molds, inhabitedness, coverage and proof budgets under eval and on the ship |
84101| `tools/type-gate-free-guards-test` | Checks bounded gate-free verdicts, inhabitation and witness paths under eval and on the ship |
85102| `tools/type-gate-free-source-test` | Checks source-backed todo mold analysis through the real readers under eval and on the ship |
86103| `tools/type-sub-guards-test` | Checks source-backed subscription mold dependencies under eval and on the ship |
@@ -103,11 +120,15 @@ git clone https://github.com/urbit/tools /root/src/tools
103120
104121```
105122tools/golden # all cases pass
123+tools/golden --case types-prelude-ui # exact UI/program/page schemes and composition
106124tools/importer-test # Hoon importer fixture projections match
107125tools/type-import-default-test # default-wrapped source proofs match
108126tools/type-import-test # importer/checker bridge golden report matches
109127tools/type-import-overlap-test # source-aware Hoon overlap and provenance controls
110128tools/type-import-structural-test # nested and multi-case Hoon overlap controls
129+tools/type-union-source-test # local generic-alias union guards
130+tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
131+tools/type-full-overlap-test # full-module overlap evidence
111132tools/type-tlon-test # real Tlon importer/checker report matches
112133tools/type-import-diagnostic-test # direct structured reader diagnostics match
113134tools/type-mark-test # mark/checker bridge golden report matches
@@ -122,9 +143,20 @@ tools/type-qath-guards-test # qath source and unfolding guards pass
122143tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
123144tools/type-todo-api-test # real todo API partial inference and reader guards pass
124145tools/type-direct-gate-test # direct gate source and provenance guards pass
146+tools/type-program-main-test # closed program-main interface and rejection guards pass
147+tools/type-program-init-test # transactional direct-program initializer context guards pass
148+tools/type-generic-recursion-test # source-backed recursive identities and provenance
149+tools/type-generic-construction-test # source-backed recursive construction and bounds
150+tools/type-generic-pattern-test # source-backed recursive patterns and bounds
151+tools/type-deferred-test # source-owned deferred inference guards
152+tools/type-deferred-resolver-test # resolver consistency and failure guards
153+tools/type-deferred-context-test # deferred source-order and branch guards
154+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
155+tools/type-cell-branch-test # contextual branch rollback and bounds
125156tools/type-closed-gate-guards-test # closed gate fit guards pass
126157tools/type-constructor-fit-guards-test # constructor fit guards pass
127158tools/type-nested-union-guards-test # nested union selector guards pass
159+tools/type-empty-test # empty mold and uninhabited-case guards pass
128160tools/type-gate-free-guards-test # bounded gate-free classifier guards pass
129161tools/type-gate-free-source-test # real todo mold analysis and source guards pass
130162tools/type-sub-guards-test # subscription source guards pass
@@ -135,6 +167,9 @@ tools/type-arithmetic-guards-test # arithmetic constraint guards pass
135167tools/type-module-scope-test # module/prelude scope golden report matches
136168tools/hoon check-spans-test # prints <<>>
137169tools/hoon itype-unify-test # type-unification controls pass
170+tools/hoon -f tools/testdata/zing-hoon-reference.hoon # Hoon translation agrees on four inputs
171+tools/hoon -f tools/testdata/lead-late-hoon-reference.hoon # Hoon translation agrees on selected inputs
172+tools/hoon -f tools/testdata/succ-hoon-reference.hoon # Hoon translation agrees on selected inputs
138173tools/testdata/selftest # 22 checks, 0 failed
139174tools/doc-blocks docs/spec # every jibb block has its case
140175tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
@@ -186,3 +221,5 @@ Write `source.jibb` and `about.txt` by hand, run `tools/golden --update --case <
186221## Commits
187222
188223A short subject in the imperative, then a body that says what changed and why, wrapped at 72 columns, as in `git log`. Each commit leaves every check passing.
224+
225+`tools/type-deferred-test` exercises the bounded, source-owned constructor transaction and low-level freshness/replay guards. `tools/type-deferred-resolver-test` checks the experimental import-free library resolver, report consistency, atomic failure, and that both source orders of a late face constraint decline. `tools/type-deferred-prepared-test` checks the separate partial-report-only prepared-prelude route, direct tuple-literal obligations, exact report types and its wrong-field, unrelated-tag, mold-collision and no-final-cast controls. These checks do not establish island-kind or watchability support.
docs/prelude-inventory.md+7−3
@@ -8,6 +8,8 @@ The vendored prelude defines `poke` in its private internal module and re-export
88
99The 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
11+The public prelude now defines the UI `length`, `align`, `role`, `tone` and `attr` molds, a nonrecursive generic `element` union with one case per UI node, and the exact `program` and `page` records with their builders. Nested child, keyed-item and table payloads in the runtime union are erased to `*`; the public constructors retain typed children and independent key types, and `island` stores `[program data]` in its erased payload. The focused `types-prelude-ui` golden infers the complete union and constructor schemes, including static and message-bearing composition. Raw-constructor encapsulation, duplicate-attribute rejection, rendering, storage, navigation and execution are not established by this slice.
12+
1113Hoon `+$` 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.
1214
1315## 1a
@@ -26,7 +28,7 @@ The source-backed `gth` gate calls a compiler-supplied private comparison interf
2628
2729`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
2830
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.
31+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 and jet recognition remain outstanding for all of them.
3032
3133| Name | Hoon behavior | Jibb status |
3234| --- | --- | --- |
@@ -49,7 +51,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
4951
5052`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`.
5153
52−The current prelude writes `snoc`, `lure`, `flop`, `join`, `lent`, `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`, `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.
54+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. `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.
5355
5456## 2c
5557
@@ -99,7 +101,7 @@ The current prelude writes `snoc`, `lure`, `flop`, `join`, `lent`, `levy`, `lien
99101
100102`aftr`, `cork`, `corl`, `cury`, `curr`, `fore`, `head`, `same`, `succ`, `tail`, `test`, `lead`, `late`.
101103
102−The source-backed `cork` and `corl` compose gates forward and backward, respectively; `cury` and `curr` bind the first and second item of an unfaced pair. The partial checker infers their polymorphic types. Their runtime implementations remain to be validated by a backend.
104+The source-backed `cork` and `corl` compose gates forward and backward, respectively; `cury` and `curr` bind the first and second item of an unfaced pair. `succ` increments an atom through `add`; the partial checker infers a shared atom type excluding loobeans. A Hoon translation agrees with Hoon on ten selected inputs; Jibb execution and jet recognition remain unverified. `lead` and `late` are curried pair constructors: `((lead a) b)` returns `[a b]`, and `((late a) b)` returns `[b a]`. Their arguments may have independent types, including gate values, and neither constructor invokes a gate. The partial checker infers their polymorphic types. A Hoon translation agrees with Hoon’s helpers on selected inputs, but this is not Jibb execution; lowering and jet recognition remain to be validated by a backend.
103105
104106## 2o
105107
@@ -162,6 +164,8 @@ The compiler-result `tone.hoon` has the three cases listed above; the qualified
162164
163165`at`, `cass`, `cuss`, `crip`, `mesc`, `runt`, `sand`, `sane`, `ruth`, `trim`, `trip`, `teff`, `taft`, `tuba`, `tufa`, `tuft`, `wack`, `wick`, `woad`, `wood`.
164166
167+The prelude writes `trip` and `tuba` over private primitives. Their inferred types are `$-(@t (list @tD))` and `$-((list @tD) (list @c))`, matching the target ship's Hoon 135 definitions. Composition with `lent` and invalid argument controls pass in the partial checker; primitive lowering, execution and jet recognition remain unfinished.
168+
165169## 4k
166170
167171`co`.
docs/status.md+65−9
@@ -1,6 +1,6 @@
11# Status
22
3−As of 2026-10-31. The plan is [spec/implementation-plan.md](spec/implementation-plan.md); each milestone ends with its checks passing on a fake ship.
3+As of 2026-11-01. The plan is [spec/implementation-plan.md](spec/implementation-plan.md); each milestone ends with its checks passing on a fake ship.
44
55| # | Milestone | Status |
66| --- | --- | --- |
@@ -23,9 +23,21 @@ 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. 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.
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 explicit tags or nonbinding catch-alls also work for these source-proven trees, as does a missing-case diagnostic for a supported single-arm match. At most 128 arms are screened per attempt; whole-case binders and nested patterns remain unsupported. 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+A bounded local source proof recognizes a narrow class of generic-alias union cases with different literal heads, then applies the ordinary mold checks. Nested or qualified aliases and several open states remain unsupported, including a valid alias used during the deferred transaction; the partial report states that the mold itself has not been checked. `tools/type-union-source-test` exercises the source and state bounds and failure paths under eval and on the ship. A separate bounded witness now reports proven collisions between supported literal-headed aliases, with both original case sites; unknown payload intersections still decline. The detailed full-module result now carries the first failed mold’s source-bound overlap evidence, including through ordinary Jibb imports; the legacy text result renders both case excerpts. Specialized API and prelude paths remain limited. The shared guards pass under eval and on the ship.
31+
32+The checker can experimentally discharge a narrowly scoped direct-constructor constraint while resolving an import-free library without a prepared prelude. It preserves independent generalized schemes and publishes only after all source molds, values, and recorded constraints close. API/store paths, `main`, imports, prepared preludes, recursive groups, open constraints, projection actions, and `%grec` in the constraint graph remain unsupported by this route. The fallback also declines source shapes outside its bounded direct-call screen. It does not yet typecheck the unchanged todo island or establish watchability.
33+
34+A prepared-prelude partial report can recover a narrow import-free, non-main ordinary library initializer by deferring source-owned literals in a direct tuple until a later exact result cast. The prepared interface and declared-name inventories must agree exactly. API/store paths, `main` and imports remain excluded, and the ordinary full-module resolver does not publish the recovered interface. Wrong field types, unrelated tags and mold collisions fail closed; a no-final-cast control remains unchecked. `tools/type-deferred-prepared-test` checks the exact recovered types and unchanged `partial inference; module not checked` disclaimer under eval and on the ship. List-literal deferral and import-aware recovery remain unsupported.
35+
36+Closed cell context can now flow through a bounded loobean branch while preserving the inferred value faces and original failed-inference behavior. Open or structurally uncertain substitutions and nested retry shapes remain unsupported. This does not by itself provide the remaining cross-definition context or complete island-kind and watchability checks needed by the unchanged todo island.
37+
38+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 general island watch checking remain unimplemented; the separate direct-program proof below covers only one narrow static value shape.
39+
40+The public prelude now contains the source-backed UI length/attribute molds, all element constructors, and exact program/page records and builders. The full 19-case generic `element` union is nonrecursive: nested child, keyed-item and table payloads are `*`, while public constructor schemes preserve typed composition and independent key types. `island` returns `(element !!)` with `[program data]` as its erased payload. The focused UI golden checks exact schemes, static and message-bearing composition, concrete programs/pages/islands, malformed inputs and selected mismatches. A child-message mismatch fails closed as an unsupported constraint. Raw-constructor encapsulation, duplicate-attribute checks, rendering, storage, navigation and execution are not claimed.
2941
3042Known 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.
3143
@@ -33,7 +45,9 @@ A separate source-backed analysis can prove one named mold gate-free, report a d
3345
3446The 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.
3547
36−The 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.
48+A narrow full-module path now checks direct four-wing `(program init update view subs)` definitions named `main`. It requires the canonical prepared `program` value and mold, reuses ordinary source-backed program fitting, and publishes only after all ordinary module and request-graph checks. The inferred `main` must be closed and invariantly match the instantiated `program` mold. Initializer data and model must be closed and gate-free with `%yes` verdicts inside a shared 256-node budget. `subs` may syntactically return null through transparent forms, or one direct imported request watch after the request graph merges. The latter is only an unfaced two-item `[%watch (case.face |=%callback)]` singleton: the imported member must have the exact plain derived-request scheme, a unique merged request must match the API path and both case names and occur in the interface's own graph, the API source must be identical, and scry, diffs and parameters must be absent. Pure or hand-built values, helpers, aliases, re-exports, typed paths, folds, multiple watches and unknown or ambiguous evidence remain rejected. Checked interfaces retain source evidence and support ordinary downstream imports; no program execution or runtime watching is claimed. A transactional extension can recover a direct initializer whose transparent tuple body ends in null when update, view and subs are already resolved. It derives the expected gate through the ordinary positional program fit with fresh IDs and stable replay, then re-infers the actual initializer and `main` under all ordinary finalization and kind checks. Non-main libraries, aliases, nonempty or simultaneously unresolved subscriptions, and unrelated pending tags remain rejected.
49+
50+The 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. This remains declaration evidence rather than proof about an arbitrary request value. The narrow direct-program check above composes it with final value syntax, resolved imports and merged evidence for one plain request. Prepared artifacts and reader results remain trusted host inputs.
3751
3852For 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.
3953
@@ -47,10 +61,22 @@ The repository spec records the subsequent type-system and prelude decisions, in
4761
4862The 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.
4963
64+The prelude has a Jibb-written `succ` gate that increments through `add`; partial inference retains its arithmetic atom constraint. A Hoon translation agrees with Hoon on ten selected inputs. Jibb execution and jet recognition remain unverified.
65+
66+The prelude has Jibb-written curried `lead` and `late` pair constructors, inferred with independent argument types including gate values. Their focused golden passes under eval and on the ship, and a Hoon-reference comparison covers operand order. Jibb backend execution remains unverified.
67+
68+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.
69+
70+The experimental deferred constructor transaction conservatively declines general structural tuple fits, most branches, field reads, nonidentical successful call/cast fits, and multi-argument calls with open argument, sample or result types. This prevents a later substitution from invalidating an earlier face-propagation check; cases requiring deferred structural fits remain unsupported. It can retry source definitions after later dependencies become available, and a two-arm boolean branch can retain separately owned literal-result obligations until a later closed context resolves them. Faced targets or union cases, list literals and general union-pattern branches remain unsupported.
71+
72+The checked inference slice now represents `!!`, proves empty cell positions and filters proven-empty union cases. List and unit payload arms whose elements are empty are rejected as unreachable; fixed opaque cases fail closed when reachability is unknown. The new shared guard covers checked interfaces, partial diagnostics and proof budgets. Its shared guard runs under eval and on the ship.
73+
5074An 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.
5175
5276The 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.
5377
78+The prelude also writes `trip` and `tuba` over private primitives, with inferred cord, tape and UTF-32 list types matching the target ship's Hoon 135 definitions. Their composition with `lent` and invalid argument controls pass under eval and on the ship; primitive lowering, execution and jet recognition remain unfinished. In the unchanged todo report, `update` now reaches its remaining branch-context limitation instead of failing on missing text names.
79+
5480The 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.
5581
5682Restricted-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.
@@ -71,8 +97,8 @@ What the plan asks for, and where it is:
7197
7298Besides the plan's list:
7399
74−- 652 golden cases: 432 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.
75−- The 652-case corpus passed under `urbit eval` in 112.2 s while other checks were running. The fake ship passed all 686 tests, including the source-overlap and structural-overlap 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 83.2 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.
100+- 660 golden cases: 440 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.
101+- The 660-case corpus passed under `urbit eval` in 103.0 s while other checks were running. The fake ship passed all 710 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch 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 101.4 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.
76102- `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.
77103- 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.
78104- 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).
@@ -174,19 +200,38 @@ Besides the plan's list:
174200| 4da6891 | 2026-10-31 | Add source-backed comparisons and nested Hoon union controls |
175201| 09db390 | 2026-10-31 | Skip unnecessary inference environment scans |
176202| 179d717 | 2026-10-31 | Diagnose source-proven Hoon union overlaps |
177−| This change | 2026-10-31 | Prove structural overlaps across Hoon union cases |
203+| 142f2e2 | 2026-10-31 | Prove structural overlaps across Hoon union cases |
204+| c96597d | 2026-10-31 | Track source-proven generic recursive identities |
205+| 190a9d5 | 2026-10-31 | Add source-backed list flattening |
206+| d9d51e6 | 2026-10-31 | Check source-proven recursive tree construction |
207+| 30b0a9e | 2026-10-31 | Match source-proven recursive tree cases |
208+| 72d85ab | 2026-10-31 | Add bounded deferred inference and expand runtime equality coverage |
209+| 22f3788 | 2026-10-31 | Check empty molds and propagate closed cell context into branches |
210+| 341bcb4 | 2026-10-31 | Keep deferred fits stable under later substitutions |
211+| b93a94b | 2026-10-31 | Prove local generic-alias union tags and add successor |
212+| 2826c93 | 2026-10-31 | Report generic-alias overlaps and retain deferred branch contexts |
213+| b5cdc80 | 2026-10-31 | Preserve full-module overlap source evidence |
214+| ab6fdc1 | 2026-10-31 | Add source-backed text conversion wrappers |
215+| aa277c9 | 2026-10-31 | Recover prepared tuple initializers in partial reports |
216+| b4703e7 | 2026-11-01 | Check narrow closed subscription-free program mains |
217+| 26bf7a7 | 2026-11-01 | Recover narrow direct-program initializer contexts |
218+| 642d2c0 | 2026-11-01 | Prove direct request-value watchability for program subscriptions |
219+| This change | 2026-11-01 | Add the source-backed UI, program and page prelude slice |
178220
179221## Checking it
180222
181223On a machine set up as [development.md](development.md) says:
182224
183225```
184−tools/golden # 652 cases under urbit eval
226+tools/golden # 660 cases under urbit eval
185227tools/importer-test # the Hoon importer fixture projection
186228tools/type-import-default-test # default-wrapped source proof golden
187229tools/type-import-test # the importer/checker bridge fixture
188230tools/type-import-overlap-test # source-aware Hoon overlap and provenance fixture
189231tools/type-import-structural-test # structural overlap and multi-case source fixture
232+tools/type-union-source-test # local generic-alias union guards
233+tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
234+tools/type-full-overlap-test # full-module overlap evidence
190235tools/type-tlon-test # the real Tlon reader/checker fixture
191236tools/type-mark-test # the mark/checker bridge fixture
192237tools/type-poke-test # the source-backed poke/API fixture
@@ -195,17 +240,28 @@ tools/type-api-paths-test # partial API path metadata fixture
195240tools/type-hole-guards-test # hole defaulting and API interface guards
196241tools/type-list-alias-test # prelude list-alias guards
197242tools/type-generic-alias-test # generic union alias guards
243+tools/type-generic-recursion-test # source-proven generic recursion guards
244+tools/type-generic-construction-test # source-proven recursive construction guards
245+tools/type-generic-pattern-test # source-proven recursive pattern guards
246+tools/type-deferred-test # source-owned deferred inference guards
247+tools/type-deferred-resolver-test # resolver consistency and failure guards
248+tools/type-deferred-context-test # deferred source-order and branch guards
249+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
250+tools/type-empty-test # empty molds and coverage guards
251+tools/type-cell-branch-test # branch context and rollback guards
198252tools/type-positional-face-guards-test # positional sample face guards
199253tools/type-qath-guards-test # qath source and unfolding guards
200254tools/type-ask-guards-test # ask source and bootstrap guards
201255tools/type-proj-guards-test # projection evidence and scope guards
202256tools/type-module-scope-test # module and prelude scope fixture
257+tools/type-program-main-test # closed program-main interface and rejection guards
258+tools/type-program-init-test # transactional direct-program initializer context guards
203259tools/hoon check-spans-test # prints <<>> when the span checker works
204260tools/testdata/selftest # the tools themselves
205261tools/doc-blocks docs/spec # the doc's examples are golden cases
206262tools/ship start
207263tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
208−tools/ship test # the same 652 cases as -test arms on the ship
264+tools/ship test # the same 660 cases as -test arms on the ship
209265tools/testdata/ship-selftest
210266tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
211267tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb.hoon+1978−81
@@ -4667,11 +4667,13 @@
46674667 [%any-atom ~]
46684668 [%flag ~]
46694669 [%noun ~]
4670+ [%empty ~]
46704671 [%tag id=@ud literal=lit constructor=?]
46714672 [%const literal=lit]
46724673 [%collection name=term args=(list itype)]
46734674 [%recursive module=term name=term label=(unit @t)]
46744675 [%jrec at=path name=term label=(unit @t) head=term aura=@ta tail=term]
4676+ [%grec at=path name=term label=(unit @t) proof=shape args=(list itype)]
46754677 [%union cases=(list itype) origin=(unit [at=path name=term]) label=(unit @t) args=(list itype)]
46764678 [%face name=term body=itype]
46774679 [%fn sample=itype product=itype]
@@ -4724,6 +4726,88 @@
47244726 $(t u.found)
47254727 ==
47264728::
4729+:: Prove only emptiness; unknown types are never treated as empty.
4730+:: A shared node budget bounds each proof attempt.
4731+++ itype-empty-cases
4732+ |= [xs=(list itype) sub=isub fuel=@ud]
4733+ ^- (unit [empty=? left=@ud])
4734+ ?~ xs `[& fuel]
4735+ =/ first=(unit [empty=? left=@ud]) (itype-empty-proof i.xs sub fuel)
4736+ ?~ first ~
4737+ ?. empty.u.first `[| left.u.first]
4738+ $(xs t.xs, fuel left.u.first)
4739+++ itype-empty-proof
4740+ |= [typ=itype sub=isub fuel=@ud]
4741+ ^- (unit [empty=? left=@ud])
4742+ ?: =(0 fuel) ~
4743+ =. fuel (dec fuel)
4744+ =. typ (itype-walk typ sub)
4745+ ?- -.typ
4746+ %empty `[& fuel]
4747+ %face $(typ body.typ)
4748+ %cell
4749+ =/ left=(unit [empty=? left=@ud]) $(typ hed.typ)
4750+ ?~ left ~
4751+ ?: empty.u.left `[& left.u.left]
4752+ $(typ tal.typ, fuel left.u.left)
4753+ %union (itype-empty-cases cases.typ sub fuel)
4754+ * `[| fuel]
4755+ ==
4756+:: Prove reachability separately from emptiness. An unresolved fixed
4757+:: recursive type is not presumed inhabited. A written, still-unconstrained
4758+:: capital is existentially inhabited for pattern reachability; the normal
4759+:: definition-boundary checks reject subsequently constrained capitals.
4760+++ itype-inhabited-cases
4761+ |= [xs=(list itype) sub=isub caps=icaps fuel=@ud pending=?]
4762+ ^- (unit [result=?(%yes %no %unknown) left=@ud])
4763+ ?~ xs `[?:(pending %unknown %no) fuel]
4764+ =/ first=(unit [result=?(%yes %no %unknown) left=@ud])
4765+ (itype-inhabited-proof i.xs sub caps fuel)
4766+ ?~ first ~
4767+ ?: =(%yes result.u.first) first
4768+ $(xs t.xs, fuel left.u.first, pending |(pending =(%unknown result.u.first)))
4769+++ itype-inhabited-proof
4770+ |= [typ=itype sub=isub caps=icaps fuel=@ud]
4771+ ^- (unit [result=?(%yes %no %unknown) left=@ud])
4772+ ?: =(0 fuel) ~
4773+ =. fuel (dec fuel)
4774+ =. typ (itype-walk typ sub)
4775+ ?- -.typ
4776+ %empty `[%no fuel]
4777+ ?(%atom %any-atom %flag %const %noun %avar %rvar %nvar %rnvar %fn %jrec) `[%yes fuel]
4778+ %var
4779+ ?: (lien caps |=(c=icap (hole-same-variable typ (itype-walk [%var id.c] sub)))) `[%yes fuel]
4780+ `[%unknown fuel]
4781+ %face $(typ body.typ)
4782+ %cell
4783+ =/ head=(unit [result=?(%yes %no %unknown) left=@ud]) $(typ hed.typ)
4784+ ?~ head ~
4785+ ?: =(%no result.u.head) head
4786+ =/ tail=(unit [result=?(%yes %no %unknown) left=@ud]) $(typ tal.typ, fuel left.u.head)
4787+ ?~ tail ~
4788+ ?: =(%no result.u.tail) tail
4789+ ?: |(=(%unknown result.u.head) =(%unknown result.u.tail)) `[%unknown left.u.tail]
4790+ `[%yes left.u.tail]
4791+ %union (itype-inhabited-cases cases.typ sub caps fuel |)
4792+ %collection
4793+ ?. &(|(=(%list name.typ) =(%unit name.typ)) ?=([* ~] args.typ)) `[%unknown fuel]
4794+ `[%yes fuel]
4795+ %grec ?:((grec-tree-proof name.typ proof.typ) `[%yes fuel] `[%unknown fuel])
4796+ * `[%unknown fuel]
4797+ ==
4798+++ itype-live-cases
4799+ |= [xs=(list itype) sub=isub caps=icaps fuel=@ud]
4800+ ^- (unit (list itype))
4801+ ?~ xs `~
4802+ =/ first=(unit [result=?(%yes %no %unknown) left=@ud])
4803+ (itype-inhabited-proof i.xs sub caps fuel)
4804+ ?~ first ~
4805+ ?: =(%unknown result.u.first) ~
4806+ =/ rest=(unit (list itype)) $(xs t.xs, fuel left.u.first)
4807+ ?~ rest ~
4808+ ?: =(%no result.u.first) rest
4809+ `[i.xs u.rest]
4810+::
47274811++ itype-occurs
47284812 |= [n=@ud t=itype sub=isub]
47294813 ^- ?
@@ -4738,11 +4822,13 @@
47384822 %any-atom |
47394823 %flag |
47404824 %noun |
4825+ %empty |
47414826 %tag =(n id.t)
47424827 %const |
47434828 %union |((lien cases.t |=(c=itype (itype-occurs n c sub))) (lien args.t |=(c=itype (itype-occurs n c sub))))
47444829 %recursive |
47454830 %jrec |
4831+ %grec (lien args.t |=(c=itype (itype-occurs n c sub)))
47464832 %collection (lien args.t |=(c=itype (itype-occurs n c sub)))
47474833 %face $(t body.t)
47484834 %fn |($(t sample.t) $(t product.t))
@@ -4761,6 +4847,9 @@
47614847 =. a (itype-walk a sub)
47624848 =. b (itype-walk b sub)
47634849 ?: =(a b) `sub
4850+ ?: &(?=(%grec -.a) ?=(%grec -.b))
4851+ ?. &(=(at.a at.b) =(name.a name.b)) ~
4852+ (itype-unify-args args.a args.b sub)
47644853 ?: &(?=(%jrec -.a) ?=(%jrec -.b))
47654854 ?:(&(=(at.a at.b) =(name.a name.b) =(head.a head.b) =(aura.a aura.b) =(tail.a tail.b)) `sub ~)
47664855 ?: &(?=(%recursive -.a) ?=(%recursive -.b))
@@ -4866,11 +4955,13 @@
48664955 %any-atom &
48674956 %flag |
48684957 %noun |
4958+ %empty |
48694959 %tag |
48704960 %const |
48714961 %union |((lien cases.t |=(c=itype (itype-has-any-atom c sub))) (lien args.t |=(c=itype (itype-has-any-atom c sub))))
48724962 %recursive |
48734963 %jrec |
4964+ %grec (lien args.t |=(c=itype (itype-has-any-atom c sub)))
48744965 %collection (lien args.t |=(c=itype (itype-has-any-atom c sub)))
48754966 %face $(t body.t)
48764967 %fn |($(t sample.t) $(t product.t))
@@ -4940,11 +5031,13 @@
49405031 %any-atom &
49415032 %flag &
49425033 %noun |
5034+ %empty |
49435035 %tag &
49445036 %const &
49455037 %union |((lien cases.typ |=(c=itype (itype-has-fixed-atom c))) (lien args.typ |=(c=itype (itype-has-fixed-atom c))))
49465038 %recursive |
49475039 %jrec |
5040+ %grec (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
49485041 %collection (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
49495042 %face $(typ body.typ)
49505043 %fn |($(typ sample.typ) $(typ product.typ))
@@ -4973,6 +5066,7 @@
49735066 ^- ?
49745067 =. t (itype-walk t sub)
49755068 ?- -.t
5069+ %grec (lien args.t |=(c=itype (itype-has-face c sub)))
49765070 %collection (lien args.t |=(c=itype (itype-has-face c sub)))
49775071 %face &
49785072 %cell |($(t hed.t) $(t tal.t))
@@ -5029,6 +5123,9 @@
50295123 ^- ?
50305124 =. a (itype-walk a sub)
50315125 =. b (itype-walk b sub)
5126+ ?: &(?=(%grec -.a) ?=(%grec -.b))
5127+ ?. &(=(at.a at.b) =(name.a name.b)) |
5128+ (itype-face-asym-collection-args args.a args.b sub)
50325129 ?: &(?=(%collection -.a) ?=(%collection -.b))
50335130 ?. =(name.a name.b) |
50345131 (itype-face-asym-collection-args args.a args.b sub)
@@ -5091,6 +5188,7 @@
50915188 %union &
50925189 %recursive &
50935190 %jrec &
5191+ %grec &
50945192 %noun &
50955193 %collection &
50965194 %face $(t body.t)
@@ -5120,6 +5218,7 @@
51205218 ^- ?
51215219 ?- -.t
51225220 %tag &
5221+ %grec (lien args.t |=(c=itype (itype-has-tag c)))
51235222 %collection (lien args.t |=(c=itype (itype-has-tag c)))
51245223 %face $(t body.t)
51255224 %fn |($(t sample.t) $(t product.t))
@@ -5133,6 +5232,7 @@
51335232 ^- ?
51345233 ?- -.t
51355234 %union &
5235+ %grec (lien args.t |=(c=itype (itype-has-union c)))
51365236 %collection (lien args.t |=(c=itype (itype-has-union c)))
51375237 %face $(t body.t)
51385238 %fn |($(t sample.t) $(t product.t))
@@ -5151,6 +5251,7 @@
51515251 %union
51525252 ?: &(?=(~ label.t) ?=(^ args.t)) &
51535253 (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-generic c)))
5254+ %grec |(?=(~ label.t) (lien args.t |=(c=itype (itype-has-hidden-generic c))))
51545255 %collection (lien args.t |=(c=itype (itype-has-hidden-generic c)))
51555256 %face $(t body.t)
51565257 %fn |($(t sample.t) $(t product.t))
@@ -5164,6 +5265,7 @@
51645265 ?- -.t
51655266 %recursive &
51665267 %jrec &
5268+ %grec &
51675269 %collection (lien args.t |=(c=itype (itype-has-recursive c)))
51685270 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-recursive c)))
51695271 %face $(t body.t)
@@ -5178,6 +5280,7 @@
51785280 ?- -.t
51795281 %recursive ?=(~ label.t)
51805282 %jrec ?=(~ label.t)
5283+ %grec |(?=(~ label.t) (lien args.t |=(c=itype (itype-has-hidden-recursive c))))
51815284 %collection (lien args.t |=(c=itype (itype-has-hidden-recursive c)))
51825285 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-recursive c)))
51835286 %face $(t body.t)
@@ -5223,7 +5326,7 @@
52235326 ?: ?=(%var -.raw)
52245327 $(cases t.cases, pending &)
52255328 =/ c=itype (itype-walk raw sub)
5226− ?: ?=(?(%var %tag %recursive %jrec %union %face) -.c)
5329+ ?: ?=(?(%var %tag %recursive %jrec %grec %union %face) -.c)
52275330 $(cases t.cases, pending &)
52285331 ?. ?=(%cell -.c) $(cases t.cases)
52295332 =/ raw-head=itype hed.c
@@ -5236,7 +5339,7 @@
52365339 ?: ?=(?(%atom %any-atom %flag %avar %rvar %nvar %rnvar) -.body.head)
52375340 $(cases t.cases)
52385341 $(cases t.cases, pending &)
5239− ?: ?=(?(%var %tag %recursive %jrec %union) -.head)
5342+ ?: ?=(?(%var %tag %recursive %jrec %grec %union) -.head)
52405343 $(cases t.cases, pending &)
52415344 ?. ?=(%const -.head) $(cases t.cases)
52425345 ?. =(val.literal.head val.tag) $(cases t.cases)
@@ -5254,7 +5357,14 @@
52545357++ itype-fit
52555358 |= [actual=itype expected=itype sub=isub next=@ud]
52565359 ^- ifit
5257− (itype-fit-inner actual expected sub next | |)
5360+ =/ result=ifit (itype-fit-inner actual expected sub next | |)
5361+ ?: ?=(%ok -.result) result
5362+ =/ source=itype (itype-walk actual sub)
5363+ ?. ?=(?(%empty %face %cell %union) -.source) result
5364+ =/ empty=(unit [empty=? left=@ud]) (itype-empty-proof actual sub 256)
5365+ ?~ empty [%unknown ~]
5366+ ?: empty.u.empty [%ok sub next]
5367+ result
52585368++ itype-fit-inner
52595369 |= [actual=itype expected=itype sub=isub next=@ud skip-width=? spine-proof=?]
52605370 ^- ifit
@@ -5273,6 +5383,7 @@
52735383 =. actual (itype-walk actual sub)
52745384 =. expected (itype-walk expected sub)
52755385 ?: =(actual expected) [%ok sub next]
5386+ ?: &(?=(%empty -.expected) |(?=(%cell -.actual) ?=(%face -.actual) ?=(%union -.actual) ?=(%grec -.actual) ?=(%recursive -.actual))) [%unknown ~]
52765387 :: The relation of the source loobean mold to explicit @f is not yet
52775388 :: established. Keep it unsupported rather than asserting a mismatch.
52785389 ?: &(?=(%flag -.actual) ?=(%atom -.expected) =(%f aura.expected)) [%unknown ~]
@@ -5285,6 +5396,14 @@
52855396 [%ok sub next]
52865397 :: An arbitrary noun is not known to fit a narrower type.
52875398 ?: &(?=(%noun -.actual) !?=(%var -.expected)) [%unknown ~]
5399+ ?: &(!uncertain ?=(%grec -.actual) ?=(%face -.expected)) $(expected body.expected)
5400+ ?: &(!uncertain ?=(%face -.actual) ?=(%grec -.expected)) $(actual body.actual)
5401+ ?: &(?=(%grec -.actual) ?=(%grec -.expected))
5402+ ?. &(=(at.actual at.expected) =(name.actual name.expected)) [%unknown ~]
5403+ =/ matched=(unit isub) (itype-unify-args args.actual args.expected sub)
5404+ ?~ matched [%unknown ~]
5405+ [%ok u.matched next]
5406+ ?: &(|(?=(%grec -.actual) ?=(%grec -.expected)) !|(?=(%var -.actual) ?=(%var -.expected))) [%unknown ~]
52885407 ?: &(!uncertain ?=(%jrec -.actual) ?=(%face -.expected)) $(expected body.expected)
52895408 ?: &(!uncertain ?=(%face -.actual) ?=(%jrec -.expected)) $(actual body.actual)
52905409 ?: &(?=(%jrec -.actual) ?=(%jrec -.expected))
@@ -5653,6 +5772,7 @@
56535772 =/ head=igate-free $(typ hed.typ, path [[%head ~] path])
56545773 =/ tail=igate-free $(typ tal.typ, fuel left.head, path [[%tail ~] path])
56555774 =/ inhabited=? &(inhabited.head inhabited.tail)
5775+ ?: |(&(=(%yes verdict.head) !inhabited.head) &(=(%yes verdict.tail) !inhabited.tail)) [%yes | left.tail ~]
56565776 ?: &(=(%no verdict.head) inhabited.tail) head(left left.tail)
56575777 ?: &(=(%no verdict.tail) inhabited.head) tail
56585778 ?: |(!=(%yes verdict.head) !=(%yes verdict.tail)) [%unknown inhabited left.tail ~]
@@ -5666,6 +5786,7 @@
56665786 ?~ cases.typ [%unknown | fuel ~]
56675787 (gate-free-types cases.typ fuel path 0)
56685788 %noun [%unknown & fuel ~]
5789+ %empty [%yes | fuel ~]
56695790 %var [%unknown | fuel ~]
56705791 %avar [%yes & fuel ~]
56715792 %rvar [%yes & fuel ~]
@@ -5674,10 +5795,12 @@
56745795 %tag [%unknown | fuel ~]
56755796 %recursive [%unknown | fuel ~]
56765797 %jrec [%yes & fuel ~]
5798+ %grec [%unknown | fuel ~]
56775799 ==
56785800::
56795801+$ igate-prelude-evidence [iface=ifile gates=(map term def)]
5680−+$ 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)]
5802++$ dgo [left=itype right=itype at=span context=span]
5803++$ 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)]) defer=(unit ~) obligations=(list dgo)]
56815804+$ idiag [msg=tape sites=(list [at=span note=tape])]
56825805+$ iresult (each [typ=itype state=istate] idiag)
56835806+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -5697,6 +5820,7 @@
56975820 |= [t=itype sub=isub]
56985821 ^- itype
56995822 =. t (itype-walk t sub)
5823+ ?: ?=(%grec -.t) t(args (turn args.t |=(c=itype (itype-normalize c sub))))
57005824 ?: ?=(%collection -.t) [%collection name.t (turn args.t |=(c=itype (itype-normalize c sub)))]
57015825 ?: ?=(%union -.t)
57025826 [%union (turn cases.t |=(c=itype (itype-normalize c sub))) origin.t label.t (turn args.t |=(c=itype (itype-normalize c sub)))]
@@ -5723,6 +5847,7 @@
57235847 %cell |($(t hed.t) $(t tal.t))
57245848 %recursive |
57255849 %jrec |
5850+ %grec &
57265851 %collection (lien args.t |=(c=itype (itype-has-gate c)))
57275852 %face $(t body.t)
57285853 %union (lien cases.t |=(c=itype (itype-has-gate c)))
@@ -5737,6 +5862,7 @@
57375862 %any-atom |
57385863 %flag |
57395864 %noun |
5865+ %empty |
57405866 ==
57415867::
57425868++ default-decimals
@@ -5746,6 +5872,7 @@
57465872 ?- -.t
57475873 %nvar [%atom %ud]
57485874 %rnvar [%atom %ud]
5875+ %grec t(args (turn args.t |=(c=itype (default-decimals c))))
57495876 %collection [%collection name.t (turn args.t |=(c=itype (default-decimals c)))]
57505877 %face [%face name.t $(t body.t)]
57515878 %cell [%cell $(t hed.t) $(t tal.t)]
@@ -5787,6 +5914,7 @@
57875914 %tag |
57885915 %any-atom &
57895916 %union &((levy cases.t |=(c=itype (hole-known c state))) (levy args.t |=(c=itype (hole-known c state))))
5917+ %grec (levy args.t |=(c=itype (hole-known c state)))
57905918 %collection (levy args.t |=(c=itype (hole-known c state)))
57915919 %face $(t body.t)
57925920 %fn &($(t sample.t) $(t product.t))
@@ -5834,6 +5962,7 @@
58345962 ?- -.t
58355963 ?(%tag %nvar %rnvar %avar %rvar) !(hole-known t state)
58365964 %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
5965+ %grec (lien args.t |=(c=itype (hole-uncertain c state)))
58375966 %collection (lien args.t |=(c=itype (hole-uncertain c state)))
58385967 %face $(t body.t)
58395968 %fn |($(t sample.t) $(t product.t))
@@ -5865,11 +5994,13 @@
58655994 %any-atom ~
58665995 %flag ~
58675996 %noun ~
5997+ %empty ~
58685998 %tag ~
58695999 %const ~
58706000 %union (zing (turn (weld args.t cases.t) |=(c=itype (itype-vars c))))
58716001 %recursive ~
58726002 %jrec ~
6003+ %grec (zing (turn args.t |=(c=itype (itype-vars c))))
58736004 %collection (zing (turn args.t |=(c=itype (itype-vars c))))
58746005 %face $(t body.t)
58756006 %fn (weld $(t sample.t) $(t product.t))
@@ -5913,11 +6044,13 @@
59136044 %any-atom t
59146045 %flag t
59156046 %noun t
6047+ %empty t
59166048 %tag t
59176049 %const t
59186050 %union [%union (turn cases.t |=(c=itype (itype-rename c ren))) origin.t label.t (turn args.t |=(c=itype (itype-rename c ren)))]
59196051 %recursive t
59206052 %jrec t
6053+ %grec t(args (turn args.t |=(c=itype (itype-rename c ren))))
59216054 %collection [%collection name.t (turn args.t |=(c=itype (itype-rename c ren)))]
59226055 %face [%face name.t $(t body.t)]
59236056 %fn [%fn $(t sample.t) $(t product.t)]
@@ -5940,11 +6073,13 @@
59406073 %any-atom |
59416074 %flag |
59426075 %noun |
6076+ %empty |
59436077 %tag |
59446078 %const |
59456079 %union |((lien cases.t |=(c=itype (itype-var-is-atom n c))) (lien args.t |=(c=itype (itype-var-is-atom n c))))
59466080 %recursive |
59476081 %jrec |
6082+ %grec (lien args.t |=(c=itype (itype-var-is-atom n c)))
59486083 %collection (lien args.t |=(c=itype (itype-var-is-atom n c)))
59496084 %face $(t body.t)
59506085 %fn |($(t sample.t) $(t product.t))
@@ -5963,11 +6098,13 @@
59636098 %any-atom |
59646099 %flag |
59656100 %noun |
6101+ %empty |
59666102 %tag |
59676103 %const |
59686104 %union |((lien cases.t |=(c=itype (itype-var-is-restricted n c))) (lien args.t |=(c=itype (itype-var-is-restricted n c))))
59696105 %recursive |
59706106 %jrec |
6107+ %grec (lien args.t |=(c=itype (itype-var-is-restricted n c)))
59716108 %collection (lien args.t |=(c=itype (itype-var-is-restricted n c)))
59726109 %face $(t body.t)
59736110 %fn |($(t sample.t) $(t product.t))
@@ -6264,6 +6401,7 @@
62646401 ^- upat
62656402 ?- -.typ
62666403 %noun [%all ~]
6404+ %empty [%empty ~]
62676405 %atom [%atom ~]
62686406 %flag [%or ~[[%atom `0] [%atom `1]]]
62696407 %const [%atom `val.literal.typ]
@@ -6398,6 +6536,16 @@
63986536 ?: &(?=(~ vars.template) ?=(%jrec -.typ.template) =(at.typ.template origin) =(name.typ.template name)) `name.i.molds
63996537 $(molds t.molds)
64006538::
6539+++ grec-visible-alias
6540+ |= [origin=path name=term proof=shape args=(list itype) molds=imold-types]
6541+ ^- (unit term)
6542+ ?~ molds ~
6543+ =/ template=ischeme template.i.molds
6544+ ?. ?=(%grec -.typ.template) $(molds t.molds)
6545+ ?. &(=(at.typ.template origin) =(name.typ.template name) =(proof.typ.template proof)) $(molds t.molds)
6546+ ?. &((identity-union-parameters vars.template args.typ.template) =((lent vars.template) (lent args))) $(molds t.molds)
6547+ `name.i.molds
6548+::
64016549++ itype-in-import
64026550 |= [t=itype iface=ifile face=term prelude=(unit ifile)]
64036551 ^- itype
@@ -6417,6 +6565,11 @@
64176565 `(crip "{(trip u.alias)}.{(trip face)}")
64186566 [%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)))]
64196567 %recursive [%recursive module.t name.t ~]
6568+ %grec
6569+ =/ public=(unit term) ?~(prelude ~ (grec-visible-alias at.t name.t proof.t args.t molds.u.prelude))
6570+ =/ alias=(unit term) ?~(public (grec-visible-alias at.t name.t proof.t args.t molds.iface) public)
6571+ =/ label=(unit @t) ?~(alias ~ ?~(public `(crip "{(trip u.alias)}.{(trip face)}") `u.alias))
6572+ t(label label, args (turn args.t |=(c=itype (itype-in-import c iface face prelude))))
64206573 %jrec
64216574 =/ public=(unit term) ?~(prelude ~ (jrec-alias at.t name.t molds.u.prelude))
64226575 ?^ public t(label `u.public)
@@ -6529,9 +6682,29 @@
65296682 ?. =(names.tail ~[name]) ~
65306683 `[%jrec at.state name `name name.i.fs aura.shape.i.fs name.i.t.fs]
65316684::
6685+++ simple-source-generic-recursive
6686+ |= [name=term sh=shape args=(list itype) state=istate]
6687+ ^- (unit itype)
6688+ ?. ?=(%generic -.sh) ~
6689+ ?. ?=([@ ~] vars.sh) ~
6690+ ?. ?=([* ~] args) ~
6691+ ?~ grec-index.state ~
6692+ ?. =(at.u.grec-index.state at.state) ~
6693+ ?~ prelude.state ~
6694+ ?. =(prelude.u.grec-index.state u.prelude.state) ~
6695+ =/ proof=(unit shape) (~(get by shapes.u.grec-index.state) name)
6696+ ?~ proof ~
6697+ ?. =(u.proof sh) ~
6698+ `[%grec at.state name `name sh args]
6699+::
6700+
65326701++ infer-mold-template
65336702 |= [sh=shape state=istate]
65346703 ^- (unit [template=ischeme state=istate])
6704+ =/ generic=(unit itype)
6705+ ?. ?=([@ ~] active.state) ~
6706+ (simple-source-generic-recursive i.active.state sh ~[[%var next.state]] state)
6707+ ?^ generic `[[u.generic ~[next.state]] state(next +(next.state))]
65356708 =/ direct=(unit itype)
65366709 ?. ?=([@ ~] active.state) ~
65376710 (simple-source-recursive i.active.state sh state)
@@ -6664,13 +6837,18 @@
66646837 `[[%atom aura.sh] state]
66656838 %flag `[[%flag ~] state]
66666839 %noun `[[%noun ~] state]
6840+ %void `[[%empty ~] state]
66676841 %const
66686842 ?. |(=(%term form.lit.sh) =(%null form.lit.sh) =(%loobean form.lit.sh)) ~
66696843 ?: &(=(%loobean form.lit.sh) !|(=(0 val.lit.sh) =(1 val.lit.sh))) ~
66706844 `[[%const lit.sh] state]
66716845 %union
66726846 =/ pairs=(list upair) (union-pairs cases.sh molds.state)
6673− ?. (levy pairs |=(p=upair =(%disjoint relation.p))) ~
6847+ ?: (lien pairs |=(p=upair =(%overlap relation.p))) ~
6848+ =/ source-proof=?
6849+ ?: (levy pairs |=(p=upair =(%disjoint relation.p))) &
6850+ &((union-source-state-safe state 256) (union-source-distinct-tags cases.sh molds.state 256))
6851+ ?. source-proof ~
66746852 =/ cs=(unit [types=(list itype) state=istate]) (infer-shape-args cases.sh state)
66756853 ?~ cs ~
66766854 `[[%union types.u.cs ~ ~ ~] state.u.cs]
@@ -6744,6 +6922,8 @@
67446922 ?~ applied ~
67456923 `[u.applied state.u.args]
67466924 ?. ?=(%generic -.u.found) ~
6925+ =/ grec=(unit itype) (simple-source-generic-recursive n u.found types.u.args state.u.args)
6926+ ?^ grec `[u.grec state.u.args]
67476927 ?. (distinct-params vars.u.found) ~
67486928 =/ params=(unit iparams) (bind-params vars.u.found types.u.args)
67496929 ?~ params ~
@@ -7072,6 +7252,7 @@
70727252 =/ retried=? ?=(%| -.inferred)
70737253 =? inferred retried (infer-recursive-gate d env local-state)
70747254 ?: ?=(%| -.inferred) $(ds t.ds, remaining [d remaining])
7255+ ?: !=(obligations.state.p.inferred obligations.state) [%| ["deferred local definition needs unsupported inference" ~]]
70757256 =. state.p.inferred (promote-restricted-numbers state.p.inferred env)
70767257 =. state.p.inferred (default-hole-numbers holes.state.p.inferred holes.state state.p.inferred env !(itype-has-gate (itype-normalize typ.p.inferred sub.state.p.inferred)))
70777258 =/ hole=(unit idiag) (unresolved-hole holes.state.p.inferred holes.state state.p.inferred)
@@ -7181,6 +7362,8 @@
71817362 ?: &(?=(%collection -.expected) =(%list name.expected) (context-list-expression e))
71827363 (infer-list-context e expected env state context)
71837364 ?: ?=(%branch -.e)
7365+ =/ empty-list=(unit iresult) (empty-list-null-branch e env state `[expected context])
7366+ ?^ empty-list u.empty-list
71847367 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
71857368 ?~ t.arms.e [%| ["branch pattern is not supported by partial inference" ~]]
71867369 ?^ t.t.arms.e [%| ["branch is not supported by partial inference" ~]]
@@ -7398,6 +7581,11 @@
73987581 [%| ["list pattern needs the standard prelude in partial inference" ~]]
73997582 ?~ args.typ [%| ["list pattern is not supported by partial inference" ~]]
74007583 ?^ t.args.typ [%| ["list pattern is not supported by partial inference" ~]]
7584+ =/ item-live=(unit [result=?(%yes %no %unknown) left=@ud])
7585+ (itype-inhabited-proof i.args.typ sub.state caps.state 256)
7586+ ?~ item-live [%| ["list element reachability needs unsupported inference" ~]]
7587+ ?: =(%unknown result.u.item-live) [%| ["list element reachability needs unsupported inference" ~]]
7588+ ?: =(%no result.u.item-live) [%| ["list nonempty pattern is unreachable" ~]]
74017589 ?~ arms.e [%| ["list branch is not supported by partial inference" ~]]
74027590 ?~ t.arms.e [%| ["list branch is not supported by partial inference" ~]]
74037591 ?^ t.t.arms.e [%| ["list branch is not supported by partial inference" ~]]
@@ -7451,6 +7639,11 @@
74517639 [%| ["pattern binder shadows a name" ~]]
74527640 =/ payload=(unit itype) (unit-union-payload typ)
74537641 ?~ payload [%| ["unit branch subject is not supported by partial inference" ~]]
7642+ =/ payload-live=(unit [result=?(%yes %no %unknown) left=@ud])
7643+ (itype-inhabited-proof u.payload sub.state.p.subject caps.state.p.subject 256)
7644+ ?~ payload-live [%| ["unit payload reachability needs unsupported inference" ~]]
7645+ ?: =(%unknown result.u.payload-live) [%| ["unit payload reachability needs unsupported inference" ~]]
7646+ ?: =(%no result.u.payload-live) [%| ["unit present pattern is unreachable" ~]]
74547647 =/ extended=ienv [[u.binder [u.payload ~]] env]
74557648 =/ left=iresult
74567649 ?~ expected (infer-fragment val.x ?:(first-empty env extended) state.p.subject)
@@ -7603,7 +7796,9 @@
76037796 ?: ?=(%| -.subject) `subject
76047797 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
76057798 ?. ?=(%union -.typ) `[%| ["branch is not supported by partial inference" ~]]
7606− =/ cases=(list itype) cases.typ
7799+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
7800+ ?~ live ~
7801+ =/ cases=(list itype) u.live
76077802 =/ remaining=(list itype) cases
76087803 =/ arms=(list arm) arms.e
76097804 =/ st=istate state.p.subject
@@ -7640,7 +7835,9 @@
76407835 ?: ?=(%| -.subject) `subject
76417836 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
76427837 ?. ?=(%union -.typ) `[%| ["branch is not supported by partial inference" ~]]
7643− =/ cases=(list itype) cases.typ
7838+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
7839+ ?~ live ~
7840+ =/ cases=(list itype) u.live
76447841 =/ remaining=(list itype) cases
76457842 =/ arms=(list arm) arms.e
76467843 =/ st=istate state.p.subject
@@ -7684,7 +7881,9 @@
76847881 ?: ?=(%| -.subject) subject
76857882 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
76867883 ?. ?=(%union -.typ) [%| ["branch is not supported by partial inference" ~]]
7687− =/ expanded=(unit (list ifinite)) (finite-cases cases.typ ~ 0)
7884+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
7885+ ?~ live [%| ["union emptiness needs unsupported inference" ~]]
7886+ =/ expanded=(unit (list ifinite)) (finite-cases u.live ~ 0)
76887887 ?~ expanded [%| ["union pattern expansion needs unsupported inference" ~]]
76897888 =/ cases=(list ifinite) u.expanded
76907889 =/ remaining=(list ifinite) cases
@@ -7805,9 +8004,65 @@
78058004 =/ cell=itype [%cell [%face head.typ [%atom aura.typ]] [%face tail.typ typ]]
78068005 [%& [%union ~[nil cell] ~ ~ ~] state.p.subject(jrec-fuel (dec jrec-fuel.state.p.subject))]
78078006::
8007+:: A bounded source-proven tree match permits flat tag patterns and
8008+:: nonbinding catch-alls. Whole-case binders cannot consume the temporary
8009+:: structural view. Pattern count and field arity are checked first.
8010+++ grec-simple-pattern
8011+ |= [pat=pattern view=itype]
8012+ ^- ?
8013+ ?. ?=(%cell -.pat) |
8014+ ?~ items.pat |
8015+ =/ first=pattern i.items.pat
8016+ ?. ?=(%lit -.first) |
8017+ ?. =(%term form.lit.first) |
8018+ =/ chosen=(unit itype) (contextual-tagged-case view val.lit.first ~)
8019+ ?~ chosen |
8020+ ?> ?=(%cell -.u.chosen)
8021+ =/ rest=(list pattern) t.items.pat
8022+ =/ arity=? ?:(?=(%cell -.tal.u.chosen) ?=([* [* ~]] rest) ?=([* ~] rest))
8023+ ?. arity |
8024+ (levy rest |=(p=pattern |(?=(%bind -.p) ?=(%any -.p))))
8025+::
8026+:: A catch-all with no binder is safe even when it covers both cases.
8027+:: A bound whole case still declines to avoid exporting the analysis view.
8028+++ grec-patterns-eligible
8029+ |= [arms=(list arm) view=itype left=@ud]
8030+ ^- ?
8031+ ?~ arms &
8032+ ?: =(0 left) |
8033+ =/ pat=pattern pat.i.arms
8034+ ?. |(?=(%any -.pat) (grec-simple-pattern pat view)) |
8035+ $(arms t.arms, left (dec left))
8036+++ grec-match-view
8037+ |= [e=expr subject=iresult]
8038+ ^- iresult
8039+ ?: ?=(%| -.subject) subject
8040+ ?. ?=(%branch -.e) subject
8041+ ?. (grec-direct-context typ.p.subject sub.state.p.subject) subject
8042+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
8043+ ?. ?=(%grec -.typ) subject
8044+ ?~ arms.e subject
8045+ =/ view=(unit [view=itype left=@ud]) (grec-unfold-view typ jrec-fuel.state.p.subject)
8046+ ?~ view [%| ["recursive mold unfolding needs unsupported inference" ~]]
8047+ ?. (grec-patterns-eligible arms.e view.u.view 128) subject
8048+ [%& view.u.view state.p.subject(jrec-fuel left.u.view)]
8049+::
8050+:: A single-arm diagnostic only probes a direct, source-typed in-scope wing;
8051+:: other subjects retain the prior single-pattern inference path.
8052+++ grec-single-wing-subject
8053+ |= [e=expr env=ienv state=istate]
8054+ ^- (unit iresult)
8055+ ?. ?=(%wing -.e) ~
8056+ ?. ?=([@ ~] names.e) ~
8057+ =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
8058+ ?~ scheme ~
8059+ ?. (grec-direct-context typ.u.scheme sub.state) ~
8060+ `(infer-fragment e env state)
8061+::
78088062++ infer-known-union-branch-subject
78098063 |= [e=expr env=ienv subject=iresult]
78108064 ^- iresult
8065+ =. subject (grec-match-view e subject)
78118066 =. subject (jrec-match-view e subject)
78128067 =/ whole=(unit iresult) (infer-known-union-whole e env subject)
78138068 ?~ whole (infer-known-union-finite e env subject ~)
@@ -7822,6 +8077,7 @@
78228077++ infer-known-union-context-subject
78238078 |= [e=expr expected=itype env=ienv subject=iresult context=span]
78248079 ^- iresult
8080+ =. subject (grec-match-view e subject)
78258081 =. subject (jrec-match-view e subject)
78268082 =/ whole=(unit iresult) (infer-known-union-context-whole e expected env subject context)
78278083 ?~ whole (infer-known-union-finite e env subject `[expected context])
@@ -7874,9 +8130,67 @@
78748130 =/ subject=iresult (infer-fragment e env state)
78758131 ?: ?=(%| -.subject) ?:((union-subject-call e) `subject ~)
78768132 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
7877− ?. |(?=(%union -.typ) ?=(%jrec -.typ)) ~
8133+ ?. |(?=(%union -.typ) ?=(%jrec -.typ) &(?=(%grec -.typ) (grec-direct-context typ.p.subject sub.state.p.subject))) ~
78788134 `subject
78798135::
8136+:: A direct wing with an already-known union may skip genuinely empty cases
8137+:: when checking a one-arm match. Other subjects keep their existing path.
8138+:: A directly known canonical list of an empty element contains only null.
8139+:: This helper never refines an opaque or variable-bound subject.
8140+++ empty-list-null-branch
8141+ |= [e=expr env=ienv state=istate expected=(unit [typ=itype context=span])]
8142+ ^- (unit iresult)
8143+ ?. ?=(%branch -.e) ~
8144+ ?~ arms.e ~
8145+ ?^ t.arms.e ~
8146+ ?. (unit-empty-pattern pat.i.arms.e) ~
8147+ ?. ?=(%wing -.subject.e) ~
8148+ ?. ?=([@ ~] names.subject.e) ~
8149+ =/ scheme=(unit ischeme) (ienv-lookup i.names.subject.e env)
8150+ ?~ scheme ~
8151+ ?. ?=(%collection -.typ.u.scheme) ~
8152+ ?. =(%list name.typ.u.scheme) ~
8153+ ?~ prelude.state ~
8154+ ?. =(at.u.prelude.state /lib/jibb/prelude/jibb) ~
8155+ =/ standard=(unit ischeme) (find-jibb-mold %list u.prelude.state)
8156+ ?~ standard ~
8157+ ?. =(u.standard [[%collection %list ~[[%var 0]]] ~[0]]) ~
8158+ =/ subject=iresult (infer-fragment subject.e env state)
8159+ ?: ?=(%| -.subject) ~
8160+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
8161+ ?. ?=(%collection -.typ) ~
8162+ ?. =(%list name.typ) ~
8163+ ?~ args.typ ~
8164+ ?^ t.args.typ ~
8165+ =/ proof=(unit [empty=? left=@ud]) (itype-empty-proof i.args.typ sub.state.p.subject 256)
8166+ ?~ proof ~
8167+ ?. empty.u.proof ~
8168+ ?~ expected `(infer-fragment val.i.arms.e env state.p.subject)
8169+ =/ body=iresult (infer-call-context-arg val.i.arms.e typ.u.expected env state.p.subject context.u.expected)
8170+ ?: ?=(%| -.body) `body
8171+ =/ fit=ifit (itype-fit typ.p.body typ.u.expected sub.state.p.body next.state.p.body)
8172+ ?: ?=(%unknown -.fit) `[%| ["single-case branch result constraint is not supported by partial inference" ~]]
8173+ ?: ?=(%bad -.fit) `[%| ["single-case branch arm does not fit its expected type" ~[[context.u.expected "expected type"] [(span-of val.i.arms.e) "branch arm"]]]]
8174+ ?: (itype-has-tag (itype-normalize typ.u.expected sub.fit))
8175+ `[%| ["single-case branch result needs context in partial inference" ~]]
8176+ `[%& typ.p.body state.p.body(sub sub.fit, next next.fit)]
8177+::
8178+++ known-empty-union-wing
8179+ |= [e=expr env=ienv state=istate]
8180+ ^- (unit iresult)
8181+ ?. ?=(%wing -.e) ~
8182+ ?. ?=([@ ~] names.e) ~
8183+ =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
8184+ ?~ scheme ~
8185+ ?. (contextual-direct-union typ.u.scheme) ~
8186+ =/ subject=iresult (infer-fragment e env state)
8187+ ?: ?=(%| -.subject) ~
8188+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
8189+ ?. ?=(%union -.typ) ~
8190+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
8191+ ?~ live ~
8192+ ?: =(u.live cases.typ) ~
8193+ `subject
78808194::
78818195:: Infer changes only against a fully known record spine. Retain the
78828196:: target type; unknown spines and repeated edits remain unsupported.
@@ -8121,7 +8435,10 @@
81218435 =/ traced=iresult $(e val.e)
81228436 ?: ?=(%| -.traced) traced
81238437 $(e then.e, state state.p.traced)
8124− %tuple (infer-simple-items items.e env state)
8438+ %tuple
8439+ ?: &(?=(^ defer.state) ?=(^ prelude.state))
8440+ (dg-infer-tuple-items items.e env state)
8441+ (infer-simple-items items.e env state)
81258442 %body
81268443 ?~ defs.e $(e final.e)
81278444 =/ local-names=(list term) (global-value-names defs.e)
@@ -8144,8 +8461,15 @@
81448461 ?: ?=(%| -.result) result
81458462 [%& typ.p.result state.p.result(globals globals.state, molds molds.state)]
81468463 %branch
8464+ ?^ defer.state (dg-boolean-branch e env state)
81478465 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
81488466 ?~ t.arms.e
8467+ =/ empty-list=(unit iresult) (empty-list-null-branch e env state ~)
8468+ ?^ empty-list u.empty-list
8469+ =/ empty-union=(unit iresult) (known-empty-union-wing subject.e env state)
8470+ ?^ empty-union (infer-known-union-branch-subject e env u.empty-union)
8471+ =/ single=(unit iresult) (grec-single-wing-subject subject.e env state)
8472+ ?^ single (infer-known-union-branch-subject e env u.single)
81498473 ?: (single-structured-pattern e) (infer-single-case-branch e env state ~)
81508474 (infer-cell-branch e env state ~)
81518475 ?^ t.t.arms.e (infer-known-union-branch e env state)
@@ -8213,6 +8537,8 @@
82138537 =/ nested=(unit idiag) (nested-missing-tag val.e typ.p.value typ.u.target sub.state.p.value next.state.p.value at.shape.e)
82148538 ?^ nested [%| u.nested]
82158539 [%| ["cast mold and expression type do not unify" ~[[at.shape.e (site-type-note "cast mold" typ.u.target sub.state.p.value)] [(span-of val.e) (site-type-note "expression" typ.p.value sub.state.p.value)]]]]
8540+ ?: &(?=(^ defer.state.p.value) !(dg-stable-fit typ.p.value typ.u.target sub.fit))
8541+ [%| ["deferred cast fit needs stable inference" ~]]
82168542 =/ merged=itype (itype-merge-faces typ.p.value typ.u.target sub.fit)
82178543 [%& merged state.p.value(sub sub.fit, next next.fit)]
82188544 %crash [%& [%var next.state] state(next +(next.state))]
@@ -8520,7 +8846,13 @@
85208846 ?: ?=(%ok -.fit) ~
85218847 (direct-gate-call-fit e typ.p.arg sample.ht env st)
85228848 =. fit ?~(direct fit u.direct)
8523− ?: ?=(%unknown -.fit) [%| ["call constraint is not supported by partial inference" ~]]
8849+ ?: ?=(%unknown -.fit)
8850+ ?~ defer.st [%| ["call constraint is not supported by partial inference" ~]]
8851+ =/ edge=(unit dgo) (dg-eligible-ctor e typ.p.head typ.p.arg sample.ht st)
8852+ ?~ edge [%| ["call constraint is not supported by partial inference" ~]]
8853+ ?: (gth (lent obligations.st) 63) [%| ["call constraint is not supported by partial inference" ~]]
8854+ [%& product.ht st(obligations [u.edge obligations.st])]
8855+
85248856 ?: ?=(%bad -.fit)
85258857 ?~ t.args.e
85268858 =/ missing=(unit idiag) (missing-union-tag i.args.e sample.ht sub.st (span-of head.e))
@@ -8535,6 +8867,8 @@
85358867 =/ arg-at=span ?~(bad whole-args at.u.bad)
85368868 =/ arg-type=itype ?~(bad typ.p.arg typ.u.bad)
85378869 [%| ["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)]]]]
8870+ ?: &(?=(^ defer.st) !(dg-stable-call-fit typ.p.arg sample.ht product.ht sub.fit ?=(^ t.args.e)))
8871+ [%| ["deferred call fit needs stable inference" ~]]
85388872 =/ face-asym=?
85398873 ?^ direct |
85408874 ?^ t.args.e (itype-positional-face-asym args.e typ.p.arg sample.ht sub.fit)
@@ -8768,6 +9102,20 @@
87689102 ?: ?=(?(%cell %face %fn %union %collection) -.val.i.sub) |
87699103 $(sub t.sub)
87709104::
9105+:: Check the syntactic root before scanning; scan substitutions once.
9106+++ grec-direct-context
9107+ |= [expected=itype sub=isub]
9108+ ^- ?
9109+ =/ left=@ud 4.096
9110+ |-
9111+ ?: ?=(%face -.expected)
9112+ ?: =(0 left) |
9113+ $(expected body.expected, left (dec left))
9114+ ?. ?=(%grec -.expected) |
9115+ ?~ sub &
9116+ ?: =(0 left) |
9117+ ?: ?=(?(%cell %face %fn %union %collection %grec) -.val.i.sub) |
9118+ $(sub t.sub, left (dec left))
87719119++ contextual-direct-union
87729120 |= target=itype
87739121 ^- ?
@@ -8792,9 +9140,112 @@
87929140 $(remaining t.remaining, found `c)
87939141 $(remaining t.remaining)
87949142::
9143+:: A bounded syntactic screen: no nested branch, cast, gate or local body
9144+:: can re-enter cell-branch retry during either inference attempt.
9145+++ closed-cell-retry-safe
9146+ |= [todo=(list expr) fuel=@ud]
9147+ ^- ?
9148+ ?~ todo &
9149+ ?: =(0 fuel) |
9150+ =/ e=expr i.todo
9151+ =. fuel (dec fuel)
9152+ ?+ -.e |
9153+ %lit $(todo t.todo)
9154+ %wing $(todo t.todo)
9155+ %ctor $(todo t.todo)
9156+ %path $(todo t.todo)
9157+ %crash $(todo t.todo)
9158+ %str
9159+ ?. (levy pieces.e |=(p=piece ?=(%text -.p))) |
9160+ $(todo t.todo)
9161+ %group $(todo [inner.e t.todo])
9162+ %pair $(todo [val.e t.todo])
9163+ %unit $(todo [val.e t.todo])
9164+ %list $(todo (weld items.e t.todo))
9165+ %tuple $(todo (weld (turn items.e |=(i=item val.i)) t.todo))
9166+ %change $(todo (weld (turn edits.e |=(ed=edit val.ed)) t.todo))
9167+ %call $(todo [head.e (weld args.e t.todo)])
9168+ %trace $(todo [val.e then.e t.todo])
9169+ ==
9170+::
9171+++ closed-cell-sub-safe
9172+ |= [sub=isub fuel=@ud]
9173+ ^- ?
9174+ ?~ sub &
9175+ ?: =(0 fuel) |
9176+ ?: ?=(?(%cell %face %fn %union %collection %grec %jrec %recursive) -.val.i.sub) |
9177+ $(sub t.sub, fuel (dec fuel))
9178+::
9179+++ closed-cell-branch-eligible
9180+ |= [e=expr expected=itype sub=isub]
9181+ ^- ?
9182+ ?. &(?=(%branch -.e) ?=(%cell -.expected) (closed-cell-sub-safe sub 512)) |
9183+ ?~ arms.e |
9184+ ?~ t.arms.e |
9185+ ?^ t.t.arms.e |
9186+ =/ x=arm i.arms.e
9187+ =/ y=arm i.t.arms.e
9188+ ?. &(?=(%lit -.pat.x) ?=(%lit -.pat.y)) |
9189+ ?. &(=(%loobean form.lit.pat.x) =(%loobean form.lit.pat.y)) |
9190+ ?: =(val.lit.pat.x val.lit.pat.y) |
9191+ (closed-cell-retry-safe ~[subject.e val.x val.y] 512)
9192+::
9193+:: Attempt ordinary inference first; retry from the same state only for
9194+:: the bounded non-reentrant syntax above. Preserve original value faces.
9195+++ infer-closed-cell-branch
9196+ |= [e=expr expected=itype env=ienv state=istate context=span]
9197+ ^- iresult
9198+ ?> (closed-cell-branch-eligible e expected sub.state)
9199+ ?> ?=(%branch -.e)
9200+ ?> ?=(^ arms.e)
9201+ ?> ?=(^ t.arms.e)
9202+ =/ ordinary=iresult (infer-fragment e env state)
9203+ =/ ordinary-good=?
9204+ ?: ?=(%| -.ordinary) |
9205+ =/ fit=ifit (itype-fit typ.p.ordinary expected sub.state.p.ordinary next.state.p.ordinary)
9206+ ?=(%ok -.fit)
9207+ ?: ordinary-good ordinary
9208+ =/ attempt=(unit iresult)
9209+ =/ x=arm i.arms.e
9210+ =/ y=arm i.t.arms.e
9211+ =/ subject=iresult (infer-fragment subject.e env state)
9212+ ?: ?=(%| -.subject) ~
9213+ =/ subject-type=itype (itype-normalize typ.p.subject sub.state.p.subject)
9214+ ?: ?=(%union -.subject-type) ~
9215+ =/ su=(unit isub) (itype-unify typ.p.subject [%flag ~] sub.state.p.subject)
9216+ ?~ su ~
9217+ =/ left=iresult (infer-call-context-arg val.x expected env state.p.subject(sub u.su) context)
9218+ ?: ?=(%| -.left) ~
9219+ =/ lf=ifit (itype-fit typ.p.left expected sub.state.p.left next.state.p.left)
9220+ ?. ?=(%ok -.lf) ~
9221+ =/ right=iresult (infer-call-context-arg val.y expected env state.p.left(sub sub.lf, next next.lf) context)
9222+ ?: ?=(%| -.right) ~
9223+ =/ rf=ifit (itype-fit typ.p.right expected sub.state.p.right next.state.p.right)
9224+ ?. ?=(%ok -.rf) ~
9225+ =/ sub=isub sub.rf
9226+ =/ next=@ud next.rf
9227+ =/ lt=itype (itype-normalize typ.p.left sub)
9228+ =/ rt=itype (itype-normalize typ.p.right sub)
9229+ =/ et=itype (itype-normalize expected sub)
9230+ ?. =(lt rt) ~
9231+ ?: |(?=(^ (itype-vars lt)) ?=(^ (itype-vars rt)) ?=(^ (itype-vars et))) ~
9232+ ?: |((itype-has-tag lt) (itype-has-tag rt) (itype-has-tag et)) ~
9233+ =/ lcheck=ifit (itype-fit typ.p.left expected sub next)
9234+ ?. ?=(%ok -.lcheck) ~
9235+ ?. &(=(sub.lcheck sub) =(next.lcheck next)) ~
9236+ =/ rcheck=ifit (itype-fit typ.p.right expected sub next)
9237+ ?. ?=(%ok -.rcheck) ~
9238+ ?. &(=(sub.rcheck sub) =(next.rcheck next)) ~
9239+ `[%& typ.p.left state.p.right(sub sub, next next)]
9240+ ?~ attempt ordinary
9241+ u.attempt
9242+::
87959243++ infer-call-context-arg
87969244 |= [e=expr expected=itype env=ienv state=istate context=span]
87979245 ^- iresult
9246+ ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9247+ ?: &(?=(^ defer.state) ?=(^ prelude.state) ?=(%tuple -.e))
9248+ (infer-fragment e env state)
87989249 ?: ?=(%pair -.e) $(e (pair-as-cell e))
87999250 ?: ?=(%group -.e) $(e inner.e)
88009251 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
@@ -8807,6 +9258,23 @@
88079258 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
88089259 ?: (explicit-proj-call e env state)
88099260 (infer-proj-context e expected env state context)
9261+ :: Experimental construction only for a source-proven direct target.
9262+ :: Decline any walked structural binding to retain raw-variable provenance.
9263+ ?: &(?=(%grec -.target) ?=(%tuple -.e) (grec-direct-context expected sub.state))
9264+ =/ unfolded=(unit [view=itype left=@ud]) (grec-unfold-view target jrec-fuel.state)
9265+ ?~ unfolded [%| ["recursive mold unfolding needs unsupported inference" ~]]
9266+ ?~ items.e [%| ["recursive mold constructor needs unsupported inference" ~]]
9267+ =/ first=item i.items.e
9268+ ?. &(?=(~ face.first) ?=(%lit -.val.first) =(%term form.lit.val.first))
9269+ [%| ["recursive mold constructor needs unsupported inference" ~]]
9270+ =/ chosen=(unit itype) (contextual-tagged-case view.u.unfolded val.lit.val.first sub.state)
9271+ ?~ chosen [%| ["recursive mold constructor has no matching case" ~]]
9272+ =/ value=iresult (infer-call-context-items items.e u.chosen env state(jrec-fuel left.u.unfolded) context)
9273+ ?: ?=(%| -.value) value
9274+ =/ fit=ifit (itype-fit typ.p.value u.chosen sub.state.p.value next.state.p.value)
9275+ ?: ?=(%unknown -.fit) [%| ["recursive mold case needs unsupported inference" ~]]
9276+ ?: ?=(%bad -.fit) [%| ["recursive mold case does not fit its source shape" ~]]
9277+ [%& target state.p.value(sub sub.fit, next next.fit)]
88109278 :: Only the source-proven one-layer cell is exposed. Each recursive
88119279 :: descent consumes one written tuple; named values use ordinary fit.
88129280 ?: &(?=(%jrec -.target) ?=(%lit -.e) =(%null form.lit.e))
@@ -8824,7 +9292,14 @@
88249292 ?: ?=(%bad -.fit) [%| ["recursive mold cell does not fit its source shape" ~]]
88259293 [%& target state.p.value(sub sub.fit, next next.fit)]
88269294 ?: ?=(%call -.e) (infer-contextual-call e target env state)
9295+ =/ empty-list=(unit iresult) (empty-list-null-branch e env state `[target context])
9296+ ?^ empty-list u.empty-list
88279297 ?: (single-structured-pattern e)
9298+ ?> ?=(%branch -.e)
9299+ =/ empty-union=(unit iresult) (known-empty-union-wing subject.e env state)
9300+ ?^ empty-union (infer-known-union-context-subject e target env u.empty-union context)
9301+ =/ single=(unit iresult) (grec-single-wing-subject subject.e env state)
9302+ ?^ single (infer-known-union-context-subject e target env u.single context)
88289303 (infer-single-case-branch e env state `[target context])
88299304 ?: (cell-binder-pattern e)
88309305 (infer-cell-branch e env state `[target context])
@@ -8844,6 +9319,8 @@
88449319 (infer-known-union-context-subject e target env u.known context)
88459320 ?: &(?=(%union -.target) ?=(%unit -.e))
88469321 (infer-unit-context e target env state context)
9322+ ?: (closed-cell-branch-eligible e expected sub.state)
9323+ (infer-closed-cell-branch e expected env state context)
88479324 ?: &(?=(%flag -.target) (context-union-branch e))
88489325 (infer-union-context e target env state context)
88499326 ?: &(?=(%union -.target) (context-union-branch e))
@@ -8982,7 +9459,7 @@
89829459 ?~ t.names |
89839460 =. typ (itype-walk typ sub)
89849461 ?: ?=(%cell -.typ) $(typ tal.typ, names t.names)
8985− |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
9462+ |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%grec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
89869463::
89879464++ cell-binder-pattern
89889465 |= e=expr
@@ -9053,6 +9530,7 @@
90539530 %any-atom "@"
90549531 %flag "?"
90559532 %noun "*"
9533+ %empty "!!"
90569534 %tag (trip txt.literal.t)
90579535 %const (trip txt.literal.t)
90589536 %union
@@ -9061,6 +9539,7 @@
90619539 "({(trip u.label.t)} {(show-itype-cases args.t sub)})"
90629540 %recursive ?~(label.t "recursive mold" (trip u.label.t))
90639541 %jrec ?~(label.t "recursive mold" (trip u.label.t))
9542+ %grec ?~(label.t "recursive mold" "({(trip u.label.t)} {(show-itype-cases args.t sub)})")
90649543 %collection "({(trip name.t)} {(show-itype-cases args.t sub)})"
90659544 %face "[{(trip name.t)}={(show-itype-context body.t sub)}]"
90669545 %fn "$-({(show-itype-context sample.t sub)} {(show-itype-context product.t sub)})"
@@ -9104,11 +9583,13 @@
91049583 %any-atom |
91059584 %flag |
91069585 %noun |
9586+ %empty |
91079587 %tag |
91089588 %const |
91099589 %union |((lien cases.typ |=(c=itype (itype-has-nvar c))) (lien args.typ |=(c=itype (itype-has-nvar c))))
91109590 %recursive |
91119591 %jrec |
9592+ %grec (lien args.typ |=(c=itype (itype-has-nvar c)))
91129593 %collection (lien args.typ |=(c=itype (itype-has-nvar c)))
91139594 %face $(typ body.typ)
91149595 %fn |($(typ sample.typ) $(typ product.typ))
@@ -9220,11 +9701,13 @@
92209701 %any-atom |
92219702 %flag |
92229703 %noun |
9704+ %empty |
92239705 %tag |
92249706 %const |
92259707 %union |((lien cases.t |=(c=itype (has-atom-var n c))) (lien args.t |=(c=itype (has-atom-var n c))))
92269708 %recursive |
92279709 %jrec |
9710+ %grec (lien args.t |=(c=itype (has-atom-var n c)))
92289711 %collection (lien args.t |=(c=itype (has-atom-var n c)))
92299712 %face $(t body.t)
92309713 %fn |($(t sample.t) $(t product.t))
@@ -9368,6 +9851,7 @@
93689851++ infer-recursive-gate
93699852 |= [d=def env=ienv state=istate]
93709853 ^- iresult
9854+ ?^ defer.state [%| ["deferred recursive inference is unsupported" ~]]
93719855 =. gate-defs.state ~
93729856 ?. ?=(%value -.d) [%| ["recursive definition is not a gate" ~]]
93739857 ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
@@ -9592,6 +10076,7 @@
959210076++ infer-gate-group
959310077 |= [ds=(list def) env=ienv state=istate]
959410078 ^- ilocal-result
10079+ ?^ defer.state [%| ["deferred recursive inference is unsupported" ~]]
959510080 =/ names=(list term) (global-value-names ds)
959610081 ?. (levy names |=(n=term (unique-value-name n names)))
959710082 [%| ["recursive group contains duplicate names" ~]]
@@ -9633,36 +10118,9 @@
963310118++ add-supported-defs
963410119 |= [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)]
963510120 ^- [env=ienv artifacts=(list iwidth-definition)]
9636− ?~ ds [env artifacts]
9637− =/ d=def i.ds
9638− ?: ?=(%mold -.d) $(ds t.ds)
9639− ?. (unique-value-name name.d globals) $(ds t.ds)
9640− ?^ (ienv-lookup name.d env) $(ds t.ds)
9641− =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9642− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
9643− =. gate-defs.initial checked
9644− =. head-evidence.initial heads
9645− =. initial (reserve-def-caps val.d initial)
9646− =/ result=iresult (infer-fragment val.d env initial)
9647− =? result ?=(%| -.result) (infer-recursive-gate d env initial)
9648− ?: ?=(%| -.result) $(ds t.ds)
9649− =. state.p.result (promote-restricted-numbers state.p.result env)
9650− =. 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)))
9651− ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
9652− ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
9653− =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
9654− ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
9655− ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
9656− =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
9657− ?: (gth (lent vars) 26) $(ds t.ds)
9658− =/ finalized=(unit (list iwprojection))
9659− (width-finalize projections.state.p.result sub.state.p.result vars)
9660− ?~ finalized $(ds t.ds)
9661− =? artifacts ?=(^ u.finalized)
9662− [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
9663− =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
9664− $(ds t.ds, env [[name.d [typ vars]] env], checked checked)
10121+ (add-supported-defs-core ds all-defs checked heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts ~)
966510122::
10123+
966610124+$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
966710125+$ iadj (map term (list term))
966810126+$ ivisited (map term ?)
@@ -9776,6 +10234,56 @@
977610234++ resolve-groups
977710235 |= [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)]
977810236 ^- iresolved
10237+ (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
10238+::
10239+
10240++$ iadded-definition
10241+ [env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10242+++ add-supported-result
10243+ |= [d=def result=iresult initial=istate env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10244+ ^- (unit iadded-definition)
10245+ ?> ?=(%value -.d)
10246+ ?: ?=(%| -.result) ~
10247+ =. state.p.result (promote-restricted-numbers state.p.result env)
10248+ =. 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)))
10249+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) ~
10250+ ?: (constrained-capitals caps.state.p.result sub.state.p.result) ~
10251+ =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10252+ ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) ~
10253+ ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) ~
10254+ =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10255+ ?: (gth (lent vars) 26) ~
10256+ =/ finalized=(unit (list iwprojection))
10257+ (width-finalize projections.state.p.result sub.state.p.result vars)
10258+ ?~ finalized ~
10259+ =? artifacts ?=(^ u.finalized)
10260+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10261+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10262+ `[[[name.d [typ vars]] env] checked artifacts]
10263+++ add-supported-defs-core
10264+ |= [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)])]
10265+ ^- [env=ienv artifacts=(list iwidth-definition)]
10266+ ?~ ds [env artifacts]
10267+ =/ d=def i.ds
10268+ ?: ?=(%mold -.d) $(ds t.ds)
10269+ ?. (unique-value-name name.d globals) $(ds t.ds)
10270+ ?^ (ienv-lookup name.d env) $(ds t.ds)
10271+ =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10272+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
10273+ =. grec-index.initial index
10274+ =. gate-defs.initial checked
10275+ =. head-evidence.initial heads
10276+ =. initial (reserve-def-caps val.d initial)
10277+ =/ result=iresult (infer-fragment val.d env initial)
10278+ =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10279+ =/ added=(unit iadded-definition)
10280+ (add-supported-result d result initial env checked artifacts)
10281+ ?~ added $(ds t.ds)
10282+ $(ds t.ds, env env.u.added, checked checked.u.added, artifacts artifacts.u.added)
10283+::
10284+++ resolve-groups-core
10285+ |= [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)])]
10286+ ^- iresolved
977910287 =/ env=ienv ~
978010288 =/ grouped=(list term) ~
978110289 =/ artifacts=(list iwidth-definition) ~
@@ -9787,8 +10295,9 @@
978710295 =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
978810296 |-
978910297 =/ next=[env=ienv artifacts=(list iwidth-definition)]
9790− (add-supported-defs ds ds (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9791− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
10298+ (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)
10299+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
10300+ =. grec-index.initial index
979210301 =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
979310302 ?: =(env env.out) out
979410303 $(env env.out, grouped grouped.out, artifacts artifacts.out)
@@ -10037,6 +10546,257 @@
1003710546 %overlap
1003810547 %unknown
1003910548::
10549+:: A source-only fallback for literal-tagged cells and one-hop local
10550+:: generic applications. It screens all work before ordinary inference.
10551+++ union-simple-shape-budget
10552+ |= [s=shape fuel=@ud vars=(unit (list @t))]
10553+ ^- (unit @ud)
10554+ ?: =(0 fuel) ~
10555+ =. fuel (dec fuel)
10556+ ?- -.s
10557+ ?(%aura %noun %void %flag) `fuel
10558+ %tvar
10559+ ?~ vars `fuel
10560+ ?:((lien u.vars |=(n=@t =(n name.s))) `fuel ~)
10561+ %const
10562+ ?. |(=(%term form.lit.s) =(%null form.lit.s) =(%loobean form.lit.s)) ~
10563+ ?: &(=(%loobean form.lit.s) !|(=(0 val.lit.s) =(1 val.lit.s))) ~
10564+ `fuel
10565+ %cell (union-simple-fields-budget fields.s fuel vars)
10566+ %fn
10567+ =/ left=(unit @ud) $(s sample.s, fuel fuel)
10568+ ?~ left ~
10569+ $(s product.s, fuel u.left)
10570+ * ~
10571+ ==
10572+++ union-simple-fields-budget
10573+ |= [fields=(list field) fuel=@ud vars=(unit (list @t))]
10574+ ^- (unit @ud)
10575+ ?~ fields `fuel
10576+ ?: =(0 fuel) ~
10577+ =/ field-shape=shape
10578+ ?- -.i.fields
10579+ %bare shape.i.fields
10580+ %face shape.i.fields
10581+ %pun [%ref at.i.fields ~[name.i.fields]]
10582+ ==
10583+ =/ head=(unit @ud) (union-simple-shape-budget field-shape (dec fuel) vars)
10584+ ?~ head ~
10585+ $(fields t.fields, fuel u.head)
10586+++ union-source-find
10587+ |= [n=term molds=imolds fuel=@ud]
10588+ ^- (unit [body=shape left=@ud])
10589+ =/ found=(unit shape) ~
10590+ |-
10591+ ?~ molds
10592+ ?~ found ~
10593+ `[u.found fuel]
10594+ ?: =(0 fuel) ~
10595+ ?: =(n name.i.molds)
10596+ ?^ found ~
10597+ $(molds t.molds, fuel (dec fuel), found `body.i.molds)
10598+ $(molds t.molds, fuel (dec fuel))
10599+++ union-source-args-budget
10600+ |= [vars=(list @t) args=(list shape) fuel=@ud]
10601+ ^- (unit @ud)
10602+ =/ seen=(set @t) *(set @t)
10603+ |-
10604+ ?~ vars ?~(args `fuel ~)
10605+ ?~ args ~
10606+ ?: =(0 fuel) ~
10607+ ?: (~(has in:..zuse seen) i.vars) ~
10608+ =/ arg=(unit @ud) (union-simple-shape-budget i.args (dec fuel) ~)
10609+ ?~ arg ~
10610+ $(vars t.vars, args t.args, fuel u.arg, seen (~(put in:..zuse seen) i.vars))
10611+++ union-source-cell-tag
10612+ |= s=shape
10613+ ^- (unit @)
10614+ ?. ?=(%cell -.s) ~
10615+ ?~ fields.s ~
10616+ ?~ t.fields.s ~
10617+ ?. ?=(%bare -.i.fields.s) ~
10618+ =/ head=shape shape.i.fields.s
10619+ ?. ?=(%const -.head) ~
10620+ ?. |(=(%term form.lit.head) =(%null form.lit.head) =(%loobean form.lit.head)) ~
10621+ ?: &(=(%loobean form.lit.head) !|(=(0 val.lit.head) =(1 val.lit.head))) ~
10622+ `val.lit.head
10623+++ union-source-case-tag
10624+ |= [s=shape molds=imolds fuel=@ud]
10625+ ^- (unit [tag=@ left=@ud])
10626+ ?: ?=(%cell -.s)
10627+ =/ tag=(unit @) (union-source-cell-tag s)
10628+ ?~ tag ~
10629+ =/ left=(unit @ud) (union-simple-shape-budget s fuel ~)
10630+ ?~ left ~
10631+ `[u.tag u.left]
10632+ ?. ?=(%apply -.s) ~
10633+ ?. ?=([@ ~] ref.s) ~
10634+ ?: =(0 fuel) ~
10635+ =/ found=(unit [body=shape left=@ud]) (union-source-find i.ref.s molds (dec fuel))
10636+ ?~ found ~
10637+ ?. ?=(%generic -.body.u.found) ~
10638+ ?~ vars.body.u.found ~
10639+ =/ tag=(unit @) (union-source-cell-tag body.body.u.found)
10640+ ?~ tag ~
10641+ =/ args=(unit @ud) (union-source-args-budget vars.body.u.found args.s left.u.found)
10642+ ?~ args ~
10643+ =/ left=(unit @ud) (union-simple-shape-budget body.body.u.found u.args `vars.body.u.found)
10644+ ?~ left ~
10645+ `[u.tag u.left]
10646+++ union-source-distinct-tags
10647+ |= [cases=(list shape) molds=imolds fuel=@ud]
10648+ ^- ?
10649+ =/ seen=(set @) *(set @)
10650+ =/ has-application=? |
10651+ |-
10652+ ?~ cases has-application
10653+ ?: =(0 fuel) |
10654+ =/ item=(unit [tag=@ left=@ud]) (union-source-case-tag i.cases molds (dec fuel))
10655+ ?~ item |
10656+ ?: (~(has in:..zuse seen) tag.u.item) |
10657+ $(cases t.cases, fuel left.u.item, seen (~(put in:..zuse seen) tag.u.item), has-application |(has-application ?=(%apply -.i.cases)))
10658+::
10659+:: This inference-only screen bounds inherited work that the small source
10660+:: slice may consult. It does not authenticate a caller-created state.
10661+++ union-state-leaf
10662+ |= t=itype
10663+ ^- ?
10664+ ?=(?(%var %avar %rvar %nvar %rnvar %atom %any-atom %flag %noun %empty %const) -.t)
10665+++ union-state-params-budget
10666+ |= [params=iparams fuel=@ud]
10667+ ^- (unit @ud)
10668+ ?~ params `fuel
10669+ ?: =(0 fuel) ~
10670+ ?. (union-state-leaf typ.i.params) ~
10671+ $(params t.params, fuel (dec fuel))
10672+++ union-state-sub-budget
10673+ |= [sub=isub fuel=@ud]
10674+ ^- (unit @ud)
10675+ ?~ sub `fuel
10676+ ?: =(0 fuel) ~
10677+ ?. (union-state-leaf val.i.sub) ~
10678+ $(sub t.sub, fuel (dec fuel))
10679+++ union-state-caps-budget
10680+ |= [caps=icaps fuel=@ud]
10681+ ^- (unit @ud)
10682+ ?~ caps `fuel
10683+ ?: =(0 fuel) ~
10684+ $(caps t.caps, fuel (dec fuel))
10685+++ union-state-active-budget
10686+ |= [active=(list term) fuel=@ud]
10687+ ^- (unit @ud)
10688+ ?~ active `fuel
10689+ ?: =(0 fuel) ~
10690+ $(active t.active, fuel (dec fuel))
10691+++ union-state-tags-budget
10692+ |= [tags=(list ipending) fuel=@ud]
10693+ ^- (unit @ud)
10694+ ?~ tags `fuel
10695+ ?: =(0 fuel) ~
10696+ $(tags t.tags, fuel (dec fuel))
10697+++ union-source-state-safe
10698+ |= [state=istate fuel=@ud]
10699+ ^- ?
10700+ ?^ grec-index.state |
10701+ ?^ holes.state |
10702+ ?^ defer.state |
10703+ ?^ obligations.state |
10704+ =/ params=(unit @ud) (union-state-params-budget params.state fuel)
10705+ ?~ params |
10706+ =/ sub=(unit @ud) (union-state-sub-budget sub.state u.params)
10707+ ?~ sub |
10708+ =/ caps=(unit @ud) (union-state-caps-budget caps.state u.sub)
10709+ ?~ caps |
10710+ =/ active=(unit @ud) (union-state-active-budget active.state u.caps)
10711+ ?~ active |
10712+ ?=(^ (union-state-tags-budget tags.state u.active))
10713+::
10714+:: Positive overlap witnesses from parsed, one-hop local source only.
10715+:: Unknown or exhausted work returns no witness, never disjointness.
10716++$ uow-case [at=span head=@ payload=upat]
10717+++ union-overlap-primitive
10718+ |= s=shape
10719+ ^- (unit upat)
10720+ ?- -.s
10721+ %aura `[%atom ~]
10722+ %noun `[%all ~]
10723+ %void `[%empty ~]
10724+ %flag `[%flag ~]
10725+ %const
10726+ ?. |(=(%term form.lit.s) =(%null form.lit.s) =(%loobean form.lit.s)) ~
10727+ ?: &(=(%loobean form.lit.s) !|(=(0 val.lit.s) =(1 val.lit.s))) ~
10728+ `[%atom `val.lit.s]
10729+ * ~
10730+ ==
10731+++ union-overlap-case
10732+ |= [s=shape molds=imolds fuel=@ud]
10733+ ^- (unit [item=uow-case left=@ud])
10734+ ?: =(0 fuel) ~
10735+ =. fuel (dec fuel)
10736+ :: Each body has exactly two fields; an application has exactly one
10737+ :: parameter and one concrete primitive argument. The full mold table
10738+ :: is scanned to establish unique ownership.
10739+ =/ expanded=(unit [body=shape param=(unit [name=@t pat=upat]) left=@ud])
10740+ ?: ?=(%cell -.s) `[s ~ fuel]
10741+ ?. ?=(%apply -.s) ~
10742+ ?. ?=([@ ~] ref.s) ~
10743+ ?. ?=([* ~] args.s) ~
10744+ ?: =(0 fuel) ~
10745+ =/ found=(unit [body=shape left=@ud]) (union-source-find i.ref.s molds (dec fuel))
10746+ ?~ found ~
10747+ ?. ?=(%generic -.body.u.found) ~
10748+ ?. ?=([@ ~] vars.body.u.found) ~
10749+ ?: =(0 left.u.found) ~
10750+ =/ argument=(unit upat) (union-overlap-primitive i.args.s)
10751+ ?~ argument ~
10752+ `[body.body.u.found `[i.vars.body.u.found u.argument] (dec left.u.found)]
10753+ ?~ expanded ~
10754+ =/ body=shape body.u.expanded
10755+ ?. ?=(%cell -.body) ~
10756+ ?. ?=([* * ~] fields.body) ~
10757+ :: Charge the cell, two fields, and the head and payload nodes.
10758+ ?: (lth left.u.expanded 5) ~
10759+ =/ head=(unit @) (union-source-cell-tag body)
10760+ ?~ head ~
10761+ =/ field=field i.t.fields.body
10762+ =/ payload=shape
10763+ ?- -.field
10764+ %bare shape.field
10765+ %face shape.field
10766+ %pun [%ref at.field ~[name.field]]
10767+ ==
10768+ =/ pattern=(unit upat)
10769+ ?: ?=(%tvar -.payload)
10770+ ?~ param.u.expanded ~
10771+ ?. =(name.payload name.u.param.u.expanded) ~
10772+ `pat.u.param.u.expanded
10773+ (union-overlap-primitive payload)
10774+ ?~ pattern ~
10775+ `[[at.s u.head u.pattern] (sub left.u.expanded 5)]
10776+++ union-overlap-against
10777+ |= [first=uow-case rest=(list shape) molds=imolds fuel=@ud]
10778+ ^- (unit [witness=(unit upair) left=@ud])
10779+ ?~ rest `[~ fuel]
10780+ ?: =(0 fuel) ~
10781+ =/ other=(unit [item=uow-case left=@ud]) (union-overlap-case i.rest molds (dec fuel))
10782+ ?~ other ~
10783+ ?: &(=(head.first head.item.u.other) =(%overlap (union-relate payload.first payload.item.u.other)))
10784+ `[`[at.first at.item.u.other %overlap] left.u.other]
10785+ $(rest t.rest, fuel left.u.other)
10786+++ union-source-overlap
10787+ |= [cases=(list shape) molds=imolds fuel=@ud]
10788+ ^- (unit upair)
10789+ ?~ cases ~
10790+ ?~ t.cases ~
10791+ ?: =(0 fuel) ~
10792+ =/ first=(unit [item=uow-case left=@ud]) (union-overlap-case i.cases molds (dec fuel))
10793+ ?~ first ~
10794+ =/ found=(unit [witness=(unit upair) left=@ud])
10795+ (union-overlap-against item.u.first t.cases molds left.u.first)
10796+ ?~ found ~
10797+ ?^ witness.u.found witness.u.found
10798+ $(cases t.cases, fuel left.u.found)
10799+::
1004010800++ union-pairs
1004110801 |= [cases=(list shape) molds=imolds]
1004210802 ^- (list upair)
@@ -10190,6 +10950,11 @@
1019010950 ?. ?=(%union -.sh) (crip "+$ {(trip name.d)}: not checked")
1019110951 =/ pairs=(list upair) (union-pairs cases.sh molds)
1019210952 =/ overlapping=(list upair) (skim pairs |=(p=upair =(%overlap relation.p)))
10953+ =. overlapping
10954+ ?^ overlapping overlapping
10955+ ?. (lien pairs |=(p=upair =(%unknown relation.p))) ~
10956+ =/ witness=(unit upair) (union-source-overlap cases.sh molds 256)
10957+ ?~(witness ~ ~[u.witness])
1019310958 ?^ overlapping
1019410959 =/ p=upair i.overlapping
1019510960 =/ summary=@t (crip "+$ {(trip name.d)}: overlapping cases; mold not checked")
@@ -10197,7 +10962,9 @@
1019710962 =/ second=@t (show-error src [file line.beg.second.p col.beg.second.p "overlapping case"])
1019810963 (of-wain:format ~[summary first second])
1019910964 ?: (lien pairs |=(p=upair =(%unknown relation.p)))
10200− (crip "+$ {(trip name.d)}: case disjointness unresolved; mold not checked")
10965+ ?. (union-source-distinct-tags cases.sh molds 256)
10966+ (crip "+$ {(trip name.d)}: case disjointness unresolved; mold not checked")
10967+ (crip "+$ {(trip name.d)}: cases proven disjoint; mold not checked")
1020110968 (crip "+$ {(trip name.d)}: cases proven disjoint; mold not checked")
1020210969::
1020310970:: +show-inference-diagnostic: a partial report with both source sites
@@ -10254,7 +11021,14 @@
1025411021+$ jbundle (list jsource)
1025511022+$ jcache (list [at=path iface=ifile])
1025611023+$ jfile-result (each [iface=ifile cache=jcache] @t)
11024+:: Overlap evidence retains the exact source that supplied its spans.
11025+:: Ordinary Jibb imports preserve this evidence through the resolver.
11026++$ jfile-overlap [file=path source=@t name=term cases=upair]
11027++$ jfile-failure [message=@t overlap=(unit jfile-overlap)]
11028++$ jfile-detailed-result (each [iface=ifile cache=jcache] jfile-failure)
1025711029+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
11030+:: Preserve an imported overlap's original file and source across the graph.
11031++$ jimports-detailed-result (each [resolved=ijimports cache=jcache] jfile-failure)
1025811032::
1025911033:: Written record fields each have their own lexical record scope.
1026011034+$ written-fields (map term span)
@@ -10527,6 +11301,43 @@
1052711301 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
1052811302 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
1052911303::
11304+:: A detailed failure is attached only to the first mold that actually
11305+:: failed in this check, using that module's checked source mold table.
11306++$ imold-failure [message=@t overlap=(unit [name=term cases=upair])]
11307+:: Validate a generic wrapper without an unbounded duplicate-name pass.
11308+++ module-mold-params-valid
11309+ |= [vars=(list @t) seen=(set @t) fuel=@ud]
11310+ ^- ?
11311+ ?~ vars &
11312+ ?: =(0 fuel) |
11313+ ?: (~(has in:..zuse seen) i.vars) |
11314+ $(vars t.vars, seen (~(put in:..zuse seen) i.vars), fuel (dec fuel))
11315+++ module-mold-overlap
11316+ |= [m=[name=term body=shape] molds=imolds]
11317+ ^- (unit upair)
11318+ =/ sh=shape body.m
11319+ =/ valid=?
11320+ ?. ?=(%generic -.sh) &
11321+ ?~ vars.sh |
11322+ (module-mold-params-valid vars.sh *(set @t) 256)
11323+ ?. valid ~
11324+ =? sh ?=(%generic -.sh) body.sh
11325+ ?. ?=(%union -.sh) ~
11326+ (union-source-overlap cases.sh molds 256)
11327+++ module-mold-types-detail
11328+ |= [molds=imolds state=istate]
11329+ ^- (each imold-types imold-failure)
11330+ ?~ molds [%& ~]
11331+ =/ m=[name=term body=shape] i.molds
11332+ =/ t=(unit [template=ischeme state=istate])
11333+ (infer-mold-template body.m state(active [name.m active.state], in-mold &))
11334+ ?~ t
11335+ =/ overlap=(unit upair) (module-mold-overlap m molds.state)
11336+ [%| ['module mold needs unsupported inference' ?~(overlap ~ `[name.m u.overlap])]]
11337+ =. typ.template.u.t (label-direct-union typ.template.u.t body.m name.m state)
11338+ =/ rest=(each imold-types imold-failure) $(molds t.molds)
11339+ ?: ?=(%| -.rest) rest
11340+ [%& [[name.m template.u.t] p.rest]]
1053011341++ module-mold-types
1053111342 |= [molds=imolds state=istate]
1053211343 ^- (each imold-types @t)
@@ -10588,6 +11399,9 @@
1058811399 |= [typ=itype name=term vars=(list @ud)]
1058911400 ^- itype
1059011401 ?: ?=(%jrec -.typ) typ(label `name)
11402+ ?: ?=(%grec -.typ)
11403+ ?. (identity-union-parameters vars args.typ) typ(label ~)
11404+ typ(label `name)
1059111405 ?. ?=(%union -.typ) typ
1059211406 ?. (identity-union-parameters vars args.typ)
1059311407 ?~ origin.typ typ
@@ -10620,7 +11434,12 @@
1062011434 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
1062111435 =/ minus=ischeme [[%fn b b] ~[0]]
1062211436 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
10623− [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
11437+ =/ utf8=itype [%atom 'tD']
11438+ =/ tape=itype [%collection %list ~[utf8]]
11439+ =/ codepoints=itype [%collection %list ~[[%atom %c]]]
11440+ =/ text-trip=ischeme [[%fn [%atom %t] tape] ~]
11441+ =/ text-tuba=ischeme [[%fn tape codepoints] ~]
11442+ [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater] [%raw-trip text-trip] [%raw-tuba text-tuba]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
1062411443::
1062511444++ infer-private-internal
1062611445 |= [src=@t public-source=@t]
@@ -10661,7 +11480,7 @@
1066111480 =/ source-unit=(unit ischeme)
1066211481 ?~ unit-decl ~
1066311482 =/ unit-molds=imolds ~[[%unit u.unit-decl]]
10664− =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~ ~ ~]
11483+ =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~ ~ ~ ~ ~ ~]
1066511484 =/ unit-types=imold-types (partial-prelude-molds unit-molds unit-state)
1066611485 =/ unit-iface=ifile [~ unit-types /lib/jibb/prelude/jibb ~ ~ ~ ~ ~]
1066711486 =/ found=(unit ischeme) (find-jibb-mold %unit unit-iface)
@@ -10676,7 +11495,7 @@
1067611495 =/ js=ijimports ~[[face.i.imports.mod primitive]]
1067711496 =/ reserved=(list term) ~[face.i.imports.mod]
1067811497 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10679− =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~ ~ ~]
11498+ =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~ ~ ~ ~ ~ ~]
1068011499 =/ mts=(each imold-types @t) (module-mold-types molds state)
1068111500 =/ usable=(unit imold-types)
1068211501 ?: ?=(%& -.mts) `p.mts
@@ -10732,7 +11551,7 @@
1073211551 =? env-molds declared
1073311552 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
1073411553 =/ reserved=(list term) ?:(declared ~[%list] ~)
10735− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~ ~ ~]
11554+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~ ~ ~ ~ ~ ~]
1073611555 :: Other prelude molds may use list only after its source has passed
1073711556 :: the standard-list check. The raw declaration remains removed.
1073811557 =/ declared-list=(unit shape) (find-simple-mold %list molds)
@@ -10872,33 +11691,40 @@
1087211691++ resolve-jibb-imports
1087311692 |= [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)]
1087411693 ^- jimports-result
11694+ =/ result=jimports-detailed-result
11695+ (resolve-jibb-imports-detailed imports externals mark-externals modules active prelude-values prelude-molds cache prelude)
11696+ ?: ?=(%| -.result) [%| message.p.result]
11697+ [%& p.result]
11698+++ resolve-jibb-imports-detailed
11699+ |= [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)]
11700+ ^- jimports-detailed-result
1087511701 ?~ imports [%& [~ cache]]
1087611702 ?. ?=(%jibb -.i.imports) $(imports t.imports)
1087711703 =/ at=path (weld path.i.imports `path`~[%jibb])
1087811704 ?: =(at /lib/jibb/internal/jibb)
10879− [%| 'the prelude internal module is private']
11705+ [%| ['the prelude internal module is private' ~]]
1088011706 ?: =(at /lib/jibb/primitives/jibb)
10881− [%| 'the prelude primitive interface is private']
11707+ [%| ['the prelude primitive interface is private' ~]]
1088211708 ?: (lien active |=(p=path =(p at)))
10883− [%| (crip "import cycle at {(spud at)}")]
11709+ [%| [(crip "import cycle at {(spud at)}") ~]]
1088411710 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
10885− ?~ found [%| (crip "module source missing: {(spud at)}")]
10886− ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
11711+ ?~ found [%| [(crip "module source missing: {(spud at)}") ~]]
11712+ ?^ t.found [%| [(crip "duplicate module sources: {(spud at)}") ~]]
1088711713 =/ cached=(unit ifile) (find-jibb-cache at cache)
10888− =/ iface=jfile-result
11714+ =/ iface=jfile-detailed-result
1088911715 ?^ cached
10890− ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11716+ ?. =(at.u.cached at) [%| ['cached module identity needs unsupported inference' ~]]
1089111717 ?~ graph.u.cached
1089211718 :: A detached legacy interface has unknown evidence. Rebuild it
1089311719 :: against the current graph, without retaining any stale entry.
1089411720 =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
10895− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
11721+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
1089611722 ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
10897− [%| 'cached module evidence needs unsupported inference']
11723+ [%| ['cached module evidence needs unsupported inference' ~]]
1089811724 [%& [u.cached cache]]
10899− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
11725+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
1090011726 ?: ?=(%| -.iface) [%| p.iface]
10901− =/ rest=jimports-result $(imports t.imports, cache cache.p.iface)
11727+ =/ rest=jimports-detailed-result $(imports t.imports, cache cache.p.iface)
1090211728 ?: ?=(%| -.rest) rest
1090311729 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
1090411730::
@@ -11261,7 +12087,7 @@
1126112087 =/ surs=(list term) (collect-sur-imports imports.mod)
1126212088 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1126312089 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11264− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
12090+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1126512091 =/ mts=(each imold-types @t) (module-mold-types molds state)
1126612092 ?: ?=(%| -.mts) [%| p.mts]
1126712093 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
@@ -11295,7 +12121,7 @@
1129512121 =/ surs=(list term) (collect-sur-imports imports.mod)
1129612122 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1129712123 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11298− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
12124+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1129912125 =/ mts=(each imold-types @t) (module-mold-types molds state)
1130012126 ?: ?=(%| -.mts) [%| p.mts]
1130112127 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
@@ -11632,20 +12458,334 @@
1163212458 [env exports file derived.u.poke elaborations.support ~ `src `graph]
1163312459 [%& [iface dependencies.ev]]
1163412460::
12461+:: A checked program main is only the direct four-component source call.
12462+:: Grouping is transparent, but aliases, qualified wings and other module
12463+:: kinds remain outside this slice.
12464+++ program-main-def
12465+ |= ds=(list def)
12466+ ^- (unit def)
12467+ ?~ ds ~
12468+ ?: &(?=(%value -.i.ds) =(%main name.i.ds)) `i.ds
12469+ $(ds t.ds)
12470+::
12471+++ program-main-wing
12472+ |= e=expr
12473+ ^- (unit term)
12474+ ?: ?=(%group -.e) $(e inner.e)
12475+ ?. ?=(%wing -.e) ~
12476+ ?. ?=([@ ~] names.e) ~
12477+ `i.names.e
12478+::
12479+++ program-main-args
12480+ |= d=def
12481+ ^- (unit (list expr))
12482+ ?. ?=(%value -.d) ~
12483+ |-
12484+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12485+ ?. ?=(%call -.val.d) ~
12486+ =/ head=(unit term) (program-main-wing head.val.d)
12487+ ?~ head ~
12488+ ?. =(%program u.head) ~
12489+ ?. ?=([* * * * ~] args.val.d) ~
12490+ `args.val.d
12491+::
12492+++ program-main-parts
12493+ |= d=def
12494+ ^- (unit [init=term update=term view=term subs=term])
12495+ ?. ?=(%value -.d) ~
12496+ |-
12497+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12498+ ?. ?=(%call -.val.d) ~
12499+ =/ head=(unit term) (program-main-wing head.val.d)
12500+ ?~ head ~
12501+ ?. =(%program u.head) ~
12502+ ?. ?=([* * * * ~] args.val.d) ~
12503+ =/ args=(list expr) args.val.d
12504+ ?> ?=([* * * * ~] args)
12505+ =/ init=(unit term) (program-main-wing i.args)
12506+ =/ update=(unit term) (program-main-wing i.t.args)
12507+ =/ view=(unit term) (program-main-wing i.t.t.args)
12508+ =/ subs=(unit term) (program-main-wing i.t.t.t.args)
12509+ ?~ init ~
12510+ ?~ update ~
12511+ ?~ view ~
12512+ ?~ subs ~
12513+ `[u.init u.update u.view u.subs]
12514+::
12515+++ program-empty-null
12516+ |= e=expr
12517+ ^- ?
12518+ ?- -.e
12519+ %lit =(%null form.lit.e)
12520+ %cast $(e val.e)
12521+ %group $(e inner.e)
12522+ %body ?~(defs.e $(e final.e) |)
12523+ * |
12524+ ==
12525+::
12526+++ program-subs-empty
12527+ |= d=def
12528+ ^- ?
12529+ ?. ?=(%value -.d) |
12530+ ?- -.val.d
12531+ %gate (program-empty-null body.val.d)
12532+ %gate-wide (program-empty-null body.val.d)
12533+ * |
12534+ ==
12535+::
12536+++ program-transparent
12537+ |= e=expr
12538+ ^- expr
12539+ ?- -.e
12540+ %group $(e inner.e)
12541+ %cast $(e val.e)
12542+ %body ?~(defs.e $(e final.e) e)
12543+ * e
12544+ ==
12545+++ program-init-tuple-null
12546+ |= d=def
12547+ ^- ?
12548+ ?. ?=(%value -.d) |
12549+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12550+ =/ body=expr
12551+ ?- -.val.d
12552+ %gate body.val.d
12553+ %gate-wide body.val.d
12554+ * !!
12555+ ==
12556+ =. body (program-transparent body)
12557+ ?. ?=(%tuple -.body) |
12558+ ?~ items.body |
12559+ (program-empty-null val:(rear items.body))
12560+::
12561+:: Recover only the initializer of an already recognized direct program main.
12562+:: The derived call is evidence for an ordinary init/main retry, never an
12563+:: interface to publish on its own. Any failure returns the original resolution.
12564+++ program-init-context
12565+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
12566+ ^- (unit iresolved)
12567+ =/ env=ienv env.resolution
12568+ ?^ (ienv-lookup %main env) ~
12569+ ?^ (ienv-lookup init.parts env) ~
12570+ =/ update=(unit ischeme) (ienv-lookup update.parts env)
12571+ =/ view=(unit ischeme) (ienv-lookup view.parts env)
12572+ =/ subs=(unit ischeme) (ienv-lookup subs.parts env)
12573+ ?~ update ~
12574+ ?~ view ~
12575+ ?~ subs ~
12576+ =/ inits=(list def)
12577+ (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
12578+ ?. ?=([* ~] inits) ~
12579+ =/ init-def=def i.inits
12580+ ?> ?=(%value -.init-def)
12581+ ?. (program-init-tuple-null init-def) ~
12582+ =/ args=(unit (list expr)) (program-main-args main)
12583+ ?~ args ~
12584+ ?~ prelude.initial ~
12585+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
12586+ ?~ program ~
12587+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
12588+ ?~ heads ~
12589+ =/ written=(unit def) (~(get by gates.u.heads) %program)
12590+ ?~ written ~
12591+ =/ written-sample=(unit sample) (direct-gate-sample u.written)
12592+ ?~ written-sample ~
12593+ ?. ?=(%cell -.u.written-sample) ~
12594+ ?~ items.u.written-sample ~
12595+ =/ checked=(map term def) (direct-checked-gates ds env)
12596+ =/ templates=ienv
12597+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
12598+ =/ scanned=(unit dgscan)
12599+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
12600+ ?~ scanned ~
12601+ =. next.initial (dg-next-id ids.u.scanned 0)
12602+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program initial)
12603+ ?. ?=(%fn -.typ.instance) ~
12604+ ?. ?=(%cell -.sample.typ.instance) ~
12605+ =/ expected-init=(unit itype)
12606+ (direct-slot-body hed.sample.typ.instance (direct-sample-name i.items.u.written-sample))
12607+ ?~ expected-init ~
12608+ ?. ?=(%fn -.u.expected-init) ~
12609+ ?. ?=(%var -.sample.u.expected-init) ~
12610+ =/ data=@ud id.sample.u.expected-init
12611+ =/ init-var=itype [%var next.state.instance]
12612+ =/ st=istate state.instance(next +(next.state.instance))
12613+ =/ up=[typ=itype state=istate] (instantiate-scheme u.update st)
12614+ =/ vw=[typ=itype state=istate] (instantiate-scheme u.view state.up)
12615+ =/ sb=[typ=itype state=istate] (instantiate-scheme u.subs state.vw)
12616+ =. st state.sb(gate-defs checked, head-evidence heads)
12617+ =/ actual=itype [%cell init-var [%cell typ.up [%cell typ.vw typ.sb]]]
12618+ =/ fit=ifit
12619+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.st next.st)
12620+ ?. ?=(%ok -.fit) ~
12621+ =/ actual-final=itype (itype-normalize actual sub.fit)
12622+ =/ expected-final=itype (itype-normalize sample.typ.instance sub.fit)
12623+ =/ open=(list @ud)
12624+ (unique-type-vars (weld (itype-vars actual-final) (itype-vars expected-final)))
12625+ ?. (levy open |=(n=@ud =(data n))) ~
12626+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
12627+ =/ replay=ifit
12628+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.fit next.fit)
12629+ ?. ?=(%ok -.replay) ~
12630+ ?. &(=(sub.fit sub.replay) =(next.fit next.replay)) ~
12631+ =/ expected=itype (itype-normalize u.expected-init sub.fit)
12632+ ?. ?=(%fn -.expected) ~
12633+ =. st st(sub sub.fit, next next.fit)
12634+ =/ init-state=istate (reserve-def-caps val.init-def st)
12635+ =/ inferred=iresult (infer-fragment val.init-def env init-state)
12636+ =? inferred ?=(%| -.inferred) (infer-recursive-gate init-def env init-state)
12637+ ?: ?=(%| -.inferred) ~
12638+ ?. ?=(%fn -.typ.p.inferred) ~
12639+ =/ data-fit=ifit
12640+ (itype-fit sample.typ.p.inferred sample.expected sub.state.p.inferred next.state.p.inferred)
12641+ ?. ?=(%ok -.data-fit) ~
12642+ =/ closed=itype (itype-normalize expected sub.data-fit)
12643+ ?. ?=(%fn -.closed) ~
12644+ :: Resolve the ordinary tuple cast first, then check the complete gate.
12645+ :: General function fit remains unchanged; only this recovered candidate
12646+ :: receives the derived result context before its whole-type cast fit.
12647+ =/ product-fit=ifit
12648+ (itype-fit product.typ.p.inferred product.closed sub.data-fit next.data-fit)
12649+ ?. ?=(%ok -.product-fit) ~
12650+ =/ product=itype
12651+ (itype-merge-faces product.typ.p.inferred product.closed sub.product-fit)
12652+ =/ actual-cast=itype [%fn sample.typ.p.inferred product]
12653+ =/ cast=ifit
12654+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
12655+ ?. ?=(%ok -.cast) ~
12656+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
12657+ =/ adjusted=iresult
12658+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
12659+ =/ added=(unit iadded-definition)
12660+ (add-supported-result init-def adjusted init-state env checked artifacts.resolution)
12661+ ?~ added ~
12662+ =/ recovered=(unit ischeme) (ienv-lookup init.parts env.u.added)
12663+ ?~ recovered ~
12664+ ?. ?=(~ vars.u.recovered) ~
12665+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
12666+ =/ completed=[env=ienv artifacts=(list iwidth-definition)]
12667+ (add-supported-defs-core ~[main] ds checked.u.added heads env.u.added molds.initial globals.initial externals.initial surs.initial mark-externals.initial marks.initial jimports.initial reserved-molds.initial at.initial prelude.initial artifacts.u.added grec-index.initial)
12668+ ?~ (ienv-lookup %main env.completed) ~
12669+ `[env.completed grouped.resolution artifacts.completed]
12670+::
12671+++ program-subs-watch
12672+ |= [d=def imports=ijimports graph=irequest-graph prelude=ifile]
12673+ ^- ?
12674+ ?. ?=(%value -.d) |
12675+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12676+ =/ body=expr
12677+ ?- -.val.d
12678+ %gate body.val.d
12679+ %gate-wide body.val.d
12680+ * val.d
12681+ ==
12682+ =. body (program-transparent body)
12683+ ?. ?=(%list -.body) |
12684+ ?. ?=([* ~] items.body) |
12685+ =/ watch=expr (program-transparent i.items.body)
12686+ ?. ?=(%tuple -.watch) |
12687+ ?. ?=([* * ~] items.watch) |
12688+ =/ tag=item i.items.watch
12689+ =/ payload=item i.t.items.watch
12690+ ?. &(?=(~ face.tag) ?=(~ face.payload)) |
12691+ =/ tag-expr=expr (program-transparent val.tag)
12692+ ?. ?=(%lit -.tag-expr) |
12693+ ?. &(?=(%term form.lit.tag-expr) =(%watch val.lit.tag-expr)) |
12694+ =/ request=expr (program-transparent val.payload)
12695+ ?. ?=(%call -.request) |
12696+ ?. ?=([* ~] args.request) |
12697+ =/ head=expr (program-transparent head.request)
12698+ ?. ?=(%wing -.head) |
12699+ ?. ?=([@ @ ~] names.head) |
12700+ =/ case=term i.names.head
12701+ =/ face=term i.t.names.head
12702+ =/ callback=expr (program-transparent i.args.request)
12703+ ?. ?=(%ctor -.callback) |
12704+ ?. ?=(%term form.tag.callback) |
12705+ =/ selected=(list [face=term interface=ifile])
12706+ (skim imports |=(j=[face=term interface=ifile] =(face face.j)))
12707+ ?. ?=([* ~] selected) |
12708+ =/ iface=ifile interface.i.selected
12709+ =/ member=(unit ischeme) (ienv-lookup case values.iface)
12710+ ?~ member |
12711+ ?~ source.iface |
12712+ =/ evidence=(list irequest-evidence)
12713+ (skim requests.graph |=(r=irequest-evidence &(=(api-at.r at.iface) =(name.r case))))
12714+ ?. ?=([* ~] evidence) |
12715+ =/ request-evidence=irequest-evidence i.evidence
12716+ ?. =(u.source.iface api-source.request-evidence) |
12717+ ?. =(name.path.path.request-evidence case) |
12718+ ?~ graph.iface |
12719+ ?. (lien requests.u.graph.iface |=(r=irequest-evidence =(r request-evidence))) |
12720+ ?. ?=(~ scry.path.path.request-evidence) |
12721+ ?. &(?=(~ diffs.path.request-evidence) ?=(~ diffs.path.path.request-evidence)) |
12722+ ?: (lien segments.path.path.request-evidence |=(p=pseg !?=(%knot -.p))) |
12723+ ?. ?=([@ ~] vars.u.member) |
12724+ =/ message=@ud i.vars.u.member
12725+ ?. ?=(%fn -.typ.u.member) |
12726+ ?. ?=(%fn -.sample.typ.u.member) |
12727+ ?. =(sample.sample.typ.u.member full.path.request-evidence) |
12728+ ?. =(product.sample.typ.u.member [%var message]) |
12729+ =/ prep=iprelude [prelude prelude-values.graph prelude-molds.graph]
12730+ =/ ask=(unit ischeme) (request-compatible-ask prep)
12731+ ?~ ask |
12732+ =/ result=(unit itype) (template-apply u.ask ~[[%var message]])
12733+ ?~ result |
12734+ =(product.typ.u.member u.result)
12735+::
12736+++ program-main-closed
12737+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) env=ienv prelude=(unit ifile) imports=ijimports graph=irequest-graph]
12738+ ^- ?
12739+ ?~ prelude |
12740+ ?~ (ienv-lookup %program values.u.prelude) |
12741+ =/ program=(unit ischeme) (find-jibb-mold %program u.prelude)
12742+ ?~ program |
12743+ =/ main=(unit ischeme) (ienv-lookup %main env)
12744+ ?~ main |
12745+ ?. ?=(~ vars.u.main) |
12746+ ?. ?=(~ (itype-vars typ.u.main)) |
12747+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program *istate)
12748+ =/ main-fit=ifit (direct-invariant typ.u.main typ.instance ~ next.state.instance)
12749+ ?. ?=(%ok -.main-fit) |
12750+ =/ init=(unit ischeme) (ienv-lookup init.parts env)
12751+ ?~ init |
12752+ ?. ?=(~ vars.u.init) |
12753+ ?. ?=(%fn -.typ.u.init) |
12754+ ?. ?=(~ (itype-vars sample.typ.u.init)) |
12755+ ?. ?=(~ (itype-vars product.typ.u.init)) |
12756+ =/ data=igate-free (gate-free-type sample.typ.u.init 256 ~)
12757+ ?. =(%yes verdict.data) |
12758+ =/ model=igate-free (gate-free-type product.typ.u.init left.data ~)
12759+ ?. =(%yes verdict.model) |
12760+ =/ subs=(list def)
12761+ (skim ds |=(d=def &(?=(%value -.d) =(subs.parts name.d))))
12762+ ?. ?=([* ~] subs) |
12763+ |((program-subs-empty i.subs) (program-subs-watch i.subs imports graph u.prelude))
12764+::
1163512765++ infer-jibb-file
1163612766 |= [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)]
1163712767 ^- jfile-result
12768+ =/ out=jfile-detailed-result
12769+ (infer-jibb-file-detailed at src externals mark-externals modules active prelude-values prelude-molds cache prelude)
12770+ ?: ?=(%| -.out) [%| message.p.out]
12771+ [%& p.out]
12772+:: Returns structured root-source overlap evidence after the same full check.
12773+++ infer-jibb-file-detailed
12774+ |= [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)]
12775+ ^- jfile-detailed-result
1163812776 =/ parsed (parse at src)
11639− ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
12777+ ?: ?=(%| -.parsed) [%| [(crip "module source does not parse: {(spud at)}") ~]]
1164012778 =/ mod=module p.parsed
1164112779 =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
11642− ?^ duplicate [%| (show-duplicate-fields at src u.duplicate)]
12780+ ?^ duplicate [%| [(show-duplicate-fields at src u.duplicate) ~]]
12781+ ?: &(?=([%ui %api *] at) ?=(^ (program-main-def defs.mod)))
12782+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
1164312783 ?: ?=([%ui %api *] at)
1164412784 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
1164512785 ?^ iface
1164612786 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
1164712787 [%& [checked [[at checked] cache]]]
11648− ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
12788+ ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1164912789 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
1165012790 =/ narrow=?
1165112791 ?. ?=([[%mark *] ~] imports.mod) |
@@ -11655,38 +12795,85 @@
1165512795 ?: narrow
1165612796 =/ request=(each ione-request-interface @t)
1165712797 (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
11658− ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
12798+ ?: ?=(%| -.request) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1165912799 =/ checked=ifile iface.p.request
1166012800 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
1166112801 =/ multi=(each [iface=ifile cache=jcache] @t)
1166212802 (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
11663− ?: ?=(%| -.multi) [%| (crip "API module needs unsupported inference: {(spud at)}")]
12803+ ?: ?=(%| -.multi) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1166412804 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
1166512805 ?. (module-scope-valid mod prelude-values prelude-molds)
1166612806 ?: (pending-declared-poke at mod prelude-values prelude-molds)
11667− [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
11668− [%| (crip "module has conflicting names: {(spud at)}")]
12807+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
12808+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
1166912809 =/ vals=(list term) (global-value-names defs.mod)
11670− ?: (lien vals |=(n=term =(n %main)))
11671− [%| (crip "module kind needs unsupported inference: {(spud at)}")]
11672− =/ js=jimports-result (resolve-jibb-imports imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
12810+ =/ main=(unit def) (program-main-def defs.mod)
12811+ =/ main-parts=(unit [init=term update=term view=term subs=term])
12812+ ?~(main ~ (program-main-parts u.main))
12813+ ?. ?~(main & &(!?=([%ui %stores *] at) ?=(^ main-parts)))
12814+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
12815+ =/ js=jimports-detailed-result (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
1167312816 ?: ?=(%| -.js) [%| p.js]
11674− =/ molds=imolds (collect-simple-molds defs.mod)
12817+ =/ collected=grec-collected
12818+ ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
12819+ (grec-collect-molds defs.mod)
12820+ =/ molds=imolds molds.collected
1167512821 =/ globals=(list term) (weld prelude-values (weld (import-binding-names imports.mod) vals))
1167612822 =/ surs=(list term) (collect-sur-imports imports.mod)
1167712823 =/ marks=(list term) (collect-mark-imports imports.mod)
1167812824 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1167912825 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11680− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
11681− =/ mts=(each imold-types @t) (module-mold-types molds state)
11682− ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
11683− =/ resolution=iresolved (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12826+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
12827+ :: Source and scope were checked above; preserve that exact root and prelude.
12828+ :: This first integration only indexes import-free library sources.
12829+ =/ index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])
12830+ ?^ imports.mod ~
12831+ ?~ prelude ~
12832+ =/ standard=(unit ischeme) (find-jibb-mold %list u.prelude)
12833+ ?~ standard ~
12834+ ?. =(u.standard [[%collection %list ~[[%var 0]]] ~[0]]) ~
12835+ =/ index=(map term shape) proofs.collected
12836+ ?. !=(index *(map term shape)) ~
12837+ ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
12838+ `[at src u.prelude index]
12839+ =. grec-index.state index
12840+ =/ mts=(each imold-types imold-failure) (module-mold-types-detail molds state)
12841+ ?: ?=(%| -.mts)
12842+ ?~ overlap.p.mts [%| [(crip "{(trip message.p.mts)}: {(spud at)}") ~]]
12843+ =/ witness=[name=term cases=upair] u.overlap.p.mts
12844+ =/ first=@t (show-error src [at line.beg.first.cases.witness col.beg.first.cases.witness "first union case"])
12845+ =/ second=@t (show-error src [at line.beg.second.cases.witness col.beg.second.cases.witness "overlapping case"])
12846+ =/ msg=@t (of-wain:format ~[(crip "module mold {(trip name.witness)} has overlapping cases") first second])
12847+ [%| [msg `[at src name.witness cases.witness]]]
12848+ =/ resolution=iresolved
12849+ ?~ index
12850+ (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12851+ (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
1168412852 =/ env=ienv env.resolution
12853+ =/ recovered=(unit iresolved)
12854+ ?~ main ~
12855+ ?~ main-parts ~
12856+ (program-init-context u.main u.main-parts defs.mod resolution state)
12857+ =. env ?~(recovered env env.u.recovered)
12858+ =. artifacts.resolution
12859+ ?~(recovered artifacts.resolution artifacts.u.recovered)
12860+ =. env
12861+ ?: (module-values-complete defs.mod env) env
12862+ ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env
12863+ ?: (gth (met 3 src) 65.536) env
12864+ ?: (gth (lent defs.mod) 64) env
12865+ ?. (dg-source-candidate defs.mod 64) env
12866+ =/ transaction=(unit dgcommit) (dg-root-source at src)
12867+ ?~ transaction env
12868+ ?: (dg-interface-safe env.u.transaction) env.u.transaction
12869+ env
1168512870 ?. (module-values-complete defs.mod env)
11686− [%| (crip "module definitions need unsupported inference: {(spud at)}")]
12871+ [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
1168712872 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
1168812873 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
11689− ?~ graph [%| 'module request evidence needs unsupported inference']
12874+ ?~ graph [%| ['module request evidence needs unsupported inference' ~]]
12875+ ?. ?~(main & ?~(main-parts | (program-main-closed u.main-parts defs.mod env prelude resolved.p.js u.graph)))
12876+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
1169012877 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
1169112878 [%& [iface [[at iface] cache.p.js]]]
1169212879::
@@ -11733,7 +12920,7 @@
1173312920 =/ declared=(list term) (collect-mark-imports imports.mod)
1173412921 =/ reserved=(list term) (weld molds.u.prepared (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1173512922 =/ top=(list term) (turn ms |=(m=[name=term body=shape] name.m))
11736− =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~ ~ ~]
12923+ =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~ ~ ~ ~ ~ ~]
1173712924 =/ inferred=(unit [template=ischeme state=istate])
1173812925 (infer-mold-template shape.i.selected state(active ~[name], in-mold &))
1173912926 ?~ inferred [%| 'selected mold needs unsupported inference']
@@ -11804,7 +12991,7 @@
1180412991 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
1180512992 =/ scope-values=(list term)
1180612993 (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
11807− (golden-types-in-context file src externals mark-externals resolved.p.js scope-values prelude-molds iface)
12994+ (golden-types-in-context-core file src externals mark-externals resolved.p.js scope-values prelude-molds iface prepared)
1180812995::
1180912996:: +golden-types-with-marks: supply declared mark types separately from /sur
1181012997:: entries, as [mark result] with the result from +read-mark:jibb-import.
@@ -11835,6 +13022,10 @@
1183513022++ golden-types-in-context
1183613023 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
1183713024 ^- @t
13025+ (golden-types-in-context-core file src externals mark-externals jimports prelude-values reserved-molds prelude ~)
13026+++ golden-types-in-context-core
13027+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile) prepared=(unit iprelude)]
13028+ ^- @t
1183813029 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
1183913030 =/ parsed (parse file src)
1184013031 ?: ?=(%| -.parsed) (show-error src p.parsed)
@@ -11850,6 +13041,39 @@
1185013041 =/ resolution=iresolved (resolve-groups ds molds globals externals surs mark-externals marks jimports reserved-molds file prelude)
1185113042 =/ cycles=(list icycle) (definite-value-cycles ds globals)
1185213043 =/ env=ienv env.resolution
13044+ =/ recovered=(list term) ~
13045+ =/ eligible=?
13046+ ?& ?=(~ imports.p.parsed)
13047+ ?=(~ jimports)
13048+ !?=([%ui %api *] file)
13049+ !?=([%ui %stores *] file)
13050+ !(lien (global-value-names ds) |=(n=term =(n %main)))
13051+ !(module-values-complete ds env)
13052+ (lte (met 3 src) 65.536)
13053+ (lte (lent ds) 64)
13054+ ?| &(?=(~ prepared) ?=(~ prelude) ?=(~ prelude-values) ?=(~ reserved-molds) (module-scope-valid p.parsed ~ ~) (dg-source-candidate ds 64))
13055+ ?& ?=(^ prepared)
13056+ ?=(^ prelude)
13057+ =(u.prelude iface.u.prepared)
13058+ =(prelude-values values.u.prepared)
13059+ =(reserved-molds molds.u.prepared)
13060+ (module-scope-valid p.parsed values.u.prepared molds.u.prepared)
13061+ (dg-prepared-candidate ds 64)
13062+ ==
13063+ ==
13064+ ==
13065+ =/ transaction=(unit dgcommit)
13066+ ?. eligible ~
13067+ ?~ prepared (dg-root-source file src)
13068+ (dg-root-prepared file src u.prepared)
13069+ =. recovered
13070+ ?~ transaction ~
13071+ ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
13072+ (turn (skim env.u.transaction |=(entry=[name=term scheme=ischeme] ?=(~ (ienv-lookup name.entry env)))) |=(entry=[name=term scheme=ischeme] name.entry))
13073+ =. env
13074+ ?~ transaction env
13075+ ?: &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) env.u.transaction
13076+ env
1185313077 =/ source-defs=(map term def) (direct-checked-gates ds env)
1185413078 =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
1185513079 =/ lines=(list @t) ~
@@ -11864,6 +13088,16 @@
1186413088 ?^ cycle
1186513089 =/ diag=idiag ["non-gate value depends on itself through a cycle" ~[[first.i.cycle "value in cycle"] [next.i.cycle "dependency in cycle"]]]
1186613090 $(ds t.ds, lines [(show-inference-diagnostic file src name.d diag) lines])
13091+ ?: (lien recovered |=(n=term =(n name.d)))
13092+ =/ found=(unit ischeme) (ienv-lookup name.d env)
13093+ ?~ found $(ds t.ds, lines [(crip "++ {(trip name.d)}: committed definition unavailable") lines])
13094+ ?: (itype-has-hidden-recursive typ.u.found)
13095+ $(ds t.ds, lines [(crip "++ {(trip name.d)}: recursive mold name is not available in this scope") lines])
13096+ ?: (itype-has-hidden-generic typ.u.found)
13097+ $(ds t.ds, lines [(crip "++ {(trip name.d)}: generic union name is not available in this scope") lines])
13098+ =/ typ=itype (canonical-itype typ.u.found vars.u.found)
13099+ =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
13100+ $(ds t.ds, lines [line lines])
1186713101 ?: (lien grouped.resolution |=(n=term =(n name.d)))
1186813102 =/ found=(unit ischeme) (ienv-lookup name.d env)
1186913103 ?~ found $(ds t.ds, lines [(crip "++ {(trip name.d)}: recursive group unavailable") lines])
@@ -11871,7 +13105,7 @@
1187113105 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
1187213106 $(ds t.ds, lines [line lines])
1187313107 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11874− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
13108+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1187513109 =. gate-defs.initial source-defs
1187613110 =. head-evidence.initial heads
1187713111 =. initial (reserve-def-caps val.d initial)
@@ -11913,4 +13147,667 @@
1191313147 =/ printable=itype (canonical-itype typ vars)
1191413148 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype printable ~)}{(show-atom-constraint printable)}")
1191513149 $(ds t.ds, lines [line lines])
13150+:: Experimental module-owned pending-constraint generalization only.
13151+:: Inputs, IDs and substitution come from one checker-owned transaction.
13152++$ dgscan [ids=(list @ud) fuel=@ud]
13153+++ dg-scan
13154+ |= [todo=(list itype) sub=isub fuel=@ud ids=(list @ud)]
13155+ ^- (unit dgscan)
13156+ ?~ todo `[ids fuel]
13157+ ?: =(0 fuel) ~
13158+ =. fuel (dec fuel)
13159+ =/ t=itype i.todo
13160+ ?: ?=(?(%var %avar %rvar %nvar %rnvar %tag) -.t)
13161+ =/ node-id=@ud ?:(?=(%tag -.t) id.t +.t)
13162+ =/ found=(unit itype) (itype-lookup node-id sub)
13163+ ?~ found $(todo t.todo, ids [node-id ids])
13164+ ?: &(?=(?(%rvar %rnvar) -.u.found) =(node-id +.u.found))
13165+ $(todo t.todo, ids [node-id ids])
13166+ $(todo [u.found t.todo])
13167+ ?: ?=(%jrec -.t) $(todo t.todo)
13168+ ?+ -.t ~
13169+ %collection $(todo (weld args.t t.todo))
13170+ %union $(todo (weld args.t (weld cases.t t.todo)))
13171+ %face $(todo [body.t t.todo])
13172+ %fn $(todo [sample.t product.t t.todo])
13173+ %cell $(todo [hed.t tal.t t.todo])
13174+ %atom $(todo t.todo)
13175+ %any-atom $(todo t.todo)
13176+ %flag $(todo t.todo)
13177+ %noun $(todo t.todo)
13178+ %empty $(todo t.todo)
13179+ %const $(todo t.todo)
13180+ ==
13181+::
13182+++ dg-scan-ids
13183+ |= [ids=(list @ud) sub=isub fuel=@ud blocked=(list @ud)]
13184+ ^- (unit dgscan)
13185+ ?~ ids `[blocked fuel]
13186+ =/ one=(unit dgscan) (dg-scan ~[[%var i.ids]] sub fuel blocked)
13187+ ?~ one ~
13188+ $(ids t.ids, fuel fuel.u.one, blocked ids.u.one)
13189+::
13190+++ dg-env
13191+ |= [env=ienv sub=isub fuel=@ud blocked=(list @ud)]
13192+ ^- (unit dgscan)
13193+ ?~ env `[blocked fuel]
13194+ =/ sc=ischeme scheme.i.env
13195+ :: Quantifiers are local to the scheme: first find raw free IDs, then
13196+ :: follow those IDs in the module substitution without capturing them.
13197+ =/ raw=(unit dgscan) (dg-scan ~[typ.sc] ~ fuel ~)
13198+ ?~ raw ~
13199+ =/ free=(list @ud) (skim ids.u.raw |=(n=@ud !(lien vars.sc |=(q=@ud =(q n)))))
13200+ =/ resolved=(unit dgscan) (dg-scan-ids free sub fuel.u.raw blocked)
13201+ ?~ resolved ~
13202+ $(env t.env, fuel fuel.u.resolved, blocked ids.u.resolved)
13203+::
13204+++ dg-obligations
13205+ |= [pending=(list dgo) sub=isub fuel=@ud blocked=(list @ud)]
13206+ ^- (unit dgscan)
13207+ ?~ pending `[blocked fuel]
13208+ =/ found=(unit dgscan) (dg-scan ~[left.i.pending right.i.pending] sub fuel blocked)
13209+ ?~ found ~
13210+ $(pending t.pending, fuel fuel.u.found, blocked ids.u.found)
13211+::
13212+++ dg-tags
13213+ |= [tags=(list ipending) sub=isub fuel=@ud blocked=(list @ud)]
13214+ ^- (unit dgscan)
13215+ ?~ tags `[blocked fuel]
13216+ ?: =(0 fuel) ~
13217+ =/ found=(unit itype) (itype-lookup id.i.tags sub)
13218+ ?~ found $(tags t.tags, fuel (dec fuel), blocked [id.i.tags blocked])
13219+ :: Until this entry is explicitly discharged, retain variables reachable
13220+ :: through its binding; mere existence of a substitution is not proof.
13221+ =/ reached=(unit dgscan) (dg-scan ~[u.found] sub (dec fuel) blocked)
13222+ ?~ reached ~
13223+ $(tags t.tags, fuel fuel.u.reached, blocked ids.u.reached)
13224+::
13225+++ dg-generalize
13226+ |= [typ=itype env=ienv pending=(list dgo) tags=(list ipending) captured=(list @ud) state=istate fuel=@ud]
13227+ ^- (unit ischeme)
13228+ :: Bound the obligation list and all graph/substitution walks. The
13229+ :: substitution is assumed checker-owned and occurs-checked.
13230+ ?: (gth (lent pending) 64) ~
13231+ =/ capt=(unit dgscan) (dg-scan-ids captured sub.state fuel ~)
13232+ ?~ capt ~
13233+ =/ env-free=(unit dgscan) (dg-env env sub.state fuel.u.capt ids.u.capt)
13234+ ?~ env-free ~
13235+ =/ obligations=(unit dgscan) (dg-obligations pending sub.state fuel.u.env-free ids.u.env-free)
13236+ ?~ obligations ~
13237+ =/ tagged=(unit dgscan) (dg-tags tags sub.state fuel.u.obligations ids.u.obligations)
13238+ ?~ tagged ~
13239+ =/ bounded=(unit dgscan) (dg-scan ~[typ] sub.state fuel.u.tagged ~)
13240+ ?~ bounded ~
13241+ =/ normalized=itype (itype-normalize typ sub.state)
13242+ =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
13243+ =/ quantified=(list @ud) (skim vars |=(n=@ud !(lien ids.u.tagged |=(b=@ud =(b n)))))
13244+ `[[normalized quantified]]
13245+::
13246++$ dgcommit [env=ienv state=istate]
13247+:: A branch literal must not acquire a value face through replay.
13248+++ dg-literal-target-safe
13249+ |= target=itype
13250+ ^- ?
13251+ ?: ?=(%union -.target)
13252+ (levy cases.target |=(c=itype ?=(?(%const %cell) -.c)))
13253+ ?=(?(%const %atom %any-atom %flag %noun) -.target)
13254+::
13255+++ dg-replay-edges
13256+ |= [edges=(list dgo) state=istate fuel=@ud]
13257+ ^- (unit istate)
13258+ ?~ edges `state
13259+ ?: =(0 fuel) ~
13260+ =/ trial=ifit (itype-fit left.i.edges right.i.edges sub.state next.state)
13261+ ?. ?=(%ok -.trial) ~
13262+ =/ valid=?
13263+ ?: ?=(%tag -.left.i.edges)
13264+ ?. constructor.left.i.edges
13265+ =/ closed=(unit dgscan) (dg-scan ~[right.i.edges] sub.trial 512 ~)
13266+ ?~ closed |
13267+ ?^ ids.u.closed |
13268+ (dg-literal-target-safe (itype-normalize right.i.edges sub.trial))
13269+ =((itype-walk left.i.edges sub.trial) (itype-walk right.i.edges sub.trial))
13270+ =((itype-walk left.i.edges sub.trial) (itype-walk right.i.edges sub.trial))
13271+ ?. valid ~
13272+ $(edges t.edges, state state(sub sub.trial, next next.trial), fuel (dec fuel))
13273+::
13274+++ dg-close-env
13275+ |= [env=ienv sub=isub fuel=@ud]
13276+ ^- (unit ienv)
13277+ ?~ env `~
13278+ ?: =(0 fuel) ~
13279+ =/ s=ischeme scheme.i.env
13280+ :: Quantified IDs are scheme-local and cannot be rewritten on publication.
13281+ ?. (levy vars.s |=(n=@ud ?=(~ (itype-lookup n sub)))) ~
13282+ =/ bounded=(unit dgscan) (dg-scan ~[typ.s] sub (dec fuel) ~)
13283+ ?~ bounded ~
13284+ =/ normalized=itype (itype-normalize typ.s sub)
13285+ ?: (itype-has-tag normalized) ~
13286+ =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
13287+ ?. (levy vars |=(n=@ud (lien vars.s |=(v=@ud =(v n))))) ~
13288+ =/ rest=(unit ienv) (dg-close-env t.env sub fuel.u.bounded)
13289+ ?~ rest ~
13290+ `[[name.i.env [normalized vars.s]] u.rest]
13291+::
13292+:: A deferred boolean branch has exactly the two literal flag patterns.
13293+:: Arms are inferred in order. Equal types are retained; two direct pending
13294+:: literals may instead retain source-owned obligations for later context.
13295+++ dg-boolean-patterns
13296+ |= e=expr
13297+ ^- ?
13298+ ?. ?=(%branch -.e) |
13299+ ?~ arms.e |
13300+ ?~ t.arms.e |
13301+ ?^ t.t.arms.e |
13302+ =/ x=arm i.arms.e
13303+ =/ y=arm i.t.arms.e
13304+ ?. &(?=(%lit -.pat.x) ?=(%lit -.pat.y)) |
13305+ ?. &(=(%loobean form.lit.pat.x) =(%loobean form.lit.pat.y)) |
13306+ !=(val.lit.pat.x val.lit.pat.y)
13307+:: Only a direct source literal which created its own unbound pending tag
13308+:: may create a branch edge. The caller must retain the exact source and state.
13309+++ dg-owned-arm-literal
13310+ |= [e=expr t=itype tags=(list ipending) sub=isub initial=@ud]
13311+ ^- ?
13312+ ?. ?=(%lit -.e) |
13313+ ?. ?=(%tag -.t) |
13314+ ?: constructor.t |
13315+ ?. =(lit.e literal.t) |
13316+ ?: (lth id.t initial) |
13317+ ?^ (itype-lookup id.t sub) |
13318+ (lien tags |=(x=ipending &(=(id.x id.t) =(literal.x literal.t))))
13319+++ dg-boolean-branch
13320+ |= [e=expr env=ienv state=istate]
13321+ ^- iresult
13322+ ?. (dg-boolean-patterns e) [%| ["deferred branch patterns need unsupported inference" ~]]
13323+ ?> ?=(%branch -.e)
13324+ ?> ?=(^ arms.e)
13325+ ?> ?=(^ t.arms.e)
13326+ =/ x=arm i.arms.e
13327+ =/ y=arm i.t.arms.e
13328+ =/ subject=iresult (infer-fragment subject.e env state)
13329+ ?: ?=(%| -.subject) subject
13330+ =/ su=(unit isub) (itype-unify typ.p.subject [%flag ~] sub.state.p.subject)
13331+ ?~ su [%| ["deferred branch subject does not unify with ?" ~]]
13332+ =/ left=iresult (infer-fragment val.x env state.p.subject(sub u.su))
13333+ ?: ?=(%| -.left) left
13334+ =/ right=iresult (infer-fragment val.y env state.p.left)
13335+ ?: ?=(%| -.right) right
13336+ ?. (dg-stable-fit typ.p.left typ.p.right sub.state.p.right)
13337+ =/ st=istate state.p.right
13338+ ?. (dg-owned-arm-literal val.x typ.p.left tags.st sub.st next.state)
13339+ [%| ["deferred branch arm context needs unsupported inference" ~]]
13340+ ?. (dg-owned-arm-literal val.y typ.p.right tags.st sub.st next.state)
13341+ [%| ["deferred branch arm context needs unsupported inference" ~]]
13342+ ?> ?=(%tag -.typ.p.left)
13343+ ?> ?=(%tag -.typ.p.right)
13344+ ?: =(id.typ.p.left id.typ.p.right)
13345+ [%| ["deferred branch arm context needs unsupported inference" ~]]
13346+ ?: (gth (lent obligations.st) 62)
13347+ [%| ["deferred branch arm context needs unsupported inference" ~]]
13348+ =/ result=itype [%var next.st]
13349+ =/ ex=dgo [typ.p.left result (span-of val.x) (span-of e)]
13350+ =/ ey=dgo [typ.p.right result (span-of val.y) (span-of e)]
13351+ [%& result st(next +(next.st), obligations [ex ey obligations.st])]
13352+ [%& typ.p.left state.p.right]
13353+::
13354+:: A direct tuple literal may wait for a later exact result context.
13355+:: Each pending literal retains its source tag and its own fit obligation.
13356+++ dg-infer-tuple-items
13357+ |= [items=(list item) env=ienv state=istate]
13358+ ^- iresult
13359+ ?~ items [%| ["empty cell is not supported by partial inference" ~]]
13360+ =/ head=iresult (infer-fragment val.i.items env state)
13361+ ?: ?=(%| -.head) head
13362+ =/ typ=itype typ.p.head
13363+ =/ st=istate state.p.head
13364+ =/ adjusted=(unit [typ=itype state=istate])
13365+ ?. (dg-owned-arm-literal val.i.items typ tags.st sub.st next.state) `[typ st]
13366+ ?: (gth (lent obligations.st) 63) ~
13367+ =/ pending=itype [%var next.st]
13368+ =/ edge=dgo [typ pending (span-of val.i.items) at.i.items]
13369+ `[pending st(next +(next.st), obligations [edge obligations.st])]
13370+ ?~ adjusted [%| ["deferred tuple context needs unsupported inference" ~]]
13371+ =. typ typ.u.adjusted
13372+ =. st state.u.adjusted
13373+ =. typ ?~(face.i.items typ [%face u.face.i.items typ])
13374+ ?~ t.items [%& typ st]
13375+ =/ tail=iresult $(items t.items, state st)
13376+ ?: ?=(%| -.tail) tail
13377+ [%& [%cell typ typ.p.tail] state.p.tail]
13378+::
13379+:: Deferred inference uses only source forms whose successful fit sites are
13380+:: guarded below; a shared source-node budget bounds this screen.
13381+++ dg-safe-expressions
13382+ |= [todo=(list expr) fuel=@ud]
13383+ ^- (unit @ud)
13384+ ?~ todo `fuel
13385+ =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
13386+ ?~ first ~
13387+ $(todo t.todo, fuel u.first)
13388+++ dg-safe-items
13389+ |= [items=(list item) fuel=@ud]
13390+ ^- (unit @ud)
13391+ ?~ items `fuel
13392+ =/ first=(unit @ud) (dg-safe-expression val.i.items fuel)
13393+ ?~ first ~
13394+ $(items t.items, fuel u.first)
13395+++ dg-safe-expression
13396+ |= [e=expr fuel=@ud]
13397+ ^- (unit @ud)
13398+ ?: =(0 fuel) ~
13399+ =. fuel (dec fuel)
13400+ ?+ -.e ~
13401+ ?(%lit %ctor) `fuel
13402+ %wing ?:(?=([@ ~] names.e) `fuel ~)
13403+ %str
13404+ ?. (levy pieces.e |=(p=piece ?=(%text -.p))) ~
13405+ `fuel
13406+ %group $(e inner.e, fuel fuel)
13407+ %body
13408+ ?^ defs.e ~
13409+ $(e final.e, fuel fuel)
13410+ %gate $(e body.e, fuel fuel)
13411+ %gate-wide $(e body.e, fuel fuel)
13412+ %tuple (dg-safe-items items.e fuel)
13413+ %branch
13414+ ?. (dg-boolean-patterns e) ~
13415+ ?> ?=(^ arms.e)
13416+ ?> ?=(^ t.arms.e)
13417+ =/ subject=(unit @ud) $(e subject.e, fuel fuel)
13418+ ?~ subject ~
13419+ (dg-safe-expressions ~[val.i.arms.e val.i.t.arms.e] u.subject)
13420+ %cast $(e val.e, fuel fuel)
13421+ %call
13422+ =/ head=(unit @ud) $(e head.e, fuel fuel)
13423+ ?~ head ~
13424+ (dg-safe-expressions args.e u.head)
13425+ ==
13426+:: Exact normalized equality is preserved by all later substitutions.
13427+:: The bounded scan declines opaque types and oversized inputs.
13428+++ dg-stable-fit
13429+ |= [actual=itype expected=itype sub=isub]
13430+ ^- ?
13431+ ?~ (dg-scan ~[actual expected] sub 512 ~) |
13432+ =((itype-normalize actual sub) (itype-normalize expected sub))
13433+::
13434+:: A positional call peels sample-slot faces during its separate face check.
13435+:: Require its argument, sample and result closed so that check stays valid.
13436+++ dg-stable-call-fit
13437+ |= [actual=itype expected=itype product=itype sub=isub positional=?]
13438+ ^- ?
13439+ =/ checked=(unit dgscan) (dg-scan ~[actual expected product] sub 512 ~)
13440+ ?~ checked |
13441+ ?: &(positional ?=(^ ids.u.checked)) |
13442+ =((itype-normalize actual sub) (itype-normalize expected sub))
13443+::
13444+:: One definition attempt retains state only when inference succeeds.
13445++$ dg-step [env=ienv state=istate pending=(list dgo)]
13446+++ dg-stage-one
13447+ |= [d=def env=ienv state=istate]
13448+ ^- (unit dg-step)
13449+ ?> ?=(%value -.d)
13450+ ?~ (dg-safe-expression val.d 512) ~
13451+ =/ local=istate (reserve-def-caps val.d state)
13452+ :: This first slice declines all written capitals and holes/projections.
13453+ ?^ caps.local ~
13454+ =/ ordinary=iresult (infer-fragment val.d env local)
13455+ ?: ?=(%| -.ordinary) ~
13456+ =/ typ=itype typ.p.ordinary
13457+ =/ after=istate state.p.ordinary
13458+ =/ edges=(list dgo) obligations.after
13459+ ?. =(binders.after binders.state) ~
13460+ ?. =(molds.after molds.state) ~
13461+ ?. =(globals.after globals.state) ~
13462+ ?. =(externals.after externals.state) ~
13463+ ?. =(surs.after surs.state) ~
13464+ ?. =(mark-externals.after mark-externals.state) ~
13465+ ?. =(marks.after marks.state) ~
13466+ ?. =(jimports.after jimports.state) ~
13467+ ?. =(reserved-molds.after reserved-molds.state) ~
13468+ ?. =(params.after params.state) ~
13469+ ?. =(active.after active.state) ~
13470+ ?. =(in-mold.after in-mold.state) ~
13471+ ?. =(at.after at.state) ~
13472+ ?. =(top-molds.after top-molds.state) ~
13473+ ?. =(prelude.after prelude.state) ~
13474+ ?. =(gate-defs.after gate-defs.state) ~
13475+ ?. =(head-evidence.after head-evidence.state) ~
13476+ ?. =(grec-index.after grec-index.state) ~
13477+ ?. =(defer.after defer.state) ~
13478+ ?. =(holes.after holes.state) ~
13479+ ?. =(caps.after caps.state) ~
13480+ ?. =(projections.after projections.state) ~
13481+ ?: (unsupported-atom-vars (itype-normalize typ sub.after) caps.after binders.after sub.after) ~
13482+ ?: (itype-has-nvar (itype-normalize typ sub.after)) ~
13483+ =/ scheme=(unit ischeme) (dg-generalize typ env edges tags.after ~ after 32.768)
13484+ ?~ scheme ~
13485+ `[[[name.d u.scheme] env] after edges]
13486+:: Retry only definitions that did not infer. Successful definitions are
13487+:: committed into the local transaction, never published until all close.
13488+++ dg-stage
13489+ |= [ds=(list def) base=ienv env=ienv state=istate pending=(list dgo) fuel=@ud]
13490+ ^- (unit dgcommit)
13491+ ?: (gth fuel 64) ~
13492+ ?: (gth (lent ds) fuel) ~
13493+ =/ remaining=(list def) ds
13494+ =/ waiting=(list def) ~
13495+ =/ progress=? |
13496+ =/ attempts=@ud (mul fuel fuel)
13497+ |-
13498+ ?~ remaining
13499+ ?^ waiting
13500+ ?. progress ~
13501+ $(remaining (flop waiting), waiting ~, progress |)
13502+ =/ replayed=(unit istate) (dg-replay-edges pending state 64)
13503+ ?~ replayed ~
13504+ ?: (pending-tags tags.u.replayed sub.u.replayed) ~
13505+ =/ closed-edges=(unit dgscan) (dg-obligations pending sub.u.replayed 32.768 ~)
13506+ ?~ closed-edges ~
13507+ ?^ ids.u.closed-edges ~
13508+ =/ rechecked=(unit istate) (dg-replay-edges pending u.replayed 64)
13509+ ?~ rechecked ~
13510+ ?. =(sub.u.rechecked sub.u.replayed) ~
13511+ ?. =(next.u.rechecked next.u.replayed) ~
13512+ =/ closed=(unit ienv) (dg-close-env env sub.u.replayed 32.768)
13513+ ?~ closed ~
13514+ `[[u.closed u.replayed(defer ~, obligations ~)]]
13515+ ?: =(0 attempts) ~
13516+ =. attempts (dec attempts)
13517+ =/ d=def i.remaining
13518+ ?: ?=(%mold -.d) $(remaining t.remaining)
13519+ ?^ (ienv-lookup name.d base) $(remaining t.remaining)
13520+ ?^ (ienv-lookup name.d env) ~
13521+ =/ done=(unit dg-step) (dg-stage-one d env state)
13522+ ?~ done $(remaining t.remaining, waiting [d waiting])
13523+ $(remaining t.remaining, env env.u.done, state state.u.done, pending pending.u.done, progress &)
13524+::
13525+:: Cheap bounded eligibility check on the already parsed source. This
13526+:: deliberately covers only direct constructor calls beneath transparent
13527+:: groups, gates, casts and definition-free bodies. Other shapes decline
13528+:: this fallback without a second parse or resolution pass.
13529+++ dg-direct-source
13530+ |= [e=expr fuel=@ud]
13531+ ^- ?
13532+ ?: =(0 fuel) |
13533+ ?+ -.e |
13534+ %group $(e inner.e, fuel (dec fuel))
13535+ %gate $(e body.e, fuel (dec fuel))
13536+ %gate-wide $(e body.e, fuel (dec fuel))
13537+ %cast $(e val.e, fuel (dec fuel))
13538+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
13539+ %call
13540+ ?. ?=([* ~] args.e) |
13541+ ?=(%ctor -.i.args.e)
13542+ ==
13543+++ dg-source-candidate
13544+ |= [ds=(list def) fuel=@ud]
13545+ ^- ?
13546+ ?~ ds |
13547+ ?: =(0 fuel) |
13548+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
13549+ ?: (dg-direct-source val.i.ds 64) &
13550+ $(ds t.ds, fuel (dec fuel))
13551+::
13552+++ dg-prepared-source
13553+ |= [e=expr fuel=@ud]
13554+ ^- ?
13555+ ?: (dg-direct-source e fuel) &
13556+ ?: =(0 fuel) |
13557+ ?+ -.e |
13558+ %group $(e inner.e, fuel (dec fuel))
13559+ %gate $(e body.e, fuel (dec fuel))
13560+ %gate-wide $(e body.e, fuel (dec fuel))
13561+ %cast $(e val.e, fuel (dec fuel))
13562+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
13563+ %tuple &
13564+ ==
13565+++ dg-prepared-candidate
13566+ |= [ds=(list def) fuel=@ud]
13567+ ^- ?
13568+ ?~ ds |
13569+ ?: =(0 fuel) |
13570+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
13571+ ?: (dg-prepared-source val.i.ds 64) &
13572+ $(ds t.ds, fuel (dec fuel))
13573+::
13574+++ dg-interface-safe
13575+ |= [env=ienv]
13576+ ^- ?
13577+ ?~ env &
13578+ =/ sc=ischeme scheme.i.env
13579+ ?: |((itype-has-hidden-recursive typ.sc) (itype-has-hidden-generic typ.sc)) |
13580+ ?: (gth (lent vars.sc) 26) |
13581+ $(env t.env)
13582+:: Parse status and the transaction result come from the same source parse.
13583++$ dgparse [parsed=? result=(unit dgcommit)]
13584+++ dg-root-source
13585+ |= [at=path src=@t]
13586+ ^- (unit dgcommit)
13587+ result:(dg-root-detail at src)
13588+++ dg-root-detail
13589+ |= [at=path src=@t]
13590+ ^- dgparse
13591+ =/ parsed (parse at src)
13592+ ?: ?=(%| -.parsed) [| ~]
13593+ =/ transact
13594+ |.
13595+ ?^ imports.p.parsed ~
13596+ ?. (module-scope-valid p.parsed ~ ~) ~
13597+ ?^ (duplicate-defs defs.p.parsed) ~
13598+ =/ defs=(list def) defs.p.parsed
13599+ ?: (gth (lent defs) 64) ~
13600+ =/ molds=imolds (collect-simple-molds defs)
13601+ =/ globals=(list term) (global-value-names defs)
13602+ =/ resolution=iresolved (resolve-groups defs molds globals ~ ~ ~ ~ ~ ~ at ~)
13603+ ?^ grouped.resolution ~
13604+ ?^ artifacts.resolution ~
13605+ =/ base=ienv env.resolution
13606+ =/ free=(unit dgscan) (dg-env base ~ 32.768 ~)
13607+ ?~ free ~
13608+ ?^ ids.u.free ~
13609+ =/ all=(unit dgscan) (dg-all-env-ids base 32.768 ~)
13610+ ?~ all ~
13611+ =/ fresh=@ud (dg-next-id ids.u.all 0)
13612+ =/ st=istate *istate
13613+ =. st st(next fresh, defer `~, molds molds, globals globals, at at, top-molds (turn molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
13614+ =/ checked-molds=(each imold-types @t) (module-mold-types molds st)
13615+ ?: ?=(%| -.checked-molds) ~
13616+ (dg-stage defs base base st ~ 64)
13617+ ::
13618+ [& (transact)]
13619+:: The caller supplies the trusted prepared prelude. This transaction is
13620+:: only report evidence; the ordinary module resolver does not publish it.
13621+++ dg-root-prepared
13622+ |= [at=path src=@t prepared=iprelude]
13623+ ^- (unit dgcommit)
13624+ ?: ?=([%ui %api *] at) ~
13625+ ?: ?=([%ui %stores *] at) ~
13626+ ?: (gth (met 3 src) 65.536) ~
13627+ =/ parsed (parse at src)
13628+ ?: ?=(%| -.parsed) ~
13629+ ?^ imports.p.parsed ~
13630+ ?. (module-scope-valid p.parsed values.prepared molds.prepared) ~
13631+ ?^ (duplicate-defs defs.p.parsed) ~
13632+ =/ defs=(list def) defs.p.parsed
13633+ ?: (gth (lent defs) 64) ~
13634+ ?: (lien (global-value-names defs) |=(n=term =(n %main))) ~
13635+ ?. (dg-prepared-candidate defs 64) ~
13636+ =/ local-molds=imolds (collect-simple-molds defs)
13637+ =/ globals=(list term) (weld values.prepared (global-value-names defs))
13638+ =/ iface=ifile iface.prepared
13639+ =/ prelude=(unit ifile) `iface
13640+ =/ resolution=iresolved
13641+ (resolve-groups defs local-molds globals ~ ~ ~ ~ ~ molds.prepared at prelude)
13642+ ?^ grouped.resolution ~
13643+ ?^ artifacts.resolution ~
13644+ =/ base=ienv env.resolution
13645+ =/ templates=ienv
13646+ (turn molds.iface |=(x=[name=term template=ischeme] [name.x template.x]))
13647+ =/ all-env=ienv (weld base (weld values.iface templates))
13648+ =/ free=(unit dgscan) (dg-env all-env ~ 32.768 ~)
13649+ ?~ free ~
13650+ ?^ ids.u.free ~
13651+ =/ all=(unit dgscan) (dg-all-env-ids all-env 32.768 ~)
13652+ ?~ all ~
13653+ =/ fresh=@ud (dg-next-id ids.u.all 0)
13654+ =/ st=istate *istate
13655+ =. st st(next fresh, defer `~, molds local-molds, globals globals, at at, reserved-molds molds.prepared, prelude prelude, top-molds (turn local-molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
13656+ =/ checked-molds=(each imold-types @t) (module-mold-types local-molds st)
13657+ ?: ?=(%| -.checked-molds) ~
13658+ (dg-stage defs base base st ~ 64)
13659+::
13660+++ dg-all-env-ids
13661+ |= [env=ienv fuel=@ud ids=(list @ud)]
13662+ ^- (unit dgscan)
13663+ ?~ env `[ids fuel]
13664+ ?: =(0 fuel) ~
13665+ =/ sc=ischeme scheme.i.env
13666+ ?: (itype-has-tag typ.sc) ~
13667+ =/ raw=(unit dgscan) (dg-scan ~[typ.sc] ~ (dec fuel) ids)
13668+ ?~ raw ~
13669+ =/ quant=(unit dgscan) (dg-scan-ids vars.sc ~ fuel.u.raw ids.u.raw)
13670+ ?~ quant ~
13671+ $(env t.env, fuel fuel.u.quant, ids ids.u.quant)
13672+::
13673+++ dg-next-id
13674+ |= [ids=(list @ud) largest=@ud]
13675+ ^- @ud
13676+ ?~ ids +(largest)
13677+ $(ids t.ids, largest (max largest i.ids))
13678+::
13679+++ dg-eligible-ctor
13680+ |= [e=expr head=itype actual=itype expected=itype state=istate]
13681+ ^- (unit dgo)
13682+ ?. ?=(%call -.e) ~
13683+ ?. ?=([* ~] args.e) ~
13684+ ?. ?=(%ctor -.i.args.e) ~
13685+ ?. ?=(%fn -.head) ~
13686+ ?. ?=(%fn -.expected) ~
13687+ ?. ?=(%tag -.actual) ~
13688+ ?. constructor.actual ~
13689+ ?. ?=(%var -.product.expected) ~
13690+ ?^ (itype-lookup id.product.expected sub.state) ~
13691+ =/ bounded=(unit dgscan) (dg-scan ~[sample.expected] sub.state 256 ~)
13692+ ?~ bounded ~
13693+ ?^ ids.u.bounded ~
13694+ `[[actual expected (span-of i.args.e) (span-of head.e)]]
13695+::
13696+:: Experimental per-module, source-derived recursive tree index.
13697+:: The two tags and the exact children/list/self layout are fixed-shape
13698+:: checks, so ordinary definitions incur no type-tree or source scans.
13699+++ grec-tagged-fields
13700+ |= sh=shape
13701+ ^- (unit [tag=@ fields=(list field)])
13702+ ?. ?=(%cell -.sh) ~
13703+ ?~ fields.sh ~
13704+ =/ head=field i.fields.sh
13705+ ?. ?=(%bare -.head) ~
13706+ ?. ?=(%const -.shape.head) ~
13707+ ?. &(?=(%term form.lit.shape.head) =(%tas aura.lit.shape.head)) ~
13708+ `[val.lit.shape.head t.fields.sh]
13709+++ grec-tree-children
13710+ |= [fs=(list field) param=@t]
13711+ ^- (unit field)
13712+ ?~ fs ~
13713+ ?~ t.fs `i.fs
13714+ ?^ t.t.fs ~
13715+ =/ event=field i.fs
13716+ =/ kids=field i.t.fs
13717+ ?. &(?=(%face -.event) ?=(%face -.kids)) ~
13718+ ?. !=(name.event name.kids) ~
13719+ ?. ?=(%fn -.shape.event) ~
13720+ ?. ?=(%aura -.sample.shape.event) ~
13721+ ?. =(%t aura.sample.shape.event) ~
13722+ ?. ?=(%tvar -.product.shape.event) ~
13723+ ?. =(param name.product.shape.event) ~
13724+ `kids
13725+::
13726+++ grec-tree-proof
13727+ |= [name=term sh=shape]
13728+ ^- ?
13729+ ?. ?=(%generic -.sh) |
13730+ ?. ?=([@ ~] vars.sh) |
13731+ =/ param=@t i.vars.sh
13732+ ?. ?=(%union -.body.sh) |
13733+ ?. ?=([* [* ~]] cases.body.sh) |
13734+ =/ a=(unit [tag=@ fields=(list field)]) (grec-tagged-fields i.cases.body.sh)
13735+ =/ b=(unit [tag=@ fields=(list field)]) (grec-tagged-fields i.t.cases.body.sh)
13736+ ?~ a |
13737+ ?~ b |
13738+ ?. !=(tag.u.a tag.u.b) |
13739+ ?. ?=([* ~] fields.u.a) |
13740+ =/ value=field i.fields.u.a
13741+ ?. ?=(%face -.value) |
13742+ ?. ?=(%aura -.shape.value) |
13743+ ?. =(%t aura.shape.value) |
13744+ =/ selected=(unit field) (grec-tree-children fields.u.b param)
13745+ ?~ selected |
13746+ =/ kids=field u.selected
13747+ ?. ?=(%face -.kids) |
13748+ ?. ?=(%apply -.shape.kids) |
13749+ ?. =(ref.shape.kids ~[%list]) |
13750+ ?. ?=([* ~] args.shape.kids) |
13751+ =/ self=shape i.args.shape.kids
13752+ ?. ?=(%apply -.self) |
13753+ ?. =(ref.self ~[name]) |
13754+ ?. ?=([* ~] args.self) |
13755+ ?. ?=(%tvar -.i.args.self) |
13756+ =(name.i.args.self param)
13757++$ grec-collected [molds=imolds proofs=(map term shape)]
13758+:: Experimental one-layer analysis view, never an exported mold identity.
13759+++ grec-unfold-view
13760+ |= [typ=itype fuel=@ud]
13761+ ^- (unit [view=itype left=@ud])
13762+ ?. ?=(%grec -.typ) ~
13763+ ?: =(fuel 0) ~
13764+ ?. ?=([* ~] args.typ) ~
13765+ =/ sh=shape proof.typ
13766+ ?. (grec-tree-proof name.typ sh) ~
13767+ ?> ?=(%generic -.sh)
13768+ ?> ?=([@ ~] vars.sh)
13769+ ?> ?=(%union -.body.sh)
13770+ ?> ?=([* [* ~]] cases.body.sh)
13771+ =/ ca=shape i.cases.body.sh
13772+ =/ cb=shape i.t.cases.body.sh
13773+ ?> ?=(%cell -.ca)
13774+ ?> ?=(%cell -.cb)
13775+ ?> ?=([* [* ~]] fields.ca)
13776+ ?> ?=([* *] fields.cb)
13777+ =/ tag-a=field i.fields.ca
13778+ =/ tag-b=field i.fields.cb
13779+ ?> ?=(%bare -.tag-a)
13780+ ?> ?=(%bare -.tag-b)
13781+ ?> ?=(%const -.shape.tag-a)
13782+ ?> ?=(%const -.shape.tag-b)
13783+ =/ text-field=field i.t.fields.ca
13784+ ?> ?=(%face -.text-field)
13785+ =/ branch=(list field) t.fields.cb
13786+ =/ kids=(unit field) (grec-tree-children branch i.vars.sh)
13787+ ?~ kids ~
13788+ ?> ?=(%face -.u.kids)
13789+ =/ children=itype [%face name.u.kids [%collection %list ~[typ]]]
13790+ ?> ?=(^ branch)
13791+ =/ payload=itype
13792+ ?~ t.branch children
13793+ =/ event=field i.branch
13794+ ?> ?=(%face -.event)
13795+ [%cell [%face name.event [%fn [%atom %t] i.args.typ]] children]
13796+ =/ leaf=itype [%cell [%const lit.shape.tag-a] [%face name.text-field [%atom %t]]]
13797+ =/ node=itype [%cell [%const lit.shape.tag-b] payload]
13798+ `[[%union ~[leaf node] ~ ~ ~] (dec fuel)]
13799+::
13800+++ grec-collect-molds
13801+ |= ds=(list def)
13802+ ^- grec-collected
13803+ ?~ ds [~ *(map term shape)]
13804+ =/ rest=grec-collected $(ds t.ds)
13805+ ?. ?=(%mold -.i.ds) rest
13806+ =/ name=term name.i.ds
13807+ =/ body=shape shape.i.ds
13808+ =/ proofs=(map term shape) proofs.rest
13809+ =? proofs (grec-tree-proof name body) (~(put by proofs) name body)
13810+ [[[name body] molds.rest] proofs]
13811+::
13812+
1191613813--
jibb-dev/lib/jibb/internal.jibb+2
@@ -18,6 +18,8 @@
1818:: Private compiler primitive wrappers; execution is a later milestone.
1919++ add-atom |= args=[A A] (raw-add.core args)
2020++ dec-atom |= atom=A (raw-dec.core atom)
21+++ trip-text |= value=@t (raw-trip.core value)
22+++ tuba-text |= values (raw-tuba.core values)
2123
2224:: Transparent request data. Identity and path fields are writable and do not
2325:: prove a schema or watchability. A future executor must bind them to checked
jibb-dev/lib/jibb/prelude.jibb+143
@@ -362,3 +362,146 @@
362362++ lte |= args=[A A]
363363 ?- args
364364 [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))
371+
372+++ lead |= first=A |= second=B [first second]
373+++ late |= second=B |= first=A [first second]
374+
375+++ succ |= x=A (add x 1)
376+
377+++ trip |= value=@t (trip-text.internal value)
378+++ tuba |= values=(list @tD) (tuba-text.internal values)
379+
380+:: UI values are source-level descriptions only. Nested element payloads are
381+:: erased in the nonrecursive union; the public constructors below retain the
382+:: typed composition boundaries. Raw-constructor encapsulation, rendering and
383+:: execution are not established by this slice.
384++$ length
385+ [%chars n=@ud]
386+ [%fill n=@ud]
387+ %shrink
388+
389++$ align
390+ %start
391+ %center
392+ %end
393+
394++$ role
395+ %body
396+ %caption
397+ %label
398+
399++$ tone
400+ %normal
401+ %muted
402+ %accent
403+ %danger
404+
405++$ attr
406+ [%pad %s0]
407+ [%pad %s1]
408+ [%pad %s2]
409+ [%pad %s3]
410+ [%gap %s0]
411+ [%gap %s1]
412+ [%gap %s2]
413+ [%gap %s3]
414+ [%width width=length]
415+ [%align align=align]
416+ [%role role=role]
417+ [%tone tone=tone]
418+
419++$ element |$ [M]
420+ [%row attrs=(list attr) kids=*]
421+ [%column attrs=(list attr) kids=*]
422+ [%wrap attrs=(list attr) kids=*]
423+ [%stack attrs=(list attr) kids=*]
424+ [%el attrs=(list attr) kid=*]
425+ [%para kids=*]
426+ [%text words=@t]
427+ [%heading level=@ud words=@t]
428+ [%each items=*]
429+ [%table columns=* rows=*]
430+ [%image source=qath description=@t]
431+ [%image-unsafe source=[url=@t width=@ud height=@ud] description=@t]
432+ [%link target=qath label=@t]
433+ [%link-unsafe target=@t label=@t]
434+ [%button label=@t message=M]
435+ [%toggle on=? label=@t message=M]
436+ [%field label=@t value=@t reply=$-(@t M)]
437+ [%form message=M kids=*]
438+ [%island payload=*]
439+
440+++ row |= [attrs=(list attr) kids=(list (element M))]
441+ ^- (element M) [%row attrs kids]
442+
443+++ column |= [attrs=(list attr) kids=(list (element M))]
444+ ^- (element M) [%column attrs kids]
445+
446+++ wrap |= [attrs=(list attr) kids=(list (element M))]
447+ ^- (element M) [%wrap attrs kids]
448+
449+++ stack |= [attrs=(list attr) kids=(list (element M))]
450+ ^- (element M) [%stack attrs kids]
451+
452+++ el |= [attrs=(list attr) kid=(element M)]
453+ ^- (element M) [%el attrs kid]
454+
455+++ para |= kids=(list (element M))
456+ ^- (element M) [%para kids]
457+
458+++ text |= words=@t
459+ ^- (element M) [%text words]
460+
461+++ heading |= [level=@ud words=@t]
462+ ^- (element M) [%heading level words]
463+
464+++ each |= items=(list [key=K el=(element M)])
465+ ^- (element M) [%each items]
466+
467+++ table |= [columns=(list [header=@t width=length align=align]) rows=(list [key=K cells=(list (element M))])]
468+ ^- (element M) [%table columns rows]
469+
470+++ image |= [source=qath description=@t]
471+ ^- (element M) [%image source description]
472+
473+++ image-unsafe |= [source=[url=@t width=@ud height=@ud] description=@t]
474+ ^- (element M) [%image-unsafe source description]
475+
476+++ link |= [target=qath label=@t]
477+ ^- (element M) [%link target label]
478+
479+++ link-unsafe |= [target=@t label=@t]
480+ ^- (element M) [%link-unsafe target label]
481+
482+++ button |= [label=@t message=M]
483+ ^- (element M) [%button label message]
484+
485+++ toggle |= [on=? label=@t message=M]
486+ ^- (element M) [%toggle on label message]
487+
488+++ field |= [label=@t value=@t reply=$-(@t M)]
489+ ^- (element M) [%field label value reply]
490+
491+++ form |= [message=M kids=(list (element M))]
492+ ^- (element M) [%form message kids]
493+
494++$ program |$ [D X M]
495+ [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
496+
497+++ program |= [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
498+ ^- (program D X M) [init update view subs]
499+
500+++ island |= [p=(program D X M) data=D]
501+ ^- (element !!) [%island [p data]]
502+
503++$ page |$ [R D]
504+ [load=$-(R (ask D)) view=$-(D (element !!))]
505+
506+++ page |= [load=$-(R (ask D)) view=$-(D (element !!))]
507+ ^- (page R D) [load view]
tests/golden/module-import-cycle/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= a /ui/a
2−++ text (identity.a "hi")
2+++ text-value (identity.a "hi")
tests/golden/module-import-cycle/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:11 tight knot a
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.a
12−2:21 str "hi"
13−2:25 tight glyph )
14−2:26 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.a
12+2:27 str "hi"
13+2:31 tight glyph )
14+2:32 NEWLINE
tests/golden/module-import-cycle/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 a /ui/a)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.a) (str 2:27 "hi")))))
tests/golden/module-import-identity/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= lib /ui/lib
2−++ text (identity.lib "hi")
2+++ text-value (identity.lib "hi")
33++ ship (identity.lib ~zod)
tests/golden/module-import-identity/tokens.txt+5−5
@@ -6,11 +6,11 @@
661:13 tight knot lib
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.lib
12−2:23 str "hi"
13−2:27 tight glyph )
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.lib
12+2:29 str "hi"
13+2:33 tight glyph )
14143:1 NEWLINE
15153:1 glyph ++
16163:4 name ship
tests/golden/module-import-identity/tree.txt+3−3
@@ -1,8 +1,8 @@
11(module
22 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.lib) (str 2:23 "hi"))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.lib) (str 2:29 "hi"))))
66 (value 3:1 ship
77 (group 3:9
88 (call 3:10 (wing 3:10 identity.lib) (lit 3:23 ~zod)))))
tests/golden/module-import-identity/types.txt+1−1
@@ -1,3 +1,3 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
33++ ship: @p
tests/golden/module-import-transitive/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= a /ui/a
2−++ text (identity.a "hi")
2+++ text-value (identity.a "hi")
tests/golden/module-import-transitive/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:11 tight knot a
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.a
12−2:21 str "hi"
13−2:25 tight glyph )
14−2:26 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.a
12+2:27 str "hi"
13+2:31 tight glyph )
14+2:32 NEWLINE
tests/golden/module-import-transitive/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 a /ui/a)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.a) (str 2:27 "hi")))))
tests/golden/module-import-transitive/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/module-import-unused-invalid/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= good /ui/good
2−++ text (identity.good "hi")
2+++ text-value (identity.good "hi")
tests/golden/module-import-unused-invalid/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:14 tight knot good
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.good
12−2:24 str "hi"
13−2:28 tight glyph )
14−2:29 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.good
12+2:30 str "hi"
13+2:34 tight glyph )
14+2:35 NEWLINE
tests/golden/module-import-unused-invalid/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 good /ui/good)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.good) (str 2:24 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.good) (str 2:30 "hi")))))
tests/golden/module-import-unused-invalid/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/types-arithmetic-module/source.jibb+1−1
@@ -1,7 +1,7 @@
11/= math /ui/math
22++ decimal ^- @ud (sum.math 1 2)
33++ hex ^- @ux (sum.math 0x1 0x2)
4−++ text ^- @t (alias.math "a" "b")
4+++ text-value ^- @t (alias.math "a" "b")
55++ ship ^- @p (down.math ~zod)
66++ reject-bool (sum.math %.y %.n)
77++ reject-down (down.math %.y)
tests/golden/types-arithmetic-module/tokens.txt+8−8
@@ -26,14 +26,14 @@
26263:32 tight glyph )
27274:1 NEWLINE
28284:1 glyph ++
29−4:4 name text
30−4:9 glyph ^-
31−4:12 aura @t
32−4:15 glyph (
33−4:16 tight wing alias.math
34−4:27 str "a"
35−4:31 str "b"
36−4:34 tight glyph )
29+4:4 name text-value
30+4:15 glyph ^-
31+4:18 aura @t
32+4:21 glyph (
33+4:22 tight wing alias.math
34+4:33 str "a"
35+4:37 str "b"
36+4:40 tight glyph )
37375:1 NEWLINE
38385:1 glyph ++
39395:4 name ship
tests/golden/types-arithmetic-module/tree.txt+5−5
@@ -10,11 +10,11 @@
1010 (aura 3:11 @ux)
1111 (group 3:15
1212 (call 3:16 (wing 3:16 sum.math) (lit 3:25 0x1) (lit 3:29 0x2)))))
13− (value 4:1 text
14− (cast 4:9
15− (aura 4:12 @t)
16− (group 4:15
17− (call 4:16 (wing 4:16 alias.math) (str 4:27 "a") (str 4:31 "b")))))
13+ (value 4:1 text-value
14+ (cast 4:15
15+ (aura 4:18 @t)
16+ (group 4:21
17+ (call 4:22 (wing 4:22 alias.math) (str 4:33 "a") (str 4:37 "b")))))
1818 (value 5:1 ship
1919 (cast 5:9
2020 (aura 5:12 @p)
tests/golden/types-arithmetic-module/types.txt+1−1
@@ -1,7 +1,7 @@
11partial inference; module not checked
22++ decimal: @ud
33++ hex: @ux
4−++ text: @t
4+++ text-value: @t
55++ ship: @p
66++ reject-bool: call's sample and argument types do not unify
77/tests/golden/types-arithmetic-module/source.jibb:6:17: called gate has type $-([a=A b=A] A) where A is an atom other than ?
tests/golden/types-cell-branch-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Branching and Molds — branch arms share the expected result type; unresolved tags need context; written record faces remain part of values.
2+tests: Closed cell result context flows into bounded loobean branches. The checker preserves previously inferred cases and faces, leaves wrong or inconsistent fields, unresolved tags, and open generic context unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-cell-branch-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the actual source-backed prelude.
tests/golden/types-cell-branch-context/source.jibbnew file+37
@@ -0,0 +1,37 @@
1+++ choose |= flag=?
2+ ^- [@t (unit @t)] ?- flag
3+ %.y ["yes" ~]
4+ %.n ["no" ~]
5+++ bad |= flag=?
6+ ^- [@t (unit @t)] ?- flag
7+ %.y ["yes" ~]
8+ %.n [~zod ~]
9+++ pending |= flag=?
10+ ^- [@t (unit @t)] ?- flag
11+ %.y ["yes" ~]
12+ %.n [%waiting ~]
13+++ already |= flag=?
14+ ^- [@t @t] ?- flag
15+ %.y ["yes" "a"]
16+ %.n ["no" "b"]
17++$ rec [name=@t place=(unit @t)]
18+++ named |= flag=?
19+ ^- rec ?- flag
20+ %.y [name="yes" place=~]
21+ %.n [name="no" place=~]
22+++ wrong |= flag=?
23+ ^- rec ?- flag
24+ %.y [name="yes" place=~]
25+ %.n [other="no" place=~]
26+++ different |= flag=?
27+ ^- rec ?- flag
28+ %.y [name="yes" place=~]
29+ %.n ["no" ~]
30+++ open |= [flag=? value=A]
31+ ^- [A (unit A)] ?- flag
32+ %.y [value ~]
33+ %.n [value ~]
34+++ waiting |= flag=?
35+ ^- rec ?- flag
36+ %.y [name="yes" place=~]
37+ %.n [name=%waiting place=~]
tests/golden/types-cell-branch-context/tokens.txtnew file+308
@@ -0,0 +1,308 @@
1+1:1 glyph ++
2+1:4 name choose
3+1:11 glyph |=
4+1:14 name flag
5+1:18 tight glyph =
6+1:19 tight glyph ?
7+2:3 INDENT
8+2:3 glyph ^-
9+2:6 glyph [
10+2:7 tight aura @t
11+2:10 glyph (
12+2:11 tight name unit
13+2:16 aura @t
14+2:18 tight glyph )
15+2:19 tight glyph ]
16+2:21 glyph ?-
17+2:24 name flag
18+3:5 INDENT
19+3:5 lit %.y
20+3:9 glyph [
21+3:10 tight str "yes"
22+3:16 lit ~
23+3:17 tight glyph ]
24+4:5 NEWLINE
25+4:5 lit %.n
26+4:9 glyph [
27+4:10 tight str "no"
28+4:15 lit ~
29+4:16 tight glyph ]
30+5:1 DEDENT
31+5:1 DEDENT
32+5:1 NEWLINE
33+5:1 glyph ++
34+5:4 name bad
35+5:8 glyph |=
36+5:11 name flag
37+5:15 tight glyph =
38+5:16 tight glyph ?
39+6:3 INDENT
40+6:3 glyph ^-
41+6:6 glyph [
42+6:7 tight aura @t
43+6:10 glyph (
44+6:11 tight name unit
45+6:16 aura @t
46+6:18 tight glyph )
47+6:19 tight glyph ]
48+6:21 glyph ?-
49+6:24 name flag
50+7:5 INDENT
51+7:5 lit %.y
52+7:9 glyph [
53+7:10 tight str "yes"
54+7:16 lit ~
55+7:17 tight glyph ]
56+8:5 NEWLINE
57+8:5 lit %.n
58+8:9 glyph [
59+8:10 tight lit ~zod
60+8:15 lit ~
61+8:16 tight glyph ]
62+9:1 DEDENT
63+9:1 DEDENT
64+9:1 NEWLINE
65+9:1 glyph ++
66+9:4 name pending
67+9:12 glyph |=
68+9:15 name flag
69+9:19 tight glyph =
70+9:20 tight glyph ?
71+10:3 INDENT
72+10:3 glyph ^-
73+10:6 glyph [
74+10:7 tight aura @t
75+10:10 glyph (
76+10:11 tight name unit
77+10:16 aura @t
78+10:18 tight glyph )
79+10:19 tight glyph ]
80+10:21 glyph ?-
81+10:24 name flag
82+11:5 INDENT
83+11:5 lit %.y
84+11:9 glyph [
85+11:10 tight str "yes"
86+11:16 lit ~
87+11:17 tight glyph ]
88+12:5 NEWLINE
89+12:5 lit %.n
90+12:9 glyph [
91+12:10 tight lit %waiting
92+12:19 lit ~
93+12:20 tight glyph ]
94+13:1 DEDENT
95+13:1 DEDENT
96+13:1 NEWLINE
97+13:1 glyph ++
98+13:4 name already
99+13:12 glyph |=
100+13:15 name flag
101+13:19 tight glyph =
102+13:20 tight glyph ?
103+14:3 INDENT
104+14:3 glyph ^-
105+14:6 glyph [
106+14:7 tight aura @t
107+14:10 aura @t
108+14:12 tight glyph ]
109+14:14 glyph ?-
110+14:17 name flag
111+15:5 INDENT
112+15:5 lit %.y
113+15:9 glyph [
114+15:10 tight str "yes"
115+15:16 str "a"
116+15:19 tight glyph ]
117+16:5 NEWLINE
118+16:5 lit %.n
119+16:9 glyph [
120+16:10 tight str "no"
121+16:15 str "b"
122+16:18 tight glyph ]
123+17:1 DEDENT
124+17:1 DEDENT
125+17:1 NEWLINE
126+17:1 glyph +$
127+17:4 name rec
128+17:8 glyph [
129+17:9 tight name name
130+17:13 tight glyph =
131+17:14 tight aura @t
132+17:17 name place
133+17:22 tight glyph =
134+17:23 tight glyph (
135+17:24 tight name unit
136+17:29 aura @t
137+17:31 tight glyph )
138+17:32 tight glyph ]
139+18:1 NEWLINE
140+18:1 glyph ++
141+18:4 name named
142+18:10 glyph |=
143+18:13 name flag
144+18:17 tight glyph =
145+18:18 tight glyph ?
146+19:3 INDENT
147+19:3 glyph ^-
148+19:6 name rec
149+19:10 glyph ?-
150+19:13 name flag
151+20:5 INDENT
152+20:5 lit %.y
153+20:9 glyph [
154+20:10 tight name name
155+20:14 tight glyph =
156+20:15 tight str "yes"
157+20:21 name place
158+20:26 tight glyph =
159+20:27 tight lit ~
160+20:28 tight glyph ]
161+21:5 NEWLINE
162+21:5 lit %.n
163+21:9 glyph [
164+21:10 tight name name
165+21:14 tight glyph =
166+21:15 tight str "no"
167+21:20 name place
168+21:25 tight glyph =
169+21:26 tight lit ~
170+21:27 tight glyph ]
171+22:1 DEDENT
172+22:1 DEDENT
173+22:1 NEWLINE
174+22:1 glyph ++
175+22:4 name wrong
176+22:10 glyph |=
177+22:13 name flag
178+22:17 tight glyph =
179+22:18 tight glyph ?
180+23:3 INDENT
181+23:3 glyph ^-
182+23:6 name rec
183+23:10 glyph ?-
184+23:13 name flag
185+24:5 INDENT
186+24:5 lit %.y
187+24:9 glyph [
188+24:10 tight name name
189+24:14 tight glyph =
190+24:15 tight str "yes"
191+24:21 name place
192+24:26 tight glyph =
193+24:27 tight lit ~
194+24:28 tight glyph ]
195+25:5 NEWLINE
196+25:5 lit %.n
197+25:9 glyph [
198+25:10 tight name other
199+25:15 tight glyph =
200+25:16 tight str "no"
201+25:21 name place
202+25:26 tight glyph =
203+25:27 tight lit ~
204+25:28 tight glyph ]
205+26:1 DEDENT
206+26:1 DEDENT
207+26:1 NEWLINE
208+26:1 glyph ++
209+26:4 name different
210+26:14 glyph |=
211+26:17 name flag
212+26:21 tight glyph =
213+26:22 tight glyph ?
214+27:3 INDENT
215+27:3 glyph ^-
216+27:6 name rec
217+27:10 glyph ?-
218+27:13 name flag
219+28:5 INDENT
220+28:5 lit %.y
221+28:9 glyph [
222+28:10 tight name name
223+28:14 tight glyph =
224+28:15 tight str "yes"
225+28:21 name place
226+28:26 tight glyph =
227+28:27 tight lit ~
228+28:28 tight glyph ]
229+29:5 NEWLINE
230+29:5 lit %.n
231+29:9 glyph [
232+29:10 tight str "no"
233+29:15 lit ~
234+29:16 tight glyph ]
235+30:1 DEDENT
236+30:1 DEDENT
237+30:1 NEWLINE
238+30:1 glyph ++
239+30:4 name open
240+30:9 glyph |=
241+30:12 glyph [
242+30:13 tight name flag
243+30:17 tight glyph =
244+30:18 tight glyph ?
245+30:20 name value
246+30:25 tight glyph =
247+30:26 tight tvar A
248+30:27 tight glyph ]
249+31:3 INDENT
250+31:3 glyph ^-
251+31:6 glyph [
252+31:7 tight tvar A
253+31:9 glyph (
254+31:10 tight name unit
255+31:15 tvar A
256+31:16 tight glyph )
257+31:17 tight glyph ]
258+31:19 glyph ?-
259+31:22 name flag
260+32:5 INDENT
261+32:5 lit %.y
262+32:9 glyph [
263+32:10 tight name value
264+32:16 lit ~
265+32:17 tight glyph ]
266+33:5 NEWLINE
267+33:5 lit %.n
268+33:9 glyph [
269+33:10 tight name value
270+33:16 lit ~
271+33:17 tight glyph ]
272+34:1 DEDENT
273+34:1 DEDENT
274+34:1 NEWLINE
275+34:1 glyph ++
276+34:4 name waiting
277+34:12 glyph |=
278+34:15 name flag
279+34:19 tight glyph =
280+34:20 tight glyph ?
281+35:3 INDENT
282+35:3 glyph ^-
283+35:6 name rec
284+35:10 glyph ?-
285+35:13 name flag
286+36:5 INDENT
287+36:5 lit %.y
288+36:9 glyph [
289+36:10 tight name name
290+36:14 tight glyph =
291+36:15 tight str "yes"
292+36:21 name place
293+36:26 tight glyph =
294+36:27 tight lit ~
295+36:28 tight glyph ]
296+37:5 NEWLINE
297+37:5 lit %.n
298+37:9 glyph [
299+37:10 tight name name
300+37:14 tight glyph =
301+37:15 tight lit %waiting
302+37:24 name place
303+37:29 tight glyph =
304+37:30 tight lit ~
305+37:31 tight glyph ]
306+37:32 DEDENT
307+37:32 DEDENT
308+37:32 NEWLINE
tests/golden/types-cell-branch-context/tree.txtnew file+156
@@ -0,0 +1,156 @@
1+(module
2+ (value 1:1 choose
3+ (gate 1:11
4+ (face 1:14 flag (flag 1:19))
5+ (body 2:3
6+ (cast 2:3
7+ (cell 2:6
8+ (aura 2:7 @t)
9+ (apply 2:10 unit (aura 2:16 @t)))
10+ (branch 2:21
11+ (wing 2:24 flag)
12+ (arm 3:5
13+ (lit 3:5 %.y)
14+ (tuple 3:9 (str 3:10 "yes") (lit 3:16 ~)))
15+ (arm 4:5
16+ (lit 4:5 %.n)
17+ (tuple 4:9 (str 4:10 "no") (lit 4:15 ~))))))))
18+ (value 5:1 bad
19+ (gate 5:8
20+ (face 5:11 flag (flag 5:16))
21+ (body 6:3
22+ (cast 6:3
23+ (cell 6:6
24+ (aura 6:7 @t)
25+ (apply 6:10 unit (aura 6:16 @t)))
26+ (branch 6:21
27+ (wing 6:24 flag)
28+ (arm 7:5
29+ (lit 7:5 %.y)
30+ (tuple 7:9 (str 7:10 "yes") (lit 7:16 ~)))
31+ (arm 8:5
32+ (lit 8:5 %.n)
33+ (tuple 8:9 (lit 8:10 ~zod) (lit 8:15 ~))))))))
34+ (value 9:1 pending
35+ (gate 9:12
36+ (face 9:15 flag (flag 9:20))
37+ (body 10:3
38+ (cast 10:3
39+ (cell 10:6
40+ (aura 10:7 @t)
41+ (apply 10:10 unit (aura 10:16 @t)))
42+ (branch 10:21
43+ (wing 10:24 flag)
44+ (arm 11:5
45+ (lit 11:5 %.y)
46+ (tuple 11:9 (str 11:10 "yes") (lit 11:16 ~)))
47+ (arm 12:5
48+ (lit 12:5 %.n)
49+ (tuple 12:9 (lit 12:10 %waiting) (lit 12:19 ~))))))))
50+ (value 13:1 already
51+ (gate 13:12
52+ (face 13:15 flag (flag 13:20))
53+ (body 14:3
54+ (cast 14:3
55+ (cell 14:6 (aura 14:7 @t) (aura 14:10 @t))
56+ (branch 14:14
57+ (wing 14:17 flag)
58+ (arm 15:5
59+ (lit 15:5 %.y)
60+ (tuple 15:9 (str 15:10 "yes") (str 15:16 "a")))
61+ (arm 16:5
62+ (lit 16:5 %.n)
63+ (tuple 16:9 (str 16:10 "no") (str 16:15 "b"))))))))
64+ (mold 17:1 rec
65+ (cell 17:8
66+ (face 17:9 name (aura 17:14 @t))
67+ (face 17:17 place
68+ (apply 17:23 unit (aura 17:29 @t)))))
69+ (value 18:1 named
70+ (gate 18:10
71+ (face 18:13 flag (flag 18:18))
72+ (body 19:3
73+ (cast 19:3
74+ (ref 19:6 rec)
75+ (branch 19:10
76+ (wing 19:13 flag)
77+ (arm 20:5
78+ (lit 20:5 %.y)
79+ (tuple 20:9
80+ (face 20:10 name (str 20:15 "yes"))
81+ (face 20:21 place (lit 20:27 ~))))
82+ (arm 21:5
83+ (lit 21:5 %.n)
84+ (tuple 21:9
85+ (face 21:10 name (str 21:15 "no"))
86+ (face 21:20 place (lit 21:26 ~)))))))))
87+ (value 22:1 wrong
88+ (gate 22:10
89+ (face 22:13 flag (flag 22:18))
90+ (body 23:3
91+ (cast 23:3
92+ (ref 23:6 rec)
93+ (branch 23:10
94+ (wing 23:13 flag)
95+ (arm 24:5
96+ (lit 24:5 %.y)
97+ (tuple 24:9
98+ (face 24:10 name (str 24:15 "yes"))
99+ (face 24:21 place (lit 24:27 ~))))
100+ (arm 25:5
101+ (lit 25:5 %.n)
102+ (tuple 25:9
103+ (face 25:10 other (str 25:16 "no"))
104+ (face 25:21 place (lit 25:27 ~)))))))))
105+ (value 26:1 different
106+ (gate 26:14
107+ (face 26:17 flag (flag 26:22))
108+ (body 27:3
109+ (cast 27:3
110+ (ref 27:6 rec)
111+ (branch 27:10
112+ (wing 27:13 flag)
113+ (arm 28:5
114+ (lit 28:5 %.y)
115+ (tuple 28:9
116+ (face 28:10 name (str 28:15 "yes"))
117+ (face 28:21 place (lit 28:27 ~))))
118+ (arm 29:5
119+ (lit 29:5 %.n)
120+ (tuple 29:9 (str 29:10 "no") (lit 29:15 ~))))))))
121+ (value 30:1 open
122+ (gate 30:9
123+ (cell 30:12
124+ (face 30:13 flag (flag 30:18))
125+ (face 30:20 value (tvar 30:26 A)))
126+ (body 31:3
127+ (cast 31:3
128+ (cell 31:6
129+ (tvar 31:7 A)
130+ (apply 31:9 unit (tvar 31:15 A)))
131+ (branch 31:19
132+ (wing 31:22 flag)
133+ (arm 32:5
134+ (lit 32:5 %.y)
135+ (tuple 32:9 (wing 32:10 value) (lit 32:16 ~)))
136+ (arm 33:5
137+ (lit 33:5 %.n)
138+ (tuple 33:9 (wing 33:10 value) (lit 33:16 ~))))))))
139+ (value 34:1 waiting
140+ (gate 34:12
141+ (face 34:15 flag (flag 34:20))
142+ (body 35:3
143+ (cast 35:3
144+ (ref 35:6 rec)
145+ (branch 35:10
146+ (wing 35:13 flag)
147+ (arm 36:5
148+ (lit 36:5 %.y)
149+ (tuple 36:9
150+ (face 36:10 name (str 36:15 "yes"))
151+ (face 36:21 place (lit 36:27 ~))))
152+ (arm 37:5
153+ (lit 37:5 %.n)
154+ (tuple 37:9
155+ (face 37:10 name (lit 37:15 %waiting))
156+ (face 37:24 place (lit 37:30 ~))))))))))
tests/golden/types-cell-branch-context/types.txtnew file+11
@@ -0,0 +1,11 @@
1+partial inference; module not checked
2+++ choose: $-(? [@t (unit @t)])
3+++ bad: branch tag or union context is not supported by partial inference
4+++ pending: branch tag or union context is not supported by partial inference
5+++ already: $-(? [@t @t])
6++$ rec: not checked
7+++ named: $-(? [name=@t place=(unit @t)])
8+++ wrong: branch tag or union context is not supported by partial inference
9+++ different: branch tag or union context is not supported by partial inference
10+++ open: branch widening is not supported by partial inference
11+++ waiting: branch tag or union context is not supported by partial inference
tests/golden/types-cell-pattern-schemes/source.jibb+1−1
@@ -10,7 +10,7 @@
1010++ identity |= x
1111 ?- x
1212 [a b c] [a b c]
13−++ text (identity "hi" ~zod %.y)
13+++ text-value (identity "hi" ~zod %.y)
1414++ ship (identity ~zod "hi" %.n)
1515++ shared |= x=[A A A]
1616 ?- x
tests/golden/types-cell-pattern-schemes/tokens.txt+7−7
@@ -73,13 +73,13 @@
737313:1 DEDENT
747413:1 NEWLINE
757513:1 glyph ++
76−13:4 name text
77−13:9 glyph (
78−13:10 tight name identity
79−13:19 str "hi"
80−13:24 lit ~zod
81−13:29 lit %.y
82−13:32 tight glyph )
76+13:4 name text-value
77+13:15 glyph (
78+13:16 tight name identity
79+13:25 str "hi"
80+13:30 lit ~zod
81+13:35 lit %.y
82+13:38 tight glyph )
838314:1 NEWLINE
848414:1 glyph ++
858514:4 name ship
tests/golden/types-cell-pattern-schemes/tree.txt+3−3
@@ -31,9 +31,9 @@
3131 (arm 12:5
3232 (cell 12:5 (bind 12:6 a) (bind 12:8 b) (bind 12:10 c))
3333 (tuple 12:13 (wing 12:14 a) (wing 12:16 b) (wing 12:18 c)))))))
34− (value 13:1 text
35− (group 13:9
36− (call 13:10 (wing 13:10 identity) (str 13:19 "hi") (lit 13:24 ~zod) (lit 13:29 %.y))))
34+ (value 13:1 text-value
35+ (group 13:15
36+ (call 13:16 (wing 13:16 identity) (str 13:25 "hi") (lit 13:30 ~zod) (lit 13:35 %.y))))
3737 (value 14:1 ship
3838 (group 14:9
3939 (call 14:10 (wing 14:10 identity) (lit 14:19 ~zod) (str 14:24 "hi") (lit 14:29 %.n))))
tests/golden/types-cell-pattern-schemes/types.txt+1−1
@@ -3,7 +3,7 @@ partial inference; module not checked
33++ maybe-union: cell pattern subject is not supported by partial inference
44++ maybe-list: cell pattern subject is not supported by partial inference
55++ identity: $-([A [B C]] [A [B C]])
6−++ text: [@t [@p ?]]
6+++ text-value: [@t [@p ?]]
77++ ship: [@p [@t ?]]
88++ shared: $-([A [A A]] [A [A A]])
99++ wrong: call's sample and argument types do not unify
tests/golden/types-generic-result-context/source.jibb+9−9
@@ -10,15 +10,15 @@
1010+$ swap |$ [A B] (choice B A)
1111+$ repeated |$ [A] (choice A A)
1212+$ 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)
13+++ wrap-value |= x=A ^- (choice A @p) [%one x]
14+++ wrap-value-repeat |= x=A ^- (repeated A) [%one x]
15+++ use-msg ^- (choice msg @p) (wrap-value %idle)
16+++ use-alias ^- (swap @p msg) (wrap-value %idle)
17+++ use-repeated ^- (repeated msg) (wrap-value-repeat %idle)
18+++ use-distinct ^- (choice other @p) (wrap-value %idle)
1919++ independent |= [m=msg n=other]
20− [(^- (choice msg @p) (wrap m)) (^- (choice other @p) (wrap n))]
20+ [(^- (choice msg @p) (wrap-value m)) (^- (choice other @p) (wrap-value n))]
2121++ pending
2222 ~& %orphan
23− ^- (choice msg @p) (wrap %idle)
24−++ wrong-case ^- (choice msg @p) (wrap %absent)
23+ ^- (choice msg @p) (wrap-value %idle)
24+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
tests/golden/types-generic-result-context/tokens.txt+65−65
@@ -76,37 +76,37 @@
767612:33 tight glyph )
777713:1 NEWLINE
787813: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 ]
79+13:4 name wrap-value
80+13:15 glyph |=
81+13:18 name x
82+13:19 tight glyph =
83+13:20 tight tvar A
84+13:22 glyph ^-
85+13:25 glyph (
86+13:26 tight name choice
87+13:33 tvar A
88+13:35 aura @p
89+13:37 tight glyph )
90+13:39 glyph [
91+13:40 tight lit %one
92+13:45 name x
93+13:46 tight glyph ]
949414:1 NEWLINE
959514: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 ]
96+14:4 name wrap-value-repeat
97+14:22 glyph |=
98+14:25 name x
99+14:26 tight glyph =
100+14:27 tight tvar A
101+14:29 glyph ^-
102+14:32 glyph (
103+14:33 tight name repeated
104+14:42 tvar A
105+14:43 tight glyph )
106+14:45 glyph [
107+14:46 tight lit %one
108+14:51 name x
109+14:52 tight glyph ]
11011015:1 NEWLINE
11111115:1 glyph ++
11211215:4 name use-msg
@@ -117,9 +117,9 @@
11711715:27 aura @p
11811815:29 tight glyph )
11911915:31 glyph (
120−15:32 tight name wrap
121−15:37 lit %idle
122−15:42 tight glyph )
120+15:32 tight name wrap-value
121+15:43 lit %idle
122+15:48 tight glyph )
12312316:1 NEWLINE
12412416:1 glyph ++
12512516:4 name use-alias
@@ -130,9 +130,9 @@
13013016:26 name msg
13113116:29 tight glyph )
13213216:31 glyph (
133−16:32 tight name wrap
134−16:37 lit %idle
135−16:42 tight glyph )
133+16:32 tight name wrap-value
134+16:43 lit %idle
135+16:48 tight glyph )
13613617:1 NEWLINE
13713717:1 glyph ++
13813817:4 name use-repeated
@@ -142,9 +142,9 @@
14214217:30 name msg
14314317:33 tight glyph )
14414417:35 glyph (
145−17:36 tight name wrap-repeat
146−17:48 lit %idle
147−17:53 tight glyph )
145+17:36 tight name wrap-value-repeat
146+17:54 lit %idle
147+17:59 tight glyph )
14814818:1 NEWLINE
14914918:1 glyph ++
15015018:4 name use-distinct
@@ -155,9 +155,9 @@
15515518:34 aura @p
15615618:36 tight glyph )
15715718:38 glyph (
158−18:39 tight name wrap
159−18:44 lit %idle
160−18:49 tight glyph )
158+18:39 tight name wrap-value
159+18:50 lit %idle
160+18:55 tight glyph )
16116119:1 NEWLINE
16216219:1 glyph ++
16316319:4 name independent
@@ -180,23 +180,23 @@
18018020:20 aura @p
18118120:22 tight glyph )
18218220: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 ]
183+20:25 tight name wrap-value
184+20:36 name m
185+20:37 tight glyph )
186+20:38 tight glyph )
187+20:40 glyph (
188+20:41 tight glyph ^-
189+20:44 glyph (
190+20:45 tight name choice
191+20:52 name other
192+20:58 aura @p
193+20:60 tight glyph )
194+20:62 glyph (
195+20:63 tight name wrap-value
196+20:74 name n
197+20:75 tight glyph )
198+20:76 tight glyph )
199+20:77 tight glyph ]
20020021:1 DEDENT
20120121:1 NEWLINE
20220221:1 glyph ++
@@ -212,9 +212,9 @@
21221223:20 aura @p
21321323:22 tight glyph )
21421423:24 glyph (
215−23:25 tight name wrap
216−23:30 lit %idle
217−23:35 tight glyph )
215+23:25 tight name wrap-value
216+23:36 lit %idle
217+23:41 tight glyph )
21821824:1 DEDENT
21921924:1 DEDENT
22022024:1 NEWLINE
@@ -227,7 +227,7 @@
22722724:30 aura @p
22822824:32 tight glyph )
22922924:34 glyph (
230−24:35 tight name wrap
231−24:40 lit %absent
232−24:47 tight glyph )
233−24:48 NEWLINE
230+24:35 tight name wrap-value
231+24:46 lit %absent
232+24:53 tight glyph )
233+24:54 NEWLINE
tests/golden/types-generic-result-context/tree.txt+24−24
@@ -21,38 +21,38 @@
2121 (mold 12:1 phantom
2222 (generic 12:12 A B
2323 (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)))))
24+ (value 13:1 wrap-value
25+ (gate 13:15
26+ (face 13:18 x (tvar 13:20 A))
27+ (cast 13:22
28+ (apply 13:25 choice (tvar 13:33 A) (aura 13:35 @p))
29+ (tuple 13:39 (lit 13:40 %one) (wing 13:45 x)))))
30+ (value 14:1 wrap-value-repeat
31+ (gate 14:22
32+ (face 14:25 x (tvar 14:27 A))
33+ (cast 14:29
34+ (apply 14:32 repeated (tvar 14:42 A))
35+ (tuple 14:45 (lit 14:46 %one) (wing 14:51 x)))))
3636 (value 15:1 use-msg
3737 (cast 15:12
3838 (apply 15:15 choice (ref 15:23 msg) (aura 15:27 @p))
3939 (group 15:31
40− (call 15:32 (wing 15:32 wrap) (lit 15:37 %idle)))))
40+ (call 15:32 (wing 15:32 wrap-value) (lit 15:43 %idle)))))
4141 (value 16:1 use-alias
4242 (cast 16:14
4343 (apply 16:17 swap (aura 16:23 @p) (ref 16:26 msg))
4444 (group 16:31
45− (call 16:32 (wing 16:32 wrap) (lit 16:37 %idle)))))
45+ (call 16:32 (wing 16:32 wrap-value) (lit 16:43 %idle)))))
4646 (value 17:1 use-repeated
4747 (cast 17:17
4848 (apply 17:20 repeated (ref 17:30 msg))
4949 (group 17:35
50− (call 17:36 (wing 17:36 wrap-repeat) (lit 17:48 %idle)))))
50+ (call 17:36 (wing 17:36 wrap-value-repeat) (lit 17:54 %idle)))))
5151 (value 18:1 use-distinct
5252 (cast 18:17
5353 (apply 18:20 choice (ref 18:28 other) (aura 18:34 @p))
5454 (group 18:38
55− (call 18:39 (wing 18:39 wrap) (lit 18:44 %idle)))))
55+ (call 18:39 (wing 18:39 wrap-value) (lit 18:50 %idle)))))
5656 (value 19:1 independent
5757 (gate 19:16
5858 (cell 19:19
@@ -64,12 +64,12 @@
6464 (cast 20:5
6565 (apply 20:8 choice (ref 20:16 msg) (aura 20:20 @p))
6666 (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)))))))))
67+ (call 20:25 (wing 20:25 wrap-value) (wing 20:36 m)))))
68+ (group 20:40
69+ (cast 20:41
70+ (apply 20:44 choice (ref 20:52 other) (aura 20:58 @p))
71+ (group 20:62
72+ (call 20:63 (wing 20:63 wrap-value) (wing 20:74 n)))))))))
7373 (value 21:1 pending
7474 (body 22:3
7575 (trace 22:3
@@ -78,9 +78,9 @@
7878 (cast 23:5
7979 (apply 23:8 choice (ref 23:16 msg) (aura 23:20 @p))
8080 (group 23:24
81− (call 23:25 (wing 23:25 wrap) (lit 23:30 %idle))))))))
81+ (call 23:25 (wing 23:25 wrap-value) (lit 23:36 %idle))))))))
8282 (value 24:1 wrong-case
8383 (cast 24:15
8484 (apply 24:18 choice (ref 24:26 msg) (aura 24:30 @p))
8585 (group 24:34
86− (call 24:35 (wing 24:35 wrap) (lit 24:40 %absent))))))
86+ (call 24:35 (wing 24:35 wrap-value) (lit 24:46 %absent))))))
tests/golden/types-generic-result-context/types.txt+6−6
@@ -5,8 +5,8 @@ partial inference; module not checked
55+$ swap: not checked
66+$ repeated: not checked
77+$ phantom: not checked
8−++ wrap: $-(A (choice A @p))
9−++ wrap-repeat: $-(A (choice A A))
8+++ wrap-value: $-(A (choice A @p))
9+++ wrap-value-repeat: $-(A (choice A A))
1010++ use-msg: (choice msg @p)
1111++ use-alias: (choice msg @p)
1212++ use-repeated: (choice msg msg)
@@ -15,8 +15,8 @@ partial inference; module not checked
1515++ pending: tag needs context in partial inference
1616++ wrong-case: msg has no case `%absent`
1717/tests/golden/types-generic-result-context/source.jibb:24:35: expected union
18−++ wrong-case ^- (choice msg @p) (wrap %absent)
18+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
1919 ^
20−/tests/golden/types-generic-result-context/source.jibb:24:40: tag
21−++ wrong-case ^- (choice msg @p) (wrap %absent)
22− ^
20+/tests/golden/types-generic-result-context/source.jibb:24:46: tag
21+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
22+ ^
tests/golden/types-generic-union-escaping/module-trees.txt+4−4
@@ -6,10 +6,10 @@
66/ui/mid.jibb
77(module
88 (jibb 1:1 base /ui/base)
9− (value 2:1 text
10− (cast 2:9
11− (apply 2:12 phantom.base (aura 2:26 @t))
12− (lit 2:30 %yes)))
9+ (value 2:1 text-value
10+ (cast 2:15
11+ (apply 2:18 phantom.base (aura 2:32 @t))
12+ (lit 2:36 %yes)))
1313 (value 3:1 ship
1414 (cast 3:9
1515 (apply 3:12 phantom.base (aura 3:26 @p))
tests/golden/types-generic-union-escaping/modules/ui/mid.jibb+1−1
@@ -1,3 +1,3 @@
11/= base /ui/base
2−++ text ^- (phantom.base @t) %yes
2+++ text-value ^- (phantom.base @t) %yes
33++ ship ^- (phantom.base @p) %yes
tests/golden/types-generic-union-escaping/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= mid /ui/mid
2−++ text-value text.mid
2+++ text-value text-value.mid
33++ ship-value ship.mid
tests/golden/types-generic-union-escaping/tokens.txt+1−1
@@ -7,7 +7,7 @@
772:1 NEWLINE
882:1 glyph ++
992:4 name text-value
10−2:15 wing text.mid
10+2:15 wing text-value.mid
11113:1 NEWLINE
12123:1 glyph ++
13133:4 name ship-value
tests/golden/types-generic-union-escaping/tree.txt+1−1
@@ -1,4 +1,4 @@
11(module
22 (jibb 1:1 mid /ui/mid)
3− (value 2:1 text-value (wing 2:15 text.mid))
3+ (value 2:1 text-value (wing 2:15 text-value.mid))
44 (value 3:1 ship-value (wing 3:15 ship.mid)))
tests/golden/types-list-patterns/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; "A name in a pattern always binds anew". Modules: no name may shadow an in-scope name.
2−tests: Both orders of an exhaustive list branch bind the head and tail with their respective types; unsupported subjects or patterns, conflicting binders, and unrelated unresolved tags fail closed.
2+tests: Both orders of an exhaustive list branch bind the head and tail with their respective types; unsupported subjects or patterns, conflicting binders, and unrelated unresolved tags fail closed; a nonempty arm of `(list !!)` is unreachable.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-list-patterns/types.txt+1−1
@@ -12,6 +12,6 @@ partial inference; module not checked
1212++ unresolved: list branch results need unsupported inference
1313++ duplicate-arm: branch is not supported by partial inference
1414++ unrelated: tag needs context in partial inference
15−++ empty-elements: sample mold is not supported by partial inference
15+++ empty-elements: list nonempty pattern is unreachable
1616+$ maybe: cases proven disjoint; mold not checked
1717++ unit-shape: unit branch pattern is not supported by partial inference
tests/golden/types-nested-shallow-preserve/source.jibb+15−15
@@ -1,25 +1,25 @@
1−+$ length
1++$ extent
22 [%fill n=@ud]
33 %shrink
4−+$ attr
5− [%width length]
4++$ attribute
5+ [%width extent]
66 [%gap @tas]
77++ 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
8+++ plain ^- attribute width+[%fill 1]
9+++ direct ^- attribute [%width [%fill 1]]
10+++ list ^- (list attribute) ~[width+[%fill 1]]
11+++ accept |= value=attribute value
1212++ 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"]
13+++ simple-call ^- attribute width+[%fill (number-id 1)]
14+++ grouped-call ^- attribute width+[%fill ((number-id 1))]
15+++ cast-call ^- attribute width+[%fill (^- @ud (number-id 1))]
16+++ nested-call ^- attribute width+[%fill (number-id (number-id 1))]
17+++ bad-tag ^- attribute width+[%missing 1]
18+++ bad-number ^- attribute width+[%fill "bad"]
1919++ pending
2020 ~& %unrelated
21− ^- attr width+[%fill (number-id 1)]
22−++ singleton ^- attr width+%shrink
21+ ^- attribute width+[%fill (number-id 1)]
22+++ singleton ^- attribute width+%shrink
2323+$ event
2424 [%got value=@t]
2525 %idle
tests/golden/types-nested-shallow-preserve/tokens.txt+107−107
@@ -1,5 +1,5 @@
111:1 glyph +$
2−1:4 name length
2+1:4 name extent
332:3 INDENT
442:3 glyph [
552:4 tight lit %fill
@@ -12,11 +12,11 @@
12124:1 DEDENT
13134:1 NEWLINE
14144:1 glyph +$
15−4:4 name attr
15+4:4 name attribute
16165:3 INDENT
17175:3 glyph [
18185:4 tight lit %width
19−5:11 name length
19+5:11 name extent
20205:17 tight glyph ]
21216:3 NEWLINE
22226:3 glyph [
@@ -36,49 +36,49 @@
36368:1 glyph ++
37378:4 name plain
38388: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 ]
39+8:13 name attribute
40+8:23 name width
41+8:28 tight glyph +
42+8:29 tight glyph [
43+8:30 tight lit %fill
44+8:36 lit 1
45+8:37 tight glyph ]
46469:1 NEWLINE
47479:1 glyph ++
48489:4 name direct
49499: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 ]
50+9:14 name attribute
51+9:24 glyph [
52+9:25 tight lit %width
53+9:32 glyph [
54+9:33 tight lit %fill
55+9:39 lit 1
56+9:40 tight glyph ]
57+9:41 tight glyph ]
585810:1 NEWLINE
595910:1 glyph ++
606010:4 name list
616110:9 glyph ^-
626210:12 glyph (
636310: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 ]
64+10:18 name attribute
65+10:27 tight glyph )
66+10:29 glyph ~[
67+10:31 tight name width
68+10:36 tight glyph +
69+10:37 tight glyph [
70+10:38 tight lit %fill
71+10:44 lit 1
72+10:45 tight glyph ]
73+10:46 tight glyph ]
747411:1 NEWLINE
757511:1 glyph ++
767611:4 name accept
777711:11 glyph |=
787811:14 name value
797911:19 tight glyph =
80−11:20 tight name attr
81−11:25 name value
80+11:20 tight name attribute
81+11:30 name value
828212:1 NEWLINE
838312:1 glyph ++
848412:4 name call
@@ -95,89 +95,89 @@
959513:1 glyph ++
969613:4 name simple-call
979713: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 ]
98+13:19 name attribute
99+13:29 name width
100+13:34 tight glyph +
101+13:35 tight glyph [
102+13:36 tight lit %fill
103+13:42 glyph (
104+13:43 tight name number-id
105+13:53 lit 1
106+13:54 tight glyph )
107+13:55 tight glyph ]
10810814:1 NEWLINE
10910914:1 glyph ++
11011014:4 name grouped-call
11111114: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 ]
112+14:20 name attribute
113+14:30 name width
114+14:35 tight glyph +
115+14:36 tight glyph [
116+14:37 tight lit %fill
117+14:43 glyph (
118+14:44 tight glyph (
119+14:45 tight name number-id
120+14:55 lit 1
121+14:56 tight glyph )
122+14:57 tight glyph )
123+14:58 tight glyph ]
12412415:1 NEWLINE
12512515:1 glyph ++
12612615:4 name cast-call
12712715: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 ]
128+15:17 name attribute
129+15:27 name width
130+15:32 tight glyph +
131+15:33 tight glyph [
132+15:34 tight lit %fill
133+15:40 glyph (
134+15:41 tight glyph ^-
135+15:44 aura @ud
136+15:48 glyph (
137+15:49 tight name number-id
138+15:59 lit 1
139+15:60 tight glyph )
140+15:61 tight glyph )
141+15:62 tight glyph ]
14214216:1 NEWLINE
14314316:1 glyph ++
14414416:4 name nested-call
14514516: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 ]
146+16:19 name attribute
147+16:29 name width
148+16:34 tight glyph +
149+16:35 tight glyph [
150+16:36 tight lit %fill
151+16:42 glyph (
152+16:43 tight name number-id
153+16:53 glyph (
154+16:54 tight name number-id
155+16:64 lit 1
156+16:65 tight glyph )
157+16:66 tight glyph )
158+16:67 tight glyph ]
15915917:1 NEWLINE
16016017:1 glyph ++
16116117:4 name bad-tag
16216217: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 ]
163+17:15 name attribute
164+17:25 name width
165+17:30 tight glyph +
166+17:31 tight glyph [
167+17:32 tight lit %missing
168+17:41 lit 1
169+17:42 tight glyph ]
17017018:1 NEWLINE
17117118:1 glyph ++
17217218:4 name bad-number
17317318: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 ]
174+18:18 name attribute
175+18:28 name width
176+18:33 tight glyph +
177+18:34 tight glyph [
178+18:35 tight lit %fill
179+18:41 str "bad"
180+18:46 tight glyph ]
18118119:1 NEWLINE
18218219:1 glyph ++
18318319:4 name pending
@@ -186,26 +186,26 @@
18618620:6 lit %unrelated
18718721:5 INDENT
18818821: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 ]
189+21:8 name attribute
190+21:18 name width
191+21:23 tight glyph +
192+21:24 tight glyph [
193+21:25 tight lit %fill
194+21:31 glyph (
195+21:32 tight name number-id
196+21:42 lit 1
197+21:43 tight glyph )
198+21:44 tight glyph ]
19919922:1 DEDENT
20020022:1 DEDENT
20120122:1 NEWLINE
20220222:1 glyph ++
20320322:4 name singleton
20420422:14 glyph ^-
205−22:17 name attr
206−22:22 name width
207−22:27 tight glyph +
208−22:28 tight lit %shrink
205+22:17 name attribute
206+22:27 name width
207+22:32 tight glyph +
208+22:33 tight lit %shrink
20920923:1 NEWLINE
21021023:1 glyph +$
21121123:4 name event
tests/golden/types-nested-shallow-preserve/tree.txt+61−61
@@ -1,13 +1,13 @@
11(module
2− (mold 1:1 length
2+ (mold 1:1 extent
33 (union 2:3
44 (cell 2:3
55 (const 2:4 %fill)
66 (face 2:10 n (aura 2:12 @ud)))
77 (const 3:3 %shrink)))
8− (mold 4:1 attr
8+ (mold 4:1 attribute
99 (union 5:3
10− (cell 5:3 (const 5:4 %width) (ref 5:11 length))
10+ (cell 5:3 (const 5:4 %width) (ref 5:11 extent))
1111 (cell 6:3 (const 6:4 %gap) (aura 6:9 @tas))))
1212 (value 7:1 number-id
1313 (gate 7:14
@@ -15,25 +15,25 @@
1515 (wing 7:23 x)))
1616 (value 8:1 plain
1717 (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)))))
18+ (ref 8:13 attribute)
19+ (pair 8:23 width
20+ (tuple 8:29 (lit 8:30 %fill) (lit 8:36 1)))))
2121 (value 9:1 direct
2222 (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)))))
23+ (ref 9:14 attribute)
24+ (tuple 9:24
25+ (lit 9:25 %width)
26+ (tuple 9:32 (lit 9:33 %fill) (lit 9:39 1)))))
2727 (value 10:1 list
2828 (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))))))
29+ (apply 10:12 list (ref 10:18 attribute))
30+ (list 10:29
31+ (pair 10:31 width
32+ (tuple 10:37 (lit 10:38 %fill) (lit 10:44 1))))))
3333 (value 11:1 accept
3434 (gate 11:11
35− (face 11:14 value (ref 11:20 attr))
36− (wing 11:25 value)))
35+ (face 11:14 value (ref 11:20 attribute))
36+ (wing 11:30 value)))
3737 (value 12:1 call
3838 (group 12:9
3939 (call 12:10
@@ -42,69 +42,69 @@
4242 (tuple 12:23 (lit 12:24 %fill) (lit 12:30 1))))))
4343 (value 13:1 simple-call
4444 (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)))))))
45+ (ref 13:19 attribute)
46+ (pair 13:29 width
47+ (tuple 13:35
48+ (lit 13:36 %fill)
49+ (group 13:42
50+ (call 13:43 (wing 13:43 number-id) (lit 13:53 1)))))))
5151 (value 14:1 grouped-call
5252 (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))))))))
53+ (ref 14:20 attribute)
54+ (pair 14:30 width
55+ (tuple 14:36
56+ (lit 14:37 %fill)
57+ (group 14:43
58+ (group 14:44
59+ (call 14:45 (wing 14:45 number-id) (lit 14:55 1))))))))
6060 (value 15:1 cast-call
6161 (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)))))))))
62+ (ref 15:17 attribute)
63+ (pair 15:27 width
64+ (tuple 15:33
65+ (lit 15:34 %fill)
66+ (group 15:40
67+ (cast 15:41
68+ (aura 15:44 @ud)
69+ (group 15:48
70+ (call 15:49 (wing 15:49 number-id) (lit 15:59 1)))))))))
7171 (value 16:1 nested-call
7272 (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)))))))))
73+ (ref 16:19 attribute)
74+ (pair 16:29 width
75+ (tuple 16:35
76+ (lit 16:36 %fill)
77+ (group 16:42
78+ (call 16:43
79+ (wing 16:43 number-id)
80+ (group 16:53
81+ (call 16:54 (wing 16:54 number-id) (lit 16:64 1)))))))))
8282 (value 17:1 bad-tag
8383 (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)))))
84+ (ref 17:15 attribute)
85+ (pair 17:25 width
86+ (tuple 17:31 (lit 17:32 %missing) (lit 17:41 1)))))
8787 (value 18:1 bad-number
8888 (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")))))
89+ (ref 18:18 attribute)
90+ (pair 18:28 width
91+ (tuple 18:34 (lit 18:35 %fill) (str 18:41 "bad")))))
9292 (value 19:1 pending
9393 (body 20:3
9494 (trace 20:3
9595 (lit 20:6 %unrelated)
9696 (body 21:5
9797 (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))))))))))
98+ (ref 21:8 attribute)
99+ (pair 21:18 width
100+ (tuple 21:24
101+ (lit 21:25 %fill)
102+ (group 21:31
103+ (call 21:32 (wing 21:32 number-id) (lit 21:42 1))))))))))
104104 (value 22:1 singleton
105105 (cast 22:14
106− (ref 22:17 attr)
107− (pair 22:22 width (lit 22:28 %shrink))))
106+ (ref 22:17 attribute)
107+ (pair 22:27 width (lit 22:33 %shrink))))
108108 (mold 23:1 event
109109 (union 24:3
110110 (cell 24:3
tests/golden/types-nested-shallow-preserve/types.txt+20−20
@@ -1,32 +1,32 @@
11partial inference; module not checked
2−+$ length: cases proven disjoint; mold not checked
3−+$ attr: cases proven disjoint; mold not checked
2++$ extent: cases proven disjoint; mold not checked
3++$ attribute: cases proven disjoint; mold not checked
44++ 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
5+++ plain: attribute
6+++ direct: attribute
7+++ list: (list attribute)
8+++ accept: $-(attribute attribute)
9+++ call: attribute
10+++ simple-call: attribute
11+++ grouped-call: attribute
12+++ cast-call: attribute
13+++ nested-call: attribute
1414++ bad-tag: cast mold and expression type do not unify
1515/tests/golden/types-nested-shallow-preserve/source.jibb:17:15: cast mold
16−++ bad-tag ^- attr width+[%missing 1]
16+++ bad-tag ^- attribute width+[%missing 1]
1717 ^
18−/tests/golden/types-nested-shallow-preserve/source.jibb:17:20: expression
19−++ bad-tag ^- attr width+[%missing 1]
20− ^
18+/tests/golden/types-nested-shallow-preserve/source.jibb:17:25: expression
19+++ bad-tag ^- attribute width+[%missing 1]
20+ ^
2121++ bad-number: cast mold and expression type do not unify
2222/tests/golden/types-nested-shallow-preserve/source.jibb:18:18: cast mold
23−++ bad-number ^- attr width+[%fill "bad"]
23+++ bad-number ^- attribute width+[%fill "bad"]
2424 ^
25−/tests/golden/types-nested-shallow-preserve/source.jibb:18:23: expression
26−++ bad-number ^- attr width+[%fill "bad"]
27− ^
25+/tests/golden/types-nested-shallow-preserve/source.jibb:18:28: expression
26+++ bad-number ^- attribute width+[%fill "bad"]
27+ ^
2828++ pending: tag needs context in partial inference
29−++ singleton: attr
29+++ singleton: attribute
3030+$ event: cases proven disjoint; mold not checked
3131+$ envelope: cases proven disjoint; mold not checked
3232++ constructor: envelope
tests/golden/types-pair-context/source.jibb+14−14
@@ -3,30 +3,30 @@
33 %s1
44 %s2
55 %s3
6−+$ length
6++$ extent
77 [%fill n=@ud]
88 %shrink
9−+$ attr
9++$ attribute
1010 [%gap spacing]
1111 [%pad spacing]
12− [%width length]
13−+$ other-attr
12+ [%width extent]
13++$ other-attribute
1414 [%gap spacing]
1515 [%pad spacing]
16− [%width length]
17−++ one ^- attr gap+%s2
18−++ equiv ^- attr [%gap %s2]
19−++ attrs ^- (list attr) ~[gap+%s2 pad+%s3 width+[%fill 1]]
16+ [%width extent]
17+++ one ^- attribute gap+%s2
18+++ equiv ^- attribute [%gap %s2]
19+++ attributes ^- (list attribute) ~[gap+%s2 pad+%s3 width+[%fill 1]]
2020++ gap-structural ^- [@tas @tas] gap+%s2
21−++ nested ^- attr width+[%fill 1]
22−++ mismatch ^- attr gap+%shrink
23−++ missing ^- attr width+[%oops 1]
21+++ nested ^- attribute width+[%fill 1]
22+++ mismatch ^- attribute gap+%shrink
23+++ missing ^- attribute width+[%oops 1]
2424++ pending gap+%s2
25−++ cross-origin ^- attr ^- other-attr gap+%s2
25+++ cross-origin ^- attribute ^- other-attribute gap+%s2
2626++ noun-pair ^- [* *] gap+%s2
2727++ atom-pair ^- [@ta @tas] gap+%s2
2828++ wrong-head ^- [@ud @tas] gap+%s2
29−++ wrong-number ^- attr width+[%fill "hi"]
29+++ wrong-number ^- attribute width+[%fill "hi"]
3030++ unrelated
3131 ~& %dangling
32− ^- attr gap+%s2
32+ ^- attribute gap+%s2
tests/golden/types-pair-context/tokens.txt+71−71
@@ -11,7 +11,7 @@
11116:1 DEDENT
12126:1 NEWLINE
13136:1 glyph +$
14−6:4 name length
14+6:4 name extent
15157:3 INDENT
16167:3 glyph [
17177:4 tight lit %fill
@@ -24,7 +24,7 @@
24249:1 DEDENT
25259:1 NEWLINE
26269:1 glyph +$
27−9:4 name attr
27+9:4 name attribute
282810:3 INDENT
292910:3 glyph [
303010:4 tight lit %gap
@@ -38,12 +38,12 @@
383812:3 NEWLINE
393912:3 glyph [
404012:4 tight lit %width
41−12:11 name length
41+12:11 name extent
424212:17 tight glyph ]
434313:1 DEDENT
444413:1 NEWLINE
454513:1 glyph +$
46−13:4 name other-attr
46+13:4 name other-attribute
474714:3 INDENT
484814:3 glyph [
494914:4 tight lit %gap
@@ -57,48 +57,48 @@
575716:3 NEWLINE
585816:3 glyph [
595916:4 tight lit %width
60−16:11 name length
60+16:11 name extent
616116:17 tight glyph ]
626217:1 DEDENT
636317:1 NEWLINE
646417:1 glyph ++
656517:4 name one
666617:8 glyph ^-
67−17:11 name attr
68−17:16 name gap
69−17:19 tight glyph +
70−17:20 tight lit %s2
67+17:11 name attribute
68+17:21 name gap
69+17:24 tight glyph +
70+17:25 tight lit %s2
717118:1 NEWLINE
727218:1 glyph ++
737318:4 name equiv
747418:10 glyph ^-
75−18:13 name attr
76−18:18 glyph [
77−18:19 tight lit %gap
78−18:24 lit %s2
79−18:27 tight glyph ]
75+18:13 name attribute
76+18:23 glyph [
77+18:24 tight lit %gap
78+18:29 lit %s2
79+18:32 tight glyph ]
808019:1 NEWLINE
818119:1 glyph ++
82−19:4 name attrs
83−19:10 glyph ^-
84−19:13 glyph (
85−19:14 tight name list
86−19:19 name attr
87−19:23 tight glyph )
88−19:25 glyph ~[
89−19:27 tight name gap
90−19:30 tight glyph +
91−19:31 tight lit %s2
92−19:35 name pad
93−19:38 tight glyph +
94−19:39 tight lit %s3
95−19:43 name width
82+19:4 name attributes
83+19:15 glyph ^-
84+19:18 glyph (
85+19:19 tight name list
86+19:24 name attribute
87+19:33 tight glyph )
88+19:35 glyph ~[
89+19:37 tight name gap
90+19:40 tight glyph +
91+19:41 tight lit %s2
92+19:45 name pad
969319:48 tight glyph +
97−19:49 tight glyph [
98−19:50 tight lit %fill
99−19:56 lit 1
100−19:57 tight glyph ]
101−19:58 tight glyph ]
94+19:49 tight lit %s3
95+19:53 name width
96+19:58 tight glyph +
97+19:59 tight glyph [
98+19:60 tight lit %fill
99+19:66 lit 1
100+19:67 tight glyph ]
101+19:68 tight glyph ]
10210220:1 NEWLINE
10310320:1 glyph ++
10410420:4 name gap-structural
@@ -114,32 +114,32 @@
11411421:1 glyph ++
11511521:4 name nested
11611621:11 glyph ^-
117−21:14 name attr
118−21:19 name width
119−21:24 tight glyph +
120−21:25 tight glyph [
121−21:26 tight lit %fill
122−21:32 lit 1
123−21:33 tight glyph ]
117+21:14 name attribute
118+21:24 name width
119+21:29 tight glyph +
120+21:30 tight glyph [
121+21:31 tight lit %fill
122+21:37 lit 1
123+21:38 tight glyph ]
12412422:1 NEWLINE
12512522:1 glyph ++
12612622:4 name mismatch
12712722:13 glyph ^-
128−22:16 name attr
129−22:21 name gap
130−22:24 tight glyph +
131−22:25 tight lit %shrink
128+22:16 name attribute
129+22:26 name gap
130+22:29 tight glyph +
131+22:30 tight lit %shrink
13213223:1 NEWLINE
13313323:1 glyph ++
13413423:4 name missing
13513523:12 glyph ^-
136−23:15 name attr
137−23:20 name width
138−23:25 tight glyph +
139−23:26 tight glyph [
140−23:27 tight lit %oops
141−23:33 lit 1
142−23:34 tight glyph ]
136+23:15 name attribute
137+23:25 name width
138+23:30 tight glyph +
139+23:31 tight glyph [
140+23:32 tight lit %oops
141+23:38 lit 1
142+23:39 tight glyph ]
14314324:1 NEWLINE
14414424:1 glyph ++
14514524:4 name pending
@@ -150,12 +150,12 @@
15015025:1 glyph ++
15115125:4 name cross-origin
15215225:17 glyph ^-
153−25:20 name attr
154−25:25 glyph ^-
155−25:28 name other-attr
156−25:39 name gap
157−25:42 tight glyph +
158−25:43 tight lit %s2
153+25:20 name attribute
154+25:30 glyph ^-
155+25:33 name other-attribute
156+25:49 name gap
157+25:52 tight glyph +
158+25:53 tight lit %s2
15915926:1 NEWLINE
16016026:1 glyph ++
16116126:4 name noun-pair
@@ -193,13 +193,13 @@
19319329:1 glyph ++
19419429:4 name wrong-number
19519529:17 glyph ^-
196−29:20 name attr
197−29:25 name width
198−29:30 tight glyph +
199−29:31 tight glyph [
200−29:32 tight lit %fill
201−29:38 str "hi"
202−29:42 tight glyph ]
196+29:20 name attribute
197+29:30 name width
198+29:35 tight glyph +
199+29:36 tight glyph [
200+29:37 tight lit %fill
201+29:43 str "hi"
202+29:47 tight glyph ]
20320330:1 NEWLINE
20420430:1 glyph ++
20520530:4 name unrelated
@@ -208,10 +208,10 @@
20820831:6 lit %dangling
20920932:5 INDENT
21021032:5 glyph ^-
211−32:8 name attr
212−32:13 name gap
213−32:16 tight glyph +
214−32:17 tight lit %s2
215−32:20 DEDENT
216−32:20 DEDENT
217−32:20 NEWLINE
211+32:8 name attribute
212+32:18 name gap
213+32:21 tight glyph +
214+32:22 tight lit %s2
215+32:25 DEDENT
216+32:25 DEDENT
217+32:25 NEWLINE
tests/golden/types-pair-context/tree.txt+34−34
@@ -1,64 +1,64 @@
11(module
22 (mold 1:1 spacing
33 (union 2:3 (const 2:3 %s0) (const 3:3 %s1) (const 4:3 %s2) (const 5:3 %s3)))
4− (mold 6:1 length
4+ (mold 6:1 extent
55 (union 7:3
66 (cell 7:3
77 (const 7:4 %fill)
88 (face 7:10 n (aura 7:12 @ud)))
99 (const 8:3 %shrink)))
10− (mold 9:1 attr
10+ (mold 9:1 attribute
1111 (union 10:3
1212 (cell 10:3 (const 10:4 %gap) (ref 10:9 spacing))
1313 (cell 11:3 (const 11:4 %pad) (ref 11:9 spacing))
14− (cell 12:3 (const 12:4 %width) (ref 12:11 length))))
15− (mold 13:1 other-attr
14+ (cell 12:3 (const 12:4 %width) (ref 12:11 extent))))
15+ (mold 13:1 other-attribute
1616 (union 14:3
1717 (cell 14:3 (const 14:4 %gap) (ref 14:9 spacing))
1818 (cell 15:3 (const 15:4 %pad) (ref 15:9 spacing))
19− (cell 16:3 (const 16:4 %width) (ref 16:11 length))))
19+ (cell 16:3 (const 16:4 %width) (ref 16:11 extent))))
2020 (value 17:1 one
2121 (cast 17:8
22− (ref 17:11 attr)
23− (pair 17:16 gap (lit 17:20 %s2))))
22+ (ref 17:11 attribute)
23+ (pair 17:21 gap (lit 17:25 %s2))))
2424 (value 18:1 equiv
2525 (cast 18:10
26− (ref 18:13 attr)
27− (tuple 18:18 (lit 18:19 %gap) (lit 18:24 %s2))))
28− (value 19:1 attrs
29− (cast 19:10
30− (apply 19:13 list (ref 19:19 attr))
31− (list 19:25
32− (pair 19:27 gap (lit 19:31 %s2))
33− (pair 19:35 pad (lit 19:39 %s3))
34− (pair 19:43 width
35− (tuple 19:49 (lit 19:50 %fill) (lit 19:56 1))))))
26+ (ref 18:13 attribute)
27+ (tuple 18:23 (lit 18:24 %gap) (lit 18:29 %s2))))
28+ (value 19:1 attributes
29+ (cast 19:15
30+ (apply 19:18 list (ref 19:24 attribute))
31+ (list 19:35
32+ (pair 19:37 gap (lit 19:41 %s2))
33+ (pair 19:45 pad (lit 19:49 %s3))
34+ (pair 19:53 width
35+ (tuple 19:59 (lit 19:60 %fill) (lit 19:66 1))))))
3636 (value 20:1 gap-structural
3737 (cast 20:19
3838 (cell 20:22 (aura 20:23 @tas) (aura 20:28 @tas))
3939 (pair 20:34 gap (lit 20:38 %s2))))
4040 (value 21:1 nested
4141 (cast 21:11
42− (ref 21:14 attr)
43− (pair 21:19 width
44− (tuple 21:25 (lit 21:26 %fill) (lit 21:32 1)))))
42+ (ref 21:14 attribute)
43+ (pair 21:24 width
44+ (tuple 21:30 (lit 21:31 %fill) (lit 21:37 1)))))
4545 (value 22:1 mismatch
4646 (cast 22:13
47− (ref 22:16 attr)
48− (pair 22:21 gap (lit 22:25 %shrink))))
47+ (ref 22:16 attribute)
48+ (pair 22:26 gap (lit 22:30 %shrink))))
4949 (value 23:1 missing
5050 (cast 23:12
51− (ref 23:15 attr)
52− (pair 23:20 width
53− (tuple 23:26 (lit 23:27 %oops) (lit 23:33 1)))))
51+ (ref 23:15 attribute)
52+ (pair 23:25 width
53+ (tuple 23:31 (lit 23:32 %oops) (lit 23:38 1)))))
5454 (value 24:1 pending
5555 (pair 24:12 gap (lit 24:16 %s2)))
5656 (value 25:1 cross-origin
5757 (cast 25:17
58− (ref 25:20 attr)
59− (cast 25:25
60− (ref 25:28 other-attr)
61− (pair 25:39 gap (lit 25:43 %s2)))))
58+ (ref 25:20 attribute)
59+ (cast 25:30
60+ (ref 25:33 other-attribute)
61+ (pair 25:49 gap (lit 25:53 %s2)))))
6262 (value 26:1 noun-pair
6363 (cast 26:14
6464 (cell 26:17 (noun 26:18) (noun 26:20))
@@ -73,14 +73,14 @@
7373 (pair 28:29 gap (lit 28:33 %s2))))
7474 (value 29:1 wrong-number
7575 (cast 29:17
76− (ref 29:20 attr)
77− (pair 29:25 width
78− (tuple 29:31 (lit 29:32 %fill) (str 29:38 "hi")))))
76+ (ref 29:20 attribute)
77+ (pair 29:30 width
78+ (tuple 29:36 (lit 29:37 %fill) (str 29:43 "hi")))))
7979 (value 30:1 unrelated
8080 (body 31:3
8181 (trace 31:3
8282 (lit 31:6 %dangling)
8383 (body 32:5
8484 (cast 32:5
85− (ref 32:8 attr)
86− (pair 32:13 gap (lit 32:17 %s2))))))))
85+ (ref 32:8 attribute)
86+ (pair 32:18 gap (lit 32:22 %s2))))))))
tests/golden/types-pair-context/types.txt+19−19
@@ -1,27 +1,27 @@
11partial inference; module not checked
22+$ spacing: cases proven disjoint; mold not checked
3−+$ length: cases proven disjoint; mold not checked
4−+$ attr: cases proven disjoint; mold not checked
5−+$ other-attr: cases proven disjoint; mold not checked
6−++ one: attr
7−++ equiv: attr
8−++ attrs: (list attr)
3++$ extent: cases proven disjoint; mold not checked
4++$ attribute: cases proven disjoint; mold not checked
5++$ other-attribute: cases proven disjoint; mold not checked
6+++ one: attribute
7+++ equiv: attribute
8+++ attributes: (list attribute)
99++ gap-structural: [@tas @tas]
10−++ nested: attr
10+++ nested: attribute
1111++ mismatch: cast mold and expression type do not unify
1212/tests/golden/types-pair-context/source.jibb:22:16: cast mold
13−++ mismatch ^- attr gap+%shrink
13+++ mismatch ^- attribute gap+%shrink
1414 ^
15−/tests/golden/types-pair-context/source.jibb:22:21: expression
16−++ mismatch ^- attr gap+%shrink
17− ^
15+/tests/golden/types-pair-context/source.jibb:22:26: expression
16+++ mismatch ^- attribute gap+%shrink
17+ ^
1818++ missing: cast mold and expression type do not unify
1919/tests/golden/types-pair-context/source.jibb:23:15: cast mold
20−++ missing ^- attr width+[%oops 1]
20+++ missing ^- attribute width+[%oops 1]
2121 ^
22−/tests/golden/types-pair-context/source.jibb:23:20: expression
23−++ missing ^- attr width+[%oops 1]
24− ^
22+/tests/golden/types-pair-context/source.jibb:23:25: expression
23+++ missing ^- attribute width+[%oops 1]
24+ ^
2525++ pending: tag needs context in partial inference
2626++ cross-origin: cast constraint is not supported by partial inference
2727++ noun-pair: [* *]
@@ -35,9 +35,9 @@ partial inference; module not checked
3535 ^
3636++ wrong-number: cast mold and expression type do not unify
3737/tests/golden/types-pair-context/source.jibb:29:20: cast mold
38−++ wrong-number ^- attr width+[%fill "hi"]
38+++ wrong-number ^- attribute width+[%fill "hi"]
3939 ^
40−/tests/golden/types-pair-context/source.jibb:29:25: expression
41−++ wrong-number ^- attr width+[%fill "hi"]
42− ^
40+/tests/golden/types-pair-context/source.jibb:29:30: expression
41+++ wrong-number ^- attribute width+[%fill "hi"]
42+ ^
4343++ unrelated: tag needs context in partial inference
tests/golden/types-partial-aura-family/source.jibb+1−1
@@ -1,7 +1,7 @@
11++ decimal |= x=@ud ^- @u x
22++ hex ^- @u 0x1f
33++ base32 |= x=@uv ^- @u x
4−++ text |= x=@tD ^- @t x
4+++ text-value |= x=@tD ^- @t x
55++ narrow |= x=@t ^- @tD x
66++ siblings |= x=@ux ^- @ud x
77++ dup |= p=[A A] p
tests/golden/types-partial-aura-family/tokens.txt+8−8
@@ -25,14 +25,14 @@
25253:26 name x
26264:1 NEWLINE
27274:1 glyph ++
28−4:4 name text
29−4:9 glyph |=
30−4:12 name x
31−4:13 tight glyph =
32−4:14 tight aura @tD
33−4:18 glyph ^-
34−4:21 aura @t
35−4:24 name x
28+4:4 name text-value
29+4:15 glyph |=
30+4:18 name x
31+4:19 tight glyph =
32+4:20 tight aura @tD
33+4:24 glyph ^-
34+4:27 aura @t
35+4:30 name x
36365:1 NEWLINE
37375:1 glyph ++
38385:4 name narrow
tests/golden/types-partial-aura-family/tree.txt+4−4
@@ -9,10 +9,10 @@
99 (gate 3:11
1010 (face 3:14 x (aura 3:16 @uv))
1111 (cast 3:20 (aura 3:23 @u) (wing 3:26 x))))
12− (value 4:1 text
13− (gate 4:9
14− (face 4:12 x (aura 4:14 @tD))
15− (cast 4:18 (aura 4:21 @t) (wing 4:24 x))))
12+ (value 4:1 text-value
13+ (gate 4:15
14+ (face 4:18 x (aura 4:20 @tD))
15+ (cast 4:24 (aura 4:27 @t) (wing 4:30 x))))
1616 (value 5:1 narrow
1717 (gate 5:11
1818 (face 5:14 x (aura 5:16 @t))
tests/golden/types-partial-aura-family/types.txt+1−1
@@ -2,7 +2,7 @@ partial inference; module not checked
22++ decimal: $-(@ud @u)
33++ hex: @u
44++ base32: $-(@uv @u)
5−++ text: $-(@tD @t)
5+++ text-value: $-(@tD @t)
66++ narrow: cast mold and expression type do not unify
77/tests/golden/types-partial-aura-family/source.jibb:5:22: cast mold has type @tD
88++ narrow |= x=@t ^- @tD x
tests/golden/types-partial-locals/source.jibb+2−2
@@ -32,9 +32,9 @@
3232++ local-mold |= x
3333 +$ item @t
3434 x
35−++ wrap |= y |=(z y)
35+++ wrap-value |= y |=(z y)
3636++ through-global |= x
37− ++ local (wrap x)
37+ ++ local (wrap-value x)
3838 ~& ^- @t (local ~zod)
3939 ^- @p (local "hi")
4040++ nested-shadow |= x
tests/golden/types-partial-locals/tokens.txt+10−10
@@ -180,13 +180,13 @@
18018035:1 DEDENT
18118135:1 NEWLINE
18218235:1 glyph ++
183−35:4 name wrap
184−35:9 glyph |=
185−35:12 name y
186−35:14 glyph |=(
187−35:17 tight name z
188−35:19 name y
189−35:20 tight glyph )
183+35:4 name wrap-value
184+35:15 glyph |=
185+35:18 name y
186+35:20 glyph |=(
187+35:23 tight name z
188+35:25 name y
189+35:26 tight glyph )
19019036:1 NEWLINE
19119136:1 glyph ++
19219236:4 name through-global
@@ -196,9 +196,9 @@
19619637:3 glyph ++
19719737:6 name local
19819837:12 glyph (
199−37:13 tight name wrap
200−37:18 name x
201−37:19 tight glyph )
199+37:13 tight name wrap-value
200+37:24 name x
201+37:25 tight glyph )
20220238:3 NEWLINE
20320338:3 glyph ~&
20420438:6 glyph ^-
tests/golden/types-partial-locals/tree.txt+5−5
@@ -88,17 +88,17 @@
8888 (body 33:3
8989 (mold 33:3 item (aura 33:11 @t))
9090 (wing 34:3 x))))
91− (value 35:1 wrap
92− (gate 35:9
93− (bind 35:12 y)
94− (gate-wide 35:14 (bind 35:17 z) (wing 35:19 y))))
91+ (value 35:1 wrap-value
92+ (gate 35:15
93+ (bind 35:18 y)
94+ (gate-wide 35:20 (bind 35:23 z) (wing 35:25 y))))
9595 (value 36:1 through-global
9696 (gate 36:19
9797 (bind 36:22 x)
9898 (body 37:3
9999 (value 37:3 local
100100 (group 37:12
101− (call 37:13 (wing 37:13 wrap) (wing 37:18 x))))
101+ (call 37:13 (wing 37:13 wrap-value) (wing 37:24 x))))
102102 (trace 38:3
103103 (cast 38:6
104104 (aura 38:9 @t)
tests/golden/types-partial-locals/types.txt+1−1
@@ -21,7 +21,7 @@ partial inference; module not checked
2121 ^
2222++ unused-bad: local definitions need unsupported inference
2323++ local-mold: $-(A A)
24−++ wrap: $-(A $-(B A))
24+++ wrap-value: $-(A $-(B A))
2525++ through-global: cast mold and expression type do not unify
2626/tests/golden/types-partial-locals/source.jibb:39:8: cast mold has type @p
2727 ^- @p (local "hi")
tests/golden/types-prelude-bond/source.jibb+1−1
@@ -1,6 +1,6 @@
11++ choose (bond |=(~ "default"))
22++ missing (choose ~)
33++ present (choose `"found")
4−++ wrap |= fallback=$-(~ A) (bond fallback)
4+++ wrap-value |= fallback=$-(~ A) (bond fallback)
55++ choose-ship (bond |=(~ ~zod))
66++ present-ship (choose-ship `~zod)
tests/golden/types-prelude-bond/tokens.txt+12−12
@@ -24,18 +24,18 @@
24243:28 tight glyph )
25254:1 NEWLINE
26264:1 glyph ++
27−4:4 name wrap
28−4:9 glyph |=
29−4:12 name fallback
30−4:20 tight glyph =
31−4:21 tight glyph $-(
32−4:24 tight lit ~
33−4:26 tvar A
34−4:27 tight glyph )
35−4:29 glyph (
36−4:30 tight name bond
37−4:35 name fallback
38−4:43 tight glyph )
27+4:4 name wrap-value
28+4:15 glyph |=
29+4:18 name fallback
30+4:26 tight glyph =
31+4:27 tight glyph $-(
32+4:30 tight lit ~
33+4:32 tvar A
34+4:33 tight glyph )
35+4:35 glyph (
36+4:36 tight name bond
37+4:41 name fallback
38+4:49 tight glyph )
39395:1 NEWLINE
40405:1 glyph ++
41415:4 name choose-ship
tests/golden/types-prelude-bond/tree.txt+6−6
@@ -12,12 +12,12 @@
1212 (call 3:13
1313 (wing 3:13 choose)
1414 (unit 3:20 (str 3:21 "found")))))
15− (value 4:1 wrap
16− (gate 4:9
17− (face 4:12 fallback
18− (fn 4:21 (const 4:24 ~) (tvar 4:26 A)))
19− (group 4:29
20− (call 4:30 (wing 4:30 bond) (wing 4:35 fallback)))))
15+ (value 4:1 wrap-value
16+ (gate 4:15
17+ (face 4:18 fallback
18+ (fn 4:27 (const 4:30 ~) (tvar 4:32 A)))
19+ (group 4:35
20+ (call 4:36 (wing 4:36 bond) (wing 4:41 fallback)))))
2121 (value 5:1 choose-ship
2222 (group 5:16
2323 (call 5:17
tests/golden/types-prelude-bond/types.txt+1−1
@@ -2,6 +2,6 @@ partial inference; module not checked
22++ choose: $-((unit @t) @t)
33++ missing: @t
44++ present: @t
5−++ wrap: $-($-(~ A) $-((unit A) A))
5+++ wrap-value: $-($-(~ A) $-((unit A) A))
66++ choose-ship: $-((unit @p) @p)
77++ present-ship: @p
tests/golden/types-prelude-cmd/source.jibb+4−4
@@ -8,9 +8,9 @@
88++ wait ^- (cmd @t) [%wait ~s30 "done"]
99++ who ^- (cmd @t) [%who |=(p=@p "done")]
1010++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
11−++ wrap |= x=A ^- (cmd A) [%wait ~s30 x]
12−++ wrap-text (wrap "hello")
13−++ wrap-ship (wrap ~zod)
11+++ wrap-value |= x=A ^- (cmd A) [%wait ~s30 x]
12+++ wrap-value-text (wrap-value "hello")
13+++ wrap-value-ship (wrap-value ~zod)
1414++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
1515++ commands ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 "done"]]
1616++ commands-bad ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 ~zod]]
@@ -18,4 +18,4 @@
1818 ^- (cmd @t) [%poke p |=(r=@p "done")]
1919++ wrong-case ^- (cmd @t) %oops
2020++ use-text |= x=(cmd @t) x
21−++ cross (use-text (wrap ~zod))
21+++ cross (use-text (wrap-value ~zod))
tests/golden/types-prelude-cmd/tokens.txt+30−30
@@ -138,35 +138,35 @@
13813810:46 tight glyph ]
13913911:1 NEWLINE
14014011:1 glyph ++
141−11:4 name wrap
142−11:9 glyph |=
143−11:12 name x
144−11:13 tight glyph =
145−11:14 tight tvar A
146−11:16 glyph ^-
147−11:19 glyph (
148−11:20 tight name cmd
149−11:24 tvar A
150−11:25 tight glyph )
151−11:27 glyph [
152−11:28 tight lit %wait
153−11:34 lit ~s30
154−11:39 name x
155−11:40 tight glyph ]
141+11:4 name wrap-value
142+11:15 glyph |=
143+11:18 name x
144+11:19 tight glyph =
145+11:20 tight tvar A
146+11:22 glyph ^-
147+11:25 glyph (
148+11:26 tight name cmd
149+11:30 tvar A
150+11:31 tight glyph )
151+11:33 glyph [
152+11:34 tight lit %wait
153+11:40 lit ~s30
154+11:45 name x
155+11:46 tight glyph ]
15615612:1 NEWLINE
15715712:1 glyph ++
158−12:4 name wrap-text
159−12:14 glyph (
160−12:15 tight name wrap
161−12:20 str "hello"
162−12:27 tight glyph )
158+12:4 name wrap-value-text
159+12:20 glyph (
160+12:21 tight name wrap-value
161+12:32 str "hello"
162+12:39 tight glyph )
16316313:1 NEWLINE
16416413:1 glyph ++
165−13:4 name wrap-ship
166−13:14 glyph (
167−13:15 tight name wrap
168−13:20 lit ~zod
169−13:24 tight glyph )
165+13:4 name wrap-value-ship
166+13:20 glyph (
167+13:21 tight name wrap-value
168+13:32 lit ~zod
169+13:36 tight glyph )
17017014:1 NEWLINE
17117114:1 glyph ++
17217214:4 name wrong-reply
@@ -278,8 +278,8 @@
27827821:10 glyph (
27927921:11 tight name use-text
28028021:20 glyph (
281−21:21 tight name wrap
282−21:26 lit ~zod
283−21:30 tight glyph )
284−21:31 tight glyph )
285−21:32 NEWLINE
281+21:21 tight name wrap-value
282+21:32 lit ~zod
283+21:36 tight glyph )
284+21:37 tight glyph )
285+21:38 NEWLINE
tests/golden/types-prelude-cmd/tree.txt+13−13
@@ -59,18 +59,18 @@
5959 (cast 10:18
6060 (apply 10:21 cmd (aura 10:26 @t))
6161 (tuple 10:30 (lit 10:31 %wait) (lit 10:37 ~s30) (lit 10:42 ~zod))))
62− (value 11:1 wrap
63− (gate 11:9
64− (face 11:12 x (tvar 11:14 A))
65− (cast 11:16
66− (apply 11:19 cmd (tvar 11:24 A))
67− (tuple 11:27 (lit 11:28 %wait) (lit 11:34 ~s30) (wing 11:39 x)))))
68− (value 12:1 wrap-text
69− (group 12:14
70− (call 12:15 (wing 12:15 wrap) (str 12:20 "hello"))))
71− (value 13:1 wrap-ship
72− (group 13:14
73− (call 13:15 (wing 13:15 wrap) (lit 13:20 ~zod))))
62+ (value 11:1 wrap-value
63+ (gate 11:15
64+ (face 11:18 x (tvar 11:20 A))
65+ (cast 11:22
66+ (apply 11:25 cmd (tvar 11:30 A))
67+ (tuple 11:33 (lit 11:34 %wait) (lit 11:40 ~s30) (wing 11:45 x)))))
68+ (value 12:1 wrap-value-text
69+ (group 12:20
70+ (call 12:21 (wing 12:21 wrap-value) (str 12:32 "hello"))))
71+ (value 13:1 wrap-value-ship
72+ (group 13:20
73+ (call 13:21 (wing 13:21 wrap-value) (lit 13:32 ~zod))))
7474 (value 14:1 wrong-reply
7575 (cast 14:16
7676 (apply 14:19 cmd (aura 14:24 @t))
@@ -119,4 +119,4 @@
119119 (call 21:11
120120 (wing 21:11 use-text)
121121 (group 21:20
122− (call 21:21 (wing 21:21 wrap) (lit 21:26 ~zod)))))))
122+ (call 21:21 (wing 21:21 wrap-value) (lit 21:32 ~zod)))))))
tests/golden/types-prelude-cmd/types.txt+7−7
@@ -20,9 +20,9 @@ partial inference; module not checked
2020/tests/golden/types-prelude-cmd/source.jibb:10:30: expression
2121++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
2222 ^
23−++ wrap: $-(A (cmd A))
24−++ wrap-text: (cmd @t)
25−++ wrap-ship: (cmd @p)
23+++ wrap-value: $-(A (cmd A))
24+++ wrap-value-text: (cmd @t)
25+++ wrap-value-ship: (cmd @p)
2626++ wrong-reply: cast mold and expression type do not unify
2727/tests/golden/types-prelude-cmd/source.jibb:14:19: cast mold
2828++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
@@ -49,8 +49,8 @@ partial inference; module not checked
4949++ use-text: $-((cmd @t) (cmd @t))
5050++ cross: call's sample and argument types do not unify
5151/tests/golden/types-prelude-cmd/source.jibb:21:21: called gate
52−++ cross (use-text (wrap ~zod))
52+++ cross (use-text (wrap-value ~zod))
5353 ^
54−/tests/golden/types-prelude-cmd/source.jibb:21:26: argument has type @p
55−++ cross (use-text (wrap ~zod))
56− ^
54+/tests/golden/types-prelude-cmd/source.jibb:21:32: argument has type @p
55+++ cross (use-text (wrap-value ~zod))
56+ ^
tests/golden/types-prelude-lead-late/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Hoon's standard library regrouped, written in Jibb"; Function helpers include section 2n.
2+tests: Source-backed curried lead and late infer independent argument types, reverse output positions correctly, and preserve generic gates as ordinary values. Explicit context accepts a null unit; an uncontextualized null remains unsupported and an incompatible annotated result reports its sites. This is a partial inference report; Jibb lowering, execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-lead-late/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-lead-late/source.jibbnew file+10
@@ -0,0 +1,10 @@
1+++ text-ship ((lead "hi") ~zod)
2+++ ship-text ((late "hi") ~zod)
3+++ first-fn (lead "hi")
4+++ generic-lead |= [x=A y=B] ((lead x) y)
5+++ generic-late |= [x=A y=B] ((late x) y)
6+++ generic-gate |= [f=$-(A B) x=C] ((lead f) x)
7+++ reversed-gate |= [f=$-(A B) x=C] ((late f) x)
8+++ null-lead ((lead (^- (unit @t) ~)) "tail")
9+++ unresolved ((lead ~) "tail")
10+++ bad ^- [@p @t] ((lead "hi") ~zod)
tests/golden/types-prelude-lead-late/tokens.txtnew file+151
@@ -0,0 +1,151 @@
1+1:1 glyph ++
2+1:4 name text-ship
3+1:14 glyph (
4+1:15 tight glyph (
5+1:16 tight name lead
6+1:21 str "hi"
7+1:25 tight glyph )
8+1:27 lit ~zod
9+1:31 tight glyph )
10+2:1 NEWLINE
11+2:1 glyph ++
12+2:4 name ship-text
13+2:14 glyph (
14+2:15 tight glyph (
15+2:16 tight name late
16+2:21 str "hi"
17+2:25 tight glyph )
18+2:27 lit ~zod
19+2:31 tight glyph )
20+3:1 NEWLINE
21+3:1 glyph ++
22+3:4 name first-fn
23+3:13 glyph (
24+3:14 tight name lead
25+3:19 str "hi"
26+3:23 tight glyph )
27+4:1 NEWLINE
28+4:1 glyph ++
29+4:4 name generic-lead
30+4:17 glyph |=
31+4:20 glyph [
32+4:21 tight name x
33+4:22 tight glyph =
34+4:23 tight tvar A
35+4:25 name y
36+4:26 tight glyph =
37+4:27 tight tvar B
38+4:28 tight glyph ]
39+4:30 glyph (
40+4:31 tight glyph (
41+4:32 tight name lead
42+4:37 name x
43+4:38 tight glyph )
44+4:40 name y
45+4:41 tight glyph )
46+5:1 NEWLINE
47+5:1 glyph ++
48+5:4 name generic-late
49+5:17 glyph |=
50+5:20 glyph [
51+5:21 tight name x
52+5:22 tight glyph =
53+5:23 tight tvar A
54+5:25 name y
55+5:26 tight glyph =
56+5:27 tight tvar B
57+5:28 tight glyph ]
58+5:30 glyph (
59+5:31 tight glyph (
60+5:32 tight name late
61+5:37 name x
62+5:38 tight glyph )
63+5:40 name y
64+5:41 tight glyph )
65+6:1 NEWLINE
66+6:1 glyph ++
67+6:4 name generic-gate
68+6:17 glyph |=
69+6:20 glyph [
70+6:21 tight name f
71+6:22 tight glyph =
72+6:23 tight glyph $-(
73+6:26 tight tvar A
74+6:28 tvar B
75+6:29 tight glyph )
76+6:31 name x
77+6:32 tight glyph =
78+6:33 tight tvar C
79+6:34 tight glyph ]
80+6:36 glyph (
81+6:37 tight glyph (
82+6:38 tight name lead
83+6:43 name f
84+6:44 tight glyph )
85+6:46 name x
86+6:47 tight glyph )
87+7:1 NEWLINE
88+7:1 glyph ++
89+7:4 name reversed-gate
90+7:18 glyph |=
91+7:21 glyph [
92+7:22 tight name f
93+7:23 tight glyph =
94+7:24 tight glyph $-(
95+7:27 tight tvar A
96+7:29 tvar B
97+7:30 tight glyph )
98+7:32 name x
99+7:33 tight glyph =
100+7:34 tight tvar C
101+7:35 tight glyph ]
102+7:37 glyph (
103+7:38 tight glyph (
104+7:39 tight name late
105+7:44 name f
106+7:45 tight glyph )
107+7:47 name x
108+7:48 tight glyph )
109+8:1 NEWLINE
110+8:1 glyph ++
111+8:4 name null-lead
112+8:14 glyph (
113+8:15 tight glyph (
114+8:16 tight name lead
115+8:21 glyph (
116+8:22 tight glyph ^-
117+8:25 glyph (
118+8:26 tight name unit
119+8:31 aura @t
120+8:33 tight glyph )
121+8:35 lit ~
122+8:36 tight glyph )
123+8:37 tight glyph )
124+8:39 str "tail"
125+8:45 tight glyph )
126+9:1 NEWLINE
127+9:1 glyph ++
128+9:4 name unresolved
129+9:15 glyph (
130+9:16 tight glyph (
131+9:17 tight name lead
132+9:22 lit ~
133+9:23 tight glyph )
134+9:25 str "tail"
135+9:31 tight glyph )
136+10:1 NEWLINE
137+10:1 glyph ++
138+10:4 name bad
139+10:8 glyph ^-
140+10:11 glyph [
141+10:12 tight aura @p
142+10:15 aura @t
143+10:17 tight glyph ]
144+10:19 glyph (
145+10:20 tight glyph (
146+10:21 tight name lead
147+10:26 str "hi"
148+10:30 tight glyph )
149+10:32 lit ~zod
150+10:36 tight glyph )
151+10:37 NEWLINE
tests/golden/types-prelude-lead-late/tree.txtnew file+83
@@ -0,0 +1,83 @@
1+(module
2+ (value 1:1 text-ship
3+ (group 1:14
4+ (call 1:15
5+ (group 1:15
6+ (call 1:16 (wing 1:16 lead) (str 1:21 "hi")))
7+ (lit 1:27 ~zod))))
8+ (value 2:1 ship-text
9+ (group 2:14
10+ (call 2:15
11+ (group 2:15
12+ (call 2:16 (wing 2:16 late) (str 2:21 "hi")))
13+ (lit 2:27 ~zod))))
14+ (value 3:1 first-fn
15+ (group 3:13
16+ (call 3:14 (wing 3:14 lead) (str 3:19 "hi"))))
17+ (value 4:1 generic-lead
18+ (gate 4:17
19+ (cell 4:20
20+ (face 4:21 x (tvar 4:23 A))
21+ (face 4:25 y (tvar 4:27 B)))
22+ (group 4:30
23+ (call 4:31
24+ (group 4:31
25+ (call 4:32 (wing 4:32 lead) (wing 4:37 x)))
26+ (wing 4:40 y)))))
27+ (value 5:1 generic-late
28+ (gate 5:17
29+ (cell 5:20
30+ (face 5:21 x (tvar 5:23 A))
31+ (face 5:25 y (tvar 5:27 B)))
32+ (group 5:30
33+ (call 5:31
34+ (group 5:31
35+ (call 5:32 (wing 5:32 late) (wing 5:37 x)))
36+ (wing 5:40 y)))))
37+ (value 6:1 generic-gate
38+ (gate 6:17
39+ (cell 6:20
40+ (face 6:21 f
41+ (fn 6:23 (tvar 6:26 A) (tvar 6:28 B)))
42+ (face 6:31 x (tvar 6:33 C)))
43+ (group 6:36
44+ (call 6:37
45+ (group 6:37
46+ (call 6:38 (wing 6:38 lead) (wing 6:43 f)))
47+ (wing 6:46 x)))))
48+ (value 7:1 reversed-gate
49+ (gate 7:18
50+ (cell 7:21
51+ (face 7:22 f
52+ (fn 7:24 (tvar 7:27 A) (tvar 7:29 B)))
53+ (face 7:32 x (tvar 7:34 C)))
54+ (group 7:37
55+ (call 7:38
56+ (group 7:38
57+ (call 7:39 (wing 7:39 late) (wing 7:44 f)))
58+ (wing 7:47 x)))))
59+ (value 8:1 null-lead
60+ (group 8:14
61+ (call 8:15
62+ (group 8:15
63+ (call 8:16
64+ (wing 8:16 lead)
65+ (group 8:21
66+ (cast 8:22
67+ (apply 8:25 unit (aura 8:31 @t))
68+ (lit 8:35 ~)))))
69+ (str 8:39 "tail"))))
70+ (value 9:1 unresolved
71+ (group 9:15
72+ (call 9:16
73+ (group 9:16
74+ (call 9:17 (wing 9:17 lead) (lit 9:22 ~)))
75+ (str 9:25 "tail"))))
76+ (value 10:1 bad
77+ (cast 10:8
78+ (cell 10:11 (aura 10:12 @p) (aura 10:15 @t))
79+ (group 10:19
80+ (call 10:20
81+ (group 10:20
82+ (call 10:21 (wing 10:21 lead) (str 10:26 "hi")))
83+ (lit 10:32 ~zod))))))
tests/golden/types-prelude-lead-late/types.txtnew file+17
@@ -0,0 +1,17 @@
1+partial inference; module not checked
2+++ text-ship: [@t @p]
3+++ ship-text: [@p @t]
4+++ first-fn: $-(A [@t A])
5+++ generic-lead: $-([x=A y=B] [A B])
6+++ generic-late: $-([x=A y=B] [B A])
7+++ generic-gate: $-([f=$-(A B) x=C] [$-(A B) C])
8+++ reversed-gate: $-([f=$-(A B) x=C] [C $-(A B)])
9+++ null-lead: [(unit @t) @t]
10+++ unresolved: `~` needs context in partial inference
11+++ bad: cast mold and expression type do not unify
12+/tests/golden/types-prelude-lead-late/source.jibb:10:11: cast mold has type [@p @t]
13+++ bad ^- [@p @t] ((lead "hi") ~zod)
14+ ^
15+/tests/golden/types-prelude-lead-late/source.jibb:10:19: expression has type [@t @p]
16+++ bad ^- [@p @t] ((lead "hi") ~zod)
17+ ^
tests/golden/types-prelude-list-alias/source.jibb+1−1
@@ -2,6 +2,6 @@
22++ path-id |= x=path x
33++ tape-id |= x=tape x
44++ spot-id |= x=spot x
5−++ text |= x=(bag @t) x
5+++ text-value |= x=(bag @t) x
66++ ship |= x=(bag @p) x
77++ wrong ^- (bag @t) ~[~zod]
tests/golden/types-prelude-list-alias/tokens.txt+9−9
@@ -34,15 +34,15 @@
34344:22 name x
35355:1 NEWLINE
36365:1 glyph ++
37−5:4 name text
38−5:9 glyph |=
39−5:12 name x
40−5:13 tight glyph =
41−5:14 tight glyph (
42−5:15 tight name bag
43−5:19 aura @t
44−5:21 tight glyph )
45−5:23 name x
37+5:4 name text-value
38+5:15 glyph |=
39+5:18 name x
40+5:19 tight glyph =
41+5:20 tight glyph (
42+5:21 tight name bag
43+5:25 aura @t
44+5:27 tight glyph )
45+5:29 name x
46466:1 NEWLINE
47476:1 glyph ++
48486:4 name ship
tests/golden/types-prelude-list-alias/tree.txt+5−5
@@ -14,11 +14,11 @@
1414 (gate 4:12
1515 (face 4:15 x (ref 4:17 spot))
1616 (wing 4:22 x)))
17− (value 5:1 text
18− (gate 5:9
19− (face 5:12 x
20− (apply 5:14 bag (aura 5:19 @t)))
21− (wing 5:23 x)))
17+ (value 5:1 text-value
18+ (gate 5:15
19+ (face 5:18 x
20+ (apply 5:20 bag (aura 5:25 @t)))
21+ (wing 5:29 x)))
2222 (value 6:1 ship
2323 (gate 6:9
2424 (face 6:12 x
tests/golden/types-prelude-list-alias/types.txt+1−1
@@ -3,7 +3,7 @@ partial inference; module not checked
33++ path-id: $-((list @ta) (list @ta))
44++ tape-id: $-((list @tD) (list @tD))
55++ spot-id: $-([p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]] [p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]])
6−++ text: $-((list @t) (list @t))
6+++ text-value: $-((list @t) (list @t))
77++ ship: $-((list @p) (list @p))
88++ wrong: list item does not fit its expected type
99/tests/golden/types-prelude-list-alias/source.jibb:7:13: expected item has type @t
tests/golden/types-prelude-succ/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Prelude: “Hoon's standard library regrouped, written in Jibb”; Decisions, Loobean arithmetic: “Arithmetic rejects loobean operands”.
2+tests: The source-backed successor preserves a shared atom aura, accepts decimal and hexadecimal atoms, infers a generic arithmetic constraint and rejects a loobean. This is a partial inference report; Jibb execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-succ/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-succ/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+++ n (succ 1)
2+++ hx (succ 0x1f)
3+++ generic |= x=A (succ x)
4+++ bad (succ %.y)
tests/golden/types-prelude-succ/tokens.txtnew file+32
@@ -0,0 +1,32 @@
1+1:1 glyph ++
2+1:4 name n
3+1:6 glyph (
4+1:7 tight name succ
5+1:12 lit 1
6+1:13 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name hx
10+2:7 glyph (
11+2:8 tight name succ
12+2:13 lit 0x1f
13+2:17 tight glyph )
14+3:1 NEWLINE
15+3:1 glyph ++
16+3:4 name generic
17+3:12 glyph |=
18+3:15 name x
19+3:16 tight glyph =
20+3:17 tight tvar A
21+3:19 glyph (
22+3:20 tight name succ
23+3:25 name x
24+3:26 tight glyph )
25+4:1 NEWLINE
26+4:1 glyph ++
27+4:4 name bad
28+4:8 glyph (
29+4:9 tight name succ
30+4:14 lit %.y
31+4:17 tight glyph )
32+4:18 NEWLINE
tests/golden/types-prelude-succ/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (value 1:1 n
3+ (group 1:6
4+ (call 1:7 (wing 1:7 succ) (lit 1:12 1))))
5+ (value 2:1 hx
6+ (group 2:7
7+ (call 2:8 (wing 2:8 succ) (lit 2:13 0x1f))))
8+ (value 3:1 generic
9+ (gate 3:12
10+ (face 3:15 x (tvar 3:17 A))
11+ (group 3:19
12+ (call 3:20 (wing 3:20 succ) (wing 3:25 x)))))
13+ (value 4:1 bad
14+ (group 4:8
15+ (call 4:9 (wing 4:9 succ) (lit 4:14 %.y)))))
tests/golden/types-prelude-succ/types.txtnew file+11
@@ -0,0 +1,11 @@
1+partial inference; module not checked
2+++ n: @ud
3+++ hx: @ux
4+++ generic: $-(A A) where A is an atom other than ?
5+++ bad: call's sample and argument types do not unify
6+/tests/golden/types-prelude-succ/source.jibb:4:9: called gate has type $-(A A) where A is an atom other than ?
7+++ bad (succ %.y)
8+ ^
9+/tests/golden/types-prelude-succ/source.jibb:4:14: argument has type ?
10+++ bad (succ %.y)
11+ ^
tests/golden/types-prelude-text/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Text ... crip, trip, cass, cuss, trim, tufa, tuba"; the target ship's Hoon 135 definitions give trip and tuba their tape and UTF-32 types.
2+tests: Source-backed trip and tuba wrappers preserve cord, tape and UTF-32 list types through composition and generic list length. Empty input infers; non-cord and non-tape arguments fail. Primitive lowering and execution remain unfinished. The module report is partial.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-text/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-text/source.jibbnew file+8
@@ -0,0 +1,8 @@
1+++ to-tape (trip "abc")
2+++ to-codepoints (tuba (trip "abc"))
3+++ empty-codepoints (tuba ~)
4+++ count-codepoints |= value=@t
5+ (lent (tuba (trip value)))
6+++ bad-trip (trip ~zod)
7+++ bad-tuba (tuba "abc")
8+++ bad-tuba-items (tuba ~[~zod])
tests/golden/types-prelude-text/tokens.txtnew file+66
@@ -0,0 +1,66 @@
1+1:1 glyph ++
2+1:4 name to-tape
3+1:12 glyph (
4+1:13 tight name trip
5+1:18 str "abc"
6+1:23 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name to-codepoints
10+2:18 glyph (
11+2:19 tight name tuba
12+2:24 glyph (
13+2:25 tight name trip
14+2:30 str "abc"
15+2:35 tight glyph )
16+2:36 tight glyph )
17+3:1 NEWLINE
18+3:1 glyph ++
19+3:4 name empty-codepoints
20+3:21 glyph (
21+3:22 tight name tuba
22+3:27 lit ~
23+3:28 tight glyph )
24+4:1 NEWLINE
25+4:1 glyph ++
26+4:4 name count-codepoints
27+4:21 glyph |=
28+4:24 name value
29+4:29 tight glyph =
30+4:30 tight aura @t
31+5:3 INDENT
32+5:3 glyph (
33+5:4 tight name lent
34+5:9 glyph (
35+5:10 tight name tuba
36+5:15 glyph (
37+5:16 tight name trip
38+5:21 name value
39+5:26 tight glyph )
40+5:27 tight glyph )
41+5:28 tight glyph )
42+6:1 DEDENT
43+6:1 NEWLINE
44+6:1 glyph ++
45+6:4 name bad-trip
46+6:13 glyph (
47+6:14 tight name trip
48+6:19 lit ~zod
49+6:23 tight glyph )
50+7:1 NEWLINE
51+7:1 glyph ++
52+7:4 name bad-tuba
53+7:13 glyph (
54+7:14 tight name tuba
55+7:19 str "abc"
56+7:24 tight glyph )
57+8:1 NEWLINE
58+8:1 glyph ++
59+8:4 name bad-tuba-items
60+8:19 glyph (
61+8:20 tight name tuba
62+8:25 glyph ~[
63+8:27 tight lit ~zod
64+8:31 tight glyph ]
65+8:32 tight glyph )
66+8:33 NEWLINE
tests/golden/types-prelude-text/tree.txtnew file+36
@@ -0,0 +1,36 @@
1+(module
2+ (value 1:1 to-tape
3+ (group 1:12
4+ (call 1:13 (wing 1:13 trip) (str 1:18 "abc"))))
5+ (value 2:1 to-codepoints
6+ (group 2:18
7+ (call 2:19
8+ (wing 2:19 tuba)
9+ (group 2:24
10+ (call 2:25 (wing 2:25 trip) (str 2:30 "abc"))))))
11+ (value 3:1 empty-codepoints
12+ (group 3:21
13+ (call 3:22 (wing 3:22 tuba) (lit 3:27 ~))))
14+ (value 4:1 count-codepoints
15+ (gate 4:21
16+ (face 4:24 value (aura 4:30 @t))
17+ (body 5:3
18+ (group 5:3
19+ (call 5:4
20+ (wing 5:4 lent)
21+ (group 5:9
22+ (call 5:10
23+ (wing 5:10 tuba)
24+ (group 5:15
25+ (call 5:16 (wing 5:16 trip) (wing 5:21 value))))))))))
26+ (value 6:1 bad-trip
27+ (group 6:13
28+ (call 6:14 (wing 6:14 trip) (lit 6:19 ~zod))))
29+ (value 7:1 bad-tuba
30+ (group 7:13
31+ (call 7:14 (wing 7:14 tuba) (str 7:19 "abc"))))
32+ (value 8:1 bad-tuba-items
33+ (group 8:19
34+ (call 8:20
35+ (wing 8:20 tuba)
36+ (list 8:25 (lit 8:27 ~zod))))))
tests/golden/types-prelude-text/types.txtnew file+26
@@ -0,0 +1,26 @@
1+partial inference; module not checked
2+++ to-tape: (list @tD)
3+++ to-codepoints: (list @c)
4+++ empty-codepoints: (list @c)
5+++ count-codepoints: $-(@t @ud)
6+++ bad-trip: call's sample and argument types do not unify
7+/tests/golden/types-prelude-text/source.jibb:6:14: called gate has type $-(@t (list @tD))
8+++ bad-trip (trip ~zod)
9+ ^
10+/tests/golden/types-prelude-text/source.jibb:6:19: argument has type @p
11+++ bad-trip (trip ~zod)
12+ ^
13+++ bad-tuba: call's sample and argument types do not unify
14+/tests/golden/types-prelude-text/source.jibb:7:14: called gate has type $-((list @tD) (list @c))
15+++ bad-tuba (tuba "abc")
16+ ^
17+/tests/golden/types-prelude-text/source.jibb:7:19: argument has type @t
18+++ bad-tuba (tuba "abc")
19+ ^
20+++ bad-tuba-items: list item does not fit its expected type
21+/tests/golden/types-prelude-text/source.jibb:8:20: expected item has type @tD
22+++ bad-tuba-items (tuba ~[~zod])
23+ ^
24+/tests/golden/types-prelude-text/source.jibb:8:27: list item has type @p
25+++ bad-tuba-items (tuba ~[~zod])
26+ ^
tests/golden/types-prelude-ui/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude, The Elm architecture on Urbit, and Layout and styling.
2+tests: Exact source-backed UI/program/page constructor schemes; static and message-bearing composition; concrete islands and pages; invalid attributes, malformed keyed/table inputs, child-message mismatch, and mismatched island data. Nested element payloads are erased only in the nonrecursive runtime mold, not in public constructor signatures.
3+expect: parses
4+expect-types: supported declarations infer exact types and invalid compositions report errors; the child-message mismatch fails closed as an unsupported constraint. No raw-constructor encapsulation, duplicate-attribute check, rendering, navigation, storage, or execution is claimed.
tests/golden/types-prelude-ui/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-ui/source.jibbnew file+77
@@ -0,0 +1,77 @@
1++$ msg
2+ %save
3+ %toggle
4+ [%edited value=@t]
5++$ model [count=@ud]
6+
7+++ row-scheme row
8+++ column-scheme column
9+++ wrap-scheme wrap
10+++ stack-scheme stack
11+++ el-scheme el
12+++ para-scheme para
13+++ text-scheme text
14+++ heading-scheme heading
15+++ each-scheme each
16+++ table-scheme table
17+++ image-scheme image
18+++ image-unsafe-scheme image-unsafe
19+++ link-scheme link
20+++ link-unsafe-scheme link-unsafe
21+++ button-scheme button
22+++ toggle-scheme toggle
23+++ field-scheme field
24+++ form-scheme form
25+++ island-scheme island
26+++ program-scheme program
27+++ page-scheme page
28+
29+++ static-text ^- (element !!) (text "hello")
30+++ static-ui ^- (element !!)
31+ column ~[pad+%s1 gap+%s2 width+[%fill 1] align+%center role+%body tone+%muted] ~[
32+ text "one"
33+ para ~[(text "two")]
34+ heading 2 "heading"
35+++ static-media ^- (element !!)
36+ stack ~[width+[%chars 20]] ~[
37+ image %/images/logo.png "Logo"
38+ link %/home "Home"
39+++ unsafe-media ^- (element !!)
40+ wrap ~[width+%shrink role+%caption tone+%accent] ~[
41+ image-unsafe [url="https://example.com/a.png" width=20 height=10] "Remote"
42+ link-unsafe "/elsewhere" "Elsewhere"
43+++ save-message ^- msg %save
44+++ toggle-message ^- msg %toggle
45+++ save-button ^- (element msg) (button "Save" save-message)
46+++ enabled-toggle ^- (element msg) (toggle %.y "Enabled" toggle-message)
47+++ edit-message |= value=@t ^- msg [%edited value]
48+++ name-field ^- (element msg) (field "Name" "value" edit-message)
49+++ controls ^- (element msg)
50+ (form save-message ~[save-button enabled-toggle name-field])
51+++ keyed |= items=(list [key=@t el=(element msg)])
52+ ^- (element msg) (each items)
53+++ tabular |= rows=(list [key=@ud cells=(list (element msg))])
54+ ^- (element msg)
55+ (table ~[[header="Name" width=[%fill 1] align=%start]] rows)
56+
57+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
58+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
59+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
60+++ malformed-table ^- (element msg)
61+ (table ~[[header="Name" width=%shrink]] ~)
62+++ ship-control ^- (element @p) (button "Ship" ~zod)
63+++ text-row |= kids=(list (element @t)) ^- (element @t) (row ~ kids)
64+++ bad-child (text-row ~[ship-control])
65+
66+++ init |= input=@t ^- model [count=0]
67+++ update |= [message=msg state=model]
68+ ^- [model (list (cmd msg))] [state ~]
69+++ view |= state=model ^- (element msg) (controls)
70+++ subs |= state=model ^- (list (sub msg)) ~
71+++ concrete-program ^- (program @t model msg) (program init update view subs)
72+++ embedded ^- (element !!) (island concrete-program "seed")
73+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
74+
75+++ load |= route=@t ^- (ask model) (pure [count=0])
76+++ page-view |= data=model ^- (element !!) (text "page")
77+++ static-page ^- (page @t model) (page load page-view)
tests/golden/types-prelude-ui/tokens.txtnew file+710
@@ -0,0 +1,710 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %save
5+3:3 NEWLINE
6+3:3 lit %toggle
7+4:3 NEWLINE
8+4:3 glyph [
9+4:4 tight lit %edited
10+4:12 name value
11+4:17 tight glyph =
12+4:18 tight aura @t
13+4:20 tight glyph ]
14+5:1 DEDENT
15+5:1 NEWLINE
16+5:1 glyph +$
17+5:4 name model
18+5:10 glyph [
19+5:11 tight name count
20+5:16 tight glyph =
21+5:17 tight aura @ud
22+5:20 tight glyph ]
23+7:1 NEWLINE
24+7:1 glyph ++
25+7:4 name row-scheme
26+7:15 name row
27+8:1 NEWLINE
28+8:1 glyph ++
29+8:4 name column-scheme
30+8:18 name column
31+9:1 NEWLINE
32+9:1 glyph ++
33+9:4 name wrap-scheme
34+9:16 name wrap
35+10:1 NEWLINE
36+10:1 glyph ++
37+10:4 name stack-scheme
38+10:17 name stack
39+11:1 NEWLINE
40+11:1 glyph ++
41+11:4 name el-scheme
42+11:14 name el
43+12:1 NEWLINE
44+12:1 glyph ++
45+12:4 name para-scheme
46+12:16 name para
47+13:1 NEWLINE
48+13:1 glyph ++
49+13:4 name text-scheme
50+13:16 name text
51+14:1 NEWLINE
52+14:1 glyph ++
53+14:4 name heading-scheme
54+14:19 name heading
55+15:1 NEWLINE
56+15:1 glyph ++
57+15:4 name each-scheme
58+15:16 name each
59+16:1 NEWLINE
60+16:1 glyph ++
61+16:4 name table-scheme
62+16:17 name table
63+17:1 NEWLINE
64+17:1 glyph ++
65+17:4 name image-scheme
66+17:17 name image
67+18:1 NEWLINE
68+18:1 glyph ++
69+18:4 name image-unsafe-scheme
70+18:24 name image-unsafe
71+19:1 NEWLINE
72+19:1 glyph ++
73+19:4 name link-scheme
74+19:16 name link
75+20:1 NEWLINE
76+20:1 glyph ++
77+20:4 name link-unsafe-scheme
78+20:23 name link-unsafe
79+21:1 NEWLINE
80+21:1 glyph ++
81+21:4 name button-scheme
82+21:18 name button
83+22:1 NEWLINE
84+22:1 glyph ++
85+22:4 name toggle-scheme
86+22:18 name toggle
87+23:1 NEWLINE
88+23:1 glyph ++
89+23:4 name field-scheme
90+23:17 name field
91+24:1 NEWLINE
92+24:1 glyph ++
93+24:4 name form-scheme
94+24:16 name form
95+25:1 NEWLINE
96+25:1 glyph ++
97+25:4 name island-scheme
98+25:18 name island
99+26:1 NEWLINE
100+26:1 glyph ++
101+26:4 name program-scheme
102+26:19 name program
103+27:1 NEWLINE
104+27:1 glyph ++
105+27:4 name page-scheme
106+27:16 name page
107+29:1 NEWLINE
108+29:1 glyph ++
109+29:4 name static-text
110+29:16 glyph ^-
111+29:19 glyph (
112+29:20 tight name element
113+29:28 glyph !!
114+29:30 tight glyph )
115+29:32 glyph (
116+29:33 tight name text
117+29:38 str "hello"
118+29:45 tight glyph )
119+30:1 NEWLINE
120+30:1 glyph ++
121+30:4 name static-ui
122+30:14 glyph ^-
123+30:17 glyph (
124+30:18 tight name element
125+30:26 glyph !!
126+30:28 tight glyph )
127+31:3 INDENT
128+31:3 name column
129+31:10 glyph ~[
130+31:12 tight name pad
131+31:15 tight glyph +
132+31:16 tight lit %s1
133+31:20 name gap
134+31:23 tight glyph +
135+31:24 tight lit %s2
136+31:28 name width
137+31:33 tight glyph +
138+31:34 tight glyph [
139+31:35 tight lit %fill
140+31:41 lit 1
141+31:42 tight glyph ]
142+31:44 name align
143+31:49 tight glyph +
144+31:50 tight lit %center
145+31:58 name role
146+31:62 tight glyph +
147+31:63 tight lit %body
148+31:69 name tone
149+31:73 tight glyph +
150+31:74 tight lit %muted
151+31:80 tight glyph ]
152+31:82 glyph ~[
153+32:5 INDENT
154+32:5 name text
155+32:10 str "one"
156+33:5 NEWLINE
157+33:5 name para
158+33:10 glyph ~[
159+33:12 tight glyph (
160+33:13 tight name text
161+33:18 str "two"
162+33:23 tight glyph )
163+33:24 tight glyph ]
164+34:5 NEWLINE
165+34:5 name heading
166+34:13 lit 2
167+34:15 str "heading"
168+35:1 DEDENT
169+35:1 DEDENT
170+35:1 NEWLINE
171+35:1 glyph ++
172+35:4 name static-media
173+35:17 glyph ^-
174+35:20 glyph (
175+35:21 tight name element
176+35:29 glyph !!
177+35:31 tight glyph )
178+36:3 INDENT
179+36:3 name stack
180+36:9 glyph ~[
181+36:11 tight name width
182+36:16 tight glyph +
183+36:17 tight glyph [
184+36:18 tight lit %chars
185+36:25 lit 20
186+36:27 tight glyph ]
187+36:28 tight glyph ]
188+36:30 glyph ~[
189+37:5 INDENT
190+37:5 name image
191+37:11 glyph %/
192+37:13 tight knot images
193+37:19 tight glyph /
194+37:20 tight knot logo.png
195+37:29 str "Logo"
196+38:5 NEWLINE
197+38:5 name link
198+38:10 glyph %/
199+38:12 tight knot home
200+38:17 str "Home"
201+39:1 DEDENT
202+39:1 DEDENT
203+39:1 NEWLINE
204+39:1 glyph ++
205+39:4 name unsafe-media
206+39:17 glyph ^-
207+39:20 glyph (
208+39:21 tight name element
209+39:29 glyph !!
210+39:31 tight glyph )
211+40:3 INDENT
212+40:3 name wrap
213+40:8 glyph ~[
214+40:10 tight name width
215+40:15 tight glyph +
216+40:16 tight lit %shrink
217+40:24 name role
218+40:28 tight glyph +
219+40:29 tight lit %caption
220+40:38 name tone
221+40:42 tight glyph +
222+40:43 tight lit %accent
223+40:50 tight glyph ]
224+40:52 glyph ~[
225+41:5 INDENT
226+41:5 name image-unsafe
227+41:18 glyph [
228+41:19 tight name url
229+41:22 tight glyph =
230+41:23 tight str "https://example.com/a.png"
231+41:51 name width
232+41:56 tight glyph =
233+41:57 tight lit 20
234+41:60 name height
235+41:66 tight glyph =
236+41:67 tight lit 10
237+41:69 tight glyph ]
238+41:71 str "Remote"
239+42:5 NEWLINE
240+42:5 name link-unsafe
241+42:17 str "/elsewhere"
242+42:30 str "Elsewhere"
243+43:1 DEDENT
244+43:1 DEDENT
245+43:1 NEWLINE
246+43:1 glyph ++
247+43:4 name save-message
248+43:17 glyph ^-
249+43:20 name msg
250+43:24 lit %save
251+44:1 NEWLINE
252+44:1 glyph ++
253+44:4 name toggle-message
254+44:19 glyph ^-
255+44:22 name msg
256+44:26 lit %toggle
257+45:1 NEWLINE
258+45:1 glyph ++
259+45:4 name save-button
260+45:16 glyph ^-
261+45:19 glyph (
262+45:20 tight name element
263+45:28 name msg
264+45:31 tight glyph )
265+45:33 glyph (
266+45:34 tight name button
267+45:41 str "Save"
268+45:48 name save-message
269+45:60 tight glyph )
270+46:1 NEWLINE
271+46:1 glyph ++
272+46:4 name enabled-toggle
273+46:19 glyph ^-
274+46:22 glyph (
275+46:23 tight name element
276+46:31 name msg
277+46:34 tight glyph )
278+46:36 glyph (
279+46:37 tight name toggle
280+46:44 lit %.y
281+46:48 str "Enabled"
282+46:58 name toggle-message
283+46:72 tight glyph )
284+47:1 NEWLINE
285+47:1 glyph ++
286+47:4 name edit-message
287+47:17 glyph |=
288+47:20 name value
289+47:25 tight glyph =
290+47:26 tight aura @t
291+47:29 glyph ^-
292+47:32 name msg
293+47:36 glyph [
294+47:37 tight lit %edited
295+47:45 name value
296+47:50 tight glyph ]
297+48:1 NEWLINE
298+48:1 glyph ++
299+48:4 name name-field
300+48:15 glyph ^-
301+48:18 glyph (
302+48:19 tight name element
303+48:27 name msg
304+48:30 tight glyph )
305+48:32 glyph (
306+48:33 tight name field
307+48:39 str "Name"
308+48:46 str "value"
309+48:54 name edit-message
310+48:66 tight glyph )
311+49:1 NEWLINE
312+49:1 glyph ++
313+49:4 name controls
314+49:13 glyph ^-
315+49:16 glyph (
316+49:17 tight name element
317+49:25 name msg
318+49:28 tight glyph )
319+50:3 INDENT
320+50:3 glyph (
321+50:4 tight name form
322+50:9 name save-message
323+50:22 glyph ~[
324+50:24 tight name save-button
325+50:36 name enabled-toggle
326+50:51 name name-field
327+50:61 tight glyph ]
328+50:62 tight glyph )
329+51:1 DEDENT
330+51:1 NEWLINE
331+51:1 glyph ++
332+51:4 name keyed
333+51:10 glyph |=
334+51:13 name items
335+51:18 tight glyph =
336+51:19 tight glyph (
337+51:20 tight name list
338+51:25 glyph [
339+51:26 tight name key
340+51:29 tight glyph =
341+51:30 tight aura @t
342+51:33 name el
343+51:35 tight glyph =
344+51:36 tight glyph (
345+51:37 tight name element
346+51:45 name msg
347+51:48 tight glyph )
348+51:49 tight glyph ]
349+51:50 tight glyph )
350+52:3 INDENT
351+52:3 glyph ^-
352+52:6 glyph (
353+52:7 tight name element
354+52:15 name msg
355+52:18 tight glyph )
356+52:20 glyph (
357+52:21 tight name each
358+52:26 name items
359+52:31 tight glyph )
360+53:1 DEDENT
361+53:1 NEWLINE
362+53:1 glyph ++
363+53:4 name tabular
364+53:12 glyph |=
365+53:15 name rows
366+53:19 tight glyph =
367+53:20 tight glyph (
368+53:21 tight name list
369+53:26 glyph [
370+53:27 tight name key
371+53:30 tight glyph =
372+53:31 tight aura @ud
373+53:35 name cells
374+53:40 tight glyph =
375+53:41 tight glyph (
376+53:42 tight name list
377+53:47 glyph (
378+53:48 tight name element
379+53:56 name msg
380+53:59 tight glyph )
381+53:60 tight glyph )
382+53:61 tight glyph ]
383+53:62 tight glyph )
384+54:3 INDENT
385+54:3 glyph ^-
386+54:6 glyph (
387+54:7 tight name element
388+54:15 name msg
389+54:18 tight glyph )
390+55:5 INDENT
391+55:5 glyph (
392+55:6 tight name table
393+55:12 glyph ~[
394+55:14 tight glyph [
395+55:15 tight name header
396+55:21 tight glyph =
397+55:22 tight str "Name"
398+55:29 name width
399+55:34 tight glyph =
400+55:35 tight glyph [
401+55:36 tight lit %fill
402+55:42 lit 1
403+55:43 tight glyph ]
404+55:45 name align
405+55:50 tight glyph =
406+55:51 tight lit %start
407+55:57 tight glyph ]
408+55:58 tight glyph ]
409+55:60 name rows
410+55:64 tight glyph )
411+57:1 DEDENT
412+57:1 DEDENT
413+57:1 NEWLINE
414+57:1 glyph ++
415+57:4 name bad-pad
416+57:12 glyph ^-
417+57:15 glyph (
418+57:16 tight name element
419+57:24 glyph !!
420+57:26 tight glyph )
421+57:28 glyph (
422+57:29 tight name row
423+57:33 glyph ~[
424+57:35 tight name pad
425+57:38 tight glyph +
426+57:39 tight lit %s4
427+57:42 tight glyph ]
428+57:44 lit ~
429+57:45 tight glyph )
430+58:1 NEWLINE
431+58:1 glyph ++
432+58:4 name bad-width
433+58:14 glyph ^-
434+58:17 glyph (
435+58:18 tight name element
436+58:26 glyph !!
437+58:28 tight glyph )
438+58:30 glyph (
439+58:31 tight name row
440+58:35 glyph ~[
441+58:37 tight name width
442+58:42 tight glyph +
443+58:43 tight glyph [
444+58:44 tight lit %chars
445+58:51 str "wide"
446+58:57 tight glyph ]
447+58:58 tight glyph ]
448+58:60 lit ~
449+58:61 tight glyph )
450+59:1 NEWLINE
451+59:1 glyph ++
452+59:4 name malformed-each
453+59:19 glyph ^-
454+59:22 glyph (
455+59:23 tight name element
456+59:31 name msg
457+59:34 tight glyph )
458+59:36 glyph (
459+59:37 tight name each
460+59:42 glyph ~[
461+59:44 tight glyph [
462+59:45 tight name key
463+59:48 tight glyph =
464+59:49 tight str "row"
465+59:55 name kid
466+59:58 tight glyph =
467+59:59 tight glyph (
468+59:60 tight name text
469+59:65 str "child"
470+59:72 tight glyph )
471+59:73 tight glyph ]
472+59:74 tight glyph ]
473+59:75 tight glyph )
474+60:1 NEWLINE
475+60:1 glyph ++
476+60:4 name malformed-table
477+60:20 glyph ^-
478+60:23 glyph (
479+60:24 tight name element
480+60:32 name msg
481+60:35 tight glyph )
482+61:3 INDENT
483+61:3 glyph (
484+61:4 tight name table
485+61:10 glyph ~[
486+61:12 tight glyph [
487+61:13 tight name header
488+61:19 tight glyph =
489+61:20 tight str "Name"
490+61:27 name width
491+61:32 tight glyph =
492+61:33 tight lit %shrink
493+61:40 tight glyph ]
494+61:41 tight glyph ]
495+61:43 lit ~
496+61:44 tight glyph )
497+62:1 DEDENT
498+62:1 NEWLINE
499+62:1 glyph ++
500+62:4 name ship-control
501+62:17 glyph ^-
502+62:20 glyph (
503+62:21 tight name element
504+62:29 aura @p
505+62:31 tight glyph )
506+62:33 glyph (
507+62:34 tight name button
508+62:41 str "Ship"
509+62:48 lit ~zod
510+62:52 tight glyph )
511+63:1 NEWLINE
512+63:1 glyph ++
513+63:4 name text-row
514+63:13 glyph |=
515+63:16 name kids
516+63:20 tight glyph =
517+63:21 tight glyph (
518+63:22 tight name list
519+63:27 glyph (
520+63:28 tight name element
521+63:36 aura @t
522+63:38 tight glyph )
523+63:39 tight glyph )
524+63:41 glyph ^-
525+63:44 glyph (
526+63:45 tight name element
527+63:53 aura @t
528+63:55 tight glyph )
529+63:57 glyph (
530+63:58 tight name row
531+63:62 lit ~
532+63:64 name kids
533+63:68 tight glyph )
534+64:1 NEWLINE
535+64:1 glyph ++
536+64:4 name bad-child
537+64:14 glyph (
538+64:15 tight name text-row
539+64:24 glyph ~[
540+64:26 tight name ship-control
541+64:38 tight glyph ]
542+64:39 tight glyph )
543+66:1 NEWLINE
544+66:1 glyph ++
545+66:4 name init
546+66:9 glyph |=
547+66:12 name input
548+66:17 tight glyph =
549+66:18 tight aura @t
550+66:21 glyph ^-
551+66:24 name model
552+66:30 glyph [
553+66:31 tight name count
554+66:36 tight glyph =
555+66:37 tight lit 0
556+66:38 tight glyph ]
557+67:1 NEWLINE
558+67:1 glyph ++
559+67:4 name update
560+67:11 glyph |=
561+67:14 glyph [
562+67:15 tight name message
563+67:22 tight glyph =
564+67:23 tight name msg
565+67:27 name state
566+67:32 tight glyph =
567+67:33 tight name model
568+67:38 tight glyph ]
569+68:3 INDENT
570+68:3 glyph ^-
571+68:6 glyph [
572+68:7 tight name model
573+68:13 glyph (
574+68:14 tight name list
575+68:19 glyph (
576+68:20 tight name cmd
577+68:24 name msg
578+68:27 tight glyph )
579+68:28 tight glyph )
580+68:29 tight glyph ]
581+68:31 glyph [
582+68:32 tight name state
583+68:38 lit ~
584+68:39 tight glyph ]
585+69:1 DEDENT
586+69:1 NEWLINE
587+69:1 glyph ++
588+69:4 name view
589+69:9 glyph |=
590+69:12 name state
591+69:17 tight glyph =
592+69:18 tight name model
593+69:24 glyph ^-
594+69:27 glyph (
595+69:28 tight name element
596+69:36 name msg
597+69:39 tight glyph )
598+69:41 glyph (
599+69:42 tight name controls
600+69:50 tight glyph )
601+70:1 NEWLINE
602+70:1 glyph ++
603+70:4 name subs
604+70:9 glyph |=
605+70:12 name state
606+70:17 tight glyph =
607+70:18 tight name model
608+70:24 glyph ^-
609+70:27 glyph (
610+70:28 tight name list
611+70:33 glyph (
612+70:34 tight name sub
613+70:38 name msg
614+70:41 tight glyph )
615+70:42 tight glyph )
616+70:44 lit ~
617+71:1 NEWLINE
618+71:1 glyph ++
619+71:4 name concrete-program
620+71:21 glyph ^-
621+71:24 glyph (
622+71:25 tight name program
623+71:33 aura @t
624+71:36 name model
625+71:42 name msg
626+71:45 tight glyph )
627+71:47 glyph (
628+71:48 tight name program
629+71:56 name init
630+71:61 name update
631+71:68 name view
632+71:73 name subs
633+71:77 tight glyph )
634+72:1 NEWLINE
635+72:1 glyph ++
636+72:4 name embedded
637+72:13 glyph ^-
638+72:16 glyph (
639+72:17 tight name element
640+72:25 glyph !!
641+72:27 tight glyph )
642+72:29 glyph (
643+72:30 tight name island
644+72:37 name concrete-program
645+72:54 str "seed"
646+72:60 tight glyph )
647+73:1 NEWLINE
648+73:1 glyph ++
649+73:4 name mismatched-island-data
650+73:27 glyph ^-
651+73:30 glyph (
652+73:31 tight name element
653+73:39 glyph !!
654+73:41 tight glyph )
655+73:43 glyph (
656+73:44 tight name island
657+73:51 name concrete-program
658+73:68 lit ~zod
659+73:72 tight glyph )
660+75:1 NEWLINE
661+75:1 glyph ++
662+75:4 name load
663+75:9 glyph |=
664+75:12 name route
665+75:17 tight glyph =
666+75:18 tight aura @t
667+75:21 glyph ^-
668+75:24 glyph (
669+75:25 tight name ask
670+75:29 name model
671+75:34 tight glyph )
672+75:36 glyph (
673+75:37 tight name pure
674+75:42 glyph [
675+75:43 tight name count
676+75:48 tight glyph =
677+75:49 tight lit 0
678+75:50 tight glyph ]
679+75:51 tight glyph )
680+76:1 NEWLINE
681+76:1 glyph ++
682+76:4 name page-view
683+76:14 glyph |=
684+76:17 name data
685+76:21 tight glyph =
686+76:22 tight name model
687+76:28 glyph ^-
688+76:31 glyph (
689+76:32 tight name element
690+76:40 glyph !!
691+76:42 tight glyph )
692+76:44 glyph (
693+76:45 tight name text
694+76:50 str "page"
695+76:56 tight glyph )
696+77:1 NEWLINE
697+77:1 glyph ++
698+77:4 name static-page
699+77:16 glyph ^-
700+77:19 glyph (
701+77:20 tight name page
702+77:25 aura @t
703+77:28 name model
704+77:33 tight glyph )
705+77:35 glyph (
706+77:36 tight name page
707+77:41 name load
708+77:46 name page-view
709+77:55 tight glyph )
710+77:56 NEWLINE
tests/golden/types-prelude-ui/tree.txtnew file+291
@@ -0,0 +1,291 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (const 2:3 %save)
5+ (const 3:3 %toggle)
6+ (cell 4:3
7+ (const 4:4 %edited)
8+ (face 4:12 value (aura 4:18 @t)))))
9+ (mold 5:1 model
10+ (cell 5:10
11+ (face 5:11 count (aura 5:17 @ud))))
12+ (value 7:1 row-scheme (wing 7:15 row))
13+ (value 8:1 column-scheme (wing 8:18 column))
14+ (value 9:1 wrap-scheme (wing 9:16 wrap))
15+ (value 10:1 stack-scheme (wing 10:17 stack))
16+ (value 11:1 el-scheme (wing 11:14 el))
17+ (value 12:1 para-scheme (wing 12:16 para))
18+ (value 13:1 text-scheme (wing 13:16 text))
19+ (value 14:1 heading-scheme (wing 14:19 heading))
20+ (value 15:1 each-scheme (wing 15:16 each))
21+ (value 16:1 table-scheme (wing 16:17 table))
22+ (value 17:1 image-scheme (wing 17:17 image))
23+ (value 18:1 image-unsafe-scheme (wing 18:24 image-unsafe))
24+ (value 19:1 link-scheme (wing 19:16 link))
25+ (value 20:1 link-unsafe-scheme (wing 20:23 link-unsafe))
26+ (value 21:1 button-scheme (wing 21:18 button))
27+ (value 22:1 toggle-scheme (wing 22:18 toggle))
28+ (value 23:1 field-scheme (wing 23:17 field))
29+ (value 24:1 form-scheme (wing 24:16 form))
30+ (value 25:1 island-scheme (wing 25:18 island))
31+ (value 26:1 program-scheme (wing 26:19 program))
32+ (value 27:1 page-scheme (wing 27:16 page))
33+ (value 29:1 static-text
34+ (cast 29:16
35+ (apply 29:19 element (void 29:28))
36+ (group 29:32
37+ (call 29:33 (wing 29:33 text) (str 29:38 "hello")))))
38+ (value 30:1 static-ui
39+ (cast 30:14
40+ (apply 30:17 element (void 30:26))
41+ (body 31:3
42+ (call 31:3
43+ (wing 31:3 column)
44+ (list 31:10
45+ (pair 31:12 pad (lit 31:16 %s1))
46+ (pair 31:20 gap (lit 31:24 %s2))
47+ (pair 31:28 width
48+ (tuple 31:34 (lit 31:35 %fill) (lit 31:41 1)))
49+ (pair 31:44 align (lit 31:50 %center))
50+ (pair 31:58 role (lit 31:63 %body))
51+ (pair 31:69 tone (lit 31:74 %muted)))
52+ (list 31:82
53+ (call 32:5 (wing 32:5 text) (str 32:10 "one"))
54+ (call 33:5
55+ (wing 33:5 para)
56+ (list 33:10
57+ (group 33:12
58+ (call 33:13 (wing 33:13 text) (str 33:18 "two")))))
59+ (call 34:5 (wing 34:5 heading) (lit 34:13 2) (str 34:15 "heading")))))))
60+ (value 35:1 static-media
61+ (cast 35:17
62+ (apply 35:20 element (void 35:29))
63+ (body 36:3
64+ (call 36:3
65+ (wing 36:3 stack)
66+ (list 36:9
67+ (pair 36:11 width
68+ (tuple 36:17 (lit 36:18 %chars) (lit 36:25 20))))
69+ (list 36:30
70+ (call 37:5 (wing 37:5 image) (qath 37:11 images logo.png) (str 37:29 "Logo"))
71+ (call 38:5 (wing 38:5 link) (qath 38:10 home) (str 38:17 "Home")))))))
72+ (value 39:1 unsafe-media
73+ (cast 39:17
74+ (apply 39:20 element (void 39:29))
75+ (body 40:3
76+ (call 40:3
77+ (wing 40:3 wrap)
78+ (list 40:8
79+ (pair 40:10 width (lit 40:16 %shrink))
80+ (pair 40:24 role (lit 40:29 %caption))
81+ (pair 40:38 tone (lit 40:43 %accent)))
82+ (list 40:52
83+ (call 41:5
84+ (wing 41:5 image-unsafe)
85+ (tuple 41:18
86+ (face 41:19 url (str 41:23 "https://example.com/a.png"))
87+ (face 41:51 width (lit 41:57 20))
88+ (face 41:60 height (lit 41:67 10)))
89+ (str 41:71 "Remote"))
90+ (call 42:5 (wing 42:5 link-unsafe) (str 42:17 "/elsewhere") (str 42:30 "Elsewhere")))))))
91+ (value 43:1 save-message
92+ (cast 43:17 (ref 43:20 msg) (lit 43:24 %save)))
93+ (value 44:1 toggle-message
94+ (cast 44:19 (ref 44:22 msg) (lit 44:26 %toggle)))
95+ (value 45:1 save-button
96+ (cast 45:16
97+ (apply 45:19 element (ref 45:28 msg))
98+ (group 45:33
99+ (call 45:34 (wing 45:34 button) (str 45:41 "Save") (wing 45:48 save-message)))))
100+ (value 46:1 enabled-toggle
101+ (cast 46:19
102+ (apply 46:22 element (ref 46:31 msg))
103+ (group 46:36
104+ (call 46:37 (wing 46:37 toggle) (lit 46:44 %.y) (str 46:48 "Enabled") (wing 46:58 toggle-message)))))
105+ (value 47:1 edit-message
106+ (gate 47:17
107+ (face 47:20 value (aura 47:26 @t))
108+ (cast 47:29
109+ (ref 47:32 msg)
110+ (tuple 47:36 (lit 47:37 %edited) (wing 47:45 value)))))
111+ (value 48:1 name-field
112+ (cast 48:15
113+ (apply 48:18 element (ref 48:27 msg))
114+ (group 48:32
115+ (call 48:33 (wing 48:33 field) (str 48:39 "Name") (str 48:46 "value") (wing 48:54 edit-message)))))
116+ (value 49:1 controls
117+ (cast 49:13
118+ (apply 49:16 element (ref 49:25 msg))
119+ (body 50:3
120+ (group 50:3
121+ (call 50:4
122+ (wing 50:4 form)
123+ (wing 50:9 save-message)
124+ (list 50:22 (wing 50:24 save-button) (wing 50:36 enabled-toggle) (wing 50:51 name-field)))))))
125+ (value 51:1 keyed
126+ (gate 51:10
127+ (face 51:13 items
128+ (apply 51:19 list
129+ (cell 51:25
130+ (face 51:26 key (aura 51:30 @t))
131+ (face 51:33 el
132+ (apply 51:36 element (ref 51:45 msg))))))
133+ (body 52:3
134+ (cast 52:3
135+ (apply 52:6 element (ref 52:15 msg))
136+ (group 52:20
137+ (call 52:21 (wing 52:21 each) (wing 52:26 items)))))))
138+ (value 53:1 tabular
139+ (gate 53:12
140+ (face 53:15 rows
141+ (apply 53:20 list
142+ (cell 53:26
143+ (face 53:27 key (aura 53:31 @ud))
144+ (face 53:35 cells
145+ (apply 53:41 list
146+ (apply 53:47 element (ref 53:56 msg)))))))
147+ (body 54:3
148+ (cast 54:3
149+ (apply 54:6 element (ref 54:15 msg))
150+ (body 55:5
151+ (group 55:5
152+ (call 55:6
153+ (wing 55:6 table)
154+ (list 55:12
155+ (tuple 55:14
156+ (face 55:15 header (str 55:22 "Name"))
157+ (face 55:29 width
158+ (tuple 55:35 (lit 55:36 %fill) (lit 55:42 1)))
159+ (face 55:45 align (lit 55:51 %start))))
160+ (wing 55:60 rows))))))))
161+ (value 57:1 bad-pad
162+ (cast 57:12
163+ (apply 57:15 element (void 57:24))
164+ (group 57:28
165+ (call 57:29
166+ (wing 57:29 row)
167+ (list 57:33
168+ (pair 57:35 pad (lit 57:39 %s4)))
169+ (lit 57:44 ~)))))
170+ (value 58:1 bad-width
171+ (cast 58:14
172+ (apply 58:17 element (void 58:26))
173+ (group 58:30
174+ (call 58:31
175+ (wing 58:31 row)
176+ (list 58:35
177+ (pair 58:37 width
178+ (tuple 58:43 (lit 58:44 %chars) (str 58:51 "wide"))))
179+ (lit 58:60 ~)))))
180+ (value 59:1 malformed-each
181+ (cast 59:19
182+ (apply 59:22 element (ref 59:31 msg))
183+ (group 59:36
184+ (call 59:37
185+ (wing 59:37 each)
186+ (list 59:42
187+ (tuple 59:44
188+ (face 59:45 key (str 59:49 "row"))
189+ (face 59:55 kid
190+ (group 59:59
191+ (call 59:60 (wing 59:60 text) (str 59:65 "child"))))))))))
192+ (value 60:1 malformed-table
193+ (cast 60:20
194+ (apply 60:23 element (ref 60:32 msg))
195+ (body 61:3
196+ (group 61:3
197+ (call 61:4
198+ (wing 61:4 table)
199+ (list 61:10
200+ (tuple 61:12
201+ (face 61:13 header (str 61:20 "Name"))
202+ (face 61:27 width (lit 61:33 %shrink))))
203+ (lit 61:43 ~))))))
204+ (value 62:1 ship-control
205+ (cast 62:17
206+ (apply 62:20 element (aura 62:29 @p))
207+ (group 62:33
208+ (call 62:34 (wing 62:34 button) (str 62:41 "Ship") (lit 62:48 ~zod)))))
209+ (value 63:1 text-row
210+ (gate 63:13
211+ (face 63:16 kids
212+ (apply 63:21 list
213+ (apply 63:27 element (aura 63:36 @t))))
214+ (cast 63:41
215+ (apply 63:44 element (aura 63:53 @t))
216+ (group 63:57
217+ (call 63:58 (wing 63:58 row) (lit 63:62 ~) (wing 63:64 kids))))))
218+ (value 64:1 bad-child
219+ (group 64:14
220+ (call 64:15
221+ (wing 64:15 text-row)
222+ (list 64:24 (wing 64:26 ship-control)))))
223+ (value 66:1 init
224+ (gate 66:9
225+ (face 66:12 input (aura 66:18 @t))
226+ (cast 66:21
227+ (ref 66:24 model)
228+ (tuple 66:30
229+ (face 66:31 count (lit 66:37 0))))))
230+ (value 67:1 update
231+ (gate 67:11
232+ (cell 67:14
233+ (face 67:15 message (ref 67:23 msg))
234+ (face 67:27 state (ref 67:33 model)))
235+ (body 68:3
236+ (cast 68:3
237+ (cell 68:6
238+ (ref 68:7 model)
239+ (apply 68:13 list
240+ (apply 68:19 cmd (ref 68:24 msg))))
241+ (tuple 68:31 (wing 68:32 state) (lit 68:38 ~))))))
242+ (value 69:1 view
243+ (gate 69:9
244+ (face 69:12 state (ref 69:18 model))
245+ (cast 69:24
246+ (apply 69:27 element (ref 69:36 msg))
247+ (group 69:41 (wing 69:42 controls)))))
248+ (value 70:1 subs
249+ (gate 70:9
250+ (face 70:12 state (ref 70:18 model))
251+ (cast 70:24
252+ (apply 70:27 list
253+ (apply 70:33 sub (ref 70:38 msg)))
254+ (lit 70:44 ~))))
255+ (value 71:1 concrete-program
256+ (cast 71:21
257+ (apply 71:24 program (aura 71:33 @t) (ref 71:36 model) (ref 71:42 msg))
258+ (group 71:47
259+ (call 71:48 (wing 71:48 program) (wing 71:56 init) (wing 71:61 update) (wing 71:68 view) (wing 71:73 subs)))))
260+ (value 72:1 embedded
261+ (cast 72:13
262+ (apply 72:16 element (void 72:25))
263+ (group 72:29
264+ (call 72:30 (wing 72:30 island) (wing 72:37 concrete-program) (str 72:54 "seed")))))
265+ (value 73:1 mismatched-island-data
266+ (cast 73:27
267+ (apply 73:30 element (void 73:39))
268+ (group 73:43
269+ (call 73:44 (wing 73:44 island) (wing 73:51 concrete-program) (lit 73:68 ~zod)))))
270+ (value 75:1 load
271+ (gate 75:9
272+ (face 75:12 route (aura 75:18 @t))
273+ (cast 75:21
274+ (apply 75:24 ask (ref 75:29 model))
275+ (group 75:36
276+ (call 75:37
277+ (wing 75:37 pure)
278+ (tuple 75:42
279+ (face 75:43 count (lit 75:49 0))))))))
280+ (value 76:1 page-view
281+ (gate 76:14
282+ (face 76:17 data (ref 76:22 model))
283+ (cast 76:28
284+ (apply 76:31 element (void 76:40))
285+ (group 76:44
286+ (call 76:45 (wing 76:45 text) (str 76:50 "page"))))))
287+ (value 77:1 static-page
288+ (cast 77:16
289+ (apply 77:19 page (aura 77:25 @t) (ref 77:28 model))
290+ (group 77:35
291+ (call 77:36 (wing 77:36 page) (wing 77:41 load) (wing 77:46 page-view))))))
tests/golden/types-prelude-ui/types.txtnew file+84
@@ -0,0 +1,84 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ model: not checked
4+++ row-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
5+++ column-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
6+++ wrap-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
7+++ stack-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
8+++ el-scheme: $-([attrs=(list attr) kid=(element A)] (element A))
9+++ para-scheme: $-((list (element A)) (element A))
10+++ text-scheme: $-(@t (element A))
11+++ heading-scheme: $-([level=@ud words=@t] (element A))
12+++ each-scheme: $-((list [key=A el=(element B)]) (element B))
13+++ table-scheme: $-([columns=(list [header=@t [width=length align=align]]) rows=(list [key=A cells=(list (element B))])] (element B))
14+++ image-scheme: $-([source=qath description=@t] (element A))
15+++ image-unsafe-scheme: $-([source=[url=@t [width=@ud height=@ud]] description=@t] (element A))
16+++ link-scheme: $-([target=qath label=@t] (element A))
17+++ link-unsafe-scheme: $-([target=@t label=@t] (element A))
18+++ button-scheme: $-([label=@t message=A] (element A))
19+++ toggle-scheme: $-([on=? [label=@t message=A]] (element A))
20+++ field-scheme: $-([label=@t [value=@t reply=$-(@t A)]] (element A))
21+++ form-scheme: $-([message=A kids=(list (element A))] (element A))
22+++ island-scheme: $-([p=[init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] data=A] (element !!))
23+++ program-scheme: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
24+++ page-scheme: $-([load=$-(A (ask B)) view=$-(B (element !!))] [load=$-(A (ask B)) view=$-(B (element !!))])
25+++ static-text: (element !!)
26+++ static-ui: (element !!)
27+++ static-media: (element !!)
28+++ unsafe-media: (element !!)
29+++ save-message: msg
30+++ toggle-message: msg
31+++ save-button: (element msg)
32+++ enabled-toggle: (element msg)
33+++ edit-message: $-(@t msg)
34+++ name-field: (element msg)
35+++ controls: (element msg)
36+++ keyed: $-((list [key=@t el=(element msg)]) (element msg))
37+++ tabular: $-((list [key=@ud cells=(list (element msg))]) (element msg))
38+++ bad-pad: list item does not fit its expected type
39+/tests/golden/types-prelude-ui/source.jibb:57:29: expected item
40+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
41+ ^
42+/tests/golden/types-prelude-ui/source.jibb:57:35: list item
43+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
44+ ^
45+++ bad-width: list item does not fit its expected type
46+/tests/golden/types-prelude-ui/source.jibb:58:31: expected item
47+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
48+ ^
49+/tests/golden/types-prelude-ui/source.jibb:58:37: list item
50+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
51+ ^
52+++ malformed-each: list item does not fit its expected type
53+/tests/golden/types-prelude-ui/source.jibb:59:37: expected item
54+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
55+ ^
56+/tests/golden/types-prelude-ui/source.jibb:59:44: list item
57+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
58+ ^
59+++ malformed-table: list item does not fit its expected type
60+/tests/golden/types-prelude-ui/source.jibb:61:4: expected item
61+ (table ~[[header="Name" width=%shrink]] ~)
62+ ^
63+/tests/golden/types-prelude-ui/source.jibb:61:12: list item
64+ (table ~[[header="Name" width=%shrink]] ~)
65+ ^
66+++ ship-control: (element @p)
67+++ text-row: $-((list (element @t)) (element @t))
68+++ bad-child: list item constraint is not supported by partial inference
69+++ init: $-(@t [count=@ud])
70+++ update: $-([message=msg state=[count=@ud]] [count=@ud (list (cmd msg))])
71+++ view: $-([count=@ud] (element msg))
72+++ subs: $-([count=@ud] (list (sub msg)))
73+++ concrete-program: [init=$-(@t [count=@ud]) [update=$-([msg count=@ud] [count=@ud (list (cmd msg))]) [view=$-([count=@ud] (element msg)) subs=$-([count=@ud] (list (sub msg)))]]]
74+++ embedded: (element !!)
75+++ mismatched-island-data: call's sample and argument types do not unify
76+/tests/golden/types-prelude-ui/source.jibb:73:44: called gate
77+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
78+ ^
79+/tests/golden/types-prelude-ui/source.jibb:73:51: argument
80+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
81+ ^
82+++ load: $-(@t (ask [count=@ud]))
83+++ page-view: $-([count=@ud] (element !!))
84+++ static-page: [load=$-(@t (ask.internal [count=@ud])) view=$-([count=@ud] (element !!))]
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-recursion-scc-import/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= lib /ui/lib
2−++ text ^- @t (left.lib "hello")
2+++ text-value ^- @t (left.lib "hello")
33++ ship ^- @p (right.lib "hello")
tests/golden/types-recursion-scc-import/tokens.txt+7−7
@@ -6,13 +6,13 @@
661:12 tight knot lib
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph ^-
11−2:12 aura @t
12−2:15 glyph (
13−2:16 tight wing left.lib
14−2:25 str "hello"
15−2:32 tight glyph )
9+2:4 name text-value
10+2:15 glyph ^-
11+2:18 aura @t
12+2:21 glyph (
13+2:22 tight wing left.lib
14+2:31 str "hello"
15+2:38 tight glyph )
16163:1 NEWLINE
17173:1 glyph ++
18183:4 name ship
tests/golden/types-recursion-scc-import/tree.txt+5−5
@@ -1,10 +1,10 @@
11(module
22 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
4− (cast 2:9
5− (aura 2:12 @t)
6− (group 2:15
7− (call 2:16 (wing 2:16 left.lib) (str 2:25 "hello")))))
3+ (value 2:1 text-value
4+ (cast 2:15
5+ (aura 2:18 @t)
6+ (group 2:21
7+ (call 2:22 (wing 2:22 left.lib) (str 2:31 "hello")))))
88 (value 3:1 ship
99 (cast 3:9
1010 (aura 3:12 @p)
tests/golden/types-recursion-scc-import/types.txt+1−1
@@ -1,3 +1,3 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
33++ ship: @p
tests/golden/types-union-finite-context/source.jibb+1−1
@@ -35,7 +35,7 @@
3535 * %stay
3636++ binder |= x=input ^- ?
3737 ?- x
38− [%p flag text] flag
38+ [%p flag words] flag
3939 %other %.n
4040++ unresolved |= x=input ^- (list @t)
4141 ~& %pending
tests/golden/types-union-finite-context/tokens.txt+3−3
@@ -244,9 +244,9 @@
24424438:5 glyph [
24524538:6 tight lit %p
24624638:9 name flag
247−38:14 name text
248−38:18 tight glyph ]
249−38:20 name flag
247+38:14 name words
248+38:19 tight glyph ]
249+38:21 name flag
25025039:5 NEWLINE
25125139:5 lit %other
25225239:12 lit %.n
tests/golden/types-union-finite-context/tree.txt+2−2
@@ -111,8 +111,8 @@
111111 (branch 37:3
112112 (wing 37:6 x)
113113 (arm 38:5
114− (cell 38:5 (lit 38:6 %p) (bind 38:9 flag) (bind 38:14 text))
115− (wing 38:20 flag))
114+ (cell 38:5 (lit 38:6 %p) (bind 38:9 flag) (bind 38:14 words))
115+ (wing 38:21 flag))
116116 (arm 39:5 (lit 39:5 %other) (lit 39:12 %.n)))))))
117117 (value 40:1 unresolved
118118 (gate 40:15
tests/golden/types-union-finite-limit/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; Molds: the empty mold `!!` has no values.
2−tests: Whole-case matching remains available without expanding many booleans. Partial matching succeeds below the implementation's 64-alternative limit and fails closed above it; empty union cases remain unsupported rather than falsely checked.
2+tests: Whole-case matching remains available without expanding many booleans. Partial matching succeeds below the implementation's 64-alternative limit and fails closed above it; a proven empty case is excluded from coverage, allowing the only inhabited case to be matched.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-finite-limit/types.txt+1−1
@@ -7,4 +7,4 @@ partial inference; module not checked
77+$ over: cases proven disjoint; mold not checked
88++ capped: union pattern expansion needs unsupported inference
99+$ empty-msg: cases proven disjoint; mold not checked
10−++ one: sample mold is not supported by partial inference
10+++ one: $-(empty-msg @t)
tests/golden/types-union-nonwing-subject/source.jibb+13−13
@@ -8,24 +8,24 @@
88++ passthrough |= x=input x
99++ grouped |= x=input ^- (list @t)
1010 ?- (x)
11− [%item flag text] ~[text]
11+ [%item flag words] ~[words]
1212 %none ~
1313++ call |= x=input ^- (list @t)
1414 ?- (local-id x)
15− [%item flag text] ~[text]
15+ [%item flag words] ~[words]
1616 %none ~
1717++ nested |= x=input ^- result
1818 ?- (local-id (passthrough x))
19− [%item flag text] %good
19+ [%item flag words] %good
2020 %none %empty
2121++ finite |= x=input ^- (list @t)
2222 ?- (local-id x)
23− [%item %.y text] ~[text]
24− [%item %.n text] ~[]
23+ [%item %.y words] ~[words]
24+ [%item %.n words] ~[]
2525 %none ~
2626++ wrong |= x=input ^- result
2727 ?- (local-id x)
28− [%item flag text] %missing
28+ [%item flag words] %missing
2929 %none %empty
3030++ missing |= x=input ^- (list @t)
3131 ?- (local-id x)
@@ -34,7 +34,7 @@
3434 ?- (local-id x)
3535 %none ~
3636 %none ~
37− [%item flag text] ~[text]
37+ [%item flag words] ~[words]
3838++ shadow |= x=input ^- result
3939 ?- (local-id x)
4040 [%item flag same] %good
@@ -42,19 +42,19 @@
4242++ pending |= x=input ^- result
4343 ~& %dangling
4444 ?- (local-id x)
45− [%item flag text] %good
45+ [%item flag words] %good
4646 %none %empty
4747++ unknown |= x ^- (list @t)
4848 ?- (local-id x)
49− [%item flag text] ~[text]
49+ [%item flag words] ~[words]
5050 %none ~
5151++ nonunion |= x=@t ^- (list @t)
5252 ?- (local-id x)
53− [%item flag text] ~[text]
53+ [%item flag words] ~[words]
5454 %none ~
5555++ explicit |= [x=input y=A] ^- (list A)
5656 ?- (local-id x)
57− [%item flag text] ~["text"]
57+ [%item flag words] ~["text"]
5858 %none ~
5959+$ payload |$ [A]
6060 [%present value=A]
@@ -65,12 +65,12 @@
6565 %none ~
6666++ bad-subject |= x=input ^- result
6767 ?- (passthrough "wrong")
68− [%item flag text] %missing
68+ [%item flag words] %missing
6969 %none %empty
7070++ first-of |= [a b] a
7171++ pending-subject |= x=input ^- result
7272 ?- (first-of x %dangling)
73− [%item flag text] %good
73+ [%item flag words] %good
7474 %none %empty
7575++ duplicate-flag-subject |= x=@t ^- (list @t)
7676 ?- (passthrough x)
tests/golden/types-union-nonwing-subject/tokens.txt+54−54
@@ -56,11 +56,11 @@
565611:5 glyph [
575711:6 tight lit %item
585811:12 name flag
59−11:17 name text
60−11:21 tight glyph ]
61−11:23 glyph ~[
62−11:25 tight name text
63−11:29 tight glyph ]
59+11:17 name words
60+11:22 tight glyph ]
61+11:24 glyph ~[
62+11:26 tight name words
63+11:31 tight glyph ]
646412:5 NEWLINE
656512:5 lit %none
666612:11 lit ~
@@ -88,11 +88,11 @@
888815:5 glyph [
898915:6 tight lit %item
909015:12 name flag
91−15:17 name text
92−15:21 tight glyph ]
93−15:23 glyph ~[
94−15:25 tight name text
95−15:29 tight glyph ]
91+15:17 name words
92+15:22 tight glyph ]
93+15:24 glyph ~[
94+15:26 tight name words
95+15:31 tight glyph ]
969616:5 NEWLINE
979716:5 lit %none
989816:11 lit ~
@@ -120,9 +120,9 @@
12012019:5 glyph [
12112119:6 tight lit %item
12212219:12 name flag
123−19:17 name text
124−19:21 tight glyph ]
125−19:23 lit %good
123+19:17 name words
124+19:22 tight glyph ]
125+19:24 lit %good
12612620:5 NEWLINE
12712720:5 lit %none
12812820:11 lit %empty
@@ -150,19 +150,19 @@
15015023:5 glyph [
15115123:6 tight lit %item
15215223:12 lit %.y
153−23:16 name text
154−23:20 tight glyph ]
155−23:22 glyph ~[
156−23:24 tight name text
157−23:28 tight glyph ]
153+23:16 name words
154+23:21 tight glyph ]
155+23:23 glyph ~[
156+23:25 tight name words
157+23:30 tight glyph ]
15815824:5 NEWLINE
15915924:5 glyph [
16016024:6 tight lit %item
16116124:12 lit %.n
162−24:16 name text
163−24:20 tight glyph ]
164−24:22 glyph ~[
165−24:24 tight glyph ]
162+24:16 name words
163+24:21 tight glyph ]
164+24:23 glyph ~[
165+24:25 tight glyph ]
16616625:5 NEWLINE
16716725:5 lit %none
16816825:11 lit ~
@@ -187,9 +187,9 @@
18718728:5 glyph [
18818828:6 tight lit %item
18918928:12 name flag
190−28:17 name text
191−28:21 tight glyph ]
192−28:23 lit %missing
190+28:17 name words
191+28:22 tight glyph ]
192+28:24 lit %missing
19319329:5 NEWLINE
19419429:5 lit %none
19519529:11 lit %empty
@@ -246,11 +246,11 @@
24624637:5 glyph [
24724737:6 tight lit %item
24824837:12 name flag
249−37:17 name text
250−37:21 tight glyph ]
251−37:23 glyph ~[
252−37:25 tight name text
253−37:29 tight glyph ]
249+37:17 name words
250+37:22 tight glyph ]
251+37:24 glyph ~[
252+37:26 tight name words
253+37:31 tight glyph ]
25425438:1 DEDENT
25525538:1 DEDENT
25625638:1 NEWLINE
@@ -302,9 +302,9 @@
30230245:7 glyph [
30330345:8 tight lit %item
30430445:14 name flag
305−45:19 name text
306−45:23 tight glyph ]
307−45:25 lit %good
305+45:19 name words
306+45:24 tight glyph ]
307+45:26 lit %good
30830846:7 NEWLINE
30930946:7 lit %none
31031046:13 lit %empty
@@ -331,11 +331,11 @@
33133149:5 glyph [
33233249:6 tight lit %item
33333349:12 name flag
334−49:17 name text
335−49:21 tight glyph ]
336−49:23 glyph ~[
337−49:25 tight name text
338−49:29 tight glyph ]
334+49:17 name words
335+49:22 tight glyph ]
336+49:24 glyph ~[
337+49:26 tight name words
338+49:31 tight glyph ]
33933950:5 NEWLINE
34034050:5 lit %none
34134150:11 lit ~
@@ -363,11 +363,11 @@
36336353:5 glyph [
36436453:6 tight lit %item
36536553:12 name flag
366−53:17 name text
367−53:21 tight glyph ]
368−53:23 glyph ~[
369−53:25 tight name text
370−53:29 tight glyph ]
366+53:17 name words
367+53:22 tight glyph ]
368+53:24 glyph ~[
369+53:26 tight name words
370+53:31 tight glyph ]
37137154:5 NEWLINE
37237254:5 lit %none
37337354:11 lit ~
@@ -400,11 +400,11 @@
40040057:5 glyph [
40140157:6 tight lit %item
40240257:12 name flag
403−57:17 name text
404−57:21 tight glyph ]
405−57:23 glyph ~[
406−57:25 tight str "text"
407−57:31 tight glyph ]
403+57:17 name words
404+57:22 tight glyph ]
405+57:24 glyph ~[
406+57:26 tight str "text"
407+57:32 tight glyph ]
40840858:5 NEWLINE
40940958:5 lit %none
41041058:11 lit ~
@@ -486,9 +486,9 @@
48648668:5 glyph [
48748768:6 tight lit %item
48848868:12 name flag
489−68:17 name text
490−68:21 tight glyph ]
491−68:23 lit %missing
489+68:17 name words
490+68:22 tight glyph ]
491+68:24 lit %missing
49249269:5 NEWLINE
49349369:5 lit %none
49449469:11 lit %empty
@@ -523,9 +523,9 @@
52352373:5 glyph [
52452473:6 tight lit %item
52552573:12 name flag
526−73:17 name text
527−73:21 tight glyph ]
528−73:23 lit %good
526+73:17 name words
527+73:22 tight glyph ]
528+73:24 lit %good
52952974:5 NEWLINE
53053074:5 lit %none
53153174:11 lit %empty
tests/golden/types-union-nonwing-subject/tree.txt+26−26
@@ -23,8 +23,8 @@
2323 (branch 10:3
2424 (group 10:6 (wing 10:7 x))
2525 (arm 11:5
26− (cell 11:5 (lit 11:6 %item) (bind 11:12 flag) (bind 11:17 text))
27− (list 11:23 (wing 11:25 text)))
26+ (cell 11:5 (lit 11:6 %item) (bind 11:12 flag) (bind 11:17 words))
27+ (list 11:24 (wing 11:26 words)))
2828 (arm 12:5 (lit 12:5 %none) (lit 12:11 ~)))))))
2929 (value 13:1 call
3030 (gate 13:9
@@ -36,8 +36,8 @@
3636 (group 14:6
3737 (call 14:7 (wing 14:7 local-id) (wing 14:16 x)))
3838 (arm 15:5
39− (cell 15:5 (lit 15:6 %item) (bind 15:12 flag) (bind 15:17 text))
40− (list 15:23 (wing 15:25 text)))
39+ (cell 15:5 (lit 15:6 %item) (bind 15:12 flag) (bind 15:17 words))
40+ (list 15:24 (wing 15:26 words)))
4141 (arm 16:5 (lit 16:5 %none) (lit 16:11 ~)))))))
4242 (value 17:1 nested
4343 (gate 17:11
@@ -52,8 +52,8 @@
5252 (group 18:16
5353 (call 18:17 (wing 18:17 passthrough) (wing 18:29 x)))))
5454 (arm 19:5
55− (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 text))
56− (lit 19:23 %good))
55+ (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 words))
56+ (lit 19:24 %good))
5757 (arm 20:5 (lit 20:5 %none) (lit 20:11 %empty)))))))
5858 (value 21:1 finite
5959 (gate 21:11
@@ -65,11 +65,11 @@
6565 (group 22:6
6666 (call 22:7 (wing 22:7 local-id) (wing 22:16 x)))
6767 (arm 23:5
68− (cell 23:5 (lit 23:6 %item) (lit 23:12 %.y) (bind 23:16 text))
69− (list 23:22 (wing 23:24 text)))
68+ (cell 23:5 (lit 23:6 %item) (lit 23:12 %.y) (bind 23:16 words))
69+ (list 23:23 (wing 23:25 words)))
7070 (arm 24:5
71− (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 text))
72− (list 24:22))
71+ (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 words))
72+ (list 24:23))
7373 (arm 25:5 (lit 25:5 %none) (lit 25:11 ~)))))))
7474 (value 26:1 wrong
7575 (gate 26:10
@@ -81,8 +81,8 @@
8181 (group 27:6
8282 (call 27:7 (wing 27:7 local-id) (wing 27:16 x)))
8383 (arm 28:5
84− (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 text))
85− (lit 28:23 %missing))
84+ (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 words))
85+ (lit 28:24 %missing))
8686 (arm 29:5 (lit 29:5 %none) (lit 29:11 %empty)))))))
8787 (value 30:1 missing
8888 (gate 30:12
@@ -106,8 +106,8 @@
106106 (arm 35:5 (lit 35:5 %none) (lit 35:11 ~))
107107 (arm 36:5 (lit 36:5 %none) (lit 36:11 ~))
108108 (arm 37:5
109− (cell 37:5 (lit 37:6 %item) (bind 37:12 flag) (bind 37:17 text))
110− (list 37:23 (wing 37:25 text))))))))
109+ (cell 37:5 (lit 37:6 %item) (bind 37:12 flag) (bind 37:17 words))
110+ (list 37:24 (wing 37:26 words))))))))
111111 (value 38:1 shadow
112112 (gate 38:11
113113 (face 38:14 x (ref 38:16 input))
@@ -134,8 +134,8 @@
134134 (group 44:8
135135 (call 44:9 (wing 44:9 local-id) (wing 44:18 x)))
136136 (arm 45:7
137− (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 text))
138− (lit 45:25 %good))
137+ (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 words))
138+ (lit 45:26 %good))
139139 (arm 46:7 (lit 46:7 %none) (lit 46:13 %empty)))))))))
140140 (value 47:1 unknown
141141 (gate 47:12
@@ -147,8 +147,8 @@
147147 (group 48:6
148148 (call 48:7 (wing 48:7 local-id) (wing 48:16 x)))
149149 (arm 49:5
150− (cell 49:5 (lit 49:6 %item) (bind 49:12 flag) (bind 49:17 text))
151− (list 49:23 (wing 49:25 text)))
150+ (cell 49:5 (lit 49:6 %item) (bind 49:12 flag) (bind 49:17 words))
151+ (list 49:24 (wing 49:26 words)))
152152 (arm 50:5 (lit 50:5 %none) (lit 50:11 ~)))))))
153153 (value 51:1 nonunion
154154 (gate 51:13
@@ -160,8 +160,8 @@
160160 (group 52:6
161161 (call 52:7 (wing 52:7 local-id) (wing 52:16 x)))
162162 (arm 53:5
163− (cell 53:5 (lit 53:6 %item) (bind 53:12 flag) (bind 53:17 text))
164− (list 53:23 (wing 53:25 text)))
163+ (cell 53:5 (lit 53:6 %item) (bind 53:12 flag) (bind 53:17 words))
164+ (list 53:24 (wing 53:26 words)))
165165 (arm 54:5 (lit 54:5 %none) (lit 54:11 ~)))))))
166166 (value 55:1 explicit
167167 (gate 55:13
@@ -175,8 +175,8 @@
175175 (group 56:6
176176 (call 56:7 (wing 56:7 local-id) (wing 56:16 x)))
177177 (arm 57:5
178− (cell 57:5 (lit 57:6 %item) (bind 57:12 flag) (bind 57:17 text))
179− (list 57:23 (str 57:25 "text")))
178+ (cell 57:5 (lit 57:6 %item) (bind 57:12 flag) (bind 57:17 words))
179+ (list 57:24 (str 57:26 "text")))
180180 (arm 58:5 (lit 58:5 %none) (lit 58:11 ~)))))))
181181 (mold 59:1 payload
182182 (generic 59:12 A
@@ -211,8 +211,8 @@
211211 (group 67:6
212212 (call 67:7 (wing 67:7 passthrough) (str 67:19 "wrong")))
213213 (arm 68:5
214− (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 text))
215− (lit 68:23 %missing))
214+ (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 words))
215+ (lit 68:24 %missing))
216216 (arm 69:5 (lit 69:5 %none) (lit 69:11 %empty)))))))
217217 (value 70:1 first-of
218218 (gate 70:13
@@ -228,8 +228,8 @@
228228 (group 72:6
229229 (call 72:7 (wing 72:7 first-of) (wing 72:16 x) (lit 72:18 %dangling)))
230230 (arm 73:5
231− (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 text))
232− (lit 73:23 %good))
231+ (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 words))
232+ (lit 73:24 %good))
233233 (arm 74:5 (lit 74:5 %none) (lit 74:11 %empty)))))))
234234 (value 75:1 duplicate-flag-subject
235235 (gate 75:27
tests/golden/types-union-nonwing-subject/types.txt+3−3
@@ -11,9 +11,9 @@ partial inference; module not checked
1111/tests/golden/types-union-nonwing-subject/source.jibb:26:24: expected union
1212++ wrong |= x=input ^- result
1313 ^
14−/tests/golden/types-union-nonwing-subject/source.jibb:28:23: tag
15− [%item flag text] %missing
16− ^
14+/tests/golden/types-union-nonwing-subject/source.jibb:28:24: tag
15+ [%item flag words] %missing
16+ ^
1717++ missing: missing union case [%item [flag=? text=@t]]
1818++ dead: branch arm is covered by earlier arms
1919/tests/golden/types-union-nonwing-subject/source.jibb:36:5: covered arm
tests/golden/types-union-runtime-equality/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Molds: union cases differ as nouns; `?` is the two loobean atoms, and `!!` is empty.
2+tests: Nested equal zero nouns with different auras overlap; a loobean case contains `%.n`; ancestor and descendant atom auras overlap. An empty nested field makes a case disjoint. Different outer tags remain disjoint even when their nested zero nouns are equal.
3+expect-types: partial mold analysis with both sites of definite overlaps; `keep` infers for the distinct-tag mold. The report does not establish that the other molds or the module are checked.
tests/golden/types-union-runtime-equality/source.jibbnew file+16
@@ -0,0 +1,16 @@
1++$ mixed-zero
2+ [%tag [%.y @t]]
3+ [%tag [%$ @p]]
4++$ flag-one
5+ [%tag ?]
6+ [%tag %.n]
7++$ aura-family
8+ [%tag @ta]
9+ [%tag @t]
10++$ empty-field
11+ [%tag [!! @t]]
12+ [%tag [* @p]]
13++$ distinct-tags
14+ [%left [%.y @t]]
15+ [%right [%$ @p]]
16+++ keep |= x=distinct-tags x
tests/golden/types-union-runtime-equality/tokens.txtnew file+96
@@ -0,0 +1,96 @@
1+1:1 glyph +$
2+1:4 name mixed-zero
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %tag
6+2:9 glyph [
7+2:10 tight lit %.y
8+2:14 aura @t
9+2:16 tight glyph ]
10+2:17 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:13 aura @p
17+3:15 tight glyph ]
18+3:16 tight glyph ]
19+4:1 DEDENT
20+4:1 NEWLINE
21+4:1 glyph +$
22+4:4 name flag-one
23+5:3 INDENT
24+5:3 glyph [
25+5:4 tight lit %tag
26+5:9 glyph ?
27+5:10 tight glyph ]
28+6:3 NEWLINE
29+6:3 glyph [
30+6:4 tight lit %tag
31+6:9 lit %.n
32+6:12 tight glyph ]
33+7:1 DEDENT
34+7:1 NEWLINE
35+7:1 glyph +$
36+7:4 name aura-family
37+8:3 INDENT
38+8:3 glyph [
39+8:4 tight lit %tag
40+8:9 aura @ta
41+8:12 tight glyph ]
42+9:3 NEWLINE
43+9:3 glyph [
44+9:4 tight lit %tag
45+9:9 aura @t
46+9:11 tight glyph ]
47+10:1 DEDENT
48+10:1 NEWLINE
49+10:1 glyph +$
50+10:4 name empty-field
51+11:3 INDENT
52+11:3 glyph [
53+11:4 tight lit %tag
54+11:9 glyph [
55+11:10 tight glyph !!
56+11:13 aura @t
57+11:15 tight glyph ]
58+11:16 tight glyph ]
59+12:3 NEWLINE
60+12:3 glyph [
61+12:4 tight lit %tag
62+12:9 glyph [
63+12:10 tight glyph *
64+12:12 aura @p
65+12:14 tight glyph ]
66+12:15 tight glyph ]
67+13:1 DEDENT
68+13:1 NEWLINE
69+13:1 glyph +$
70+13:4 name distinct-tags
71+14:3 INDENT
72+14:3 glyph [
73+14:4 tight lit %left
74+14:10 glyph [
75+14:11 tight lit %.y
76+14:15 aura @t
77+14:17 tight glyph ]
78+14:18 tight glyph ]
79+15:3 NEWLINE
80+15:3 glyph [
81+15:4 tight lit %right
82+15:11 glyph [
83+15:12 tight lit %$
84+15:15 aura @p
85+15:17 tight glyph ]
86+15:18 tight glyph ]
87+16:1 DEDENT
88+16:1 NEWLINE
89+16:1 glyph ++
90+16:4 name keep
91+16:9 glyph |=
92+16:12 name x
93+16:13 tight glyph =
94+16:14 tight name distinct-tags
95+16:28 name x
96+16:29 NEWLINE
tests/golden/types-union-runtime-equality/tree.txtnew file+37
@@ -0,0 +1,37 @@
1+(module
2+ (mold 1:1 mixed-zero
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %tag)
6+ (cell 2:9 (const 2:10 %.y) (aura 2:14 @t)))
7+ (cell 3:3
8+ (const 3:4 %tag)
9+ (cell 3:9 (const 3:10 %$) (aura 3:13 @p)))))
10+ (mold 4:1 flag-one
11+ (union 5:3
12+ (cell 5:3 (const 5:4 %tag) (flag 5:9))
13+ (cell 6:3 (const 6:4 %tag) (const 6:9 %.n))))
14+ (mold 7:1 aura-family
15+ (union 8:3
16+ (cell 8:3 (const 8:4 %tag) (aura 8:9 @ta))
17+ (cell 9:3 (const 9:4 %tag) (aura 9:9 @t))))
18+ (mold 10:1 empty-field
19+ (union 11:3
20+ (cell 11:3
21+ (const 11:4 %tag)
22+ (cell 11:9 (void 11:10) (aura 11:13 @t)))
23+ (cell 12:3
24+ (const 12:4 %tag)
25+ (cell 12:9 (noun 12:10) (aura 12:12 @p)))))
26+ (mold 13:1 distinct-tags
27+ (union 14:3
28+ (cell 14:3
29+ (const 14:4 %left)
30+ (cell 14:10 (const 14:11 %.y) (aura 14:15 @t)))
31+ (cell 15:3
32+ (const 15:4 %right)
33+ (cell 15:11 (const 15:12 %$) (aura 15:15 @p)))))
34+ (value 16:1 keep
35+ (gate 16:9
36+ (face 16:12 x (ref 16:14 distinct-tags))
37+ (wing 16:28 x))))
tests/golden/types-union-runtime-equality/types.txtnew file+25
@@ -0,0 +1,25 @@
1+partial inference; module not checked
2++$ mixed-zero: overlapping cases; mold not checked
3+/tests/golden/types-union-runtime-equality/source.jibb:2:3: first union case
4+ [%tag [%.y @t]]
5+ ^
6+/tests/golden/types-union-runtime-equality/source.jibb:3:3: overlapping case
7+ [%tag [%$ @p]]
8+ ^
9++$ flag-one: overlapping cases; mold not checked
10+/tests/golden/types-union-runtime-equality/source.jibb:5:3: first union case
11+ [%tag ?]
12+ ^
13+/tests/golden/types-union-runtime-equality/source.jibb:6:3: overlapping case
14+ [%tag %.n]
15+ ^
16++$ aura-family: overlapping cases; mold not checked
17+/tests/golden/types-union-runtime-equality/source.jibb:8:3: first union case
18+ [%tag @ta]
19+ ^
20+/tests/golden/types-union-runtime-equality/source.jibb:9:3: overlapping case
21+ [%tag @t]
22+ ^
23++$ empty-field: cases proven disjoint; mold not checked
24++$ distinct-tags: cases proven disjoint; mold not checked
25+++ keep: $-(distinct-tags distinct-tags)
tests/golden/types-union-source-alias/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Unions: "Cases must differ as nouns"; Grammar, Generic molds.
2+tests: A one-hop local generic alias with a literal head is proven disjoint from a different head, including with outer generic parameters. Same-head and equal-noun zero spellings with overlapping payloads report both case sites; this partial report does not claim the full module is checked.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-union-source-alias/source.jibbnew file+18
@@ -0,0 +1,18 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
5+++ id |= x=choice x
6++$ poly |$ [A B]
7+ (tagged A)
8+ [%second B]
9+++ typed |= x=(poly @t @p) x
10++$ same
11+ (tagged @t)
12+ [%wrapped @p]
13+++ collide |= x=same x
14++$ zero |$ [A] [%.y A]
15++$ same-zero
16+ (zero @t)
17+ [%$ @p]
18+++ collide-zero |= x=same-zero x
tests/golden/types-union-source-alias/tokens.txtnew file+119
@@ -0,0 +1,119 @@
1+1:1 glyph +$
2+1:4 name tagged
3+1:11 glyph |$
4+1:14 glyph [
5+1:15 tight tvar A
6+1:16 tight glyph ]
7+1:18 glyph [
8+1:19 tight lit %wrapped
9+1:28 tvar A
10+1:29 tight glyph ]
11+2:1 NEWLINE
12+2:1 glyph +$
13+2:4 name choice
14+3:3 INDENT
15+3:3 glyph (
16+3:4 tight name tagged
17+3:11 aura @t
18+3:13 tight glyph )
19+4:3 NEWLINE
20+4:3 glyph [
21+4:4 tight lit %other
22+4:11 aura @p
23+4:13 tight glyph ]
24+5:1 DEDENT
25+5:1 NEWLINE
26+5:1 glyph ++
27+5:4 name id
28+5:7 glyph |=
29+5:10 name x
30+5:11 tight glyph =
31+5:12 tight name choice
32+5:19 name x
33+6:1 NEWLINE
34+6:1 glyph +$
35+6:4 name poly
36+6:9 glyph |$
37+6:12 glyph [
38+6:13 tight tvar A
39+6:15 tvar B
40+6:16 tight glyph ]
41+7:3 INDENT
42+7:3 glyph (
43+7:4 tight name tagged
44+7:11 tvar A
45+7:12 tight glyph )
46+8:3 NEWLINE
47+8:3 glyph [
48+8:4 tight lit %second
49+8:12 tvar B
50+8:13 tight glyph ]
51+9:1 DEDENT
52+9:1 NEWLINE
53+9:1 glyph ++
54+9:4 name typed
55+9:10 glyph |=
56+9:13 name x
57+9:14 tight glyph =
58+9:15 tight glyph (
59+9:16 tight name poly
60+9:21 aura @t
61+9:24 aura @p
62+9:26 tight glyph )
63+9:28 name x
64+10:1 NEWLINE
65+10:1 glyph +$
66+10:4 name same
67+11:3 INDENT
68+11:3 glyph (
69+11:4 tight name tagged
70+11:11 aura @t
71+11:13 tight glyph )
72+12:3 NEWLINE
73+12:3 glyph [
74+12:4 tight lit %wrapped
75+12:13 aura @p
76+12:15 tight glyph ]
77+13:1 DEDENT
78+13:1 NEWLINE
79+13:1 glyph ++
80+13:4 name collide
81+13:12 glyph |=
82+13:15 name x
83+13:16 tight glyph =
84+13:17 tight name same
85+13:22 name x
86+14:1 NEWLINE
87+14:1 glyph +$
88+14:4 name zero
89+14:9 glyph |$
90+14:12 glyph [
91+14:13 tight tvar A
92+14:14 tight glyph ]
93+14:16 glyph [
94+14:17 tight lit %.y
95+14:21 tvar A
96+14:22 tight glyph ]
97+15:1 NEWLINE
98+15:1 glyph +$
99+15:4 name same-zero
100+16:3 INDENT
101+16:3 glyph (
102+16:4 tight name zero
103+16:9 aura @t
104+16:11 tight glyph )
105+17:3 NEWLINE
106+17:3 glyph [
107+17:4 tight lit %$
108+17:7 aura @p
109+17:9 tight glyph ]
110+18:1 DEDENT
111+18:1 NEWLINE
112+18:1 glyph ++
113+18:4 name collide-zero
114+18:17 glyph |=
115+18:20 name x
116+18:21 tight glyph =
117+18:22 tight name same-zero
118+18:32 name x
119+18:33 NEWLINE
tests/golden/types-union-source-alias/tree.txtnew file+41
@@ -0,0 +1,41 @@
1+(module
2+ (mold 1:1 tagged
3+ (generic 1:11 A
4+ (cell 1:18 (const 1:19 %wrapped) (tvar 1:28 A))))
5+ (mold 2:1 choice
6+ (union 3:3
7+ (apply 3:3 tagged (aura 3:11 @t))
8+ (cell 4:3 (const 4:4 %other) (aura 4:11 @p))))
9+ (value 5:1 id
10+ (gate 5:7
11+ (face 5:10 x (ref 5:12 choice))
12+ (wing 5:19 x)))
13+ (mold 6:1 poly
14+ (generic 6:9 A B
15+ (union 7:3
16+ (apply 7:3 tagged (tvar 7:11 A))
17+ (cell 8:3 (const 8:4 %second) (tvar 8:12 B)))))
18+ (value 9:1 typed
19+ (gate 9:10
20+ (face 9:13 x
21+ (apply 9:15 poly (aura 9:21 @t) (aura 9:24 @p)))
22+ (wing 9:28 x)))
23+ (mold 10:1 same
24+ (union 11:3
25+ (apply 11:3 tagged (aura 11:11 @t))
26+ (cell 12:3 (const 12:4 %wrapped) (aura 12:13 @p))))
27+ (value 13:1 collide
28+ (gate 13:12
29+ (face 13:15 x (ref 13:17 same))
30+ (wing 13:22 x)))
31+ (mold 14:1 zero
32+ (generic 14:9 A
33+ (cell 14:16 (const 14:17 %.y) (tvar 14:21 A))))
34+ (mold 15:1 same-zero
35+ (union 16:3
36+ (apply 16:3 zero (aura 16:9 @t))
37+ (cell 17:3 (const 17:4 %$) (aura 17:7 @p))))
38+ (value 18:1 collide-zero
39+ (gate 18:17
40+ (face 18:20 x (ref 18:22 same-zero))
41+ (wing 18:32 x))))
tests/golden/types-union-source-alias/types.txtnew file+23
@@ -0,0 +1,23 @@
1+partial inference; module not checked
2++$ tagged: not checked
3++$ choice: cases proven disjoint; mold not checked
4+++ id: $-(choice choice)
5++$ poly: cases proven disjoint; mold not checked
6+++ typed: $-((poly @t @p) (poly @t @p))
7++$ same: overlapping cases; mold not checked
8+/tests/golden/types-union-source-alias/source.jibb:11:3: first union case
9+ (tagged @t)
10+ ^
11+/tests/golden/types-union-source-alias/source.jibb:12:3: overlapping case
12+ [%wrapped @p]
13+ ^
14+++ collide: sample mold is not supported by partial inference
15++$ zero: not checked
16++$ same-zero: overlapping cases; mold not checked
17+/tests/golden/types-union-source-alias/source.jibb:16:3: first union case
18+ (zero @t)
19+ ^
20+/tests/golden/types-union-source-alias/source.jibb:17:3: overlapping case
21+ [%$ @p]
22+ ^
23+++ collide-zero: sample mold is not supported by partial inference
tests/golden/types-unit-context/source.jibb+3−3
@@ -16,8 +16,8 @@
1616++ accept |= x=(unit msg) x
1717++ call (accept `%stay)
1818++ bad-call (accept `%bad)
19−++ field ^- record [`%go ~[`"hi"]]
20−++ field-bad ^- record [`%bad ~[`"hi"]]
19+++ field-value ^- record [`%go ~[`"hi"]]
20+++ field-value-bad ^- record [`%bad ~[`"hi"]]
2121++ mimic-mismatch ^- (mimic @t) `"hi"
2222++ without-context `%go
2323++ pending
@@ -31,7 +31,7 @@
3131+$ alt
3232 %go
3333 %stay
34−++ field-wrong-payload ^- record [`%go ~[`~zod]]
34+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
3535++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
3636++ wrong-union |= x=alt ^- record [`x ~[`"hi"]]
3737++ no-field-context |= x=A ^- [a=A] [wrong=x]
tests/golden/types-unit-context/tokens.txt+33−33
@@ -169,30 +169,30 @@
16916918:26 tight glyph )
17017019:1 NEWLINE
17117119:1 glyph ++
172−19:4 name field
173−19:10 glyph ^-
174−19:13 name record
175−19:20 glyph [
176−19:21 tight glyph `
177−19:22 tight lit %go
178−19:26 glyph ~[
179−19:28 tight glyph `
180−19:29 tight str "hi"
181−19:33 tight glyph ]
182−19:34 tight glyph ]
172+19:4 name field-value
173+19:16 glyph ^-
174+19:19 name record
175+19:26 glyph [
176+19:27 tight glyph `
177+19:28 tight lit %go
178+19:32 glyph ~[
179+19:34 tight glyph `
180+19:35 tight str "hi"
181+19:39 tight glyph ]
182+19:40 tight glyph ]
18318320:1 NEWLINE
18418420:1 glyph ++
185−20:4 name field-bad
186−20:14 glyph ^-
187−20:17 name record
188−20:24 glyph [
189−20:25 tight glyph `
190−20:26 tight lit %bad
191−20:31 glyph ~[
192−20:33 tight glyph `
193−20:34 tight str "hi"
194−20:38 tight glyph ]
195−20:39 tight glyph ]
185+20:4 name field-value-bad
186+20:20 glyph ^-
187+20:23 name record
188+20:30 glyph [
189+20:31 tight glyph `
190+20:32 tight lit %bad
191+20:37 glyph ~[
192+20:39 tight glyph `
193+20:40 tight str "hi"
194+20:44 tight glyph ]
195+20:45 tight glyph ]
19619621:1 NEWLINE
19719721:1 glyph ++
19819821:4 name mimic-mismatch
@@ -278,17 +278,17 @@
27827834:1 DEDENT
27927934:1 NEWLINE
28028034:1 glyph ++
281−34:4 name field-wrong-payload
282−34:24 glyph ^-
283−34:27 name record
284−34:34 glyph [
285−34:35 tight glyph `
286−34:36 tight lit %go
287−34:40 glyph ~[
288−34:42 tight glyph `
289−34:43 tight lit ~zod
290−34:47 tight glyph ]
291−34:48 tight glyph ]
281+34:4 name field-value-wrong-payload
282+34:30 glyph ^-
283+34:33 name record
284+34:40 glyph [
285+34:41 tight glyph `
286+34:42 tight lit %go
287+34:46 glyph ~[
288+34:48 tight glyph `
289+34:49 tight lit ~zod
290+34:53 tight glyph ]
291+34:54 tight glyph ]
29229235:1 NEWLINE
29329335:1 glyph ++
29429435:4 name wrong-name
tests/golden/types-unit-context/tree.txt+21−21
@@ -70,20 +70,20 @@
7070 (call 18:14
7171 (wing 18:14 accept)
7272 (unit 18:21 (lit 18:22 %bad)))))
73− (value 19:1 field
74− (cast 19:10
75− (ref 19:13 record)
76− (tuple 19:20
77− (unit 19:21 (lit 19:22 %go))
78− (list 19:26
79− (unit 19:28 (str 19:29 "hi"))))))
80− (value 20:1 field-bad
81− (cast 20:14
82− (ref 20:17 record)
83− (tuple 20:24
84− (unit 20:25 (lit 20:26 %bad))
85− (list 20:31
86− (unit 20:33 (str 20:34 "hi"))))))
73+ (value 19:1 field-value
74+ (cast 19:16
75+ (ref 19:19 record)
76+ (tuple 19:26
77+ (unit 19:27 (lit 19:28 %go))
78+ (list 19:32
79+ (unit 19:34 (str 19:35 "hi"))))))
80+ (value 20:1 field-value-bad
81+ (cast 20:20
82+ (ref 20:23 record)
83+ (tuple 20:30
84+ (unit 20:31 (lit 20:32 %bad))
85+ (list 20:37
86+ (unit 20:39 (str 20:40 "hi"))))))
8787 (value 21:1 mimic-mismatch
8888 (cast 21:19
8989 (apply 21:22 mimic (aura 21:29 @t))
@@ -120,13 +120,13 @@
120120 (unit 30:29 (str 30:30 "hi")))))
121121 (mold 31:1 alt
122122 (union 32:3 (const 32:3 %go) (const 33:3 %stay)))
123− (value 34:1 field-wrong-payload
124− (cast 34:24
125− (ref 34:27 record)
126− (tuple 34:34
127− (unit 34:35 (lit 34:36 %go))
128− (list 34:40
129− (unit 34:42 (lit 34:43 ~zod))))))
123+ (value 34:1 field-value-wrong-payload
124+ (cast 34:30
125+ (ref 34:33 record)
126+ (tuple 34:40
127+ (unit 34:41 (lit 34:42 %go))
128+ (list 34:46
129+ (unit 34:48 (lit 34:49 ~zod))))))
130130 (value 35:1 wrong-name
131131 (cast 35:15
132132 (ref 35:18 record)
tests/golden/types-unit-context/types.txt+15−15
@@ -43,14 +43,14 @@ partial inference; module not checked
4343/tests/golden/types-unit-context/source.jibb:18:22: tag
4444++ bad-call (accept `%bad)
4545 ^
46−++ field: [u=(unit msg) xs=(list (unit @t))]
47−++ field-bad: msg has no case `%bad`
48−/tests/golden/types-unit-context/source.jibb:20:17: expected union
49−++ field-bad ^- record [`%bad ~[`"hi"]]
50− ^
51−/tests/golden/types-unit-context/source.jibb:20:26: tag
52−++ field-bad ^- record [`%bad ~[`"hi"]]
53− ^
46+++ field-value: [u=(unit msg) xs=(list (unit @t))]
47+++ field-value-bad: msg has no case `%bad`
48+/tests/golden/types-unit-context/source.jibb:20:23: expected union
49+++ field-value-bad ^- record [`%bad ~[`"hi"]]
50+ ^
51+/tests/golden/types-unit-context/source.jibb:20:32: tag
52+++ field-value-bad ^- record [`%bad ~[`"hi"]]
53+ ^
5454++ mimic-mismatch: cast constraint is not supported by partial inference
5555++ without-context: tag needs context in partial inference
5656++ pending: tag needs context in partial inference
@@ -58,13 +58,13 @@ partial inference; module not checked
5858++ preserve: $-(A (unit A))
5959++ force: explicit capital constraints are not supported by partial inference
6060+$ alt: cases proven disjoint; mold not checked
61−++ field-wrong-payload: unit payload does not fit its expected type
62−/tests/golden/types-unit-context/source.jibb:34:27: expected unit payload has type @t
63−++ field-wrong-payload ^- record [`%go ~[`~zod]]
64− ^
65−/tests/golden/types-unit-context/source.jibb:34:43: payload has type @p
66−++ field-wrong-payload ^- record [`%go ~[`~zod]]
67− ^
61+++ field-value-wrong-payload: unit payload does not fit its expected type
62+/tests/golden/types-unit-context/source.jibb:34:33: expected unit payload has type @t
63+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
64+ ^
65+/tests/golden/types-unit-context/source.jibb:34:49: payload has type @p
66+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
67+ ^
6868++ wrong-name: cast mold and expression type do not unify
6969/tests/golden/types-unit-context/source.jibb:35:18: cast mold
7070++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
tests/lib/jibb-cell-branch.hoonnew file+53
@@ -0,0 +1,53 @@
1+:: Bounded closed-cell branch context; no runtime or island claim.
2+/+ jibb
3+/* public %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-cell-branch/good/txt
6+/* bad %txt /tests/type-cell-branch/bad/txt
7+|%
8+++ text
9+ |= lines=wain
10+ ^- @t
11+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
12+++ test-cell-branch
13+ ^- tang
14+ ?~ good ~[leaf+"cell branch good source missing"]
15+ ?~ bad ~[leaf+"cell branch bad source missing"]
16+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
17+ ?~ prep ~[leaf+"cell branch prelude unavailable"]
18+ =/ a (parse:jibb /tests/branch/jibb (text good))
19+ =/ b (parse:jibb /tests/branch/jibb (text bad))
20+ ?: |(?=(%| -.a) ?=(%| -.b)) ~[leaf+"cell branch source parse failed"]
21+ =/ ad=(list def:jibb) defs.p.a
22+ =/ bd=(list def:jibb) defs.p.b
23+ ?. &(?=([* ~] ad) ?=([* ~] bd) ?=(%value -.i.ad) ?=(%value -.i.bd))
24+ ~[leaf+"cell branch declarations unavailable"]
25+ =/ unit-scheme=(unit ischeme:jibb) (find-jibb-mold:jibb %unit iface.u.prep)
26+ ?~ unit-scheme ~[leaf+"cell branch unit unavailable"]
27+ =/ computed=(unit itype:jibb) (template-apply:jibb u.unit-scheme ~[[%atom %t]])
28+ ?~ computed ~[leaf+"cell branch unit instantiation failed"]
29+ =/ expected=itype:jibb [%cell [%atom %t] u.computed]
30+ =/ env=ienv:jibb ~[[%flag [[%flag ~] ~]]]
31+ =/ state=istate:jibb *istate:jibb
32+ =. state state(prelude `iface.u.prep, jrec-fuel 256)
33+ =/ original=iresult:jibb (infer-fragment:jibb val.i.bd env state)
34+ =/ failed=iresult:jibb (infer-closed-cell-branch:jibb val.i.bd expected env state (span-of:jibb val.i.bd))
35+ =/ success=iresult:jibb (infer-closed-cell-branch:jibb val.i.ad expected env state (span-of:jibb val.i.ad))
36+ =/ hidden=isub:jibb ~[[55 [%face %x [%atom %t]]]]
37+ ?. (closed-cell-branch-eligible:jibb val.i.bd expected ~) ~[leaf+"negative branch is not eligible"]
38+ ?. ?=(%| -.original) ~[leaf+"original negative branch unexpectedly inferred"]
39+ ?. =(original failed) ~[leaf+"failed retry changed the original result"]
40+ ?. ?=(%& -.success) ~[leaf+"valid closed branch did not infer"]
41+ ?: (closed-cell-branch-eligible:jibb val.i.ad expected hidden) ~[leaf+"structural substitution accepted"]
42+ =/ atom=expr:jibb *expr:jibb
43+ =/ nodes=(list expr:jibb) (reap 512 atom)
44+ ?. (closed-cell-retry-safe:jibb nodes 512) ~[leaf+"exact source budget rejected"]
45+ ?: (closed-cell-retry-safe:jibb [atom nodes] 512) ~[leaf+"source budget exceeded"]
46+ =/ binding=ibinding:jibb [55 [%atom %t]]
47+ =/ subs=isub:jibb (reap 512 binding)
48+ ?. (closed-cell-sub-safe:jibb subs 512) ~[leaf+"exact substitution budget rejected"]
49+ ?: (closed-cell-sub-safe:jibb [binding subs] 512) ~[leaf+"substitution budget exceeded"]
50+ =/ nested=expr:jibb [%branch *span:jibb atom ~]
51+ ?: (closed-cell-retry-safe:jibb ~[nested] 512) ~[leaf+"recursive retry was not excluded"]
52+ ~
53+--
tests/lib/jibb-deferred-context.hoonnew file+83
@@ -0,0 +1,83 @@
1+/+ jibb
2+/* rich %txt /tests/type-deferred-context/rich/txt
3+/* plain %txt /tests/type-deferred-context/plain/txt
4+/* simple %txt /tests/type-deferred-context/simple/txt
5+/* missing %txt /tests/type-deferred-context/missing/txt
6+/* wrong %txt /tests/type-deferred-context/wrong/txt
7+/* duplicate %txt /tests/type-deferred-context/duplicate/txt
8+/* dangling %txt /tests/type-deferred-context/dangling/txt
9+/* collision-early %txt /tests/type-deferred-context/collision-early/txt
10+/* collision-late %txt /tests/type-deferred-context/collision-late/txt
11+/* expected %txt /tests/type-deferred-context/report/txt
12+|%
13+++ text
14+ |= lines=wain
15+ ^- @t
16+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
17+++ test-context
18+ ^- tang
19+ =/ at=path /ui/context/jibb
20+ =/ good=(list wain) ~[rich plain simple]
21+ =/ bad=(list wain) ~[missing wrong duplicate dangling collision-early collision-late]
22+ ?. (levy (weld good bad) |=(src=wain ?=(^ src))) ~[leaf+"source missing"]
23+ =/ source=@t (text rich)
24+ =/ parsed (parse:jibb at source)
25+ ?: ?=(%| -.parsed) ~[leaf+"positive source does not parse"]
26+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
27+ ?: ?=(%| -.result) ~[leaf+"positive library did not publish"]
28+ =/ values=ienv:jibb values.iface.p.result
29+ =/ built=(unit ischeme:jibb) (ienv-lookup:jibb %built values)
30+ ?~ built ~[leaf+"built missing"]
31+ ?~ vars.u.built ~[leaf+"principal polymorphism lost"]
32+ ?^ t.vars.u.built ~[leaf+"unexpected additional quantifiers"]
33+ =/ built-type=itype:jibb typ.u.built
34+ ?. ?=(%fn -.built-type) ~[leaf+"built is not a gate"]
35+ ?. ?=(%var -.sample.built-type) ~[leaf+"built sample is not generic"]
36+ ?. =(sample.built-type product.built-type) ~[leaf+"built input and result differ"]
37+ ?. =(id.sample.built-type i.vars.u.built) ~[leaf+"built quantified identity differs"]
38+ =/ reveal=(unit ischeme:jibb) (ienv-lookup:jibb %reveal values)
39+ =/ reveal-ship=(unit ischeme:jibb) (ienv-lookup:jibb %reveal-ship values)
40+ ?~ reveal ~[leaf+"text result missing"]
41+ ?~ reveal-ship ~[leaf+"ship result missing"]
42+ ?. ?=([%atom %t] typ.u.reveal) ~[leaf+"text result changed"]
43+ ?. ?=([%atom %p] typ.u.reveal-ship) ~[leaf+"ship result changed"]
44+ =/ report=@t (golden-types-with-marks:jibb at source ~ ~)
45+ ?. =((to-wain:format (cat 3 report '\0a')) expected) ~[leaf+"report differs from committed types"]
46+ =/ rest-good=(list wain) ~[plain simple]
47+ =/ checked=?
48+ %+ levy rest-good
49+ |= src=wain
50+ =/ source=@t (text src)
51+ =/ parsed (parse:jibb at source)
52+ ?: ?=(%| -.parsed) |
53+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
54+ ?=(%& -.result)
55+ ?. checked ~[leaf+"simple positive declined or did not parse"]
56+ =. checked
57+ %+ levy bad
58+ |= src=wain
59+ =/ source=@t (text src)
60+ =/ parsed (parse:jibb at source)
61+ ?: ?=(%| -.parsed) |
62+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
63+ ?=(%| -.result)
64+ ?. checked ~[leaf+"negative source published or did not parse"]
65+ =/ literal=lit:jibb [%term %tas %none '%none']
66+ =/ actual=itype:jibb [%tag 10 literal |]
67+ =/ st=istate:jibb *istate:jibb
68+ =. st st(next 20)
69+ ?^ (dg-stage:jibb ~ ~ ~ st ~ 65) ~[leaf+"oversized retry fuel accepted"]
70+ ?^ (dg-stage:jibb defs.p.parsed ~ ~ st ~ 0) ~[leaf+"source beyond retry fuel accepted"]
71+ =/ atom=itype:jibb [%const literal]
72+ =/ faced=itype:jibb [%face %named atom]
73+ =/ union=itype:jibb [%union ~[atom [%cell [%const [%term %tas %some '%some']] [%face %value [%atom %t]]]] ~ ~ ~]
74+ =/ faced-case=itype:jibb [%union ~[faced] ~ ~ ~]
75+ =/ fit
76+ |= target=itype:jibb
77+ ^- ?
78+ =/ edge=dgo:jibb [actual target *span:jibb *span:jibb]
79+ ?=(^ (dg-replay-edges:jibb ~[edge] st 64))
80+ ?. &((fit atom) (fit union)) ~[leaf+"plain literal replay declined"]
81+ ?: |((fit faced) (fit faced-case)) ~[leaf+"faced literal replay accepted"]
82+ ~
83+--
tests/lib/jibb-deferred-prepared.hoonnew file+114
@@ -0,0 +1,114 @@
1+:: Prepared-prelude initializer recovery remains a partial report only.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-deferred-prepared/good/txt
6+/* tuple-only %txt /tests/type-deferred-prepared/tuple-only/txt
7+/* wrong-unit %txt /tests/type-deferred-prepared/wrong-unit/txt
8+/* wrong-draft %txt /tests/type-deferred-prepared/wrong-draft/txt
9+/* unrelated-tag %txt /tests/type-deferred-prepared/unrelated-tag/txt
10+/* mold-collision %txt /tests/type-deferred-prepared/mold-collision/txt
11+/* no-final-cast %txt /tests/type-deferred-prepared/no-final-cast/txt
12+/* no-prelude %txt /tests/type-deferred-prepared/no-prelude/txt
13+/* main-source %txt /tests/type-deferred-prepared/main/txt
14+/* imported %txt /tests/type-deferred-prepared/imported/txt
15+/* expected %txt /tests/type-deferred-prepared/expected/txt
16+/* expected-control %txt /tests/type-deferred-prepared/expected-control/txt
17+/* expected-tuple-only %txt /tests/type-deferred-prepared/expected-tuple-only/txt
18+|%
19+++ text
20+ |= lines=wain
21+ ^- @t
22+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
23+++ check-prepared
24+ |= [where=path source=wain valid=?]
25+ ^- tang
26+ ?~ source ~[leaf+"source fixture missing"]
27+ =/ src=@t (text source)
28+ =/ parsed (parse:jibb where src)
29+ ?: ?=(%| -.parsed) ~[leaf+"source does not parse"]
30+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
31+ ?~ prepared ~[leaf+"prelude unavailable"]
32+ =/ recovered=? ?=(^ (dg-root-prepared:jibb where src u.prepared))
33+ ?. =(valid recovered) ~[leaf+"prepared initializer transaction result changed"]
34+ ~
35+++ check-no-prelude
36+ ^- tang
37+ =/ at=path /ui/prepared/jibb
38+ =/ src=@t (text no-prelude)
39+ ?: ?=(^ (dg-root-source:jibb at src))
40+ ~[leaf+"no-prelude source transaction recovered tuple initializer"]
41+ =/ legacy=jfile-result:jibb
42+ (infer-jibb-file:jibb at src ~ ~ ~ ~[at] ~ ~ ~ ~)
43+ ?: ?=(%& -.legacy) ~[leaf+"no-prelude resolver published recovered tuple initializer"]
44+ ~
45+++ check-ordinary
46+ ^- tang
47+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
48+ ?~ prepared ~[leaf+"prelude unavailable"]
49+ =/ at=path /ui/prepared/jibb
50+ =/ ordinary=jfile-result:jibb
51+ (infer-jibb-file:jibb at (text good) ~ ~ ~ ~[at] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
52+ ?: ?=(%& -.ordinary) ~[leaf+"ordinary full-module path published recovered initializer"]
53+ ~
54+++ check-report
55+ |= [source=wain wanted=wain]
56+ ^- tang
57+ ?~ source ~[leaf+"report source fixture missing"]
58+ ?~ wanted ~[leaf+"expected report fixture missing"]
59+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
60+ ?~ prepared ~[leaf+"prelude unavailable"]
61+ =/ report=@t (golden-types-with-prepared-prelude:jibb /ui/prepared/jibb (text source) ~ ~ ~ prepared)
62+ =/ report-lines=wain (to-wain:format (cat 3 report '\0a'))
63+ ?~ report-lines ~[leaf+"prepared report is empty"]
64+ ?. =('partial inference; module not checked' i.report-lines)
65+ ~[leaf+"partial disclaimer changed"]
66+ ?. =(report-lines wanted) ~[leaf+"prepared report differs from exact recovered types"]
67+ ~
68+++ check-prepared-binding
69+ ^- tang
70+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
71+ ?~ prepared ~[leaf+"prelude unavailable"]
72+ =/ at=path /ui/prepared/jibb
73+ =/ src=@t (text good)
74+ =/ pre=(unit ifile:jibb) `iface.u.prepared
75+ =/ report
76+ |= [vals=(list term) ms=(list term) p=(unit ifile:jibb) prep=(unit iprelude:jibb)]
77+ ^- @t
78+ (golden-types-in-context-core:jibb at src ~ ~ ~ vals ms p prep)
79+ =/ vals=(list term) values.u.prepared
80+ =/ ms=(list term) molds.u.prepared
81+ ?: =((report vals ms pre prepared) (report vals ms pre ~))
82+ ~[leaf+"exact prepared binding did not recover the initializer"]
83+ ?. =((report ~ ms pre prepared) (report ~ ms pre ~))
84+ ~[leaf+"mismatched value inventory reached prepared recovery"]
85+ ?. =((report vals ~ pre prepared) (report vals ~ pre ~))
86+ ~[leaf+"mismatched mold inventory reached prepared recovery"]
87+ ?. =((report vals ms ~ prepared) (report vals ms ~ ~))
88+ ~[leaf+"mismatched prelude interface reached prepared recovery"]
89+ ~
90+++ test-prepared
91+ ^- tang
92+ =/ at=path /ui/prepared/jibb
93+ =/ checks=(list tang)
94+ :~ (check-prepared at good &)
95+ (check-prepared at tuple-only &)
96+ (check-prepared at no-prelude &)
97+ (check-prepared at wrong-unit |)
98+ (check-prepared at wrong-draft |)
99+ (check-prepared at unrelated-tag |)
100+ (check-prepared at mold-collision |)
101+ (check-prepared at no-final-cast |)
102+ (check-prepared at main-source |)
103+ (check-prepared at imported |)
104+ (check-prepared /ui/api/prepared/jibb good |)
105+ (check-prepared /ui/stores/prepared/jibb good |)
106+ check-no-prelude
107+ check-ordinary
108+ check-prepared-binding
109+ (check-report good expected)
110+ (check-report tuple-only expected-tuple-only)
111+ (check-report no-final-cast expected-control)
112+ ==
113+ (zing checks)
114+--
tests/lib/jibb-deferred-resolver.hoonnew file+113
@@ -0,0 +1,113 @@
1+:: Source-level normal resolver and report integration; no island claim.
2+/+ jibb
3+/* good %txt /tests/type-deferred-resolver/good/txt
4+/* conflict %txt /tests/type-deferred-resolver/conflict/txt
5+/* missing %txt /tests/type-deferred-resolver/missing/txt
6+/* hole %txt /tests/type-deferred-resolver/hole/txt
7+/* duplicate %txt /tests/type-deferred-resolver/duplicate/txt
8+/* face %txt /tests/type-deferred-resolver/face/txt
9+/* store %txt /tests/type-deferred-resolver/store/txt
10+/* stability-early %txt /tests/type-deferred-resolver/stability-early/txt
11+/* stability-late %txt /tests/type-deferred-resolver/stability-late/txt
12+/* stability-simple-early %txt /tests/type-deferred-resolver/stability-simple-early/txt
13+/* stability-simple-late %txt /tests/type-deferred-resolver/stability-simple-late/txt
14+/* stability-output-early %txt /tests/type-deferred-resolver/stability-output-early/txt
15+/* stability-output-late %txt /tests/type-deferred-resolver/stability-output-late/txt
16+/* stability-slot-early %txt /tests/type-deferred-resolver/stability-slot-early/txt
17+/* stability-slot-late %txt /tests/type-deferred-resolver/stability-slot-late/txt
18+/* public %jibb /lib/jibb/prelude/jibb
19+/* internal %jibb /lib/jibb/internal/jibb
20+/* expected %txt /tests/type-deferred-resolver/expected/txt
21+|%
22+++ text
23+ |= lines=wain
24+ ^- @t
25+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
26+++ case-no-fallback
27+ |= [source=@t public=@t internal=@t]
28+ ^- @t
29+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
30+ ?~ prep 'BAD prelude'
31+ =/ plain=(each module:jibb error:jibb) (parse:jibb /ui/test/jibb source)
32+ ?: ?=(%| -.plain) 'BAD source parse:jibb'
33+ ?. (module-scope-valid:jibb p.plain values.u.prep molds.u.prep) 'BAD prelude scope'
34+ =/ prelude-result=jfile-result:jibb (infer-jibb-file:jibb /ui/test/jibb source ~ ~ ~ ~[/ui/test/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35+ ?: ?=(%& -.prelude-result) 'BAD prepared prelude fallback'
36+ =/ imported-source=@t (cat 3 '/= dep /ui/dep\0a' source)
37+ =/ dependencies=jbundle:jibb ~[[/ui/dep/jibb '++ value 1']]
38+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /ui/test/jibb imported-source)
39+ ?: ?=(%| -.parsed) 'BAD import source parse:jibb'
40+ =/ deps=jimports-result:jibb (resolve-jibb-imports:jibb imports.p.parsed ~ ~ dependencies ~[/ui/test/jibb] ~ ~ ~ ~)
41+ ?: ?=(%| -.deps) 'BAD dependency resolution'
42+ =/ imported-result=jfile-result:jibb (infer-jibb-file:jibb /ui/test/jibb imported-source ~ ~ dependencies ~[/ui/test/jibb] ~ ~ ~ ~)
43+ ?: ?=(%& -.imported-result) 'BAD imported fallback'
44+ 'prelude and import fallback declined'
45+++ resolver-report
46+ |= [good=@t conflict=@t missing=@t hole=@t duplicate=@t face=@t store=@t public=@t internal=@t]
47+ ^- @t
48+ =/ lines=(list @t)
49+ =/ at=path /ui/obligation/jibb
50+ =/ expect-reject
51+ |= [label=@t source=@t]
52+ ^- @t
53+ =/ parsed (parse:jibb at source)
54+ ?: ?=(%| -.parsed) (crip "BAD-{(trip label)}-parse")
55+ =/ got=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
56+ ?:(?=(%| -.got) (crip "{(trip label)} rejected without interface") (crip "BAD-{(trip label)}-published"))
57+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at good ~ ~ ~ ~[at] ~ ~ ~ ~)
58+ ?: ?=(%| -.result) ~[(crip "BAD-valid: {(trip p.result)}")]
59+ =/ iface=ifile:jibb iface.p.result
60+ =/ built=(unit ischeme:jibb) (ienv-lookup:jibb %built values.iface)
61+ ?~ built ~['BAD-missing-built']
62+ =/ text=(unit ischeme:jibb) (ienv-lookup:jibb %reveal values.iface)
63+ =/ ship=(unit ischeme:jibb) (ienv-lookup:jibb %reveal-ship values.iface)
64+ ?~ text ~['BAD-missing-text']
65+ ?~ ship ~['BAD-missing-ship']
66+ =/ report=@t (golden-types-with-marks:jibb at good ~ ~)
67+ =/ store-at=path /ui/stores/test/jibb
68+ =/ store-parsed (parse:jibb store-at store)
69+ ?: ?=(%| -.store-parsed) ~['BAD-store-parse']
70+ =/ store-result=jfile-result:jibb (infer-jibb-file:jibb store-at store ~ ~ ~ ~[store-at] ~ ~ ~ ~)
71+ =/ shown=itype:jibb (canonical-itype:jibb typ.u.built vars.u.built)
72+ :~ ?:(?=(^ vars.u.built) 'interface retains independent polymorphism' 'BAD-principal')
73+ ?:(?=([%atom %t] typ.u.text) 'text use inferred' 'BAD-text')
74+ ?:(?=([%atom %p] typ.u.ship) 'ship use inferred' 'BAD-ship')
75+ (crip "stored built: {(show-itype:jibb shown ~)}")
76+ report
77+ (expect-reject 'conflict' conflict)
78+ (expect-reject 'missing' missing)
79+ (expect-reject 'hole' hole)
80+ (expect-reject 'duplicate' duplicate)
81+ (expect-reject 'face' face)
82+ ?:(?=(%| -.store-result) 'store declined without interface' 'BAD-store-published')
83+ 'conflict report:'
84+ (golden-types-with-marks:jibb at conflict ~ ~)
85+ 'store report:'
86+ (golden-types-with-marks:jibb store-at store ~ ~)
87+ ==
88+ =. lines (snoc lines (case-no-fallback good public internal))
89+ (of-wain:format lines)
90+++ test-deferred-resolver
91+ ^- tang
92+ =/ result=@t (resolver-report (text good) (text conflict) (text missing) (text hole) (text duplicate) (text face) (text store) public internal)
93+ ?. =((to-wain:format (cat 3 result '\0a')) expected) ~[leaf+"deferred resolver report differs"]
94+ =/ closed=itype:jibb [%cell [%face %foo [%atom %t]] [%atom %t]]
95+ =/ open=itype:jibb [%cell [%face %foo [%var 500]] [%atom %t]]
96+ =/ tag=itype:jibb [%tag 501 *lit:jibb |]
97+ ?. (dg-stable-call-fit:jibb closed closed [%atom %t] ~ &) ~[leaf+"closed positional fit declined"]
98+ ?: (dg-stable-call-fit:jibb open open [%atom %t] ~ &) ~[leaf+"open positional face accepted"]
99+ ?: (dg-stable-call-fit:jibb closed closed tag ~ &) ~[leaf+"pending positional result accepted"]
100+ ?. (dg-stable-call-fit:jibb open open [%atom %t] ~ |) ~[leaf+"equal single argument declined"]
101+ =/ samples=(list wain)
102+ ~[stability-early stability-late stability-simple-early stability-simple-late stability-output-early stability-output-late stability-slot-early stability-slot-late]
103+ |-
104+ ?~ samples ~
105+ ?~ i.samples ~[leaf+"deferred stability source missing"]
106+ =/ at=path /ui/stability/jibb
107+ =/ src=@t (text i.samples)
108+ =/ parsed (parse:jibb at src)
109+ ?: ?=(%| -.parsed) ~[leaf+"deferred stability source does not parse"]
110+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at src ~ ~ ~ ~[at] ~ ~ ~ ~)
111+ ?: ?=(%& -.result) ~[leaf+"unstable deferred fit published an interface"]
112+ $(samples t.samples)
113+--
tests/lib/jibb-deferred.hoonnew file+244
@@ -0,0 +1,244 @@
1+:: Partial source-owned deferred type transaction; not module or island validation.
2+/+ jibb
3+/* nested-src %txt /tests/type-deferred/nested-src/txt
4+/* principal-src %txt /tests/type-deferred/principal-src/txt
5+/* missing-src %txt /tests/type-deferred/missing-src/txt
6+/* conflict-src %txt /tests/type-deferred/conflict-src/txt
7+/* duplicate-src %txt /tests/type-deferred/duplicate-src/txt
8+/* hole-src %txt /tests/type-deferred/hole-src/txt
9+/* local-src %txt /tests/type-deferred/local-src/txt
10+/* mutual-src %txt /tests/type-deferred/mutual-src/txt
11+/* mold-hole-src %txt /tests/type-deferred/mold-hole-src/txt
12+/* face-good-src %txt /tests/type-deferred/face-good-src/txt
13+/* face-bad-src %txt /tests/type-deferred/face-bad-src/txt
14+/* expected %txt /tests/type-deferred/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ case-nested
21+ |= source=@t
22+ ^- (list @t)
23+ =/ result=(unit dgcommit:jibb) (checked-source /ui/obligation/jibb source)
24+ ?~ result ~['BAD-nested-transaction']
25+ =/ nested=(unit ischeme:jibb) (ienv-lookup:jibb %nested env.u.result)
26+ =/ alias=(unit ischeme:jibb) (ienv-lookup:jibb %alias env.u.result)
27+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main env.u.result)
28+ ?~ nested ~['BAD-nested']
29+ ?~ alias ~['BAD-alias']
30+ ?~ main ~['BAD-main']
31+ :~ ?:(=(typ.u.nested typ.u.alias) 'nested lexical gate and alias agree' 'BAD-alias-type')
32+ ?:(=(typ.u.nested typ.u.main) 'later source context closes nested constructor' 'BAD-main-type')
33+ ?:(!(pending-tags:jibb tags.state.u.result sub.state.u.result) 'nested obligation discharged' 'BAD-pending')
34+ ==
35+++ case-principal
36+ |= source=@t
37+ ^- (list @t)
38+ =/ result=(unit dgcommit:jibb) (checked-source /ui/obligation/jibb source)
39+ ?~ result ~['BAD-root-transaction']
40+ =/ built=(unit ischeme:jibb) (ienv-lookup:jibb %built env.u.result)
41+ =/ text=(unit ischeme:jibb) (ienv-lookup:jibb %reveal env.u.result)
42+ =/ ship=(unit ischeme:jibb) (ienv-lookup:jibb %reveal-ship env.u.result)
43+ ?~ built ~['BAD-built']
44+ ?~ text ~['BAD-text']
45+ ?~ ship ~['BAD-ship']
46+ :~ ?:(?=(^ vars.u.built) 'independent built result stays polymorphic' 'BAD-principal')
47+ ?:(?=([%atom %t] typ.u.text) 'text use inferred' 'BAD-text-type')
48+ ?:(?=([%atom %p] typ.u.ship) 'ship use inferred independently' 'BAD-ship-type')
49+ ==
50+++ case-negative
51+ |= [missing=@t conflict=@t duplicate=@t hole=@t]
52+ ^- (list @t)
53+ :~ ?:(?=(~ (checked-source /ui/obligation/jibb missing)) 'missing constructor leaves no result' 'BAD-missing')
54+ ?:(?=(~ (checked-source /ui/obligation/jibb conflict)) 'conflicting context leaves no result' 'BAD-conflict')
55+ ?:(?=(~ (checked-source /ui/obligation/jibb duplicate)) 'duplicate source binding declined' 'BAD-duplicate')
56+ ?:(?=(~ (checked-source /ui/obligation/jibb hole)) 'definition hole does not escape' 'BAD-hole')
57+ ==
58+++ case-groups
59+ |= [local=@t mutual=@t]
60+ ^- (list @t)
61+ :~ ?:(?=(~ (checked-source /ui/obligation/jibb local)) 'local deferred definition declined' 'BAD-local')
62+ ?:(?=(~ (checked-source /ui/obligation/jibb mutual)) 'recursive deferred group declined' 'BAD-group')
63+ ==
64+++ case-mold-hole
65+ |= hole=@t
66+ ^- (list @t)
67+ :~ ?:(?=(~ (checked-source /ui/a/jibb hole)) 'unused mold hole declined' 'unused mold hole committed')
68+ ==
69+++ case-fresh
70+ ^- (list @t)
71+ =/ env=ienv:jibb ~[[%x [[%fn [%var 1.000.007] [%var 1.000.007]] ~[1.000.007 2.000.001]]]]
72+ =/ scanned=(unit dgscan:jibb) (dg-all-env-ids:jibb env 200 ~)
73+ =/ small=(unit dgscan:jibb) (dg-all-env-ids:jibb env 1 ~)
74+ ?~ scanned ~['BAD-scan']
75+ :~ ?:(=(2.000.002 (dg-next-id:jibb ids.u.scanned 0)) 'fresh ID exceeds raw and quantified IDs' 'BAD-fresh')
76+ ?:(?=(~ small) 'fresh ID scan respects budget' 'BAD-fuel')
77+ ==
78+++ case-safety
79+ ^- (list @t)
80+ =/ actual=itype:jibb [%cell [%atom %ud] [%cell [%face %wrong [%atom %t]] [%atom %p]]]
81+ =/ expected=itype:jibb [%cell [%atom %ud] [%var 0]]
82+ =/ correct=itype:jibb [%cell [%face %right [%atom %t]] [%atom %p]]
83+ =/ bound=isub:jibb ~[[0 correct]]
84+ =/ with-binding=ifit:jibb (itype-fit:jibb actual expected bound 1)
85+ =/ dropped=ifit:jibb (itype-fit:jibb actual expected ~ 1)
86+ =/ open-edges=(list dgo:jibb) ~[[[%var 20] [%var 21] *span:jibb *span:jibb]]
87+ =/ st=istate:jibb *istate:jibb
88+ =. st st(next 2.000.002)
89+ =/ partial=(unit istate:jibb) (dg-replay-edges:jibb open-edges st 64)
90+ ?~ partial ~['BAD-partial-replay']
91+ =/ still-open=(unit dgscan:jibb) (dg-obligations:jibb open-edges sub.u.partial 100 ~)
92+ ?~ still-open ~['BAD-open-scan']
93+ =/ tag-literal=lit:jibb [%term %tas %got '%got']
94+ =/ target=itype:jibb [%fn [%atom %t] [%union ~[[%cell [%const tag-literal] [%face %value [%atom %t]]]] ~ ~ ~]]
95+ =/ edge=dgo:jibb [[%tag 10 tag-literal &] target *span:jibb *span:jibb]
96+ =/ complete=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] st 64)
97+ ?~ complete ~['BAD-complete-replay']
98+ =/ closed=(unit dgscan:jibb) (dg-obligations:jibb ~[edge] sub.u.complete 100 ~)
99+ ?~ closed ~['BAD-closed-scan']
100+ =/ repeated=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] u.complete 64)
101+ ?~ repeated ~['BAD-final-replay']
102+ =/ open-env=ienv:jibb ~[[%x [[%var 55] ~]]]
103+ =/ raw-atom=itype:jibb [%var 900]
104+ =/ atom-sub=isub:jibb ~[[900 [%avar 901]]]
105+ =/ normalized-atom=itype:jibb (itype-normalize:jibb raw-atom atom-sub)
106+ =/ capture-state=istate:jibb st(sub ~[[500 [%var 42]]])
107+ =/ capture-env=ienv:jibb ~[[%polymorphic [[%fn [%var 42] [%var 500]] ~[42]]]]
108+ =/ capture-check=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 42] [%var 43]] capture-env ~ ~ ~ capture-state 300)
109+ ?~ capture-check ~['BAD-capture-scan']
110+ =/ explicit-capture=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 80] [%var 81]] ~ ~ ~ ~[80] st 300)
111+ ?~ explicit-capture ~['BAD-explicit-capture-scan']
112+ =/ tag-lit=lit:jibb [%term %tas %watch '%watch']
113+ =/ bound-tag-state=istate:jibb st(sub ~[[720 [%var 721]]])
114+ =/ tag-check=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 721] [%var 722]] ~ ~ ~[[720 tag-lit]] ~ bound-tag-state 300)
115+ ?~ tag-check ~['BAD-tag-scan']
116+ =/ cycle=(list dgo:jibb) ~[[[%var 710] [%var 711] *span:jibb *span:jibb] [[%var 711] [%var 712] *span:jibb *span:jibb] [[%var 712] [%var 710] *span:jibb *span:jibb]]
117+ =/ cyc=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 710] [%fn [%var 712] [%var 713]]] ~ cycle ~ ~ st 300)
118+ ?~ cyc ~['BAD-cycle-scan']
119+ :~ ?:(!?=(%ok -.with-binding) 'original structural binding rejects wrong face' 'BAD-wrong-face')
120+ ?:(?=(%ok -.dropped) 'dropping binding would accept wrong face' 'BAD-counterexample')
121+ ?:(?=(^ ids.u.still-open) 'unresolved edge remains open after fit' 'BAD-open-edge')
122+ ?:(?=(~ ids.u.closed) 'closed constructor edge has no free IDs' 'BAD-closed-edge')
123+ ?:(&(=(sub.u.repeated sub.u.complete) =(next.u.repeated next.u.complete)) 'final replay is unchanged' 'BAD-final-state')
124+ ?:(?=(~ (dg-close-env:jibb open-env ~ 100)) 'open interface stays unpublished' 'BAD-open-interface')
125+ ?:(!(unsupported-atom-vars:jibb raw-atom ~ ~ atom-sub) 'raw bound variable hides atom constraint' 'BAD-raw-atom')
126+ ?:((unsupported-atom-vars:jibb normalized-atom ~ ~ atom-sub) 'normalized unsupported atom constraint rejected' 'BAD-normalized-atom')
127+ ?:(=(vars.u.capture-check ~[43]) 'scheme-local quantifier cannot hide captured ID' 'BAD-capture')
128+ ?:(=(vars.u.explicit-capture ~[81]) 'captured outer variable remains monomorphic' 'BAD-explicit-capture')
129+ ?:(=(vars.u.tag-check ~[722]) 'pending tag binding keeps reachable variable monomorphic' 'BAD-tag-binding')
130+ ?:(=(vars.u.cyc ~[713]) 'recursive obligation component stays monomorphic' 'BAD-cycle')
131+ ==
132+++ case-face-source
133+ |= [good-src=@t bad-src=@t]
134+ ^- (list @t)
135+ =/ good=(unit dgcommit:jibb) (checked-source /ui/test/jibb good-src)
136+ =/ bad=(unit dgcommit:jibb) (checked-source /ui/test/jibb bad-src)
137+ :~ ?:(?=(^ good) 'faced callback source accepted' 'BAD-faced-source')
138+ ?:(?=(~ bad) 'wrong nested callback face rejected' 'BAD-wrong-face-source')
139+ ==
140+++ case-face-replay
141+ ^- (list @t)
142+ =/ tag=lit:jibb [%term %tas %got '%got']
143+ =/ cases=(list itype:jibb) ~[[%cell [%const tag] [%face %value [%atom %t]]]]
144+ =/ callback=itype:jibb [%fn [%face %value [%atom %t]] [%union cases ~ ~ ~]]
145+ =/ edge=dgo:jibb [[%tag 10 tag &] callback *span:jibb *span:jibb]
146+ =/ st=istate:jibb *istate:jibb
147+ =. st st(next 20)
148+ =/ solved=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] st 64)
149+ ?~ solved ~['BAD-faced-replay']
150+ =/ after-left=itype:jibb (itype-walk:jibb left.edge sub.u.solved)
151+ =/ after-right=itype:jibb (itype-walk:jibb right.edge sub.u.solved)
152+ =/ record-output=itype:jibb [%cell [%face %answer [%atom %t]] [%atom %p]]
153+ =/ wrong=itype:jibb [%fn [%face %different [%atom %t]] [%union cases ~ ~ ~]]
154+ =/ hostile=istate:jibb st(sub ~[[10 wrong]])
155+ =/ rejected=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] hostile 64)
156+ :~ ?:(=(after-left after-right) 'constructor resolves to exact callback' 'BAD-not-exact')
157+ ?:((itype-has-face:jibb left.edge sub.u.solved) 'callback retains its face' 'BAD-face-lost')
158+ ?:(!(itype-face-asym:jibb left.edge right.edge sub.u.solved) 'post-fit face asymmetry is absent' 'BAD-face-asymmetry')
159+ ?:((itype-output-may-be-cell:jibb record-output sub.u.solved) 'record output stays cell-capable' 'BAD-output')
160+ ?:(?=(~ rejected) 'prebound incompatible callback is rejected' 'BAD-incompatible')
161+ ==
162+++ checked-source
163+ |= [at=path source=@t]
164+ ^- (unit dgcommit:jibb)
165+ =/ detail=dgparse:jibb (dg-root-detail:jibb at source)
166+ ?> parsed.detail
167+ result.detail
168+++ case-grec-scan
169+ ^- (list @t)
170+ =/ tree=itype:jibb [%grec /ui/test/jibb %tree ~ *shape:jibb ~[[%var 7]]]
171+ =/ bounded=(unit dgscan:jibb) (dg-scan:jibb ~[tree] ~ 256 ~)
172+ =/ env=ienv:jibb ~[[%t [tree ~[7]]]]
173+ =/ all=(unit dgscan:jibb) (dg-all-env-ids:jibb env 256 ~)
174+ :~ ?:(?=(~ bounded) 'grec constraint scan declines' 'BAD-grec-scan')
175+ ?:(?=(~ all) 'grec fresh-id scan declines' 'BAD-grec-freshness')
176+ ==
177+++ case-default-behavior
178+ ^- @t
179+ =/ parsed (parse:jibb /ui/test/jibb '++ example (send |=%got)')
180+ ?: ?=(%| -.parsed) 'BAD parse'
181+ ?~ defs.p.parsed 'BAD missing definition'
182+ =/ d=def:jibb i.defs.p.parsed
183+ ?. ?=(%value -.d) 'BAD not value'
184+ =/ callback=itype:jibb [%fn [%atom %t] [%var 100]]
185+ =/ head=itype:jibb [%fn callback callback]
186+ =/ env=ienv:jibb ~[[%send [head ~[100]]]]
187+ =/ state=istate:jibb *istate:jibb
188+ =/ ordinary=iresult:jibb (infer-fragment:jibb val.d env state)
189+ ?: ?=(%& -.ordinary) 'BAD default deferred inference accepted'
190+ =/ enabled=iresult:jibb (infer-fragment:jibb val.d env state(defer `~))
191+ ?: ?=(%| -.enabled) 'BAD explicit capability failed'
192+ ?~ obligations.state.p.enabled 'BAD missing obligation'
193+ 'default inference declines; explicit capability creates obligation'
194+++ case-screen-bounds
195+ ^- @t
196+ =/ parsed (parse:jibb /ui/test/jibb '++ example (send |=%got)\0a++ other 1\0a')
197+ ?: ?=(%| -.parsed) 'BAD parse'
198+ =/ ds=(list def:jibb) defs.p.parsed
199+ ?. ?=([* [* ~]] ds) 'BAD definitions'
200+ =/ good=def:jibb i.ds
201+ =/ other=def:jibb i.t.ds
202+ ?. &(?=(%value -.good) ?=(%value -.other)) 'BAD value types'
203+ =/ raw=expr:jibb val.good
204+ ?. ?=(%group -.raw) 'BAD group'
205+ =/ call=expr:jibb inner.raw
206+ ?. ?=(%call -.call) 'BAD call'
207+ =/ wrap
208+ |= [n=@ud e=expr:jibb]
209+ ^- expr:jibb
210+ |-
211+ ?~ n e
212+ $(n (dec n), e [%group (span-of:jibb e) e])
213+ =/ w63=expr:jibb (wrap 63 call)
214+ =/ w64=expr:jibb (wrap 64 call)
215+ ?. (dg-direct-source:jibb w63 64) 'BAD 63 wrappers rejected'
216+ ?: (dg-direct-source:jibb w64 64) 'BAD 64 wrappers accepted'
217+ =/ exact=(list def:jibb) (weld (reap 63 other) ~[good])
218+ =/ over=(list def:jibb) [other exact]
219+ ?. (dg-source-candidate:jibb exact 64) 'BAD exact definitions rejected'
220+ ?: (dg-source-candidate:jibb over 64) 'BAD excessive definitions accepted'
221+ =/ unsupported=expr:jibb [%trace (span-of:jibb call) call call]
222+ ?: (dg-direct-source:jibb unsupported 64) 'BAD unsupported wrapper accepted'
223+ 'candidate screen boundaries passed'
224+++ deferred-report
225+ |= [nested-src=@t principal-src=@t missing-src=@t conflict-src=@t duplicate-src=@t hole-src=@t local-src=@t mutual-src=@t mold-hole-src=@t face-good-src=@t face-bad-src=@t]
226+ ^- @t
227+ =/ lines=(list @t) (case-nested nested-src)
228+ =. lines (weld lines (case-principal principal-src))
229+ =. lines (weld lines (case-negative missing-src conflict-src duplicate-src hole-src))
230+ =. lines (weld lines (case-groups local-src mutual-src))
231+ =. lines (weld lines (case-mold-hole mold-hole-src))
232+ =. lines (weld lines case-fresh)
233+ =. lines (weld lines case-safety)
234+ =. lines (weld lines (case-face-source face-good-src face-bad-src))
235+ =. lines (weld lines case-face-replay)
236+ =. lines (weld lines case-grec-scan)
237+ =. lines (weld lines ~[case-default-behavior case-screen-bounds])
238+ (of-wain:format lines)
239+++ test-deferred
240+ ^- tang
241+ =/ result=@t (deferred-report (text nested-src) (text principal-src) (text missing-src) (text conflict-src) (text duplicate-src) (text hole-src) (text local-src) (text mutual-src) (text mold-hole-src) (text face-good-src) (text face-bad-src))
242+ ?. =((to-wain:format (cat 3 result '\0a')) expected) ~[leaf+"deferred partial transaction report differs"]
243+ ~
244+--
tests/lib/jibb-direct-gate-source.hoon+3−3
@@ -12,8 +12,8 @@
1212++ direct-gate-prepared
1313 |= [prelude=@t internal=@t]
1414 ^- (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'
15+ :: Program and element come from the real prelude; only layout helpers are synthetic.
16+ =/ extra=@t '\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'
1717 (prepare-prelude-with-internal:jibb (cat 3 prelude extra) internal)
1818++ direct-gate-source-output
1919 |= [src=@t prepared=(unit iprelude:jibb)]
@@ -23,7 +23,7 @@
2323 |= prepared=(unit iprelude:jibb)
2424 ^- (list tape)
2525 ?~ 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'
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) (text "view")\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'
2727 =/ 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)
2828 ?: ?=(%| -.out) ~["projection-bearing module did not infer"]
2929 =/ defs=(list iwidth-definition:jibb) (skim elaborations.iface.p.out |=(d=iwidth-definition:jibb =(%update-proj-good name.d)))
tests/lib/jibb-empty.hoonnew file+174
@@ -0,0 +1,174 @@
1+:: Source-backed empty-mold checks; no backend/runtime claim.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-empty/good/txt
6+/* overlap %txt /tests/type-empty/overlap/txt
7+/* dead %txt /tests/type-empty/dead/txt
8+/* missing %txt /tests/type-empty/missing/txt
9+/* standard-good %txt /tests/type-empty/standard-good/txt
10+/* list-dead %txt /tests/type-empty/list-dead/txt
11+/* unit-dead %txt /tests/type-empty/unit-dead/txt
12+/* late-cap %txt /tests/type-empty/late-cap/txt
13+/* list-live %txt /tests/type-empty/list-live/txt
14+/* list-open %txt /tests/type-empty/list-open/txt
15+/* face-source %txt /tests/type-empty/face-source/txt
16+/* expected %txt /tests/type-empty/expected/txt
17+|%
18+++ text
19+ |= lines=wain
20+ ^- @t
21+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
22+++ line
23+ |= [label=@t ok=?]
24+ ^- @t
25+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
26+++ face-retained
27+ |= [source=@t prelude=ifile:jibb]
28+ ^- ?
29+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb source)
30+ ?: ?=(%| -.parsed) |
31+ =/ ds=(list def:jibb) defs.p.parsed
32+ ?. ?=([* ~] ds) |
33+ =/ d=def:jibb i.ds
34+ ?. ?=(%value -.d) |
35+ =/ typ=itype:jibb [%collection %list ~[[%empty ~]]]
36+ =/ env=ienv:jibb ~[[%xs [typ ~]]]
37+ =/ state=istate:jibb *istate:jibb
38+ =. state state(prelude `prelude, jrec-fuel 256)
39+ =/ expected=itype:jibb [%cell [%atom %t] [%atom %t]]
40+ =/ result=(unit iresult:jibb)
41+ (empty-list-null-branch:jibb val.d env state `[expected (span-of:jibb val.d)])
42+ ?~ result |
43+ ?: ?=(%| -.u.result) |
44+ (itype-has-face:jibb typ.p.u.result sub.state.p.u.result)
45+++ empty-output
46+ |= [pre=@t internal=@t good=@t overlap=@t dead=@t missing=@t standard-good=@t list-dead=@t unit-dead=@t late-cap=@t list-live=@t list-open=@t face-source=@t]
47+ ^- @t
48+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
49+ ?~ prep 'BAD prelude preparation'
50+ =/ f=path /tests/empty/jibb
51+ =/ valid=jfile-result:jibb (infer-jibb-file:jibb f good ~ ~ ~ ~[f] ~ ~ ~ ~)
52+ ?: ?=(%| -.valid) 'BAD checked empty source'
53+ =/ never=(unit ischeme:jibb) (find-jibb-mold:jibb %never iface.p.valid)
54+ ?~ never 'BAD never export'
55+ =/ select=(unit ischeme:jibb) (ienv-lookup:jibb %select values.iface.p.valid)
56+ ?~ select 'BAD select export'
57+ =/ split=(unit ischeme:jibb) (find-jibb-mold:jibb %split iface.p.valid)
58+ ?~ split 'BAD split export'
59+ ?. ?=(%fn -.typ.u.select) 'BAD select gate'
60+ =/ selected=itype:jibb sample.typ.u.select
61+ =? selected ?=(%face -.selected) body.selected
62+ =/ parsed-overlap=(each module:jibb error:jibb) (parse:jibb f overlap)
63+ =/ parsed-dead=(each module:jibb error:jibb) (parse:jibb f dead)
64+ =/ parsed-missing=(each module:jibb error:jibb) (parse:jibb f missing)
65+ =/ parsed-list=(each module:jibb error:jibb) (parse:jibb f list-dead)
66+ =/ parsed-unit=(each module:jibb error:jibb) (parse:jibb f unit-dead)
67+ =/ invalid=jfile-result:jibb (infer-jibb-file:jibb f overlap ~ ~ ~ ~[f] ~ ~ ~ ~)
68+ =/ dead-result=jfile-result:jibb (infer-jibb-file:jibb f dead ~ ~ ~ ~[f] ~ ~ ~ ~)
69+ =/ missing-result=jfile-result:jibb (infer-jibb-file:jibb f missing ~ ~ ~ ~[f] ~ ~ ~ ~)
70+ =/ standard=jfile-result:jibb (infer-jibb-file:jibb f standard-good ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
71+ =/ only=(unit ischeme:jibb)
72+ ?- -.standard
73+ %& (ienv-lookup:jibb %list-only values.iface.p.standard)
74+ %| ~
75+ ==
76+ =/ only-context=(unit ischeme:jibb)
77+ ?- -.standard
78+ %& (ienv-lookup:jibb %list-only-context values.iface.p.standard)
79+ %| ~
80+ ==
81+ =/ only-good=?
82+ ?~ only |
83+ ?. ?=(%fn -.typ.u.only) |
84+ =/ sample=itype:jibb sample.typ.u.only
85+ =? sample ?=(%face -.sample) body.sample
86+ &(=(sample [%collection %list ~[[%empty ~]]]) =(product.typ.u.only [%atom %t]))
87+ =/ parsed-live=(each module:jibb error:jibb) (parse:jibb f list-live)
88+ =/ parsed-open=(each module:jibb error:jibb) (parse:jibb f list-open)
89+ =/ live-result=jfile-result:jibb (infer-jibb-file:jibb f list-live ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
90+ =/ open-result=jfile-result:jibb (infer-jibb-file:jibb f list-open ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
91+ =/ bad-list=jfile-result:jibb (infer-jibb-file:jibb f list-dead ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
92+ =/ bad-unit=jfile-result:jibb (infer-jibb-file:jibb f unit-dead ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
93+ =/ atom=itype:jibb [%atom %t]
94+ =/ void=itype:jibb [%empty ~]
95+ =/ fn=itype:jibb [%fn atom atom]
96+ =/ impossible=itype:jibb [%cell fn [%face %field void]]
97+ =/ singleton=itype:jibb [%collection %list ~[void]]
98+ =/ proof=(unit [empty=? left=@ud]) (itype-empty-proof:jibb impossible ~ 4)
99+ =/ list-proof=(unit [empty=? left=@ud]) (itype-empty-proof:jibb singleton ~ 4)
100+ =/ fn-proof=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%fn void void] ~ 4)
101+ =/ unknown=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%var 23] ~ 4)
102+ =/ too-short=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%face %field void] ~ 1)
103+ =/ enough=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%face %field void] ~ 2)
104+ =/ empty-fit=ifit:jibb (itype-fit:jibb void atom ~ 17)
105+ =/ nested-fit=ifit:jibb (itype-fit:jibb impossible atom ~ 17)
106+ =/ atom-fit=ifit:jibb (itype-fit:jibb atom void ~ 17)
107+ =/ cap=icaps:jibb ~[['A' 23 *span:jibb]]
108+ =/ open-live=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb [%var 23] ~ ~ 4)
109+ =/ capital-live=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb [%var 23] ~ cap 4)
110+ =/ bound-empty=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb [%var 23] ~[[23 void]] cap 4)
111+ =/ opaque=itype:jibb [%recursive %opaque %mold ~]
112+ =/ opaque-live=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb opaque ~ ~ 4)
113+ =/ rejected-cases=(unit (list itype:jibb)) (itype-live-cases:jibb ~[opaque] ~ ~ 4)
114+ =/ no-gates=igate-free:jibb (gate-free-type:jibb impossible 8 ~)
115+ =/ list-gates=igate-free:jibb (gate-free-type:jibb singleton 8 ~)
116+ =/ checks=(list [label=@t ok=?])
117+ :~ ['empty mold exported' =([%empty ~] typ.u.never)]
118+ ['live union selector preserves type' &(=(typ.u.split selected) =([%atom %t] product.typ.u.select))]
119+ ['overlap parses and is rejected' &(?=(%& -.parsed-overlap) ?=(%| -.invalid))]
120+ ['dead empty case parses and is rejected' &(?=(%& -.parsed-dead) ?=(%| -.dead-result))]
121+ ['missing live case parses and is rejected' &(?=(%& -.parsed-missing) ?=(%| -.missing-result))]
122+ ['standard list and unit identities checked' ?=(%& -.standard)]
123+ ['single null list gate keeps its exact sample and result' only-good]
124+ ['contextual single null list gate checks' ?=(^ only-context)]
125+ ['contextual single null list arm retains faces' (face-retained face-source iface.u.prep)]
126+ ['one null arm on inhabited list declines' &(?=(%& -.parsed-live) ?=(%| -.live-result))]
127+ ['one null arm on generic list declines' &(?=(%& -.parsed-open) ?=(%| -.open-result))]
128+ ['empty list nonempty arm parses and is rejected' &(?=(%& -.parsed-list) ?=(%| -.bad-list))]
129+ ['empty unit present arm parses and is rejected' &(?=(%& -.parsed-unit) ?=(%| -.bad-unit))]
130+ ['nested empty proof' ?:(?=(~ proof) | empty.u.proof)]
131+ ['list of empty is inhabited' ?:(?=(~ list-proof) | !empty.u.list-proof)]
132+ ['gate returning empty is not empty' ?:(?=(~ fn-proof) | !empty.u.fn-proof)]
133+ ['unbound type not proved empty' ?:(?=(~ unknown) | !empty.u.unknown)]
134+ ['unbound inference type reachability unknown' ?:(?=(~ open-live) | =(%unknown result.u.open-live))]
135+ ['written capital can have a value' ?:(?=(~ capital-live) | =(%yes result.u.capital-live))]
136+ ['bound empty capital is unreachable' ?:(?=(~ bound-empty) | =(%no result.u.bound-empty))]
137+ ['opaque recursion reachability unknown' ?:(?=(~ opaque-live) | =(%unknown result.u.opaque-live))]
138+ ['opaque union case declines coverage proof' ?=(~ rejected-cases)]
139+ ['one proof node exhausted' ?=(~ too-short)]
140+ ['two proof nodes succeed' ?:(?=(~ enough) | &(empty.u.enough =(0 left.u.enough)))]
141+ ['empty fits a concrete type' ?=(%ok -.empty-fit)]
142+ ['empty cell fits a concrete type' ?=(%ok -.nested-fit)]
143+ ['inhabited atom does not fit empty' ?=(%bad -.atom-fit)]
144+ ['empty gate-bearing cell is gate-free' &(=(%yes verdict.no-gates) !inhabited.no-gates)]
145+ ['list of empty is gate-free and inhabited' &(=(%yes verdict.list-gates) inhabited.list-gates)]
146+ ==
147+ =/ report=@t (golden-types-in-context:jibb f good ~ ~ ~ ~ ~ ~)
148+ =/ overlap-report=@t (golden-types-in-context:jibb f overlap ~ ~ ~ ~ ~ ~)
149+ =/ dead-report=@t (golden-types-in-context:jibb f dead ~ ~ ~ ~ ~ ~)
150+ =/ missing-report=@t (golden-types-in-context:jibb f missing ~ ~ ~ ~ ~ ~)
151+ =/ list-report=@t (golden-types-with-prepared-prelude:jibb f list-dead ~ ~ ~ prep)
152+ =/ unit-report=@t (golden-types-with-prepared-prelude:jibb f unit-dead ~ ~ ~ prep)
153+ =/ late-report=@t (golden-types-with-prepared-prelude:jibb f late-cap ~ ~ ~ prep)
154+ (rap 3 ~[(of-wain:format (turn checks line)) '\0a' report '\0a' overlap-report '\0a' dead-report '\0a' missing-report '\0a' list-report '\0a' unit-report '\0a' late-report])
155+++ test-empty
156+ ^- tang
157+ ?~ good ~[leaf+"empty source missing"]
158+ ?~ overlap ~[leaf+"overlap source missing"]
159+ ?~ dead ~[leaf+"dead case source missing"]
160+ ?~ missing ~[leaf+"missing case source missing"]
161+ ?~ standard-good ~[leaf+"standard type source missing"]
162+ ?~ list-dead ~[leaf+"empty list source missing"]
163+ ?~ unit-dead ~[leaf+"empty unit source missing"]
164+ ?~ late-cap ~[leaf+"late capital source missing"]
165+ ?~ list-live ~[leaf+"inhabited list source missing"]
166+ ?~ list-open ~[leaf+"generic list source missing"]
167+ ?~ face-source ~[leaf+"face source missing"]
168+ ?~ expected ~[leaf+"expected output missing"]
169+ =/ actual=@t
170+ (empty-output real-prelude real-internal (text good) (text overlap) (text dead) (text missing) (text standard-good) (text list-dead) (text unit-dead) (text late-cap) (text list-live) (text list-open) (text face-source))
171+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
172+ ~[leaf+"empty mold output differs from expected"]
173+ ~
174+--
tests/lib/jibb-full-overlap-basic.hoonnew file+143
@@ -0,0 +1,143 @@
1+:: Source-bound full-module overlap diagnostics.
2+/+ jibb
3+/* same %txt /tests/type-full-overlap/same/txt
4+/* zero %txt /tests/type-full-overlap/zero/txt
5+/* unsupported %txt /tests/type-full-overlap/unsupported/txt
6+/* precedence %txt /tests/type-full-overlap/precedence/txt
7+/* duplicate %txt /tests/type-full-overlap/duplicate/txt
8+/* invalid %txt /tests/type-full-overlap/invalid/txt
9+/* distinct %txt /tests/type-full-overlap/distinct/txt
10+/* parent %txt /tests/type-full-overlap/parent/txt
11+/* child %txt /tests/type-full-overlap/child/txt
12+/* generic %txt /tests/type-full-overlap/generic/txt
13+/* duplicate-generic %txt /tests/type-full-overlap/duplicate-generic/txt
14+/* expected %txt /tests/type-full-overlap/expected-basic/txt
15+|%
16++$ overlap-evidence [file=path source=@t name=term cases=upair:jibb]
17++$ detailed-result
18+ (each [iface=ifile:jibb cache=jcache:jibb] [message=@t overlap=(unit overlap-evidence)])
19+++ source-pair
20+ |= [file=path source=@t name=term]
21+ ^- (unit upair:jibb)
22+ =/ parsed (parse:jibb file source)
23+ ?: ?=(%| -.parsed) ~
24+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
25+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
26+ ?~ found ~
27+ =/ sh=shape:jibb u.found
28+ =? sh ?=(%generic -.sh) body.sh
29+ ?. ?=(%union -.sh) ~
30+ ?~ cases.sh ~
31+ ?~ t.cases.sh ~
32+ `[at.i.cases.sh at.i.t.cases.sh %overlap]
33+++ source-witness
34+ |= [file=path source=@t name=term]
35+ ^- ?
36+ =/ parsed (parse:jibb file source)
37+ ?: ?=(%| -.parsed) |
38+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
39+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
40+ ?~ found |
41+ =/ sh=shape:jibb u.found
42+ =? sh ?=(%generic -.sh) body.sh
43+ ?. ?=(%union -.sh) |
44+ ?=(^ (union-source-overlap:jibb cases.sh molds 256))
45+++ detailed
46+ |= [file=path source=@t modules=jbundle:jibb]
47+ ^- detailed-result
48+ (infer-jibb-file-detailed:jibb file source ~ ~ modules ~[file] ~ ~ ~ ~)
49+++ expected-overlap
50+ |= [file=path source=@t name=term]
51+ ^- ?
52+ =/ expected=(unit upair:jibb) (source-pair file source name)
53+ ?~ expected |
54+ =/ result=detailed-result (detailed file source ~)
55+ ?: ?=(%& -.result) |
56+ ?~ overlap.p.result |
57+ =/ ev=overlap-evidence u.overlap.p.result
58+ ?& !=(0 message.p.result)
59+ =(file.ev file)
60+ =(source.ev source)
61+ =(name.ev name)
62+ =(cases.ev u.expected)
63+ =(%overlap relation.cases.ev)
64+ =(3 line.beg.first.cases.ev)
65+ =(3 col.beg.first.cases.ev)
66+ =(4 line.beg.second.cases.ev)
67+ =(3 col.beg.second.cases.ev)
68+ ==
69+++ plain-failure
70+ |= [file=path source=@t]
71+ ^- ?
72+ =/ parsed (parse:jibb file source)
73+ ?: ?=(%| -.parsed) |
74+ =/ result=detailed-result (detailed file source ~)
75+ ?: ?=(%& -.result) |
76+ &(!=(0 message.p.result) ?=(~ overlap.p.result))
77+++ run
78+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
79+ ^- (list [@t ?])
80+ =/ root=path /ui/root/jibb
81+ =/ names256=(list @t) (turn (gulf 0 255) |=(n=@ud (scot %ud n)))
82+ =/ names257=(list @t) (turn (gulf 0 256) |=(n=@ud (scot %ud n)))
83+ =/ child-file=path /ui/child/jibb
84+ =/ good-parsed (parse:jibb root distinct)
85+ =/ good-result=detailed-result (detailed root distinct ~)
86+ =/ bad-parsed (parse:jibb root invalid)
87+ =/ bad-result=detailed-result (detailed root invalid ~)
88+ =/ invalid-clean=?
89+ ?: ?=(%& -.bad-parsed) |
90+ ?: ?=(%& -.bad-result) |
91+ &(!=(0 message.p.bad-result) ?=(~ overlap.p.bad-result))
92+ =/ legacy=jfile-result:jibb (infer-jibb-file:jibb root same ~ ~ ~ ~[root] ~ ~ ~ ~)
93+ =/ legacy-excerpts=?
94+ ?: ?=(%& -.legacy) |
95+ =/ lines=wain (to-wain:format p.legacy)
96+ &((lien lines |=(line=@t =(line '/ui/root.jibb:3:3: first union case'))) (lien lines |=(line=@t =(line '/ui/root.jibb:4:3: overlapping case'))))
97+ =/ imported=detailed-result (detailed root parent ~[[child-file child]])
98+ =/ child-pair=(unit upair:jibb) (source-pair child-file child %child-bad)
99+ =/ import-valid=?
100+ ?: ?=(%& -.imported) |
101+ ?: =(0 message.p.imported) |
102+ ?~ overlap.p.imported |
103+ ?~ child-pair |
104+ =/ ev=overlap-evidence u.overlap.p.imported
105+ ?& =(file.ev child-file)
106+ =(source.ev child)
107+ =(name.ev %child-bad)
108+ =(cases.ev u.child-pair)
109+ ==
110+ :~ ['256 generic parameters accepted by scan' (module-mold-params-valid:jibb names256 *(set @t) 256)]
111+ ['257 generic parameters exhaust scan' !(module-mold-params-valid:jibb names257 *(set @t) 256)]
112+ ['duplicate generic parameters fail scan' !(module-mold-params-valid:jibb ~['A' 'A'] *(set @t) 256)]
113+ ['same head has source-bound overlap' (expected-overlap root same %bad)]
114+ ['zero spelling has source-bound overlap' (expected-overlap root zero %bad)]
115+ ['generic wrapper has source-bound overlap' (expected-overlap root generic %bad)]
116+ ['duplicate generic parameters remain unstructured' (plain-failure root duplicate-generic)]
117+ ['unsupported remains unstructured' (plain-failure root unsupported)]
118+ ['later overlap exists in precedence source' (source-witness root precedence %bad)]
119+ ['earlier unsupported mold takes precedence' (plain-failure root precedence)]
120+ ['duplicate source parsed but rejects without overlap' (plain-failure root duplicate)]
121+ ['invalid source rejects without overlap' invalid-clean]
122+ ['distinct alias source parses and checks' &(?=(%& -.good-parsed) ?=(%& -.good-result))]
123+ ['parent itself has different positive overlap' (source-witness root parent %parent-bad)]
124+ ['legacy full-module error contains both excerpts' legacy-excerpts]
125+ ['import overlap retains exact child source' import-valid]
126+ ==
127+++ text
128+ |= lines=wain
129+ ^- @t
130+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
131+++ output
132+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
133+ ^- @t
134+ =/ result=(list [@t ?]) (run same zero unsupported precedence duplicate invalid distinct parent child generic duplicate-generic)
135+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
136+++ test-full-overlap-basic
137+ ^- tang
138+ ?~ expected ~[leaf+"expected output missing"]
139+ =/ actual=@t (output (text same) (text zero) (text unsupported) (text precedence) (text duplicate) (text invalid) (text distinct) (text parent) (text child) (text generic) (text duplicate-generic))
140+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
141+ ~[leaf+"full-module overlap output differs"]
142+ ~
143+--
tests/lib/jibb-full-overlap-graph.hoonnew file+126
@@ -0,0 +1,126 @@
1+:: Source-bound full-module overlap diagnostics.
2+/+ jibb
3+/* parent %txt /tests/type-full-overlap/parent/txt
4+/* child %txt /tests/type-full-overlap/child/txt
5+/* distinct %txt /tests/type-full-overlap/distinct/txt
6+/* expected %txt /tests/type-full-overlap/expected-graph/txt
7+|%
8++$ overlap-evidence [file=path source=@t name=term cases=upair:jibb]
9++$ detailed-result
10+ (each [iface=ifile:jibb cache=jcache:jibb] [message=@t overlap=(unit overlap-evidence)])
11+++ detailed
12+ |= [file=path source=@t modules=jbundle:jibb]
13+ ^- detailed-result
14+ (infer-jibb-file-detailed:jibb file source ~ ~ modules ~[file] ~ ~ ~ ~)
15+++ source-pair
16+ |= [file=path source=@t]
17+ ^- (unit upair:jibb)
18+ =/ parsed (parse:jibb file source)
19+ ?: ?=(%| -.parsed) ~
20+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
21+ =/ found=(unit shape:jibb) (find-simple-mold:jibb %child-bad molds)
22+ ?~ found ~
23+ ?. ?=(%union -.u.found) ~
24+ ?~ cases.u.found ~
25+ ?~ t.cases.u.found ~
26+ `[at.i.cases.u.found at.i.t.cases.u.found %overlap]
27+++ failure-message
28+ |= [r=detailed-result expected-message=@t]
29+ ^- ?
30+ ?: ?=(%& -.r) |
31+ &(=(message.p.r expected-message) ?=(~ overlap.p.r))
32+++ run
33+ |= [parent=@t child=@t distinct=@t]
34+ ^- (list [@t ?])
35+ =/ root=path /ui/root/jibb
36+ =/ child-file=path /ui/child/jibb
37+ =/ good-parsed (parse:jibb child-file distinct)
38+ =/ parent-parsed (parse:jibb root parent)
39+ =/ child-parsed (parse:jibb child-file child)
40+ ?: ?=(%| -.good-parsed) ~[['BAD valid child parse' |]]
41+ ?: ?=(%| -.parent-parsed) ~[['BAD parent parse' |]]
42+ ?: ?=(%| -.child-parsed) ~[['BAD child parse' |]]
43+ =/ child-pair=(unit upair:jibb) (source-pair child-file child)
44+ ?~ child-pair ~[['BAD child pair' |]]
45+ =/ old=detailed-result (detailed child-file distinct ~)
46+ =/ cache-controls=[rebuilt=? stale=? source-bound=?]
47+ ?: ?=(%| -.old) [| | |]
48+ =/ previous=ifile:jibb iface.p.old
49+ =/ source-bound=?
50+ ?~ source.previous |
51+ ?~ graph.previous |
52+ ?& =(at.previous child-file)
53+ =(u.source.previous distinct)
54+ (request-graph-reusable:jibb previous distinct ~ ~ ~ ~ ~ ~ ~)
55+ !(request-graph-reusable:jibb previous child ~ ~ ~ ~ ~ ~ ~)
56+ ==
57+ =/ detached=ifile:jibb previous(graph ~)
58+ =/ rebuilt=detailed-result
59+ (infer-jibb-file-detailed:jibb root parent ~ ~ ~[[child-file child]] ~[root] ~ ~ ~[[child-file detached]] ~)
60+ =/ stale=detailed-result
61+ (infer-jibb-file-detailed:jibb root parent ~ ~ ~[[child-file child]] ~[root] ~ ~ ~[[child-file previous]] ~)
62+ =/ rebuilt-ok=?
63+ ?: ?=(%& -.rebuilt) |
64+ ?~ overlap.p.rebuilt |
65+ ?& =(file.u.overlap.p.rebuilt child-file)
66+ =(source.u.overlap.p.rebuilt child)
67+ =(name.u.overlap.p.rebuilt %child-bad)
68+ =(cases.u.overlap.p.rebuilt u.child-pair)
69+ ==
70+ =/ stale-ok=?
71+ ?: ?=(%& -.stale) |
72+ &(=(message.p.stale 'cached module evidence needs unsupported inference') ?=(~ overlap.p.stale))
73+ [rebuilt-ok stale-ok source-bound]
74+ =/ middle=@t (of-wain:format ~['/= leaf /ui/leaf' '+$ okay @t'])
75+ =/ leaf-file=path /ui/leaf/jibb
76+ =/ middle-parsed (parse:jibb child-file middle)
77+ =/ transitive=detailed-result
78+ (infer-jibb-file-detailed:jibb root parent ~ ~ ~[[child-file middle] [leaf-file child]] ~[root] ~ ~ ~ ~)
79+ =/ transitive-ok=?
80+ ?: ?=(%| -.middle-parsed) |
81+ ?: ?=(%& -.transitive) |
82+ ?~ overlap.p.transitive |
83+ ?& =(file.u.overlap.p.transitive leaf-file)
84+ =(source.u.overlap.p.transitive child)
85+ =(name.u.overlap.p.transitive %child-bad)
86+ =(cases.u.overlap.p.transitive u.child-pair)
87+ ==
88+ =/ clean-failure
89+ |= r=detailed-result
90+ ^- ?
91+ ?: ?=(%& -.r) |
92+ &(!=(0 message.p.r) ?=(~ overlap.p.r))
93+ =/ private-src=@t (of-wain:format ~['/= secret /lib/jibb/internal' '+$ good @t'])
94+ =/ cycle-src=@t (of-wain:format ~['/= mine /ui/root' '+$ good @t'])
95+ =/ private-parsed (parse:jibb root private-src)
96+ =/ cycle-parsed (parse:jibb root cycle-src)
97+ =/ private-result=detailed-result (detailed root private-src ~)
98+ =/ cycle-result=detailed-result (detailed root cycle-src ~)
99+ =/ duplicate-result=detailed-result (detailed root parent ~[[child-file child] [child-file child]])
100+ =/ missing-result=detailed-result (detailed root parent ~)
101+ :~ ['detached cache rebuild preserves child evidence' rebuilt.cache-controls]
102+ ['mismatched graph cache declines without evidence' stale.cache-controls]
103+ ['verified cache source binding' source-bound.cache-controls]
104+ ['private import declines before source proof' &(?=(%& -.private-parsed) (failure-message private-result 'the prelude internal module is private'))]
105+ ['active cycle declines before source proof' &(?=(%& -.cycle-parsed) (failure-message cycle-result (crip "import cycle at {(spud root)}")))]
106+ ['duplicate child sources decline without evidence' (clean-failure duplicate-result)]
107+ ['missing child source declines without evidence' (clean-failure missing-result)]
108+ ['transitive import retains leaf source' transitive-ok]
109+ ==
110+++ text
111+ |= lines=wain
112+ ^- @t
113+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
114+++ output
115+ |= [parent=@t child=@t distinct=@t]
116+ ^- @t
117+ =/ result=(list [@t ?]) (run parent child distinct)
118+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
119+++ test-full-overlap-graph
120+ ^- tang
121+ ?~ expected ~[leaf+"expected output missing"]
122+ =/ actual=@t (output (text parent) (text child) (text distinct))
123+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
124+ ~[leaf+"full-module overlap output differs"]
125+ ~
126+--
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 %node-tree 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+165
@@ -0,0 +1,165 @@
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 %node-tree 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+ =/ c=def:jibb i.t.t.ds
65+ =/ d=def:jibb i.t.t.t.ds
66+ =/ e=def:jibb i.t.t.t.t.ds
67+ ?. &(?=(%value -.c) ?=(%value -.d) ?=(%value -.e)) 'BAD extra value declarations'
68+ ?. &(?=(%branch -.val.c) ?=(%branch -.val.d) ?=(%branch -.val.e)) 'BAD extra branches'
69+ ?. ?=([* *] arms.val.c) 'BAD fallback arms'
70+ =/ sample-arm=arm:jibb i.arms.val.c
71+ =/ parsed-poly=(each module:jibb error:jibb) (parse:jibb /tests/tree/poly/jibb poly-values)
72+ ?: ?=(%| -.parsed-poly) 'BAD polymorphic values parse'
73+ =/ ps=(list def:jibb) defs.p.parsed-poly
74+ ?. ?=([* ~] ps) 'BAD polymorphic value count'
75+ =/ p=def:jibb i.ps
76+ ?. ?=(%value -.p) 'BAD polymorphic value'
77+ ?. ?=(%branch -.val.p) 'BAD polymorphic branch'
78+ =/ env=ienv:jibb ~[[%x [target ~]]]
79+ =/ poly=ienv:jibb ~[[%x [generic ~[42]]]]
80+ =/ tag=ipending:jibb [100 [%term %tas %unrelated '%unrelated']]
81+ =/ projection=iwprojection:jibb *iwprojection:jibb
82+ =/ st=istate:jibb *istate:jibb
83+ =. st st(next 201, prelude `iface.u.prep, tags ~[tag], holes ~[[99 (span-of:jibb val.a)]], projections ~[projection])
84+ =/ zero=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 0))
85+ =/ one=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 1))
86+ =/ short=iresult:jibb (infer-fragment:jibb val.b env st(jrec-fuel 1))
87+ =/ nested=iresult:jibb (infer-fragment:jibb val.b env st(jrec-fuel 2))
88+ =/ retry=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 1))
89+ =/ hidden=ienv:jibb ~[[%x [[%var 200] ~]]]
90+ =/ hidden-result=iresult:jibb (infer-fragment:jibb val.a hidden st(sub ~[[200 target]], jrec-fuel 2))
91+ =/ first=(unit iresult:jibb) (grec-single-wing-subject:jibb subject.val.p poly st(jrec-fuel 4))
92+ =/ second=(unit iresult:jibb) (grec-single-wing-subject:jibb subject.val.p poly st(next 202, jrec-fuel 4))
93+ ?~ first 'BAD first scheme lookup'
94+ ?~ second 'BAD second scheme lookup'
95+ ?. &(?=(%& -.u.first) ?=(%& -.u.second)) 'BAD scheme inference'
96+ =/ ft=itype:jibb typ.p.u.first
97+ =/ stype=itype:jibb typ.p.u.second
98+ ?. &(?=(%grec -.ft) ?=(%grec -.stype)) 'BAD scheme nominal identity'
99+ ?. &(?=([* ~] args.ft) ?=([* ~] args.stype)) 'BAD scheme argument count'
100+ =/ pmissing=iresult:jibb (infer-fragment:jibb val.p poly st(jrec-fuel 4))
101+ =/ view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb target 1)
102+ ?~ view 'BAD recursive view'
103+ =/ many=(list arm:jibb)
104+ =/ n=@ud 128
105+ =/ out=(list arm:jibb) ~
106+ |-
107+ ?: =(0 n) out
108+ $(n (dec n), out [sample-arm out])
109+ =/ in-view=iresult:jibb [%& target st(jrec-fuel 1)]
110+ =/ exact=expr:jibb val.c(arms many)
111+ =/ over=expr:jibb val.c(arms [sample-arm many])
112+ =/ rexact=iresult:jibb (grec-match-view:jibb exact in-view)
113+ =/ rover=iresult:jibb (grec-match-view:jibb over in-view)
114+ =/ hidden-view=iresult:jibb [%& [%var 200] st(sub ~[[200 target]], jrec-fuel 1)]
115+ =/ rhidden-view=iresult:jibb (grec-match-view:jibb exact hidden-view)
116+ =/ fallback=iresult:jibb (infer-fragment:jibb val.c env st(jrec-fuel 1))
117+ =/ checks=(list [label=@t ok=?])
118+ :~ ['owner describe has nominal sample and text result' &(=(target desc-sample) =([%atom %t] product.typ.u.desc))]
119+ ['owner rebuild preserves nominal identity' &(=(target rebuild-sample) =(target product.typ.u.rebuild))]
120+ ['owner children preserves quantified recursive identity' &(=(quantified children-sample) =([%collection %list ~[quantified]] product.typ.u.children))]
121+ ['invalid owner parses and is rejected' &(?=(%& -.bad-parse) ?=(%| -.bad))]
122+ ['zero fuel declined' ?=(%| -.zero)]
123+ ['one-step match' ?:(?=(%& -.one) &(=([%atom %t] typ.p.one) =(0 jrec-fuel.state.p.one)) |)]
124+ ['nested match requires two steps' &(?=(%| -.short) ?:(?=(%& -.nested) =(0 jrec-fuel.state.p.nested) |))]
125+ ['same-state retry agrees' =(one retry)]
126+ ['pending tag retained' ?:(?=(%& -.one) (lien tags.state.p.one |=(entry=ipending:jibb =(entry tag))) |)]
127+ ['pending hole retained' ?:(?=(%& -.one) =(holes.st holes.state.p.one) |)]
128+ ['projection evidence retained' ?:(?=(%& -.one) =(projections.st projections.state.p.one) |)]
129+ ['raw bound variable declined' ?=(%| -.hidden-result)]
130+ ['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))]
131+ ['polymorphic missing arm declined' ?=(%| -.pmissing)]
132+ ['catch-all eligible' (grec-patterns-eligible:jibb arms.val.c view.u.view 128)]
133+ ['whole binder stays unsupported' !(grec-patterns-eligible:jibb arms.val.d view.u.view 128)]
134+ ['whole structural tail stays unsupported' !(grec-patterns-eligible:jibb arms.val.e view.u.view 128)]
135+ ['128 arms eligible' (grec-patterns-eligible:jibb many view.u.view 128)]
136+ ['129 arms declined' !(grec-patterns-eligible:jibb [sample-arm many] view.u.view 128)]
137+ ['zero arm budget declined' !(grec-patterns-eligible:jibb ~[sample-arm] view.u.view 0)]
138+ ['128-arm view consumes one step' ?:(?=(%& -.rexact) &(?=(%union -.typ.p.rexact) =(0 jrec-fuel.state.p.rexact)) |)]
139+ ['129-arm view rolls back' =(in-view rover)]
140+ ['hidden view stays nominally unknown' =(hidden-view rhidden-view)]
141+ ['catch-all keeps fuel and pending state' ?:(?=(%& -.fallback) &(=(0 jrec-fuel.state.p.fallback) =(holes.st holes.state.p.fallback) =(projections.st projections.state.p.fallback) (lien tags.state.p.fallback |=(entry=ipending:jibb =(entry tag)))) |)]
142+ ==
143+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
144+ =/ small=jbundle:jibb ~[[/ui/tree/jibb tree-no-event]]
145+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
146+ =/ noreport=@t (golden-types-with-prepared-prelude:jibb /tests/tree/no-event/jibb no-event ~ ~ small prep)
147+ (cat 3 (of-wain:format (turn checks line)) (cat 3 '\0a' (cat 3 report (cat 3 '\0a' noreport))))
148+++ test-generic-pattern
149+ ^- tang
150+ ?~ tree ~[leaf+"tree source missing"]
151+ ?~ alias ~[leaf+"alias source missing"]
152+ ?~ tree-no-event ~[leaf+"tree without event missing"]
153+ ?~ client ~[leaf+"client source missing"]
154+ ?~ no-event ~[leaf+"no-event client missing"]
155+ ?~ values ~[leaf+"values source missing"]
156+ ?~ poly-values ~[leaf+"polymorphic values source missing"]
157+ ?~ owner ~[leaf+"owner source missing"]
158+ ?~ owner-bad ~[leaf+"invalid owner source missing"]
159+ ?~ expected ~[leaf+"expected output missing"]
160+ =/ actual=@t
161+ (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))
162+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
163+ ~[leaf+"generic pattern output differs from expected"]
164+ ~
165+--
tests/lib/jibb-generic-recursion.hoonnew file+170
@@ -0,0 +1,170 @@
1+:: Source-backed recursive identities; this is not the runtime UI 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 %node-tree 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 %node-tree u.old)
120+ =/ b=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree 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-list-alias-guards.hoon+1−1
@@ -4,7 +4,7 @@
44|%
55++ list-alias-output
66 ^- @t
7− =/ src=@t (crip "++ text |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
7+ =/ src=@t (crip "++ text-value |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
88 =/ canonical=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
99 =/ altered=@t (crip "+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
1010 =/ omitted=@t (crip "+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
tests/lib/jibb-program-init.hoonnew file+134
@@ -0,0 +1,134 @@
1+:: Transactional direct-program initializer context, without UI execution.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* initializer %txt /tests/type-program-main/initializer/txt
6+/* initializer-consumer %txt /tests/type-program-main/initializer-consumer/txt
7+/* initializer-unfaced %txt /tests/type-program-main/initializer-unfaced/txt
8+/* initializer-error %txt /tests/type-program-main/initializer-error/txt
9+/* initializer-earlier %txt /tests/type-program-main/initializer-earlier/txt
10+/* initializer-model %txt /tests/type-program-main/initializer-model/txt
11+/* initializer-message %txt /tests/type-program-main/initializer-message/txt
12+/* initializer-generic %txt /tests/type-program-main/initializer-generic/txt
13+/* initializer-missing %txt /tests/type-program-main/initializer-missing/txt
14+/* initializer-tag %txt /tests/type-program-main/initializer-tag/txt
15+/* initializer-no-main %txt /tests/type-program-main/initializer-no-main/txt
16+/* initializer-subs %txt /tests/type-program-main/initializer-subs/txt
17+|%
18+++ text
19+ |= lines=wain
20+ ^- @t
21+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
22+::
23+++ program-init-prepared
24+ |= [public=@t private=@t]
25+ ^- (unit iprelude:jibb)
26+ (prepare-prelude-with-internal:jibb public private)
27+::
28+++ program-init-detailed
29+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
30+ ^- jfile-detailed-result:jibb
31+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
32+::
33+++ program-init-legacy
34+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
35+ ^- jfile-result:jibb
36+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
37+::
38+++ program-init-positive
39+ |= [at=path src=@t downstream=(unit @t) prepared=iprelude:jibb]
40+ ^- (list tape)
41+ =/ detailed=jfile-detailed-result:jibb (program-init-detailed at src ~ prepared)
42+ ?: ?=(%| -.detailed) ~["contextual direct program init was rejected"]
43+ =/ checked=ifile:jibb iface.p.detailed
44+ =/ legacy=jfile-result:jibb (program-init-legacy at src ~ prepared)
45+ ?: ?=(%| -.legacy) ~["legacy adapter rejected contextual init"]
46+ ?. =(values.checked values.iface.p.legacy) ~["contextual structured and legacy values differ"]
47+ =/ init=(unit ischeme:jibb) (ienv-lookup:jibb %init values.checked)
48+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
49+ ?~ init ~["contextual init interface is missing"]
50+ ?~ main ~["contextual main interface is missing"]
51+ ?. ?=(~ vars.u.init) ~["contextual init interface is not closed"]
52+ =/ expected=tape "$-((list @t) [xs=(list @t) [draft=@t error=(unit @t)]])"
53+ ?. =((show-itype:jibb typ.u.init ~) expected) ~["contextual init interface type differs"]
54+ ?. ?=(~ vars.u.main) ~["contextual main interface is not closed"]
55+ =/ fields=(list itype:jibb) (record-fields-named:jibb %init typ.u.main ~)
56+ ?. =(fields ~[typ.u.init]) ~["contextual main initializer field differs"]
57+ ?~ source.checked ~["contextual program source evidence is missing"]
58+ ?. =(u.source.checked src) ~["contextual program source evidence differs"]
59+ ?~ graph.checked ~["contextual program request graph is missing"]
60+ ?~ downstream ~
61+ =/ consumer-at=path /tests/program-main/initializer-consumer/jibb
62+ =/ imported=jfile-detailed-result:jibb
63+ (program-init-detailed consumer-at u.downstream ~[[at src]] prepared)
64+ ?: ?=(%| -.imported) ~[(weld "downstream contextual initializer import was rejected: " (trip message.p.imported))]
65+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
66+ ?~ use ~["downstream contextual initializer is missing"]
67+ ?. =((show-itype:jibb typ.u.use ~) expected) ~["downstream contextual initializer type differs"]
68+ ?. =(u.use u.init) ~["downstream contextual initializer scheme differs"]
69+ ~
70+::
71+++ program-init-negative
72+ |= [label=@t at=path src=@t boundary=@t prepared=iprelude:jibb]
73+ ^- (list tape)
74+ =/ detailed=jfile-detailed-result:jibb (program-init-detailed at src ~ prepared)
75+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
76+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
77+ ?. =(message.p.detailed boundary) ~[(weld (trip label) ": rejected at the wrong boundary")]
78+ =/ legacy=jfile-result:jibb (program-init-legacy at src ~ prepared)
79+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
80+ ?. =(p.legacy boundary) ~[(weld (trip label) ": legacy boundary differs")]
81+ ~
82+::
83+++ program-init-negative-cases
84+ |= [cases=(list [label=@t at=path src=@t boundary=@t]) prepared=iprelude:jibb]
85+ ^- (list tape)
86+ ?~ cases ~
87+ %+ weld
88+ (program-init-negative label.i.cases at.i.cases src.i.cases boundary.i.cases prepared)
89+ $(cases t.cases)
90+::
91+++ program-init-errors
92+ |= [public=@t private=@t island=@t downstream=@t unfaced=@t negatives=(list @t)]
93+ ^- (list tape)
94+ =/ prepared=(unit iprelude:jibb) (program-init-prepared public private)
95+ ?~ prepared ~["synthetic program prelude did not prepare for contextual init"]
96+ =/ at=path /tests/program-main/initializer/jibb
97+ =/ positives=(list tape)
98+ %+ weld
99+ (program-init-positive at island `downstream u.prepared)
100+ (program-init-positive /tests/program-main/initializer-unfaced/jibb unfaced ~ u.prepared)
101+ ?. =(9 (lent negatives)) ~["contextual negative fixture count differs"]
102+ =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}")
103+ =/ cases=(list [label=@t at=path src=@t boundary=@t])
104+ :~ ['incompatible error field' at (snag 0 negatives) definitions]
105+ ['earlier tuple mismatch' at (snag 1 negatives) definitions]
106+ ['inconsistent model' at (snag 2 negatives) definitions]
107+ ['inconsistent message' at (snag 3 negatives) definitions]
108+ ['missing/generic data sample' at (snag 4 negatives) definitions]
109+ ['missing initializer' at (snag 5 negatives) definitions]
110+ ['unrelated pending tag' at (snag 6 negatives) definitions]
111+ ['non-main same source' at (snag 7 negatives) definitions]
112+ ['init and subs unresolved' at (snag 8 negatives) definitions]
113+ :- 'API path'
114+ [/ui/api/program-main/jibb island 'module kind needs unsupported inference: /ui/api/program-main/jibb']
115+ :- 'store path'
116+ [/ui/stores/program-main/jibb island 'module kind needs unsupported inference: /ui/stores/program-main/jibb']
117+ ==
118+ (weld positives (program-init-negative-cases cases u.prepared))
119+::
120+++ test-program-init
121+ ^- tang
122+ =/ negatives=(list @t)
123+ :~ (text initializer-error)
124+ (text initializer-earlier)
125+ (text initializer-model)
126+ (text initializer-message)
127+ (text initializer-generic)
128+ (text initializer-missing)
129+ (text initializer-tag)
130+ (text initializer-no-main)
131+ (text initializer-subs)
132+ ==
133+ (turn (program-init-errors prelude internal (text initializer) (text initializer-consumer) (text initializer-unfaced) negatives) |=(reason=tape leaf+reason))
134+--
tests/lib/jibb-program-main.hoonnew file+141
@@ -0,0 +1,141 @@
1+:: Narrow closed program-main checking, without execution or watchability claims.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* source %txt /tests/type-program-main/source/txt
6+/* consumer %txt /tests/type-program-main/consumer/txt
7+/* gate-model %txt /tests/type-program-main/gate-model/txt
8+/* gate-data %txt /tests/type-program-main/gate-data/txt
9+/* nonempty-subs %txt /tests/type-program-main/nonempty-subs/txt
10+/* mismatched-model %txt /tests/type-program-main/mismatched-model/txt
11+/* arbitrary-main %txt /tests/type-program-main/arbitrary-main/txt
12+/* alias-main %txt /tests/type-program-main/alias-main/txt
13+/* open-message %txt /tests/type-program-main/open-message/txt
14+|%
15+++ text
16+ |= lines=wain
17+ ^- @t
18+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
19+::
20+++ program-prepared
21+ |= [public=@t private=@t]
22+ ^- (unit iprelude:jibb)
23+ (prepare-prelude-with-internal:jibb public private)
24+::
25+++ program-main-detailed
26+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
27+ ^- jfile-detailed-result:jibb
28+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
29+::
30+++ program-main-legacy
31+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
32+ ^- jfile-result:jibb
33+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
34+::
35+++ program-main-negative-errors
36+ |= [label=@t at=path src=@t prepared=iprelude:jibb]
37+ ^- (list tape)
38+ =/ detailed=jfile-detailed-result:jibb (program-main-detailed at src ~ prepared)
39+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
40+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
41+ =/ legacy=jfile-result:jibb (program-main-legacy at src ~ prepared)
42+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
43+ ?. =(p.legacy message.p.detailed) ~[(weld (trip label) ": adapter messages differ")]
44+ ~
45+::
46+++ program-main-errors
47+ |= [public=@t private=@t island=@t downstream=@t negatives=(list @t)]
48+ ^- (list tape)
49+ =/ prepared=(unit iprelude:jibb)
50+ (program-prepared public private)
51+ ?~ prepared ~["synthetic program prelude did not prepare"]
52+ =/ at=path /tests/program-main/island/jibb
53+ =/ detailed=jfile-detailed-result:jibb (program-main-detailed at island ~ u.prepared)
54+ ?: ?=(%| -.detailed) ~["direct closed program main was rejected"]
55+ =/ checked=ifile:jibb iface.p.detailed
56+ ?~ graph.checked ~["program request graph evidence is missing"]
57+ =/ legacy=jfile-result:jibb (program-main-legacy at island ~ u.prepared)
58+ ?: ?=(%| -.legacy) ~["legacy adapter rejected a closed program main"]
59+ ?. =(values.checked values.iface.p.legacy) ~["structured and legacy interface values differ"]
60+ =/ init=(unit ischeme:jibb) (ienv-lookup:jibb %init values.checked)
61+ =/ update=(unit ischeme:jibb) (ienv-lookup:jibb %update values.checked)
62+ =/ view=(unit ischeme:jibb) (ienv-lookup:jibb %view values.checked)
63+ =/ subs=(unit ischeme:jibb) (ienv-lookup:jibb %subs values.checked)
64+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
65+ ?~ init ~["init interface is missing"]
66+ ?~ update ~["update interface is missing"]
67+ ?~ view ~["view interface is missing"]
68+ ?~ subs ~["subs interface is missing"]
69+ ?~ main ~["main interface is missing"]
70+ =/ parsed (parse:jibb at island)
71+ ?: ?=(%| -.parsed) ~["program source no longer parses"]
72+ =/ main-def=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
73+ ?~ main-def ~["program main definition is missing"]
74+ =/ parts (program-main-parts:jibb u.main-def)
75+ ?~ parts ~["program main parts are missing"]
76+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked ~ ~ u.graph.checked)
77+ ~["program kind was accepted without its source-backed prelude"]
78+ =/ program-scheme=(unit ischeme:jibb) (ienv-lookup:jibb %program values.iface.u.prepared)
79+ ?~ program-scheme ~["synthetic program scheme is missing"]
80+ ?. ?=(%fn -.typ.u.program-scheme) ~["synthetic program value is not a gate"]
81+ =/ broken-values=ienv:jibb
82+ (skim values.iface.u.prepared |=(entry=[name=term scheme=ischeme:jibb] !=(%program name.entry)))
83+ =/ broken=ifile:jibb
84+ iface.u.prepared(values [[%program [[%fn sample.typ.u.program-scheme [%atom %ud]] vars.u.program-scheme]] broken-values])
85+ =/ malformed=jfile-detailed-result:jibb
86+ (infer-jibb-file-detailed:jibb at island ~ ~ ~ ~[at] values.u.prepared molds.u.prepared ~ `broken)
87+ ?: ?=(%& -.malformed) ~["program result was not checked against the program mold"]
88+ =/ kind-error=@t (crip "module kind needs unsupported inference: {(spud at)}")
89+ ?. =(message.p.malformed kind-error) ~["malformed program failed before the kind check"]
90+ =/ open=jfile-detailed-result:jibb
91+ (program-main-detailed at (snag 6 negatives) ~ u.prepared)
92+ ?: ?=(%& -.open) ~["open program message was accepted"]
93+ =/ other-values=ienv:jibb
94+ (skim values.checked |=(entry=[name=term scheme=ischeme:jibb] !=(%main name.entry)))
95+ =/ open-values=ienv:jibb [[%main u.main(vars ~[0])] other-values]
96+ ?: (program-main-closed:jibb u.parts defs.p.parsed open-values `iface.u.prepared ~ u.graph.checked)
97+ ~["generic main scheme passed the closure check"]
98+ =/ model=itype:jibb [%face %count [%atom %ud]]
99+ ?. =(u.init [[%fn [%atom %t] model] ~]) ~["init interface type differs"]
100+ ?. ?=(~ vars.u.main) ~["main interface is not closed"]
101+ =/ init-fields=(list itype:jibb) (record-fields-named:jibb %init typ.u.main ~)
102+ =/ update-fields=(list itype:jibb) (record-fields-named:jibb %update typ.u.main ~)
103+ =/ view-fields=(list itype:jibb) (record-fields-named:jibb %view typ.u.main ~)
104+ =/ subs-fields=(list itype:jibb) (record-fields-named:jibb %subs typ.u.main ~)
105+ ?. =(init-fields ~[typ.u.init]) ~["main initializer field differs"]
106+ ?. &(=(1 (lent update-fields)) =(1 (lent view-fields)) =(1 (lent subs-fields)))
107+ ~["main component fields differ"]
108+ ?~ source.checked ~["program source evidence is missing"]
109+ ?. =(u.source.checked island) ~["program source evidence differs"]
110+ =/ consumer-at=path /tests/program-main/consumer/jibb
111+ =/ imported=jfile-detailed-result:jibb
112+ (program-main-detailed consumer-at downstream ~[[at island]] u.prepared)
113+ ?: ?=(%| -.imported) ~[(weld "ordinary downstream program import was rejected: " (trip message.p.imported))]
114+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
115+ ?~ use ~["downstream imported initializer is missing"]
116+ ?. =(u.use u.init) ~["downstream imported initializer type differs"]
117+ ?. =(7 (lent negatives)) ~["focused negative fixture count differs"]
118+ =/ cases=(list [label=@t at=path src=@t])
119+ :~ ['gate in model' at (snag 0 negatives)]
120+ ['gate in data' at (snag 1 negatives)]
121+ ['nonempty subs' at (snag 2 negatives)]
122+ ['mismatched model' at (snag 3 negatives)]
123+ ['arbitrary main' at (snag 4 negatives)]
124+ ['store path' /ui/stores/program-main/jibb island]
125+ ['program alias' at (snag 5 negatives)]
126+ ==
127+ (zing (turn cases |=(c=[label=@t at=path src=@t] (program-main-negative-errors label.c at.c src.c u.prepared))))
128+::
129+++ test-program-main
130+ ^- tang
131+ =/ negatives=(list @t)
132+ :~ (text gate-model)
133+ (text gate-data)
134+ (text nonempty-subs)
135+ (text mismatched-model)
136+ (text arbitrary-main)
137+ (text alias-main)
138+ (text open-message)
139+ ==
140+ (turn (program-main-errors prelude internal (text source) (text consumer) negatives) |=(reason=tape leaf+reason))
141+--
tests/lib/jibb-program-watch.hoonnew file+209
@@ -0,0 +1,209 @@
1+:: Direct request-value watchability for a synthetic program over the real todo API.
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+|%
12+++ text
13+ |= lines=wain
14+ ^- @t
15+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
16+::
17+++ program-watch-prepared
18+ |= [public=@t private=@t]
19+ ^- (unit iprelude:jibb)
20+ (prepare-prelude-with-internal:jibb public private)
21+::
22+++ program-watch-detailed
23+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
24+ ^- jfile-detailed-result:jibb
25+ (infer-jibb-file-detailed:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
26+::
27+++ program-watch-source
28+ |= [extra=@t subscriptions=@t]
29+ ^- @t
30+ %+ rap 3
31+ :~ '/= api /ui/api/todo\0a'
32+ '+$ model [count=@ud]\0a'
33+ '+$ msg\0a [%got todos=(list item.api)]\0a [%one item=todo-item.api]\0a %other\0a'
34+ extra
35+ '++ main (program init update view subs)\0a'
36+ '++ init |= input=@t ^- model [count=0]\0a'
37+ '++ update |= [m=msg state=model]\0a ^- [model (list (cmd msg))] [state ~]\0a'
38+ '++ view |= state=model ^- (element msg) (text "view")\0a'
39+ subscriptions
40+ ==
41+::
42+++ program-watch-agent-source
43+ ^- @t
44+ %+ rap 3
45+ :~ '/= api /ui/api/todo\0a'
46+ '+$ model [count=@ud]\0a'
47+ '++ receive |= input=[mark=@tas state=(unit *) fact=*]\0a ^- [state=* message=@t] [state=0 message="ok"]\0a'
48+ '++ request-path ^- path ~[%todos]\0a'
49+ '++ request ^- (ask @t)\0a [%agent api="/ui/api/todo" case=%todos agent=%todo path=request-path scry=~ receive=receive]\0a'
50+ '++ main (program init update view subs)\0a'
51+ '++ init |= input=@t ^- model [count=0]\0a'
52+ '++ update |= [m=@t state=model]\0a ^- [model (list (cmd @t))] [state ~]\0a'
53+ '++ view |= state=model ^- (element @t) (text "ok")\0a'
54+ '++ subs |= state=model\0a ^- (list (sub @t))\0a ~[[%watch request]]\0a'
55+ ==
56+::
57+++ program-watch-errors
58+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t]
59+ ^- (list tape)
60+ =/ prepared=(unit iprelude:jibb) (program-watch-prepared public private)
61+ ?~ prepared ~["synthetic program prelude did not prepare"]
62+ =/ todo=type -:(ride -:!>(..zuse) sur)
63+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
64+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action))
65+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos))
66+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update))
67+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item))
68+ =/ marks=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
69+ =/ item-input=* (read-named:jibb-import %todo %item todo)
70+ =/ externals=iexternals:jibb ~[[%todo %item item-input]]
71+ =/ api-at=path /ui/api/todo/jibb
72+ =/ api-result=jfile-detailed-result:jibb
73+ (program-watch-detailed api-at api externals marks ~ u.prepared)
74+ ?: ?=(%| -.api-result) ~["real todo API did not check"]
75+ =/ api-iface=ifile:jibb iface.p.api-result
76+ ?~ graph.api-iface ~["real todo API evidence is missing"]
77+ =/ direct-subs=@t '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (todos.api |=%got)]]\0a'
78+ =/ island=@t (program-watch-source '' direct-subs)
79+ =/ at=path /tests/program-watch/island/jibb
80+ =/ modules=jbundle:jibb ~[[api-at api]]
81+ =/ detailed=jfile-detailed-result:jibb
82+ (program-watch-detailed at island externals marks modules u.prepared)
83+ ?: ?=(%| -.detailed) ~[(weld "direct request watch was rejected: " (trip message.p.detailed))]
84+ =/ checked=ifile:jibb iface.p.detailed
85+ ?~ graph.checked ~["program request graph evidence is missing"]
86+ =/ legacy=jfile-result:jibb
87+ (infer-jibb-file:jibb at island externals marks modules ~[at] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
88+ ?: ?=(%| -.legacy) ~["legacy adapter rejected a direct request watch"]
89+ ?. =(values.checked values.iface.p.legacy) ~["structured and legacy interface values differ"]
90+ =/ subs=(unit ischeme:jibb) (ienv-lookup:jibb %subs values.checked)
91+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
92+ ?~ subs ~["subs interface is missing"]
93+ ?~ main ~["main interface is missing"]
94+ ?. &(?=(~ vars.u.subs) ?=(~ (itype-vars:jibb typ.u.subs))) ~["subs interface is not closed"]
95+ =/ subs-fields=(list itype:jibb) (record-fields-named:jibb %subs typ.u.main ~)
96+ ?. ?=([* ~] subs-fields) ~["closed program does not have one subs field"]
97+ =/ model=(unit ischeme:jibb) (find-jibb-mold:jibb %model checked)
98+ =/ msg=(unit ischeme:jibb) (find-jibb-mold:jibb %msg checked)
99+ =/ list-template=(unit ischeme:jibb) (find-jibb-mold:jibb %list iface.u.prepared)
100+ =/ sub=(unit ischeme:jibb) (find-jibb-mold:jibb %sub iface.u.prepared)
101+ ?~ model ~["model mold is missing"]
102+ ?~ msg ~["message mold is missing"]
103+ ?~ list-template ~["list mold is missing"]
104+ ?~ sub ~["sub mold is missing"]
105+ =/ message-sub=(unit itype:jibb) (template-apply:jibb u.sub ~[typ.u.msg])
106+ ?~ message-sub ~["message subscription type did not instantiate"]
107+ =/ subs-result=(unit itype:jibb) (template-apply:jibb u.list-template ~[u.message-sub])
108+ ?~ subs-result ~["subscription list type did not instantiate"]
109+ =/ expected-subs=itype:jibb [%fn typ.u.model u.subs-result]
110+ ?. =(typ.u.subs expected-subs) ~["subs interface has the wrong exact type"]
111+ ?. =((lent requests.u.graph.checked) (lent requests.u.graph.api-iface)) ~["merged API evidence count differs"]
112+ ?. (levy requests.u.graph.checked |=(r=irequest-evidence:jibb (lien requests.u.graph.api-iface |=(a=irequest-evidence:jibb =(r a))))) ~["merged API evidence differs"]
113+ =/ matching=(list irequest-evidence:jibb)
114+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb &(=(api-at.r api-at) =(%todos name.r))))
115+ ?. ?=([* ~] matching) ~["direct todos evidence is not unique"]
116+ =/ evidence=irequest-evidence:jibb i.matching
117+ ?. =(api-source.evidence api) ~["request evidence does not retain the exact API source"]
118+ ?. &(?=(~ scry.path.path.evidence) ?=(~ diffs.path.evidence) ?=(~ diffs.path.path.evidence))
119+ ~["plain todos evidence acquired scry or diffs"]
120+ ?: (lien segments.path.path.evidence |=(p=pseg:jibb !?=(%knot -.p))) ~["plain todos evidence acquired parameters"]
121+ =/ consumer-at=path /tests/program-watch/consumer/jibb
122+ =/ consumer=@t '/= island-prog /tests/program-watch/island\0a++ imported subs.island-prog\0a'
123+ =/ imported=jfile-detailed-result:jibb
124+ (program-watch-detailed consumer-at consumer externals marks [[at island] modules] u.prepared)
125+ ?: ?=(%| -.imported) ~["downstream program import was rejected"]
126+ =/ imported-subs=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
127+ ?~ imported-subs ~["downstream imported subs is missing"]
128+ =/ expected-import=itype:jibb (itype-in-import:jibb typ.u.subs checked %island-prog `iface.u.prepared)
129+ ?. &(?=(~ vars.u.imported-subs) =(typ.u.imported-subs expected-import)) ~["downstream imported subs type differs"]
130+ =/ parsed (parse:jibb at island)
131+ ?: ?=(%| -.parsed) ~["program source no longer parses"]
132+ =/ main-def=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
133+ ?~ main-def ~["program main definition is missing"]
134+ =/ parts (program-main-parts:jibb u.main-def)
135+ ?~ parts ~["program main parts are missing"]
136+ =/ resolved=ijimports:jibb ~[[%api api-iface]]
137+ =/ others=(list irequest-evidence:jibb)
138+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb !&(=(api-at.r api-at) =(%todos name.r))))
139+ =/ missing=irequest-graph:jibb u.graph.checked(requests others)
140+ =/ mismatch=irequest-graph:jibb u.graph.checked(requests [evidence(api-source 'mismatched') others])
141+ =/ scry=irequest-graph:jibb u.graph.checked(requests [evidence(scry.path.path `~[[%knot ~.peek]]) others])
142+ =/ ambiguous=irequest-graph:jibb u.graph.checked(requests [evidence requests.u.graph.checked])
143+ =/ evidence-cases=(list [label=tape graph=irequest-graph:jibb])
144+ :~ ["missing evidence" missing]
145+ ["API-source mismatch" mismatch]
146+ ["scry declaration evidence" scry]
147+ ["ambiguous evidence" ambiguous]
148+ ==
149+ =/ evidence-failures=(list tape)
150+ %+ murn evidence-cases
151+ |= c=[label=tape graph=irequest-graph:jibb]
152+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared resolved graph.c)
153+ `label.c
154+ ~
155+ ?^ evidence-failures ~[(weld "bad evidence passed watchability: " i.evidence-failures)]
156+ =/ ordinary-values=ienv:jibb
157+ (skim values.api-iface |=(entry=[name=term scheme=ischeme:jibb] !=(%todos name.entry)))
158+ =/ forged=ifile:jibb
159+ api-iface(values [[%todos [[%fn [%atom %t] [%atom %t]] ~]] ordinary-values])
160+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api forged]] u.graph.checked)
161+ ~["same-named non-derived member passed watchability"]
162+ =/ detached=ifile:jibb api-iface(graph `u.graph.api-iface(requests ~))
163+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api detached]] u.graph.checked)
164+ ~["evidence outside the selected interface passed watchability"]
165+ =/ incoherent=irequest-evidence:jibb evidence(name.path.path %other)
166+ =/ api-others=(list irequest-evidence:jibb)
167+ (skim requests.u.graph.api-iface |=(r=irequest-evidence:jibb !&(=(api-at.r api-at) =(%todos name.r))))
168+ =/ incoherent-api=ifile:jibb api-iface(graph `u.graph.api-iface(requests [incoherent api-others]))
169+ =/ incoherent-graph=irequest-graph:jibb u.graph.checked(requests [incoherent others])
170+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api incoherent-api]] incoherent-graph)
171+ ~["inconsistent request case names passed watchability"]
172+ =/ kind-error=@t (crip "module kind needs unsupported inference: {(spud at)}")
173+ =/ negatives=(list [label=tape src=@t])
174+ :~ :- "pure watch"
175+ (program-watch-source '' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (pure %other)]]\0a')
176+ :- "correctly typed hand-built agent"
177+ program-watch-agent-source
178+ :- "request helper"
179+ (program-watch-source '++ request ^- (ask msg) (todos.api |=%got)\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch request]]\0a')
180+ :- "request alias"
181+ (program-watch-source '++ request todos.api\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (request |=%got)]]\0a')
182+ :- "parameterized todo-by-id"
183+ (program-watch-source '' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (todo-by-id.api 1 |=%one)]]\0a')
184+ :- "diff changes"
185+ (program-watch-source '++ fold |= [d=[%todo-update todo-update.api] s=todos.api] s\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (changes.api |=%got fold)]]\0a')
186+ :- "multi-item subscriptions"
187+ (program-watch-source '++ first ^- (sub msg) [%watch (todos.api |=%got)]\0a++ second ^- (sub msg) [%watch (pure %other)]\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[first second]\0a')
188+ ==
189+ %+ weld (turn evidence-failures |=(reason=tape reason))
190+ %+ murn negatives
191+ |= c=[label=tape src=@t]
192+ =/ bad=jfile-detailed-result:jibb
193+ (program-watch-detailed at src.c externals marks modules u.prepared)
194+ ?: ?=(%& -.bad) `[(weld label.c ": accepted")]
195+ ?. =(message.p.bad kind-error) `[(weld label.c ": did not reach watchability")]
196+ ~
197+::
198+++ test-program-watch
199+ ^- tang
200+ ?~ sur ~[leaf+"program-watch fixture sur is missing"]
201+ ?~ action ~[leaf+"program-watch fixture action is missing"]
202+ ?~ todos ~[leaf+"program-watch fixture todos is missing"]
203+ ?~ update ~[leaf+"program-watch fixture update is missing"]
204+ ?~ item ~[leaf+"program-watch fixture item is missing"]
205+ ?~ api ~[leaf+"program-watch fixture api is missing"]
206+ =/ failures=(list tape)
207+ (program-watch-errors prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api))
208+ (turn failures |=(reason=tape leaf+reason))
209+--
tests/lib/jibb-request-guards.hoon+2−2
@@ -127,8 +127,8 @@
127127 =/ bad-cache=jcache:jibb ~[[helper-at mismatched]]
128128 =/ wrong (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep bad-cache pre)
129129 ?: ?=(%& -.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'
130+ =/ old-client=@t '++ text-value "safe"\0a'
131+ =/ dep=@t '/= c /lib/client\0a++ value text-value.c\0a'
132132 =/ root=@t '/= h /lib/helper\0a++ x value.h\0a'
133133 =/ cycle-bundle=jbundle:jibb ~[[client old-client] [helper-at dep]]
134134 =/ cycle-legacy=ifile:jibb legacy(source `dep)
tests/lib/jibb-union-alias-overlap.hoonnew file+107
@@ -0,0 +1,107 @@
1+:: Source-backed alias overlap diagnostics, without a full module claim.
2+/+ jibb
3+/* positive %txt /tests/type-union-alias-overlap/positive/txt
4+/* negative %txt /tests/type-union-alias-overlap/negative/txt
5+/* nonzero %txt /tests/type-union-alias-overlap/nonzero/txt
6+/* multi %txt /tests/type-union-alias-overlap/multi/txt
7+/* opaque %txt /tests/type-union-alias-overlap/opaque/txt
8+/* wrong %txt /tests/type-union-alias-overlap/wrong/txt
9+/* duplicate %txt /tests/type-union-alias-overlap/duplicate/txt
10+/* qualified %txt /tests/type-union-alias-overlap/qualified/txt
11+/* flag-source %txt /tests/type-union-alias-overlap/flag-source/txt
12+/* expected %txt /tests/type-union-alias-overlap/expected/txt
13+|%
14+++ checks
15+ |= [positive=@t negative=@t nonzero=@t multi=@t opaque=@t wrong=@t duplicate=@t qualified=@t flag-source=@t]
16+ ^- (list [@t ?])
17+ =/ project
18+ |= [source=@t name=term]
19+ ^- (unit [cases=(list shape:jibb) molds=imolds:jibb])
20+ =/ parsed (parse:jibb /tests/overlap/jibb source)
21+ ?: ?=(%| -.parsed) ~
22+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
23+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
24+ ?~ found ~
25+ =/ sh=shape:jibb u.found
26+ =? sh ?=(%generic -.sh) body.sh
27+ ?. ?=(%union -.sh) ~
28+ `[cases.sh molds]
29+ =/ a (project positive %same)
30+ =/ z (project positive %same-zero)
31+ =/ d (project negative %distinct-head)
32+ =/ c (project negative %distinct-constant)
33+ =/ e (project negative %empty-payload)
34+ =/ g (project negative %generic)
35+ =/ x (project negative %unknown-name)
36+ =/ nz (project nonzero %same)
37+ =/ m (project multi %choice)
38+ =/ o (project opaque %choice)
39+ =/ w (project wrong %bad)
40+ =/ dup (project duplicate %choice)
41+ =/ q (project qualified %choice)
42+ =/ fz (project flag-source %flag-zero)
43+ =/ fn (project flag-source %flag-nonzero)
44+ ?~ a ~[['BAD same parse' |]]
45+ ?~ z ~[['BAD zero parse' |]]
46+ ?~ d ~[['BAD distinct parse' |]]
47+ ?~ c ~[['BAD constants parse' |]]
48+ ?~ e ~[['BAD empty parse' |]]
49+ ?~ g ~[['BAD generic parse' |]]
50+ ?~ x ~[['BAD reference parse' |]]
51+ ?~ nz ~[['BAD nonzero parse' |]]
52+ ?~ m ~[['BAD multi parse' |]]
53+ ?~ o ~[['BAD opaque parse' |]]
54+ ?~ w ~[['BAD wrong arity parse' |]]
55+ ?~ dup ~[['BAD duplicate parse' |]]
56+ ?~ q ~[['BAD qualified parse' |]]
57+ ?~ fz ~[['BAD flag-zero parse' |]]
58+ ?~ fn ~[['BAD flag-nonzero parse' |]]
59+ ?~ cases.u.a ~[['BAD same cases' |]]
60+ ?~ t.cases.u.a ~[['BAD second same case' |]]
61+ =/ same=(unit upair:jibb) (union-source-overlap:jibb cases.u.a molds.u.a 256)
62+ =/ zero=(unit upair:jibb) (union-source-overlap:jibb cases.u.z molds.u.z 256)
63+ =/ report=wain (to-wain:format (golden-types-in-context:jibb /tests/overlap/jibb positive ~ ~ ~ ~ ~ ~))
64+ =/ failed=jfile-result:jibb (infer-jibb-file:jibb /tests/overlap/jibb positive ~ ~ ~ ~[/tests/overlap/jibb] ~ ~ ~ ~)
65+ =/ nonzero-report=wain (to-wain:format (golden-types-in-context:jibb /tests/overlap/jibb nonzero ~ ~ ~ ~ ~ ~))
66+ :~ ['same head and inhabited payload overlap' ?=(^ same)]
67+ ['zero spelling overlap' ?=(^ zero)]
68+ ['original same-case spans retained' ?~(same | &(=(first.u.same at.i.cases.u.a) =(second.u.same at.i.t.cases.u.a)))]
69+ ['partial report displays same overlap' (lien report |=(line=@t =(line '+$ same: overlapping cases; mold not checked')))]
70+ ['partial report displays zero overlap' (lien report |=(line=@t =(line '+$ same-zero: overlapping cases; mold not checked')))]
71+ ['distinct heads do not overlap' ?=(~ (union-source-overlap:jibb cases.u.d molds.u.d 256))]
72+ ['distinct singleton payloads do not overlap' ?=(~ (union-source-overlap:jibb cases.u.c molds.u.c 256))]
73+ ['empty payload has no witness' ?=(~ (union-source-overlap:jibb cases.u.e molds.u.e 256))]
74+ ['outer variable has no witness' ?=(~ (union-source-overlap:jibb cases.u.g molds.u.g 256))]
75+ ['unresolved reference has no witness' ?=(~ (union-source-overlap:jibb cases.u.x molds.u.x 256))]
76+ ['equal nonzero singleton payload overlaps' ?=(^ (union-source-overlap:jibb cases.u.nz molds.u.nz 256))]
77+ ['nonzero overlap reported' (lien nonzero-report |=(line=@t =(line '+$ same: overlapping cases; mold not checked')))]
78+ ['late pair in three cases overlaps' ?=(^ (union-source-overlap:jibb cases.u.m molds.u.m 256))]
79+ ['opaque gate payload declines' ?=(~ (union-source-overlap:jibb cases.u.o molds.u.o 256))]
80+ ['wrong alias arity declines' ?=(~ (union-source-overlap:jibb cases.u.w molds.u.w 256))]
81+ ['full module remains rejected' ?=(%| -.failed)]
82+ ['first source excerpt retained' (lien report |=(line=@t =(line '/tests/overlap.jibb:3:3: first union case')))]
83+ ['second source excerpt retained' (lien report |=(line=@t =(line '/tests/overlap.jibb:4:3: overlapping case')))]
84+ ['flag and zero payload overlap' ?=(^ (union-source-overlap:jibb cases.u.fz molds.u.fz 256))]
85+ ['flag and nonzero payload decline' ?=(~ (union-source-overlap:jibb cases.u.fn molds.u.fn 256))]
86+ ['duplicate owner declines' ?=(~ (union-source-overlap:jibb cases.u.dup molds.u.dup 256))]
87+ ['qualified owner declines' ?=(~ (union-source-overlap:jibb cases.u.q molds.u.q 256))]
88+ ['20 proof fuel succeeds' ?=(^ (union-source-overlap:jibb cases.u.a molds.u.a 20))]
89+ ['19 proof fuel declines' ?=(~ (union-source-overlap:jibb cases.u.a molds.u.a 19))]
90+ ['zero proof fuel declines' ?=(~ (union-source-overlap:jibb cases.u.a molds.u.a 0))]
91+ ==
92+++ overlap-output
93+ |= [positive=@t negative=@t nonzero=@t multi=@t opaque=@t wrong=@t duplicate=@t qualified=@t flag-source=@t]
94+ ^- @t
95+ =/ result=(list [@t ?]) (checks positive negative nonzero multi opaque wrong duplicate qualified flag-source)
96+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
97+++ text
98+ |= lines=wain
99+ ^- @t
100+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
101+++ test-union-alias-overlap
102+ ^- tang
103+ ?~ expected ~[leaf+"expected output missing"]
104+ =/ actual=@t (overlap-output (text positive) (text negative) (text nonzero) (text multi) (text opaque) (text wrong) (text duplicate) (text qualified) (text flag-source))
105+ ?. =((to-wain:format (cat 3 actual '\0a')) expected) ~[leaf+"generic union overlap output differs"]
106+ ~
107+--
tests/lib/jibb-union-source.hoonnew file+152
@@ -0,0 +1,152 @@
1+:: Bounded source-backed generic-union proof checks; no runtime claim.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-union-source/good/txt
6+/* same %txt /tests/type-union-source/same/txt
7+/* zero %txt /tests/type-union-source/zero/txt
8+/* nested %txt /tests/type-union-source/nested/txt
9+/* duplicate %txt /tests/type-union-source/duplicate/txt
10+/* wrong %txt /tests/type-union-source/wrong/txt
11+/* duplicate-params %txt /tests/type-union-source/duplicate-params/txt
12+/* hidden-ref %txt /tests/type-union-source/hidden-ref/txt
13+/* qualified %txt /tests/type-union-source/qualified/txt
14+/* direct-source %txt /tests/type-union-source/direct-source/txt
15+/* wide-source %txt /tests/type-union-source/wide-source/txt
16+/* free-source %txt /tests/type-union-source/free-source/txt
17+/* late-source %txt /tests/type-union-source/late-source/txt
18+/* shadow-source %txt /tests/type-union-source/shadow-source/txt
19+/* mixed-source %txt /tests/type-union-source/mixed-source/txt
20+/* expected %txt /tests/type-union-source/expected/txt
21+|%
22+++ checks
23+ |= [public=@t internal=@t good=@t same=@t zero=@t nested=@t duplicate=@t wrong=@t duplicate-params=@t hidden-ref=@t qualified=@t direct-source=@t wide-source=@t free-source=@t late-source=@t shadow-source=@t mixed-source=@t]
24+ ^- (list [@t ?])
25+ =/ module-choice
26+ |= [source=@t name=term]
27+ ^- (unit [cases=(list shape:jibb) molds=imolds:jibb])
28+ =/ parsed (parse:jibb /tests/empty/jibb source)
29+ ?: ?=(%| -.parsed) ~
30+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
31+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
32+ ?~ found ~
33+ ?. ?=(%union -.u.found) ~
34+ `[cases.u.found molds]
35+ =/ g=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice good %choice)
36+ =/ s=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice same %bad)
37+ =/ z=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice zero %bad)
38+ =/ n=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice nested %choice)
39+ =/ d=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice duplicate %choice)
40+ =/ w=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice wrong %bad)
41+ =/ dp=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice duplicate-params %choice)
42+ =/ hr=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice hidden-ref %choice)
43+ =/ q=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice qualified %choice)
44+ =/ direct=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice direct-source %choice)
45+ =/ wide=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice wide-source %choice)
46+ =/ free=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice free-source %choice)
47+ =/ late=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice late-source %choice)
48+ ?~ g ~[['BAD good parse' |]]
49+ ?~ s ~[['BAD same parse' |]]
50+ ?~ z ~[['BAD zero parse' |]]
51+ ?~ n ~[['BAD nested parse' |]]
52+ ?~ d ~[['BAD duplicate parse' |]]
53+ ?~ w ~[['BAD arity parse' |]]
54+ ?~ dp ~[['BAD duplicate params parse' |]]
55+ ?~ hr ~[['BAD hidden ref parse' |]]
56+ ?~ q ~[['BAD qualified parse' |]]
57+ ?~ direct ~[['BAD direct parse' |]]
58+ ?~ wide ~[['BAD wide parse' |]]
59+ ?~ free ~[['BAD free parse' |]]
60+ ?~ late ~[['BAD late parse' |]]
61+ ?~ cases.u.late ~[['BAD late cases' |]]
62+ =/ chosen=(unit shape:jibb) (find-simple-mold:jibb %choice molds.u.g)
63+ ?~ chosen ~[['BAD chosen source' |]]
64+ =/ late-shape=(unit shape:jibb) (find-simple-mold:jibb %choice molds.u.late)
65+ ?~ late-shape ~[['BAD late source' |]]
66+ =/ mixed-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb mixed-source)
67+ ?: ?=(%| -.mixed-parsed) ~[['BAD mixed parse' |]]
68+ =/ mixed-collected=grec-collected:jibb (grec-collect-molds:jibb defs.p.mixed-parsed)
69+ =/ mixed-tree=(unit shape:jibb) (~(get by proofs.mixed-collected) %node-tree)
70+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
71+ ?~ prep ~[['BAD prepared prelude' |]]
72+ =/ mixed-result=jfile-result:jibb
73+ (infer-jibb-file:jibb /tests/empty/jibb mixed-source ~ ~ ~ ~[/tests/empty/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
74+ =/ mixed-report=wain (to-wain:format (golden-types-with-prepared-prelude:jibb /tests/empty/jibb mixed-source ~ ~ ~ prep))
75+ =/ good-report=wain (to-wain:format (golden-types-in-context:jibb /tests/empty/jibb good ~ ~ ~ ~ ~ ~))
76+ =/ shadow-report=wain (to-wain:format (golden-types-in-context:jibb /tests/empty/jibb shadow-source ~ ~ ~ ~ ~ ~))
77+ =/ good-checked=jfile-result:jibb
78+ (infer-jibb-file:jibb /tests/empty/jibb good ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
79+ =/ collision-checked=jfile-result:jibb
80+ (infer-jibb-file:jibb /tests/empty/jibb same ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
81+ =/ zero-checked=jfile-result:jibb
82+ (infer-jibb-file:jibb /tests/empty/jibb zero ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
83+ =/ arity-checked=jfile-result:jibb
84+ (infer-jibb-file:jibb /tests/empty/jibb wrong ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
85+ =/ shadow-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb shadow-source)
86+ =/ shadow-checked=jfile-result:jibb
87+ (infer-jibb-file:jibb /tests/empty/jibb shadow-source ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
88+ =/ state=istate:jibb *istate:jibb
89+ =/ idx=[at=path source=@t prelude=ifile:jibb shapes=(map term shape:jibb)] [/tests/empty/jibb '' *ifile:jibb *(map term shape:jibb)]
90+ =/ cap256=icaps:jibb (turn (gulf 0 255) |=(n=@ud ['A' n *span:jibb]))
91+ =/ cap257=icaps:jibb (turn (gulf 0 256) |=(n=@ud ['A' n *span:jibb]))
92+ =/ initial=istate:jibb
93+ state(molds molds.u.g, at /tests/empty/jibb, active ~[%outer], caps ~[['Q' 17 *span:jibb]], tags ~[[42 [%term %tas %pending '%pending']]], sub ~[[71 [%atom %t]]], next 100)
94+ =/ preserved=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb u.chosen initial)
95+ =/ structured=istate:jibb initial(params ~[['A' [%cell [%atom %t] [%atom %t]]]])
96+ =/ rejected=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb u.chosen structured)
97+ =/ delayed=istate:jibb initial(molds molds.u.late, in-mold &, params ~[['A' [%var 3]]])
98+ =/ first=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb i.cases.u.late delayed)
99+ =/ incomplete=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb u.late-shape delayed)
100+ :~ ['source generic distinct' (union-source-distinct-tags:jibb cases.u.g molds.u.g 256)]
101+ ['actual inference preserves pending and scoped state' ?:(?=(~ preserved) | =(state.u.preserved initial))]
102+ ['actual inference rejects structural state' ?=(~ rejected)]
103+ ['later source failure returns no partial state' &(?=(^ first) ?=(~ incomplete))]
104+ ['actual local owner shadow rejected' &(?=(%& -.shadow-parsed) ?=(%| -.shadow-checked))]
105+ ['full generic-alias module checks' ?=(%& -.good-checked)]
106+ ['same-head module is not published' ?=(%| -.collision-checked)]
107+ ['mixed-zero module is not published' ?=(%| -.zero-checked)]
108+ ['wrong-arity module is not published' ?=(%| -.arity-checked)]
109+ ['partial report uses source proof' (lien good-report |=(line=@t =(line '+$ choice: cases proven disjoint; mold not checked')))]
110+ ['partial report preserves shadow diagnostic' (lien shadow-report |=(line=@t =(line '++ bad: local molds shadow a name')))]
111+ ['recognized recursive tree causes conservative decline' &(?=(^ mixed-tree) ?=(%| -.mixed-result))]
112+ ['mixed partial report remains source-only' (lien mixed-report |=(line=@t =(line '+$ choice: cases proven disjoint; mold not checked')))]
113+ ['source exact fuel 18' (union-source-distinct-tags:jibb cases.u.g molds.u.g 18)]
114+ ['source 17 fuel declines' !(union-source-distinct-tags:jibb cases.u.g molds.u.g 17)]
115+ ['same head declines' !(union-source-distinct-tags:jibb cases.u.s molds.u.s 256)]
116+ ['equal noun cross spelling declines' !(union-source-distinct-tags:jibb cases.u.z molds.u.z 256)]
117+ ['nested application declines' !(union-source-distinct-tags:jibb cases.u.n molds.u.n 256)]
118+ ['duplicate owner declines' !(union-source-distinct-tags:jibb cases.u.d molds.u.d 256)]
119+ ['wrong arity declines' !(union-source-distinct-tags:jibb cases.u.w molds.u.w 256)]
120+ ['duplicate parameters decline' !(union-source-distinct-tags:jibb cases.u.dp molds.u.dp 256)]
121+ ['hidden body reference declines' !(union-source-distinct-tags:jibb cases.u.hr molds.u.hr 256)]
122+ ['qualified import declines' !(union-source-distinct-tags:jibb cases.u.q molds.u.q 256)]
123+ ['direct cases use existing proof' !(union-source-distinct-tags:jibb cases.u.direct molds.u.direct 256)]
124+ ['wide alias body declines' !(union-source-distinct-tags:jibb cases.u.wide molds.u.wide 256)]
125+ ['undeclared body parameter declines' !(union-source-distinct-tags:jibb cases.u.free molds.u.free 256)]
126+ ['empty state accepted' (union-source-state-safe:jibb state 256)]
127+ ['simple outer generic accepted' (union-source-state-safe:jibb state(params ~[['A' [%var 3]]], sub ~[[3 [%var 5]]]) 256)]
128+ ['structured outer argument declined' !(union-source-state-safe:jibb state(params ~[['A' [%cell [%atom %t] [%atom %t]]]]) 256)]
129+ ['structured substitution declined' !(union-source-state-safe:jibb state(sub ~[[3 [%cell [%atom %t] [%atom %t]]]]) 256)]
130+ ['pending hole declined' !(union-source-state-safe:jibb state(holes ~[[3 *span:jibb]]) 256)]
131+ ['recursive index declined' !(union-source-state-safe:jibb state(grec-index `idx) 256)]
132+ ['deferred transaction declined' !(union-source-state-safe:jibb state(defer `~) 256)]
133+ ['pending obligation declined' !(union-source-state-safe:jibb state(obligations ~[[[%var 1] [%var 2] *span:jibb *span:jibb]]) 256)]
134+ ['256 state entries accepted' (union-source-state-safe:jibb state(caps cap256) 256)]
135+ ['257 state entries declined' !(union-source-state-safe:jibb state(caps cap257) 256)]
136+ ==
137+++ source-output
138+ |= [public=@t internal=@t good=@t same=@t zero=@t nested=@t duplicate=@t wrong=@t duplicate-params=@t hidden-ref=@t qualified=@t direct-source=@t wide-source=@t free-source=@t late-source=@t shadow-source=@t mixed-source=@t]
139+ ^- @t
140+ =/ result=(list [@t ?]) (checks public internal good same zero nested duplicate wrong duplicate-params hidden-ref qualified direct-source wide-source free-source late-source shadow-source mixed-source)
141+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
142+++ text
143+ |= lines=wain
144+ ^- @t
145+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
146+++ test-union-source
147+ ^- tang
148+ ?~ expected ~[leaf+"expected output missing"]
149+ =/ actual=@t (source-output prelude internal (text good) (text same) (text zero) (text nested) (text duplicate) (text wrong) (text duplicate-params) (text hidden-ref) (text qualified) (text direct-source) (text wide-source) (text free-source) (text late-source) (text shadow-source) (text mixed-source))
150+ ?. =((to-wain:format (cat 3 actual '\0a')) expected) ~[leaf+"generic union source output differs"]
151+ ~
152+--
tests/lib/jibb.hoon+1349−1301
@@ -1362,1070 +1362,1102 @@
13621362/* tok-415 %txt /tests/golden/types-capital-distinct/tokens/txt
13631363/* tre-415 %txt /tests/golden/types-capital-distinct/tree/txt
13641364/* typ-415 %txt /tests/golden/types-capital-distinct/types/txt
1365−/* src-416 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1366−/* tok-416 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1367−/* tre-416 %txt /tests/golden/types-cell-pattern-many/tree/txt
1368−/* typ-416 %txt /tests/golden/types-cell-pattern-many/types/txt
1369−/* src-417 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1370−/* tok-417 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1371−/* tre-417 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1372−/* typ-417 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1373−/* src-418 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1374−/* tok-418 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1375−/* tre-418 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1376−/* typ-418 %txt /tests/golden/types-cell-pattern-tail/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-proj-explicit-context/source/jibb
1986−/* tok-552 %txt /tests/golden/types-proj-explicit-context/tokens/txt
1987−/* tre-552 %txt /tests/golden/types-proj-explicit-context/tree/txt
1988−/* typ-552 %txt /tests/golden/types-proj-explicit-context/types/txt
1989−/* src-553 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
1990−/* tok-553 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
1991−/* tre-553 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
1992−/* typ-553 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
1993−/* src-554 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
1994−/* tok-554 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
1995−/* tre-554 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
1996−/* mod-554-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
1997−/* typ-554 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
1998−/* mtre-554 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
1999−/* src-555 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2000−/* tok-555 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2001−/* tre-555 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2002−/* mod-555-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2003−/* typ-555 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2004−/* mtre-555 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2005−/* src-556 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2006−/* tok-556 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2007−/* tre-556 %txt /tests/golden/types-proj-reserved-local/tree/txt
2008−/* typ-556 %txt /tests/golden/types-proj-reserved-local/types/txt
2009−/* src-557 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2010−/* tok-557 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2011−/* tre-557 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2012−/* typ-557 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2013−/* src-558 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2014−/* tok-558 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2015−/* tre-558 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2016−/* typ-558 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2017−/* src-559 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2018−/* tok-559 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2019−/* tre-559 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2020−/* typ-559 %txt /tests/golden/types-proj-reserved-mold/types/txt
2021−/* src-560 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2022−/* tok-560 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2023−/* tre-560 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2024−/* typ-560 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2025−/* src-561 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2026−/* tok-561 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2027−/* tre-561 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2028−/* typ-561 %txt /tests/golden/types-proj-reserved-positive/types/txt
2029−/* src-562 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2030−/* tok-562 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2031−/* tre-562 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2032−/* typ-562 %txt /tests/golden/types-proj-reserved-sample/types/txt
2033−/* src-563 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2034−/* tok-563 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2035−/* tre-563 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2036−/* typ-563 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2037−/* src-564 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2038−/* tok-564 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2039−/* tre-564 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2040−/* typ-564 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2041−/* src-565 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2042−/* tok-565 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2043−/* tre-565 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2044−/* typ-565 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2045−/* src-566 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2046−/* tok-566 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2047−/* tre-566 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2048−/* typ-566 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2049−/* src-567 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2050−/* tok-567 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2051−/* tre-567 %txt /tests/golden/types-proj-reserved-value/tree/txt
2052−/* typ-567 %txt /tests/golden/types-proj-reserved-value/types/txt
2053−/* src-568 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2054−/* tok-568 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2055−/* tre-568 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2056−/* typ-568 %txt /tests/golden/types-proj-single-duplicate/types/txt
2057−/* src-569 %jibb /tests/golden/types-proj-single-field/source/jibb
2058−/* tok-569 %txt /tests/golden/types-proj-single-field/tokens/txt
2059−/* tre-569 %txt /tests/golden/types-proj-single-field/tree/txt
2060−/* typ-569 %txt /tests/golden/types-proj-single-field/types/txt
2061−/* src-570 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2062−/* tok-570 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2063−/* tre-570 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2064−/* typ-570 %txt /tests/golden/types-proj-single-sample-face/types/txt
2065−/* src-571 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2066−/* tok-571 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2067−/* tre-571 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2068−/* typ-571 %txt /tests/golden/types-proj-single-wrapped/types/txt
2069−/* src-572 %jibb /tests/golden/types-qath-faces/source/jibb
2070−/* tok-572 %txt /tests/golden/types-qath-faces/tokens/txt
2071−/* tre-572 %txt /tests/golden/types-qath-faces/tree/txt
2072−/* typ-572 %txt /tests/golden/types-qath-faces/types/txt
2073−/* src-573 %jibb /tests/golden/types-qath-holes/source/jibb
2074−/* tok-573 %txt /tests/golden/types-qath-holes/tokens/txt
2075−/* tre-573 %txt /tests/golden/types-qath-holes/tree/txt
2076−/* typ-573 %txt /tests/golden/types-qath-holes/types/txt
2077−/* src-574 %jibb /tests/golden/types-qath-module-identity/source/jibb
2078−/* tok-574 %txt /tests/golden/types-qath-module-identity/tokens/txt
2079−/* tre-574 %txt /tests/golden/types-qath-module-identity/tree/txt
2080−/* mod-574-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2081−/* mod-574-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2082−/* mod-574-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2083−/* typ-574 %txt /tests/golden/types-qath-module-identity/types/txt
2084−/* mtre-574 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2085−/* src-575 %jibb /tests/golden/types-qath-recursive/source/jibb
2086−/* tok-575 %txt /tests/golden/types-qath-recursive/tokens/txt
2087−/* tre-575 %txt /tests/golden/types-qath-recursive/tree/txt
2088−/* typ-575 %txt /tests/golden/types-qath-recursive/types/txt
2089−/* src-576 %jibb /tests/golden/types-record-bound-variable/source/jibb
2090−/* tok-576 %txt /tests/golden/types-record-bound-variable/tokens/txt
2091−/* tre-576 %txt /tests/golden/types-record-bound-variable/tree/txt
2092−/* typ-576 %txt /tests/golden/types-record-bound-variable/types/txt
2093−/* src-577 %jibb /tests/golden/types-record-cast-context/source/jibb
2094−/* tok-577 %txt /tests/golden/types-record-cast-context/tokens/txt
2095−/* tre-577 %txt /tests/golden/types-record-cast-context/tree/txt
2096−/* typ-577 %txt /tests/golden/types-record-cast-context/types/txt
2097−/* src-578 %jibb /tests/golden/types-record-change/source/jibb
2098−/* tok-578 %txt /tests/golden/types-record-change/tokens/txt
2099−/* tre-578 %txt /tests/golden/types-record-change/tree/txt
2100−/* typ-578 %txt /tests/golden/types-record-change/types/txt
2101−/* src-579 %jibb /tests/golden/types-record-change-generic/source/jibb
2102−/* tok-579 %txt /tests/golden/types-record-change-generic/tokens/txt
2103−/* tre-579 %txt /tests/golden/types-record-change-generic/tree/txt
2104−/* typ-579 %txt /tests/golden/types-record-change-generic/types/txt
2105−/* src-580 %jibb /tests/golden/types-record-faces/source/jibb
2106−/* tok-580 %txt /tests/golden/types-record-faces/tokens/txt
2107−/* tre-580 %txt /tests/golden/types-record-faces/tree/txt
2108−/* typ-580 %txt /tests/golden/types-record-faces/types/txt
2109−/* src-581 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2110−/* tok-581 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2111−/* tre-581 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2112−/* typ-581 %txt /tests/golden/types-record-field-edit-separate/types/txt
2113−/* src-582 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2114−/* tok-582 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2115−/* tre-582 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2116−/* typ-582 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2117−/* src-583 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2118−/* tok-583 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2119−/* tre-583 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2120−/* typ-583 %txt /tests/golden/types-record-field-expr-separate/types/txt
2121−/* src-584 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2122−/* tok-584 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2123−/* tre-584 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2124−/* mod-584-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2125−/* typ-584 %txt /tests/golden/types-record-field-module-reachable/types/txt
2126−/* mtre-584 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2127−/* src-585 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2128−/* tok-585 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2129−/* tre-585 %txt /tests/golden/types-record-field-module-unused/tree/txt
2130−/* mod-585-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2131−/* mod-585-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2132−/* typ-585 %txt /tests/golden/types-record-field-module-unused/types/txt
2133−/* mtre-585 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2134−/* src-586 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2135−/* tok-586 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2136−/* tre-586 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2137−/* typ-586 %txt /tests/golden/types-record-field-nested-mold/types/txt
2138−/* src-587 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2139−/* tok-587 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2140−/* tre-587 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2141−/* typ-587 %txt /tests/golden/types-record-field-outer-inner/types/txt
2142−/* src-588 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2143−/* tok-588 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2144−/* tre-588 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2145−/* typ-588 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2146−/* src-589 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2147−/* tok-589 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2148−/* tre-589 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2149−/* typ-589 %txt /tests/golden/types-record-field-separate-molds/types/txt
2150−/* src-590 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2151−/* tok-590 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2152−/* tre-590 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2153−/* typ-590 %txt /tests/golden/types-record-field-unused-mold/types/txt
2154−/* src-591 %jibb /tests/golden/types-record-import/source/jibb
2155−/* tok-591 %txt /tests/golden/types-record-import/tokens/txt
2156−/* tre-591 %txt /tests/golden/types-record-import/tree/txt
2157−/* mod-591-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2158−/* typ-591 %txt /tests/golden/types-record-import/types/txt
2159−/* mtre-591 %txt /tests/golden/types-record-import/module-trees/txt
2160−/* src-592 %jibb /tests/golden/types-record-local-scheme/source/jibb
2161−/* tok-592 %txt /tests/golden/types-record-local-scheme/tokens/txt
2162−/* tre-592 %txt /tests/golden/types-record-local-scheme/tree/txt
2163−/* typ-592 %txt /tests/golden/types-record-local-scheme/types/txt
2164−/* src-593 %jibb /tests/golden/types-record-nested/source/jibb
2165−/* tok-593 %txt /tests/golden/types-record-nested/tokens/txt
2166−/* tre-593 %txt /tests/golden/types-record-nested/tree/txt
2167−/* typ-593 %txt /tests/golden/types-record-nested/types/txt
2168−/* src-594 %jibb /tests/golden/types-record-to-tuple/source/jibb
2169−/* tok-594 %txt /tests/golden/types-record-to-tuple/tokens/txt
2170−/* tre-594 %txt /tests/golden/types-record-to-tuple/tree/txt
2171−/* typ-594 %txt /tests/golden/types-record-to-tuple/types/txt
2172−/* src-595 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2173−/* tok-595 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2174−/* tre-595 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2175−/* typ-595 %txt /tests/golden/types-recursion-scc-failures/types/txt
2176−/* src-596 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2177−/* tok-596 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2178−/* tre-596 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2179−/* typ-596 %txt /tests/golden/types-recursion-scc-groups/types/txt
2180−/* src-597 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2181−/* tok-597 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2182−/* tre-597 %txt /tests/golden/types-recursion-scc-import/tree/txt
2183−/* mod-597-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2184−/* typ-597 %txt /tests/golden/types-recursion-scc-import/types/txt
2185−/* mtre-597 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2186−/* src-598 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2187−/* tok-598 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2188−/* tre-598 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2189−/* mod-598-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2190−/* typ-598 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2191−/* mtre-598 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2192−/* src-599 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2193−/* tok-599 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2194−/* tre-599 %txt /tests/golden/types-recursion-scc-local/tree/txt
2195−/* typ-599 %txt /tests/golden/types-recursion-scc-local/types/txt
2196−/* src-600 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2197−/* tok-600 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2198−/* tre-600 %txt /tests/golden/types-recursion-scc-order/tree/txt
2199−/* typ-600 %txt /tests/golden/types-recursion-scc-order/types/txt
2200−/* src-601 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2201−/* tok-601 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2202−/* tre-601 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2203−/* typ-601 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2204−/* src-602 %jibb /tests/golden/types-recursive-branch/source/jibb
2205−/* tok-602 %txt /tests/golden/types-recursive-branch/tokens/txt
2206−/* tre-602 %txt /tests/golden/types-recursive-branch/tree/txt
2207−/* typ-602 %txt /tests/golden/types-recursive-branch/types/txt
2208−/* src-603 %jibb /tests/golden/types-recursive-gate/source/jibb
2209−/* tok-603 %txt /tests/golden/types-recursive-gate/tokens/txt
2210−/* tre-603 %txt /tests/golden/types-recursive-gate/tree/txt
2211−/* typ-603 %txt /tests/golden/types-recursive-gate/types/txt
2212−/* src-604 %jibb /tests/golden/types-recursive-sample/source/jibb
2213−/* tok-604 %txt /tests/golden/types-recursive-sample/tokens/txt
2214−/* tre-604 %txt /tests/golden/types-recursive-sample/tree/txt
2215−/* typ-604 %txt /tests/golden/types-recursive-sample/types/txt
2216−/* src-605 %jibb /tests/golden/types-request-normal/source/jibb
2217−/* tok-605 %txt /tests/golden/types-request-normal/tokens/txt
2218−/* tre-605 %txt /tests/golden/types-request-normal/tree/txt
2219−/* mod-605-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2220−/* typ-605 %txt /tests/golden/types-request-normal/types/txt
2221−/* mark-605-1 %txt /tests/golden/types-request-normal/mar/full/txt
2222−/* mtre-605 %txt /tests/golden/types-request-normal/module-trees/txt
2223−/* src-606 %jibb /tests/golden/types-scope-library-poke/source/jibb
2224−/* tok-606 %txt /tests/golden/types-scope-library-poke/tokens/txt
2225−/* tre-606 %txt /tests/golden/types-scope-library-poke/tree/txt
2226−/* typ-606 %txt /tests/golden/types-scope-library-poke/types/txt
2227−/* src-607 %jibb /tests/golden/types-scope-root-api/source/jibb
2228−/* tok-607 %txt /tests/golden/types-scope-root-api/tokens/txt
2229−/* tre-607 %txt /tests/golden/types-scope-root-api/tree/txt
2230−/* typ-607 %txt /tests/golden/types-scope-root-api/types/txt
2231−/* src-608 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2232−/* tok-608 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2233−/* tre-608 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2234−/* typ-608 %txt /tests/golden/types-scope-store-duplicate/types/txt
2235−/* src-609 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2236−/* tok-609 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2237−/* tre-609 %txt /tests/golden/types-scope-store-shadow/tree/txt
2238−/* typ-609 %txt /tests/golden/types-scope-store-shadow/types/txt
2239−/* src-610 %jibb /tests/golden/types-single-case-pattern/source/jibb
2240−/* tok-610 %txt /tests/golden/types-single-case-pattern/tokens/txt
2241−/* tre-610 %txt /tests/golden/types-single-case-pattern/tree/txt
2242−/* typ-610 %txt /tests/golden/types-single-case-pattern/types/txt
2243−/* src-611 %jibb /tests/golden/types-string-interpolation/source/jibb
2244−/* tok-611 %txt /tests/golden/types-string-interpolation/tokens/txt
2245−/* tre-611 %txt /tests/golden/types-string-interpolation/tree/txt
2246−/* typ-611 %txt /tests/golden/types-string-interpolation/types/txt
2247−/* src-612 %jibb /tests/golden/types-tuple-context/source/jibb
2248−/* tok-612 %txt /tests/golden/types-tuple-context/tokens/txt
2249−/* tre-612 %txt /tests/golden/types-tuple-context/tree/txt
2250−/* typ-612 %txt /tests/golden/types-tuple-context/types/txt
2251−/* src-613 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2252−/* tok-613 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2253−/* tre-613 %txt /tests/golden/types-tuple-context-nested/tree/txt
2254−/* typ-613 %txt /tests/golden/types-tuple-context-nested/types/txt
2255−/* src-614 %jibb /tests/golden/types-union-alias/source/jibb
2256−/* tok-614 %txt /tests/golden/types-union-alias/tokens/txt
2257−/* tre-614 %txt /tests/golden/types-union-alias/tree/txt
2258−/* typ-614 %txt /tests/golden/types-union-alias/types/txt
2259−/* src-615 %jibb /tests/golden/types-union-branch-context/source/jibb
2260−/* tok-615 %txt /tests/golden/types-union-branch-context/tokens/txt
2261−/* tre-615 %txt /tests/golden/types-union-branch-context/tree/txt
2262−/* typ-615 %txt /tests/golden/types-union-branch-context/types/txt
2263−/* src-616 %jibb /tests/golden/types-union-branch-pending/source/jibb
2264−/* tok-616 %txt /tests/golden/types-union-branch-pending/tokens/txt
2265−/* tre-616 %txt /tests/golden/types-union-branch-pending/tree/txt
2266−/* typ-616 %txt /tests/golden/types-union-branch-pending/types/txt
2267−/* src-617 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2268−/* tok-617 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2269−/* tre-617 %txt /tests/golden/types-union-constructor-shape/tree/txt
2270−/* typ-617 %txt /tests/golden/types-union-constructor-shape/types/txt
2271−/* src-618 %jibb /tests/golden/types-union-context-flow/source/jibb
2272−/* tok-618 %txt /tests/golden/types-union-context-flow/tokens/txt
2273−/* tre-618 %txt /tests/golden/types-union-context-flow/tree/txt
2274−/* typ-618 %txt /tests/golden/types-union-context-flow/types/txt
2275−/* src-619 %jibb /tests/golden/types-union-finite/source/jibb
2276−/* tok-619 %txt /tests/golden/types-union-finite/tokens/txt
2277−/* tre-619 %txt /tests/golden/types-union-finite/tree/txt
2278−/* typ-619 %txt /tests/golden/types-union-finite/types/txt
2279−/* src-620 %jibb /tests/golden/types-union-finite-context/source/jibb
2280−/* tok-620 %txt /tests/golden/types-union-finite-context/tokens/txt
2281−/* tre-620 %txt /tests/golden/types-union-finite-context/tree/txt
2282−/* typ-620 %txt /tests/golden/types-union-finite-context/types/txt
2283−/* src-621 %jibb /tests/golden/types-union-finite-generic/source/jibb
2284−/* tok-621 %txt /tests/golden/types-union-finite-generic/tokens/txt
2285−/* tre-621 %txt /tests/golden/types-union-finite-generic/tree/txt
2286−/* typ-621 %txt /tests/golden/types-union-finite-generic/types/txt
2287−/* src-622 %jibb /tests/golden/types-union-finite-limit/source/jibb
2288−/* tok-622 %txt /tests/golden/types-union-finite-limit/tokens/txt
2289−/* tre-622 %txt /tests/golden/types-union-finite-limit/tree/txt
2290−/* typ-622 %txt /tests/golden/types-union-finite-limit/types/txt
2291−/* src-623 %jibb /tests/golden/types-union-import/source/jibb
2292−/* tok-623 %txt /tests/golden/types-union-import/tokens/txt
2293−/* tre-623 %txt /tests/golden/types-union-import/tree/txt
2294−/* mod-623-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2295−/* typ-623 %txt /tests/golden/types-union-import/types/txt
2296−/* mtre-623 %txt /tests/golden/types-union-import/module-trees/txt
2297−/* src-624 %jibb /tests/golden/types-union-local-pending/source/jibb
2298−/* tok-624 %txt /tests/golden/types-union-local-pending/tokens/txt
2299−/* tre-624 %txt /tests/golden/types-union-local-pending/tree/txt
2300−/* typ-624 %txt /tests/golden/types-union-local-pending/types/txt
2301−/* src-625 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2302−/* tok-625 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2303−/* tre-625 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2304−/* typ-625 %txt /tests/golden/types-union-nonwing-subject/types/txt
2305−/* src-626 %jibb /tests/golden/types-union-overlap/source/jibb
2306−/* tok-626 %txt /tests/golden/types-union-overlap/tokens/txt
2307−/* tre-626 %txt /tests/golden/types-union-overlap/tree/txt
2308−/* typ-626 %txt /tests/golden/types-union-overlap/types/txt
2309−/* src-627 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2310−/* tok-627 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2311−/* tre-627 %txt /tests/golden/types-union-overlap-nested/tree/txt
2312−/* typ-627 %txt /tests/golden/types-union-overlap-nested/types/txt
2313−/* src-628 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2314−/* tok-628 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2315−/* tre-628 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2316−/* typ-628 %txt /tests/golden/types-union-pattern-result-context/types/txt
2317−/* src-629 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2318−/* tok-629 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2319−/* tre-629 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2320−/* typ-629 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2321−/* src-630 %jibb /tests/golden/types-union-patterns/source/jibb
2322−/* tok-630 %txt /tests/golden/types-union-patterns/tokens/txt
2323−/* tre-630 %txt /tests/golden/types-union-patterns/tree/txt
2324−/* typ-630 %txt /tests/golden/types-union-patterns/types/txt
2325−/* src-631 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2326−/* tok-631 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2327−/* tre-631 %txt /tests/golden/types-union-patterns-generic/tree/txt
2328−/* typ-631 %txt /tests/golden/types-union-patterns-generic/types/txt
2329−/* src-632 %jibb /tests/golden/types-union-patterns-import/source/jibb
2330−/* tok-632 %txt /tests/golden/types-union-patterns-import/tokens/txt
2331−/* tre-632 %txt /tests/golden/types-union-patterns-import/tree/txt
2332−/* mod-632-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2333−/* typ-632 %txt /tests/golden/types-union-patterns-import/types/txt
2334−/* mtre-632 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2335−/* src-633 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2336−/* tok-633 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2337−/* tre-633 %txt /tests/golden/types-union-phantom-generic/tree/txt
2338−/* typ-633 %txt /tests/golden/types-union-phantom-generic/types/txt
2339−/* src-634 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2340−/* tok-634 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2341−/* tre-634 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2342−/* mod-634-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2343−/* mod-634-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2344−/* typ-634 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2345−/* mtre-634 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2346−/* src-635 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2347−/* tok-635 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2348−/* tre-635 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2349−/* mod-635-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2350−/* typ-635 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2351−/* mtre-635 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2352−/* src-636 %jibb /tests/golden/types-union-print-distinct/source/jibb
2353−/* tok-636 %txt /tests/golden/types-union-print-distinct/tokens/txt
2354−/* tre-636 %txt /tests/golden/types-union-print-distinct/tree/txt
2355−/* mod-636-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2356−/* mod-636-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2357−/* mod-636-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2358−/* typ-636 %txt /tests/golden/types-union-print-distinct/types/txt
2359−/* mtre-636 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2360−/* src-637 %jibb /tests/golden/types-union-print-escape/source/jibb
2361−/* tok-637 %txt /tests/golden/types-union-print-escape/tokens/txt
2362−/* tre-637 %txt /tests/golden/types-union-print-escape/tree/txt
2363−/* typ-637 %txt /tests/golden/types-union-print-escape/types/txt
2364−/* src-638 %jibb /tests/golden/types-union-print-local/source/jibb
2365−/* tok-638 %txt /tests/golden/types-union-print-local/tokens/txt
2366−/* tre-638 %txt /tests/golden/types-union-print-local/tree/txt
2367−/* typ-638 %txt /tests/golden/types-union-print-local/types/txt
2368−/* src-639 %jibb /tests/golden/types-union-print-nested/source/jibb
2369−/* tok-639 %txt /tests/golden/types-union-print-nested/tokens/txt
2370−/* tre-639 %txt /tests/golden/types-union-print-nested/tree/txt
2371−/* typ-639 %txt /tests/golden/types-union-print-nested/types/txt
2372−/* src-640 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2373−/* tok-640 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2374−/* tre-640 %txt /tests/golden/types-union-print-same-origin/tree/txt
2375−/* mod-640-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2376−/* typ-640 %txt /tests/golden/types-union-print-same-origin/types/txt
2377−/* mtre-640 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2378−/* src-641 %jibb /tests/golden/types-union-print-transitive/source/jibb
2379−/* tok-641 %txt /tests/golden/types-union-print-transitive/tokens/txt
2380−/* tre-641 %txt /tests/golden/types-union-print-transitive/tree/txt
2381−/* mod-641-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2382−/* mod-641-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2383−/* typ-641 %txt /tests/golden/types-union-print-transitive/types/txt
2384−/* mtre-641 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2385−/* src-642 %jibb /tests/golden/types-union-singleton/source/jibb
2386−/* tok-642 %txt /tests/golden/types-union-singleton/tokens/txt
2387−/* tre-642 %txt /tests/golden/types-union-singleton/tree/txt
2388−/* typ-642 %txt /tests/golden/types-union-singleton/types/txt
2389−/* src-643 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2390−/* tok-643 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2391−/* tre-643 %txt /tests/golden/types-union-tag-atoms/tree/txt
2392−/* typ-643 %txt /tests/golden/types-union-tag-atoms/types/txt
2393−/* src-644 %jibb /tests/golden/types-union-tags/source/jibb
2394−/* tok-644 %txt /tests/golden/types-union-tags/tokens/txt
2395−/* tre-644 %txt /tests/golden/types-union-tags/tree/txt
2396−/* typ-644 %txt /tests/golden/types-union-tags/types/txt
2397−/* src-645 %jibb /tests/golden/types-union-unresolved/source/jibb
2398−/* tok-645 %txt /tests/golden/types-union-unresolved/tokens/txt
2399−/* tre-645 %txt /tests/golden/types-union-unresolved/tree/txt
2400−/* typ-645 %txt /tests/golden/types-union-unresolved/types/txt
2401−/* src-646 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2402−/* tok-646 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2403−/* tre-646 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2404−/* typ-646 %txt /tests/golden/types-union-unresolved-flow/types/txt
2405−/* src-647 %jibb /tests/golden/types-unit-construction/source/jibb
2406−/* tok-647 %txt /tests/golden/types-unit-construction/tokens/txt
2407−/* tre-647 %txt /tests/golden/types-unit-construction/tree/txt
2408−/* typ-647 %txt /tests/golden/types-unit-construction/types/txt
2409−/* src-648 %jibb /tests/golden/types-unit-context/source/jibb
2410−/* tok-648 %txt /tests/golden/types-unit-context/tokens/txt
2411−/* tre-648 %txt /tests/golden/types-unit-context/tree/txt
2412−/* typ-648 %txt /tests/golden/types-unit-context/types/txt
2413−/* src-649 %jibb /tests/golden/types-unit-patterns/source/jibb
2414−/* tok-649 %txt /tests/golden/types-unit-patterns/tokens/txt
2415−/* tre-649 %txt /tests/golden/types-unit-patterns/tree/txt
2416−/* typ-649 %txt /tests/golden/types-unit-patterns/types/txt
2417−/* src-650 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2418−/* tok-650 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2419−/* tre-650 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2420−/* typ-650 %txt /tests/golden/types-value-cycle-shadow/types/txt
2421−/* src-651 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2422−/* tok-651 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2423−/* tre-651 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2424−/* typ-651 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2425−/* src-652 %jibb /tests/golden/types-value-cycles/source/jibb
2426−/* tok-652 %txt /tests/golden/types-value-cycles/tokens/txt
2427−/* tre-652 %txt /tests/golden/types-value-cycles/tree/txt
2428−/* typ-652 %txt /tests/golden/types-value-cycles/types/txt
1365+/* src-416 %jibb /tests/golden/types-cell-branch-context/source/jibb
1366+/* tok-416 %txt /tests/golden/types-cell-branch-context/tokens/txt
1367+/* tre-416 %txt /tests/golden/types-cell-branch-context/tree/txt
1368+/* typ-416 %txt /tests/golden/types-cell-branch-context/types/txt
1369+/* src-417 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1370+/* tok-417 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1371+/* tre-417 %txt /tests/golden/types-cell-pattern-many/tree/txt
1372+/* typ-417 %txt /tests/golden/types-cell-pattern-many/types/txt
1373+/* src-418 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1374+/* tok-418 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1375+/* tre-418 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1376+/* typ-418 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1377+/* src-419 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1378+/* tok-419 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1379+/* tre-419 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1380+/* typ-419 %txt /tests/golden/types-cell-pattern-tail/types/txt
1381+/* src-420 %jibb /tests/golden/types-constructor-context/source/jibb
1382+/* tok-420 %txt /tests/golden/types-constructor-context/tokens/txt
1383+/* tre-420 %txt /tests/golden/types-constructor-context/tree/txt
1384+/* typ-420 %txt /tests/golden/types-constructor-context/types/txt
1385+/* src-421 %jibb /tests/golden/types-deferred-call-context/source/jibb
1386+/* tok-421 %txt /tests/golden/types-deferred-call-context/tokens/txt
1387+/* tre-421 %txt /tests/golden/types-deferred-call-context/tree/txt
1388+/* typ-421 %txt /tests/golden/types-deferred-call-context/types/txt
1389+/* src-422 %jibb /tests/golden/types-equal-head-disjoint/source/jibb
1390+/* tok-422 %txt /tests/golden/types-equal-head-disjoint/tokens/txt
1391+/* tre-422 %txt /tests/golden/types-equal-head-disjoint/tree/txt
1392+/* typ-422 %txt /tests/golden/types-equal-head-disjoint/types/txt
1393+/* src-423 %jibb /tests/golden/types-flag-branch-context/source/jibb
1394+/* tok-423 %txt /tests/golden/types-flag-branch-context/tokens/txt
1395+/* tre-423 %txt /tests/golden/types-flag-branch-context/tree/txt
1396+/* typ-423 %txt /tests/golden/types-flag-branch-context/types/txt
1397+/* src-424 %jibb /tests/golden/types-generic-arity/source/jibb
1398+/* tok-424 %txt /tests/golden/types-generic-arity/tokens/txt
1399+/* tre-424 %txt /tests/golden/types-generic-arity/tree/txt
1400+/* typ-424 %txt /tests/golden/types-generic-arity/types/txt
1401+/* src-425 %jibb /tests/golden/types-generic-face-inference/source/jibb
1402+/* tok-425 %txt /tests/golden/types-generic-face-inference/tokens/txt
1403+/* tre-425 %txt /tests/golden/types-generic-face-inference/tree/txt
1404+/* typ-425 %txt /tests/golden/types-generic-face-inference/types/txt
1405+/* src-426 %jibb /tests/golden/types-generic-gates/source/jibb
1406+/* tok-426 %txt /tests/golden/types-generic-gates/tokens/txt
1407+/* tre-426 %txt /tests/golden/types-generic-gates/tree/txt
1408+/* typ-426 %txt /tests/golden/types-generic-gates/types/txt
1409+/* src-427 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1410+/* tok-427 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1411+/* tre-427 %txt /tests/golden/types-generic-import-reverse/tree/txt
1412+/* mod-427-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1413+/* typ-427 %txt /tests/golden/types-generic-import-reverse/types/txt
1414+/* mtre-427 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1415+/* src-428 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1416+/* tok-428 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1417+/* tre-428 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1418+/* typ-428 %txt /tests/golden/types-generic-lexical-alias/types/txt
1419+/* src-429 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1420+/* tok-429 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1421+/* tre-429 %txt /tests/golden/types-generic-local-parameter/tree/txt
1422+/* typ-429 %txt /tests/golden/types-generic-local-parameter/types/txt
1423+/* src-430 %jibb /tests/golden/types-generic-local-scope/source/jibb
1424+/* tok-430 %txt /tests/golden/types-generic-local-scope/tokens/txt
1425+/* tre-430 %txt /tests/golden/types-generic-local-scope/tree/txt
1426+/* typ-430 %txt /tests/golden/types-generic-local-scope/types/txt
1427+/* src-431 %jibb /tests/golden/types-generic-module/source/jibb
1428+/* tok-431 %txt /tests/golden/types-generic-module/tokens/txt
1429+/* tre-431 %txt /tests/golden/types-generic-module/tree/txt
1430+/* mod-431-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1431+/* typ-431 %txt /tests/golden/types-generic-module/types/txt
1432+/* mtre-431 %txt /tests/golden/types-generic-module/module-trees/txt
1433+/* src-432 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1434+/* tok-432 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1435+/* tre-432 %txt /tests/golden/types-generic-nested-scope/tree/txt
1436+/* typ-432 %txt /tests/golden/types-generic-nested-scope/types/txt
1437+/* src-433 %jibb /tests/golden/types-generic-parameters/source/jibb
1438+/* tok-433 %txt /tests/golden/types-generic-parameters/tokens/txt
1439+/* tre-433 %txt /tests/golden/types-generic-parameters/tree/txt
1440+/* typ-433 %txt /tests/golden/types-generic-parameters/types/txt
1441+/* src-434 %jibb /tests/golden/types-generic-record/source/jibb
1442+/* tok-434 %txt /tests/golden/types-generic-record/tokens/txt
1443+/* tre-434 %txt /tests/golden/types-generic-record/tree/txt
1444+/* typ-434 %txt /tests/golden/types-generic-record/types/txt
1445+/* src-435 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1446+/* tok-435 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1447+/* tre-435 %txt /tests/golden/types-generic-recursive-union/tree/txt
1448+/* typ-435 %txt /tests/golden/types-generic-recursive-union/types/txt
1449+/* src-436 %jibb /tests/golden/types-generic-repeated/source/jibb
1450+/* tok-436 %txt /tests/golden/types-generic-repeated/tokens/txt
1451+/* tre-436 %txt /tests/golden/types-generic-repeated/tree/txt
1452+/* typ-436 %txt /tests/golden/types-generic-repeated/types/txt
1453+/* src-437 %jibb /tests/golden/types-generic-result-context/source/jibb
1454+/* tok-437 %txt /tests/golden/types-generic-result-context/tokens/txt
1455+/* tre-437 %txt /tests/golden/types-generic-result-context/tree/txt
1456+/* typ-437 %txt /tests/golden/types-generic-result-context/types/txt
1457+/* src-438 %jibb /tests/golden/types-generic-union-alias/source/jibb
1458+/* tok-438 %txt /tests/golden/types-generic-union-alias/tokens/txt
1459+/* tre-438 %txt /tests/golden/types-generic-union-alias/tree/txt
1460+/* typ-438 %txt /tests/golden/types-generic-union-alias/types/txt
1461+/* src-439 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1462+/* tok-439 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1463+/* tre-439 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1464+/* mod-439-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1465+/* typ-439 %txt /tests/golden/types-generic-union-alias-face/types/txt
1466+/* mtre-439 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1467+/* src-440 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1468+/* tok-440 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1469+/* tre-440 %txt /tests/golden/types-generic-union-capitals/tree/txt
1470+/* typ-440 %txt /tests/golden/types-generic-union-capitals/types/txt
1471+/* src-441 %jibb /tests/golden/types-generic-union-errors/source/jibb
1472+/* tok-441 %txt /tests/golden/types-generic-union-errors/tokens/txt
1473+/* tre-441 %txt /tests/golden/types-generic-union-errors/tree/txt
1474+/* typ-441 %txt /tests/golden/types-generic-union-errors/types/txt
1475+/* src-442 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1476+/* tok-442 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1477+/* tre-442 %txt /tests/golden/types-generic-union-escaping/tree/txt
1478+/* mod-442-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1479+/* mod-442-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1480+/* typ-442 %txt /tests/golden/types-generic-union-escaping/types/txt
1481+/* mtre-442 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1482+/* src-443 %jibb /tests/golden/types-generic-union-import/source/jibb
1483+/* tok-443 %txt /tests/golden/types-generic-union-import/tokens/txt
1484+/* tre-443 %txt /tests/golden/types-generic-union-import/tree/txt
1485+/* mod-443-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1486+/* mod-443-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1487+/* typ-443 %txt /tests/golden/types-generic-union-import/types/txt
1488+/* mtre-443 %txt /tests/golden/types-generic-union-import/module-trees/txt
1489+/* src-444 %jibb /tests/golden/types-generic-union-local/source/jibb
1490+/* tok-444 %txt /tests/golden/types-generic-union-local/tokens/txt
1491+/* tre-444 %txt /tests/golden/types-generic-union-local/tree/txt
1492+/* typ-444 %txt /tests/golden/types-generic-union-local/types/txt
1493+/* src-445 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1494+/* tok-445 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1495+/* tre-445 %txt /tests/golden/types-generic-union-transitive/tree/txt
1496+/* mod-445-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1497+/* mod-445-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1498+/* typ-445 %txt /tests/golden/types-generic-union-transitive/types/txt
1499+/* mtre-445 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1500+/* src-446 %jibb /tests/golden/types-hole-concrete/source/jibb
1501+/* tok-446 %txt /tests/golden/types-hole-concrete/tokens/txt
1502+/* tre-446 %txt /tests/golden/types-hole-concrete/tree/txt
1503+/* typ-446 %txt /tests/golden/types-hole-concrete/types/txt
1504+/* src-447 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1505+/* tok-447 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1506+/* tre-447 %txt /tests/golden/types-hole-generic-mold/tree/txt
1507+/* typ-447 %txt /tests/golden/types-hole-generic-mold/types/txt
1508+/* src-448 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1509+/* tok-448 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1510+/* tre-448 %txt /tests/golden/types-hole-local-boundary/tree/txt
1511+/* typ-448 %txt /tests/golden/types-hole-local-boundary/types/txt
1512+/* src-449 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1513+/* tok-449 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1514+/* tre-449 %txt /tests/golden/types-hole-module-boundary/tree/txt
1515+/* mod-449-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1516+/* typ-449 %txt /tests/golden/types-hole-module-boundary/types/txt
1517+/* mtre-449 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1518+/* src-450 %jibb /tests/golden/types-hole-named-complex/source/jibb
1519+/* tok-450 %txt /tests/golden/types-hole-named-complex/tokens/txt
1520+/* tre-450 %txt /tests/golden/types-hole-named-complex/tree/txt
1521+/* typ-450 %txt /tests/golden/types-hole-named-complex/types/txt
1522+/* src-451 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1523+/* tok-451 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1524+/* tre-451 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1525+/* typ-451 %txt /tests/golden/types-hole-numeric-capture/types/txt
1526+/* src-452 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1527+/* tok-452 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1528+/* tre-452 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1529+/* typ-452 %txt /tests/golden/types-hole-unbound-mold/types/txt
1530+/* src-453 %jibb /tests/golden/types-hole-unsupported/source/jibb
1531+/* tok-453 %txt /tests/golden/types-hole-unsupported/tokens/txt
1532+/* tre-453 %txt /tests/golden/types-hole-unsupported/tree/txt
1533+/* typ-453 %txt /tests/golden/types-hole-unsupported/types/txt
1534+/* src-454 %jibb /tests/golden/types-hole-user-generic/source/jibb
1535+/* tok-454 %txt /tests/golden/types-hole-user-generic/tokens/txt
1536+/* tre-454 %txt /tests/golden/types-hole-user-generic/tree/txt
1537+/* typ-454 %txt /tests/golden/types-hole-user-generic/types/txt
1538+/* src-455 %jibb /tests/golden/types-hole-user-named/source/jibb
1539+/* tok-455 %txt /tests/golden/types-hole-user-named/tokens/txt
1540+/* tre-455 %txt /tests/golden/types-hole-user-named/tree/txt
1541+/* typ-455 %txt /tests/golden/types-hole-user-named/types/txt
1542+/* src-456 %jibb /tests/golden/types-hole-user-value/source/jibb
1543+/* tok-456 %txt /tests/golden/types-hole-user-value/tokens/txt
1544+/* tre-456 %txt /tests/golden/types-hole-user-value/tree/txt
1545+/* typ-456 %txt /tests/golden/types-hole-user-value/types/txt
1546+/* src-457 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1547+/* tok-457 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1548+/* tre-457 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1549+/* typ-457 %txt /tests/golden/types-import-duplicate-mark/types/txt
1550+/* mark-457-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1551+/* src-458 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1552+/* tok-458 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1553+/* tre-458 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1554+/* typ-458 %txt /tests/golden/types-import-duplicate-sur/types/txt
1555+/* imp-458-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1556+/* imp-458-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1557+/* imp-458-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1558+/* src-459 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1559+/* tok-459 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1560+/* tre-459 %txt /tests/golden/types-import-hoon-flags/tree/txt
1561+/* typ-459 %txt /tests/golden/types-import-hoon-flags/types/txt
1562+/* imp-459-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1563+/* imp-459-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1564+/* imp-459-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1565+/* imp-459-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1566+/* src-460 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1567+/* tok-460 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1568+/* tre-460 %txt /tests/golden/types-import-hoon-noun/tree/txt
1569+/* typ-460 %txt /tests/golden/types-import-hoon-noun/types/txt
1570+/* imp-460-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1571+/* imp-460-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1572+/* imp-460-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1573+/* imp-460-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1574+/* src-461 %jibb /tests/golden/types-import-mark/source/jibb
1575+/* tok-461 %txt /tests/golden/types-import-mark/tokens/txt
1576+/* tre-461 %txt /tests/golden/types-import-mark/tree/txt
1577+/* typ-461 %txt /tests/golden/types-import-mark/types/txt
1578+/* imp-461-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1579+/* mark-461-1 %txt /tests/golden/types-import-mark/mar/label/txt
1580+/* src-462 %jibb /tests/golden/types-import-mark-record/source/jibb
1581+/* tok-462 %txt /tests/golden/types-import-mark-record/tokens/txt
1582+/* tre-462 %txt /tests/golden/types-import-mark-record/tree/txt
1583+/* typ-462 %txt /tests/golden/types-import-mark-record/types/txt
1584+/* mark-462-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1585+/* mark-462-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1586+/* src-463 %jibb /tests/golden/types-import-missing-mold/source/jibb
1587+/* tok-463 %txt /tests/golden/types-import-missing-mold/tokens/txt
1588+/* tre-463 %txt /tests/golden/types-import-missing-mold/tree/txt
1589+/* typ-463 %txt /tests/golden/types-import-missing-mold/types/txt
1590+/* imp-463-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1591+/* src-464 %jibb /tests/golden/types-import-sur/source/jibb
1592+/* tok-464 %txt /tests/golden/types-import-sur/tokens/txt
1593+/* tre-464 %txt /tests/golden/types-import-sur/tree/txt
1594+/* typ-464 %txt /tests/golden/types-import-sur/types/txt
1595+/* imp-464-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1596+/* imp-464-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1597+/* src-465 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1598+/* tok-465 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1599+/* tre-465 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1600+/* mod-465-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1601+/* typ-465 %txt /tests/golden/types-import-sur-record-graph/types/txt
1602+/* imp-465-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1603+/* mtre-465 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1604+/* src-466 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1605+/* tok-466 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1606+/* tre-466 %txt /tests/golden/types-import-tlon-notes/tree/txt
1607+/* typ-466 %txt /tests/golden/types-import-tlon-notes/types/txt
1608+/* imp-466-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1609+/* imp-466-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1610+/* imp-466-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1611+/* imp-466-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1612+/* imp-466-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1613+/* imp-466-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1614+/* imp-466-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1615+/* src-467 %jibb /tests/golden/types-list-branch/source/jibb
1616+/* tok-467 %txt /tests/golden/types-list-branch/tokens/txt
1617+/* tre-467 %txt /tests/golden/types-list-branch/tree/txt
1618+/* typ-467 %txt /tests/golden/types-list-branch/types/txt
1619+/* src-468 %jibb /tests/golden/types-list-cons/source/jibb
1620+/* tok-468 %txt /tests/golden/types-list-cons/tokens/txt
1621+/* tre-468 %txt /tests/golden/types-list-cons/tree/txt
1622+/* typ-468 %txt /tests/golden/types-list-cons/types/txt
1623+/* src-469 %jibb /tests/golden/types-list-context/source/jibb
1624+/* tok-469 %txt /tests/golden/types-list-context/tokens/txt
1625+/* tre-469 %txt /tests/golden/types-list-context/tree/txt
1626+/* typ-469 %txt /tests/golden/types-list-context/types/txt
1627+/* src-470 %jibb /tests/golden/types-list-imported/source/jibb
1628+/* tok-470 %txt /tests/golden/types-list-imported/tokens/txt
1629+/* tre-470 %txt /tests/golden/types-list-imported/tree/txt
1630+/* typ-470 %txt /tests/golden/types-list-imported/types/txt
1631+/* imp-470-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1632+/* imp-470-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1633+/* src-471 %jibb /tests/golden/types-list-open/source/jibb
1634+/* tok-471 %txt /tests/golden/types-list-open/tokens/txt
1635+/* tre-471 %txt /tests/golden/types-list-open/tree/txt
1636+/* typ-471 %txt /tests/golden/types-list-open/types/txt
1637+/* src-472 %jibb /tests/golden/types-list-open-constraints/source/jibb
1638+/* tok-472 %txt /tests/golden/types-list-open-constraints/tokens/txt
1639+/* tre-472 %txt /tests/golden/types-list-open-constraints/tree/txt
1640+/* typ-472 %txt /tests/golden/types-list-open-constraints/types/txt
1641+/* src-473 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1642+/* tok-473 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1643+/* tre-473 %txt /tests/golden/types-list-pattern-imported/tree/txt
1644+/* typ-473 %txt /tests/golden/types-list-pattern-imported/types/txt
1645+/* imp-473-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1646+/* imp-473-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1647+/* src-474 %jibb /tests/golden/types-list-patterns/source/jibb
1648+/* tok-474 %txt /tests/golden/types-list-patterns/tokens/txt
1649+/* tre-474 %txt /tests/golden/types-list-patterns/tree/txt
1650+/* typ-474 %txt /tests/golden/types-list-patterns/types/txt
1651+/* src-475 %jibb /tests/golden/types-list-zero-fit/source/jibb
1652+/* tok-475 %txt /tests/golden/types-list-zero-fit/tokens/txt
1653+/* tre-475 %txt /tests/golden/types-list-zero-fit/tree/txt
1654+/* typ-475 %txt /tests/golden/types-list-zero-fit/types/txt
1655+/* src-476 %jibb /tests/golden/types-literal-constructor-nouns/source/jibb
1656+/* tok-476 %txt /tests/golden/types-literal-constructor-nouns/tokens/txt
1657+/* tre-476 %txt /tests/golden/types-literal-constructor-nouns/tree/txt
1658+/* typ-476 %txt /tests/golden/types-literal-constructor-nouns/types/txt
1659+/* src-477 %jibb /tests/golden/types-local-capitals/source/jibb
1660+/* tok-477 %txt /tests/golden/types-local-capitals/tokens/txt
1661+/* tre-477 %txt /tests/golden/types-local-capitals/tree/txt
1662+/* typ-477 %txt /tests/golden/types-local-capitals/types/txt
1663+/* src-478 %jibb /tests/golden/types-local-recursive/source/jibb
1664+/* tok-478 %txt /tests/golden/types-local-recursive/tokens/txt
1665+/* tre-478 %txt /tests/golden/types-local-recursive/tree/txt
1666+/* typ-478 %txt /tests/golden/types-local-recursive/types/txt
1667+/* src-479 %jibb /tests/golden/types-local-scc/source/jibb
1668+/* tok-479 %txt /tests/golden/types-local-scc/tokens/txt
1669+/* tre-479 %txt /tests/golden/types-local-scc/tree/txt
1670+/* typ-479 %txt /tests/golden/types-local-scc/types/txt
1671+/* src-480 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1672+/* tok-480 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1673+/* tre-480 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1674+/* typ-480 %txt /tests/golden/types-local-scc-adversarial/types/txt
1675+/* src-481 %jibb /tests/golden/types-loobean-singleton-source/source/jibb
1676+/* tok-481 %txt /tests/golden/types-loobean-singleton-source/tokens/txt
1677+/* tre-481 %txt /tests/golden/types-loobean-singleton-source/tree/txt
1678+/* typ-481 %txt /tests/golden/types-loobean-singleton-source/types/txt
1679+/* src-482 %jibb /tests/golden/types-loobean-union-context/source/jibb
1680+/* tok-482 %txt /tests/golden/types-loobean-union-context/tokens/txt
1681+/* tre-482 %txt /tests/golden/types-loobean-union-context/tree/txt
1682+/* typ-482 %txt /tests/golden/types-loobean-union-context/types/txt
1683+/* src-483 %jibb /tests/golden/types-missing-tag-context/source/jibb
1684+/* tok-483 %txt /tests/golden/types-missing-tag-context/tokens/txt
1685+/* tre-483 %txt /tests/golden/types-missing-tag-context/tree/txt
1686+/* typ-483 %txt /tests/golden/types-missing-tag-context/types/txt
1687+/* src-484 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1688+/* tok-484 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1689+/* tre-484 %txt /tests/golden/types-missing-tag-imported/tree/txt
1690+/* typ-484 %txt /tests/golden/types-missing-tag-imported/types/txt
1691+/* imp-484-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1692+/* imp-484-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1693+/* src-485 %jibb /tests/golden/types-missing-tag-named/source/jibb
1694+/* tok-485 %txt /tests/golden/types-missing-tag-named/tokens/txt
1695+/* tre-485 %txt /tests/golden/types-missing-tag-named/tree/txt
1696+/* typ-485 %txt /tests/golden/types-missing-tag-named/types/txt
1697+/* src-486 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1698+/* tok-486 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1699+/* tre-486 %txt /tests/golden/types-module-field-duplicate/tree/txt
1700+/* mod-486-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1701+/* typ-486 %txt /tests/golden/types-module-field-duplicate/types/txt
1702+/* mtre-486 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1703+/* src-487 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1704+/* tok-487 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1705+/* tre-487 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1706+/* mod-487-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1707+/* typ-487 %txt /tests/golden/types-module-field-nonrecord/types/txt
1708+/* mtre-487 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1709+/* src-488 %jibb /tests/golden/types-module-field-path/source/jibb
1710+/* tok-488 %txt /tests/golden/types-module-field-path/tokens/txt
1711+/* tre-488 %txt /tests/golden/types-module-field-path/tree/txt
1712+/* mod-488-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1713+/* typ-488 %txt /tests/golden/types-module-field-path/types/txt
1714+/* mtre-488 %txt /tests/golden/types-module-field-path/module-trees/txt
1715+/* src-489 %jibb /tests/golden/types-module-field-shadow/source/jibb
1716+/* tok-489 %txt /tests/golden/types-module-field-shadow/tokens/txt
1717+/* tre-489 %txt /tests/golden/types-module-field-shadow/tree/txt
1718+/* mod-489-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1719+/* typ-489 %txt /tests/golden/types-module-field-shadow/types/txt
1720+/* mtre-489 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1721+/* src-490 %jibb /tests/golden/types-module-fixtures/source/jibb
1722+/* tok-490 %txt /tests/golden/types-module-fixtures/tokens/txt
1723+/* tre-490 %txt /tests/golden/types-module-fixtures/tree/txt
1724+/* mod-490-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1725+/* mod-490-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1726+/* typ-490 %txt /tests/golden/types-module-fixtures/types/txt
1727+/* mtre-490 %txt /tests/golden/types-module-fixtures/module-trees/txt
1728+/* src-491 %jibb /tests/golden/types-module-mixed/source/jibb
1729+/* tok-491 %txt /tests/golden/types-module-mixed/tokens/txt
1730+/* tre-491 %txt /tests/golden/types-module-mixed/tree/txt
1731+/* mod-491-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1732+/* typ-491 %txt /tests/golden/types-module-mixed/types/txt
1733+/* imp-491-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1734+/* mark-491-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1735+/* mtre-491 %txt /tests/golden/types-module-mixed/module-trees/txt
1736+/* src-492 %jibb /tests/golden/types-multi-call/source/jibb
1737+/* tok-492 %txt /tests/golden/types-multi-call/tokens/txt
1738+/* tre-492 %txt /tests/golden/types-multi-call/tree/txt
1739+/* typ-492 %txt /tests/golden/types-multi-call/types/txt
1740+/* src-493 %jibb /tests/golden/types-multi-import/source/jibb
1741+/* tok-493 %txt /tests/golden/types-multi-import/tokens/txt
1742+/* tre-493 %txt /tests/golden/types-multi-import/tree/txt
1743+/* mod-493-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1744+/* typ-493 %txt /tests/golden/types-multi-import/types/txt
1745+/* mtre-493 %txt /tests/golden/types-multi-import/module-trees/txt
1746+/* src-494 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1747+/* tok-494 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1748+/* tre-494 %txt /tests/golden/types-nested-missing-tag/tree/txt
1749+/* typ-494 %txt /tests/golden/types-nested-missing-tag/types/txt
1750+/* src-495 %jibb /tests/golden/types-nested-noun-context/source/jibb
1751+/* tok-495 %txt /tests/golden/types-nested-noun-context/tokens/txt
1752+/* tre-495 %txt /tests/golden/types-nested-noun-context/tree/txt
1753+/* typ-495 %txt /tests/golden/types-nested-noun-context/types/txt
1754+/* src-496 %jibb /tests/golden/types-nested-shallow-preserve/source/jibb
1755+/* tok-496 %txt /tests/golden/types-nested-shallow-preserve/tokens/txt
1756+/* tre-496 %txt /tests/golden/types-nested-shallow-preserve/tree/txt
1757+/* typ-496 %txt /tests/golden/types-nested-shallow-preserve/types/txt
1758+/* src-497 %jibb /tests/golden/types-nested-union-context/source/jibb
1759+/* tok-497 %txt /tests/golden/types-nested-union-context/tokens/txt
1760+/* tre-497 %txt /tests/golden/types-nested-union-context/tree/txt
1761+/* typ-497 %txt /tests/golden/types-nested-union-context/types/txt
1762+/* src-498 %jibb /tests/golden/types-null-context/source/jibb
1763+/* tok-498 %txt /tests/golden/types-null-context/tokens/txt
1764+/* tre-498 %txt /tests/golden/types-null-context/tree/txt
1765+/* typ-498 %txt /tests/golden/types-null-context/types/txt
1766+/* src-499 %jibb /tests/golden/types-null-overlap/source/jibb
1767+/* tok-499 %txt /tests/golden/types-null-overlap/tokens/txt
1768+/* tre-499 %txt /tests/golden/types-null-overlap/tree/txt
1769+/* typ-499 %txt /tests/golden/types-null-overlap/types/txt
1770+/* src-500 %jibb /tests/golden/types-null-unresolved/source/jibb
1771+/* tok-500 %txt /tests/golden/types-null-unresolved/tokens/txt
1772+/* tre-500 %txt /tests/golden/types-null-unresolved/tree/txt
1773+/* typ-500 %txt /tests/golden/types-null-unresolved/types/txt
1774+/* src-501 %jibb /tests/golden/types-pair-context/source/jibb
1775+/* tok-501 %txt /tests/golden/types-pair-context/tokens/txt
1776+/* tre-501 %txt /tests/golden/types-pair-context/tree/txt
1777+/* typ-501 %txt /tests/golden/types-pair-context/types/txt
1778+/* src-502 %jibb /tests/golden/types-partial-apply/source/jibb
1779+/* tok-502 %txt /tests/golden/types-partial-apply/tokens/txt
1780+/* tre-502 %txt /tests/golden/types-partial-apply/tree/txt
1781+/* typ-502 %txt /tests/golden/types-partial-apply/types/txt
1782+/* src-503 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1783+/* tok-503 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1784+/* tre-503 %txt /tests/golden/types-partial-atom-alias/tree/txt
1785+/* typ-503 %txt /tests/golden/types-partial-atom-alias/types/txt
1786+/* src-504 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1787+/* tok-504 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1788+/* tre-504 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1789+/* typ-504 %txt /tests/golden/types-partial-atom-constraint/types/txt
1790+/* src-505 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1791+/* tok-505 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1792+/* tre-505 %txt /tests/golden/types-partial-atom-widening/tree/txt
1793+/* typ-505 %txt /tests/golden/types-partial-atom-widening/types/txt
1794+/* src-506 %jibb /tests/golden/types-partial-aura/source/jibb
1795+/* tok-506 %txt /tests/golden/types-partial-aura/tokens/txt
1796+/* tre-506 %txt /tests/golden/types-partial-aura/tree/txt
1797+/* typ-506 %txt /tests/golden/types-partial-aura/types/txt
1798+/* src-507 %jibb /tests/golden/types-partial-aura-family/source/jibb
1799+/* tok-507 %txt /tests/golden/types-partial-aura-family/tokens/txt
1800+/* tre-507 %txt /tests/golden/types-partial-aura-family/tree/txt
1801+/* typ-507 %txt /tests/golden/types-partial-aura-family/types/txt
1802+/* src-508 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1803+/* tok-508 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1804+/* tre-508 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1805+/* typ-508 %txt /tests/golden/types-partial-aura-generalization/types/txt
1806+/* src-509 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1807+/* tok-509 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1808+/* tre-509 %txt /tests/golden/types-partial-bare-atom/tree/txt
1809+/* typ-509 %txt /tests/golden/types-partial-bare-atom/types/txt
1810+/* src-510 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1811+/* tok-510 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1812+/* tre-510 %txt /tests/golden/types-partial-branch-widening/tree/txt
1813+/* typ-510 %txt /tests/golden/types-partial-branch-widening/types/txt
1814+/* src-511 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1815+/* tok-511 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1816+/* tre-511 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1817+/* typ-511 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1818+/* src-512 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1819+/* tok-512 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1820+/* tre-512 %txt /tests/golden/types-partial-decimal-default/tree/txt
1821+/* typ-512 %txt /tests/golden/types-partial-decimal-default/types/txt
1822+/* src-513 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1823+/* tok-513 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1824+/* tre-513 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1825+/* typ-513 %txt /tests/golden/types-partial-dependency-chain/types/txt
1826+/* src-514 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1827+/* tok-514 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1828+/* tre-514 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1829+/* typ-514 %txt /tests/golden/types-partial-explicit-capital/types/txt
1830+/* src-515 %jibb /tests/golden/types-partial-forward/source/jibb
1831+/* tok-515 %txt /tests/golden/types-partial-forward/tokens/txt
1832+/* tre-515 %txt /tests/golden/types-partial-forward/tree/txt
1833+/* typ-515 %txt /tests/golden/types-partial-forward/types/txt
1834+/* src-516 %jibb /tests/golden/types-partial-generalization/source/jibb
1835+/* tok-516 %txt /tests/golden/types-partial-generalization/tokens/txt
1836+/* tre-516 %txt /tests/golden/types-partial-generalization/tree/txt
1837+/* typ-516 %txt /tests/golden/types-partial-generalization/types/txt
1838+/* src-517 %jibb /tests/golden/types-partial-identity/source/jibb
1839+/* tok-517 %txt /tests/golden/types-partial-identity/tokens/txt
1840+/* tre-517 %txt /tests/golden/types-partial-identity/tree/txt
1841+/* typ-517 %txt /tests/golden/types-partial-identity/types/txt
1842+/* src-518 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1843+/* tok-518 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1844+/* tre-518 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1845+/* typ-518 %txt /tests/golden/types-partial-independent-atoms/types/txt
1846+/* src-519 %jibb /tests/golden/types-partial-local-molds/source/jibb
1847+/* tok-519 %txt /tests/golden/types-partial-local-molds/tokens/txt
1848+/* tre-519 %txt /tests/golden/types-partial-local-molds/tree/txt
1849+/* typ-519 %txt /tests/golden/types-partial-local-molds/types/txt
1850+/* src-520 %jibb /tests/golden/types-partial-locals/source/jibb
1851+/* tok-520 %txt /tests/golden/types-partial-locals/tokens/txt
1852+/* tre-520 %txt /tests/golden/types-partial-locals/tree/txt
1853+/* typ-520 %txt /tests/golden/types-partial-locals/types/txt
1854+/* src-521 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1855+/* tok-521 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1856+/* tre-521 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1857+/* typ-521 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1858+/* src-522 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1859+/* tok-522 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1860+/* tre-522 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1861+/* typ-522 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1862+/* src-523 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1863+/* tok-523 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1864+/* tre-523 %txt /tests/golden/types-partial-mold-composite/tree/txt
1865+/* typ-523 %txt /tests/golden/types-partial-mold-composite/types/txt
1866+/* src-524 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1867+/* tok-524 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1868+/* tre-524 %txt /tests/golden/types-partial-mold-forward/tree/txt
1869+/* typ-524 %txt /tests/golden/types-partial-mold-forward/types/txt
1870+/* src-525 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1871+/* tok-525 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1872+/* tre-525 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1873+/* typ-525 %txt /tests/golden/types-partial-mold-recursive/types/txt
1874+/* src-526 %jibb /tests/golden/types-partial-occurs/source/jibb
1875+/* tok-526 %txt /tests/golden/types-partial-occurs/tokens/txt
1876+/* tre-526 %txt /tests/golden/types-partial-occurs/tree/txt
1877+/* typ-526 %txt /tests/golden/types-partial-occurs/types/txt
1878+/* src-527 %jibb /tests/golden/types-partial-projection/source/jibb
1879+/* tok-527 %txt /tests/golden/types-partial-projection/tokens/txt
1880+/* tre-527 %txt /tests/golden/types-partial-projection/tree/txt
1881+/* typ-527 %txt /tests/golden/types-partial-projection/types/txt
1882+/* src-528 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1883+/* tok-528 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1884+/* tre-528 %txt /tests/golden/types-partial-shadow-global/tree/txt
1885+/* typ-528 %txt /tests/golden/types-partial-shadow-global/types/txt
1886+/* src-529 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1887+/* tok-529 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1888+/* tre-529 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1889+/* typ-529 %txt /tests/golden/types-partial-shared-tvar/types/txt
1890+/* src-530 %jibb /tests/golden/types-partial-union-cases/source/jibb
1891+/* tok-530 %txt /tests/golden/types-partial-union-cases/tokens/txt
1892+/* tre-530 %txt /tests/golden/types-partial-union-cases/tree/txt
1893+/* typ-530 %txt /tests/golden/types-partial-union-cases/types/txt
1894+/* src-531 %jibb /tests/golden/types-partial-union-edges/source/jibb
1895+/* tok-531 %txt /tests/golden/types-partial-union-edges/tokens/txt
1896+/* tre-531 %txt /tests/golden/types-partial-union-edges/tree/txt
1897+/* typ-531 %txt /tests/golden/types-partial-union-edges/types/txt
1898+/* src-532 %jibb /tests/golden/types-partial-union-nested-nouns/source/jibb
1899+/* tok-532 %txt /tests/golden/types-partial-union-nested-nouns/tokens/txt
1900+/* tre-532 %txt /tests/golden/types-partial-union-nested-nouns/tree/txt
1901+/* typ-532 %txt /tests/golden/types-partial-union-nested-nouns/types/txt
1902+/* src-533 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1903+/* tok-533 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1904+/* tre-533 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1905+/* typ-533 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1906+/* src-534 %jibb /tests/golden/types-positional-faces/source/jibb
1907+/* tok-534 %txt /tests/golden/types-positional-faces/tokens/txt
1908+/* tre-534 %txt /tests/golden/types-positional-faces/tree/txt
1909+/* typ-534 %txt /tests/golden/types-positional-faces/types/txt
1910+/* src-535 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1911+/* tok-535 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1912+/* tre-535 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1913+/* typ-535 %txt /tests/golden/types-prelude-arithmetic/types/txt
1914+/* src-536 %jibb /tests/golden/types-prelude-ask/source/jibb
1915+/* tok-536 %txt /tests/golden/types-prelude-ask/tokens/txt
1916+/* tre-536 %txt /tests/golden/types-prelude-ask/tree/txt
1917+/* typ-536 %txt /tests/golden/types-prelude-ask/types/txt
1918+/* src-537 %jibb /tests/golden/types-prelude-bond/source/jibb
1919+/* tok-537 %txt /tests/golden/types-prelude-bond/tokens/txt
1920+/* tre-537 %txt /tests/golden/types-prelude-bond/tree/txt
1921+/* typ-537 %txt /tests/golden/types-prelude-bond/types/txt
1922+/* src-538 %jibb /tests/golden/types-prelude-cmd/source/jibb
1923+/* tok-538 %txt /tests/golden/types-prelude-cmd/tokens/txt
1924+/* tre-538 %txt /tests/golden/types-prelude-cmd/tree/txt
1925+/* typ-538 %txt /tests/golden/types-prelude-cmd/types/txt
1926+/* src-539 %jibb /tests/golden/types-prelude-comparison/source/jibb
1927+/* tok-539 %txt /tests/golden/types-prelude-comparison/tokens/txt
1928+/* tre-539 %txt /tests/golden/types-prelude-comparison/tree/txt
1929+/* typ-539 %txt /tests/golden/types-prelude-comparison/types/txt
1930+/* src-540 %jibb /tests/golden/types-prelude-direct/source/jibb
1931+/* tok-540 %txt /tests/golden/types-prelude-direct/tokens/txt
1932+/* tre-540 %txt /tests/golden/types-prelude-direct/tree/txt
1933+/* typ-540 %txt /tests/golden/types-prelude-direct/types/txt
1934+/* src-541 %jibb /tests/golden/types-prelude-functional/source/jibb
1935+/* tok-541 %txt /tests/golden/types-prelude-functional/tokens/txt
1936+/* tre-541 %txt /tests/golden/types-prelude-functional/tree/txt
1937+/* typ-541 %txt /tests/golden/types-prelude-functional/types/txt
1938+/* src-542 %jibb /tests/golden/types-prelude-generic-alias/source/jibb
1939+/* tok-542 %txt /tests/golden/types-prelude-generic-alias/tokens/txt
1940+/* tre-542 %txt /tests/golden/types-prelude-generic-alias/tree/txt
1941+/* mod-542-1 %jibb /tests/golden/types-prelude-generic-alias/modules/ui/alias-helper/jibb
1942+/* typ-542 %txt /tests/golden/types-prelude-generic-alias/types/txt
1943+/* mtre-542 %txt /tests/golden/types-prelude-generic-alias/module-trees/txt
1944+/* src-543 %jibb /tests/golden/types-prelude-interface/source/jibb
1945+/* tok-543 %txt /tests/golden/types-prelude-interface/tokens/txt
1946+/* tre-543 %txt /tests/golden/types-prelude-interface/tree/txt
1947+/* mod-543-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1948+/* mod-543-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1949+/* typ-543 %txt /tests/golden/types-prelude-interface/types/txt
1950+/* mtre-543 %txt /tests/golden/types-prelude-interface/module-trees/txt
1951+/* src-544 %jibb /tests/golden/types-prelude-lead-late/source/jibb
1952+/* tok-544 %txt /tests/golden/types-prelude-lead-late/tokens/txt
1953+/* tre-544 %txt /tests/golden/types-prelude-lead-late/tree/txt
1954+/* typ-544 %txt /tests/golden/types-prelude-lead-late/types/txt
1955+/* src-545 %jibb /tests/golden/types-prelude-lent/source/jibb
1956+/* tok-545 %txt /tests/golden/types-prelude-lent/tokens/txt
1957+/* tre-545 %txt /tests/golden/types-prelude-lent/tree/txt
1958+/* typ-545 %txt /tests/golden/types-prelude-lent/types/txt
1959+/* src-546 %jibb /tests/golden/types-prelude-like/source/jibb
1960+/* tok-546 %txt /tests/golden/types-prelude-like/tokens/txt
1961+/* tre-546 %txt /tests/golden/types-prelude-like/tree/txt
1962+/* typ-546 %txt /tests/golden/types-prelude-like/types/txt
1963+/* src-547 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1964+/* tok-547 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1965+/* tre-547 %txt /tests/golden/types-prelude-list-alias/tree/txt
1966+/* typ-547 %txt /tests/golden/types-prelude-list-alias/types/txt
1967+/* src-548 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1968+/* tok-548 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1969+/* tre-548 %txt /tests/golden/types-prelude-list-functions/tree/txt
1970+/* mod-548-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1971+/* typ-548 %txt /tests/golden/types-prelude-list-functions/types/txt
1972+/* mtre-548 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1973+/* src-549 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1974+/* tok-549 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1975+/* tre-549 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1976+/* typ-549 %txt /tests/golden/types-prelude-list-helpers/types/txt
1977+/* src-550 %jibb /tests/golden/types-prelude-predicates/source/jibb
1978+/* tok-550 %txt /tests/golden/types-prelude-predicates/tokens/txt
1979+/* tre-550 %txt /tests/golden/types-prelude-predicates/tree/txt
1980+/* typ-550 %txt /tests/golden/types-prelude-predicates/types/txt
1981+/* src-551 %jibb /tests/golden/types-prelude-sub/source/jibb
1982+/* tok-551 %txt /tests/golden/types-prelude-sub/tokens/txt
1983+/* tre-551 %txt /tests/golden/types-prelude-sub/tree/txt
1984+/* typ-551 %txt /tests/golden/types-prelude-sub/types/txt
1985+/* src-552 %jibb /tests/golden/types-prelude-sub-nested/source/jibb
1986+/* tok-552 %txt /tests/golden/types-prelude-sub-nested/tokens/txt
1987+/* tre-552 %txt /tests/golden/types-prelude-sub-nested/tree/txt
1988+/* typ-552 %txt /tests/golden/types-prelude-sub-nested/types/txt
1989+/* src-553 %jibb /tests/golden/types-prelude-succ/source/jibb
1990+/* tok-553 %txt /tests/golden/types-prelude-succ/tokens/txt
1991+/* tre-553 %txt /tests/golden/types-prelude-succ/tree/txt
1992+/* typ-553 %txt /tests/golden/types-prelude-succ/types/txt
1993+/* src-554 %jibb /tests/golden/types-prelude-text/source/jibb
1994+/* tok-554 %txt /tests/golden/types-prelude-text/tokens/txt
1995+/* tre-554 %txt /tests/golden/types-prelude-text/tree/txt
1996+/* typ-554 %txt /tests/golden/types-prelude-text/types/txt
1997+/* src-555 %jibb /tests/golden/types-prelude-ui/source/jibb
1998+/* tok-555 %txt /tests/golden/types-prelude-ui/tokens/txt
1999+/* tre-555 %txt /tests/golden/types-prelude-ui/tree/txt
2000+/* typ-555 %txt /tests/golden/types-prelude-ui/types/txt
2001+/* src-556 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
2002+/* tok-556 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
2003+/* tre-556 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
2004+/* typ-556 %txt /tests/golden/types-prelude-unit-helpers/types/txt
2005+/* src-557 %jibb /tests/golden/types-prelude-zing/source/jibb
2006+/* tok-557 %txt /tests/golden/types-prelude-zing/tokens/txt
2007+/* tre-557 %txt /tests/golden/types-prelude-zing/tree/txt
2008+/* typ-557 %txt /tests/golden/types-prelude-zing/types/txt
2009+/* src-558 %jibb /tests/golden/types-proj-explicit-context/source/jibb
2010+/* tok-558 %txt /tests/golden/types-proj-explicit-context/tokens/txt
2011+/* tre-558 %txt /tests/golden/types-proj-explicit-context/tree/txt
2012+/* typ-558 %txt /tests/golden/types-proj-explicit-context/types/txt
2013+/* src-559 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
2014+/* tok-559 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
2015+/* tre-559 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
2016+/* typ-559 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
2017+/* src-560 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
2018+/* tok-560 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
2019+/* tre-560 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2020+/* mod-560-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2021+/* typ-560 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2022+/* mtre-560 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2023+/* src-561 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2024+/* tok-561 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2025+/* tre-561 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2026+/* mod-561-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2027+/* typ-561 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2028+/* mtre-561 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2029+/* src-562 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2030+/* tok-562 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2031+/* tre-562 %txt /tests/golden/types-proj-reserved-local/tree/txt
2032+/* typ-562 %txt /tests/golden/types-proj-reserved-local/types/txt
2033+/* src-563 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2034+/* tok-563 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2035+/* tre-563 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2036+/* typ-563 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2037+/* src-564 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2038+/* tok-564 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2039+/* tre-564 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2040+/* typ-564 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2041+/* src-565 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2042+/* tok-565 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2043+/* tre-565 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2044+/* typ-565 %txt /tests/golden/types-proj-reserved-mold/types/txt
2045+/* src-566 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2046+/* tok-566 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2047+/* tre-566 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2048+/* typ-566 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2049+/* src-567 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2050+/* tok-567 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2051+/* tre-567 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2052+/* typ-567 %txt /tests/golden/types-proj-reserved-positive/types/txt
2053+/* src-568 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2054+/* tok-568 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2055+/* tre-568 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2056+/* typ-568 %txt /tests/golden/types-proj-reserved-sample/types/txt
2057+/* src-569 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2058+/* tok-569 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2059+/* tre-569 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2060+/* typ-569 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2061+/* src-570 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2062+/* tok-570 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2063+/* tre-570 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2064+/* typ-570 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2065+/* src-571 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2066+/* tok-571 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2067+/* tre-571 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2068+/* typ-571 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2069+/* src-572 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2070+/* tok-572 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2071+/* tre-572 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2072+/* typ-572 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2073+/* src-573 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2074+/* tok-573 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2075+/* tre-573 %txt /tests/golden/types-proj-reserved-value/tree/txt
2076+/* typ-573 %txt /tests/golden/types-proj-reserved-value/types/txt
2077+/* src-574 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2078+/* tok-574 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2079+/* tre-574 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2080+/* typ-574 %txt /tests/golden/types-proj-single-duplicate/types/txt
2081+/* src-575 %jibb /tests/golden/types-proj-single-field/source/jibb
2082+/* tok-575 %txt /tests/golden/types-proj-single-field/tokens/txt
2083+/* tre-575 %txt /tests/golden/types-proj-single-field/tree/txt
2084+/* typ-575 %txt /tests/golden/types-proj-single-field/types/txt
2085+/* src-576 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2086+/* tok-576 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2087+/* tre-576 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2088+/* typ-576 %txt /tests/golden/types-proj-single-sample-face/types/txt
2089+/* src-577 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2090+/* tok-577 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2091+/* tre-577 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2092+/* typ-577 %txt /tests/golden/types-proj-single-wrapped/types/txt
2093+/* src-578 %jibb /tests/golden/types-qath-faces/source/jibb
2094+/* tok-578 %txt /tests/golden/types-qath-faces/tokens/txt
2095+/* tre-578 %txt /tests/golden/types-qath-faces/tree/txt
2096+/* typ-578 %txt /tests/golden/types-qath-faces/types/txt
2097+/* src-579 %jibb /tests/golden/types-qath-holes/source/jibb
2098+/* tok-579 %txt /tests/golden/types-qath-holes/tokens/txt
2099+/* tre-579 %txt /tests/golden/types-qath-holes/tree/txt
2100+/* typ-579 %txt /tests/golden/types-qath-holes/types/txt
2101+/* src-580 %jibb /tests/golden/types-qath-module-identity/source/jibb
2102+/* tok-580 %txt /tests/golden/types-qath-module-identity/tokens/txt
2103+/* tre-580 %txt /tests/golden/types-qath-module-identity/tree/txt
2104+/* mod-580-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2105+/* mod-580-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2106+/* mod-580-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2107+/* typ-580 %txt /tests/golden/types-qath-module-identity/types/txt
2108+/* mtre-580 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2109+/* src-581 %jibb /tests/golden/types-qath-recursive/source/jibb
2110+/* tok-581 %txt /tests/golden/types-qath-recursive/tokens/txt
2111+/* tre-581 %txt /tests/golden/types-qath-recursive/tree/txt
2112+/* typ-581 %txt /tests/golden/types-qath-recursive/types/txt
2113+/* src-582 %jibb /tests/golden/types-record-bound-variable/source/jibb
2114+/* tok-582 %txt /tests/golden/types-record-bound-variable/tokens/txt
2115+/* tre-582 %txt /tests/golden/types-record-bound-variable/tree/txt
2116+/* typ-582 %txt /tests/golden/types-record-bound-variable/types/txt
2117+/* src-583 %jibb /tests/golden/types-record-cast-context/source/jibb
2118+/* tok-583 %txt /tests/golden/types-record-cast-context/tokens/txt
2119+/* tre-583 %txt /tests/golden/types-record-cast-context/tree/txt
2120+/* typ-583 %txt /tests/golden/types-record-cast-context/types/txt
2121+/* src-584 %jibb /tests/golden/types-record-change/source/jibb
2122+/* tok-584 %txt /tests/golden/types-record-change/tokens/txt
2123+/* tre-584 %txt /tests/golden/types-record-change/tree/txt
2124+/* typ-584 %txt /tests/golden/types-record-change/types/txt
2125+/* src-585 %jibb /tests/golden/types-record-change-generic/source/jibb
2126+/* tok-585 %txt /tests/golden/types-record-change-generic/tokens/txt
2127+/* tre-585 %txt /tests/golden/types-record-change-generic/tree/txt
2128+/* typ-585 %txt /tests/golden/types-record-change-generic/types/txt
2129+/* src-586 %jibb /tests/golden/types-record-faces/source/jibb
2130+/* tok-586 %txt /tests/golden/types-record-faces/tokens/txt
2131+/* tre-586 %txt /tests/golden/types-record-faces/tree/txt
2132+/* typ-586 %txt /tests/golden/types-record-faces/types/txt
2133+/* src-587 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2134+/* tok-587 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2135+/* tre-587 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2136+/* typ-587 %txt /tests/golden/types-record-field-edit-separate/types/txt
2137+/* src-588 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2138+/* tok-588 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2139+/* tre-588 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2140+/* typ-588 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2141+/* src-589 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2142+/* tok-589 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2143+/* tre-589 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2144+/* typ-589 %txt /tests/golden/types-record-field-expr-separate/types/txt
2145+/* src-590 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2146+/* tok-590 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2147+/* tre-590 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2148+/* mod-590-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2149+/* typ-590 %txt /tests/golden/types-record-field-module-reachable/types/txt
2150+/* mtre-590 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2151+/* src-591 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2152+/* tok-591 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2153+/* tre-591 %txt /tests/golden/types-record-field-module-unused/tree/txt
2154+/* mod-591-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2155+/* mod-591-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2156+/* typ-591 %txt /tests/golden/types-record-field-module-unused/types/txt
2157+/* mtre-591 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2158+/* src-592 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2159+/* tok-592 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2160+/* tre-592 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2161+/* typ-592 %txt /tests/golden/types-record-field-nested-mold/types/txt
2162+/* src-593 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2163+/* tok-593 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2164+/* tre-593 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2165+/* typ-593 %txt /tests/golden/types-record-field-outer-inner/types/txt
2166+/* src-594 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2167+/* tok-594 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2168+/* tre-594 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2169+/* typ-594 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2170+/* src-595 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2171+/* tok-595 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2172+/* tre-595 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2173+/* typ-595 %txt /tests/golden/types-record-field-separate-molds/types/txt
2174+/* src-596 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2175+/* tok-596 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2176+/* tre-596 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2177+/* typ-596 %txt /tests/golden/types-record-field-unused-mold/types/txt
2178+/* src-597 %jibb /tests/golden/types-record-import/source/jibb
2179+/* tok-597 %txt /tests/golden/types-record-import/tokens/txt
2180+/* tre-597 %txt /tests/golden/types-record-import/tree/txt
2181+/* mod-597-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2182+/* typ-597 %txt /tests/golden/types-record-import/types/txt
2183+/* mtre-597 %txt /tests/golden/types-record-import/module-trees/txt
2184+/* src-598 %jibb /tests/golden/types-record-local-scheme/source/jibb
2185+/* tok-598 %txt /tests/golden/types-record-local-scheme/tokens/txt
2186+/* tre-598 %txt /tests/golden/types-record-local-scheme/tree/txt
2187+/* typ-598 %txt /tests/golden/types-record-local-scheme/types/txt
2188+/* src-599 %jibb /tests/golden/types-record-nested/source/jibb
2189+/* tok-599 %txt /tests/golden/types-record-nested/tokens/txt
2190+/* tre-599 %txt /tests/golden/types-record-nested/tree/txt
2191+/* typ-599 %txt /tests/golden/types-record-nested/types/txt
2192+/* src-600 %jibb /tests/golden/types-record-to-tuple/source/jibb
2193+/* tok-600 %txt /tests/golden/types-record-to-tuple/tokens/txt
2194+/* tre-600 %txt /tests/golden/types-record-to-tuple/tree/txt
2195+/* typ-600 %txt /tests/golden/types-record-to-tuple/types/txt
2196+/* src-601 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2197+/* tok-601 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2198+/* tre-601 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2199+/* typ-601 %txt /tests/golden/types-recursion-scc-failures/types/txt
2200+/* src-602 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2201+/* tok-602 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2202+/* tre-602 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2203+/* typ-602 %txt /tests/golden/types-recursion-scc-groups/types/txt
2204+/* src-603 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2205+/* tok-603 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2206+/* tre-603 %txt /tests/golden/types-recursion-scc-import/tree/txt
2207+/* mod-603-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2208+/* typ-603 %txt /tests/golden/types-recursion-scc-import/types/txt
2209+/* mtre-603 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2210+/* src-604 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2211+/* tok-604 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2212+/* tre-604 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2213+/* mod-604-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2214+/* typ-604 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2215+/* mtre-604 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2216+/* src-605 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2217+/* tok-605 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2218+/* tre-605 %txt /tests/golden/types-recursion-scc-local/tree/txt
2219+/* typ-605 %txt /tests/golden/types-recursion-scc-local/types/txt
2220+/* src-606 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2221+/* tok-606 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2222+/* tre-606 %txt /tests/golden/types-recursion-scc-order/tree/txt
2223+/* typ-606 %txt /tests/golden/types-recursion-scc-order/types/txt
2224+/* src-607 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2225+/* tok-607 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2226+/* tre-607 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2227+/* typ-607 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2228+/* src-608 %jibb /tests/golden/types-recursive-branch/source/jibb
2229+/* tok-608 %txt /tests/golden/types-recursive-branch/tokens/txt
2230+/* tre-608 %txt /tests/golden/types-recursive-branch/tree/txt
2231+/* typ-608 %txt /tests/golden/types-recursive-branch/types/txt
2232+/* src-609 %jibb /tests/golden/types-recursive-gate/source/jibb
2233+/* tok-609 %txt /tests/golden/types-recursive-gate/tokens/txt
2234+/* tre-609 %txt /tests/golden/types-recursive-gate/tree/txt
2235+/* typ-609 %txt /tests/golden/types-recursive-gate/types/txt
2236+/* src-610 %jibb /tests/golden/types-recursive-sample/source/jibb
2237+/* tok-610 %txt /tests/golden/types-recursive-sample/tokens/txt
2238+/* tre-610 %txt /tests/golden/types-recursive-sample/tree/txt
2239+/* typ-610 %txt /tests/golden/types-recursive-sample/types/txt
2240+/* src-611 %jibb /tests/golden/types-request-normal/source/jibb
2241+/* tok-611 %txt /tests/golden/types-request-normal/tokens/txt
2242+/* tre-611 %txt /tests/golden/types-request-normal/tree/txt
2243+/* mod-611-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2244+/* typ-611 %txt /tests/golden/types-request-normal/types/txt
2245+/* mark-611-1 %txt /tests/golden/types-request-normal/mar/full/txt
2246+/* mtre-611 %txt /tests/golden/types-request-normal/module-trees/txt
2247+/* src-612 %jibb /tests/golden/types-scope-library-poke/source/jibb
2248+/* tok-612 %txt /tests/golden/types-scope-library-poke/tokens/txt
2249+/* tre-612 %txt /tests/golden/types-scope-library-poke/tree/txt
2250+/* typ-612 %txt /tests/golden/types-scope-library-poke/types/txt
2251+/* src-613 %jibb /tests/golden/types-scope-root-api/source/jibb
2252+/* tok-613 %txt /tests/golden/types-scope-root-api/tokens/txt
2253+/* tre-613 %txt /tests/golden/types-scope-root-api/tree/txt
2254+/* typ-613 %txt /tests/golden/types-scope-root-api/types/txt
2255+/* src-614 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2256+/* tok-614 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2257+/* tre-614 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2258+/* typ-614 %txt /tests/golden/types-scope-store-duplicate/types/txt
2259+/* src-615 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2260+/* tok-615 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2261+/* tre-615 %txt /tests/golden/types-scope-store-shadow/tree/txt
2262+/* typ-615 %txt /tests/golden/types-scope-store-shadow/types/txt
2263+/* src-616 %jibb /tests/golden/types-single-case-pattern/source/jibb
2264+/* tok-616 %txt /tests/golden/types-single-case-pattern/tokens/txt
2265+/* tre-616 %txt /tests/golden/types-single-case-pattern/tree/txt
2266+/* typ-616 %txt /tests/golden/types-single-case-pattern/types/txt
2267+/* src-617 %jibb /tests/golden/types-string-interpolation/source/jibb
2268+/* tok-617 %txt /tests/golden/types-string-interpolation/tokens/txt
2269+/* tre-617 %txt /tests/golden/types-string-interpolation/tree/txt
2270+/* typ-617 %txt /tests/golden/types-string-interpolation/types/txt
2271+/* src-618 %jibb /tests/golden/types-tuple-context/source/jibb
2272+/* tok-618 %txt /tests/golden/types-tuple-context/tokens/txt
2273+/* tre-618 %txt /tests/golden/types-tuple-context/tree/txt
2274+/* typ-618 %txt /tests/golden/types-tuple-context/types/txt
2275+/* src-619 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2276+/* tok-619 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2277+/* tre-619 %txt /tests/golden/types-tuple-context-nested/tree/txt
2278+/* typ-619 %txt /tests/golden/types-tuple-context-nested/types/txt
2279+/* src-620 %jibb /tests/golden/types-union-alias/source/jibb
2280+/* tok-620 %txt /tests/golden/types-union-alias/tokens/txt
2281+/* tre-620 %txt /tests/golden/types-union-alias/tree/txt
2282+/* typ-620 %txt /tests/golden/types-union-alias/types/txt
2283+/* src-621 %jibb /tests/golden/types-union-branch-context/source/jibb
2284+/* tok-621 %txt /tests/golden/types-union-branch-context/tokens/txt
2285+/* tre-621 %txt /tests/golden/types-union-branch-context/tree/txt
2286+/* typ-621 %txt /tests/golden/types-union-branch-context/types/txt
2287+/* src-622 %jibb /tests/golden/types-union-branch-pending/source/jibb
2288+/* tok-622 %txt /tests/golden/types-union-branch-pending/tokens/txt
2289+/* tre-622 %txt /tests/golden/types-union-branch-pending/tree/txt
2290+/* typ-622 %txt /tests/golden/types-union-branch-pending/types/txt
2291+/* src-623 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2292+/* tok-623 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2293+/* tre-623 %txt /tests/golden/types-union-constructor-shape/tree/txt
2294+/* typ-623 %txt /tests/golden/types-union-constructor-shape/types/txt
2295+/* src-624 %jibb /tests/golden/types-union-context-flow/source/jibb
2296+/* tok-624 %txt /tests/golden/types-union-context-flow/tokens/txt
2297+/* tre-624 %txt /tests/golden/types-union-context-flow/tree/txt
2298+/* typ-624 %txt /tests/golden/types-union-context-flow/types/txt
2299+/* src-625 %jibb /tests/golden/types-union-finite/source/jibb
2300+/* tok-625 %txt /tests/golden/types-union-finite/tokens/txt
2301+/* tre-625 %txt /tests/golden/types-union-finite/tree/txt
2302+/* typ-625 %txt /tests/golden/types-union-finite/types/txt
2303+/* src-626 %jibb /tests/golden/types-union-finite-context/source/jibb
2304+/* tok-626 %txt /tests/golden/types-union-finite-context/tokens/txt
2305+/* tre-626 %txt /tests/golden/types-union-finite-context/tree/txt
2306+/* typ-626 %txt /tests/golden/types-union-finite-context/types/txt
2307+/* src-627 %jibb /tests/golden/types-union-finite-generic/source/jibb
2308+/* tok-627 %txt /tests/golden/types-union-finite-generic/tokens/txt
2309+/* tre-627 %txt /tests/golden/types-union-finite-generic/tree/txt
2310+/* typ-627 %txt /tests/golden/types-union-finite-generic/types/txt
2311+/* src-628 %jibb /tests/golden/types-union-finite-limit/source/jibb
2312+/* tok-628 %txt /tests/golden/types-union-finite-limit/tokens/txt
2313+/* tre-628 %txt /tests/golden/types-union-finite-limit/tree/txt
2314+/* typ-628 %txt /tests/golden/types-union-finite-limit/types/txt
2315+/* src-629 %jibb /tests/golden/types-union-import/source/jibb
2316+/* tok-629 %txt /tests/golden/types-union-import/tokens/txt
2317+/* tre-629 %txt /tests/golden/types-union-import/tree/txt
2318+/* mod-629-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2319+/* typ-629 %txt /tests/golden/types-union-import/types/txt
2320+/* mtre-629 %txt /tests/golden/types-union-import/module-trees/txt
2321+/* src-630 %jibb /tests/golden/types-union-local-pending/source/jibb
2322+/* tok-630 %txt /tests/golden/types-union-local-pending/tokens/txt
2323+/* tre-630 %txt /tests/golden/types-union-local-pending/tree/txt
2324+/* typ-630 %txt /tests/golden/types-union-local-pending/types/txt
2325+/* src-631 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2326+/* tok-631 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2327+/* tre-631 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2328+/* typ-631 %txt /tests/golden/types-union-nonwing-subject/types/txt
2329+/* src-632 %jibb /tests/golden/types-union-overlap/source/jibb
2330+/* tok-632 %txt /tests/golden/types-union-overlap/tokens/txt
2331+/* tre-632 %txt /tests/golden/types-union-overlap/tree/txt
2332+/* typ-632 %txt /tests/golden/types-union-overlap/types/txt
2333+/* src-633 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2334+/* tok-633 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2335+/* tre-633 %txt /tests/golden/types-union-overlap-nested/tree/txt
2336+/* typ-633 %txt /tests/golden/types-union-overlap-nested/types/txt
2337+/* src-634 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2338+/* tok-634 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2339+/* tre-634 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2340+/* typ-634 %txt /tests/golden/types-union-pattern-result-context/types/txt
2341+/* src-635 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2342+/* tok-635 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2343+/* tre-635 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2344+/* typ-635 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2345+/* src-636 %jibb /tests/golden/types-union-patterns/source/jibb
2346+/* tok-636 %txt /tests/golden/types-union-patterns/tokens/txt
2347+/* tre-636 %txt /tests/golden/types-union-patterns/tree/txt
2348+/* typ-636 %txt /tests/golden/types-union-patterns/types/txt
2349+/* src-637 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2350+/* tok-637 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2351+/* tre-637 %txt /tests/golden/types-union-patterns-generic/tree/txt
2352+/* typ-637 %txt /tests/golden/types-union-patterns-generic/types/txt
2353+/* src-638 %jibb /tests/golden/types-union-patterns-import/source/jibb
2354+/* tok-638 %txt /tests/golden/types-union-patterns-import/tokens/txt
2355+/* tre-638 %txt /tests/golden/types-union-patterns-import/tree/txt
2356+/* mod-638-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2357+/* typ-638 %txt /tests/golden/types-union-patterns-import/types/txt
2358+/* mtre-638 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2359+/* src-639 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2360+/* tok-639 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2361+/* tre-639 %txt /tests/golden/types-union-phantom-generic/tree/txt
2362+/* typ-639 %txt /tests/golden/types-union-phantom-generic/types/txt
2363+/* src-640 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2364+/* tok-640 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2365+/* tre-640 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2366+/* mod-640-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2367+/* mod-640-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2368+/* typ-640 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2369+/* mtre-640 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2370+/* src-641 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2371+/* tok-641 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2372+/* tre-641 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2373+/* mod-641-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2374+/* typ-641 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2375+/* mtre-641 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2376+/* src-642 %jibb /tests/golden/types-union-print-distinct/source/jibb
2377+/* tok-642 %txt /tests/golden/types-union-print-distinct/tokens/txt
2378+/* tre-642 %txt /tests/golden/types-union-print-distinct/tree/txt
2379+/* mod-642-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2380+/* mod-642-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2381+/* mod-642-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2382+/* typ-642 %txt /tests/golden/types-union-print-distinct/types/txt
2383+/* mtre-642 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2384+/* src-643 %jibb /tests/golden/types-union-print-escape/source/jibb
2385+/* tok-643 %txt /tests/golden/types-union-print-escape/tokens/txt
2386+/* tre-643 %txt /tests/golden/types-union-print-escape/tree/txt
2387+/* typ-643 %txt /tests/golden/types-union-print-escape/types/txt
2388+/* src-644 %jibb /tests/golden/types-union-print-local/source/jibb
2389+/* tok-644 %txt /tests/golden/types-union-print-local/tokens/txt
2390+/* tre-644 %txt /tests/golden/types-union-print-local/tree/txt
2391+/* typ-644 %txt /tests/golden/types-union-print-local/types/txt
2392+/* src-645 %jibb /tests/golden/types-union-print-nested/source/jibb
2393+/* tok-645 %txt /tests/golden/types-union-print-nested/tokens/txt
2394+/* tre-645 %txt /tests/golden/types-union-print-nested/tree/txt
2395+/* typ-645 %txt /tests/golden/types-union-print-nested/types/txt
2396+/* src-646 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2397+/* tok-646 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2398+/* tre-646 %txt /tests/golden/types-union-print-same-origin/tree/txt
2399+/* mod-646-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2400+/* typ-646 %txt /tests/golden/types-union-print-same-origin/types/txt
2401+/* mtre-646 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2402+/* src-647 %jibb /tests/golden/types-union-print-transitive/source/jibb
2403+/* tok-647 %txt /tests/golden/types-union-print-transitive/tokens/txt
2404+/* tre-647 %txt /tests/golden/types-union-print-transitive/tree/txt
2405+/* mod-647-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2406+/* mod-647-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2407+/* typ-647 %txt /tests/golden/types-union-print-transitive/types/txt
2408+/* mtre-647 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2409+/* src-648 %jibb /tests/golden/types-union-runtime-equality/source/jibb
2410+/* tok-648 %txt /tests/golden/types-union-runtime-equality/tokens/txt
2411+/* tre-648 %txt /tests/golden/types-union-runtime-equality/tree/txt
2412+/* typ-648 %txt /tests/golden/types-union-runtime-equality/types/txt
2413+/* src-649 %jibb /tests/golden/types-union-singleton/source/jibb
2414+/* tok-649 %txt /tests/golden/types-union-singleton/tokens/txt
2415+/* tre-649 %txt /tests/golden/types-union-singleton/tree/txt
2416+/* typ-649 %txt /tests/golden/types-union-singleton/types/txt
2417+/* src-650 %jibb /tests/golden/types-union-source-alias/source/jibb
2418+/* tok-650 %txt /tests/golden/types-union-source-alias/tokens/txt
2419+/* tre-650 %txt /tests/golden/types-union-source-alias/tree/txt
2420+/* typ-650 %txt /tests/golden/types-union-source-alias/types/txt
2421+/* src-651 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2422+/* tok-651 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2423+/* tre-651 %txt /tests/golden/types-union-tag-atoms/tree/txt
2424+/* typ-651 %txt /tests/golden/types-union-tag-atoms/types/txt
2425+/* src-652 %jibb /tests/golden/types-union-tags/source/jibb
2426+/* tok-652 %txt /tests/golden/types-union-tags/tokens/txt
2427+/* tre-652 %txt /tests/golden/types-union-tags/tree/txt
2428+/* typ-652 %txt /tests/golden/types-union-tags/types/txt
2429+/* src-653 %jibb /tests/golden/types-union-unresolved/source/jibb
2430+/* tok-653 %txt /tests/golden/types-union-unresolved/tokens/txt
2431+/* tre-653 %txt /tests/golden/types-union-unresolved/tree/txt
2432+/* typ-653 %txt /tests/golden/types-union-unresolved/types/txt
2433+/* src-654 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2434+/* tok-654 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2435+/* tre-654 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2436+/* typ-654 %txt /tests/golden/types-union-unresolved-flow/types/txt
2437+/* src-655 %jibb /tests/golden/types-unit-construction/source/jibb
2438+/* tok-655 %txt /tests/golden/types-unit-construction/tokens/txt
2439+/* tre-655 %txt /tests/golden/types-unit-construction/tree/txt
2440+/* typ-655 %txt /tests/golden/types-unit-construction/types/txt
2441+/* src-656 %jibb /tests/golden/types-unit-context/source/jibb
2442+/* tok-656 %txt /tests/golden/types-unit-context/tokens/txt
2443+/* tre-656 %txt /tests/golden/types-unit-context/tree/txt
2444+/* typ-656 %txt /tests/golden/types-unit-context/types/txt
2445+/* src-657 %jibb /tests/golden/types-unit-patterns/source/jibb
2446+/* tok-657 %txt /tests/golden/types-unit-patterns/tokens/txt
2447+/* tre-657 %txt /tests/golden/types-unit-patterns/tree/txt
2448+/* typ-657 %txt /tests/golden/types-unit-patterns/types/txt
2449+/* src-658 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2450+/* tok-658 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2451+/* tre-658 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2452+/* typ-658 %txt /tests/golden/types-value-cycle-shadow/types/txt
2453+/* src-659 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2454+/* tok-659 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2455+/* tre-659 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2456+/* typ-659 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2457+/* src-660 %jibb /tests/golden/types-value-cycles/source/jibb
2458+/* tok-660 %txt /tests/golden/types-value-cycles/tokens/txt
2459+/* tre-660 %txt /tests/golden/types-value-cycles/tree/txt
2460+/* typ-660 %txt /tests/golden/types-value-cycles/types/txt
24292461=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
24302462|%
24312463:: one arm per case
@@ -3260,480 +3292,496 @@
32603292 (weld (check ~.types-arithmetic-scopes src-414 `tok-414 `tre-414) (check-module-types ~.types-arithmetic-scopes ~[%tests %golden ~.types-arithmetic-scopes %source %jibb] src-414 `typ-414 ~ ~ ~))
32613293++ test-types-capital-distinct
32623294 (weld (check ~.types-capital-distinct src-415 `tok-415 `tre-415) (check-types ~.types-capital-distinct ~[%tests %golden ~.types-capital-distinct %source %jibb] src-415 `typ-415))
3295+++ test-types-cell-branch-context
3296+ (weld (check ~.types-cell-branch-context src-416 `tok-416 `tre-416) (check-module-types ~.types-cell-branch-context ~[%tests %golden ~.types-cell-branch-context %source %jibb] src-416 `typ-416 ~ ~ ~))
32633297++ test-types-cell-pattern-many
3264− (weld (check ~.types-cell-pattern-many src-416 `tok-416 `tre-416) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-416 `typ-416 ~ ~ ~))
3298+ (weld (check ~.types-cell-pattern-many src-417 `tok-417 `tre-417) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-417 `typ-417 ~ ~ ~))
32653299++ test-types-cell-pattern-schemes
3266− (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 ~ ~ ~))
3300+ (weld (check ~.types-cell-pattern-schemes src-418 `tok-418 `tre-418) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-418 `typ-418 ~ ~ ~))
32673301++ test-types-cell-pattern-tail
3268− (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 ~ ~ ~))
3302+ (weld (check ~.types-cell-pattern-tail src-419 `tok-419 `tre-419) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-419 `typ-419 ~ ~ ~))
32693303++ test-types-constructor-context
3270− (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))
3304+ (weld (check ~.types-constructor-context src-420 `tok-420 `tre-420) (check-types ~.types-constructor-context ~[%tests %golden ~.types-constructor-context %source %jibb] src-420 `typ-420))
32713305++ test-types-deferred-call-context
3272− (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 ~ ~ ~))
3306+ (weld (check ~.types-deferred-call-context src-421 `tok-421 `tre-421) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-421 `typ-421 ~ ~ ~))
32733307++ test-types-equal-head-disjoint
3274− (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))
3308+ (weld (check ~.types-equal-head-disjoint src-422 `tok-422 `tre-422) (check-types ~.types-equal-head-disjoint ~[%tests %golden ~.types-equal-head-disjoint %source %jibb] src-422 `typ-422))
32753309++ test-types-flag-branch-context
3276− (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 ~ ~ ~))
3310+ (weld (check ~.types-flag-branch-context src-423 `tok-423 `tre-423) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-423 `typ-423 ~ ~ ~))
32773311++ test-types-generic-arity
3278− (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))
3312+ (weld (check ~.types-generic-arity src-424 `tok-424 `tre-424) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-424 `typ-424))
32793313++ test-types-generic-face-inference
3280− (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))
3314+ (weld (check ~.types-generic-face-inference src-425 `tok-425 `tre-425) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-425 `typ-425))
32813315++ test-types-generic-gates
3282− (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))
3316+ (weld (check ~.types-generic-gates src-426 `tok-426 `tre-426) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-426 `typ-426))
32833317++ test-types-generic-import-reverse
3284− (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]]))
3318+ (weld (weld (check ~.types-generic-import-reverse src-427 `tok-427 `tre-427) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-427 `typ-427 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-427-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-427 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-427-1]]))
32853319++ test-types-generic-lexical-alias
3286− (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))
3320+ (weld (check ~.types-generic-lexical-alias src-428 `tok-428 `tre-428) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-428 `typ-428))
32873321++ test-types-generic-local-parameter
3288− (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))
3322+ (weld (check ~.types-generic-local-parameter src-429 `tok-429 `tre-429) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-429 `typ-429))
32893323++ test-types-generic-local-scope
3290− (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))
3324+ (weld (check ~.types-generic-local-scope src-430 `tok-430 `tre-430) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-430 `typ-430))
32913325++ test-types-generic-module
3292− (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]]))
3326+ (weld (weld (check ~.types-generic-module src-431 `tok-431 `tre-431) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-431 `typ-431 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-431-1]])) (check-module-trees ~.types-generic-module `mtre-431 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-431-1]]))
32933327++ test-types-generic-nested-scope
3294− (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))
3328+ (weld (check ~.types-generic-nested-scope src-432 `tok-432 `tre-432) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-432 `typ-432))
32953329++ test-types-generic-parameters
3296− (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))
3330+ (weld (check ~.types-generic-parameters src-433 `tok-433 `tre-433) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-433 `typ-433))
32973331++ test-types-generic-record
3298− (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))
3332+ (weld (check ~.types-generic-record src-434 `tok-434 `tre-434) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-434 `typ-434))
32993333++ test-types-generic-recursive-union
3300− (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))
3334+ (weld (check ~.types-generic-recursive-union src-435 `tok-435 `tre-435) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-435 `typ-435))
33013335++ test-types-generic-repeated
3302− (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))
3336+ (weld (check ~.types-generic-repeated src-436 `tok-436 `tre-436) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-436 `typ-436))
33033337++ test-types-generic-result-context
3304− (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))
3338+ (weld (check ~.types-generic-result-context src-437 `tok-437 `tre-437) (check-types ~.types-generic-result-context ~[%tests %golden ~.types-generic-result-context %source %jibb] src-437 `typ-437))
33053339++ test-types-generic-union-alias
3306− (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))
3340+ (weld (check ~.types-generic-union-alias src-438 `tok-438 `tre-438) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-438 `typ-438))
33073341++ test-types-generic-union-alias-face
3308− (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]]))
3342+ (weld (weld (check ~.types-generic-union-alias-face src-439 `tok-439 `tre-439) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-439 `typ-439 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-439-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-439 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-439-1]]))
33093343++ test-types-generic-union-capitals
3310− (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))
3344+ (weld (check ~.types-generic-union-capitals src-440 `tok-440 `tre-440) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-440 `typ-440))
33113345++ test-types-generic-union-errors
3312− (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))
3346+ (weld (check ~.types-generic-union-errors src-441 `tok-441 `tre-441) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-441 `typ-441))
33133347++ test-types-generic-union-escaping
3314− (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]]))
3348+ (weld (weld (check ~.types-generic-union-escaping src-442 `tok-442 `tre-442) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-442 `typ-442 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-442-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-442-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-442 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-442-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-442-2]]))
33153349++ test-types-generic-union-import
3316− (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]]))
3350+ (weld (weld (check ~.types-generic-union-import src-443 `tok-443 `tre-443) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-443 `typ-443 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-443-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-443-2]])) (check-module-trees ~.types-generic-union-import `mtre-443 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-443-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-443-2]]))
33173351++ test-types-generic-union-local
3318− (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))
3352+ (weld (check ~.types-generic-union-local src-444 `tok-444 `tre-444) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-444 `typ-444))
33193353++ test-types-generic-union-transitive
3320− (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]]))
3354+ (weld (weld (check ~.types-generic-union-transitive src-445 `tok-445 `tre-445) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-445 `typ-445 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-445-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-445-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-445 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-445-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-445-2]]))
33213355++ test-types-hole-concrete
3322− (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))
3356+ (weld (check ~.types-hole-concrete src-446 `tok-446 `tre-446) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-446 `typ-446))
33233357++ test-types-hole-generic-mold
3324− (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))
3358+ (weld (check ~.types-hole-generic-mold src-447 `tok-447 `tre-447) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-447 `typ-447))
33253359++ test-types-hole-local-boundary
3326− (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))
3360+ (weld (check ~.types-hole-local-boundary src-448 `tok-448 `tre-448) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-448 `typ-448))
33273361++ test-types-hole-module-boundary
3328− (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]]))
3362+ (weld (weld (check ~.types-hole-module-boundary src-449 `tok-449 `tre-449) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-449 `typ-449 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-449-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-449 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-449-1]]))
33293363++ test-types-hole-named-complex
3330− (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))
3364+ (weld (check ~.types-hole-named-complex src-450 `tok-450 `tre-450) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-450 `typ-450))
33313365++ test-types-hole-numeric-capture
3332− (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))
3366+ (weld (check ~.types-hole-numeric-capture src-451 `tok-451 `tre-451) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-451 `typ-451))
33333367++ test-types-hole-unbound-mold
3334− (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))
3368+ (weld (check ~.types-hole-unbound-mold src-452 `tok-452 `tre-452) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-452 `typ-452))
33353369++ test-types-hole-unsupported
3336− (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))
3370+ (weld (check ~.types-hole-unsupported src-453 `tok-453 `tre-453) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-453 `typ-453))
33373371++ test-types-hole-user-generic
3338− (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))
3372+ (weld (check ~.types-hole-user-generic src-454 `tok-454 `tre-454) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-454 `typ-454))
33393373++ test-types-hole-user-named
3340− (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))
3374+ (weld (check ~.types-hole-user-named src-455 `tok-455 `tre-455) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-455 `typ-455))
33413375++ test-types-hole-user-value
3342− (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))
3376+ (weld (check ~.types-hole-user-value src-456 `tok-456 `tre-456) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-456 `typ-456))
33433377++ test-types-import-duplicate-mark
3344− (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]]))
3378+ (weld (check ~.types-import-duplicate-mark src-457 `tok-457 `tre-457) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-457 `typ-457 ~ ~[[%duplicate mark-457-1]]))
33453379++ test-types-import-duplicate-sur
3346− (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]]))
3380+ (weld (check ~.types-import-duplicate-sur src-458 `tok-458 `tre-458) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-458 `typ-458 ~[[%fixture %direct imp-458-1] [%fixture %nested imp-458-2] [%fixture %valid imp-458-3]]))
33473381++ test-types-import-hoon-flags
3348− (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]]))
3382+ (weld (check ~.types-import-hoon-flags src-459 `tok-459 `tre-459) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-459 `typ-459 ~[[%flags %flag imp-459-1] [%flags %yes imp-459-2] [%flags %no imp-459-3] [%flags %record imp-459-4]]))
33493383++ test-types-import-hoon-noun
3350− (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]]))
3384+ (weld (check ~.types-import-hoon-noun src-460 `tok-460 `tre-460) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-460 `typ-460 ~[[%fixture %any imp-460-1] [%fixture %payload imp-460-2] [%fixture %option imp-460-3] [%fixture %overlap imp-460-4]]))
33513385++ test-types-import-mark
3352− (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]]))
3386+ (weld (check ~.types-import-mark src-461 `tok-461 `tre-461) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-461 `typ-461 ~[[%fixture %title imp-461-1]] ~[[%label mark-461-1]]))
33533387++ test-types-import-mark-record
3354− (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]]))
3388+ (weld (check ~.types-import-mark-record src-462 `tok-462 `tre-462) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-462 `typ-462 ~ ~[[%note mark-462-1] [%choice mark-462-2]]))
33553389++ test-types-import-missing-mold
3356− (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]]))
3390+ (weld (check ~.types-import-missing-mold src-463 `tok-463 `tre-463) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-463 `typ-463 ~[[%fixture %missing imp-463-1]]))
33573391++ test-types-import-sur
3358− (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]]))
3392+ (weld (check ~.types-import-sur src-464 `tok-464 `tre-464) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-464 `typ-464 ~[[%fixture %title imp-464-1] [%fixture %pair imp-464-2]]))
33593393++ test-types-import-sur-record-graph
3360− (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]]))
3394+ (weld (weld (check ~.types-import-sur-record-graph src-465 `tok-465 `tre-465) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-465 `typ-465 ~[[%fixture %entry imp-465-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-465-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-465 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-465-1]]))
33613395++ test-types-import-tlon-notes
3362− (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]]))
3396+ (weld (check ~.types-import-tlon-notes src-466 `tok-466 `tre-466) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-466 `typ-466 ~[[%notes %u-note imp-466-1] [%notes %a-note imp-466-2] [%notes %u-notebook imp-466-3] [%notes %u-notes imp-466-4] [%notes %log imp-466-5] [%notes %import-node imp-466-6] [%notes %a-notebook imp-466-7]]))
33633397++ test-types-list-branch
3364− (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 ~ ~ ~))
3398+ (weld (check ~.types-list-branch src-467 `tok-467 `tre-467) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-467 `typ-467 ~ ~ ~))
33653399++ test-types-list-cons
3366− (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 ~ ~ ~))
3400+ (weld (check ~.types-list-cons src-468 `tok-468 `tre-468) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-468 `typ-468 ~ ~ ~))
33673401++ test-types-list-context
3368− (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 ~ ~ ~))
3402+ (weld (check ~.types-list-context src-469 `tok-469 `tre-469) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-469 `typ-469 ~ ~ ~))
33693403++ test-types-list-imported
3370− (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]] ~ ~))
3404+ (weld (check ~.types-list-imported src-470 `tok-470 `tre-470) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-470 `typ-470 ~[[%fixture %texts imp-470-1] [%fixture %ships imp-470-2]] ~ ~))
33713405++ test-types-list-open
3372− (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 ~ ~ ~))
3406+ (weld (check ~.types-list-open src-471 `tok-471 `tre-471) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-471 `typ-471 ~ ~ ~))
33733407++ test-types-list-open-constraints
3374− (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 ~ ~ ~))
3408+ (weld (check ~.types-list-open-constraints src-472 `tok-472 `tre-472) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-472 `typ-472 ~ ~ ~))
33753409++ test-types-list-pattern-imported
3376− (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]] ~ ~))
3410+ (weld (check ~.types-list-pattern-imported src-473 `tok-473 `tre-473) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-473 `typ-473 ~[[%fixture %texts imp-473-1] [%fixture %text-set imp-473-2]] ~ ~))
33773411++ test-types-list-patterns
3378− (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 ~ ~ ~))
3412+ (weld (check ~.types-list-patterns src-474 `tok-474 `tre-474) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-474 `typ-474 ~ ~ ~))
33793413++ test-types-list-zero-fit
3380− (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 ~ ~ ~))
3414+ (weld (check ~.types-list-zero-fit src-475 `tok-475 `tre-475) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-475 `typ-475 ~ ~ ~))
33813415++ test-types-literal-constructor-nouns
3382− (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))
3416+ (weld (check ~.types-literal-constructor-nouns src-476 `tok-476 `tre-476) (check-types ~.types-literal-constructor-nouns ~[%tests %golden ~.types-literal-constructor-nouns %source %jibb] src-476 `typ-476))
33833417++ test-types-local-capitals
3384− (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 ~ ~ ~))
3418+ (weld (check ~.types-local-capitals src-477 `tok-477 `tre-477) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-477 `typ-477 ~ ~ ~))
33853419++ test-types-local-recursive
3386− (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 ~ ~ ~))
3420+ (weld (check ~.types-local-recursive src-478 `tok-478 `tre-478) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-478 `typ-478 ~ ~ ~))
33873421++ test-types-local-scc
3388− (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 ~ ~ ~))
3422+ (weld (check ~.types-local-scc src-479 `tok-479 `tre-479) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-479 `typ-479 ~ ~ ~))
33893423++ test-types-local-scc-adversarial
3390− (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 ~ ~ ~))
3424+ (weld (check ~.types-local-scc-adversarial src-480 `tok-480 `tre-480) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-480 `typ-480 ~ ~ ~))
33913425++ test-types-loobean-singleton-source
3392− (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))
3426+ (weld (check ~.types-loobean-singleton-source src-481 `tok-481 `tre-481) (check-types ~.types-loobean-singleton-source ~[%tests %golden ~.types-loobean-singleton-source %source %jibb] src-481 `typ-481))
33933427++ test-types-loobean-union-context
3394− (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))
3428+ (weld (check ~.types-loobean-union-context src-482 `tok-482 `tre-482) (check-types ~.types-loobean-union-context ~[%tests %golden ~.types-loobean-union-context %source %jibb] src-482 `typ-482))
33953429++ test-types-missing-tag-context
3396− (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 ~ ~ ~))
3430+ (weld (check ~.types-missing-tag-context src-483 `tok-483 `tre-483) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-483 `typ-483 ~ ~ ~))
33973431++ test-types-missing-tag-imported
3398− (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]]))
3432+ (weld (check ~.types-missing-tag-imported src-484 `tok-484 `tre-484) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-484 `typ-484 ~[[%fixture %choice imp-484-1] [%fixture %nested-choice imp-484-2]]))
33993433++ test-types-missing-tag-named
3400− (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 ~ ~ ~))
3434+ (weld (check ~.types-missing-tag-named src-485 `tok-485 `tre-485) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-485 `typ-485 ~ ~ ~))
34013435++ test-types-module-field-duplicate
3402− (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]]))
3436+ (weld (weld (check ~.types-module-field-duplicate src-486 `tok-486 `tre-486) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-486 `typ-486 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-486 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]]))
34033437++ test-types-module-field-nonrecord
3404− (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]]))
3438+ (weld (weld (check ~.types-module-field-nonrecord src-487 `tok-487 `tre-487) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-487 `typ-487 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-487 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]]))
34053439++ test-types-module-field-path
3406− (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]]))
3440+ (weld (weld (check ~.types-module-field-path src-488 `tok-488 `tre-488) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]])) (check-module-trees ~.types-module-field-path `mtre-488 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]]))
34073441++ test-types-module-field-shadow
3408− (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]]))
3442+ (weld (weld (check ~.types-module-field-shadow src-489 `tok-489 `tre-489) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-489 `typ-489 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-489-1]])) (check-module-trees ~.types-module-field-shadow `mtre-489 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-489-1]]))
34093443++ test-types-module-fixtures
3410− (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]]))
3444+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-490 `tok-490 `tre-490) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-490 `typ-490 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-490-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-490-2]])) (check-module-trees ~.types-module-fixtures `mtre-490 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-490-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-490-2]]))
34113445++ test-types-module-mixed
3412− (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]]))
3446+ (weld (weld (check ~.types-module-mixed src-491 `tok-491 `tre-491) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-491 `typ-491 ~[[%fixture %title imp-491-1]] ~[[%label mark-491-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-491-1]])) (check-module-trees ~.types-module-mixed `mtre-491 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-491-1]]))
34133447++ test-types-multi-call
3414− (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 ~ ~ ~))
3448+ (weld (check ~.types-multi-call src-492 `tok-492 `tre-492) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-492 `typ-492 ~ ~ ~))
34153449++ test-types-multi-import
3416− (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]]))
3450+ (weld (weld (check ~.types-multi-import src-493 `tok-493 `tre-493) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-493 `typ-493 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-493-1]])) (check-module-trees ~.types-multi-import `mtre-493 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-493-1]]))
34173451++ test-types-nested-missing-tag
3418− (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 ~ ~ ~))
3452+ (weld (check ~.types-nested-missing-tag src-494 `tok-494 `tre-494) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-494 `typ-494 ~ ~ ~))
34193453++ test-types-nested-noun-context
3420− (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))
3454+ (weld (check ~.types-nested-noun-context src-495 `tok-495 `tre-495) (check-types ~.types-nested-noun-context ~[%tests %golden ~.types-nested-noun-context %source %jibb] src-495 `typ-495))
34213455++ test-types-nested-shallow-preserve
3422− (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 ~ ~ ~))
3456+ (weld (check ~.types-nested-shallow-preserve src-496 `tok-496 `tre-496) (check-module-types ~.types-nested-shallow-preserve ~[%tests %golden ~.types-nested-shallow-preserve %source %jibb] src-496 `typ-496 ~ ~ ~))
34233457++ test-types-nested-union-context
3424− (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))
3458+ (weld (check ~.types-nested-union-context src-497 `tok-497 `tre-497) (check-types ~.types-nested-union-context ~[%tests %golden ~.types-nested-union-context %source %jibb] src-497 `typ-497))
34253459++ test-types-null-context
3426− (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))
3460+ (weld (check ~.types-null-context src-498 `tok-498 `tre-498) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-498 `typ-498))
34273461++ test-types-null-overlap
3428− (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))
3462+ (weld (check ~.types-null-overlap src-499 `tok-499 `tre-499) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-499 `typ-499))
34293463++ test-types-null-unresolved
3430− (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))
3464+ (weld (check ~.types-null-unresolved src-500 `tok-500 `tre-500) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-500 `typ-500))
34313465++ test-types-pair-context
3432− (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 ~ ~ ~))
3466+ (weld (check ~.types-pair-context src-501 `tok-501 `tre-501) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-501 `typ-501 ~ ~ ~))
34333467++ test-types-partial-apply
3434− (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))
3468+ (weld (check ~.types-partial-apply src-502 `tok-502 `tre-502) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-502 `typ-502))
34353469++ test-types-partial-atom-alias
3436− (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))
3470+ (weld (check ~.types-partial-atom-alias src-503 `tok-503 `tre-503) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-503 `typ-503))
34373471++ test-types-partial-atom-constraint
3438− (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))
3472+ (weld (check ~.types-partial-atom-constraint src-504 `tok-504 `tre-504) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-504 `typ-504))
34393473++ test-types-partial-atom-widening
3440− (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))
3474+ (weld (check ~.types-partial-atom-widening src-505 `tok-505 `tre-505) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-505 `typ-505))
34413475++ test-types-partial-aura
3442− (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))
3476+ (weld (check ~.types-partial-aura src-506 `tok-506 `tre-506) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-506 `typ-506))
34433477++ test-types-partial-aura-family
3444− (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))
3478+ (weld (check ~.types-partial-aura-family src-507 `tok-507 `tre-507) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-507 `typ-507))
34453479++ test-types-partial-aura-generalization
3446− (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))
3480+ (weld (check ~.types-partial-aura-generalization src-508 `tok-508 `tre-508) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-508 `typ-508))
34473481++ test-types-partial-bare-atom
3448− (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))
3482+ (weld (check ~.types-partial-bare-atom src-509 `tok-509 `tre-509) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-509 `typ-509))
34493483++ test-types-partial-branch-widening
3450− (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))
3484+ (weld (check ~.types-partial-branch-widening src-510 `tok-510 `tre-510) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-510 `typ-510))
34513485++ test-types-partial-conflicting-sites
3452− (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))
3486+ (weld (check ~.types-partial-conflicting-sites src-511 `tok-511 `tre-511) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-511 `typ-511))
34533487++ test-types-partial-decimal-default
3454− (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))
3488+ (weld (check ~.types-partial-decimal-default src-512 `tok-512 `tre-512) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-512 `typ-512))
34553489++ test-types-partial-dependency-chain
3456− (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))
3490+ (weld (check ~.types-partial-dependency-chain src-513 `tok-513 `tre-513) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-513 `typ-513))
34573491++ test-types-partial-explicit-capital
3458− (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))
3492+ (weld (check ~.types-partial-explicit-capital src-514 `tok-514 `tre-514) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-514 `typ-514))
34593493++ test-types-partial-forward
3460− (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))
3494+ (weld (check ~.types-partial-forward src-515 `tok-515 `tre-515) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-515 `typ-515))
34613495++ test-types-partial-generalization
3462− (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))
3496+ (weld (check ~.types-partial-generalization src-516 `tok-516 `tre-516) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-516 `typ-516))
34633497++ test-types-partial-identity
3464− (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))
3498+ (weld (check ~.types-partial-identity src-517 `tok-517 `tre-517) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-517 `typ-517))
34653499++ test-types-partial-independent-atoms
3466− (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))
3500+ (weld (check ~.types-partial-independent-atoms src-518 `tok-518 `tre-518) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-518 `typ-518))
34673501++ test-types-partial-local-molds
3468− (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))
3502+ (weld (check ~.types-partial-local-molds src-519 `tok-519 `tre-519) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-519 `typ-519))
34693503++ test-types-partial-locals
3470− (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))
3504+ (weld (check ~.types-partial-locals src-520 `tok-520 `tre-520) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-520 `typ-520))
34713505++ test-types-partial-many-atom-constraints
3472− (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))
3506+ (weld (check ~.types-partial-many-atom-constraints src-521 `tok-521 `tre-521) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-521 `typ-521))
34733507++ test-types-partial-mold-bare-aura
3474− (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))
3508+ (weld (check ~.types-partial-mold-bare-aura src-522 `tok-522 `tre-522) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-522 `typ-522))
34753509++ test-types-partial-mold-composite
3476− (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))
3510+ (weld (check ~.types-partial-mold-composite src-523 `tok-523 `tre-523) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-523 `typ-523))
34773511++ test-types-partial-mold-forward
3478− (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))
3512+ (weld (check ~.types-partial-mold-forward src-524 `tok-524 `tre-524) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-524 `typ-524))
34793513++ test-types-partial-mold-recursive
3480− (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))
3514+ (weld (check ~.types-partial-mold-recursive src-525 `tok-525 `tre-525) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-525 `typ-525))
34813515++ test-types-partial-occurs
3482− (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))
3516+ (weld (check ~.types-partial-occurs src-526 `tok-526 `tre-526) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-526 `typ-526))
34833517++ test-types-partial-projection
3484− (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))
3518+ (weld (check ~.types-partial-projection src-527 `tok-527 `tre-527) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-527 `typ-527))
34853519++ test-types-partial-shadow-global
3486− (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))
3520+ (weld (check ~.types-partial-shadow-global src-528 `tok-528 `tre-528) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-528 `typ-528))
34873521++ test-types-partial-shared-tvar
3488− (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))
3522+ (weld (check ~.types-partial-shared-tvar src-529 `tok-529 `tre-529) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-529 `typ-529))
34893523++ test-types-partial-union-cases
3490− (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))
3524+ (weld (check ~.types-partial-union-cases src-530 `tok-530 `tre-530) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-530 `typ-530))
34913525++ test-types-partial-union-edges
3492− (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))
3526+ (weld (check ~.types-partial-union-edges src-531 `tok-531 `tre-531) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-531 `typ-531))
34933527++ test-types-partial-union-nested-nouns
3494− (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))
3528+ (weld (check ~.types-partial-union-nested-nouns src-532 `tok-532 `tre-532) (check-types ~.types-partial-union-nested-nouns ~[%tests %golden ~.types-partial-union-nested-nouns %source %jibb] src-532 `typ-532))
34953529++ test-types-partial-unresolved-tag
3496− (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))
3530+ (weld (check ~.types-partial-unresolved-tag src-533 `tok-533 `tre-533) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-533 `typ-533))
34973531++ test-types-positional-faces
3498− (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))
3532+ (weld (check ~.types-positional-faces src-534 `tok-534 `tre-534) (check-types ~.types-positional-faces ~[%tests %golden ~.types-positional-faces %source %jibb] src-534 `typ-534))
34993533++ test-types-prelude-arithmetic
3500− (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 ~ ~ ~))
3534+ (weld (check ~.types-prelude-arithmetic src-535 `tok-535 `tre-535) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-535 `typ-535 ~ ~ ~))
35013535++ test-types-prelude-ask
3502− (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 ~ ~ ~))
3536+ (weld (check ~.types-prelude-ask src-536 `tok-536 `tre-536) (check-module-types ~.types-prelude-ask ~[%tests %golden ~.types-prelude-ask %source %jibb] src-536 `typ-536 ~ ~ ~))
35033537++ test-types-prelude-bond
3504− (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 ~ ~ ~))
3538+ (weld (check ~.types-prelude-bond src-537 `tok-537 `tre-537) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-537 `typ-537 ~ ~ ~))
35053539++ test-types-prelude-cmd
3506− (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 ~ ~ ~))
3540+ (weld (check ~.types-prelude-cmd src-538 `tok-538 `tre-538) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-538 `typ-538 ~ ~ ~))
35073541++ test-types-prelude-comparison
3508− (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 ~ ~ ~))
3542+ (weld (check ~.types-prelude-comparison src-539 `tok-539 `tre-539) (check-module-types ~.types-prelude-comparison ~[%tests %golden ~.types-prelude-comparison %source %jibb] src-539 `typ-539 ~ ~ ~))
35093543++ test-types-prelude-direct
3510− (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 ~ ~ ~))
3544+ (weld (check ~.types-prelude-direct src-540 `tok-540 `tre-540) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-540 `typ-540 ~ ~ ~))
35113545++ test-types-prelude-functional
3512− (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 ~ ~ ~))
3546+ (weld (check ~.types-prelude-functional src-541 `tok-541 `tre-541) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-541 `typ-541 ~ ~ ~))
35133547++ test-types-prelude-generic-alias
3514− (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]]))
3548+ (weld (weld (check ~.types-prelude-generic-alias src-542 `tok-542 `tre-542) (check-module-types ~.types-prelude-generic-alias ~[%tests %golden ~.types-prelude-generic-alias %source %jibb] src-542 `typ-542 ~ ~ ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-542-1]])) (check-module-trees ~.types-prelude-generic-alias `mtre-542 ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-542-1]]))
35153549++ test-types-prelude-interface
3516− (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]]))
3550+ (weld (weld (check ~.types-prelude-interface src-543 `tok-543 `tre-543) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-543 `typ-543 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-543-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-543-2]])) (check-module-trees ~.types-prelude-interface `mtre-543 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-543-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-543-2]]))
3551+++ test-types-prelude-lead-late
3552+ (weld (check ~.types-prelude-lead-late src-544 `tok-544 `tre-544) (check-module-types ~.types-prelude-lead-late ~[%tests %golden ~.types-prelude-lead-late %source %jibb] src-544 `typ-544 ~ ~ ~))
35173553++ test-types-prelude-lent
3518− (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 ~ ~ ~))
3554+ (weld (check ~.types-prelude-lent src-545 `tok-545 `tre-545) (check-module-types ~.types-prelude-lent ~[%tests %golden ~.types-prelude-lent %source %jibb] src-545 `typ-545 ~ ~ ~))
35193555++ test-types-prelude-like
3520− (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 ~ ~ ~))
3556+ (weld (check ~.types-prelude-like src-546 `tok-546 `tre-546) (check-module-types ~.types-prelude-like ~[%tests %golden ~.types-prelude-like %source %jibb] src-546 `typ-546 ~ ~ ~))
35213557++ test-types-prelude-list-alias
3522− (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 ~ ~ ~))
3558+ (weld (check ~.types-prelude-list-alias src-547 `tok-547 `tre-547) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-547 `typ-547 ~ ~ ~))
35233559++ test-types-prelude-list-functions
3524− (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]]))
3560+ (weld (weld (check ~.types-prelude-list-functions src-548 `tok-548 `tre-548) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-548 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]]))
35253561++ test-types-prelude-list-helpers
3526− (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 ~ ~ ~))
3562+ (weld (check ~.types-prelude-list-helpers src-549 `tok-549 `tre-549) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-549 `typ-549 ~ ~ ~))
35273563++ test-types-prelude-predicates
3528− (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 ~ ~ ~))
3564+ (weld (check ~.types-prelude-predicates src-550 `tok-550 `tre-550) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-550 `typ-550 ~ ~ ~))
35293565++ test-types-prelude-sub
3530− (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 ~ ~ ~))
3566+ (weld (check ~.types-prelude-sub src-551 `tok-551 `tre-551) (check-module-types ~.types-prelude-sub ~[%tests %golden ~.types-prelude-sub %source %jibb] src-551 `typ-551 ~ ~ ~))
35313567++ test-types-prelude-sub-nested
3532− (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 ~ ~ ~))
3568+ (weld (check ~.types-prelude-sub-nested src-552 `tok-552 `tre-552) (check-module-types ~.types-prelude-sub-nested ~[%tests %golden ~.types-prelude-sub-nested %source %jibb] src-552 `typ-552 ~ ~ ~))
3569+++ test-types-prelude-succ
3570+ (weld (check ~.types-prelude-succ src-553 `tok-553 `tre-553) (check-module-types ~.types-prelude-succ ~[%tests %golden ~.types-prelude-succ %source %jibb] src-553 `typ-553 ~ ~ ~))
3571+++ test-types-prelude-text
3572+ (weld (check ~.types-prelude-text src-554 `tok-554 `tre-554) (check-module-types ~.types-prelude-text ~[%tests %golden ~.types-prelude-text %source %jibb] src-554 `typ-554 ~ ~ ~))
3573+++ test-types-prelude-ui
3574+ (weld (check ~.types-prelude-ui src-555 `tok-555 `tre-555) (check-module-types ~.types-prelude-ui ~[%tests %golden ~.types-prelude-ui %source %jibb] src-555 `typ-555 ~ ~ ~))
35333575++ test-types-prelude-unit-helpers
3534− (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 ~ ~ ~))
3576+ (weld (check ~.types-prelude-unit-helpers src-556 `tok-556 `tre-556) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-556 `typ-556 ~ ~ ~))
3577+++ test-types-prelude-zing
3578+ (weld (check ~.types-prelude-zing src-557 `tok-557 `tre-557) (check-module-types ~.types-prelude-zing ~[%tests %golden ~.types-prelude-zing %source %jibb] src-557 `typ-557 ~ ~ ~))
35353579++ test-types-proj-explicit-context
3536− (weld (check ~.types-proj-explicit-context src-552 `tok-552 `tre-552) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-552 `typ-552 ~ ~ ~))
3580+ (weld (check ~.types-proj-explicit-context src-558 `tok-558 `tre-558) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-558 `typ-558 ~ ~ ~))
35373581++ test-types-proj-nested-no-implicit
3538− (weld (check ~.types-proj-nested-no-implicit src-553 `tok-553 `tre-553) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-553 `typ-553 ~ ~ ~))
3582+ (weld (check ~.types-proj-nested-no-implicit src-559 `tok-559 `tre-559) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-559 `typ-559 ~ ~ ~))
35393583++ test-types-proj-reserved-imported-definition
3540− (weld (weld (check ~.types-proj-reserved-imported-definition src-554 `tok-554 `tre-554) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-554 `typ-554 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-554 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]]))
3584+ (weld (weld (check ~.types-proj-reserved-imported-definition src-560 `tok-560 `tre-560) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-560 `typ-560 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-560-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-560 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-560-1]]))
35413585++ test-types-proj-reserved-jibb-import
3542− (weld (weld (check ~.types-proj-reserved-jibb-import src-555 `tok-555 `tre-555) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-555 `typ-555 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-555-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-555 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-555-1]]))
3586+ (weld (weld (check ~.types-proj-reserved-jibb-import src-561 `tok-561 `tre-561) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-561 `typ-561 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-561-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-561 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-561-1]]))
35433587++ test-types-proj-reserved-local
3544− (weld (check ~.types-proj-reserved-local src-556 `tok-556 `tre-556) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-556 `typ-556 ~ ~ ~))
3588+ (weld (check ~.types-proj-reserved-local src-562 `tok-562 `tre-562) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-562 `typ-562 ~ ~ ~))
35453589++ test-types-proj-reserved-local-mold
3546− (weld (check ~.types-proj-reserved-local-mold src-557 `tok-557 `tre-557) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-557 `typ-557 ~ ~ ~))
3590+ (weld (check ~.types-proj-reserved-local-mold src-563 `tok-563 `tre-563) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-563 `typ-563 ~ ~ ~))
35473591++ test-types-proj-reserved-mark-import
3548− (weld (check ~.types-proj-reserved-mark-import src-558 `tok-558 `tre-558) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-558 `typ-558 ~ ~ ~))
3592+ (weld (check ~.types-proj-reserved-mark-import src-564 `tok-564 `tre-564) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-564 `typ-564 ~ ~ ~))
35493593++ test-types-proj-reserved-mold
3550− (weld (check ~.types-proj-reserved-mold src-559 `tok-559 `tre-559) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-559 `typ-559 ~ ~ ~))
3594+ (weld (check ~.types-proj-reserved-mold src-565 `tok-565 `tre-565) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-565 `typ-565 ~ ~ ~))
35513595++ test-types-proj-reserved-pattern
3552− (weld (check ~.types-proj-reserved-pattern src-560 `tok-560 `tre-560) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-560 `typ-560 ~ ~ ~))
3596+ (weld (check ~.types-proj-reserved-pattern src-566 `tok-566 `tre-566) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-566 `typ-566 ~ ~ ~))
35533597++ test-types-proj-reserved-positive
3554− (weld (check ~.types-proj-reserved-positive src-561 `tok-561 `tre-561) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-561 `typ-561 ~ ~ ~))
3598+ (weld (check ~.types-proj-reserved-positive src-567 `tok-567 `tre-567) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-567 `typ-567 ~ ~ ~))
35553599++ test-types-proj-reserved-sample
3556− (weld (check ~.types-proj-reserved-sample src-562 `tok-562 `tre-562) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-562 `typ-562 ~ ~ ~))
3600+ (weld (check ~.types-proj-reserved-sample src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-568 `typ-568 ~ ~ ~))
35573601++ test-types-proj-reserved-sur-import
3558− (weld (check ~.types-proj-reserved-sur-import src-563 `tok-563 `tre-563) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-563 `typ-563 ~ ~ ~))
3602+ (weld (check ~.types-proj-reserved-sur-import src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-569 `typ-569 ~ ~ ~))
35593603++ test-types-proj-reserved-unused-pattern
3560− (weld (check ~.types-proj-reserved-unused-pattern src-564 `tok-564 `tre-564) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-564 `typ-564 ~ ~ ~))
3604+ (weld (check ~.types-proj-reserved-unused-pattern src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-570 `typ-570 ~ ~ ~))
35613605++ test-types-proj-reserved-unused-sample
3562− (weld (check ~.types-proj-reserved-unused-sample src-565 `tok-565 `tre-565) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-565 `typ-565 ~ ~ ~))
3606+ (weld (check ~.types-proj-reserved-unused-sample src-571 `tok-571 `tre-571) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-571 `typ-571 ~ ~ ~))
35633607++ test-types-proj-reserved-unused-value
3564− (weld (check ~.types-proj-reserved-unused-value src-566 `tok-566 `tre-566) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-566 `typ-566 ~ ~ ~))
3608+ (weld (check ~.types-proj-reserved-unused-value src-572 `tok-572 `tre-572) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-572 `typ-572 ~ ~ ~))
35653609++ test-types-proj-reserved-value
3566− (weld (check ~.types-proj-reserved-value src-567 `tok-567 `tre-567) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-567 `typ-567 ~ ~ ~))
3610+ (weld (check ~.types-proj-reserved-value src-573 `tok-573 `tre-573) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-573 `typ-573 ~ ~ ~))
35673611++ test-types-proj-single-duplicate
3568− (weld (check ~.types-proj-single-duplicate src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-568 `typ-568 ~ ~ ~))
3612+ (weld (check ~.types-proj-single-duplicate src-574 `tok-574 `tre-574) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-574 `typ-574 ~ ~ ~))
35693613++ test-types-proj-single-field
3570− (weld (check ~.types-proj-single-field src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-569 `typ-569 ~ ~ ~))
3614+ (weld (check ~.types-proj-single-field src-575 `tok-575 `tre-575) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-575 `typ-575 ~ ~ ~))
35713615++ test-types-proj-single-sample-face
3572− (weld (check ~.types-proj-single-sample-face src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-570 `typ-570 ~ ~ ~))
3616+ (weld (check ~.types-proj-single-sample-face src-576 `tok-576 `tre-576) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-576 `typ-576 ~ ~ ~))
35733617++ test-types-proj-single-wrapped
3574− (weld (check ~.types-proj-single-wrapped src-571 `tok-571 `tre-571) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-571 `typ-571 ~ ~ ~))
3618+ (weld (check ~.types-proj-single-wrapped src-577 `tok-577 `tre-577) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-577 `typ-577 ~ ~ ~))
35753619++ test-types-qath-faces
3576− (weld (check ~.types-qath-faces src-572 `tok-572 `tre-572) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-572 `typ-572 ~ ~ ~))
3620+ (weld (check ~.types-qath-faces src-578 `tok-578 `tre-578) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-578 `typ-578 ~ ~ ~))
35773621++ test-types-qath-holes
3578− (weld (check ~.types-qath-holes src-573 `tok-573 `tre-573) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-573 `typ-573 ~ ~ ~))
3622+ (weld (check ~.types-qath-holes src-579 `tok-579 `tre-579) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-579 `typ-579 ~ ~ ~))
35793623++ test-types-qath-module-identity
3580− (weld (weld (check ~.types-qath-module-identity src-574 `tok-574 `tre-574) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-574 `typ-574 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-574-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-574-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-574-3]])) (check-module-trees ~.types-qath-module-identity `mtre-574 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-574-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-574-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-574-3]]))
3624+ (weld (weld (check ~.types-qath-module-identity src-580 `tok-580 `tre-580) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-580 `typ-580 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-580-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-580-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-580-3]])) (check-module-trees ~.types-qath-module-identity `mtre-580 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-580-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-580-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-580-3]]))
35813625++ test-types-qath-recursive
3582− (weld (check ~.types-qath-recursive src-575 `tok-575 `tre-575) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-575 `typ-575 ~ ~ ~))
3626+ (weld (check ~.types-qath-recursive src-581 `tok-581 `tre-581) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-581 `typ-581 ~ ~ ~))
35833627++ test-types-record-bound-variable
3584− (weld (check ~.types-record-bound-variable src-576 `tok-576 `tre-576) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-576 `typ-576))
3628+ (weld (check ~.types-record-bound-variable src-582 `tok-582 `tre-582) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-582 `typ-582))
35853629++ test-types-record-cast-context
3586− (weld (check ~.types-record-cast-context src-577 `tok-577 `tre-577) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-577 `typ-577 ~ ~ ~))
3630+ (weld (check ~.types-record-cast-context src-583 `tok-583 `tre-583) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-583 `typ-583 ~ ~ ~))
35873631++ test-types-record-change
3588− (weld (check ~.types-record-change src-578 `tok-578 `tre-578) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-578 `typ-578 ~ ~ ~))
3632+ (weld (check ~.types-record-change src-584 `tok-584 `tre-584) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-584 `typ-584 ~ ~ ~))
35893633++ test-types-record-change-generic
3590− (weld (check ~.types-record-change-generic src-579 `tok-579 `tre-579) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-579 `typ-579 ~ ~ ~))
3634+ (weld (check ~.types-record-change-generic src-585 `tok-585 `tre-585) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-585 `typ-585 ~ ~ ~))
35913635++ test-types-record-faces
3592− (weld (check ~.types-record-faces src-580 `tok-580 `tre-580) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-580 `typ-580))
3636+ (weld (check ~.types-record-faces src-586 `tok-586 `tre-586) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-586 `typ-586))
35933637++ test-types-record-field-edit-separate
3594− (weld (check ~.types-record-field-edit-separate src-581 `tok-581 `tre-581) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-581 `typ-581))
3638+ (weld (check ~.types-record-field-edit-separate src-587 `tok-587 `tre-587) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-587 `typ-587))
35953639++ test-types-record-field-expr-duplicate
3596− (weld (check ~.types-record-field-expr-duplicate src-582 `tok-582 `tre-582) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-582 `typ-582))
3640+ (weld (check ~.types-record-field-expr-duplicate src-588 `tok-588 `tre-588) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-588 `typ-588))
35973641++ test-types-record-field-expr-separate
3598− (weld (check ~.types-record-field-expr-separate src-583 `tok-583 `tre-583) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-583 `typ-583))
3642+ (weld (check ~.types-record-field-expr-separate src-589 `tok-589 `tre-589) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-589 `typ-589))
35993643++ test-types-record-field-module-reachable
3600− (weld (weld (check ~.types-record-field-module-reachable src-584 `tok-584 `tre-584) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-584 `typ-584 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-584-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-584 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-584-1]]))
3644+ (weld (weld (check ~.types-record-field-module-reachable src-590 `tok-590 `tre-590) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-590 `typ-590 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-590-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-590 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-590-1]]))
36013645++ test-types-record-field-module-unused
3602− (weld (weld (check ~.types-record-field-module-unused src-585 `tok-585 `tre-585) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-585 `typ-585 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-585-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-585-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-585 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-585-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-585-2]]))
3646+ (weld (weld (check ~.types-record-field-module-unused src-591 `tok-591 `tre-591) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-591 `typ-591 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-591-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-591-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-591 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-591-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-591-2]]))
36033647++ test-types-record-field-nested-mold
3604− (weld (check ~.types-record-field-nested-mold src-586 `tok-586 `tre-586) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-586 `typ-586))
3648+ (weld (check ~.types-record-field-nested-mold src-592 `tok-592 `tre-592) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-592 `typ-592))
36053649++ test-types-record-field-outer-inner
3606− (weld (check ~.types-record-field-outer-inner src-587 `tok-587 `tre-587) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-587 `typ-587))
3650+ (weld (check ~.types-record-field-outer-inner src-593 `tok-593 `tre-593) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-593 `typ-593))
36073651++ test-types-record-field-sample-duplicate
3608− (weld (check ~.types-record-field-sample-duplicate src-588 `tok-588 `tre-588) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-588 `typ-588))
3652+ (weld (check ~.types-record-field-sample-duplicate src-594 `tok-594 `tre-594) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-594 `typ-594))
36093653++ test-types-record-field-separate-molds
3610− (weld (check ~.types-record-field-separate-molds src-589 `tok-589 `tre-589) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-589 `typ-589))
3654+ (weld (check ~.types-record-field-separate-molds src-595 `tok-595 `tre-595) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-595 `typ-595))
36113655++ test-types-record-field-unused-mold
3612− (weld (check ~.types-record-field-unused-mold src-590 `tok-590 `tre-590) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-590 `typ-590))
3656+ (weld (check ~.types-record-field-unused-mold src-596 `tok-596 `tre-596) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-596 `typ-596))
36133657++ test-types-record-import
3614− (weld (weld (check ~.types-record-import src-591 `tok-591 `tre-591) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-591 `typ-591 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-591-1]])) (check-module-trees ~.types-record-import `mtre-591 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-591-1]]))
3658+ (weld (weld (check ~.types-record-import src-597 `tok-597 `tre-597) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-597 `typ-597 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]])) (check-module-trees ~.types-record-import `mtre-597 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]]))
36153659++ test-types-record-local-scheme
3616− (weld (check ~.types-record-local-scheme src-592 `tok-592 `tre-592) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-592 `typ-592))
3660+ (weld (check ~.types-record-local-scheme src-598 `tok-598 `tre-598) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-598 `typ-598))
36173661++ test-types-record-nested
3618− (weld (check ~.types-record-nested src-593 `tok-593 `tre-593) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-593 `typ-593))
3662+ (weld (check ~.types-record-nested src-599 `tok-599 `tre-599) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-599 `typ-599))
36193663++ test-types-record-to-tuple
3620− (weld (check ~.types-record-to-tuple src-594 `tok-594 `tre-594) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-594 `typ-594))
3664+ (weld (check ~.types-record-to-tuple src-600 `tok-600 `tre-600) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-600 `typ-600))
36213665++ test-types-recursion-scc-failures
3622− (weld (check ~.types-recursion-scc-failures src-595 `tok-595 `tre-595) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-595 `typ-595 ~ ~ ~))
3666+ (weld (check ~.types-recursion-scc-failures src-601 `tok-601 `tre-601) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-601 `typ-601 ~ ~ ~))
36233667++ test-types-recursion-scc-groups
3624− (weld (check ~.types-recursion-scc-groups src-596 `tok-596 `tre-596) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-596 `typ-596 ~ ~ ~))
3668+ (weld (check ~.types-recursion-scc-groups src-602 `tok-602 `tre-602) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-602 `typ-602 ~ ~ ~))
36253669++ test-types-recursion-scc-import
3626− (weld (weld (check ~.types-recursion-scc-import src-597 `tok-597 `tre-597) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-597 `typ-597 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-597 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]]))
3670+ (weld (weld (check ~.types-recursion-scc-import src-603 `tok-603 `tre-603) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-603 `typ-603 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-603-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-603 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-603-1]]))
36273671++ test-types-recursion-scc-import-bad
3628− (weld (weld (check ~.types-recursion-scc-import-bad src-598 `tok-598 `tre-598) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-598 `typ-598 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-598-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-598 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-598-1]]))
3672+ (weld (weld (check ~.types-recursion-scc-import-bad src-604 `tok-604 `tre-604) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-604 `typ-604 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-604-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-604 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-604-1]]))
36293673++ test-types-recursion-scc-local
3630− (weld (check ~.types-recursion-scc-local src-599 `tok-599 `tre-599) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-599 `typ-599 ~ ~ ~))
3674+ (weld (check ~.types-recursion-scc-local src-605 `tok-605 `tre-605) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-605 `typ-605 ~ ~ ~))
36313675++ test-types-recursion-scc-order
3632− (weld (check ~.types-recursion-scc-order src-600 `tok-600 `tre-600) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-600 `typ-600 ~ ~ ~))
3676+ (weld (check ~.types-recursion-scc-order src-606 `tok-606 `tre-606) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-606 `typ-606 ~ ~ ~))
36333677++ test-types-recursion-scc-shadow
3634− (weld (check ~.types-recursion-scc-shadow src-601 `tok-601 `tre-601) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-601 `typ-601 ~ ~ ~))
3678+ (weld (check ~.types-recursion-scc-shadow src-607 `tok-607 `tre-607) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-607 `typ-607 ~ ~ ~))
36353679++ test-types-recursive-branch
3636− (weld (check ~.types-recursive-branch src-602 `tok-602 `tre-602) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-602 `typ-602 ~ ~ ~))
3680+ (weld (check ~.types-recursive-branch src-608 `tok-608 `tre-608) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-608 `typ-608 ~ ~ ~))
36373681++ test-types-recursive-gate
3638− (weld (check ~.types-recursive-gate src-603 `tok-603 `tre-603) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-603 `typ-603))
3682+ (weld (check ~.types-recursive-gate src-609 `tok-609 `tre-609) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-609 `typ-609))
36393683++ test-types-recursive-sample
3640− (weld (check ~.types-recursive-sample src-604 `tok-604 `tre-604) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-604 `typ-604))
3684+ (weld (check ~.types-recursive-sample src-610 `tok-610 `tre-610) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-610 `typ-610))
36413685++ test-types-request-normal
3642− (weld (weld (check ~.types-request-normal src-605 `tok-605 `tre-605) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-605 `typ-605 ~ ~[[%full mark-605-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-605-1]])) (check-module-trees ~.types-request-normal `mtre-605 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-605-1]]))
3686+ (weld (weld (check ~.types-request-normal src-611 `tok-611 `tre-611) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-611 `typ-611 ~ ~[[%full mark-611-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-611-1]])) (check-module-trees ~.types-request-normal `mtre-611 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-611-1]]))
36433687++ test-types-scope-library-poke
3644− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-606 `tok-606 `tre-606) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-606 `typ-606 ~ ~ ~))
3688+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-612 `tok-612 `tre-612) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-612 `typ-612 ~ ~ ~))
36453689++ test-types-scope-root-api
3646− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-607 `tok-607 `tre-607) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-607 `typ-607 ~ ~ ~))
3690+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-613 `tok-613 `tre-613) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-613 `typ-613 ~ ~ ~))
36473691++ test-types-scope-store-duplicate
3648− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-608 `tok-608 `tre-608) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-608 `typ-608 ~ ~ ~))
3692+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-614 `tok-614 `tre-614) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-614 `typ-614 ~ ~ ~))
36493693++ test-types-scope-store-shadow
3650− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-609 `tok-609 `tre-609) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-609 `typ-609 ~ ~ ~))
3694+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-615 `tok-615 `tre-615) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-615 `typ-615 ~ ~ ~))
36513695++ test-types-single-case-pattern
3652− (weld (check ~.types-single-case-pattern src-610 `tok-610 `tre-610) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-610 `typ-610 ~ ~ ~))
3696+ (weld (check ~.types-single-case-pattern src-616 `tok-616 `tre-616) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-616 `typ-616 ~ ~ ~))
36533697++ test-types-string-interpolation
3654− (weld (check ~.types-string-interpolation src-611 `tok-611 `tre-611) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-611 `typ-611 ~ ~ ~))
3698+ (weld (check ~.types-string-interpolation src-617 `tok-617 `tre-617) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-617 `typ-617 ~ ~ ~))
36553699++ test-types-tuple-context
3656− (weld (check ~.types-tuple-context src-612 `tok-612 `tre-612) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-612 `typ-612 ~ ~ ~))
3700+ (weld (check ~.types-tuple-context src-618 `tok-618 `tre-618) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-618 `typ-618 ~ ~ ~))
36573701++ test-types-tuple-context-nested
3658− (weld (check ~.types-tuple-context-nested src-613 `tok-613 `tre-613) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-613 `typ-613 ~ ~ ~))
3702+ (weld (check ~.types-tuple-context-nested src-619 `tok-619 `tre-619) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-619 `typ-619 ~ ~ ~))
36593703++ test-types-union-alias
3660− (weld (check ~.types-union-alias src-614 `tok-614 `tre-614) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-614 `typ-614))
3704+ (weld (check ~.types-union-alias src-620 `tok-620 `tre-620) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-620 `typ-620))
36613705++ test-types-union-branch-context
3662− (weld (check ~.types-union-branch-context src-615 `tok-615 `tre-615) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-615 `typ-615))
3706+ (weld (check ~.types-union-branch-context src-621 `tok-621 `tre-621) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-621 `typ-621))
36633707++ test-types-union-branch-pending
3664− (weld (check ~.types-union-branch-pending src-616 `tok-616 `tre-616) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-616 `typ-616))
3708+ (weld (check ~.types-union-branch-pending src-622 `tok-622 `tre-622) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-622 `typ-622))
36653709++ test-types-union-constructor-shape
3666− (weld (check ~.types-union-constructor-shape src-617 `tok-617 `tre-617) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-617 `typ-617))
3710+ (weld (check ~.types-union-constructor-shape src-623 `tok-623 `tre-623) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-623 `typ-623))
36673711++ test-types-union-context-flow
3668− (weld (check ~.types-union-context-flow src-618 `tok-618 `tre-618) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-618 `typ-618))
3712+ (weld (check ~.types-union-context-flow src-624 `tok-624 `tre-624) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-624 `typ-624))
36693713++ test-types-union-finite
3670− (weld (check ~.types-union-finite src-619 `tok-619 `tre-619) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-619 `typ-619 ~ ~ ~))
3714+ (weld (check ~.types-union-finite src-625 `tok-625 `tre-625) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-625 `typ-625 ~ ~ ~))
36713715++ test-types-union-finite-context
3672− (weld (check ~.types-union-finite-context src-620 `tok-620 `tre-620) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-620 `typ-620 ~ ~ ~))
3716+ (weld (check ~.types-union-finite-context src-626 `tok-626 `tre-626) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-626 `typ-626 ~ ~ ~))
36733717++ test-types-union-finite-generic
3674− (weld (check ~.types-union-finite-generic src-621 `tok-621 `tre-621) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-621 `typ-621 ~ ~ ~))
3718+ (weld (check ~.types-union-finite-generic src-627 `tok-627 `tre-627) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-627 `typ-627 ~ ~ ~))
36753719++ test-types-union-finite-limit
3676− (weld (check ~.types-union-finite-limit src-622 `tok-622 `tre-622) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-622 `typ-622 ~ ~ ~))
3720+ (weld (check ~.types-union-finite-limit src-628 `tok-628 `tre-628) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-628 `typ-628 ~ ~ ~))
36773721++ test-types-union-import
3678− (weld (weld (check ~.types-union-import src-623 `tok-623 `tre-623) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-623 `typ-623 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-623-1]])) (check-module-trees ~.types-union-import `mtre-623 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-623-1]]))
3722+ (weld (weld (check ~.types-union-import src-629 `tok-629 `tre-629) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-629 `typ-629 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-629-1]])) (check-module-trees ~.types-union-import `mtre-629 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-629-1]]))
36793723++ test-types-union-local-pending
3680− (weld (check ~.types-union-local-pending src-624 `tok-624 `tre-624) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-624 `typ-624))
3724+ (weld (check ~.types-union-local-pending src-630 `tok-630 `tre-630) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-630 `typ-630))
36813725++ test-types-union-nonwing-subject
3682− (weld (check ~.types-union-nonwing-subject src-625 `tok-625 `tre-625) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-625 `typ-625 ~ ~ ~))
3726+ (weld (check ~.types-union-nonwing-subject src-631 `tok-631 `tre-631) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-631 `typ-631 ~ ~ ~))
36833727++ test-types-union-overlap
3684− (weld (check ~.types-union-overlap src-626 `tok-626 `tre-626) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-626 `typ-626))
3728+ (weld (check ~.types-union-overlap src-632 `tok-632 `tre-632) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-632 `typ-632))
36853729++ test-types-union-overlap-nested
3686− (weld (check ~.types-union-overlap-nested src-627 `tok-627 `tre-627) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-627 `typ-627))
3730+ (weld (check ~.types-union-overlap-nested src-633 `tok-633 `tre-633) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-633 `typ-633))
36873731++ test-types-union-pattern-result-context
3688− (weld (check ~.types-union-pattern-result-context src-628 `tok-628 `tre-628) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-628 `typ-628 ~ ~ ~))
3732+ (weld (check ~.types-union-pattern-result-context src-634 `tok-634 `tre-634) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-634 `typ-634 ~ ~ ~))
36893733++ test-types-union-pattern-result-controls
3690− (weld (check ~.types-union-pattern-result-controls src-629 `tok-629 `tre-629) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-629 `typ-629 ~ ~ ~))
3734+ (weld (check ~.types-union-pattern-result-controls src-635 `tok-635 `tre-635) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-635 `typ-635 ~ ~ ~))
36913735++ test-types-union-patterns
3692− (weld (check ~.types-union-patterns src-630 `tok-630 `tre-630) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-630 `typ-630 ~ ~ ~))
3736+ (weld (check ~.types-union-patterns src-636 `tok-636 `tre-636) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-636 `typ-636 ~ ~ ~))
36933737++ test-types-union-patterns-generic
3694− (weld (check ~.types-union-patterns-generic src-631 `tok-631 `tre-631) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-631 `typ-631 ~ ~ ~))
3738+ (weld (check ~.types-union-patterns-generic src-637 `tok-637 `tre-637) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-637 `typ-637 ~ ~ ~))
36953739++ test-types-union-patterns-import
3696− (weld (weld (check ~.types-union-patterns-import src-632 `tok-632 `tre-632) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-632 `typ-632 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-632-1]])) (check-module-trees ~.types-union-patterns-import `mtre-632 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-632-1]]))
3740+ (weld (weld (check ~.types-union-patterns-import src-638 `tok-638 `tre-638) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-638 `typ-638 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-638-1]])) (check-module-trees ~.types-union-patterns-import `mtre-638 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-638-1]]))
36973741++ test-types-union-phantom-generic
3698− (weld (check ~.types-union-phantom-generic src-633 `tok-633 `tre-633) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-633 `typ-633))
3742+ (weld (check ~.types-union-phantom-generic src-639 `tok-639 `tre-639) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-639 `typ-639))
36993743++ test-types-union-polymorphic-identity
3700− (weld (weld (check ~.types-union-polymorphic-identity src-634 `tok-634 `tre-634) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-634 `typ-634 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-634-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-634-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-634 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-634-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-634-2]]))
3744+ (weld (weld (check ~.types-union-polymorphic-identity src-640 `tok-640 `tre-640) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-640 `typ-640 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-640-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-640-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-640 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-640-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-640-2]]))
37013745++ test-types-union-print-cross-namespace
3702− (weld (weld (check ~.types-union-print-cross-namespace src-635 `tok-635 `tre-635) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-635 `typ-635 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-635-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-635 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-635-1]]))
3746+ (weld (weld (check ~.types-union-print-cross-namespace src-641 `tok-641 `tre-641) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-641 `typ-641 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-641-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-641 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-641-1]]))
37033747++ test-types-union-print-distinct
3704− (weld (weld (check ~.types-union-print-distinct src-636 `tok-636 `tre-636) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-636 `typ-636 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-636-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-636-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-636-3]])) (check-module-trees ~.types-union-print-distinct `mtre-636 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-636-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-636-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-636-3]]))
3748+ (weld (weld (check ~.types-union-print-distinct src-642 `tok-642 `tre-642) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-642 `typ-642 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-642-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-642-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-642-3]])) (check-module-trees ~.types-union-print-distinct `mtre-642 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-642-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-642-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-642-3]]))
37053749++ test-types-union-print-escape
3706− (weld (check ~.types-union-print-escape src-637 `tok-637 `tre-637) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-637 `typ-637))
3750+ (weld (check ~.types-union-print-escape src-643 `tok-643 `tre-643) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-643 `typ-643))
37073751++ test-types-union-print-local
3708− (weld (check ~.types-union-print-local src-638 `tok-638 `tre-638) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-638 `typ-638))
3752+ (weld (check ~.types-union-print-local src-644 `tok-644 `tre-644) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-644 `typ-644))
37093753++ test-types-union-print-nested
3710− (weld (check ~.types-union-print-nested src-639 `tok-639 `tre-639) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-639 `typ-639))
3754+ (weld (check ~.types-union-print-nested src-645 `tok-645 `tre-645) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-645 `typ-645))
37113755++ test-types-union-print-same-origin
3712− (weld (weld (check ~.types-union-print-same-origin src-640 `tok-640 `tre-640) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-640 `typ-640 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-640-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-640 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-640-1]]))
3756+ (weld (weld (check ~.types-union-print-same-origin src-646 `tok-646 `tre-646) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-646 `typ-646 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-646-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-646 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-646-1]]))
37133757++ test-types-union-print-transitive
3714− (weld (weld (check ~.types-union-print-transitive src-641 `tok-641 `tre-641) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-641 `typ-641 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-641-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-641-2]])) (check-module-trees ~.types-union-print-transitive `mtre-641 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-641-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-641-2]]))
3758+ (weld (weld (check ~.types-union-print-transitive src-647 `tok-647 `tre-647) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-647 `typ-647 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-647-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-647-2]])) (check-module-trees ~.types-union-print-transitive `mtre-647 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-647-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-647-2]]))
3759+++ test-types-union-runtime-equality
3760+ (weld (check ~.types-union-runtime-equality src-648 `tok-648 `tre-648) (check-types ~.types-union-runtime-equality ~[%tests %golden ~.types-union-runtime-equality %source %jibb] src-648 `typ-648))
37153761++ test-types-union-singleton
3716− (weld (check ~.types-union-singleton src-642 `tok-642 `tre-642) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-642 `typ-642))
3762+ (weld (check ~.types-union-singleton src-649 `tok-649 `tre-649) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-649 `typ-649))
3763+++ test-types-union-source-alias
3764+ (weld (check ~.types-union-source-alias src-650 `tok-650 `tre-650) (check-types ~.types-union-source-alias ~[%tests %golden ~.types-union-source-alias %source %jibb] src-650 `typ-650))
37173765++ test-types-union-tag-atoms
3718− (weld (check ~.types-union-tag-atoms src-643 `tok-643 `tre-643) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-643 `typ-643))
3766+ (weld (check ~.types-union-tag-atoms src-651 `tok-651 `tre-651) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-651 `typ-651))
37193767++ test-types-union-tags
3720− (weld (check ~.types-union-tags src-644 `tok-644 `tre-644) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-644 `typ-644))
3768+ (weld (check ~.types-union-tags src-652 `tok-652 `tre-652) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-652 `typ-652))
37213769++ test-types-union-unresolved
3722− (weld (check ~.types-union-unresolved src-645 `tok-645 `tre-645) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-645 `typ-645))
3770+ (weld (check ~.types-union-unresolved src-653 `tok-653 `tre-653) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-653 `typ-653))
37233771++ test-types-union-unresolved-flow
3724− (weld (check ~.types-union-unresolved-flow src-646 `tok-646 `tre-646) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-646 `typ-646))
3772+ (weld (check ~.types-union-unresolved-flow src-654 `tok-654 `tre-654) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-654 `typ-654))
37253773++ test-types-unit-construction
3726− (weld (check ~.types-unit-construction src-647 `tok-647 `tre-647) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-647 `typ-647 ~ ~ ~))
3774+ (weld (check ~.types-unit-construction src-655 `tok-655 `tre-655) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-655 `typ-655 ~ ~ ~))
37273775++ test-types-unit-context
3728− (weld (check ~.types-unit-context src-648 `tok-648 `tre-648) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-648 `typ-648 ~ ~ ~))
3776+ (weld (check ~.types-unit-context src-656 `tok-656 `tre-656) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-656 `typ-656 ~ ~ ~))
37293777++ test-types-unit-patterns
3730− (weld (check ~.types-unit-patterns src-649 `tok-649 `tre-649) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-649 `typ-649))
3778+ (weld (check ~.types-unit-patterns src-657 `tok-657 `tre-657) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-657 `typ-657))
37313779++ test-types-value-cycle-shadow
3732− (weld (check ~.types-value-cycle-shadow src-650 `tok-650 `tre-650) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-650 `typ-650 ~ ~ ~))
3780+ (weld (check ~.types-value-cycle-shadow src-658 `tok-658 `tre-658) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-658 `typ-658 ~ ~ ~))
37333781++ test-types-value-cycle-unsupported
3734− (weld (check ~.types-value-cycle-unsupported src-651 `tok-651 `tre-651) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-651 `typ-651 ~ ~ ~))
3782+ (weld (check ~.types-value-cycle-unsupported src-659 `tok-659 `tre-659) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-659 `typ-659 ~ ~ ~))
37353783++ test-types-value-cycles
3736− (weld (check ~.types-value-cycles src-652 `tok-652 `tre-652) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-652 `typ-652 ~ ~ ~))
3784+ (weld (check ~.types-value-cycles src-660 `tok-660 `tre-660) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-660 `typ-660 ~ ~ ~))
37373785::
37383786:: +check: run golden:jibb on a case and compare both outputs
37393787::
tests/type-cell-branch/about.txtnew file+2
@@ -0,0 +1,2 @@
1+source: Grammar, Branching and Molds — result context constrains each branch while written faces and pending tags are preserved.
2+tests: A closed cell result context, failed retry rollback, structural-substitution uncertainty, and exact source/substitution retry screen limits. The shared test arm runs under eval and on the ship.
tests/type-cell-branch/bad.txtnew file+3
@@ -0,0 +1,3 @@
1+++ probe ?- flag
2+ %.y ["yes" ~]
3+ %.n [~zod ~]
tests/type-cell-branch/good.txtnew file+3
@@ -0,0 +1,3 @@
1+++ probe ?- flag
2+ %.y ["yes" ~]
3+ %.n ["no" ~]
tests/type-deferred-context/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/grammar.md, Tag resolution: “A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it.”
2+
3+Tests bounded deferred source-order retries and source-owned literal branch obligations in import-free libraries. Each negative source must parse before it is rejected. This does not establish island kind, watchability or standard-prelude list semantics.
tests/type-deferred-context/collision-early.txtnew file+27
@@ -0,0 +1,27 @@
1+++ incompatible ^- $-(? other) choose
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5++$ maybe
6+ %none
7+ [%some value=@t]
8++$ other
9+ %none
10+ [%ship value=@p]
11+++ final ^- $-(? maybe) choose
12+++ final-ship ^- $-(? other) choose-ship
13+++ choose |= flag=?
14+ ?- flag
15+ %.y %none
16+ %.n %none
17+++ choose-ship |= flag=?
18+ ?- flag
19+ %.y %none
20+ %.n %none
21+++ send |= f=$-(@t A) f
22+++ first (send |=%got)
23+++ fixed ^- $-(@t message) first
24+++ make |= ignored=A |= x=B x
25+++ built (make choose)
26+++ reveal (built "hello")
27+++ reveal-ship (built ~zod)
tests/type-deferred-context/collision-late.txtnew file+28
@@ -0,0 +1,28 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7++$ other
8+ %none
9+ [%ship value=@p]
10+++ final ^- $-(? maybe) choose
11+++ final-ship ^- $-(? other) choose-ship
12+++ choose |= flag=?
13+ ?- flag
14+ %.y %none
15+ %.n %none
16+++ choose-ship |= flag=?
17+ ?- flag
18+ %.y %none
19+ %.n %none
20+++ send |= f=$-(@t A) f
21+++ first (send |=%got)
22+++ fixed ^- $-(@t message) first
23+++ make |= ignored=A |= x=B x
24+++ built (make choose)
25+++ reveal (built "hello")
26+++ reveal-ship (built ~zod)
27+
28+++ incompatible ^- $-(? other) choose
tests/type-deferred-context/dangling.txtnew file+16
@@ -0,0 +1,16 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? maybe) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.n %none
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
15+
16+++ unrelated |= x=@t %dangling
tests/type-deferred-context/duplicate.txtnew file+14
@@ -0,0 +1,14 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? maybe) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.y %none
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
tests/type-deferred-context/missing.txtnew file+14
@@ -0,0 +1,14 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? maybe) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.n %absent
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
tests/type-deferred-context/plain.txtnew file+11
@@ -0,0 +1,11 @@
1+++ final ^- $-(@t message) second
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ send |= f=$-(@t A) f
6+++ make |= ignored=A |= x=B x
7+++ first (send |=%got)
8+++ second first
9+++ built (make first)
10+++ reveal (built "hello")
11+++ reveal-ship (built ~zod)
tests/type-deferred-context/report.txtnew file+15
@@ -0,0 +1,15 @@
1+partial inference; module not checked
2++$ message: cases proven disjoint; mold not checked
3++$ maybe: cases proven disjoint; mold not checked
4++$ other: cases proven disjoint; mold not checked
5+++ final: $-(? maybe)
6+++ final-ship: $-(? other)
7+++ choose: $-(? maybe)
8+++ choose-ship: $-(? other)
9+++ send: $-($-(@t A) $-(@t A))
10+++ first: $-(@t message)
11+++ fixed: $-(@t message)
12+++ make: $-(A $-(B B))
13+++ built: $-(A A)
14+++ reveal: @t
15+++ reveal-ship: @p
tests/type-deferred-context/rich.txtnew file+27
@@ -0,0 +1,27 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ %stop
7+ [%some value=@t]
8++$ other
9+ %none
10+ [%ship value=@p]
11+++ final ^- $-(? maybe) choose
12+++ final-ship ^- $-(? other) choose-ship
13+++ choose |= flag=?
14+ ?- flag
15+ %.y %none
16+ %.n %stop
17+++ choose-ship |= flag=?
18+ ?- flag
19+ %.y %none
20+ %.n %none
21+++ send |= f=$-(@t A) f
22+++ first (send |=%got)
23+++ fixed ^- $-(@t message) first
24+++ make |= ignored=A |= x=B x
25+++ built (make choose)
26+++ reveal (built "hello")
27+++ reveal-ship (built ~zod)
tests/type-deferred-context/simple.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4+++ final ^- $-(@t message) (pick %.y)
5+++ pick |= flag=?
6+ ?- flag
7+ %.y first
8+ %.n first
9+++ send |= f=$-(@t A) f
10+++ first (send |=%got)
tests/type-deferred-context/wrong.txtnew file+14
@@ -0,0 +1,14 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? @t) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.n %none
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/expected-control.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2++$ model: not checked
3++$ message: cases proven disjoint; mold not checked
4+++ initial: `~` needs context in partial inference
5+++ send: $-($-(@t A) $-(@t A))
6+++ first: call constraint is not supported by partial inference
7+++ fixed: name is not available to partial inference
tests/type-deferred-prepared/expected-tuple-only.txtnew file+4
@@ -0,0 +1,4 @@
1+partial inference; module not checked
2++$ model: not checked
3+++ final: $-((list @t) [(list @t) [@t (unit @t)]])
4+++ initial: $-((list @t) [(list @t) [@t (unit @t)]])
tests/type-deferred-prepared/expected.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2++$ model: not checked
3++$ message: cases proven disjoint; mold not checked
4+++ final: $-((list @t) [(list @t) [@t (unit @t)]])
5+++ initial: $-((list @t) [(list @t) [@t (unit @t)]])
6+++ send: $-($-(@t A) $-(@t A))
7+++ first: $-(@t message)
8+++ fixed: $-(@t message)
tests/type-deferred-prepared/good.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/imported.txtnew file+11
@@ -0,0 +1,11 @@
1+/= other /ui/other
2+
3++$ model [xs=(list @t) draft=@t error=(unit @t)]
4++$ message
5+ [%got value=@t]
6+ [%other value=@p]
7+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
8+++ initial |= xs=(list @t) [xs "" ~]
9+++ send |= f=$-(@t A) f
10+++ first (send |=%got)
11+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
10+++ main initial
tests/type-deferred-prepared/mold-collision.txtnew file+9
@@ -0,0 +1,9 @@
1++$ list [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/no-final-cast.txtnew file+8
@@ -0,0 +1,8 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ initial |= xs=(list @t) [xs "" ~]
6+++ send |= f=$-(@t A) f
7+++ first (send |=%got)
8+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/no-prelude.txtnew file+9
@@ -0,0 +1,9 @@
1++$ maybe
2+ %none
3+ [%some value=@t]
4++$ model [draft=@t error=maybe]
5+++ final ^- $-(@t [@t maybe]) initial
6+++ initial |= draft=@t [draft %none]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%some)
9+++ fixed ^- $-(@t maybe) first
tests/type-deferred-prepared/tuple-only.txtnew file+3
@@ -0,0 +1,3 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
3+++ initial |= xs=(list @t) [xs "" ~]
tests/type-deferred-prepared/unrelated-tag.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
10+
11+++ unresolved |= x=@t %dangling
tests/type-deferred-prepared/wrong-draft.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs ~zod ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/wrong-unit.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" %absent]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-resolver/about.txtnew file+5
@@ -0,0 +1,5 @@
1+source: docs/spec/grammar.md, Tag resolution: “A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it.”
2+
3+Import-free, no-prelude ordinary library resolution: principal generalized result and matching report, with conflicting constructors, holes, duplicate bindings, nested faces and store kind rejected atomically. Resolved imports and the actual prepared prelude are also checked as fail-closed boundaries.
4+
5+Both source orders decline when a later substitution changes a previously checked face-propagation condition. Controls cover compound and direct calls, an unresolved result tag that becomes `*`, and an unresolved positional slot that becomes faced. Positive low-level checks preserve closed positional fits and equal single-argument fits with open variables.
tests/type-deferred-resolver/conflict.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ typed ^- $-(@t message) second
11+
12+++ clash ^- $-(@t alternate) first
tests/type-deferred-resolver/duplicate.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ typed ^- $-(@t message) second
11+
12+++ send |= arg=@p arg
tests/type-deferred-resolver/expected.txtnew file+42
@@ -0,0 +1,42 @@
1+interface retains independent polymorphism
2+text use inferred
3+ship use inferred
4+stored built: $-(A A)
5+partial inference; module not checked
6++$ message: cases proven disjoint; mold not checked
7+++ send: $-($-(@t A) $-(@t A))
8+++ make: $-(A $-(B B))
9+++ first: $-(@t message)
10+++ second: $-(@t message)
11+++ built: $-(A A)
12+++ typed: $-(@t message)
13+++ reveal: @t
14+++ reveal-ship: @p
15+conflict rejected without interface
16+missing rejected without interface
17+hole rejected without interface
18+duplicate rejected without interface
19+face rejected without interface
20+store declined without interface
21+conflict report:
22+partial inference; module not checked
23++$ message: cases proven disjoint; mold not checked
24++$ alternate: cases proven disjoint; mold not checked
25+++ send: $-($-(@t A) $-(@t A))
26+++ first: call constraint is not supported by partial inference
27+++ second: name is not available to partial inference
28+++ typed: name is not available to partial inference
29+++ clash: name is not available to partial inference
30+store report:
31+partial inference; module not checked
32++$ poke: not checked
33++$ message: cases proven disjoint; mold not checked
34+++ send: $-($-(@t A) $-(@t A))
35+++ make: $-(A $-(B B))
36+++ first: call constraint is not supported by partial inference
37+++ second: name is not available to partial inference
38+++ built: name is not available to partial inference
39+++ typed: name is not available to partial inference
40+++ reveal: name is not available to partial inference
41+++ reveal-ship: name is not available to partial inference
42+prelude and import fallback declined
tests/type-deferred-resolver/face.txtnew file+6
@@ -0,0 +1,6 @@
1++$ message
2+ [%got payload=[who=@t n=@ud]]
3+ %idle
4+++ send |= f=$-([wrong=@t n=@ud] A) f
5+++ nested (send |=%got)
6+++ typed ^- $-([wrong=@t n=@ud] message) nested
tests/type-deferred-resolver/good.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4+++ send |= f=$-(@t A) f
5+++ make |= ignored=A |= x=B x
6+++ first (send |=%got)
7+++ second first
8+++ built (make first)
9+++ typed ^- $-(@t message) second
10+++ reveal (built "hello")
11+++ reveal-ship (built ~zod)
tests/type-deferred-resolver/hole.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ typed ^- $-(@t message) second
11+
12+++ hole ^- _ %idle
tests/type-deferred-resolver/missing.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%absent)
9+++ second first
10+++ typed ^- $-(@t message) second
tests/type-deferred-resolver/stability-early.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= pair=[A [foo=A]] pair
4+++ waiting (request |=%got)
5+++ wrapped (accept [waiting waiting])
6+++ reveal ^- $-(@t single) waiting
tests/type-deferred-resolver/stability-late.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= pair=[A [foo=A]] pair
4+++ waiting (request |=%got)
5+++ reveal ^- $-(@t single) waiting
6+++ wrapped (accept [waiting waiting])
tests/type-deferred-resolver/stability-output-early.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ send |= f=$-(@t A) f
3+++ pending (send |=%got)
4+++ finish ^- $-(@t single) pending
5+++ accept |= [foo=@t bar=@t] %idle
6+++ foo-value ^- [foo=@t] "a"
7+++ bar-value ^- [bar=@t] "b"
8+++ value (accept foo-value bar-value)
9+++ reveal ^- * value
tests/type-deferred-resolver/stability-output-late.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ send |= f=$-(@t A) f
3+++ pending (send |=%got)
4+++ finish ^- $-(@t single) pending
5+++ accept |= [foo=@t bar=@t] %idle
6+++ foo-value ^- [foo=@t] "a"
7+++ bar-value ^- [bar=@t] "b"
8+++ prior ^- * (accept foo-value bar-value)
9+++ value (accept foo-value bar-value)
tests/type-deferred-resolver/stability-simple-early.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= x=[foo=A] x
4+++ waiting (request |=%got)
5+++ wrapped (accept waiting)
6+++ reveal ^- $-(@t single) waiting
tests/type-deferred-resolver/stability-simple-late.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= x=[foo=A] x
4+++ waiting (request |=%got)
5+++ reveal ^- $-(@t single) waiting
6+++ wrapped (accept waiting)
tests/type-deferred-resolver/stability-slot-early.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ label |= x=A [foo=x]
4+++ accept |= x=[[foo=A] @t] x
5+++ pending (request |=%got)
6+++ first (pending "hello")
7+++ labeled (label first)
8+++ value (accept labeled "b")
9+++ finish ^- $-(@t single) pending
tests/type-deferred-resolver/stability-slot-late.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ label |= x=A [foo=x]
4+++ accept |= x=[[foo=A] @t] x
5+++ pending (request |=%got)
6+++ first (pending "hello")
7+++ labeled (label first)
8+++ finish ^- $-(@t single) pending
9+++ value (accept labeled "b")
tests/type-deferred-resolver/store.txtnew file+12
@@ -0,0 +1,12 @@
1++$ poke @t
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ send |= f=$-(@t A) f
6+++ make |= ignored=A |= x=B x
7+++ first (send |=%got)
8+++ second first
9+++ built (make first)
10+++ typed ^- $-(@t message) second
11+++ reveal (built "hello")
12+++ reveal-ship (built ~zod)
tests/type-deferred/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/grammar.md, Tag resolution: “A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it.”
2+
3+Source-owned deferred constructor transaction: partial type artifact only; no module kind, runtime or watchability proof. Every source case checks parse success in the same analysis. Captured IDs and replay safety are checked directly.
tests/type-deferred/conflict-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12+++ clash ^- $-(@t alternate) first
tests/type-deferred/duplicate-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12+++ send |= arg=@p arg
tests/type-deferred/expected.txtnew file+38
@@ -0,0 +1,38 @@
1+nested lexical gate and alias agree
2+later source context closes nested constructor
3+nested obligation discharged
4+independent built result stays polymorphic
5+text use inferred
6+ship use inferred independently
7+missing constructor leaves no result
8+conflicting context leaves no result
9+duplicate source binding declined
10+definition hole does not escape
11+local deferred definition declined
12+recursive deferred group declined
13+unused mold hole declined
14+fresh ID exceeds raw and quantified IDs
15+fresh ID scan respects budget
16+original structural binding rejects wrong face
17+dropping binding would accept wrong face
18+unresolved edge remains open after fit
19+closed constructor edge has no free IDs
20+final replay is unchanged
21+open interface stays unpublished
22+raw bound variable hides atom constraint
23+normalized unsupported atom constraint rejected
24+scheme-local quantifier cannot hide captured ID
25+captured outer variable remains monomorphic
26+pending tag binding keeps reachable variable monomorphic
27+recursive obligation component stays monomorphic
28+faced callback source accepted
29+wrong nested callback face rejected
30+constructor resolves to exact callback
31+callback retains its face
32+post-fit face asymmetry is absent
33+record output stays cell-capable
34+prebound incompatible callback is rejected
35+grec constraint scan declines
36+grec fresh-id scan declines
37+default inference declines; explicit capability creates obligation
38+candidate screen boundaries passed
tests/type-deferred/face-bad-src.txtnew file+6
@@ -0,0 +1,6 @@
1++$ message
2+ [%got payload=[who=@t n=@ud]]
3+ %idle
4+++ send |= f=$-([wrong=@t n=@ud] A) f
5+++ nested (send |=%got)
6+++ main ^- $-([wrong=@t n=@ud] message) nested
tests/type-deferred/face-good-src.txtnew file+6
@@ -0,0 +1,6 @@
1++$ message
2+ [%got payload=[who=@t n=@ud]]
3+ %idle
4+++ send |= f=$-([who=@t n=@ud] A) f
5+++ nested (send |=%got)
6+++ main ^- $-([who=@t n=@ud] message) nested
tests/type-deferred/hole-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12+++ hole ^- _ %idle
tests/type-deferred/local-src.txtnew file+8
@@ -0,0 +1,8 @@
1++$ message
2+ [%got value=@t]
3+ %idle
4+++ send |= f=$-(@t A) f
5+++ outer |= input=@t
6+ ++ tmp (send |=%got)
7+ tmp
8+++ main ^- $-(@t $-(@t message)) outer
tests/type-deferred/missing-src.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%absent)
9+++ second first
10+++ main ^- $-(@t message) second
tests/type-deferred/mold-hole-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12++$ unused _
tests/type-deferred/mutual-src.txtnew file+7
@@ -0,0 +1,7 @@
1++$ message
2+ [%got value=@t]
3+ %idle
4+++ send |= f=$-(@t A) f
5+++ first |= input=@t (second (send |=%got))
6+++ second |= callback=$-(@t message) (first "hello")
7+++ main ^- $-(@t message) (send |=%got)
tests/type-deferred/nested-src.txtnew file+7
@@ -0,0 +1,7 @@
1++$ message
2+ [%got value=@t]
3+ %idle
4+++ send |= f=$-(@t A) f
5+++ nested |= x=@t (send |=%got)
6+++ alias nested
7+++ main ^- $-(@t $-(@t message)) alias
tests/type-deferred/principal-src.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4+++ send |= f=$-(@t A) f
5+++ make |= ignored=A |= x=B x
6+++ first (send |=%got)
7+++ second first
8+++ built (make first)
9+++ main ^- $-(@t message) second
10+++ reveal (built "hello")
11+++ reveal-ship (built ~zod)
tests/type-direct-gate/expected.txt+11−11
@@ -2,14 +2,14 @@ partial inference; module not checked
22+$ message: cases proven disjoint; mold not checked
33++ init: $-(@t @ud)
44++ update: $-([msg=message state=@ud] [@ud (list (cmd message))])
5−++ view: $-(@ud [%node item=message])
5+++ view: $-(@ud (element message))
66++ 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)))]]]
7+++ direct: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
88++ 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)))]]]
9+++ different-data: [init=$-(@p @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
1010++ wrong-update: $-([msg=message state=@p] [@p (list (cmd message))])
1111++ mismatched-model: call constraint is not supported by partial inference
12−++ wrong-view: $-(@p [%node item=message])
12+++ wrong-view: $-(@p (element message))
1313++ mismatched-view: call constraint is not supported by partial inference
1414++ wrong-subs: $-(@p (list (sub message)))
1515++ mismatched-subs: call constraint is not supported by partial inference
@@ -17,17 +17,17 @@ partial inference; module not checked
1717++ wrong-msg-update: $-([msg=other state=@ud] [@ud (list (cmd other))])
1818++ mismatched-message: call constraint is not supported by partial inference
1919++ 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)))]]])
20+++ program-value: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
2121++ 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)))]]]
22+++ direct-unfaced: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
2323+$ record: not checked
2424++ init-record: $-(@t [count=@ud label=@t])
2525++ update-record: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
2626++ 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])
27+++ view-record: $-([count=@ud label=@t] (element message))
2828++ 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)))]]]
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] (element 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] (element message)) subs=$-([count=@ud label=@t] (list (sub message)))]]]
3131++ bad-update-record: $-([msg=message state=[other=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
3232++ program-wrong-nested-face: call constraint is not supported by partial inference
3333++ update-pending: tag needs context in partial inference
@@ -57,8 +57,8 @@ partial inference; module not checked
5757 ^
5858++ unknown-call: $-($-([A B] C) $-([A B] C))
5959++ 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)))]]])
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] (element message)) subs=$-([count=@ud label=@t] (list (sub message)))]]]
61+++ program-alias: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
6262++ through-head-alias: call constraint is not supported by partial inference
6363++ update-alias: $-([msg=message state=@ud] [@ud (list (cmd message))])
6464++ through-arg-alias: call constraint is not supported by partial inference
tests/type-direct-gate/source.txt+3−3
@@ -4,7 +4,7 @@
44++ init |= input=@t ^- @ud 1
55++ update |= [msg=message state=@ud]
66 ^- [@ud (list (cmd message))] [state ~]
7−++ view |= state=@ud ^- (element message) [%node %start]
7+++ view |= state=@ud ^- (element message) (text "view")
88++ subs |= state=@ud ^- (list (sub message)) ~
99++ direct (program init update view subs)
1010++ wrong-init |= input=@p ^- @ud 1
@@ -12,7 +12,7 @@
1212++ wrong-update |= [msg=message state=@p]
1313 ^- [@p (list (cmd message))] [state ~]
1414++ mismatched-model (program init wrong-update view subs)
15−++ wrong-view |= state=@p ^- (element message) [%node %start]
15+++ wrong-view |= state=@p ^- (element message) (text "view")
1616++ mismatched-view (program init update wrong-view subs)
1717++ wrong-subs |= state=@p ^- (list (sub message)) ~
1818++ mismatched-subs (program init update view wrong-subs)
@@ -35,7 +35,7 @@
3535 ^- [record (list (cmd message))] [state ~]
3636++ update-record-unfaced |= args=[message record]
3737 ^- [record (list (cmd message))] [[count=0 label=""] ~]
38−++ view-record |= state=record ^- (element message) [%node %start]
38+++ view-record |= state=record ^- (element message) (text "view")
3939++ subs-record |= state=record ^- (list (sub message)) ~
4040++ program-record (program init-record update-record view-record subs-record)
4141++ program-record-unfaced (program init-record update-record-unfaced view-record subs-record)
tests/type-empty/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Molds: the empty mold `!!` has no values. Patterns: every case needs an arm or a catch-all; an already-covered arm is an error.
2+tests: Checked interfaces retain empty molds and nested empty cell positions; only inhabited union cases need coverage. Standard list and unit null values remain inhabited, while their empty payload arms are unreachable. Fixed opaque reachability, late capital constraints, proof limits and directional fit are checked conservatively. The report is partial, and runtime behavior is not tested.
3+expect: shared eval and ship guard
tests/type-empty/dead.txtnew file+7
@@ -0,0 +1,7 @@
1++$ split
2+ [%dead [!! @t]]
3+ [%live @t]
4+++ select |= x=split
5+ ?- x
6+ [%dead impossible] "dead"
7+ [%live text] text
tests/type-empty/expected.txtnew file+59
@@ -0,0 +1,59 @@
1+empty mold exported: ok
2+live union selector preserves type: ok
3+overlap parses and is rejected: ok
4+dead empty case parses and is rejected: ok
5+missing live case parses and is rejected: ok
6+standard list and unit identities checked: ok
7+single null list gate keeps its exact sample and result: ok
8+contextual single null list gate checks: ok
9+contextual single null list arm retains faces: ok
10+one null arm on inhabited list declines: ok
11+one null arm on generic list declines: ok
12+empty list nonempty arm parses and is rejected: ok
13+empty unit present arm parses and is rejected: ok
14+nested empty proof: ok
15+list of empty is inhabited: ok
16+gate returning empty is not empty: ok
17+unbound type not proved empty: ok
18+unbound inference type reachability unknown: ok
19+written capital can have a value: ok
20+bound empty capital is unreachable: ok
21+opaque recursion reachability unknown: ok
22+opaque union case declines coverage proof: ok
23+one proof node exhausted: ok
24+two proof nodes succeed: ok
25+empty fits a concrete type: ok
26+empty cell fits a concrete type: ok
27+inhabited atom does not fit empty: ok
28+empty gate-bearing cell is gate-free: ok
29+list of empty is gate-free and inhabited: ok
30+partial inference; module not checked
31++$ never: not checked
32++$ box: not checked
33++$ split: cases proven disjoint; mold not checked
34+++ identity: $-(!! !!)
35+++ generic-empty: $-([x=!! y=@t] [x=!! y=@t])
36+++ select: $-(split @t)
37+++ crash: !!
38+partial inference; module not checked
39++$ broken: overlapping cases; mold not checked
40+/tests/empty.jibb:2:3: first union case
41+ [%tag [%.y @t]]
42+ ^
43+/tests/empty.jibb:3:3: overlapping case
44+ [%tag [%$ @p]]
45+ ^
46+partial inference; module not checked
47++$ split: cases proven disjoint; mold not checked
48+++ select: union pattern is not supported by partial inference
49+partial inference; module not checked
50++$ split: cases proven disjoint; mold not checked
51+++ select: union pattern is not supported by partial inference
52+partial inference; module not checked
53+++ probe: list nonempty pattern is unreachable
54+partial inference; module not checked
55+++ probe: unit present pattern is unreachable
56+partial inference; module not checked
57+++ probe-late: explicit capital constraints are not supported by partial inference
58+++ probe-outer: explicit capital constraints are not supported by partial inference
59+++ probe-rec: explicit capital constraints are not supported by partial inference
tests/type-empty/face-source.txtnew file+2
@@ -0,0 +1,2 @@
1+++ branch ?- xs
2+ ~ [x="yes" y="no"]
tests/type-empty/good.txtnew file+11
@@ -0,0 +1,11 @@
1++$ never !!
2++$ box |$ [A] [x=A y=@t]
3++$ split
4+ [%dead [!! @t]]
5+ [%live @t]
6+++ identity |= x=never x
7+++ generic-empty |= x=(box !!) x
8+++ select |= x=split
9+ ?- x
10+ [%live text] text
11+++ crash ^- !! !!
tests/type-empty/late-cap.txtnew file+16
@@ -0,0 +1,16 @@
1+++ probe-late |= xs=(list A)
2+ ?- xs
3+ ~ !!
4+ [item rest] ^- !! item
5+++ probe-outer |= xs=(list A)
6+ ++ inspect |= ys=(list A)
7+ ?- ys
8+ ~ !!
9+ [item rest] ^- !! item
10+ (inspect xs)
11+++ probe-rec |= xs=(list A)
12+ ?- xs
13+ ~ !!
14+ [item rest]
15+ ~& ^- !! item
16+ (probe-rec rest)
tests/type-empty/list-dead.txtnew file+4
@@ -0,0 +1,4 @@
1+++ probe |= xs=(list !!)
2+ ?- xs
3+ ~ "nil"
4+ [x rest] "cons"
tests/type-empty/list-live.txtnew file+3
@@ -0,0 +1,3 @@
1+++ no |= xs=(list @t)
2+ ?- xs
3+ ~ "nil"
tests/type-empty/list-open.txtnew file+3
@@ -0,0 +1,3 @@
1+++ no |= xs=(list A)
2+ ?- xs
3+ ~ "nil"
tests/type-empty/missing.txtnew file+6
@@ -0,0 +1,6 @@
1++$ split
2+ [%dead [!! @t]]
3+ [%live @t]
4+++ select |= x=split
5+ ?- x
6+ [%dead impossible] "dead"
tests/type-empty/overlap.txtnew file+3
@@ -0,0 +1,3 @@
1++$ broken
2+ [%tag [%.y @t]]
3+ [%tag [%$ @p]]
tests/type-empty/standard-good.txtnew file+11
@@ -0,0 +1,11 @@
1+++ list-id |= xs=(list !!) xs
2+++ unit-id |= maybe=(unit !!) maybe
3+++ list-only |= xs=(list !!)
4+ ?- xs
5+ ~ "nil"
6+++ list-only-context |= xs=(list !!)
7+ ^- @t ?- xs
8+ ~ "nil"
9+++ unit-only |= maybe=(unit !!)
10+ ?- maybe
11+ ~ "nil"
tests/type-empty/unit-dead.txtnew file+4
@@ -0,0 +1,4 @@
1+++ probe |= maybe=(unit !!)
2+ ?- maybe
3+ ~ "nil"
4+ [~ x] "some"
tests/type-full-overlap/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/grammar.md, Molds: “Cases must differ as nouns”.
2+tests: Full-module overlap evidence retains the defining source and both case spans through ordinary Jibb imports, and legacy errors render the excerpts. Distinct cases check; duplicate names, stale caches, cycles, private imports and other unsupported inputs retain their own earlier errors. Specialized API and prelude paths remain outside this diagnostic slice.
3+expect: shared eval and ship guards
tests/type-full-overlap/child.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ child-bad
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/distinct.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ good
3+ (tagged @t)
4+ [%other @p]
5+++ id |= x=good x
tests/type-full-overlap/duplicate-generic.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad |$ [B B]
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ tagged |$ [A] [%other A]
3++$ bad
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-full-overlap/expected-basic.txtnew file+16
@@ -0,0 +1,16 @@
1+256 generic parameters accepted by scan: ok
2+257 generic parameters exhaust scan: ok
3+duplicate generic parameters fail scan: ok
4+same head has source-bound overlap: ok
5+zero spelling has source-bound overlap: ok
6+generic wrapper has source-bound overlap: ok
7+duplicate generic parameters remain unstructured: ok
8+unsupported remains unstructured: ok
9+later overlap exists in precedence source: ok
10+earlier unsupported mold takes precedence: ok
11+duplicate source parsed but rejects without overlap: ok
12+invalid source rejects without overlap: ok
13+distinct alias source parses and checks: ok
14+parent itself has different positive overlap: ok
15+legacy full-module error contains both excerpts: ok
16+import overlap retains exact child source: ok
tests/type-full-overlap/expected-graph.txtnew file+8
@@ -0,0 +1,8 @@
1+detached cache rebuild preserves child evidence: ok
2+mismatched graph cache declines without evidence: ok
3+verified cache source binding: ok
4+private import declines before source proof: ok
5+active cycle declines before source proof: ok
6+duplicate child sources decline without evidence: ok
7+missing child source declines without evidence: ok
8+transitive import retains leaf source: ok
tests/type-full-overlap/generic.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad |$ [B]
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/invalid.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t
4+ [%wrapped @p]
tests/type-full-overlap/parent.txtnew file+5
@@ -0,0 +1,5 @@
1+/= lib /ui/child
2++$ tagged |$ [A] [%wrapped A]
3++$ parent-bad
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-full-overlap/precedence.txtnew file+5
@@ -0,0 +1,5 @@
1++$ unresolved (missing @t)
2++$ tagged |$ [A] [%wrapped A]
3++$ bad
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-full-overlap/same.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/unsupported.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad |$ [A]
3+ (tagged A)
4+ [%wrapped @t]
tests/type-full-overlap/zero.txtnew file+4
@@ -0,0 +1,4 @@
1++$ zero |$ [A] [%.y A]
2++$ bad
3+ (zero @t)
4+ [%$ @p]
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) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
10+++ cross-owner |= x=(node-tree.again @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
11+++ wrong-owner |= x=(node-tree.second @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
12+++ wrong-arg |= x=(alias.via @p) ^- (node-tree.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] (node-tree.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 ^- (node-tree.first @t) [%text value="hi"]
6+++ ship-leaf ^- (node-tree.first @p) [%text value="hi"]
7+++ node ^- (node-tree.first @t) [%node event=text-event children=~]
8+++ ship-node ^- (node-tree.first @p) [%node event=ship-event children=~]
9+++ nested ^- (node-tree.first @t) [%node event=text-event children=~[[%text value="x"]]]
10+++ wrong-event ^- (node-tree.first @p) [%node event=text-event children=~]
11+++ wrong-leaf ^- (node-tree.first @t) [%text value=~zod]
12+++ wrong-label ^- (node-tree.first @t) [%text other="hi"]
13+++ bad-tag ^- (node-tree.first @t) [%missing value="hi"]
14+++ foreign |= x=(node-tree.second @t) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
15+++ generic |= event=$-(@t A) ^- (node-tree.first A) [%node event=event children=~]
16+++ pending |= x=(node-tree.first @t) [%missing x]
17+++ extra ^- (node-tree.first @t) [%text value="hi" extra="bad"]
18+++ misplaced ^- (node-tree.first @t) [%text value=~zod]
19+++ bad-child ^- (node-tree.first @t) [%node event=text-event children=~["bad"]]
20+++ bad-children ^- (node-tree.first @t) [%node event=text-event children="bad"]
21+++ label-swap ^- (node-tree.first @t) [%node children=~ event=text-event]
22+++ wrong-nominal |= child=(node-tree.second @p) ^- (node-tree.first @t) [%node event=text-event children=~[child]]
23+++ wrong-argument |= child=(node-tree.first @p) ^- (node-tree.first @t) [%node event=text-event children=~[child]]
24+++ keep-generic |= f=$-(@t A) ^- (node-tree.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: (node-tree.first @t)
31+++ ship-leaf: (node-tree.first @p)
32+++ node: (node-tree.first @t)
33+++ ship-node: (node-tree.first @p)
34+++ nested: (node-tree.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) (node-tree.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) (node-tree.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) (node-tree.first @t))
56+++ cross-owner: $-((node-tree.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: (node-tree.first @t)
61+++ node: (node-tree.first @p)
62+++ nested: (node-tree.first @t)
63+++ generic: $-(A (node-tree.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 ^- (node-tree.first @t) [%text value="x"]
4+++ node ^- (node-tree.first @p) [%node children=~]
5+++ nested ^- (node-tree.first @t) [%node children=~[[%text value="x"]]]
6+++ generic |= x=A ^- (node-tree.first A) [%node children=~]
7+++ wrong-owner |= x=(node-tree.second @t) ^- (node-tree.first @t) [%node children=~[x]]
8+++ wrong-field ^- (node-tree.first @t) [%node children="x"]
tests/type-generic-construction/owner-negative.txtnew file+10
@@ -0,0 +1,10 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ text-event |= x=@t x
8+++ made-leaf ^- (node-tree @t) [%text value="x"]
9+++ made-node ^- (node-tree @t) [%node event=text-event children=~[[%text value="x"]]]
10+++ invalid ^- (node-tree @t) [%text value=~zod]
tests/type-generic-construction/owner-positive.txtnew file+9
@@ -0,0 +1,9 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ text-event |= x=@t x
8+++ made-leaf ^- (node-tree @t) [%text value="x"]
9+++ made-node ^- (node-tree @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++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node children=(list (node-tree M))]
4+++ generic-id |= x=(node-tree A) x
tests/type-generic-construction/tree.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-pattern/about.txtnew file+10
@@ -0,0 +1,10 @@
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, nonbinding catch-alls, binder scopes,
5+payload arguments, recursive children, aliases, coverage failures, shared
6+fuel, pending state and the 128-arm screening boundary. The source client
7+reports are explicitly partial. A separate owner check requires all ordinary
8+definitions to succeed before interface export. Whole-case binders, nested
9+recursive patterns and unresolved recursive origins remain unsupported. No
10+runtime lowering, watchability, island acceptance or backend claim is made.
tests/type-generic-pattern/client.txtnew file+166
@@ -0,0 +1,166 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+/= via /ui/tree-alias
4+++ describe |= x=(node-tree.first @t)
5+ ?- x
6+ [%text value] value
7+ [%node event children] (event "click")
8+++ reverse |= x=(node-tree.first @p)
9+ ?- x
10+ [%node event children] (event "click")
11+ [%text value] ~zod
12+++ generic-children |= x=(node-tree.first A)
13+ ^- (list (node-tree.first A)) ?- x
14+ [%text value] ~
15+ [%node event kids] kids
16+++ alias-children |= x=(alias.via @p)
17+ ^- (list (node-tree.first @p)) ?- x
18+ [%text value] ~
19+ [%node event kids] kids
20+++ rebuild |= x=(node-tree.first @t)
21+ ^- (node-tree.first @t) ?- x
22+ [%text value] [%text value=value]
23+ [%node event children] [%node event=event children=children]
24+++ wrong-return |= x=(node-tree.first @t)
25+ ?- x
26+ [%text value] value
27+ [%node event kids] ~zod
28+++ duplicate |= x=(node-tree.first @t)
29+ ?- x
30+ [%text a] a
31+ [%text b] b
32+++ missing |= x=(node-tree.first @t)
33+ ?- x
34+ [%text a] a
35+++ shadow |= x=(node-tree.first @t)
36+ ?- x
37+ [%text x] x
38+ [%node event kids] "node"
39+++ bad-tag |= x=(node-tree.first @t)
40+ ?- x
41+ [%text value] value
42+ [%other event kids] "node"
43+++ whole-tail |= x=(node-tree.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=(node-tree.first @t)
52+ ?- x
53+ [%text value] [%unrelated value]
54+ [%node event kids] [%unrelated "node"]
55+++ dead |= x=(node-tree.first @t)
56+ ?- x
57+ [%text a] a
58+ [%node event kids] (event "ok")
59+ [%text b] b
60+++ wild |= x=(node-tree.first @t)
61+ ?- x
62+ [%text *] "text"
63+ [%node * *] "node"
64+++ whole-wild |= x=(node-tree.first @t)
65+ ?- x
66+ [%text value] value
67+ * "other"
68+++ foreign-children |= x=(node-tree.first @t)
69+ ^- (list (node-tree.second @t)) ?- x
70+ [%text value] ~
71+ [%node event kids] kids
72+++ wrong-argument |= x=(node-tree.first @t)
73+ ^- (list (node-tree.first @p)) ?- x
74+ [%text value] ~
75+ [%node event kids] kids
76+++ nested-child |= x=(node-tree.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=(node-tree.first @t)
85+ ?- x
86+ [%text value] value
87+ [%node event event] "node"
88+++ target-shadow |= x=(node-tree.first @t)
89+ ?- x
90+ [%text value] value
91+ [%node event x] "node"
92+++ grouped |= x=(node-tree.first @t)
93+ ?- (x)
94+ [%text value] value
95+ [%node event kids] (event "click")
96+++ called |= x=(node-tree.first @t)
97+ ?- (generic-id.first x)
98+ [%text value] value
99+ [%node event kids] (event "click")
100+++ missing-context |= x=(node-tree.first @t)
101+ ^- @t ?- x
102+ [%text item] item
103+++ missing-node |= x=(node-tree.first @t)
104+ ?- x
105+ [%node action kids] (action "click")
106+++ single-wild |= x=(node-tree.first @t)
107+ ?- x
108+ * "all"
109+++ single-bind |= x=(node-tree.first @t)
110+ ?- x
111+ all all
112+++ polymorphic-source ^- (node-tree.first A) [%text value="source"]
113+++ polymorphic-match ?- polymorphic-source
114+ [%text words] words
115+++ all |= x=(node-tree.first @t)
116+ ?- x
117+ * "all"
118+++ catch-tail |= x=(node-tree.first @t)
119+ ?- x
120+ [%text value] value
121+ * "node"
122+++ catch-first-dead |= x=(node-tree.first @t)
123+ ?- x
124+ * "all"
125+ [%text value] value
126+++ late-dead |= x=(node-tree.first @t)
127+ ?- x
128+ [%text value] value
129+ [%node event kids] (event "click")
130+ * "dead"
131+++ duplicate-third |= x=(node-tree.first @t)
132+ ?- x
133+ [%text value] value
134+ [%node event kids] (event "click")
135+ [%text other] other
136+++ nominal-result |= x=(node-tree.first A)
137+ ?- x
138+ [%text value] x
139+ * x
140+++ nominal-context |= x=(node-tree.first A)
141+ ^- (node-tree.first A) ?- x
142+ [%text value] x
143+ * x
144+++ forbidden-bind |= x=(node-tree.first @t)
145+ ?- x
146+ [%text value] value
147+ rest rest
148+++ missing-again |= x=(node-tree.first @t)
149+ ?- x
150+ [%text value] value
151+++ catch-pending |= x=(node-tree.first @t)
152+ ?- x
153+ [%text value] [%unrelated value]
154+ * [%unrelated "node"]
155+++ called-all |= x=(node-tree.first @t)
156+ ?- (generic-id.first x)
157+ * "all"
158+++ called-context |= x=(node-tree.first @t)
159+ ^- @t ?- (generic-id.first x)
160+ * "all"
161+++ called-nominal |= x=(node-tree.first A)
162+ ^- (node-tree.first A) ?- (generic-id.first x)
163+ * x
164+++ called-missing |= x=(node-tree.first @t)
165+ ?- (generic-id.first x)
166+ [%text value] value
tests/type-generic-pattern/expected.txtnew file+91
@@ -0,0 +1,91 @@
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+catch-all eligible: ok
16+whole binder stays unsupported: ok
17+whole structural tail stays unsupported: ok
18+128 arms eligible: ok
19+129 arms declined: ok
20+zero arm budget declined: ok
21+128-arm view consumes one step: ok
22+129-arm view rolls back: ok
23+hidden view stays nominally unknown: ok
24+catch-all keeps fuel and pending state: ok
25+partial inference; module not checked
26+++ describe: $-((node-tree.first @t) @t)
27+++ reverse: $-((node-tree.first @p) @p)
28+++ generic-children: $-((node-tree.first A) (list (node-tree.first A)))
29+++ alias-children: $-((alias.via @p) (list (node-tree.first @p)))
30+++ rebuild: $-((node-tree.first @t) (node-tree.first @t))
31+++ wrong-return: union branch result matching needs unsupported inference
32+++ duplicate: branch arm is covered by earlier arms
33+/tests/tree/client.jibb:31:5: covered arm
34+ [%text b] b
35+ ^
36+++ missing: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
37+++ shadow: pattern binder shadows a name
38+++ bad-tag: branch is not supported by partial inference
39+++ whole-tail: branch is not supported by partial inference
40+++ unknown: branch is not supported by partial inference
41+++ pending: union branch result matching needs unsupported inference
42+++ dead: branch arm is covered by earlier arms
43+/tests/tree/client.jibb:59:5: covered arm
44+ [%text b] b
45+ ^
46+++ wild: $-((node-tree.first @t) @t)
47+++ whole-wild: $-((node-tree.first @t) @t)
48+++ foreign-children: union branch result constraint is not supported by partial inference
49+++ wrong-argument: union branch result constraint is not supported by partial inference
50+++ nested-child: $-((node-tree.first @t) @t)
51+++ duplicate-binder: pattern binder shadows a name
52+++ target-shadow: pattern binder shadows a name
53+++ grouped: $-((node-tree.first @t) @t)
54+++ called: $-((node-tree.first @t) @t)
55+++ missing-context: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
56+++ missing-node: missing union case [%text value=@t]
57+++ single-wild: $-((node-tree.first @t) @t)
58+++ single-bind: branch is not supported by partial inference
59+++ polymorphic-source: (node-tree.first A)
60+++ polymorphic-match: missing union case [%node [event=$-(@t A) children=(list (node-tree.first A))]]
61+++ all: $-((node-tree.first @t) @t)
62+++ catch-tail: $-((node-tree.first @t) @t)
63+++ catch-first-dead: branch arm is covered by earlier arms
64+/tests/tree/client.jibb:125:5: covered arm
65+ [%text value] value
66+ ^
67+++ late-dead: branch arm is covered by earlier arms
68+/tests/tree/client.jibb:130:5: covered arm
69+ * "dead"
70+ ^
71+++ duplicate-third: branch arm is covered by earlier arms
72+/tests/tree/client.jibb:135:5: covered arm
73+ [%text other] other
74+ ^
75+++ nominal-result: $-((node-tree.first A) (node-tree.first A))
76+++ nominal-context: $-((node-tree.first A) (node-tree.first A))
77+++ forbidden-bind: branch is not supported by partial inference
78+++ missing-again: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
79+++ catch-pending: union branch result matching needs unsupported inference
80+++ called-all: branch pattern is not supported by partial inference
81+++ called-context: $-((node-tree.first @t) @t)
82+++ called-nominal: $-((node-tree.first A) (node-tree.first A))
83+++ called-missing: single-case pattern needs unsupported inference
84+partial inference; module not checked
85+++ words: $-((node-tree.first @t) @t)
86+++ children: $-((node-tree.first A) (list (node-tree.first A)))
87+++ duplicate: branch arm is covered by earlier arms
88+/tests/tree/no-event.jibb:13:5: covered arm
89+ [%text b] b
90+ ^
91+++ 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=(node-tree.first @t)
3+ ?- x
4+ [%text value] value
5+ [%node kids] "node"
6+++ children |= x=(node-tree.first A)
7+ ^- (list (node-tree.first A)) ?- x
8+ [%text value] ~
9+ [%node kids] kids
10+++ duplicate |= x=(node-tree.first @t)
11+ ?- x
12+ [%text a] a
13+ [%text b] b
14+++ nested-pattern |= x=(node-tree.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++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ describe |= x=(node-tree @t)
8+ ?- x
9+ [%text value] value
10+ [%node event kids] (event "click")
11+++ children |= x=(node-tree A)
12+ ^- (list (node-tree A)) ?- x
13+ [%text value] ~
14+ [%node event kids] kids
15+++ rebuild |= x=(node-tree @t)
16+ ^- (node-tree @t) ?- x
17+ [%text value] [%text value=value]
18+ [%node event kids] [%node event=event children=kids]
19+++ wrong |= x=(node-tree @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++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ describe |= x=(node-tree @t)
8+ ?- x
9+ [%text value] value
10+ [%node event kids] (event "click")
11+++ children |= x=(node-tree A)
12+ ^- (list (node-tree A)) ?- x
13+ [%text value] ~
14+ [%node event kids] kids
15+++ rebuild |= x=(node-tree @t)
16+ ^- (node-tree @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+18
@@ -0,0 +1,18 @@
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")
11+++ fallback ?- x
12+ [%text value] value
13+ * "node"
14+++ whole-bind ?- x
15+ other other
16+++ whole-tail ?- x
17+ [%node payload] "node"
18+ * "other"
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 the UI `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] (node-tree.source A)
3+++ identity |= x=(alias A) x
tests/type-generic-recursion/bad-constructor.txtnew file+8
@@ -0,0 +1,8 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+
8+++ construct ^- (node-tree @t) [%text value=~zod]
tests/type-generic-recursion/bad-match.txtnew file+10
@@ -0,0 +1,10 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ match |= x=(node-tree @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++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+
8++$ unused _
tests/type-generic-recursion/bad-parameter.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree @t))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree 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=(node-tree.first @t) x
6+++ from-again |= x=(node-tree.again @p) x
7+++ same-origin |= x=(node-tree.first @t) ^- (node-tree.again @t) x
8+++ from-alias |= x=(alias.via @t) x
9+++ through-alias |= x=(node-tree.first @t) ^- (alias.via @t) x
10+++ different-origin |= x=(node-tree.first @t) ^- (node-tree.second @t) x
11+++ independent |= [a=(node-tree.first @t) b=(node-tree.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: $-((node-tree.first @t) (node-tree.first @t))
30+++ from-again: $-((node-tree.again @p) (node-tree.again @p))
31+++ same-origin: $-((node-tree.first @t) (node-tree.again @t))
32+++ from-alias: $-((alias.via @t) (alias.via @t))
33+++ through-alias: $-((node-tree.first @t) (alias.via @t))
34+++ different-origin: cast constraint is not supported by partial inference
35+++ independent: $-([a=(node-tree.first @t) b=(node-tree.first @p)] [(node-tree.first @t) (node-tree.first @p)])
tests/type-generic-recursion/list-shadow.txtnew file+4
@@ -0,0 +1,4 @@
1++$ list |$ [M] [%fake value=M]
2++$ node-tree |$ [M]
3+ [%text value=@t]
4+ [%node children=(list (node-tree M))]
tests/type-generic-recursion/local-distinct.txtnew file+11
@@ -0,0 +1,11 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ shadow |= x=@t
8+ +$ node-tree |$ [M]
9+ [%different value=@t]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
11+ x
tests/type-generic-recursion/local-only.txtnew file+11
@@ -0,0 +1,11 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree 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++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ shadow |= x=@t
8+ +$ node-tree |$ [M]
9+ [%text value=@t]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
11+ x
tests/type-generic-recursion/tree-changed.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%branch event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-recursion/tree.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-list-alias/expected.txt+4−4
@@ -1,6 +1,6 @@
11canonical
22partial inference; module not checked
3−++ text: $-((list @t) (list @t))
3+++ text-value: $-((list @t) (list @t))
44++ ship: $-((list @p) (list @p))
55++ wrong: list item does not fit its expected type
66/ui/test.jibb:3:13: expected item has type @t
@@ -12,13 +12,13 @@ partial inference; module not checked
1212++ shadow: local molds shadow a name
1313altered
1414partial inference; module not checked
15−++ text: sample mold is not supported by partial inference
15+++ text-value: sample mold is not supported by partial inference
1616++ ship: sample mold is not supported by partial inference
1717++ wrong: cast mold is not supported by partial inference
1818++ shadow: sample mold is not supported by partial inference
1919omitted
2020partial inference; module not checked
21−++ text: sample mold is not supported by partial inference
21+++ text-value: sample mold is not supported by partial inference
2222++ ship: sample mold is not supported by partial inference
2323++ wrong: cast mold is not supported by partial inference
2424++ shadow: sample mold is not supported by partial inference
@@ -30,7 +30,7 @@ partial inference; module not checked
3030prelude source does not parse; module import inference unsupported
3131cyclic
3232partial inference; module not checked
33−++ text: sample mold is not supported by partial inference
33+++ text-value: sample mold is not supported by partial inference
3434++ ship: sample mold is not supported by partial inference
3535++ wrong: cast mold is not supported by partial inference
3636++ shadow: local molds shadow a name
tests/type-program-main/about.txtnew file+1
@@ -0,0 +1 @@
1+tests: A direct four-wing program main uses the ordinary source-backed program fit. Its init data and model are closed and gate-free within the shared 256-node budget, and subs syntactically returns null through transparent forms. The fixture checks exported and downstream imported types, source evidence, structured and legacy adapters, and fail-closed controls. It does not execute a program or establish runtime watchability.
tests/type-program-main/alias-main.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program-alias init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ program-alias program
tests/type-program-main/arbitrary-main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main init
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-main/island
2+++ imported init.main.island-prog
tests/type-program-main/gate-data.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=$-(@t @t) ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/gate-model.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud callback=$-(@t @t)]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0 callback=echo]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ echo |= input=@t input
tests/type-program-main/initializer-consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-main/initializer
2+++ imported init.main.island-prog
tests/type-program-main/initializer-earlier.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts ~zod ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-error.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=@t]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-generic.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-message.txtnew file+13
@@ -0,0 +1,13 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ other
6+ %start
7+ %stop
8+++ main (program init update view subs)
9+++ init |= ts=(list @t) [ts "" ~]
10+++ update |= [msg=other state=model]
11+ ^- [model (list (cmd other))] [state ~]
12+++ view |= state=model ^- (element message) (text "view")
13+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-missing.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ update |= [msg=message state=model]
7+ ^- [model (list (cmd message))] [state ~]
8+++ view |= state=model ^- (element message) (text "view")
9+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-model.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ other [xs=(list @t) draft=@t error=(unit @t) extra=@ud]
3++$ message
4+ %start
5+ %stop
6+++ main (program init update view subs)
7+++ init |= ts=(list @t) [ts "" ~]
8+++ update |= [msg=message state=other]
9+ ^- [other (list (cmd message))] [state ~]
10+++ view |= state=model ^- (element message) (text "view")
11+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-no-main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ direct (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-subs.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state ~
tests/type-program-main/initializer-tag.txtnew file+13
@@ -0,0 +1,13 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ orphan
12+ ~& %unrelated
13+ 0
tests/type-program-main/initializer-unfaced.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= input=[message model]
8+ ^- [model (list (cmd message))] [[~ "" ~] ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer.txtnew file+12
@@ -0,0 +1,12 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ (~)
tests/type-program-main/mismatched-model.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=@p]
8+ ^- [@p (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/nonempty-subs.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ ~[[%watch (pure %start)]]
tests/type-program-main/open-message.txtnew file+7
@@ -0,0 +1,7 @@
1++$ model [count=@ud]
2+++ main (program init update view subs)
3+++ init |= input=@t ^- model [count=0]
4+++ update |= [msg=M state=model]
5+ ^- [model (list (cmd M))] [state ~]
6+++ view |= state=model ^- (element M) (text "view")
7+++ subs |= state=model ^- (list (sub M)) ~
tests/type-program-main/source.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program (init) update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ (~)
tests/type-program-watch/about.txtnew file+1
@@ -0,0 +1 @@
1+tests: A synthetic closed program uses the real todo API and Hoon readers with synthetic init, update and view definitions. A singleton direct todos.api watch must match exact merged source-backed request evidence; the fixture checks its closed subs type and downstream import. Pure and hand-built requests, helpers and aliases, scry, missing, mismatched or ambiguous evidence, typed paths, diffs and multiple subscriptions are rejected. It does not execute the todo UI or establish runtime watching.
tests/type-todo-partial/expected.txt+2−2
@@ -4,10 +4,10 @@ partial inference; module not checked
44+$ model: not checked
55+$ msg: cases proven disjoint; mold not checked
66++ init: `~` needs context in partial inference
7−++ update: name is not available to partial inference
7+++ update: branch tag or union context is not supported by partial inference
88++ subs: call constraint is not supported by partial inference
99++ view: name is not available to partial inference
10−++ row-of: name is not available to partial inference
10+++ row-of: tag needs context in partial inference
1111negative API imports
1212missing-mark: rejected
1313duplicate-mark: rejected
tests/type-union-alias-overlap/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ tagged |$ [A] [%other A]
3++$ choice
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-union-alias-overlap/expected.txtnew file+25
@@ -0,0 +1,25 @@
1+same head and inhabited payload overlap: ok
2+zero spelling overlap: ok
3+original same-case spans retained: ok
4+partial report displays same overlap: ok
5+partial report displays zero overlap: ok
6+distinct heads do not overlap: ok
7+distinct singleton payloads do not overlap: ok
8+empty payload has no witness: ok
9+outer variable has no witness: ok
10+unresolved reference has no witness: ok
11+equal nonzero singleton payload overlaps: ok
12+nonzero overlap reported: ok
13+late pair in three cases overlaps: ok
14+opaque gate payload declines: ok
15+wrong alias arity declines: ok
16+full module remains rejected: ok
17+first source excerpt retained: ok
18+second source excerpt retained: ok
19+flag and zero payload overlap: ok
20+flag and nonzero payload decline: ok
21+duplicate owner declines: ok
22+qualified owner declines: ok
23+20 proof fuel succeeds: ok
24+19 proof fuel declines: ok
25+zero proof fuel declines: ok
tests/type-union-alias-overlap/flag-source.txtnew file+7
@@ -0,0 +1,7 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ flag-zero
3+ (tagged ?)
4+ [%wrapped %$]
5++$ flag-nonzero
6+ (tagged ?)
7+ [%wrapped %hello]
tests/type-union-alias-overlap/multi.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ [%first @t]
4+ (tagged @p)
5+ [%wrapped @t]
tests/type-union-alias-overlap/negative.txtnew file+16
@@ -0,0 +1,16 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ distinct-head
3+ (tagged @t)
4+ [%other @p]
5++$ distinct-constant
6+ (tagged %a)
7+ [%wrapped %b]
8++$ empty-payload
9+ (tagged !!)
10+ [%wrapped @t]
11++$ generic |$ [A]
12+ (tagged A)
13+ [%wrapped @t]
14++$ unknown-name
15+ (tagged missing)
16+ [%wrapped @t]
tests/type-union-alias-overlap/nonzero.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ same
3+ (tagged %hello)
4+ [%wrapped %hello]
tests/type-union-alias-overlap/opaque.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged $-(@t @t))
4+ [%wrapped $-(@t @t)]
tests/type-union-alias-overlap/positive.txtnew file+8
@@ -0,0 +1,8 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ same
3+ (tagged @t)
4+ [%wrapped @p]
5++$ zero |$ [A] [%.y A]
6++$ same-zero
7+ (zero @t)
8+ [%$ @p]
tests/type-union-alias-overlap/qualified.txtnew file+5
@@ -0,0 +1,5 @@
1+/= lib /ui/lib
2++$ tagged |$ [A] [%wrapped A]
3++$ choice
4+ (tagged.lib @t)
5+ [%wrapped @p]
tests/type-union-alias-overlap/wrong.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t @p)
4+ [%wrapped @p]
5+++ id |= x=bad x
tests/type-union-source/direct-source.txtnew file+3
@@ -0,0 +1,3 @@
1++$ choice
2+ [%a @t]
3+ [%b @p]
tests/type-union-source/duplicate-params.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A A] [%wrapped A]
2++$ choice
3+ (tagged @t @p)
4+ [%other @p]
tests/type-union-source/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ tagged |$ [A] [%changed A]
3++$ choice
4+ (tagged @t)
5+ [%other @p]
tests/type-union-source/expected.txtnew file+36
@@ -0,0 +1,36 @@
1+source generic distinct: ok
2+actual inference preserves pending and scoped state: ok
3+actual inference rejects structural state: ok
4+later source failure returns no partial state: ok
5+actual local owner shadow rejected: ok
6+full generic-alias module checks: ok
7+same-head module is not published: ok
8+mixed-zero module is not published: ok
9+wrong-arity module is not published: ok
10+partial report uses source proof: ok
11+partial report preserves shadow diagnostic: ok
12+recognized recursive tree causes conservative decline: ok
13+mixed partial report remains source-only: ok
14+source exact fuel 18: ok
15+source 17 fuel declines: ok
16+same head declines: ok
17+equal noun cross spelling declines: ok
18+nested application declines: ok
19+duplicate owner declines: ok
20+wrong arity declines: ok
21+duplicate parameters decline: ok
22+hidden body reference declines: ok
23+qualified import declines: ok
24+direct cases use existing proof: ok
25+wide alias body declines: ok
26+undeclared body parameter declines: ok
27+empty state accepted: ok
28+simple outer generic accepted: ok
29+structured outer argument declined: ok
30+structured substitution declined: ok
31+pending hole declined: ok
32+recursive index declined: ok
33+deferred transaction declined: ok
34+pending obligation declined: ok
35+256 state entries accepted: ok
36+257 state entries declined: ok
tests/type-union-source/free-source.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped B]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
tests/type-union-source/good.txtnew file+9
@@ -0,0 +1,9 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
5+++ id |= x=choice x
6++$ poly |$ [A B]
7+ (tagged A)
8+ [%second B]
9+++ typed |= x=(poly @t @p) x
tests/type-union-source/hidden-ref.txtnew file+5
@@ -0,0 +1,5 @@
1++$ helper @t
2++$ tagged |$ [A] [%wrapped helper]
3++$ choice
4+ (tagged @t)
5+ [%other @p]
tests/type-union-source/late-source.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged A)
4+ [%other B]
tests/type-union-source/mixed-source.txtnew file+8
@@ -0,0 +1,8 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4++$ tagged |$ [A] [%wrapped A]
5++$ choice
6+ (tagged @t)
7+ [%other @p]
8+++ id |= x=choice x
tests/type-union-source/nested.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged (tagged @t))
4+ [%other @p]
tests/type-union-source/qualified.txtnew file+4
@@ -0,0 +1,4 @@
1+/= lib /ui/lib
2++$ choice
3+ (tagged.lib @t)
4+ [%other @p]
tests/type-union-source/same.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t)
4+ [%wrapped @p]
5+++ id |= x=bad x
tests/type-union-source/shadow-source.txtnew file+7
@@ -0,0 +1,7 @@
1++$ tagged |$ [A] [%wrapped A]
2+++ bad |= x=@t
3+ +$ tagged |$ [A] [%other A]
4+ +$ choice
5+ (tagged @t)
6+ [%other @p]
7+ x
tests/type-union-source/wide-source.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped [@t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t @t]]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
tests/type-union-source/wrong.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t @p)
4+ [%other @p]
5+++ id |= x=bad x
tests/type-union-source/zero.txtnew file+5
@@ -0,0 +1,5 @@
1++$ zero |$ [A] [%.y A]
2++$ bad
3+ (zero @t)
4+ [%$ @p]
5+++ id |= x=bad x
tools/testdata/lead-late-hoon-reference.hoonnew file+24
@@ -0,0 +1,24 @@
1+:: Hoon translations of curried Jibb pair constructors vs Hoon 2n arms.
2+:: This does not execute Jibb, lower code or verify jet recognition.
3+^- @t
4+=/ make-lead |= a=* |= b=* [a b]
5+=/ make-late |= b=* |= a=* [a b]
6+=/ items=(list *)
7+ :~ 0
8+ 1
9+ 'hello'
10+ [1 2]
11+ |=(x=@ud x)
12+ ==
13+=/ xs=(list *) items
14+|-
15+?~ xs 'Hoon lead/late reference: 50 comparisons passed'
16+=/ ys=(list *) items
17+=/ good=?
18+ |-
19+ ?~ ys &
20+ ?. =(((make-lead i.xs) i.ys) ((lead i.xs) i.ys)) |
21+ ?. =(((make-late i.xs) i.ys) ((late i.xs) i.ys)) |
22+ $(ys t.ys)
23+?. good 'BAD pair mismatch'
24+$(xs t.xs)
tools/testdata/ship-selftest+83−1
@@ -310,23 +310,105 @@ def generator_checks(tmp):
310310 'tests/lib/jibb-arithmetic-guards.hoon',
311311 'tests/lib/jibb-positional-face-guards.hoon',
312312 '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',
316+ 'tests/lib/jibb-empty.hoon',
317+ 'tests/lib/jibb-union-source.hoon',
318+ 'tests/lib/jibb-union-alias-overlap.hoon',
319+ 'tests/lib/jibb-full-overlap-basic.hoon',
320+ 'tests/lib/jibb-full-overlap-graph.hoon',
313321 'tests/lib/jibb-api-evidence.hoon',
314322 'tests/lib/jibb-ask-guards.hoon',
315323 'tests/lib/jibb-request-guards.hoon',
316324 'tests/lib/jibb-closed-gate-guards.hoon',
317325 'tests/lib/jibb-direct-gate-guards.hoon',
318326 'tests/lib/jibb-direct-gate-source.hoon',
327+ 'tests/lib/jibb-program-main.hoon',
328+ 'tests/lib/jibb-program-init.hoon',
329+ 'tests/lib/jibb-program-watch.hoon',
319330 'tests/lib/jibb-todo-api.hoon',
320331 'tests/lib/jibb-todo-partial.hoon',
321332 'tests/lib/jibb-constructor-fit-guards.hoon',
322333 'tests/lib/jibb-sub-guards.hoon',
323334 'tests/lib/jibb-nested-union-guards.hoon',
324335 'tests/lib/jibb-gate-free-guards.hoon',
325− 'tests/lib/jibb-gate-free-source.hoon'}
336+ 'tests/lib/jibb-gate-free-source.hoon',
337+ 'tests/lib/jibb-deferred.hoon',
338+ 'tests/lib/jibb-deferred-resolver.hoon',
339+ 'tests/lib/jibb-deferred-context.hoon',
340+ 'tests/lib/jibb-deferred-prepared.hoon',
341+ 'tests/lib/jibb-cell-branch.hoon'}
326342 <= normal_tests, sorted(normal_tests))
343+ check('generic recursion source and golden are assembled',
344+ {f'tests/type-generic-recursion/{name}.txt' for name in (
345+ 'tree', 'tree-changed', 'alias', 'client', 'bad-mold',
346+ 'bad-constructor', 'bad-match', 'bad-parameter', 'local-shadow',
347+ 'local-distinct', 'local-only', 'list-shadow', 'chain', 'expected')} <= set(normal.files))
348+ check('generic construction sources and golden are assembled',
349+ {f'tests/type-generic-construction/{name}.txt' for name in (
350+ 'tree', 'alias', 'client', 'alias-client', 'tree-no-event',
351+ 'no-event-client', 'owner-positive', 'owner-negative',
352+ 'sibling-values', 'expected')} <= set(normal.files))
353+ check('generic pattern sources and golden are assembled',
354+ {f'tests/type-generic-pattern/{name}.txt' for name in (
355+ 'client', 'no-event', 'values', 'poly-values', 'owner',
356+ 'owner-bad', 'expected')} <= set(normal.files))
357+ check('empty mold sources and golden are assembled',
358+ {f'tests/type-empty/{name}.txt' for name in (
359+ 'good', 'overlap', 'dead', 'missing', 'standard-good',
360+ 'list-dead', 'unit-dead', 'late-cap', 'list-live', 'list-open',
361+ 'face-source', 'expected')} <= set(normal.files))
362+ check('generic union source fixtures and golden are assembled',
363+ {f'tests/type-union-source/{name}.txt' for name in (
364+ 'good', 'same', 'zero', 'nested', 'duplicate', 'wrong',
365+ 'duplicate-params', 'hidden-ref', 'qualified', 'direct-source',
366+ 'wide-source', 'free-source', 'late-source', 'shadow-source',
367+ 'mixed-source', 'expected')} <= set(normal.files))
368+ check('generic union alias overlap fixtures are assembled',
369+ {f'tests/type-union-alias-overlap/{name}.txt' for name in (
370+ 'positive', 'negative', 'nonzero', 'multi', 'opaque', 'wrong',
371+ 'duplicate', 'qualified', 'flag-source', 'expected')} <= set(normal.files))
372+ check('full overlap source fixtures are assembled',
373+ {f'tests/type-full-overlap/{name}.txt' for name in (
374+ 'same', 'zero', 'unsupported', 'precedence', 'duplicate',
375+ 'invalid', 'distinct', 'parent', 'child', 'generic',
376+ 'duplicate-generic', 'expected-basic', 'expected-graph')} <= set(normal.files))
377+ check('deferred transaction and resolver sources are assembled',
378+ {'tests/type-deferred/nested-src.txt', 'tests/type-deferred/principal-src.txt',
379+ 'tests/type-deferred/expected.txt', 'tests/type-deferred-resolver/good.txt',
380+ 'tests/type-deferred-resolver/store.txt', 'tests/type-deferred-resolver/expected.txt',
381+ 'tests/type-deferred-resolver/stability-early.txt', 'tests/type-deferred-resolver/stability-late.txt',
382+ 'tests/type-deferred-resolver/stability-simple-early.txt', 'tests/type-deferred-resolver/stability-simple-late.txt',
383+ 'tests/type-deferred-resolver/stability-output-early.txt', 'tests/type-deferred-resolver/stability-output-late.txt',
384+ 'tests/type-deferred-resolver/stability-slot-early.txt', 'tests/type-deferred-resolver/stability-slot-late.txt'}
385+ <= set(normal.files))
386+ check('deferred context sources and report are assembled',
387+ {f'tests/type-deferred-context/{name}.txt' for name in (
388+ 'rich', 'plain', 'simple', 'missing', 'wrong', 'duplicate',
389+ 'dangling', 'collision-early', 'collision-late', 'report')} <= set(normal.files))
390+ check('prepared initializer sources and exact reports are assembled',
391+ {f'tests/type-deferred-prepared/{name}.txt' for name in (
392+ 'good', 'tuple-only', 'wrong-unit', 'wrong-draft', 'unrelated-tag',
393+ 'mold-collision', 'no-final-cast', 'no-prelude', 'main',
394+ 'imported', 'expected', 'expected-control', 'expected-tuple-only')} <= set(normal.files))
395+ check('cell branch sources are assembled',
396+ {'tests/type-cell-branch/good.txt', 'tests/type-cell-branch/bad.txt'}
397+ <= set(normal.files))
327398 check('direct gate source and golden are assembled',
328399 {'tests/type-direct-gate/source.txt', 'tests/type-direct-gate/expected.txt'}
329400 <= set(normal.files))
401+ check('program main sources and shared fixture are assembled',
402+ {f'tests/type-program-main/{name}.txt' for name in (
403+ 'source', 'consumer', 'gate-model', 'gate-data', 'nonempty-subs',
404+ 'mismatched-model', 'arbitrary-main', 'alias-main', 'open-message',
405+ 'initializer', 'initializer-consumer', 'initializer-unfaced',
406+ 'initializer-error', 'initializer-earlier', 'initializer-model',
407+ 'initializer-message', 'initializer-generic', 'initializer-missing',
408+ 'initializer-tag', 'initializer-no-main', 'initializer-subs')} <= set(normal.files))
409+ check('program watch shared fixture is assembled',
410+ {'tests/lib/jibb-program-watch.hoon', 'tests/type-program-watch/about.txt'}
411+ <= set(normal.files))
330412 check('todo partial golden and reused sources are assembled',
331413 {'tests/type-todo-partial/expected.txt', 'tests/type-gate-free/todo.txt',
332414 'tests/type-api-paths/api.txt'} <= set(normal.files))
tools/testdata/succ-hoon-reference.hoonnew file+9
@@ -0,0 +1,9 @@
1+:: Compare a Hoon translation of the Jibb successor with Hoon's 2n arm.
2+:: This does not execute Jibb, lower code or verify jet recognition.
3+^- @t
4+=/ next |= x=@ (add x 1)
5+=/ values=(list @) ~[0 1 2 31 255 256 65.535 65.536 4.294.967.295 18.446.744.073.709.551.615]
6+|- ^- @t
7+?~ values 'Hoon successor reference: 10 comparisons passed'
8+?. =((next i.values) (succ i.values)) 'BAD successor mismatch'
9+$(values t.values)
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-cell-branch-testnew file+43
@@ -0,0 +1,43 @@
1+#!/usr/bin/env python3
2+"""Run the shared closed-cell branch guard, including its ship test arm."""
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+p = argparse.ArgumentParser(description=__doc__)
11+p.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+a = p.parse_args()
13+core = (root / 'tests/lib/jibb-cell-branch.hoon').read_text()
14+core = core[core.index('\n|%\n') + 1:]
15+program = ('=/ jibb .\n'
16+ '=/ public=@t public-text\n'
17+ '=/ internal=@t internal-text\n'
18+ '=/ good=wain (to-wain:format good-text)\n'
19+ '=/ bad=wain (to-wain:format bad-text)\n'
20+ '=/ suite\n' + core +
21+ '\n^- @t\n=/ checked=tang test-cell-branch:suite\n'
22+ '?~ checked \'cell branch guards passed\'\n(crip "{<checked>}")\n')
23+fixtures = {
24+ 'public': root / 'jibb-dev/lib/jibb/prelude.jibb',
25+ 'internal': root / 'jibb-dev/lib/jibb/internal.jibb',
26+ 'good': root / 'tests/type-cell-branch/good.txt',
27+ 'bad': root / 'tests/type-cell-branch/bad.txt',
28+}
29+with tempfile.TemporaryDirectory(prefix='jibb-cell-branch-') as d:
30+ path = Path(d) / 'guard.hoon'
31+ path.write_text(program)
32+ command = [str(root / 'tools/hoon'), '--lib', a.lib, '--raw', '-f', str(path)]
33+ for name, fixture in fixtures.items():
34+ if not fixture.is_file() or fixture.stat().st_size == 0:
35+ sys.exit('missing or empty fixture: ' + str(fixture))
36+ command.extend(['--cord', name + '-text=' + str(fixture)])
37+ result = subprocess.run(command, stdout=subprocess.PIPE)
38+if result.returncode:
39+ sys.exit(result.returncode)
40+if result.stdout != b'cell branch guards passed\n':
41+ sys.stderr.write(result.stdout.decode(errors='replace'))
42+ sys.exit(1)
43+print('cell branch guards passed')
tools/type-deferred-context-testnew file+31
@@ -0,0 +1,31 @@
1+#!/usr/bin/env python3
2+"""Evaluate source-driven deferred context and replay guards."""
3+from pathlib import Path
4+import argparse, subprocess, sys, tempfile
5+root = Path(__file__).resolve().parent.parent
6+p = argparse.ArgumentParser(description=__doc__)
7+p.add_argument('--lib', default=str(root/'jibb-dev/lib/jibb.hoon'))
8+p.add_argument('--hoon', default=str(root/'tools/hoon'))
9+a = p.parse_args()
10+core = (root / 'tests/lib/jibb-deferred-context.hoon').read_text()
11+core = core[core.index('\n|%\n') + 1:]
12+names = ['rich', 'plain', 'simple', 'missing', 'wrong', 'duplicate', 'dangling', 'collision-early', 'collision-late', 'report']
13+bindings = ''.join('=/ '+('expected' if n == 'report' else n)+'=wain (to-wain:format '+n+'-text)\n' for n in names)
14+program = ('=/ jibb .\n' + bindings + '=/ suite\n' + core +
15+ "\n^- @t\n=/ checked=tang test-context:suite\n?~ checked 'deferred context guards passed'\n(crip \"{<checked>}\")\n")
16+with tempfile.TemporaryDirectory(prefix='jibb-deferred-context-') as d:
17+ f = Path(d) / 'report.hoon'
18+ f.write_text(program)
19+ cmd = [a.hoon, '--lib', a.lib, '--raw', '-f', str(f)]
20+ for n in names:
21+ fixture = root/'tests/type-deferred-context'/(n+'.txt')
22+ if not fixture.is_file() or fixture.stat().st_size == 0:
23+ sys.exit('missing or empty fixture: '+str(fixture))
24+ cmd.extend(['--cord', n+'-text='+str(fixture)])
25+ got = subprocess.run(cmd, stdout=subprocess.PIPE)
26+if got.returncode:
27+ sys.exit(got.returncode)
28+if got.stdout != b'deferred context guards passed\n':
29+ sys.stderr.write(got.stdout.decode(errors='replace'))
30+ sys.exit(1)
31+print('deferred context guards passed')
tools/type-deferred-prepared-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Evaluate prepared-prelude initializer recovery and report guards."""
3+from pathlib import Path
4+import argparse, subprocess, sys, tempfile
5+root = Path(__file__).resolve().parent.parent
6+p = argparse.ArgumentParser(description=__doc__)
7+p.add_argument('--lib', default=str(root/'jibb-dev/lib/jibb.hoon'))
8+p.add_argument('--hoon', default=str(root/'tools/hoon'))
9+a = p.parse_args()
10+core = (root / 'tests/lib/jibb-deferred-prepared.hoon').read_text()
11+core = core[core.index('\n|%\n') + 1:]
12+names = ['good', 'tuple-only', 'wrong-unit', 'wrong-draft', 'unrelated-tag', 'mold-collision',
13+ 'no-final-cast', 'no-prelude', 'main', 'imported', 'expected', 'expected-control',
14+ 'expected-tuple-only']
15+bindings = ''.join('=/ '+('main-source' if n == 'main' else n)+'=wain (to-wain:format '+n+'-text)\n' for n in names)
16+at = '/ui/prepared/jibb'
17+checks = ['(check-prepared:suite %s %s %s)' % (where, source, valid)
18+ for where, source, valid in (
19+ (at, 'good', '&'), (at, 'tuple-only', '&'), (at, 'no-prelude', '&'),
20+ (at, 'wrong-unit', '|'), (at, 'wrong-draft', '|'),
21+ (at, 'unrelated-tag', '|'), (at, 'mold-collision', '|'),
22+ (at, 'no-final-cast', '|'), (at, 'main-source', '|'),
23+ (at, 'imported', '|'),
24+ ('/ui/api/prepared/jibb', 'good', '|'),
25+ ('/ui/stores/prepared/jibb', 'good', '|'))]
26+checks += ['check-no-prelude:suite', 'check-ordinary:suite', 'check-prepared-binding:suite',
27+ '(check-report:suite good expected)', '(check-report:suite tuple-only expected-tuple-only)',
28+ '(check-report:suite no-final-cast expected-control)']
29+with tempfile.TemporaryDirectory(prefix='jibb-deferred-prepared-') as d:
30+ f = Path(d) / 'report.hoon'
31+ for check in checks:
32+ program = ('=/ jibb .\n' + bindings + '=/ suite\n' + core +
33+ "\n^- @t\n=/ checked=tang " + check + "\n?~ checked 'prepared deferred inference guards passed'\n(crip \"{<checked>}\")\n")
34+ f.write_text(program)
35+ cmd = [a.hoon, '--lib', a.lib, '--raw', '-f', str(f),
36+ '--cord', 'prelude='+str(root/'jibb-dev/lib/jibb/prelude.jibb'),
37+ '--cord', 'internal='+str(root/'jibb-dev/lib/jibb/internal.jibb')]
38+ for n in names:
39+ fixture = root/'tests/type-deferred-prepared'/(n+'.txt')
40+ if not fixture.is_file() or fixture.stat().st_size == 0:
41+ sys.exit('missing or empty fixture: '+str(fixture))
42+ cmd.extend(['--cord', n+'-text='+str(fixture)])
43+ got = subprocess.run(cmd, stdout=subprocess.PIPE)
44+ if got.returncode:
45+ sys.exit(got.returncode)
46+ if got.stdout != b'prepared deferred inference guards passed\n':
47+ sys.stderr.write(got.stdout.decode(errors='replace'))
48+ sys.exit(1)
49+print('prepared deferred inference guards passed')
tools/type-deferred-resolver-testnew file+33
@@ -0,0 +1,33 @@
1+#!/usr/bin/env python3
2+"""Evaluate the source-level deferred-resolver report."""
3+from pathlib import Path
4+import argparse, subprocess, sys, tempfile
5+root = Path(__file__).resolve().parent.parent
6+p = argparse.ArgumentParser(description=__doc__)
7+p.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
8+a = p.parse_args()
9+core = (root / 'tests/lib/jibb-deferred-resolver.hoon').read_text()
10+core = core[core.index('\n|%\n') + 1:]
11+names = ['good', 'conflict', 'missing', 'hole', 'duplicate', 'face', 'store', 'stability-early', 'stability-late', 'stability-simple-early', 'stability-simple-late', 'stability-output-early', 'stability-output-late', 'stability-slot-early', 'stability-slot-late', 'public', 'internal']
12+bindings = ''.join('=/ '+n+'=wain (to-wain:format '+n+'-text)\n' for n in names if n not in ('public', 'internal'))
13+bindings += ''.join('=/ '+n+'=@t '+n+'-text\n' for n in ('public', 'internal'))
14+program = ('=/ jibb .\n' + bindings + '=/ expected=wain (to-wain:format expected-text)\n=/ suite\n' + core +
15+ '\n^- @t\n=/ checked=tang test-deferred-resolver:suite\n?~ checked \'deferred resolver guards passed\'\n(crip "{<checked>}")\n')
16+with tempfile.TemporaryDirectory(prefix='jibb-deferred-') as d:
17+ f = Path(d) / 'report.hoon'
18+ f.write_text(program)
19+ cmd = [str(root/'tools/hoon'), '--lib', a.lib, '--raw', '-f', str(f)]
20+ for n in names:
21+ fixture = (root/'jibb-dev/lib/jibb'/('prelude.jibb' if n == 'public' else 'internal.jibb')) if n in ('public', 'internal') else root/'tests/type-deferred-resolver'/(n+'.txt')
22+ if not fixture.is_file() or fixture.stat().st_size == 0:
23+ sys.exit('missing or empty fixture: ' + str(fixture))
24+ cmd.extend(['--cord', n+'-text='+str(fixture)])
25+ cmd.extend(['--cord', 'expected-text='+str(root/'tests/type-deferred-resolver/expected.txt')])
26+ got = subprocess.run(cmd, stdout=subprocess.PIPE)
27+if got.returncode:
28+ sys.exit(got.returncode)
29+want = b'deferred resolver guards passed\n'
30+if got.stdout != want:
31+ sys.stderr.write(got.stdout.decode(errors='replace'))
32+ sys.exit(1)
33+print('deferred resolver guards passed')
tools/type-deferred-testnew file+32
@@ -0,0 +1,32 @@
1+#!/usr/bin/env python3
2+"""Evaluate the shared partial deferred-transaction report."""
3+from pathlib import Path
4+import argparse, subprocess, sys, tempfile
5+root = Path(__file__).resolve().parent.parent
6+p = argparse.ArgumentParser(description=__doc__)
7+p.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
8+a = p.parse_args()
9+core = (root / 'tests/lib/jibb-deferred.hoon').read_text()
10+core = core[core.index('\n|%\n') + 1:]
11+names = ['nested-src', 'principal-src', 'missing-src', 'conflict-src', 'duplicate-src', 'hole-src', 'local-src', 'mutual-src', 'mold-hole-src', 'face-good-src', 'face-bad-src']
12+bindings = ''.join('=/ '+n+'=wain (to-wain:format '+n+'-text)\n' for n in names)
13+program = ('=/ jibb .\n' + bindings + '=/ expected=wain (to-wain:format expected-text)\n=/ suite\n' + core +
14+ '\n^- @t\n=/ checked=tang test-deferred:suite\n?~ checked \'deferred partial transaction guards passed\'\n(crip "{<checked>}")\n')
15+with tempfile.TemporaryDirectory(prefix='jibb-deferred-') as d:
16+ f = Path(d) / 'report.hoon'
17+ f.write_text(program)
18+ cmd = [str(root/'tools/hoon'), '--lib', a.lib, '--raw', '-f', str(f)]
19+ for n in names:
20+ fixture = root/'tests/type-deferred'/(n+'.txt')
21+ if not fixture.is_file() or fixture.stat().st_size == 0:
22+ sys.exit('missing or empty fixture: ' + str(fixture))
23+ cmd.extend(['--cord', n+'-text='+str(fixture)])
24+ cmd.extend(['--cord', 'expected-text='+str(root/'tests/type-deferred/expected.txt')])
25+ got = subprocess.run(cmd, stdout=subprocess.PIPE)
26+if got.returncode:
27+ sys.exit(got.returncode)
28+want = b'deferred partial transaction guards passed\n'
29+if got.stdout != want:
30+ sys.stderr.write(got.stdout.decode(errors='replace'))
31+ sys.exit(1)
32+print('deferred partial transaction guards passed')
tools/type-empty-testnew file+55
@@ -0,0 +1,55 @@
1+#!/usr/bin/env python3
2+"""Check source-backed empty molds and uninhabited union cases 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-empty'
16+source = (root / 'tests/lib/jibb-empty.hoon').read_text()
17+source = source[source.index('\n|%\n') + 1:]
18+names = ['good', 'overlap', 'dead', 'missing', 'standard-good', 'list-dead', 'unit-dead', 'late-cap', 'list-live', 'list-open', 'face-source']
19+cords = [item for name in names for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
20+cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
21+ '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
22+if not args.update:
23+ cords += ['--cord', f'expected-text={fixture / "expected.txt"}']
24+bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n' for name in names)
25+program = ('=/ jibb .\n=/ real-prelude=@t prelude\n'
26+ '=/ real-internal=@t internal\n' + bindings +
27+ ('=/ expected=wain ~\n' if args.update else '=/ expected=wain (to-wain:format expected-text)\n') +
28+ '=/ suite\n' + source +
29+ '\n=/ output=@t (empty-output:suite prelude internal ' +
30+ ' '.join(name + '-text' for name in names) + ')\n' +
31+ ('output\n' if args.update else
32+ "=/ actual-test=tang test-empty:suite\n?~ actual-test output\n'BAD ship test arm'\n"))
33+with tempfile.TemporaryDirectory(prefix='jibb-empty-') as tmp:
34+ path = Path(tmp) / 'test.hoon'
35+ path.write_text(program)
36+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
37+ '-f', str(path), *cords], stdout=subprocess.PIPE)
38+if result.returncode:
39+ sys.exit(result.returncode)
40+if any(line.startswith(b'BAD ') or line.endswith(b': BAD') for line in result.stdout.splitlines()):
41+ sys.stderr.write('empty-mold guard assertion failed:\n')
42+ sys.stderr.buffer.write(result.stdout)
43+ sys.exit(1)
44+expected_path = fixture / 'expected.txt'
45+if args.update:
46+ expected_path.write_bytes(result.stdout)
47+else:
48+ expected = expected_path.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(1)
55+print('source-backed empty-mold guards passed')
tools/type-full-overlap-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Check source-bound full-module overlap evidence 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-full-overlap'
16+cases = {
17+ 'basic': ['same', 'zero', 'unsupported', 'precedence', 'duplicate', 'invalid', 'distinct', 'parent', 'child', 'generic', 'duplicate-generic'],
18+ 'graph': ['parent', 'child', 'distinct'],
19+}
20+for kind, names in cases.items():
21+ source = (root / 'tests/lib' / f'jibb-full-overlap-{kind}.hoon').read_text()
22+ source = source[source.index('\n|%\n') + 1:]
23+ cords = [item for name in names for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
24+ expected = fixture / f'expected-{kind}.txt'
25+ if not args.update:
26+ cords += ['--cord', f'expected-text={expected}']
27+ bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n' for name in names)
28+ program = ('=/ jibb .\n' + bindings +
29+ ('=/ expected=wain ~\n' if args.update else '=/ expected=wain (to-wain:format expected-text)\n') +
30+ '=/ suite\n' + source + '\n=/ output=@t (output:suite ' +
31+ ' '.join(name + '-text' for name in names) + ')\n' +
32+ ('output\n' if args.update else
33+ f"=/ actual-test=tang test-full-overlap-{kind}:suite\n?~ actual-test output\n'BAD ship test arm'\n"))
34+ with tempfile.TemporaryDirectory(prefix='jibb-full-overlap-') as tmp:
35+ path = Path(tmp) / 'driver.hoon'
36+ path.write_text(program)
37+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path), *cords], stdout=subprocess.PIPE)
38+ if result.returncode:
39+ sys.exit(result.returncode)
40+ if any(line.startswith(b'BAD ') or line.endswith(b': BAD') for line in result.stdout.splitlines()):
41+ sys.stderr.write(f'{kind} overlap guard assertion failed:\n')
42+ sys.stderr.buffer.write(result.stdout)
43+ sys.exit(1)
44+ if args.update:
45+ expected.write_bytes(result.stdout)
46+ elif result.stdout != expected.read_bytes():
47+ sys.stderr.writelines(difflib.unified_diff(expected.read_text().splitlines(keepends=True), result.stdout.decode().splitlines(keepends=True), fromfile=str(expected), tofile='actual'))
48+ sys.exit(1)
49+print('source-bound full-module overlap guards 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 recursive pattern coverage, state and arm bounds 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-program-init-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Run transactional direct-program initializer context checks 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+
14+def body(name):
15+ text = (root / 'tests/lib' / name).read_text()
16+ return text[text.index('\n|%\n') + 1:]
17+
18+names = ('initializer', 'initializer-consumer', 'initializer-unfaced',
19+ 'initializer-error', 'initializer-earlier', 'initializer-model',
20+ 'initializer-message', 'initializer-generic', 'initializer-missing',
21+ 'initializer-tag', 'initializer-no-main', 'initializer-subs')
22+expression = ('=/ jibb .\n=/ prelude=@t prelude-text\n'
23+ '=/ internal=@t internal-text\n' +
24+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
25+ for name in names) +
26+ '=/ suite\n' + body('jibb-program-init.hoon') +
27+ '\n=/ negatives=(list @t)\n :~ (text:suite initializer-error)\n'
28+ ' (text:suite initializer-earlier)\n (text:suite initializer-model)\n'
29+ ' (text:suite initializer-message)\n (text:suite initializer-generic)\n'
30+ ' (text:suite initializer-missing)\n (text:suite initializer-tag)\n'
31+ ' (text:suite initializer-no-main)\n (text:suite initializer-subs)\n ==\n'
32+ '=/ failures=(list tape) (program-init-errors:suite prelude internal (text:suite initializer) (text:suite initializer-consumer) (text:suite initializer-unfaced) negatives)\n'
33+ '^- @t\n?~ failures \'program initializer checks passed\'\n'
34+ '(of-wain:format (turn failures crip))\n')
35+with tempfile.TemporaryDirectory(prefix='jibb-program-init-') as tmp:
36+ program = Path(tmp) / 'program-init.hoon'
37+ program.write_text(expression)
38+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
39+ '--cord', 'prelude-text=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
40+ '--cord', 'internal-text=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
41+ for name in names:
42+ command += ['--cord', name + '-text=' + str(root / 'tests/type-program-main' / (name + '.txt'))]
43+ result = subprocess.run(command, stdout=subprocess.PIPE)
44+if result.returncode:
45+ sys.exit(result.returncode)
46+if result.stdout != b'program initializer checks passed\n':
47+ sys.stderr.buffer.write(result.stdout)
48+ sys.exit(1)
49+print('transactional direct-program initializer context guards passed')
tools/type-program-main-testnew file+46
@@ -0,0 +1,46 @@
1+#!/usr/bin/env python3
2+"""Run the shared closed program-main checks 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+
14+def body(name):
15+ text = (root / 'tests/lib' / name).read_text()
16+ return text[text.index('\n|%\n') + 1:]
17+
18+names = ('source', 'consumer', 'gate-model', 'gate-data', 'nonempty-subs',
19+ 'mismatched-model', 'arbitrary-main', 'alias-main', 'open-message')
20+expression = ('=/ jibb .\n=/ prelude=@t prelude-text\n'
21+ '=/ internal=@t internal-text\n' +
22+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
23+ for name in names) +
24+ '=/ expected=wain ~\n=/ suite\n' + body('jibb-program-main.hoon') +
25+ '\n=/ negatives=(list @t)\n :~ (text:suite gate-model)\n'
26+ ' (text:suite gate-data)\n (text:suite nonempty-subs)\n'
27+ ' (text:suite mismatched-model)\n (text:suite arbitrary-main)\n'
28+ ' (text:suite alias-main)\n (text:suite open-message)\n ==\n'
29+ '=/ failures=(list tape) (program-main-errors:suite prelude internal (text:suite source) (text:suite consumer) negatives)\n'
30+ '^- @t\n?~ failures \'program main checks passed\'\n'
31+ '(of-wain:format (turn failures crip))\n')
32+with tempfile.TemporaryDirectory(prefix='jibb-program-main-') as tmp:
33+ program = Path(tmp) / 'program-main.hoon'
34+ program.write_text(expression)
35+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
36+ '--cord', 'prelude-text=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
37+ '--cord', 'internal-text=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
38+ for name in names:
39+ command += ['--cord', name + '-text=' + str(root / 'tests/type-program-main' / (name + '.txt'))]
40+ result = subprocess.run(command, stdout=subprocess.PIPE)
41+if result.returncode:
42+ sys.exit(result.returncode)
43+if result.stdout != b'program main checks passed\n':
44+ sys.stderr.buffer.write(result.stdout)
45+ sys.exit(1)
46+print('closed program-main interface and rejection guards passed')
tools/type-program-watch-testnew file+48
@@ -0,0 +1,48 @@
1+#!/usr/bin/env python3
2+"""Run direct request-value watchability checks 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+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-program-watch.hoon').read_text()
19+tests = tests[tests.index('\n|%\n') + 1:]
20+names = ('sur', 'action', 'todos', 'update', 'item', 'api')
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=/ failures=(list tape) (program-watch-errors:suite prelude internal (text:suite sur) (text:suite action) (text:suite todos) (text:suite update) (text:suite item) (text:suite api))\n'
26+ '^- @t\n?~ failures \'program request-value watchability passed\'\n'
27+ '(of-wain:format (turn failures crip))\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+with tempfile.TemporaryDirectory(prefix='jibb-program-watch-') as tmp:
35+ path = Path(tmp) / 'program-watch.hoon'
36+ path.write_text(program)
37+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path),
38+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
39+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
40+ for name, filename in fixtures.items():
41+ command += ['--cord', name + '-text=' + str(root / filename)]
42+ result = subprocess.run(command, stdout=subprocess.PIPE)
43+if result.returncode:
44+ sys.exit(result.returncode)
45+if result.stdout != b'program request-value watchability passed\n':
46+ sys.stderr.buffer.write(result.stdout)
47+ sys.exit(1)
48+print('direct request-value watchability and rejection guards passed')
tools/type-union-alias-overlap-testnew file+52
@@ -0,0 +1,52 @@
1+#!/usr/bin/env python3
2+"""Check source-backed generic-union overlap witnesses 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-union-alias-overlap'
16+source = (root / 'tests/lib/jibb-union-alias-overlap.hoon').read_text()
17+source = source[source.index('\n|%\n') + 1:]
18+names = ['positive', 'negative', 'nonzero', 'multi', 'opaque', 'wrong', 'duplicate', 'qualified', 'flag-source']
19+cords = [item for name in names for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
20+if not args.update:
21+ cords += ['--cord', f'expected-text={fixture / "expected.txt"}']
22+bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n' for name in names)
23+program = ('=/ jibb .\n' + bindings +
24+ ('=/ expected=wain ~\n' if args.update else '=/ expected=wain (to-wain:format expected-text)\n') +
25+ '=/ suite\n' + source +
26+ '\n=/ output=@t (overlap-output:suite ' +
27+ ' '.join(name + '-text' for name in names) + ')\n' +
28+ ('output\n' if args.update else
29+ "=/ actual-test=tang test-union-alias-overlap:suite\n?~ actual-test output\n'BAD ship test arm'\n"))
30+with tempfile.TemporaryDirectory(prefix='jibb-union-overlap-') as tmp:
31+ path = Path(tmp) / 'test.hoon'
32+ path.write_text(program)
33+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
34+ '-f', str(path), *cords], stdout=subprocess.PIPE)
35+if result.returncode:
36+ sys.exit(result.returncode)
37+if any(line.startswith(b'BAD ') or line.endswith(b': BAD') for line in result.stdout.splitlines()):
38+ sys.stderr.write('generic-union guard assertion failed:\n')
39+ sys.stderr.buffer.write(result.stdout)
40+ sys.exit(1)
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-union overlap guards passed')
tools/type-union-source-testnew file+55
@@ -0,0 +1,55 @@
1+#!/usr/bin/env python3
2+"""Check source-backed bounded generic-union proofs 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-union-source'
16+source = (root / 'tests/lib/jibb-union-source.hoon').read_text()
17+source = source[source.index('\n|%\n') + 1:]
18+names = ['good', 'same', 'zero', 'nested', 'duplicate', 'wrong', 'duplicate-params', 'hidden-ref', 'qualified', 'direct-source', 'wide-source', 'free-source', 'late-source', 'shadow-source', 'mixed-source']
19+cords = [item for name in names for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
20+cords += ['--cord', f'prelude={root / "jibb-dev/lib/jibb/prelude.jibb"}',
21+ '--cord', f'internal={root / "jibb-dev/lib/jibb/internal.jibb"}']
22+if not args.update:
23+ cords += ['--cord', f'expected-text={fixture / "expected.txt"}']
24+bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n' for name in names)
25+program = ('=/ jibb .\n=/ real-prelude=@t prelude\n'
26+ '=/ real-internal=@t internal\n' + bindings +
27+ ('=/ expected=wain ~\n' if args.update else '=/ expected=wain (to-wain:format expected-text)\n') +
28+ '=/ suite\n' + source +
29+ '\n=/ output=@t (source-output:suite prelude internal ' +
30+ ' '.join(name + '-text' for name in names) + ')\n' +
31+ ('output\n' if args.update else
32+ "=/ actual-test=tang test-union-source:suite\n?~ actual-test output\n'BAD ship test arm'\n"))
33+with tempfile.TemporaryDirectory(prefix='jibb-empty-') as tmp:
34+ path = Path(tmp) / 'test.hoon'
35+ path.write_text(program)
36+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw',
37+ '-f', str(path), *cords], stdout=subprocess.PIPE)
38+if result.returncode:
39+ sys.exit(result.returncode)
40+if any(line.startswith(b'BAD ') or line.endswith(b': BAD') for line in result.stdout.splitlines()):
41+ sys.stderr.write('generic-union guard assertion failed:\n')
42+ sys.stderr.buffer.write(result.stdout)
43+ sys.exit(1)
44+expected_path = fixture / 'expected.txt'
45+if args.update:
46+ expected_path.write_bytes(result.stdout)
47+else:
48+ expected = expected_path.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(1)
55+print('source-backed generic-union guards passed')