on master help sign in
374 files changed+10463−1196
since splitsnapshots
unifiedsplit
docs/compiler.md+10−4 docs/development.md+9−2 docs/open-questions.md+15−5 docs/prelude-inventory.md+4−4 docs/prompts/milestone-2.md+4−2 docs/spec/core-language.md+2−1 docs/spec/decisions.md+6−2 docs/spec/grammar.md+11−10 docs/spec/overview.md+1−1 docs/status.md+23−7 jibb-dev/lib/jibb-import.hoon+46−5 jibb-dev/lib/jibb.hoon+1091−88 jibb-dev/lib/jibb/internal.jibb+5 jibb-dev/lib/jibb/prelude.jibb+7 tests/clay-fixtures/tlon-mop-expected.txt+1−1 tests/clay-fixtures/tlon-mop.txt+7−1 tests/golden/doc-grammar-04-step/source.jibb+1−1 tests/golden/doc-grammar-04-step/tokens.txt+2−2 tests/golden/doc-grammar-04-step/tree.txt+1−1 tests/golden/inline-mold-opaque/about.txt+2−2 tests/golden/parser-hole-parameter-rejected/about.txt+3 tests/golden/parser-hole-parameter-rejected/source.jibb+1 tests/golden/parser-hole-parameter-rejected/tokens.txt+8 tests/golden/parser-hole-parameter-rejected/tree.txt+3 tests/golden/parser-hole-path-space/about.txt+3 tests/golden/parser-hole-path-space/source.jibb+1 tests/golden/parser-hole-path-space/tokens.txt+9 tests/golden/parser-hole-path-space/tree.txt+3 tests/golden/parser-hole-path/about.txt+3 tests/golden/parser-hole-path/source.jibb+4 tests/golden/parser-hole-path/tokens.txt+28 tests/golden/parser-hole-path/tree.txt+5 tests/golden/parser-hole-pattern-rejected/about.txt+3 tests/golden/parser-hole-pattern-rejected/source.jibb+3 tests/golden/parser-hole-pattern-rejected/tokens.txt+15 tests/golden/parser-hole-pattern-rejected/tree.txt+3 tests/golden/parser-hole-shapes/about.txt+3 tests/golden/parser-hole-shapes/source.jibb+11 tests/golden/parser-hole-shapes/tokens.txt+121 tests/golden/parser-hole-shapes/tree.txt+47 tests/golden/parser-hole-value-rejected/about.txt+3 tests/golden/parser-hole-value-rejected/source.jibb+1 tests/golden/parser-hole-value-rejected/tokens.txt+4 tests/golden/parser-hole-value-rejected/tree.txt+3 tests/golden/types-hole-concrete/about.txt+4 tests/golden/types-hole-concrete/source.jibb+6 tests/golden/types-hole-concrete/tokens.txt+54 tests/golden/types-hole-concrete/tree.txt+22 tests/golden/types-hole-concrete/types.txt+10 tests/golden/types-hole-generic-mold/about.txt+4 tests/golden/types-hole-generic-mold/source.jibb+2 tests/golden/types-hole-generic-mold/tokens.txt+26 tests/golden/types-hole-generic-mold/tree.txt+11 tests/golden/types-hole-generic-mold/types.txt+6 tests/golden/types-hole-local-boundary/about.txt+4 tests/golden/types-hole-local-boundary/source.jibb+16 tests/golden/types-hole-local-boundary/tokens.txt+118 tests/golden/types-hole-local-boundary/tree.txt+55 tests/golden/types-hole-local-boundary/types.txt+17 tests/golden/types-hole-module-boundary/about.txt+4 tests/golden/types-hole-module-boundary/module-trees.txt+6 tests/golden/types-module-field-ambiguous/modules.txt → tests/golden/types-hole-module-boundary/modules.txt tests/golden/types-hole-module-boundary/modules/ui/lib.jibb+1 tests/golden/types-hole-module-boundary/source.jibb+2 tests/golden/types-hole-module-boundary/tokens.txt+14 tests/golden/types-hole-module-boundary/tree.txt+5 tests/golden/types-hole-module-boundary/types.txt+2 tests/golden/types-hole-named-complex/about.txt+4 tests/golden/types-hole-named-complex/source.jibb+2 tests/golden/types-hole-named-complex/tokens.txt+20 tests/golden/types-hole-named-complex/tree.txt+9 tests/golden/types-hole-named-complex/types.txt+3 tests/golden/types-hole-numeric-capture/about.txt+4 tests/golden/types-hole-numeric-capture/source.jibb+19 tests/golden/types-hole-numeric-capture/tokens.txt+127 tests/golden/types-hole-numeric-capture/tree.txt+62 tests/golden/types-hole-numeric-capture/types.txt+10 tests/golden/types-hole-unbound-mold/about.txt+4 tests/golden/types-hole-unbound-mold/source.jibb+2 tests/golden/types-hole-unbound-mold/tokens.txt+19 tests/golden/types-hole-unbound-mold/tree.txt+9 tests/golden/types-hole-unbound-mold/types.txt+3 tests/golden/types-hole-unsupported/about.txt+4 tests/golden/types-hole-unsupported/source.jibb+2 tests/golden/types-hole-unsupported/tokens.txt+14 tests/golden/types-hole-unsupported/tree.txt+7 tests/golden/types-hole-unsupported/types.txt+6 tests/golden/types-hole-user-generic/about.txt+4 tests/golden/types-hole-user-generic/source.jibb+6 tests/golden/types-hole-user-generic/tokens.txt+71 tests/golden/types-hole-user-generic/tree.txt+31 tests/golden/types-hole-user-generic/types.txt+10 tests/golden/types-hole-user-named/about.txt+4 tests/golden/types-hole-user-named/source.jibb+2 tests/golden/types-hole-user-named/tokens.txt+22 tests/golden/types-hole-user-named/tree.txt+11 tests/golden/types-hole-user-named/types.txt+6 tests/golden/types-hole-user-value/about.txt+4 tests/golden/types-hole-user-value/source.jibb+3 tests/golden/types-hole-user-value/tokens.txt+21 tests/golden/types-hole-user-value/tree.txt+10 tests/golden/types-hole-user-value/types.txt+7 tests/golden/types-import-tlon-notes/about.txt+1−1 tests/golden/types-import-tlon-notes/imports.txt+1 tests/golden/types-import-tlon-notes/source.jibb+1 tests/golden/types-import-tlon-notes/tokens.txt+9−1 tests/golden/types-import-tlon-notes/tree.txt+5−1 tests/golden/types-import-tlon-notes/types.txt+1 tests/golden/types-module-field-ambiguous/about.txt−4 tests/golden/types-module-field-ambiguous/types.txt−2 tests/golden/types-module-field-duplicate/about.txt+4 tests/golden/types-module-field-ambiguous/module-trees.txt → tests/golden/types-module-field-duplicate/module-trees.txt tests/golden/types-module-field-duplicate/modules.txt+1 tests/golden/types-module-field-ambiguous/modules/ui/lib.jibb → tests/golden/types-module-field-duplicate/modules/ui/lib.jibb tests/golden/types-module-field-ambiguous/source.jibb → tests/golden/types-module-field-duplicate/source.jibb tests/golden/types-module-field-ambiguous/tokens.txt → tests/golden/types-module-field-duplicate/tokens.txt tests/golden/types-module-field-ambiguous/tree.txt → tests/golden/types-module-field-duplicate/tree.txt tests/golden/types-module-field-duplicate/types.txt+8 tests/golden/types-prelude-bond/about.txt+4 tests/golden/types-prelude-bond/modules.txt+1 tests/golden/types-prelude-bond/source.jibb+6 tests/golden/types-prelude-bond/tokens.txt+57 tests/golden/types-prelude-bond/tree.txt+30 tests/golden/types-prelude-bond/types.txt+7 tests/golden/types-prelude-list-alias/about.txt+4 tests/golden/types-prelude-list-alias/modules.txt+1 tests/golden/types-prelude-list-alias/source.jibb+7 tests/golden/types-prelude-list-alias/tokens.txt+68 tests/golden/types-prelude-list-alias/tree.txt+30 tests/golden/types-prelude-list-alias/types.txt+14 tests/golden/types-proj-explicit-context/about.txt+4 tests/golden/types-proj-explicit-context/modules.txt+1 tests/golden/types-proj-explicit-context/source.jibb+35 tests/golden/types-proj-explicit-context/tokens.txt+626 tests/golden/types-proj-explicit-context/tree.txt+287 tests/golden/types-proj-explicit-context/types.txt+31 tests/golden/types-proj-nested-no-implicit/about.txt+4 tests/golden/types-proj-nested-no-implicit/modules.txt+1 tests/golden/types-proj-nested-no-implicit/source.jibb+6 tests/golden/types-proj-nested-no-implicit/tokens.txt+119 tests/golden/types-proj-nested-no-implicit/tree.txt+56 tests/golden/types-proj-nested-no-implicit/types.txt+7 tests/golden/types-proj-reserved-imported-definition/about.txt+4 tests/golden/types-proj-reserved-imported-definition/module-trees.txt+10 tests/golden/types-proj-reserved-imported-definition/modules.txt+1 tests/golden/types-proj-reserved-imported-definition/modules/ui/lib.jibb+2 tests/golden/types-proj-reserved-imported-definition/source.jibb+2 tests/golden/types-proj-reserved-imported-definition/tokens.txt+11 tests/golden/types-proj-reserved-imported-definition/tree.txt+3 tests/golden/types-proj-reserved-imported-definition/types.txt+2 tests/golden/types-proj-reserved-jibb-import/about.txt+4 tests/golden/types-proj-reserved-jibb-import/module-trees.txt+6 tests/golden/types-proj-reserved-jibb-import/modules.txt+1 tests/golden/types-proj-reserved-jibb-import/modules/ui/lib.jibb+1 tests/golden/types-proj-reserved-jibb-import/source.jibb+2 tests/golden/types-proj-reserved-jibb-import/tokens.txt+11 tests/golden/types-proj-reserved-jibb-import/tree.txt+3 tests/golden/types-proj-reserved-jibb-import/types.txt+2 tests/golden/types-proj-reserved-local-mold/about.txt+4 tests/golden/types-proj-reserved-local-mold/modules.txt+1 tests/golden/types-proj-reserved-local-mold/source.jibb+3 tests/golden/types-proj-reserved-local-mold/tokens.txt+10 tests/golden/types-proj-reserved-local-mold/tree.txt+5 tests/golden/types-proj-reserved-local-mold/types.txt+2 tests/golden/types-proj-reserved-local/about.txt+4 tests/golden/types-proj-reserved-local/modules.txt+1 tests/golden/types-proj-reserved-local/source.jibb+3 tests/golden/types-proj-reserved-local/tokens.txt+14 tests/golden/types-proj-reserved-local/tree.txt+8 tests/golden/types-proj-reserved-local/types.txt+2 tests/golden/types-proj-reserved-mark-import/about.txt+4 tests/golden/types-proj-reserved-mark-import/modules.txt+1 tests/golden/types-proj-reserved-mark-import/source.jibb+2 tests/golden/types-proj-reserved-mark-import/tokens.txt+7 tests/golden/types-proj-reserved-mark-import/tree.txt+3 tests/golden/types-proj-reserved-mark-import/types.txt+2 tests/golden/types-proj-reserved-mold/about.txt+4 tests/golden/types-proj-reserved-mold/modules.txt+1 tests/golden/types-proj-reserved-mold/source.jibb+2 tests/golden/types-proj-reserved-mold/tokens.txt+8 tests/golden/types-proj-reserved-mold/tree.txt+3 tests/golden/types-proj-reserved-mold/types.txt+2 tests/golden/types-proj-reserved-pattern/about.txt+4 tests/golden/types-proj-reserved-pattern/modules.txt+1 tests/golden/types-proj-reserved-pattern/source.jibb+3 tests/golden/types-proj-reserved-pattern/tokens.txt+21 tests/golden/types-proj-reserved-pattern/tree.txt+11 tests/golden/types-proj-reserved-pattern/types.txt+2 tests/golden/types-proj-reserved-positive/about.txt+4 tests/golden/types-proj-reserved-positive/modules.txt+1 tests/golden/types-proj-reserved-positive/source.jibb+8 tests/golden/types-proj-reserved-positive/tokens.txt+70 tests/golden/types-proj-reserved-positive/tree.txt+31 tests/golden/types-proj-reserved-positive/types.txt+7 tests/golden/types-proj-reserved-sample/about.txt+4 tests/golden/types-proj-reserved-sample/modules.txt+1 tests/golden/types-proj-reserved-sample/source.jibb+1 tests/golden/types-proj-reserved-sample/tokens.txt+8 tests/golden/types-proj-reserved-sample/tree.txt+5 tests/golden/types-proj-reserved-sample/types.txt+2 tests/golden/types-proj-reserved-sur-import/about.txt+4 tests/golden/types-proj-reserved-sur-import/modules.txt+1 tests/golden/types-proj-reserved-sur-import/source.jibb+2 tests/golden/types-proj-reserved-sur-import/tokens.txt+7 tests/golden/types-proj-reserved-sur-import/tree.txt+3 tests/golden/types-proj-reserved-sur-import/types.txt+2 tests/golden/types-proj-reserved-unused-pattern/about.txt+4 tests/golden/types-proj-reserved-unused-pattern/modules.txt+1 tests/golden/types-proj-reserved-unused-pattern/source.jibb+6 tests/golden/types-proj-reserved-unused-pattern/tokens.txt+38 tests/golden/types-proj-reserved-unused-pattern/tree.txt+18 tests/golden/types-proj-reserved-unused-pattern/types.txt+2 tests/golden/types-proj-reserved-unused-sample/about.txt+4 tests/golden/types-proj-reserved-unused-sample/modules.txt+1 tests/golden/types-proj-reserved-unused-sample/source.jibb+4 tests/golden/types-proj-reserved-unused-sample/tokens.txt+25 tests/golden/types-proj-reserved-unused-sample/tree.txt+12 tests/golden/types-proj-reserved-unused-sample/types.txt+2 tests/golden/types-proj-reserved-unused-value/about.txt+4 tests/golden/types-proj-reserved-unused-value/modules.txt+1 tests/golden/types-proj-reserved-unused-value/source.jibb+6 tests/golden/types-proj-reserved-unused-value/tokens.txt+31 tests/golden/types-proj-reserved-unused-value/tree.txt+15 tests/golden/types-proj-reserved-unused-value/types.txt+2 tests/golden/types-proj-reserved-value/about.txt+4 tests/golden/types-proj-reserved-value/modules.txt+1 tests/golden/types-proj-reserved-value/source.jibb+2 tests/golden/types-proj-reserved-value/tokens.txt+12 tests/golden/types-proj-reserved-value/tree.txt+6 tests/golden/types-proj-reserved-value/types.txt+2 tests/golden/types-proj-single-duplicate/about.txt+4 tests/golden/types-proj-single-duplicate/modules.txt+1 tests/golden/types-proj-single-duplicate/source.jibb+1 tests/golden/types-proj-single-duplicate/tokens.txt+23 tests/golden/types-proj-single-duplicate/tree.txt+12 tests/golden/types-proj-single-duplicate/types.txt+8 tests/golden/types-proj-single-field/about.txt+4 tests/golden/types-proj-single-field/modules.txt+1 tests/golden/types-proj-single-field/source.jibb+25 tests/golden/types-proj-single-field/tokens.txt+499 tests/golden/types-proj-single-field/tree.txt+243 tests/golden/types-proj-single-field/types.txt+31 tests/golden/types-proj-single-sample-face/about.txt+4 tests/golden/types-proj-single-sample-face/modules.txt+1 tests/golden/types-proj-single-sample-face/source.jibb+22 tests/golden/types-proj-single-sample-face/tokens.txt+210 tests/golden/types-proj-single-sample-face/tree.txt+117 tests/golden/types-proj-single-sample-face/types.txt+9 tests/golden/types-proj-single-wrapped/about.txt+4 tests/golden/types-proj-single-wrapped/modules.txt+1 tests/golden/types-proj-single-wrapped/source.jibb+26 tests/golden/types-proj-single-wrapped/tokens.txt+208 tests/golden/types-proj-single-wrapped/tree.txt+107 tests/golden/types-proj-single-wrapped/types.txt+5 tests/golden/types-qath-faces/about.txt+4 tests/golden/types-qath-faces/modules.txt+1 tests/golden/types-qath-faces/source.jibb+8 tests/golden/types-qath-faces/tokens.txt+130 tests/golden/types-qath-faces/tree.txt+59 tests/golden/types-qath-faces/types.txt+18 tests/golden/types-qath-holes/about.txt+4 tests/golden/types-qath-holes/modules.txt+1 tests/golden/types-qath-holes/source.jibb+18 tests/golden/types-qath-holes/tokens.txt+178 tests/golden/types-qath-holes/tree.txt+78 tests/golden/types-qath-holes/types.txt+22 tests/golden/types-qath-module-identity/about.txt+4 tests/golden/types-qath-module-identity/module-trees.txt+44 tests/golden/types-qath-module-identity/modules.txt+3 tests/golden/types-qath-module-identity/modules/ui/mid.jibb+4 tests/golden/types-qath-module-identity/modules/ui/one.jibb+7 tests/golden/types-qath-module-identity/modules/ui/two.jibb+4 tests/golden/types-qath-module-identity/source.jibb+15 tests/golden/types-qath-module-identity/tokens.txt+171 tests/golden/types-qath-module-identity/tree.txt+70 tests/golden/types-qath-module-identity/types.txt+18 tests/golden/types-qath-recursive/about.txt+4 tests/golden/types-qath-recursive/modules.txt+1 tests/golden/types-qath-recursive/source.jibb+19 tests/golden/types-qath-recursive/tokens.txt+145 tests/golden/types-qath-recursive/tree.txt+63 tests/golden/types-qath-recursive/types.txt+14 tests/golden/types-record-change-generic/about.txt+1−1 tests/golden/types-record-change-generic/source.jibb−2 tests/golden/types-record-change-generic/tokens.txt+1−25 tests/golden/types-record-change-generic/tree.txt+1−10 tests/golden/types-record-change-generic/types.txt−2 tests/golden/types-record-field-edit-separate/about.txt+4 tests/golden/types-record-field-edit-separate/source.jibb+1 tests/golden/types-record-field-edit-separate/tokens.txt+51 tests/golden/types-record-field-edit-separate/tree.txt+22 tests/golden/types-record-field-edit-separate/types.txt+2 tests/golden/types-record-field-expr-duplicate/about.txt+4 tests/golden/types-record-field-expr-duplicate/source.jibb+2 tests/golden/types-record-field-expr-duplicate/tokens.txt+22 tests/golden/types-record-field-expr-duplicate/tree.txt+9 tests/golden/types-record-field-expr-duplicate/types.txt+8 tests/golden/types-record-field-expr-separate/about.txt+4 tests/golden/types-record-field-expr-separate/source.jibb+1 tests/golden/types-record-field-expr-separate/tokens.txt+25 tests/golden/types-record-field-expr-separate/tree.txt+11 tests/golden/types-record-field-expr-separate/types.txt+2 tests/golden/types-record-field-module-reachable/about.txt+4 tests/golden/types-record-field-module-reachable/module-trees.txt+7 tests/golden/types-record-field-module-reachable/modules.txt+1 tests/golden/types-record-field-module-reachable/modules/ui/lib.jibb+2 tests/golden/types-record-field-module-reachable/source.jibb+2 tests/golden/types-record-field-module-reachable/tokens.txt+11 tests/golden/types-record-field-module-reachable/tree.txt+3 tests/golden/types-record-field-module-reachable/types.txt+8 tests/golden/types-record-field-module-unused/about.txt+4 tests/golden/types-record-field-module-unused/module-trees.txt+10 tests/golden/types-record-field-module-unused/modules.txt+2 tests/golden/types-record-field-module-unused/modules/ui/good.jibb+1 tests/golden/types-record-field-module-unused/modules/ui/unused.jibb+2 tests/golden/types-record-field-module-unused/source.jibb+2 tests/golden/types-record-field-module-unused/tokens.txt+11 tests/golden/types-record-field-module-unused/tree.txt+3 tests/golden/types-record-field-module-unused/types.txt+2 tests/golden/types-record-field-nested-mold/about.txt+4 tests/golden/types-record-field-nested-mold/source.jibb+2 tests/golden/types-record-field-nested-mold/tokens.txt+22 tests/golden/types-record-field-nested-mold/tree.txt+9 tests/golden/types-record-field-nested-mold/types.txt+8 tests/golden/types-record-field-outer-inner/about.txt+4 tests/golden/types-record-field-outer-inner/source.jibb+2 tests/golden/types-record-field-outer-inner/tokens.txt+26 tests/golden/types-record-field-outer-inner/tree.txt+12 tests/golden/types-record-field-outer-inner/types.txt+3 tests/golden/types-record-field-sample-duplicate/about.txt+4 tests/golden/types-record-field-sample-duplicate/source.jibb+1 tests/golden/types-record-field-sample-duplicate/tokens.txt+13 tests/golden/types-record-field-sample-duplicate/tree.txt+7 tests/golden/types-record-field-sample-duplicate/types.txt+8 tests/golden/types-record-field-separate-molds/about.txt+4 tests/golden/types-record-field-separate-molds/source.jibb+2 tests/golden/types-record-field-separate-molds/tokens.txt+33 tests/golden/types-record-field-separate-molds/tree.txt+15 tests/golden/types-record-field-separate-molds/types.txt+3 tests/golden/types-record-field-unused-mold/about.txt+4 tests/golden/types-record-field-unused-mold/source.jibb+2 tests/golden/types-record-field-unused-mold/tokens.txt+15 tests/golden/types-record-field-unused-mold/tree.txt+6 tests/golden/types-record-field-unused-mold/types.txt+8 tests/golden/types-tuple-context-nested/about.txt+1−1 tests/golden/types-tuple-context-nested/types.txt+1−7 tests/golden/types-union-nonwing-subject/about.txt+4 tests/golden/types-union-nonwing-subject/modules.txt+1 tests/golden/types-union-nonwing-subject/source.jibb+82 tests/golden/types-union-nonwing-subject/tokens.txt+593 tests/golden/types-union-nonwing-subject/tree.txt+257 tests/golden/types-union-nonwing-subject/types.txt+45 tests/golden/types-union-pattern-result-controls/about.txt+1−1 tests/golden/types-union-pattern-result-controls/types.txt+1−1 tests/golden/types-union-patterns/about.txt+1−1 tests/golden/types-union-patterns/types.txt+1−1 tests/importer/about.txt+5 tests/importer/small.txt+10 tests/importer/tree.txt+9−2 tests/lib/jibb-bridge.hoon+29−1 tests/lib/jibb-hole-guards.hoon+77 tests/lib/jibb-list-alias-guards.hoon+27 tests/lib/jibb-proj-guards.hoon+124 tests/lib/jibb-qath-fuel.hoon+52 tests/lib/jibb-qath-source.hoon+34 tests/lib/jibb.hoon+1325−991 tests/type-import-diagnostic/nested.txt+1−1 tests/type-import/expected.txt+10 tests/type-list-alias/expected.txt+36 tools/importer-test+1−1 tools/type-hole-guards-test+32 tools/type-list-alias-test+33 tools/type-proj-guards-test+32 tools/type-qath-guards-test+31
docs/compiler.md+10−4
@@ -80,14 +80,16 @@ A backtick constructs a unit when the supplied prelude has the validated standar
8080
8181A 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.
8282
83−A known closed union with two or more arms can be matched when each arm provably covers or excludes each remaining case. The checker first tries whole cases; when a pattern splits a case, it can expand known `?` positions into their two noun values, up to 64 alternatives across the union. Binders retain the original case type, and one arm may bind several refinements of that case. It reports missing alternatives and arms already covered, checks tags by noun value, and supports imported and generic union cases. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. When a cast or known call sample supplies a result type, a known union subject accessed by a wing can propagate that context through whole-case arms and supported finite loobean refinements, including nested cell and list positions. Other partial-pattern context and non-wing subjects remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked.
83+A known closed union with two or more arms can be matched when each arm provably covers or excludes each remaining case. The checker first tries whole cases; when a pattern splits a case, it can expand known `?` positions into their two noun values, up to 64 alternatives across the union. Binders retain the original case type, and one arm may bind several refinements of that case. It reports missing alternatives and arms already covered, checks tags by noun value, and supports imported and generic union cases. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. When a cast or known call sample supplies a result type, a known union subject accessed by a wing, 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.
8484
8585A 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.
8686
87−The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also 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`; deeper, 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.
87+The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also 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`. 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.
8888
8989Self-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.
9090
91+The 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.
92+
9193Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` aura and core evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the opt-in `+golden-types-with-reader-diagnostics` accepts unchanged structured reader results and reports definite aura or core errors at their imported mold use sites, when the import and supplied input are unique. Ordered replay covers direct and nested cell samples, record and function casts, and non-generic same-module aliases; it stops at an unsupported prefix, cycle or shadowing failure. Union molds, generic applications, transitive modules and unsupported reader outcomes still report generic limitations. Replay repeats inference and may add work; this entry point remains partial. Existing checker entry points continue treating failed imports as unsupported. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
9294
9395The partial report can diagnose certain non-gate value dependency cycles, including cycles through gates. It requires an explicit atom or loobean result cast and a syntactically proven dependency group with unshadowed simple samples; it identifies the value and a dependency site. Untyped results, branches, nested definitions, qualified wings and complex samples remain unsupported. The proof constructs an additional dependency graph. One 24-case recursive/generic eval run took 19.7 s with it and 18.6 s before it, including startup; these single runs do not isolate the graph cost.
@@ -96,7 +98,7 @@ The source-backed `+api-path-analysis-source` is a separate partial analysis, no
9698
9799`+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.
98100
99−The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `lure`, `weld`, `snoc`, `turn`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `cork`, `corl`, `cury` and `curr`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. List-dependent prelude mold aliases remain unsupported because their templates are prepared before this injection. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. A dedicated trusted internal-prelude preparation path also supplies an atom-constrained private comparison scheme for a Jibb-written `gth` wrapper. 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. Addition, decrement and length remain unavailable until arithmetic constraints distinguish their results from loobeans. The partial checker resolves its supported source shape, preserves its public name, and rejects ordinary imports of the private internal path. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
101+The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `cork`, `corl`, `cury` and `curr`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. A dedicated trusted internal-prelude preparation path also supplies an atom-constrained private comparison scheme for a Jibb-written `gth` wrapper. 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. Addition, decrement and length remain unavailable until arithmetic constraints distinguish their results from loobeans. The partial checker resolves its supported source shape, preserves its public name, and rejects ordinary imports of the private internal path. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
100102
101103`+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.
102104
@@ -109,16 +111,20 @@ And the design notes:
109111| 3. The parser | Why recursive descent (the grammar is LL(2) after the layout pass), the EBNF rule by rule with the node each gives, what the EBNF leaves out and how it's filled in, spacing, and where each error points, with its message |
110112| 4. Printed formats | The token, tree and error formats the golden files hold |
111113
114+The partial checker reserves `proj` in module, local, sample, pattern and import bindings, including bindings inside unsupported source; a field, tag or path segment may still have that spelling. With a known expected record type, it checks selected explicit `(proj record)` calls over closed, uniquely faced records, preserving the source expression, its type, the result type and field axes in the checked interface. Imported and private-prelude dependencies retain the source needed to lower those plans. The checker does not yet lower or execute them. It supports selecting one or more fields in their original order; a single selected field keeps its face and uses one source axis. Reordered fields, unknown or open record spines, some nested contexts and recursive groups with projections remain unsupported. A directional fit of a wider faced record fails closed instead of inserting a projection, including within supported list, unit and record positions. To limit repeated work, record-spine proofs are reused along the same closed spine and stop at 1,024 fields; field boundaries and the special handling of positional calls reset the appropriate proof. Prepared interfaces and their source remain trusted host inputs.
115+
112116## The tree
113117
114118Every node is `[%tag at=span …]`, so `+span-of` finds its span in one place; the few that aren't say so in the `%tree` chapter. The kinds of node:
115119
116120- **Module**: imports (`%sur` for `/-`, `%mark` for `/%`, `%jibb` for `/=`), then definitions (`%mold` for `+$`, `%value` for `++`).
117121- **Expressions** (`expr`): `%lit`, `%str`, `%path`, `%qath`, `%wing`, `%change`, `%pair`, `%unit`, `%group`, `%list`, `%tuple`, `%gate-wide`, `%ctor`, `%call`, `%gate`, `%cast`, `%trace`, `%branch`, `%crash`, and `%body` for an indented body, with its local definitions if it has any.
118−- **Molds as written** (`shape`): `%aura`, `%noun`, `%void`, `%flag`, `%const`, `%ref`, `%tvar`, `%path`, `%apply`, `%cell`, `%union`, `%fn`, `%generic`. A `%union` spans its first through last case and has no lead token; a single case is its own mold. `%generic` spans from the `|$` after a `+$` name through its body.
122+- **Molds as written** (`shape`): `%aura`, `%hole`, `%noun`, `%void`, `%flag`, `%const`, `%ref`, `%tvar`, `%path`, `%apply`, `%cell`, `%union`, `%fn`, `%generic`. A `%hole` retains the span of `_`; an inferred typed path segment retains that span separately from its enclosing segment. A `%union` spans its first through last case and has no lead token; a single case is its own mold. `%generic` spans from the `|$` after a `+$` name through its body.
119123- **Samples, fields and patterns**: a sample is `%bind`, `%face`, `%pun`, `%cell` or `%bare`, since a bare name binds anywhere in a sample; a pattern is `%lit`, `%str`, `%any`, `%bind` or `%cell`.
120124- **Literals** (`lit`) keep the form they matched, their aura and value, and their text as written, which the printers show.
121125
126+The parser accepts type holes. The partial checker records each ordinary hole with its span and validates the obligations created in a value or local definition before generalization. A solved concrete type or an explicitly written in-scope capital resolves a hole; a later use cannot repair it. Independent decimal holes may default to `@ud` when the surrounding inferred type is gate-free; variables reachable from the environment or written capitals are protected from premature defaulting. Structural named-mold holes are diagnosed at their source, while complex named molds, inferred path segments, recursive groups with holes and unresolved constraints remain unsupported. Partial prelude and API interfaces cannot silently export unchecked holes. A separate syntax-tree pass reports duplicate names within a written record at both field sites, including in unused definitions; nested and separate records have independent scopes.
127+
122128The tree keeps everything the checker needs to report an error at the code as written: open and closed brackets give the same node, but every node keeps its span.
123129
124130## Positions and errors
docs/development.md+9−2
@@ -66,7 +66,10 @@ git clone https://github.com/urbit/tools /root/src/tools
6666| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
6767| `tools/type-poke-test` | Checks source-backed prelude and poke-only API reports against `tests/type-poke/expected.txt` under eval |
6868| `tools/type-api-paths-test` | Checks partial API path analysis with real todo mark samples against `tests/type-api-paths/expected.txt` under eval |
69−| `tools/type-api-paths-test` | Compares partial API path analysis, including real todo marks, with its golden report under eval |
69+| `tools/type-hole-guards-test` | Runs the shared hole-defaulting and API interface guards under eval; the same checks run on the ship |
70+| `tools/type-list-alias-test` | Runs the shared prelude list-alias and provenance guards under eval and on the ship |
71+| `tools/type-qath-guards-test` | Runs source-provenance, recursive unfolding and face guards under eval and on the ship |
72+| `tools/type-proj-guards-test` | Runs projection evidence, name-scope and dependency guards under eval and on the ship |
7073| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary and duplicate-source rejection against `tests/type-module-scope/expected.txt` under eval |
7174| `tools/clay-fixtures` | Syncs `my-app`, builds its example `/sur` files and marks through Clay, checks selected mold and mark projections and the partial checker, and records Ford and mark subject shapes on the fake ship |
7275| `tools/hoon` | Evaluates Hoon with the library in scope, as `tools/hoon '(golden /a/b/jibb (crip "++ main view"))'`; `--cord name=file` binds a file's text, `-f` reads the expression from a file |
@@ -89,9 +92,13 @@ tools/type-import-diagnostic-test # direct structured reader diagnostics match
8992tools/type-mark-test # mark/checker bridge golden report matches
9093tools/type-poke-test # source-backed poke/API bridge report matches
9194tools/type-api-paths-test # partial API path analysis report matches
92−tools/type-api-paths-test # partial API path analysis report matches
95+tools/type-hole-guards-test # hole defaulting and API guards pass
96+tools/type-list-alias-test # prelude list-alias guards pass
97+tools/type-qath-guards-test # qath source and unfolding guards pass
98+tools/type-proj-guards-test # projection evidence and scope guards pass
9399tools/type-module-scope-test # module/prelude scope golden report matches
94100tools/hoon check-spans-test # prints <<>>
101+tools/hoon itype-unify-test # type-unification controls pass
95102tools/testdata/selftest # 22 checks, 0 failed
96103tools/doc-blocks docs/spec # every jibb block has its case
97104tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
docs/open-questions.md+15−5
@@ -18,7 +18,7 @@ On 2026-10-30, @iko adopted gate-free `eq` arguments and map and set keys, treat
1818
1919## Questions milestone 2 raises
2020
21−Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking it against the doc's examples, and building the checker. The numbering is retained so existing references stay valid. Questions 3, 18, 25, 26, 27 and 28 remain open; the other questions are settled.
21+Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking it against the doc's examples, and building the checker. The numbering is retained so existing references stay valid. Questions 3, 18 and 33 remain open; the field-order detail in question 32 is being clarified. The other questions are settled.
2222
23231. **Settled: how the prelude identifies jetted functions.** On 2026-10-30, @iko said the prelude functions have working Jibb implementations, and the compiler recognizes their shapes and uses the Hoon versions so jets can fire.
24242. **Settled: how the prelude keeps helpers private.** On 2026-10-30, @iko chose a separate internal prelude module imported by the prelude, without exposing the imported helpers.
@@ -46,13 +46,23 @@ Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking i
4646
474724. **Settled: how the internal prelude provides `poke`.** On 2026-10-31, @iko chose to define `poke` in the source-backed private internal prelude module and re-export it through the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values. This settles `poke`; it does not decide the representation of `ask` or `qath`.
4848
49−25. **How the prelude provides `ask` and `qath`.** The spec calls both opaque, but Jibb has no syntax for a sealed type export. Following the decision for `poke`, @iko has been asked whether these should also be ordinary transparent types defined in the internal prelude, or whether they should retain opacity through a compiler mechanism. Their representations remain undecided.
49+25. **Settled: how the prelude provides `ask` and `qath`.** On 2026-10-31, @iko chose ordinary transparent types defined in the internal prelude and re-exported normally, as for `poke`. Callers may construct and inspect their values.
5050
51−26. **The `step` example's `at` binder.** The Grammar's `describe` pattern `[t %sent at]` binds `at`, but the agreed prelude inventory includes Hoon's `at` from section 4b, and names may not shadow the prelude. The current incomplete prelude omits `at`, so its partial inference does not reveal this conflict. @iko has been asked whether to rename the binder, rename the prelude gate, or change the shadowing rule.
51+26. **Settled: the `step` example's `at` binder.** On 2026-10-31, @iko chose to rename the `describe` pattern binder to `sent-at`, keeping Hoon's `at` in the prelude and the no-shadowing rule.
5252
53−27. **Duplicate fields in a Jibb-written record.** The Grammar rejects duplicate field names in imported Hoon records, but does not say what `+$ item [name=@t name=@ud]` means when written in Jibb. @iko has been asked whether to reject it or permit it and select the first field. A provisional bounded validation experiment declines the shape while this is open.
53+27. **Settled: duplicate fields in a Jibb-written record.** On 2026-10-31, @iko chose to reject duplicate field names, as for imported Hoon records.
5454
55−28. **Arithmetic on loobeans.** The Grammar says `add` takes and returns one atom-constrained type, and `?` contains only 0 and 1. Instantiating that type as `?` would let `(add %.n %.n)` produce 2 outside the claimed result mold. @iko has been asked whether arithmetic rejects loobean inputs or instead widens its result. The partial checker does not export `add` or `dec` while this is unresolved; comparison can safely accept loobeans because it returns `?` independently of its operand type.
55+28. **Settled: arithmetic on loobeans.** On 2026-10-31, @iko chose to reject loobean operands for arithmetic. Comparison may still accept loobeans and returns `?`. The checker needs to retain this constraint through inference, generalization and instantiation before it exports `add` or `dec`.
56+
57+29. **Settled: printing the arithmetic atom constraint.** On 2026-10-31, @iko chose `where A is an atom other than ?` for a generic arithmetic type whose atom variable excludes loobeans.
58+
59+30. **Settled: a hole inferred as a generic variable.** On 2026-10-31, @iko said a hole resolved to an explicitly written type variable counts as inferred: in `++ id |= x=A ^- _ x`, the result hole is `A`. Named molds must determine their own holes without constraints from later uses; an unconstrained hole is an error.
60+
61+31. **Settled: uses of a value with a hole.** On 2026-10-31, @iko said a value definition must determine its own holes; another definition's use cannot fix an otherwise unresolved hole. For example, `++ id |= x=_ x` remains an error even if a later definition calls `id` with a cord.
62+
63+32. **Partly settled: type-directed record projection.** On 2026-10-31, @iko chose an explicit `(proj record)` whose expected result type selects the fields. There is no automatic projection, and `proj` is reserved against definitions and imports. The result contains exactly the fields of its expected type. Whether the result may reorder fields from the source remains open.
64+
65+33. **Watching a request with unknown provenance.** An island cannot watch an API case that needs a separate scry path, but `ask` is transparent and a request can be constructed, selected or passed through a gate. If the checker cannot prove whether a request is watchable, must it reject the watch, or can a runtime check decide? Asked @iko on 2026-10-31; proposed: require proof at compile time, so the stated island restriction holds before execution.
5666
5767## Grammar questions never put to the doc's author
5868
docs/prelude-inventory.md+4−4
@@ -4,9 +4,9 @@ This is a working inventory, not a completed prelude interface. It lists top-lev
44
55The source is the fake ship's `%base` `/sys/hoon.hoon` (Hoon version 135), read through Clay with `tools/ship scry /cx/=base=/sys/hoon/hoon --raw`. SHA-256: `ef538ced0877230f02ff86f9fb7a0abc6833bb1cf0e8675742b4d6ce478fcc92`. It differs in bytes from [upstream Hoon at the inspected commit](https://github.com/urbit/urbit/blob/5a187fededc4582a34fcd6055c67bb63e0917b94/pkg/arvo/sys/hoon.hoon); verify against the actual target ship when updating this inventory.
66
7−The vendored prelude defines `poke` in its private internal module and re-exports it as a transparent type. The partial checker resolves its supported source shape and a narrow imported API constructor; complete checking of the private body, other API shapes, effect lowering and runtime execution remain unfinished. `ask` and `qath` are not yet defined there.
7+The vendored prelude defines `poke` in its private internal module and re-exports it as a transparent type. The partial checker resolves its supported source shape and a narrow imported API constructor; complete checking of the private body, other API shapes, effect lowering and runtime execution remain unfinished. `qath` is defined there as a transparent recursive knot sequence and re-exported by the public prelude; the partial checker supports its named identity, selected construction and matching, and static application-path literals. `ask` is not yet defined there.
88
9−The prelude also declares the generic `cmd` mold exactly as in Overview, Effects. The partial checker infers its five cases and independent message types in the supported examples; complete module checking and backend validation remain outstanding. The related `sub` declaration awaits the `ask` representation decision.
9+The prelude also declares the generic `cmd` mold exactly as in Overview, Effects. The partial checker infers its five cases and independent message types in the supported examples; complete module checking and backend validation remain outstanding. The related `sub` declaration awaits the source representation and checking of `ask`.
1010
1111Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold generators, and need individual inspection. Jibb's loobean `not` and Hoon's bitwise `not.bit` are distinct. Parser helpers outside 3g are excluded from the intended prelude except the specifically listed `slav` and `slaw`; the raw candidates below still need to be classified.
1212
@@ -26,13 +26,13 @@ The source-backed `gth` gate calls a compiler-supplied private comparison interf
2626
2727`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
2828
29−The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `both`, `clap`, `clef`, `drop` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
29+The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `bond`, `both`, `clap`, `clef`, `drop` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation remains outstanding for all of them.
3030
3131| Name | Hoon behavior | Jibb status |
3232| --- | --- | --- |
3333| `biff` | Applies a gate returning a unit to a present value; absent stays absent. | Written |
3434| `bind` | Applies a gate to a present value and wraps the result; absent stays absent. | Written |
35−| `bond` | Calls a fallback trap for an absent unit, otherwise returns its value. | Missing |
35+| `bond` | Calls a fallback trap for an absent unit, otherwise returns its value. | Written and inferred as a curried gate; backend validation remains outstanding |
3636| `both` | Returns a unit of both values when both units are present. | Written |
3737| `clap` | Returns the present unit if only one is present; combines both values with a gate if both are present. | Written with one shared type for both units and the combining gate, as @iko chose |
3838| `clef` | Applies a gate returning a unit when both inputs are present; otherwise returns an absent unit. | Written |
docs/prompts/milestone-2.md+4−2
@@ -59,8 +59,9 @@ And from the plan's Risks:
5959The rules are scattered across the tabs. This is a map of them, not a replacement: read each in place, and where this summary and the doc differ, the doc is right.
6060
6161**Types and inference** (Grammar: Molds, Modules, Runes, Expressions; Decisions: Inference, Type variables, Sample names, Inline gates)
62−- Hindley–Milner with aura variables: "every expression has a principal type, and there is no general subtyping". A specific atom fits `@`, a specific noun fits `*`, and a more specific aura fits an ancestor in its Hoon aura family, each only in that direction; the reverse needs a check.
62+- Hindley–Milner with aura variables: "every expression has a principal type, and there is no general subtyping". A specific atom fits `@`, a specific noun fits `*`, and a more specific aura fits an ancestor in its Hoon aura family, each only in that direction; the reverse needs a check. Explicit `proj` is a type-directed operation.
6363- `@` means any atom, independently at each occurrence. A specific atom such as `@ud` fits where `@` is expected; an `@` value needs a check to fit `@ud`. `@ud` and `@ux` also fit `@u`, and `@tD` fits `@t`, following Hoon aura families; the reverse needs a check. Distinct specific auras remain distinct. `add` takes `[A A]` and returns `A`, with an atom constraint inferred for the shared type variable.
64+- The reserved, explicit `(proj record)` selects fields according to its expected result type. The checker records the projection and lowering evaluates the source once and builds that layout. A direct call does not insert a projection, and a module cannot define or import another `proj`.
6465- Faces are part of record types: `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced one and take its face, so `[0 0]` fits `[x=@ud y=@ud]`. A single-item cell `[a]` is `a`; an empty `[]` is an error.
6566- Type variables are capitals, "generalized per `++`". A capital in a local `++` shares the enclosing `++`'s variable of that name if the enclosing `++` also uses it; otherwise the local `++` introduces and generalizes its own variable. For example, `++ inner |= y=A y` shares `A` with an enclosing gate whose sample is `x=A`, but generalizes its own `A` if the enclosing `++` does not use `A`. A different type takes a different capital. A body cannot force two distinct capitals to be equal; use the same capital where a type is shared. "A type variable used where an atom is required gains an atom constraint", so `++ clamp |= [lo=A hi=A n=A]`, calling `gth` and `max`, works on any one aura; "It can become nothing more specific: a body that makes `A` a `@ud` or a list is an error." Names "may refer to each other in any order", so infer `++` definitions in dependency order, a group of mutually recursive ones together.
6667- The checker infers a gate-free constraint for `eq` arguments and map and set keys and retains it when a type variable is generalized. The requirement applies recursively to nested values; union-case matching treats gates as opaque. Print a gate-free constraint as `$-([A A] ?) where A contains no gates` and an atom constraint as `$-([A A] A) where A is an atom`; separate multiple clauses with commas, as `where A is an atom, B contains no gates`.
@@ -68,7 +69,8 @@ The rules are scattered across the tabs. This is a map of them, not a replacemen
6869- A sample's mold may be left out: every bare name in a sample binds, at any depth, as in `|=(p title.p)` "when the call fixes the type", `|= [a=@ b]` and `|=(m ~)`.
6970- Generic molds: `+$ result |$ [V E]` with cases below, applied as `(result V E)`; `|$` goes right after a `+$`'s name, and the prelude's `cmd` and `sub` use `|$ [M]`.
7071- `!!` is the empty mold, and as an expression it has any type. `*` is the noun type, not a type variable; generic positions such as the keys in `each` and `table` use a capital. A value of a more specific noun type can be used where `*` is expected.
71−- `poke` is transparent and re-exported from the source-backed internal prelude. `ask` and `qath` are opaque, built only by derived gates, `pure` and application-path literals.
72+- `_` is an inferable hole wherever a mold can appear, including an inferred path-segment aura. A hole resolved to an explicitly named generic variable is resolved; an unconstrained hole is an error. A named mold or value definition must determine its own holes without constraints from later uses.
73+- `poke`, `ask` and `qath` are transparent types defined in the internal prelude and re-exported normally. Derived gates and `pure` also construct requests; application-path literals have type `qath`.
7274- The Literals table gives every other literal its type: `0x1f` a `@ux`, ships `@p`, dates `@da`, durations `@dr`, `~.knot` a `@ta`, strings `@t`, `` `x `` a `(unit A)`, `~[…]` a `(list A)`, `gap+%s2` the pair `[%gap %s2]`, `/posts/~zod` a `path`, `%/blog` a `qath`.
7375
7476**Tags, `~`, numbers and cells wait for their context** (Grammar: Tag resolution, Literals by context)
docs/spec/core-language.md+2−1
@@ -71,7 +71,7 @@ axis = digit { digit } ; (* at least 1 *)
7171
7272## Lowering from Jibb
7373
74−Types, faces and casts leave nothing behind; everything else lowers by these rules.
74+Types, faces and casts leave nothing behind. Everything else lowers by these rules.
7575
7676| Jibb | Core language |
7777| --- | --- |
@@ -82,6 +82,7 @@ Types, faces and casts leave nothing behind; everything else lowers by these rul
8282| `gap+%s2` | `(cons %gap %s2)` |
8383| `/posts/~zod`, `%/blog/(slug)` | A list of knots, typed segments printed by their aura's native; the runtime adds the base path to an application path |
8484| `title.p`, `space.theme.theme` | `slot` at the field's axis, nested for longer wings |
85+| `(proj record)` | Apply a `lam` to the source once; its body constructs the expected record from the required fields using `slot` and `cons`, discarding extra fields |
8586| `card.card`, an import | The qualified name `components/card:card` |
8687| `m(draft=t error=~)` | One `edit` per item, in order: `(edit 7 (edit 6 m t) ~)` |
8788| `f a b c` | `(app f (cons a (cons b c)))`: the arguments are the sample |
docs/spec/decisions.md+6−2
@@ -26,17 +26,19 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
2626| Definitions | `++` for values, `+$` for molds; no `=/` | Decided |
2727| Unions | No `$?`: a `+$` with its cases on the lines below is a union, so every union written in Jibb has a name; one case is just that mold; a mold that isn't a union counts as a union of one case for tags and `\|=%tag`; a generic's `\|$` comes right after the `+$`'s name; tags anywhere; cases differ as nouns, with `?` treated as the two atoms `%.y` and `%.n`, disjoint from cells and overlapping constants 0 and 1, and `!!` or any cell with an empty position disjoint from every case; a tag literal or `~` waits for its union, and an unresolved one is an error | Decided 2026-10-30 |
2828| Printed unnamed unions | Print the cases separated by spaces, as `%approve %deny`; this is print-only, not Jibb syntax | Decided 2026-10-30 |
29−| Printed type constraints | Print an atom constraint as `$-([A A] A) where A is an atom` and a gate-free constraint as `$-([A A] ?) where A contains no gates`; separate multiple clauses with commas, as `where A is an atom, B contains no gates` | Decided 2026-10-30 |
29+| Printed type constraints | Print an atom constraint as `$-([A A] A) where A is an atom`, an arithmetic atom constraint as `where A is an atom other than ?`, and a gate-free constraint as `$-([A A] ?) where A contains no gates`; separate multiple clauses with commas, as `where A is an atom, B contains no gates` | Decided 2026-10-31 |
3030| Branching | `?-` only, loobeans included; exhaustive, with explicit catch-alls; covered arms are errors; failures say `!!` | Decided 2026-10-29 |
3131| Equality and negation | The gates `eq` and `not`, with Hoon's bitwise `not` exposed as `not.bit`; `eq`'s arguments and map and set keys contain no gates, even nested; the checker infers and generalizes that constraint; union matching never inspects a gate to distinguish cases | Decided 2026-10-30 |
3232| Special rules | No built-ins; type-directed rules are welcome, each listed in the Grammar tab | Decided 2026-10-29 |
3333| Inference | Hindley–Milner with aura variables; `@` is any atom, a specific atom fits `@` and a more specific aura fits an ancestor in its Hoon aura family, but each reverse needs a check, and repeated atom-constrained capitals give the same type; a number takes `@ud` only where its `++` isn't generic over its aura; distinct specific auras remain distinct; faces are part of record types, and an unnamed position can take a face but two different faces don't unify; principal types | Decided 2026-10-30 |
34−| Effects | The library unions `cmd` and `sub`; `poke` is a transparent type, and requests are opaque, from derived gates and `pure`; islands read agents only by watching; replies get full state, and diffs take a fold; timers carry the time; `%who` gives the owner's `@p`; nacks reach replies as text | Decided 2026-10-31 |
34+| Effects | The library unions `cmd` and `sub`; `poke`, `ask` and `qath` are transparent types defined in the internal prelude and re-exported normally; derived gates and `pure` also construct requests; islands read agents only by watching; replies get full state, and diffs take a fold; timers carry the time; `%who` gives the owner's `@p`; nacks reach replies as text | Decided 2026-10-31 |
3535| Poke representation | The source-backed private internal prelude module defines `poke`, and the public prelude re-exports it as an ordinary transparent type. Ordinary modules can construct and inspect its values | Decided 2026-10-31 |
3636| Agent APIs | `/ui/api/<agent>.jibb` with `+$ poke` and `+$ paths`, over the agent's mark types; a case is a name, a path and a type, with `(facts full diff …)` for diffs, told apart by mark; an optional scry path, for pages; an island watching such a request has a type error; typed segments by aura | Decided 2026-10-30 |
3737| Mark names | Any name: `/%` names types after marks, and constructors poke with their type's mark; no alias marks | Decided 2026-10-26 |
3838| Derived gates | API files and stores give a constructor per poke type and a checked request per path or store state; clashing names are errors, including a derived name that clashes with an import face | Decided 2026-10-30 |
3939| Hoon types | A fixed translation table; `map`, `set`, `qeu`, `jar`, `jug` by name; `mop` as `(mop K V)`, read with `on`; imported `$%`, `$?` and `$^` cases must differ as nouns, and records with duplicate field names are errors where used; unused molds skipped | Decided 2026-10-30 |
40+| Record fields | Duplicate field names in a Jibb-written record are an error, as they are in an imported Hoon record | Decided 2026-10-31 |
41+| Record projection | The explicit type-directed operation `proj` takes a record and uses its expected result type to select its fields; no projection is inserted automatically. `proj` is reserved and cannot be defined or imported under that name. The result has exactly the fields declared by its type | Decided 2026-10-31 |
4042| Layout | Indentation; juxtaposed calls; a bracket open at line end takes one item per line, with no closer | Decided |
4143| Elements | Ordinary gates; containers take attribute lists; `stack` switches at `wide`; `el` adds attributes and wins; headings 1 to 6; `form` sends on Enter, the innermost when nested; `image` from an application path, sized from the file, or a sized URL; no focus control for now | Decided 2026-10-29 |
4244| Long calls | One argument per line inside parentheses | Decided |
@@ -44,6 +46,7 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
4446| Empty mold | `!!`, with no values; the expression has any type; pages are `(element !!)`, which keeps islands out of islands | Decided 2026-10-29 |
4547| Noun mold | `*` is the noun type, not a type variable; use a capital for a generic type; a value of a more specific noun type can be used where `*` is expected | Decided 2026-10-30 |
4648| Type variables | Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name if the enclosing `++` also uses it; otherwise it is introduced and generalized locally; a different type takes a different capital; a body cannot force distinct capitals to be equal, so a shared type uses the same capital; one used where an atom is required gains an inferred atom constraint, and cannot be fixed to a more specific type in its body | Decided 2026-10-30 |
49+| Partial type annotations | `_` may appear wherever a mold may appear and marks that part of the type for inference; a hole inferred as a named type variable is resolved; an unconstrained hole is an error, and a named mold or value definition must determine its own holes without constraints from later uses | Decided 2026-10-31 |
4750| Loobean mold | `?`, switched with `?-` | Decided 2026-10-26 |
4851| Defaults | None | Decided |
4952| Modules | Records, not cores | Decided |
@@ -52,6 +55,7 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
5255| Binding patterns | In `?-` arms; the last position binds the rest | Decided 2026-10-29 |
5356| Text | Strings are written only as `"…"` and are always cords; tapes come from `trip`; `{…}` prints by aura, a bare `@` as `@ud`, and an atom whose aura its `++` is generic over is an error; `print-date` prints Urbit-style to the minute in the theme's zone, from jibb-dev's zone table; numbers keep Hoon's form | Decided 2026-10-30 |
5457| Auras | Specific auras stay distinct; `@` is any atom, a more specific aura fits an ancestor in its Hoon aura family one way, with the reverse requiring a check, and shared atom-constrained type variables preserve the same aura | Decided 2026-10-30 |
58+| Loobean arithmetic | Arithmetic rejects loobean operands; comparison may accept them and returns `?` | Decided 2026-10-31 |
5559| Crashes | As in Hoon; an island keeps its model and shows the standard notice; a failing page, or one rendering a control outside an island, gets Jibb's error page; no render limit, so an endless render stalls the ship | Decided 2026-10-29 |
5660| Refinement types | None | Decided |
5761| Imports | `/-`, `/%` (a mark's type, with no face) and `/=`; no `/+`; cycles are errors | Decided 2026-10-29 |
docs/spec/grammar.md+11−10
@@ -91,7 +91,7 @@ Imports come first:
9191/= card /ui/components/card :: a Jibb module
9292```
9393
94−An imported Hoon record with duplicate field names is an error where used; imported union cases must differ as nouns. `/%` names a type after its mark, so it takes no face, and any mark name works; Hoon's `/%` binds the mark's core instead. Derived constructors such as `todo-action.todo` supply the agent and mark, so code never writes one. API modules re-export their `/%` types, not `/-` faces or `/=` modules. Import cycles are errors.
94+An imported Hoon record with duplicate field names is an error where used; imported union cases must differ as nouns. `/%` names a type after its mark, so it takes no face, and any mark name works; Hoon's `/%` binds the mark's core instead. Derived constructors such as `todo-action.todo` supply the agent and mark, so callers need not write those details. API modules re-export their `/%` types, not `/-` faces or `/=` modules. Import cycles are errors.
9595
9696## Modules
9797
@@ -118,22 +118,23 @@ Every other name is free.
118118
119119## Molds
120120
121−A mold is only a type: never called on a noun, and with no default. Types are inferred, Hindley–Milner with aura variables: every expression has a principal type, and there is no general subtyping. These one-way widenings are allowed: a value of a specific atom type fits `@`, a value of a specific noun type fits `*`, and a more specific aura fits an ancestor in its Hoon aura family; the reverse of each widening needs a check.
121+A mold is only a type: never called on a noun, and with no default. Types are inferred, Hindley–Milner with aura variables: every expression has a principal type, and there is no general subtyping. These one-way widenings are allowed: a value of a specific atom type fits `@`, a value of a specific noun type fits `*`, and a more specific aura fits an ancestor in its Hoon aura family; the reverse of each widening needs a check. Records can also be projected explicitly, as described below.
122122
123−- **Atoms**: `@` is any atom, regardless of aura; auras such as `@ud`, `@t`, `@p` and `@da` are specific atom types. An `@ud` value fits where `@` is expected, but an `@` value needs a check to fit `@ud`. A more specific aura also fits an ancestor in its Hoon aura family: `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. Distinct specific auras remain distinct; sharing an ancestor does not make them unify. Each bare `@` independently accepts any atom: it is not an aura variable. Atoms that must share a type take one capital, as `[lo=A hi=A]`, with the atom constraint inferred from the body. `add` takes `[A A]` and returns `A`, with `A` constrained to atoms, so `(add n 1)` with `n=@ud` is a `@ud`. `?` is a loobean.
123+- **Partial annotations**: `_` may appear wherever a mold may appear. It marks a part of the type for the checker to infer, so a type annotation can specify only the parts it needs to. A hole inferred to be a named type variable is resolved: in `++ id |= x=A ^- _ x`, the result hole is `A`. An unconstrained hole is an error. A named mold or value definition must determine its own holes: `+$ box [item=_]` and `++ id |= x=_ x` do not determine their holes, and later uses cannot fix them.
124+- **Atoms**: `@` is any atom, regardless of aura; auras such as `@ud`, `@t`, `@p` and `@da` are specific atom types. An `@ud` value fits where `@` is expected, but an `@` value needs a check to fit `@ud`. A more specific aura also fits an ancestor in its Hoon aura family: `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. Distinct specific auras remain distinct; sharing an ancestor does not make them unify. Each bare `@` independently accepts any atom: it is not an aura variable. Atoms that must share a type take one capital, as `[lo=A hi=A]`, with the atom constraint inferred from the body. `add` takes `[A A]` and returns `A`, with `A` constrained to atoms, so `(add n 1)` with `n=@ud` is a `@ud`. Arithmetic rejects loobean operands: `?` contains only 0 and 1, while an arithmetic result need not. Comparison may take loobeans and returns `?`.
124125- **Constants**: `%add`, `~` and the loobeans have one value each.
125−- **Records and tuples**: `[text=@t done=?]`, `[@t ?]`. An empty `[]` is an error. Faces are part of the type, so `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced position and take its face, so `[0 0]` fits `[x=@ud y=@ud]`; two different faces don't unify. A record too long for one line can leave its `[` open, with one field per deeper line, as an expression's bracket does.
126+- **Records and tuples**: `[text=@t done=?]`, `[@t ?]`. An empty `[]` is an error. Duplicate field names in a record are an error. Faces are part of the type, so `[a=@ b=@]` and `[x=@ y=@]` don't unify. An unnamed position can unify with a faced position and take its face, so `[0 0]` fits `[x=@ud y=@ud]`; two different faces don't unify. The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type: `^- [x=@ud y=@ud] (proj wider)`, or `(f (proj wider))` when `f` expects that record. The source is evaluated once, and the result contains exactly the fields in the expected layout. No projection is inserted for a direct call. `proj` is reserved: a module cannot define or import another name `proj`. A record too long for one line can leave its `[` open, with one field per deeper line, as an expression's bracket does.
126127- **Unions**: a `+$` with several cases below it. Every union written in Jibb has a name, so one used in a field, a sample, a cast, a gate's mold or an argument gets its own `+$`; only imports bring in unions without one. Tags take their union from context, as Tag resolution describes. Cases must differ as nouns: inhabited cases must differ at some position of their right-nested cells, where one is an atom and the other a cell, or both are different constants. `*`, type variables and molds that can be either, such as `(list A)`, can overlap atoms and cells. `?` counts as the two atoms `%.y` and `%.n`: it is disjoint from cells and overlaps the constants 0 and 1. The empty mold `!!` is disjoint from every case; a cell with an empty position at any depth is itself empty and is also disjoint from every case. A union whose cases don't all differ is rejected.
127128- **Containers**: `(list A)`, `(unit A)`, `(set A)`, `(map K V)`, `(mop K V)`, `(qeu A)`, `(jar K V)`, `(jug K V)`.
128129- **Gates**: `$-(A B)`. Type variables are capitals, generalized per `++`. A capital in a local `++` shares the enclosing `++`'s variable of the same name if the enclosing `++` also uses it; otherwise the local `++` introduces and generalizes its own variable. For example, `++ inner |= y=A y` uses the enclosing `A` when its enclosing gate has a sample `x=A`; if the enclosing `++` does not use `A`, `inner` generalizes its own `A`. Use another capital for a different type. A body can't force two distinct capitals to be equal; use the same capital wherever a type must be shared. A type variable used where an atom is required gains an atom constraint, so `++ clamp |= [lo=A hi=A n=A]`, whose body calls `gth` and `max`, works on any one aura. It can become nothing more specific: a body that makes `A` a `@ud` or a list is an error.
129−- **Paths**: `/todos` is constant, `/` empty, and `/todo/[id=@ud]` typed by aura. `%/blog/(slug)` is an `qath`, checked against routes and static files.
130+- **Paths**: `/todos` is constant, `/` empty, and `/todo/[id=@ud]` typed by aura. A typed segment may use `_` for an inferred aura; it still must resolve to an aura that the path rules can print and parse. `%/blog/(slug)` is an `qath`, checked against routes and static files.
130131- **Generic molds**: `+$ result |$ [V E]` with cases below; `|$` goes only right after a `+$`'s name.
131132- **Noun**: `*`, not a type variable; use a capital for a generic type. A value already known to have a more specific noun type, such as `@ud`, can be used where `*` is expected. **Empty**: `!!`.
132133- **Pokes**: `poke` is defined in the source-backed private internal prelude module and re-exported by the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values.
133−- **Opaque**: `ask` and `qath`, built only by derived gates, `pure` and application-path literals. `(facts full diff …)` appears only in an API file's `paths`.
134+- **Effect and application-path types**: `poke`, `ask` and `qath` are transparent types, defined in the internal prelude and re-exported normally; callers can construct and inspect their values. Derived gates and `pure` also construct requests, and application-path literals have type `qath`. `(facts full diff …)` appears only in an API file's `paths`.
134135- **Identity**: recursive molds go by name and module.
135136
136−`eq`'s arguments and map and set keys must contain no gates, even nested inside another value. The checker infers this gate-free constraint on type variables and retains it when generalizing a `++`, so a generic helper that calls `eq` stays generic over gate-free types. Printed types show the constraint as `$-([A A] ?) where A contains no gates`. An inferred atom constraint prints as `$-([A A] A) where A is an atom`. Multiple clauses are comma-separated, as `where A is an atom, B contains no gates`. Union-case matching treats gates as opaque and never inspects a gate to distinguish cases.
137+`eq`'s arguments and map and set keys must contain no gates, even nested inside another value. The checker infers this gate-free constraint on type variables and retains it when generalizing a `++`, so a generic helper that calls `eq` stays generic over gate-free types. Printed types show the constraint as `$-([A A] ?) where A contains no gates`. An inferred atom constraint prints as `$-([A A] A) where A is an atom`; an arithmetic atom constraint that excludes loobeans prints as `where A is an atom other than ?`. Multiple clauses are comma-separated, as `where A is an atom, B contains no gates`. Union-case matching treats gates as opaque and never inspects a gate to distinguish cases.
137138
138139## Tag resolution
139140
@@ -211,7 +212,7 @@ Tags can sit anywhere in a case, and a case can carry several:
211212 [%move %left n] "left {n}"
212213 [%move %right n] "right {n}"
213214 [t %draft] t
214− [t %sent at] t
215+ [t %sent sent-at] t
215216 %stop "stop"
216217```
217218
@@ -261,7 +262,7 @@ rune = "|=" field ( expr | body )
261262 | "?-" expr INDENT arm { NEWLINE arm } DEDENT ;
262263arm = pattern ( expr | body ) ; (* every case covered; see Patterns *)
263264
264−mold = aura | "*" | "!!" | "?" | "~" | term | loobean | ref | typevar
265+mold = aura | "_" | "*" | "!!" | "?" | "~" | term | loobean | ref | typevar
265266 | pathmold
266267 | "(" ref mold { mold } ")" | "(" ref { mold } mlines
267268 | "[" field { field } "]" | "[" { field } flines
@@ -270,7 +271,7 @@ field = [ name "=" ] mold | "=" name ; (* =msg is msg=msg *)
270271mlines = INDENT mold { NEWLINE mold } DEDENT ; (* a mold's ( left open *)
271272flines = INDENT field { NEWLINE field } DEDENT ; (* a mold's [ left open *)
272273pathmold = "/" [ segment { "/" segment } ] ;
273−segment = knot | "[" name "=" aura "]" ;
274+segment = knot | "[" name "=" ( aura | "_" ) "]" ;
274275
275276pattern = term | number | string | ship | loobean | "~" | "*" | name
276277 | "[" pattern { pattern } "]" ;
docs/spec/overview.md+1−1
@@ -150,7 +150,7 @@ Loads and renders run in Nock.
150150 [%url reply=$-(path M)]
151151```
152152
153−- `poke` is a transparent type; `ask` is opaque, built only by derived gates and `pure`. A derived poke constructor such as `(todo-action.todo [%add draft.m])` checks its value and supplies the agent and mark, so one island can poke several agents. The agent's mark rechecks on the ship; a nack's `tang` reaches the reply as text. Store constructors poke the store in the browser.
153+- `poke`, `ask` and `qath` are transparent types defined in the internal prelude and re-exported normally. Derived gates and `pure` also construct requests. A derived poke constructor such as `(todo-action.todo [%add draft.m])` checks its value and supplies the agent and mark, so one island can poke several agents. The agent's mark rechecks on the ship; a nack's `tang` reaches the reply as text. Store constructors poke the store in the browser.
154154- A request such as `(todos.todo |=%got)` comes from a declared path or a store's `state`; its reply always gets full state. A path with diffs also takes a fold, `(changes.todo |=%got apply)`, which the runtime applies first. Facts are checked; a bad one crashes the reply, which counts as a crashed `update`.
155155- Islands read agents only by watching. A watch's first fact must be full state, so watching a request whose path case has a separate `scry=` path is a type error in an island. The runtime acks facts, rewatches after a kick or a dropped connection and reseeds from the first fact; a refused watch shows the crash notice.
156156- Watches match by agent and path, timers by gap, and the newest reply is always used. After each `update`, `subs` is diffed to start and stop watches and timers. `%now` and `%every` give the time, `%who` the owner's `@p` from `/~/name`; `%wait` is a one-shot delay.
docs/status.md+23−7
@@ -19,9 +19,15 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds, including Tlon `notes.import-node` with list-wrapped self references, cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, including a source-proved nonrecursive union from a single Ford-imported `/sur` core, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, including source-validated named operands such as Tlon `notes.log`, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Tagged `$%` cases can additionally use restricted local named payload molds, bare `~` fields and one level of local named tagged unions, as in real Tlon `notes`, with bounded source proof; unsupported or ambiguous dependencies fail closed. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, detects missing sources and cycles, and resolves nested fields of imported values with independent scheme instantiation. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. A dedicated trusted preparation path supplies a private comparison scheme to the Jibb-written `gth` wrapper; ordinary imports cannot access them. Primitive execution and jet recognition are unfinished, and addition, decrement and length remain unavailable until arithmetic constraints distinguish their results from loobeans. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. A separate partial analysis resolves supported API path declarations and their full and diff mark types, including the todo paths; it does not create requests or check an API module. Complete private module checking, other API shapes, request gates, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API with `+$ poke` reports unsupported kind or scope, while definite duplicates and unrelated shadowing still report conflicts. The prelude includes the doc-exact generic `cmd` union; the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Known loobean result context also propagates through supported complete branches and binder-only cell arms; binder-only arms over union subjects remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample with its origin, generic arguments and faces preserved; unnamed, pending, recursive and variable-bound cases remain unsupported. A known gate with an unresolved result variable can receive a known enclosing result type before its arguments are inferred; unknown calls and unresolved targets remain conservative. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. A bounded dependency proof reports certain non-gate cycles through values and gates when an explicit atom or loobean result cast and simple unshadowed expressions establish the cycle. Other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. A single-arm cell pattern accepts two or more binders, the last capturing the remaining tail; duplicate and shadowed binders are rejected. A structured single-arm pattern also works for a known non-union cell when coverage is proven, including nested literal and wildcard positions. Intermediate union or collection tails, nested patterns, wildcards and faced records remain unsupported. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. A cast or known call sample can supply result context through whole-case arms and supported finite loobean refinements for a known union accessed by a wing, including nested cell and list positions; other partial-pattern context and non-wing subjects remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. A bare tag proved absent from a known union reports the union and tag sites in casts, single-argument calls, unit payloads, list items and supported branch arms; imported unnamed unions print their cases. Ordered fit replay can identify a missing tag nested in a syntactic tuple, stopping at an earlier mismatch or uncertainty. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. Isolated cart-style `init` and `update` expressions infer, while the complete cart-store fails closed because its kind and declaration scope remain unchecked. Uncontextualized list literals infer a fresh element type, including empty and nested lists, with independently generalized uses. Unresolved item tags and uncertain widening remain unsupported. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Ordinary result annotations also let its `bind`, `biff`, `both`, `clap`, `clef` and `flit` infer. A known unit in a cast, call, list item or record field supplies context to its payload, including nested units and lists; mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The parser accepts `_` in mold positions and typed path segments, retaining each hole’s span. The partial checker tracks ordinary annotation holes through inference and requires each value or local definition to resolve its own holes before generalization. A hole can resolve to a concrete type or an explicitly written in-scope type variable; later uses cannot fix an unresolved definition. Independent decimal holes can default, but captured variables are not defaulted prematurely. Structural named molds with an unresolved hole report its site. Complex mold forms, inferred path segments, mutual recursive groups and other unsupported constraints still fail closed, and the fragment does not claim the module is checked. A syntax-tree pass rejects duplicate field names within each written record and reports both sites. The repository spec now records that `ask` and `qath` are transparent; `ask` remains outstanding.
2323
24−The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `lure`, `weld`, `snoc` and `turn`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. List-dependent prelude mold aliases remain unsupported because their templates are prepared before injection. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
24+On 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.
25+
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. `ask` is still unfinished.
27+
28+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass Hoon `*` in supported nonrecursive molds, selected Hoon atoms, term singletons, the null singleton, the two loobean singletons and their exact fork, nested faced or unfaced cells, supported disjoint unions and opaque standard collections from `/sur` molds and marks into inference. Collections retain their names and supported arguments for printing and unification; nested supported union arguments are retained too. The bridge trusts unchanged results from the source-aware reader; a materialized type graph alone cannot reveal cases Hoon already collapsed. The source-validated standard prelude `list` mold shares this representation with imported lists; other Jibb-written collection molds and most prelude collection operations remain unsupported; malformed names and arities fail closed. Selected self-recursive `/sur` molds, including Tlon `notes.import-node` with list-wrapped self references, cross as opaque module-and-name identities; aliases, foreign references, recursive marks, unfolding and construction remain unsupported. The reader handles mark samples, including a source-proved nonrecursive union from a single Ford-imported `/sur` core, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, including source-validated named operands such as Tlon `notes.log`, certain ordered-map fields, direct `$^` unions whose cases can be proved disjoint, and one verified explicit union argument in a list, set, map or unit. Tagged `$%` cases can additionally use restricted local named payload molds, bare `~` fields and one level of local named tagged unions, as in real Tlon `notes`, with bounded source proof; unsupported or ambiguous dependencies fail closed. Ambiguous recursive origins fail closed; recognizable explicit unions are checked from source before Hoon can collapse their cases, as @iko confirmed for imported `$%`, `$?` and `$^`, while other nested unions, nested ordered maps, general union disjointness and complete import integration remain unfinished. Opt-in structured reader APIs preserve successful graphs and distinguish definite unsupported-aura and core evidence from failures the reader cannot prove; unverified union disjointness and name-only vase recognition remain unsupported. They revalidate and re-walk failed types. An opt-in partial checker entry point consumes unchanged reader results and reports definite aura or core errors at imported mold use sites when their inputs are unique. Ordered replay covers nested cell samples, record and function casts, and non-generic same-module aliases; unsupported prefixes, cycles and shadowing stop it. Union molds, generic applications, transitive modules and unsupported reader outcomes remain generic. Replay repeats inference and may add work. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and a source-derived partial prelude interface, caches completed interfaces per run, detects missing sources and cycles, and resolves nested fields of imported values with independent scheme instantiation. The source-backed internal prelude defines `poke` and the public prelude re-exports it as a transparent type. A dedicated trusted preparation path supplies a private comparison scheme to the Jibb-written `gth` wrapper; ordinary imports cannot access them. Primitive execution and jet recognition are unfinished, and addition, decrement and length remain unavailable until arithmetic constraints distinguish their results from loobeans. The partial checker resolves its supported source shape and rejects ordinary imports of the private path. An imported API with one mark and a matching direct `+$ poke` declaration can export a constructor and retain agent/mark metadata when the representation has the supported agent case. A separate partial analysis resolves supported API path declarations and their full and diff mark types, including the todo paths; it does not create requests or check an API module. Complete private module checking, other API shapes, request gates, root API and kind checking, stores, `ask`, `pure`, lowering and runtime effects remain unfinished. A possible store or root API with `+$ poke` reports unsupported kind or scope, while definite duplicates and unrelated shadowing still report conflicts. The prelude includes the doc-exact generic `cmd` union; the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, selected single self-recursive top-level and local gates, simple and nonrecursive generic mold aliases, selected faced record casts and field reads, and contextual tags, `~` and constructors for closed disjoint unions, including direct nonrecursive generic unions and propagation through complete loobean and unit-shaped branches in casts and known union-sample calls, including nested branches. Known loobean result context also propagates through supported complete branches and binder-only cell arms; binder-only arms over union subjects remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample with its origin, generic arguments and faces preserved; unnamed, pending, recursive and variable-bound cases remain unsupported. A known gate with an unresolved result variable can receive a known enclosing result type before its arguments are inferred; unknown calls and unresolved targets remain conservative. Multi-argument calls form a right-nested sample, retain known faces and shared type variables, and can use known sample positions to contextualize list and union arguments. A definite mismatch points to the failing argument when the fragment can establish it, otherwise to the combined sample; unsupported contextual forms still fail closed. For a supported recursive gate, the checker infers the sample first and uses its exact type, including field faces, for one monomorphic self reference. It generalizes after the body is checked; subsequent uses instantiate it independently. Incompatible recursive arguments can report the gate and argument sites. For a complete loobean branch with one direct self-call arm, a separately inferred closed base type can seed the recursive result before the whole body is checked. Open or pending base types do not seed it; other branch shapes remain subject to the fragment’s existing limits. A supported single local recursive gate also uses a monomorphic self reference and generalizes variables free of the enclosing environment after checking its body; captured variables remain shared. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. A bounded dependency proof reports certain non-gate cycles through values and gates when an explicit atom or loobean result cast and simple unshadowed expressions establish the cycle. Other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Reporting repeats inference for a single recursive gate outside a group; grouped reports use the stored schemes. Its performance cost remains unmeasured. A single-arm cell pattern accepts two or more binders, the last capturing the remaining tail; duplicate and shadowed binders are rejected. A structured single-arm pattern also works for a known non-union cell when coverage is proven, including nested literal and wildcard positions. Intermediate union or collection tails, nested patterns, wildcards and faced records remain unsupported. String interpolation accepts known atom auras, unrestricted `@`, tapes and isolated decimal literals; a known cell asks for a printer, and an explicitly generic atom asks for an aura. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported. A known closed union with two or more arms supports patterns that provably cover or exclude each remaining case, including payload binders, imported and generic cases, and binder-free catch-alls. Partial boolean patterns can split known `?` positions into their two noun values, up to 64 alternatives across the union; binders retain their original case type. Missing alternatives and covered arms are reported. Other partial patterns, expansions above the limit, binders spanning distinct cases, differing arm result types and some complex two-arm subjects remain unsupported. A cast or known call sample can supply result context through whole-case arms and supported finite loobean refinements for a known union accessed by a wing, a grouped wing or a supported shallow call, including nested cell and list positions; other partial-pattern contexts and subject forms remain unsupported. The Grammar’s `step` block infers in this fragment, but its module is not yet checked. A bare tag proved absent from a known union reports the union and tag sites in casts, single-argument calls, unit payloads, list items and supported branch arms; imported unnamed unions print their cases. Ordered fit replay can identify a missing tag nested in a syntactic tuple, stopping at an earlier mismatch or uncertainty. Known faced records support uniquely named field changes, including nested wings, with field context passed to replacements and the original record type retained. Missing fields, empty changes and definite mismatches report sites; the expected-type site is the edit because the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A known record cast supplies field context to its tuple or record initializer, including nested list and union fields; mismatch diagnostics use the cast mold because the original field declaration location is not retained. Isolated cart-style `init` and `update` expressions infer, while the complete cart-store fails closed because its kind and declaration scope remain unchecked. Uncontextualized list literals infer a fresh element type, including empty and nested lists, with independently generalized uses. Unresolved item tags and uncertain widening remain unsupported. Backtick unit construction uses the validated standard prelude unit template, infers its payload without losing pending constraints, and makes the prelude’s `some` available. Ordinary result annotations also let its `bind`, `biff`, `both`, `clap`, `clef` and `flit` infer. A known unit in a cast, call, list item or record field supplies context to its payload, including nested units and lists; mismatches identify the payload and context. Unrelated union identities, some variable-dependent fits, and missing or altered prelude unit templates remain unsupported. Contextual null-headed cells fit their cases, but do not supply a `|=%$` constructor; unresolved nulls remain pending and are reported separately from tags. A known union of `~` and a null-headed cell supports a complete `~` / `[~ value]` branch in either order, including shadow checks; unknown subjects, missing or duplicate arms, and unresolved branch results remain unsupported. This fragment infers the prelude’s `fall` and `need` signatures. With the validated prelude list and a known cast or gate sample, empty, nonempty and nested list literals infer their element types, including contextual union tags; a mismatched element names both sites. In that context `~` and zero-valued terms fit an empty list, and two-item unfaced cells form cons lists, including nested cons and imported-list contexts; invalid heads or tails name both sites. A known gate sample also supplies context to matching positions in a single tuple or record argument, including nested cells; zero literals can fit list positions. A bound zero constant remains unsupported rather than a definite mismatch, and an unknown callee does not supply context. Faced or longer cells and a missing or altered prelude list fail closed. A known list result also supplies context through complete loobean, unit-shaped and list-shaped branches, including recursive and nested branches. For a known standard list with a supported element type, a complete `~` / `[item rest]` branch infers the element and tail types in either arm order and checks binders for shadowing. Unknown subjects, unsupported element types and other or incomplete list patterns remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. Other variable-dependent face merges remain unsupported. Forced equality of distinct written capitals now reports both source sites, following @iko’s decision; forcing one to a concrete type remains unsupported. Imported record spines with repeated faces fail closed where used, but only with a generic unsupported diagnostic. Hoon may erase unfaced nested-cell boundaries, so the check can conservatively reject valid names in distinct erased scopes. Supported closed unions print using an in-scope name or imported alias; an unnamed nongeneric union prints its cases, parenthesized when nested. The latter is print-only. Generic union types retain all arguments in their printed name; if that name is unavailable, the partial printer reports the limitation. Different import faces for the same origin remain compatible; compatibility across distinct union origins and some generic-argument comparisons remain unsupported. Nonrecursive generic aliases can reorder, repeat or omit parameters while retaining a union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body remains unsupported, as do differing-variable face constraints in a union payload. A transitive generic union whose name is unavailable is reported as unsupported instead of hiding its arguments. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive molds, general branch tag context, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; a wrapper regression also rejects forged subjects, samples and tails. Its golden fixtures include three real Tlon files. A Clay test passes a Ford-built nested union through the reader into partial inference. The partial prelude includes `murn`, `join`, `snip`, `rear` and the newly agreed shared-type `clap`, parsed but still awaiting checker and backend validation, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
29+
30+The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc` and `turn`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. Preparation rejects empty, malformed, conflicting or import-bearing source; the prepared value is trusted and must come unchanged from `+prepare-prelude`. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
2531
2632## Milestone 1: parser and mark
2733
@@ -39,8 +45,8 @@ What the plan asks for, and where it is:
3945
4046Besides the plan's list:
4147
42−- 574 golden cases: 358 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
43−- The 574-case corpus passed under `urbit eval` in 77.9 s. The fake ship passed all 583 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 43.4 s for sync and 54.7 s for tests. The importer golden compares 214 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.
48+- 628 golden cases: 408 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.
49+- The 628-case corpus passed under `urbit eval` in 82.9 s while other checks were running. The fake ship passed all 642 tests, including the importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath and projection guards, with 57.8 s for sync and 66.3 s for tests. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
4450- `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.
4551- 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.
4652- 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).
@@ -117,27 +123,37 @@ Besides the plan's list:
117123| 413b12b | 2026-10-31 | Propagate known result context into generic calls and batch ship deletions |
118124| c690076 | 2026-10-31 | Propagate loobean context, infer predicate helpers, and import named ordered-map operands |
119125| 0bf6178 | 2026-10-31 | Bridge recursive Tlon lists and prepare a private comparison interface |
120−| This change | 2026-10-31 | Pass known named unions through polymorphic gates |
126+| 4e472b5 | 2026-10-31 | Pass known named unions through polymorphic gates |
127+| e3e184f | 2026-10-31 | Parse type holes, reject duplicate written record fields, and extend partial union inference and imports |
128+| 80e221a | 2026-10-31 | Infer supported annotation holes and prelude list aliases |
129+| ba1fec4 | 2026-10-31 | Add the curried `bond` prelude gate |
130+| 0ea700d | 2026-10-31 | Infer a source-defined recursive `qath` subset and record the explicit `proj` decision |
131+| 75f5952 | 2026-10-31 | Check a subset of explicit `proj` calls and retain their lowering evidence |
132+| This change | 2026-10-31 | Infer supported single-field projections |
121133
122134## Checking it
123135
124136On a machine set up as [development.md](development.md) says:
125137
126138```
127−tools/golden # 574 cases under urbit eval
139+tools/golden # 628 cases under urbit eval
128140tools/importer-test # the Hoon importer fixture projection
129141tools/type-import-test # the importer/checker bridge fixture
130142tools/type-tlon-test # the real Tlon reader/checker fixture
131143tools/type-mark-test # the mark/checker bridge fixture
132144tools/type-poke-test # the source-backed poke/API fixture
133145tools/type-api-paths-test # partial API path metadata fixture
146+tools/type-hole-guards-test # hole defaulting and API interface guards
147+tools/type-list-alias-test # prelude list-alias guards
148+tools/type-qath-guards-test # qath source and unfolding guards
149+tools/type-proj-guards-test # projection evidence and scope guards
134150tools/type-module-scope-test # module and prelude scope fixture
135151tools/hoon check-spans-test # prints <<>> when the span checker works
136152tools/testdata/selftest # the tools themselves
137153tools/doc-blocks docs/spec # the doc's examples are golden cases
138154tools/ship start
139155tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
140−tools/ship test # the same 574 cases as -test arms on the ship
156+tools/ship test # the same 628 cases as -test arms on the ship
141157tools/testdata/ship-selftest
142158tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
143159tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb-import.hoon+46−5
@@ -8,7 +8,8 @@
88:: Hoon's %hold nodes retain the generator's Hoon and its bound arguments.
99:: Comparing that Hoon to the standard generators identifies collections
1010:: before they expand into trees. Recursive holds are tracked by identity;
11−:: a repeated named hold becomes a module-qualified reference.
11+:: a repeated named hold becomes a module-qualified reference. A proven
12+:: nested self-recursive tagged union retains its own named boundary.
1213::
1314:: A direct $^ is read from its original branches and accepted only when
1415:: their imported shapes prove disjoint. A single nested $^ in a
@@ -38,6 +39,7 @@
3839 [%cell head=imported tail=imported]
3940 [%face name=term body=imported]
4041 [%fork cases=(list imported)]
42+ [%named module=term name=term body=imported]
4143 [%apply name=term args=(list imported)]
4244 [%ref module=term name=term]
4345 [%bad reason=@t]
@@ -213,12 +215,19 @@
213215++ safe-source-name-mode
214216 |= [name=term cor=type seen=(list term) fuel=@ud allow-nested=?]
215217 ^- (unit @ud)
216− :: A direct revisit of the selected root is a recursive reference.
217− :: Other cycles and inherited same-name bindings remain unavailable.
218+ :: Permit a direct root revisit or one proven nested self-revisit.
219+ :: Mutual cycles and inherited same-name bindings remain unavailable.
218220 ?: (lien seen |=(x=term =(name x)))
219− ?. =(seen ~[name]) ~
220221 ?. ?=([%core *] cor) ~
221222 ?. (scope-safe p.cor name) ~
223+ ?: =(seen ~[name]) `fuel
224+ ?. allow-nested ~
225+ ?. ?=([* [* ~]] seen) ~
226+ ?. =(i.seen name) ~
227+ =/ selected=(unit hoon) (local-arm-source cor name)
228+ ?~ selected ~
229+ =/ cases=(unit (list tagged-case)) (tagged-source-code u.selected name)
230+ ?~ cases ~
222231 `fuel
223232 =/ arm=(unit hoon) (local-arm-source cor name)
224233 ?~ arm
@@ -383,6 +392,7 @@
383392 ^- ?
384393 ?- node
385394 [%ref *] &
395+ [%named *] $(node body.node)
386396 [%face *] $(node body.node)
387397 [%cell *] |($(node head.node) $(node tail.node))
388398 [%fork *] (lien cases.node |=(child=imported (mark-has-ref child)))
@@ -901,6 +911,8 @@
901911 ^- ?
902912 ?: ?=([%face *] a) $(a body.a)
903913 ?: ?=([%face *] b) $(b body.b)
914+ ?: ?=([%named *] a) $(a body.a)
915+ ?: ?=([%named *] b) $(b body.b)
904916 ?: ?=([%fork *] a)
905917 (levy cases.a |=(item=imported (disjoint item b)))
906918 ?: ?=([%fork *] b)
@@ -1301,6 +1313,20 @@
13011313 ?. ?=([%& [%fork *]] u.p.attempt) ~
13021314 `p.u.p.attempt
13031315::
1316+:: Keep the proven owner boundary when a nested union refers to itself.
1317+++ contains-named-ref
1318+ |= [node=imported module=term name=term]
1319+ ^- ?
1320+ ?- node
1321+ [%ref *] &(=(module module.node) =(name name.node))
1322+ [%named *] |
1323+ [%face *] $(node body.node)
1324+ [%cell *] |($(node head.node) $(node tail.node))
1325+ [%fork *] (lien cases.node |=(child=imported (contains-named-ref child module name)))
1326+ [%apply *] (lien args.node |=(child=imported (contains-named-ref child module name)))
1327+ * |
1328+ ==
1329+::
13041330++ walk
13051331 |= [module=term typ=type sig=signatures seen=visiting context=(unit type)]
13061332 ^- imported
@@ -1332,7 +1358,12 @@
13321358 ?~ origin [%bad 'a recursive Hoon mold needs unambiguous source provenance']
13331359 [%ref u.origin u.u.prior]
13341360 =/ nested=(unit imported) (nested-tagged-union module typ context)
1335− ?^ nested u.nested
1361+ ?^ nested
1362+ ?: ?=(~ seen) u.nested
1363+ =/ name=(unit term) (hold-name q.typ)
1364+ ?~ name u.nested
1365+ ?. (contains-named-ref u.nested module u.name) u.nested
1366+ [%named module u.name u.nested]
13361367 ?: &(?=([%tsls [%note * *] *] q.typ) |((has-spec-cell-union q.typ) (has-spec-general-union q.typ)))
13371368 =/ nm (hold-name q.typ)
13381369 (collection-union typ module sig [[typ nm] seen] context)
@@ -1454,6 +1485,7 @@
14541485 [%bad *] [~ reason.out]
14551486 [%invalid *] [~ reason.out]
14561487 [%face *] $(out body.out)
1488+ [%named *] $(out body.out)
14571489 [%cell *]
14581490 =/ err $(out head.out)
14591491 ?~ err $(out tail.out)
@@ -1481,6 +1513,7 @@
14811513 [%bad *] `[%unsupported reason.out]
14821514 [%invalid *] `[%invalid code.out reason.out]
14831515 [%face *] $(out body.out)
1516+ [%named *] $(out body.out)
14841517 [%cell *]
14851518 =/ first $(out head.out)
14861519 ?~ first $(out tail.out)
@@ -1633,6 +1666,7 @@
16331666 [%cell *] "[{(show-import head.out)} {(show-import tail.out)}]"
16341667 [%face *] "{(trip name.out)}={(show-import body.out)}"
16351668 [%fork *] "(union {(show-imports cases.out)})"
1669+ [%named *] "(named {(trip name.out)}.{(trip module.out)} {(show-import body.out)})"
16361670 [%apply *] "({(trip name.out)} {(show-imports args.out)})"
16371671 [%ref *] "{(trip name.out)}.{(trip module.out)}"
16381672 [%bad *] "error: {(trip reason.out)}"
@@ -2033,6 +2067,13 @@
20332067 (crip "tag-nest-hidden: {(show-result (sample %tag-nest-hidden))}")
20342068 (crip "tag-nest-overlap: {(show-result (sample %tag-nest-overlap))}")
20352069 (crip "tag-nest-recursive: {(show-result (sample %tag-nest-recursive-outer))}")
2070+ (crip "tag-nest-rec-list: {(show-result (sample %tag-nest-rec-list-outer))}")
2071+ (crip "tag-nest-rec-repeat: {(show-result (sample %tag-nest-rec-repeat))}")
2072+ (crip "tag-nest-rec-duplicate: {(show-result (sample %tag-nest-rec-bad-outer))}")
2073+ (crip "tag-nest-rec-hidden: {(show-result (sample %tag-nest-rec-hidden-outer))}")
2074+ (crip "tag-nest-rec-mutual: {(show-result (sample %tag-nest-rec-mutual-outer))}")
2075+ (crip "tag-nest-rec-outer-overlap: {(show-result (sample %tag-nest-rec-outer-overlap))}")
2076+ (crip "tag-nest-rec-owner: {?:(&((contains-named-ref [%ref %small %tag-self] %small %tag-self) !(contains-named-ref [%named %small %other [%ref %small %tag-self]] %small %tag-self)) "yes" "wrong")}")
20362077 (crip "tag-nest-many: {(show-result (sample %tag-nest-many))}")
20372078 (crip "tag-nest-shadow: {(show-result (read-named %shadow-static %tag-nest-shadow xc))}")
20382079 (crip "tag-nest-wrong-hold: {?~((nested-tagged-union %small (~(play ut other) (ream '*chain')) `sc) "unsupported" "BAD")}")
jibb-dev/lib/jibb.hoon+1091−88
@@ -874,7 +874,7 @@
874874 %'~[' %'|=(' %'$-(' :: openers
875875 %'%/' %'/' :: paths
876876 %'+' %'`' %'=' :: pair, unit, face
877− %'*' %'?' :: noun, loobean mold
877+ %'*' %'?' %'_' :: noun, loobean, type hole
878878 %'++' %'+$' %'|=' %'|$' :: runes
879879 %'^-' %'~&' %'?-' %'!!' :: runes
880880 %'/-' %'/%' %'/=' :: imports
@@ -1016,6 +1016,7 @@
10161016 [%const at=span =lit] :: ~ %add %.y
10171017 [%ref at=span names=(list term)] :: state item.todo
10181018 [%tvar at=span name=@t] :: M
1019+ [%hole at=span ~] :: _
10191020 [%path at=span segs=(list pseg)] :: / /todos /todo/[id=@ud]
10201021 [%apply at=span ref=(list term) args=(list shape)] :: (list @t)
10211022 [%cell at=span fields=(list field)] :: [text=@t done=?]
@@ -1024,9 +1025,9 @@
10241025 [%generic at=span vars=(list @t) body=shape] :: +$ name |$ [M] …
10251026 ==
10261027::
1027−:: +pseg: a path mold's segment, a knot or [name=aura]
1028+:: +pseg: a path mold's segment, a knot, [name=aura], or [name=_]
10281029::
1029−+$ pseg $%([%knot p=@ta] [%typed at=span name=term aura=@ta])
1030++$ pseg $%([%knot p=@ta] [%typed at=span name=term aura=@ta] [%inferred at=span name=term hole-at=span])
10301031::
10311032+| %api
10321033::
@@ -1295,6 +1296,7 @@
12951296 (emit 1 %'=')
12961297 ?: =('`' a) (emit 1 %'`')
12971298 ?: =('*' a) (emit 1 %'*')
1299+ ?: =('_' a) (emit 1 %'_')
12981300 ?: =('~' a)
12991301 ?: =('[' b) (emit 2 %'~[')
13001302 ?: =('&' b) (emit 2 %'~&')
@@ -1670,14 +1672,14 @@
16701672:: What may begin each place the parser reads (section 3, Errors):
16711673:: an expression a-z 0-9 " ( [ ~ % / ` | ^ ? !
16721674:: an operand a-z 0-9 " ( [ ~ % / ` | !
1673−:: a mold a-z A-Z @ * ! ? ~ % / ( [ $
1675+:: a mold a-z A-Z @ * ! ? ~ % / ( [ $ _
16741676:: a pattern a-z 0-9 " ~ % * [
16751677:: and what may go tight after an operand: . ( + = after a name, a
16761678:: closer ) ] }, or the : of a comment
16771679::
16781680++ expr-mask 0x57ff.ffff.4800.0000.83ff.8126.0000.0000
16791681++ operand-mask 0x57ff.ffff.0800.0000.03ff.8126.0000.0000
1680−++ mold-mask 0x47ff.fffe.0fff.ffff.8000.8532.0000.0000
1682+++ mold-mask 0x47ff.fffe.8fff.ffff.8000.8532.0000.0000
16811683++ bar-mask 0x1000.0000.0000.0000.0000.0000.0000.0000
16821684++ pattern-mask 0x47ff.fffe.0800.0000.03ff.0424.0000.0000
16831685++ after-mask 0x2000.0000.2000.0000.2400.4b00.0000.0000
@@ -2107,6 +2109,7 @@
21072109 ?- -.s
21082110 %knot (weld "/" (trip p.s))
21092111 %typed "/[{(trip name.s)}=@{(trip aura.s)}]"
2112+ %inferred "/[{(trip name.s)}=_]"
21102113 ==
21112114::
21122115++ show-tvars
@@ -2318,6 +2321,7 @@
23182321 %const (nod "const" at.s (show-lit lit.s) ~)
23192322 %ref (nod "ref" at.s (show-names names.s) ~)
23202323 %tvar (nod "tvar" at.s (trip name.s) ~)
2324+ %hole (nod "hole" at.s "" ~)
23212325 %path (nod "path" at.s (show-psegs segs.s) ~)
23222326 %apply (nod "apply" at.s (show-names ref.s) (turn args.s sexp-shape))
23232327 %cell (nod "cell" at.s "" (turn fields.s sexp-field))
@@ -3842,6 +3846,7 @@
38423846 %'*' [%& [%noun at.t ~] t.ts]
38433847 %'!!' [%& [%void at.t ~] t.ts]
38443848 %'?' [%& [%flag at.t ~] t.ts]
3849+ %'_' [%& [%hole at.t ~] t.ts]
38453850 [%name *] [%& [%ref at.t ~[p.lex.t]] t.ts]
38463851 [%wing *] [%& [%ref at.t p.lex.t] t.ts]
38473852 [%tvar *] [%& [%tvar at.t p.lex.t] t.ts]
@@ -4058,7 +4063,7 @@
40584063 ?: &(?=(^ nex) tight.i.nex) (bad nex "a path segment")
40594064 (bad-space i.after nex "a path segment")
40604065 ::
4061− :: +read-pseg: a path mold's segment, a knot or [name=aura] with no
4066+ :: +read-pseg: a path mold's knot, [name=aura], or [name=_] with no
40624067 :: spaces, and where it ends
40634068 ::
40644069 ++ read-pseg
@@ -4075,13 +4080,16 @@
40754080 ?: |(?=(~ r2) !tight.i.r2) (bad-space i.r1 r2 "`=`")
40764081 ?. ?=([[* * %'='] *] r2) (bad-in r2 "`=`" tis-mask)
40774082 =/ r3=(list token) t.r2
4078− ?: |(?=(~ r3) !tight.i.r3) (bad-space i.r2 r3 "an aura")
4079− ?. ?=([[* * [%aura *]] *] r3) (bad-in r3 "an aura" pat-mask)
4083+ ?: |(?=(~ r3) !tight.i.r3) (bad-space i.r2 r3 "an aura or type hole")
4084+ ?. ?=([[* * ?([%aura *] %'_')] *] r3) (bad-in r3 "an aura or type hole" (con pat-mask (bex 95)))
40804085 =/ r4=(list token) t.r3
40814086 ?: |(?=(~ r4) !tight.i.r4) (bad-space i.r3 r4 "`]`")
40824087 ?. ?=([[* * %']'] *] r4) (bad-in r4 "`]`" ser-mask)
40834088 =/ at=span [beg.at.op end.at.i.r4]
4084− [%& [[%typed at p.lex.i.r1 p.lex.i.r3] end.at.i.r4] t.r4]
4089+ =/ seg=pseg
4090+ ?: ?=(%'_' lex.i.r3) [%inferred at p.lex.i.r1 at.i.r3]
4091+ [%typed at p.lex.i.r1 p.lex.i.r3]
4092+ [%& [seg end.at.i.r4] t.r4]
40854093 --
40864094::
40874095+| %span-check
@@ -4465,6 +4473,7 @@
44654473 %const [%const at.s ~[%lit] %one ~]
44664474 %ref [%ref at.s ~[%name %wing] %one ~]
44674475 %tvar [%tvar at.s ~[%tvar] %one ~]
4476+ %hole [%hole at.s ~[%'_'] %one ~]
44684477 %apply [%apply at.s ~[%'('] %shut (turn args.s outline-shape)]
44694478 %cell [%cell at.s ~[%'['] %shut (turn fields.s outline-sample)]
44704479 ::
@@ -4473,8 +4482,11 @@
44734482 %+ murn segs.s
44744483 |= g=pseg
44754484 ^- (unit outline)
4476− ?. ?=(%typed -.g) ~
4477− `[%typed at.g ~[%'['] %shut ~]
4485+ ?- -.g
4486+ %knot ~
4487+ %typed `[%typed at.g ~[%'['] %shut ~]
4488+ %inferred `[%typed at.g ~[%'['] %shut ~[[%hole hole-at.g ~[%'_'] %one ~]]]
4489+ ==
44784490 [%path at.s ~[%'/'] %run ks]
44794491 ::
44804492 %union
@@ -4534,6 +4546,8 @@
45344546 [%path [1 9] [1 9] [1 21]]
45354547 [%face [1 7] [1 7] [1 21]]
45364548 ==
4549+ :: an inferred path aura's hole spanning its = as well
4550+ ['+$ x /a/[id=_]' ~[[%hole [1 13] [1 12] [1 14]]]]
45374551 :: an import's path cut short
45384552 ['/= c /ui/c' ~[[%jibb [1 1] [1 1] [1 11]]]]
45394553 :: brackets that close with the deeper lines, cut at their line's
@@ -4600,6 +4614,20 @@
46004614:: from their display name. Generic cases must be disjoint for all arguments.
46014615:: Unnamed union printing is informational; it is not Jibb syntax.
46024616::
4617+:: `proj` is a reserved, type-directed operation, not an ordinary gate.
4618+:: The supported fragment selects uniquely faced fields from a known record
4619+:: in source order (reordering is a doc question). It records the original
4620+:: call, source and target types, and source axes with its definition;
4621+:: A single selected field keeps its face and uses one source axis.
4622+:: Checked module interfaces retain that evidence and their source, including
4623+:: the private prelude dependency. A later lowerer must replace the call by
4624+:: an inline gate applied to the operand once; no lowering is implemented yet.
4625+:: Ordinary fits never insert a projection. Unknown or variable-origin record
4626+:: spines, implicit narrowing inside selected fields, and projections in
4627+:: recursive groups remain unsupported. Directional fits bound faced-spine
4628+:: proofs to fewer than 1,024 cells; the projection planner has a separate
4629+:: 4,096-step bound. These are inference limits, not language limits.
4630+::
46034631+$ itype
46044632 $~ [%var 0]
46054633 $% [%var id=@ud]
@@ -4613,6 +4641,7 @@
46134641 [%const literal=lit]
46144642 [%collection name=term args=(list itype)]
46154643 [%recursive module=term name=term label=(unit @t)]
4644+ [%jrec at=path name=term label=(unit @t) head=term aura=@ta tail=term]
46164645 [%union cases=(list itype) origin=(unit [at=path name=term]) label=(unit @t) args=(list itype)]
46174646 [%face name=term body=itype]
46184647 [%fn sample=itype product=itype]
@@ -4667,6 +4696,7 @@
46674696 %const |
46684697 %union |((lien cases.t |=(c=itype (itype-occurs n c sub))) (lien args.t |=(c=itype (itype-occurs n c sub))))
46694698 %recursive |
4699+ %jrec |
46704700 %collection (lien args.t |=(c=itype (itype-occurs n c sub)))
46714701 %face $(t body.t)
46724702 %fn |($(t sample.t) $(t product.t))
@@ -4685,6 +4715,8 @@
46854715 =. a (itype-walk a sub)
46864716 =. b (itype-walk b sub)
46874717 ?: =(a b) `sub
4718+ ?: &(?=(%jrec -.a) ?=(%jrec -.b))
4719+ ?:(&(=(at.a at.b) =(name.a name.b) =(head.a head.b) =(aura.a aura.b) =(tail.a tail.b)) `sub ~)
46884720 ?: &(?=(%recursive -.a) ?=(%recursive -.b))
46894721 ?:(&(=(module.a module.b) =(name.a name.b)) `sub ~)
46904722 ?: &(?=(%union -.a) ?=(%union -.b))
@@ -4764,6 +4796,7 @@
47644796 %const |
47654797 %union |((lien cases.t |=(c=itype (itype-has-any-atom c sub))) (lien args.t |=(c=itype (itype-has-any-atom c sub))))
47664798 %recursive |
4799+ %jrec |
47674800 %collection (lien args.t |=(c=itype (itype-has-any-atom c sub)))
47684801 %face $(t body.t)
47694802 %fn |($(t sample.t) $(t product.t))
@@ -4835,6 +4868,7 @@
48354868 %const &
48364869 %union |((lien cases.typ |=(c=itype (itype-has-fixed-atom c))) (lien args.typ |=(c=itype (itype-has-fixed-atom c))))
48374870 %recursive |
4871+ %jrec |
48384872 %collection (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
48394873 %face $(typ body.typ)
48404874 %fn |($(typ sample.typ) $(typ product.typ))
@@ -4920,6 +4954,7 @@
49204954 %cell &
49214955 %union &
49224956 %recursive &
4957+ %jrec &
49234958 %noun &
49244959 %collection &
49254960 %face $(t body.t)
@@ -4992,6 +5027,7 @@
49925027 ^- ?
49935028 ?- -.t
49945029 %recursive &
5030+ %jrec &
49955031 %collection (lien args.t |=(c=itype (itype-has-recursive c)))
49965032 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-recursive c)))
49975033 %face $(t body.t)
@@ -5005,6 +5041,7 @@
50055041 ^- ?
50065042 ?- -.t
50075043 %recursive ?=(~ label.t)
5044+ %jrec ?=(~ label.t)
50085045 %collection (lien args.t |=(c=itype (itype-has-hidden-recursive c)))
50095046 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-recursive c)))
50105047 %face $(t body.t)
@@ -5055,6 +5092,18 @@
50555092++ itype-fit
50565093 |= [actual=itype expected=itype sub=isub next=@ud]
50575094 ^- ifit
5095+ (itype-fit-inner actual expected sub next | |)
5096+++ itype-fit-inner
5097+ |= [actual=itype expected=itype sub=isub next=@ud skip-width=? spine-proof=?]
5098+ ^- ifit
5099+ ?: &(!skip-width ?=(%cell -.actual) ?=(%cell -.expected) |((width-spine-exhausted actual 1.024) (width-spine-exhausted expected 1.024)))
5100+ [%unknown ~]
5101+ =/ known=(unit [source=iwfields target=iwfields])
5102+ ?: skip-width ~
5103+ (width-known-shape actual expected sub)
5104+ =/ too-wide=? ?~(known | (gth (lent order.source.u.known) (lent order.target.u.known)))
5105+ ?: too-wide [%unknown ~]
5106+ =/ spine-checked=? |(spine-proof ?=(^ known))
50585107 =/ uncertain=?
50595108 |(?=(%var -.actual) ?=(%avar -.actual) ?=(%nvar -.actual) ?=(%var -.expected) ?=(%avar -.expected) ?=(%nvar -.expected))
50605109 =/ actual-open=?
@@ -5071,6 +5120,11 @@
50715120 [%ok sub next]
50725121 :: An arbitrary noun is not known to fit a narrower type.
50735122 ?: &(?=(%noun -.actual) !?=(%var -.expected)) [%unknown ~]
5123+ ?: &(!uncertain ?=(%jrec -.actual) ?=(%face -.expected)) $(expected body.expected)
5124+ ?: &(!uncertain ?=(%face -.actual) ?=(%jrec -.expected)) $(actual body.actual)
5125+ ?: &(?=(%jrec -.actual) ?=(%jrec -.expected))
5126+ ?:(&(=(at.actual at.expected) =(name.actual name.expected) =(head.actual head.expected) =(aura.actual aura.expected) =(tail.actual tail.expected)) [%ok sub next] [%bad ~])
5127+ ?: &(|(?=(%jrec -.actual) ?=(%jrec -.expected)) !|(?=(%var -.actual) ?=(%var -.expected))) [%unknown ~]
50745128 ?: &(?=(%recursive -.actual) ?=(%recursive -.expected))
50755129 ?:(&(=(module.actual module.expected) =(name.actual name.expected)) [%ok sub next] [%bad ~])
50765130 ?: &(|(?=(%recursive -.actual) ?=(%recursive -.expected)) !|(?=(%var -.actual) ?=(%var -.expected))) [%unknown ~]
@@ -5165,9 +5219,9 @@
51655219 ?: &((aura-prefix aura.actual aura.expected) uncertain) [%unknown ~]
51665220 [%bad ~]
51675221 ?: &(?=(%cell -.actual) ?=(%cell -.expected))
5168− =/ first=ifit $(actual hed.actual, expected hed.expected)
5222+ =/ first=ifit $(actual hed.actual, expected hed.expected, skip-width |, spine-proof |)
51695223 ?. ?=(%ok -.first) first
5170− $(actual tal.actual, expected tal.expected, sub sub.first, next next.first)
5224+ $(actual tal.actual, expected tal.expected, sub sub.first, next next.first, skip-width spine-checked, spine-proof spine-checked)
51715225 :: A field may add a face to an occurrence of the very same type
51725226 :: variable. Binding that variable to a face around itself would fail
51735227 :: the occurs check, but its underlying type has already matched.
@@ -5189,9 +5243,9 @@
51895243 [%ok u.unified next]
51905244 ?: &(?=(%face -.actual) ?=(%face -.expected))
51915245 ?. =(name.actual name.expected) [%bad ~]
5192− $(actual body.actual, expected body.expected)
5193− ?: ?=(%face -.actual) $(actual body.actual)
5194− ?: ?=(%face -.expected) $(expected body.expected)
5246+ $(actual body.actual, expected body.expected, skip-width |, spine-proof |)
5247+ ?: ?=(%face -.actual) $(actual body.actual, skip-width |, spine-proof |)
5248+ ?: ?=(%face -.expected) $(expected body.expected, skip-width |, spine-proof |)
51955249 ?: (itype-face-asym actual expected sub) [%unknown ~]
51965250 ?: |((itype-has-any-atom actual sub) (itype-has-any-atom expected sub))
51975251 [%unknown ~]
@@ -5268,7 +5322,9 @@
52685322+$ ienv (list [name=term scheme=ischeme])
52695323+$ imold-types (list [name=term template=ischeme])
52705324+$ iderived [name=term agent=term mark=term]
5271−+$ ifile [values=ienv molds=imold-types at=path derived=(list iderived)]
5325++$ iwidth-definition [name=term original=expr typ=itype sub=isub projections=(list iwprojection)]
5326++$ iwidth-dependency [at=path source=(unit @t) definitions=(list iwidth-definition)]
5327++$ ifile [values=ienv molds=imold-types at=path derived=(list iderived) elaborations=(list iwidth-definition) dependencies=(list iwidth-dependency) source=(unit @t)]
52725328+$ ijimports (list [face=term interface=ifile])
52735329+$ icap [name=@t id=@ud at=span]
52745330+$ icaps (list icap)
@@ -5278,7 +5334,100 @@
52785334:: This core has no Ford dependencies; unrecognized payloads fail closed.
52795335+$ iexternals (list [module=term name=term result=*])
52805336+$ imark-externals (list [mark=term result=*])
5281−+$ 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)]
5337+:: Hole obligations survive discarded expressions until their owning
5338+:: definition has inferred; their source spans support unresolved reports.
5339++$ ihole [id=@ud at=span]
5340+:: Recursive-mold unfolding spends fuel in the threaded inference state.
5341+:: Retries can restart from an earlier state, so this bounds an attempt,
5342+:: not all parsing or module-checking work.
5343+:: Experimental: only closed, uniquely faced records have known axes.
5344++$ iwfield [name=term axis=@ud typ=itype]
5345++$ iwfields [order=(list iwfield) index=(map term iwfield)]
5346++$ iwstep [name=term axis=@ud]
5347++$ iwidth-result [steps=(list iwstep) sub=isub next=@ud]
5348++$ iwprojection [at=span original=expr source=itype target=itype steps=(list iwstep)]
5349+++ width-scan
5350+ |= [typ=itype sub=isub axis=@ud fuel=@ud]
5351+ ^- (unit iwfields)
5352+ =/ order=(list iwfield) ~
5353+ =/ index=(map term iwfield) *(map term iwfield)
5354+ |-
5355+ ?: =(0 fuel) ~
5356+ ?: |(?=(%var -.typ) ?=(%avar -.typ) ?=(%nvar -.typ)) ~
5357+ ?: ?=(%face -.typ)
5358+ =/ entry=iwfield [name.typ axis body.typ]
5359+ ?: ?=(^ (~(get by index) name.entry)) ~
5360+ `[(flop [entry order]) (~(put by index) name.entry entry)]
5361+ ?. ?=(%cell -.typ) ~
5362+ =/ head=itype hed.typ
5363+ ?: |(?=(%var -.head) ?=(%avar -.head) ?=(%nvar -.head)) ~
5364+ ?. ?=(%face -.head) ~
5365+ =/ entry=iwfield [name.head (mul 2 axis) body.head]
5366+ ?: ?=(^ (~(get by index) name.entry)) ~
5367+ $(typ tal.typ, axis +((mul 2 axis)), fuel (dec fuel), order [entry order], index (~(put by index) name.entry entry))
5368+++ width-in-order
5369+ |= [source=(list iwfield) target=(list iwfield)]
5370+ ^- ?
5371+ ?~ target &
5372+ ?~ source |
5373+ ?: =(name.i.source name.i.target) $(source t.source, target t.target)
5374+ $(source t.source)
5375+++ width-fit-fields
5376+ |= [source=(map term iwfield) target=(list iwfield) sub=isub next=@ud]
5377+ ^- (unit iwidth-result)
5378+ ?~ target `[~ sub next]
5379+ =/ found=(unit iwfield) (~(get by source) name.i.target)
5380+ ?~ found ~
5381+ =/ fit=ifit (itype-fit typ.u.found typ.i.target sub next)
5382+ ?. ?=(%ok -.fit) ~
5383+ =/ rest=(unit iwidth-result) $(target t.target, sub sub.fit, next next.fit)
5384+ ?~ rest ~
5385+ `[[[name.i.target axis.u.found] steps.u.rest] sub.u.rest next.u.rest]
5386+++ width-spine-exhausted
5387+ |= [t=itype fuel=@ud]
5388+ ^- ?
5389+ ?: =(0 fuel) &
5390+ ?. ?=(%cell -.t) |
5391+ ?. ?=(%face -.hed.t) |
5392+ $(t tal.t, fuel (dec fuel))
5393+++ width-known-shape
5394+ |= [actual=itype expected=itype sub=isub]
5395+ ^- (unit [source=iwfields target=iwfields])
5396+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
5397+ =/ source=(unit iwfields) (width-scan actual sub 1 1.024)
5398+ =/ target=(unit iwfields) (width-scan expected sub 1 1.024)
5399+ ?~ source ~
5400+ ?~ target ~
5401+ `[u.source u.target]
5402+::
5403+++ width-shape
5404+ |= [actual=itype expected=itype sub=isub]
5405+ ^- (unit [source=iwfields target=iwfields])
5406+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) ~
5407+ =/ source=(unit iwfields) (width-scan actual sub 1 4.096)
5408+ =/ target=(unit iwfields) (width-scan expected sub 1 4.096)
5409+ ?~ source ~
5410+ ?~ target ~
5411+ ?. (gth (lent order.u.source) (lent order.u.target)) ~
5412+ `[u.source u.target]
5413+++ width-proj-shape
5414+ |= [actual=itype expected=itype sub=isub]
5415+ ^- (unit [source=iwfields target=iwfields])
5416+ ?. &(|(?=(%cell -.actual) ?=(%face -.actual)) |(?=(%cell -.expected) ?=(%face -.expected))) ~
5417+ =/ source=(unit iwfields) (width-scan actual sub 1 4.096)
5418+ =/ target=(unit iwfields) (width-scan expected sub 1 4.096)
5419+ ?~ source ~
5420+ ?~ target ~
5421+ ?: (lth (lent order.u.source) (lent order.u.target)) ~
5422+ `[u.source u.target]
5423+::
5424+++ width-project
5425+ |= [shape=[source=iwfields target=iwfields] sub=isub next=@ud]
5426+ ^- (unit iwidth-result)
5427+ ?. (width-in-order order.source.shape order.target.shape) ~
5428+ (width-fit-fields index.source.shape order.target.shape sub next)
5429+::
5430++$ 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)]
52825431+$ idiag [msg=tape sites=(list [at=span note=tape])]
52835432+$ iresult (each [typ=itype state=istate] idiag)
52845433+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -5323,6 +5472,7 @@
53235472 %fn &
53245473 %cell |($(t hed.t) $(t tal.t))
53255474 %recursive |
5475+ %jrec |
53265476 %collection (lien args.t |=(c=itype (itype-has-gate c)))
53275477 %face $(t body.t)
53285478 %union (lien cases.t |=(c=itype (itype-has-gate c)))
@@ -5349,6 +5499,90 @@
53495499 * t
53505500 ==
53515501::
5502+:: A hole is solved only by a fully determined type or a written
5503+:: in-scope type variable. Ordinary fresh variables are not evidence.
5504+:: Compare representatives after substitution, since unification can
5505+:: orient a written capital toward the hole rather than the reverse.
5506+++ hole-variable-id
5507+ |= t=itype
5508+ ^- (unit @ud)
5509+ ?- -.t
5510+ %var `id.t
5511+ %avar `id.t
5512+ %nvar `id.t
5513+ %tag `id.t
5514+ * ~
5515+ ==
5516+++ hole-same-variable
5517+ |= [a=itype b=itype]
5518+ ^- ?
5519+ =/ x=(unit @ud) (hole-variable-id a)
5520+ ?~ x |
5521+ =/ y=(unit @ud) (hole-variable-id b)
5522+ ?~ y |
5523+ =(u.x u.y)
5524+++ hole-known
5525+ |= [t=itype state=istate]
5526+ ^- ?
5527+ =. t (itype-walk t sub.state)
5528+ ?- -.t
5529+ ?(%var %avar %nvar)
5530+ ?: (lien caps.state |=(c=icap (hole-same-variable t (itype-walk [%var id.c] sub.state)))) &
5531+ (lien params.state |=(p=[name=@t typ=itype] (hole-same-variable t (itype-walk typ.p sub.state))))
5532+ %tag |
5533+ %any-atom &
5534+ %union &((levy cases.t |=(c=itype (hole-known c state))) (levy args.t |=(c=itype (hole-known c state))))
5535+ %collection (levy args.t |=(c=itype (hole-known c state)))
5536+ %face $(t body.t)
5537+ %fn &($(t sample.t) $(t product.t))
5538+ %cell &($(t hed.t) $(t tal.t))
5539+ * &
5540+ ==
5541+++ default-hole-numbers
5542+ |= [all=(list ihole) prior=(list ihole) state=istate env=ienv permit=?]
5543+ ^- istate
5544+ :: Do not default a named capital or a variable captured from env.
5545+ ?. permit state
5546+ ?: =(all prior) state
5547+ ?~ all state
5548+ =/ t=itype (itype-walk [%var id.i.all] sub.state)
5549+ =/ free=(list @ud) (free-env-vars env sub.state)
5550+ =? state &(?=(%nvar -.t) !(hole-known t state) !(lien free |=(id=@ud =(id id.t))))
5551+ state(sub [[id.t [%atom %ud]] sub.state])
5552+ $(all t.all)
5553+::
5554+:: Only obligations created inside this definition belong to it.
5555+++ holes-created
5556+ |= [all=(list ihole) prior=(list ihole)]
5557+ ^- (list ihole)
5558+ ?: =(all prior) ~
5559+ ?~ all ~
5560+ [i.all $(all t.all)]
5561+++ hole-uncertain
5562+ |= [t=itype state=istate]
5563+ ^- ?
5564+ =. t (itype-walk t sub.state)
5565+ ?- -.t
5566+ ?(%tag %nvar %avar) !(hole-known t state)
5567+ %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
5568+ %collection (lien args.t |=(c=itype (hole-uncertain c state)))
5569+ %face $(t body.t)
5570+ %fn |($(t sample.t) $(t product.t))
5571+ %cell |($(t hed.t) $(t tal.t))
5572+ * |
5573+ ==
5574+::
5575+++ unresolved-hole
5576+ |= [all=(list ihole) prior=(list ihole) state=istate]
5577+ ^- (unit idiag)
5578+ =/ work=(list ihole) (flop (holes-created all prior))
5579+ |-
5580+ ?~ work ~
5581+ ?: (hole-known [%var id.i.work] state) $(work t.work)
5582+ ?: (hole-uncertain [%var id.i.work] state)
5583+ `["type hole needs unsupported inference" ~[[at.i.work "type hole"]]]
5584+ `["type hole needs a determined type" ~[[at.i.work "unresolved type hole"]]]
5585+::
53525586++ itype-vars
53535587 |= t=itype
53545588 ^- (list @ud)
@@ -5364,6 +5598,7 @@
53645598 %const ~
53655599 %union (zing (turn (weld args.t cases.t) |=(c=itype (itype-vars c))))
53665600 %recursive ~
5601+ %jrec ~
53675602 %collection (zing (turn args.t |=(c=itype (itype-vars c))))
53685603 %face $(t body.t)
53695604 %fn (weld $(t sample.t) $(t product.t))
@@ -5403,6 +5638,7 @@
54035638 %const t
54045639 %union [%union (turn cases.t |=(c=itype (itype-rename c ren))) origin.t label.t (turn args.t |=(c=itype (itype-rename c ren)))]
54055640 %recursive t
5641+ %jrec t
54065642 %collection [%collection name.t (turn args.t |=(c=itype (itype-rename c ren)))]
54075643 %face [%face name.t $(t body.t)]
54085644 %fn [%fn $(t sample.t) $(t product.t)]
@@ -5427,6 +5663,7 @@
54275663 %const |
54285664 %union |((lien cases.t |=(c=itype (itype-var-is-atom n c))) (lien args.t |=(c=itype (itype-var-is-atom n c))))
54295665 %recursive |
5666+ %jrec |
54305667 %collection (lien args.t |=(c=itype (itype-var-is-atom n c)))
54315668 %face $(t body.t)
54325669 %fn |($(t sample.t) $(t product.t))
@@ -5588,6 +5825,10 @@
55885825 %cell ?:(?=([%cell * *] node) (imported-record-faces-valid node ~) |)
55895826 %fork (imported-faces-valid-list +.node)
55905827 %apply ?:(?=([%apply @ *] node) (imported-faces-valid-list +>.node) |)
5828+ %named
5829+ ?. ?=([%named @ @ *] node) |
5830+ =/ n=[%named module=@ name=@ body=*] ;;([%named module=@ name=@ body=*] node)
5831+ (imported-faces-valid body.n)
55915832 ==
55925833::
55935834++ imported-faces-valid-list
@@ -5641,6 +5882,15 @@
56415882 =/ aura=@ta (@ta +<.node)
56425883 ?. |(?=(?(%u %ud %ux %uv %t %ta %tas %p %da %dr) aura) =('tD' aura)) ~
56435884 `[%atom aura]
5885+ %named
5886+ ?. ?=([%named @ @ *] node) ~
5887+ =/ n=[%named module=@ name=@ body=*] ;;([%named module=@ name=@ body=*] node)
5888+ ?. &((jibb-face-name module.n) (jibb-face-name name.n)) ~
5889+ ?. ?=([%fork *] body.n) ~
5890+ =/ proof=(unit irec-pattern) (rec-pattern body.n (@tas module.n) (@tas name.n))
5891+ ?~ proof ~
5892+ ?. has.u.proof ~
5893+ `[%recursive (@tas module.n) (@tas name.n) `(crip "{(trip name.n)}.{(trip module.n)}")]
56445894 %apply
56455895 ?. ?=([%apply @ *] node) ~
56465896 =/ name=term (@tas +<.node)
@@ -5821,6 +6071,14 @@
58216071:: Names exported by the directly imported module are visible through its
58226072:: face; a matching prelude alias is also visible without a qualifier.
58236073::
6074+++ jrec-alias
6075+ |= [origin=path name=term molds=imold-types]
6076+ ^- (unit term)
6077+ ?~ molds ~
6078+ =/ template=ischeme template.i.molds
6079+ ?: &(?=(~ vars.template) ?=(%jrec -.typ.template) =(at.typ.template origin) =(name.typ.template name)) `name.i.molds
6080+ $(molds t.molds)
6081+::
58246082++ itype-in-import
58256083 |= [t=itype iface=ifile face=term prelude=(unit ifile)]
58266084 ^- itype
@@ -5840,6 +6098,12 @@
58406098 `(crip "{(trip u.alias)}.{(trip face)}")
58416099 [%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)))]
58426100 %recursive [%recursive module.t name.t ~]
6101+ %jrec
6102+ =/ public=(unit term) ?~(prelude ~ (jrec-alias at.t name.t molds.u.prelude))
6103+ ?^ public t(label `u.public)
6104+ =/ alias=(unit term) (jrec-alias at.t name.t molds.iface)
6105+ ?~ alias t(label ~)
6106+ t(label `(crip "{(trip u.alias)}.{(trip face)}"))
58436107 %collection [%collection name.t (turn args.t |=(c=itype (itype-in-import c iface face prelude)))]
58446108 %face [%face name.t $(t body.t)]
58456109 %fn [%fn $(t sample.t) $(t product.t)]
@@ -5913,9 +6177,46 @@
59136177 =/ rest=[params=iparams vars=(list @ud) next=@ud] $(names t.names, next +(next))
59146178 [[[i.names [%var next]] params.rest] [next vars.rest] next.rest]
59156179::
6180+:: Recognize a unique top-level source mold with exactly a null case and a
6181+:: faced atom-headed cell whose faced tail names that same mold. Its Jibb
6182+:: path and name provide nominal identity. Other recursive shapes fail closed;
6183+:: construction and matching expose the proven shape one layer at a time.
6184+++ simple-source-recursive
6185+ |= [name=term sh=shape state=istate]
6186+ ^- (unit itype)
6187+ ?. (lien top-molds.state |=(n=term =(n name))) ~
6188+ =/ original=(unit shape) (find-simple-mold name molds.state)
6189+ ?~ original ~
6190+ ?. =(u.original sh) ~
6191+ ?. ?=(%union -.sh) ~
6192+ =/ cs=(list shape) cases.sh
6193+ ?~ cs ~
6194+ ?~ t.cs ~
6195+ ?^ t.t.cs ~
6196+ ?. ?=(%const -.i.cs) ~
6197+ ?. =(%null form.lit.i.cs) ~
6198+ ?. ?=(%cell -.i.t.cs) ~
6199+ =/ fs=(list field) fields.i.t.cs
6200+ ?~ fs ~
6201+ ?~ t.fs ~
6202+ ?^ t.t.fs ~
6203+ ?. ?=(%face -.i.fs) ~
6204+ ?. ?=(%aura -.shape.i.fs) ~
6205+ ?. !=(0 aura.shape.i.fs) ~
6206+ ?. ?=(%face -.i.t.fs) ~
6207+ ?. !=(name.i.fs name.i.t.fs) ~
6208+ =/ tail=shape shape.i.t.fs
6209+ ?. ?=(%ref -.tail) ~
6210+ ?. =(names.tail ~[name]) ~
6211+ `[%jrec at.state name `name name.i.fs aura.shape.i.fs name.i.t.fs]
6212+::
59166213++ infer-mold-template
59176214 |= [sh=shape state=istate]
59186215 ^- (unit [template=ischeme state=istate])
6216+ =/ direct=(unit itype)
6217+ ?. ?=([@ ~] active.state) ~
6218+ (simple-source-recursive i.active.state sh state)
6219+ ?^ direct `[[u.direct ~] state]
59196220 ?: ?=(%generic -.sh)
59206221 ?~ vars.sh ~
59216222 ?. (distinct-params vars.sh) ~
@@ -5923,17 +6224,19 @@
59236224 =/ out=(unit [typ=itype state=istate])
59246225 (infer-simple-shape body.sh state(next next.fresh, params params.fresh, in-mold &))
59256226 ?~ out ~
6227+ ?^ (unresolved-hole holes.state.u.out holes.state state.u.out) ~
59266228 ?: &(?=(%union -.typ.u.out) !?=(%union -.body.sh) ?=(~ origin.typ.u.out)) ~
59276229 =? typ.u.out &(?=(%union -.typ.u.out) ?=(%union -.body.sh))
59286230 typ.u.out(args (turn vars.fresh |=(n=@ud `itype`[%var n])))
59296231 =/ used=(list @ud) (itype-vars typ.u.out)
59306232 ?. (levy used |=(n=@ud (lien vars.fresh |=(p=@ud =(p n))))) ~
5931− `[[typ.u.out vars.fresh] state.u.out(params params.state, in-mold in-mold.state)]
6233+ `[[typ.u.out vars.fresh] state.u.out(params params.state, in-mold in-mold.state, holes holes.state)]
59326234 =/ out=(unit [typ=itype state=istate])
59336235 (infer-simple-shape sh state(params ~, in-mold &))
59346236 ?~ out ~
6237+ ?^ (unresolved-hole holes.state.u.out holes.state state.u.out) ~
59356238 ?: ?=(^ (itype-vars typ.u.out)) ~
5936− `[[typ.u.out ~] state.u.out(params params.state, in-mold in-mold.state)]
6239+ `[[typ.u.out ~] state.u.out(params params.state, in-mold in-mold.state, holes holes.state)]
59376240::
59386241:: A direct imported reference may carry definite reader evidence. Only
59396242:: uniquely supplied, declared inputs are used; unsupported data stay generic.
@@ -6036,6 +6339,7 @@
60366339 |= [sh=shape state=istate]
60376340 ^- (unit [typ=itype state=istate])
60386341 ?- -.sh
6342+ %hole `[[%var next.state] state(next +(next.state), holes [[next.state at.sh] holes.state])]
60396343 %aura
60406344 ?: =(0 aura.sh) `[[%any-atom ~] state]
60416345 `[[%atom aura.sh] state]
@@ -6086,10 +6390,13 @@
60866390 ?~ prelude-entry ~
60876391 ?^ vars.u.prelude-entry ~
60886392 `[typ.u.prelude-entry state]
6393+ =/ direct=(unit itype) (simple-source-recursive n u.found state)
6394+ ?^ direct `[u.direct state]
60896395 =/ out=(unit [typ=itype state=istate])
60906396 $(sh u.found, state state(active [n active.state], in-mold &, params ~))
60916397 ?~ out ~
6092− `[(label-direct-union typ.u.out u.found n state) state.u.out(active active.state, in-mold in-mold.state, params params.state)]
6398+ ?^ (unresolved-hole holes.state.u.out holes.state state.u.out) ~
6399+ `[(label-direct-union typ.u.out u.found n state) state.u.out(active active.state, in-mold in-mold.state, params params.state, holes holes.state)]
60936400 %apply
60946401 ?~ ref.sh ~
60956402 =/ args=(unit [types=(list itype) state=istate]) (infer-shape-args args.sh state)
@@ -6123,11 +6430,12 @@
61236430 =/ out=(unit [typ=itype state=istate])
61246431 $(sh body.u.found, state state.u.args(active [n active.state.u.args], in-mold &, params u.params))
61256432 ?~ out ~
6433+ ?^ (unresolved-hole holes.state.u.out holes.state.u.args state.u.out) ~
61266434 ?: &(?=(%union -.typ.u.out) !?=(%union -.body.u.found) ?=(~ origin.typ.u.out)) ~
61276435 ?: &(?=(%union -.typ.u.out) ?=(%union -.body.u.found) !(lien top-molds.state.u.args |=(x=term =(x n)))) ~
61286436 =? typ.u.out &(?=(%union -.typ.u.out) ?=(%union -.body.u.found))
61296437 (label-direct-union typ.u.out(args types.u.args) u.found n state.u.args)
6130− `[typ.u.out state.u.out(active active.state.u.args, in-mold in-mold.state.u.args, params params.state.u.args)]
6438+ `[typ.u.out state.u.out(active active.state.u.args, in-mold in-mold.state.u.args, params params.state.u.args, holes holes.state.u.args)]
61316439 %tvar
61326440 =/ param=(unit itype) (iparam-lookup name.sh params.state)
61336441 ?^ param `[u.param state]
@@ -6167,12 +6475,12 @@
61676475 ^- isample-result
61686476 ?- -.s
61696477 %bind
6170− ?: |(?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
6478+ ?: |(=(name.s %proj) ?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
61716479 [%| "sample shadows a name"]
61726480 =/ t=itype [%var next.state]
61736481 [%& t [[name.s [t ~]] env] state(next +(next.state), binders [next.state binders.state])]
61746482 %face
6175− ?: |(?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
6483+ ?: |(=(name.s %proj) ?=(^ (ienv-lookup name.s env)) (lien globals.state |=(x=term =(x name.s))))
61766484 [%| "sample shadows a name"]
61776485 =/ t=(unit [typ=itype state=istate]) (infer-simple-shape shape.s state)
61786486 ?~ t [%| "sample mold is not supported by partial inference"]
@@ -6240,6 +6548,7 @@
62406548 |-
62416549 ?~ ds &
62426550 ?: ?=(%mold -.i.ds) $(ds t.ds)
6551+ ?: =(name.i.ds %proj) |
62436552 ?. (unique-value-name name.i.ds names) |
62446553 ?: ?=(^ (ienv-lookup name.i.ds env)) |
62456554 ?: (lien globals.state |=(n=term =(n name.i.ds))) |
@@ -6263,6 +6572,7 @@
62636572 |-
62646573 ?~ locals &
62656574 =/ n=term name.i.locals
6575+ ?: =(n %proj) |
62666576 ?. (unique-value-name n names) |
62676577 ?: (lien molds.state |=(m=[name=term body=shape] =(n name.m))) |
62686578 ?: (lien marks.state |=(m=term =(n m))) |
@@ -6442,6 +6752,9 @@
64426752 =/ retried=? ?=(%| -.inferred)
64436753 =? inferred retried (infer-recursive-gate d env local-state)
64446754 ?: ?=(%| -.inferred) $(ds t.ds, remaining [d remaining])
6755+ =. 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)))
6756+ =/ hole=(unit idiag) (unresolved-hole holes.state.p.inferred holes.state state.p.inferred)
6757+ ?^ hole [%| u.hole]
64456758 =/ merged=(unit [first=icap second=icap])
64466759 (merged-capitals caps.state.p.inferred sub.state.p.inferred)
64476760 ?^ merged
@@ -6457,7 +6770,7 @@
64576770 (weld (free-env-vars env sub.state.p.inferred) (free-cap-vars caps.state sub.state.p.inferred))
64586771 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
64596772 =. vars (skim vars |=(n=@ud !(lien free |=(f=@ud =(f n)))))
6460− $(ds t.ds, env [[name.d [typ vars]] env], state state.p.inferred(caps caps.state), progressed &)
6773+ $(ds t.ds, env [[name.d [typ vars]] env], state state.p.inferred(caps caps.state, holes holes.state), progressed &)
64616774::
64626775:: Try complete cyclic local groups after individual definitions stall.
64636776:: Components with non-gates or unresolved constraints stay unavailable.
@@ -6776,7 +7089,7 @@
67767089 [%| ["list branch pattern is not supported by partial inference" ~]]
67777090 =/ binder=(unit [head=term tail=term]) ?:(first-empty second-name first-name)
67787091 ?~ binder [%| ["list branch pattern is not supported by partial inference" ~]]
6779− ?: |(=(head.u.binder tail.u.binder) ?=(^ (ienv-lookup head.u.binder env)) ?=(^ (ienv-lookup tail.u.binder env)) (lien globals.state |=(n=term |(=(n head.u.binder) =(n tail.u.binder)))))
7092+ ?: |(=(head.u.binder %proj) =(tail.u.binder %proj) =(head.u.binder tail.u.binder) ?=(^ (ienv-lookup head.u.binder env)) ?=(^ (ienv-lookup tail.u.binder env)) (lien globals.state |=(n=term |(=(n head.u.binder) =(n tail.u.binder)))))
67807093 [%| ["pattern binder shadows a name" ~]]
67817094 =/ extended=ienv [[head.u.binder [i.args.typ ~]] [tail.u.binder [typ ~]] env]
67827095 =/ left=iresult
@@ -6813,7 +7126,7 @@
68137126 [%| ["unit branch pattern is not supported by partial inference" ~]]
68147127 =/ binder=(unit term) ?:(first-empty second-name first-name)
68157128 ?~ binder [%| ["unit branch pattern is not supported by partial inference" ~]]
6816− ?: |(?=(^ (ienv-lookup u.binder env)) (lien globals.state |=(n=term =(n u.binder))))
7129+ ?: |(=(u.binder %proj) ?=(^ (ienv-lookup u.binder env)) (lien globals.state |=(n=term =(n u.binder))))
68177130 [%| ["pattern binder shadows a name" ~]]
68187131 =/ payload=(unit itype) (unit-union-payload typ)
68197132 ?~ payload [%| ["unit branch subject is not supported by partial inference" ~]]
@@ -6913,7 +7226,7 @@
69137226 ^- (unit ienv)
69147227 =. t ?:(?=(%face -.t) body.t t)
69157228 ?: ?=(%bind -.p)
6916− ?: |(?=(^ (ienv-lookup name.p env)) (lien globals |=(n=term =(n name.p)))) ~
7229+ ?: |(=(name.p %proj) ?=(^ (ienv-lookup name.p env)) (lien globals |=(n=term =(n name.p)))) ~
69177230 `[[name.p [t ~]] env]
69187231 ?: ?=(%cell -.p) (union-pattern-bind-items items.p t env globals)
69197232 `env
@@ -6961,10 +7274,9 @@
69617274 $(xs t.xs, out (weld out rows), origin +(origin))
69627275::
69637276++ infer-known-union-whole
6964− |= [e=expr env=ienv state=istate]
7277+ |= [e=expr env=ienv subject=iresult]
69657278 ^- (unit iresult)
69667279 ?> ?=(%branch -.e)
6967− =/ subject=iresult (infer-fragment subject.e env state)
69687280 ?: ?=(%| -.subject) `subject
69697281 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
69707282 ?. ?=(%union -.typ) `[%| ["branch is not supported by partial inference" ~]]
@@ -6999,10 +7311,9 @@
69997311 $(arms t.arms, remaining (skim remaining |=(c=itype !=(%full (union-pattern pat.a c)))), st state.p.body, answer `result)
70007312::
70017313++ infer-known-union-context-whole
7002− |= [e=expr expected=itype env=ienv state=istate context=span]
7314+ |= [e=expr expected=itype env=ienv subject=iresult context=span]
70037315 ^- (unit iresult)
70047316 ?> ?=(%branch -.e)
7005− =/ subject=iresult (infer-fragment subject.e env state)
70067317 ?: ?=(%| -.subject) `subject
70077318 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
70087319 ?. ?=(%union -.typ) `[%| ["branch is not supported by partial inference" ~]]
@@ -7044,10 +7355,9 @@
70447355 $(arms t.arms, remaining (skim remaining |=(c=itype !=(%full (union-pattern pat.a c)))), st state.p.body(sub sub.fit, next next.fit), answer `expected)
70457356::
70467357++ infer-known-union-finite
7047− |= [e=expr env=ienv state=istate expected=(unit [typ=itype context=span])]
7358+ |= [e=expr env=ienv subject=iresult expected=(unit [typ=itype context=span])]
70487359 ^- iresult
70497360 ?> ?=(%branch -.e)
7050− =/ subject=iresult (infer-fragment subject.e env state)
70517361 ?: ?=(%| -.subject) subject
70527362 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
70537363 ?. ?=(%union -.typ) [%| ["branch is not supported by partial inference" ~]]
@@ -7142,29 +7452,108 @@
71427452 [%| ["single-case branch result needs context in partial inference" ~]]
71437453 [%& typ.u.expected state.p.body(sub sub.fit, next next.fit)]
71447454::
7455+:: This view is used only by pattern analysis, never exported or bound as
7456+:: the subject. Only null plus a two-binder/wildcard cell is supported; its
7457+:: tail keeps the original recursive type. Other patterns fail closed.
7458+++ jrec-match-view
7459+ |= [e=expr subject=iresult]
7460+ ^- iresult
7461+ ?: ?=(%| -.subject) subject
7462+ ?. ?=(%branch -.e) subject
7463+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
7464+ ?. ?=(%jrec -.typ) subject
7465+ ?~ arms.e subject
7466+ ?~ t.arms.e subject
7467+ ?^ t.t.arms.e subject
7468+ =/ x=pattern pat.i.arms.e
7469+ =/ y=pattern pat.i.t.arms.e
7470+ =/ empty=? &(?=(%lit -.x) =(%null form.lit.x))
7471+ =/ full=pattern ?:(empty y x)
7472+ ?. |(empty &(?=(%lit -.y) =(%null form.lit.y))) subject
7473+ ?. ?=(%cell -.full) subject
7474+ ?~ items.full subject
7475+ ?~ t.items.full subject
7476+ ?^ t.t.items.full subject
7477+ ?. |(?=(%bind -.i.items.full) ?=(%any -.i.items.full)) subject
7478+ ?. |(?=(%bind -.i.t.items.full) ?=(%any -.i.t.items.full)) subject
7479+ ?: =(0 jrec-fuel.state.p.subject)
7480+ [%| ["recursive mold unfolding needs unsupported inference" ~]]
7481+ =/ nil=itype [%const [%null %n 0 '~']]
7482+ =/ cell=itype [%cell [%face head.typ [%atom aura.typ]] [%face tail.typ typ]]
7483+ [%& [%union ~[nil cell] ~ ~ ~] state.p.subject(jrec-fuel (dec jrec-fuel.state.p.subject))]
7484+::
7485+++ infer-known-union-branch-subject
7486+ |= [e=expr env=ienv subject=iresult]
7487+ ^- iresult
7488+ =. subject (jrec-match-view e subject)
7489+ =/ whole=(unit iresult) (infer-known-union-whole e env subject)
7490+ ?~ whole (infer-known-union-finite e env subject ~)
7491+ u.whole
7492+::
71457493++ infer-known-union-branch
71467494 |= [e=expr env=ienv state=istate]
71477495 ^- iresult
7148− =/ whole=(unit iresult) (infer-known-union-whole e env state)
7149− ?~ whole (infer-known-union-finite e env state ~)
7150− u.whole
7496+ ?> ?=(%branch -.e)
7497+ (infer-known-union-branch-subject e env (infer-fragment subject.e env state))
71517498::
7152−++ infer-known-union-context
7153− |= [e=expr expected=itype env=ienv state=istate context=span]
7499+++ infer-known-union-context-subject
7500+ |= [e=expr expected=itype env=ienv subject=iresult context=span]
71547501 ^- iresult
7155− =/ whole=(unit iresult) (infer-known-union-context-whole e expected env state context)
7156− ?~ whole (infer-known-union-finite e env state `[expected context])
7502+ =. subject (jrec-match-view e subject)
7503+ =/ whole=(unit iresult) (infer-known-union-context-whole e expected env subject context)
7504+ ?~ whole (infer-known-union-finite e env subject `[expected context])
71577505 u.whole
71587506::
7507+:: Limit speculative subject inference to wings and shallow calls;
7508+:: grouping is peeled linearly and cannot introduce a nested branch.
7509+++ simple-union-subject-arg
7510+ |= e=expr
7511+ ^- ?
7512+ ?- -.e
7513+ %wing &
7514+ %lit &
7515+ %str !(lien pieces.e |=(p=piece ?=(%expr -.p)))
7516+ * |
7517+ ==
7518+::
7519+++ safe-union-subject
7520+ |= e=expr
7521+ ^- ?
7522+ ?: ?=(%group -.e) $(e inner.e)
7523+ ?: ?=(%wing -.e) &
7524+ ?. ?=(%call -.e) |
7525+ ?. ?=(%wing -.head.e) |
7526+ (levy args.e simple-union-subject-arg)
7527+::
7528+++ duplicate-loobean-arms
7529+ |= e=expr
7530+ ^- ?
7531+ ?. ?=(%branch -.e) |
7532+ ?~ arms.e |
7533+ ?~ t.arms.e |
7534+ ?^ t.t.arms.e |
7535+ =/ x=pattern pat.i.arms.e
7536+ =/ y=pattern pat.i.t.arms.e
7537+ ?. &(?=(%lit -.x) ?=(%lit -.y)) |
7538+ ?. &(=(%loobean form.lit.x) =(%loobean form.lit.y)) |
7539+ =(val.lit.x val.lit.y)
7540+::
7541+++ union-subject-call
7542+ |= e=expr
7543+ ^- ?
7544+ ?: ?=(%group -.e) $(e inner.e)
7545+ ?=(%call -.e)
7546+::
71597547++ known-union-subject
71607548 |= [e=expr env=ienv state=istate]
7161− ^- (unit itype)
7162− ?. ?=(%wing -.e) ~
7549+ ^- (unit iresult)
7550+ ?. (safe-union-subject e) ~
71637551 =/ subject=iresult (infer-fragment e env state)
7164− ?: ?=(%| -.subject) ~
7552+ ?: ?=(%| -.subject) ?:((union-subject-call e) `subject ~)
71657553 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
7166− ?. ?=(%union -.typ) ~
7167− `typ
7554+ ?. |(?=(%union -.typ) ?=(%jrec -.typ)) ~
7555+ `subject
7556+::
71687557::
71697558:: Infer changes only against a fully known record spine. Retain the
71707559:: target type; unknown spines and repeated edits remain unsupported.
@@ -7312,6 +7701,15 @@
73127701 =/ head=expr [%lit at.e [%term %tas tag.e (crip ['%' (trip tag.e)])]]
73137702 [%tuple at.e ~[[at.e ~ head] [(span-of val.e) ~ val.e]]]
73147703::
7704+:: A segment costs one shared step; dynamic segments are not handled yet.
7705+++ qath-static-fuel
7706+ |= [segs=(list qseg) fuel=@ud]
7707+ ^- (unit @ud)
7708+ ?~ segs `fuel
7709+ ?: =(0 fuel) ~
7710+ ?. ?=(%knot -.i.segs) ~
7711+ $(segs t.segs, fuel (dec fuel))
7712+::
73157713++ infer-fragment
73167714 |= [e=expr env=ienv state=istate]
73177715 ^- iresult
@@ -7354,6 +7752,21 @@
73547752 ?: ?=(%| -.result) result
73557753 [%& [%collection %list ~[element]] state.p.result]
73567754 %str (infer-string-pieces pieces.e env state)
7755+ %qath
7756+ ?~ prelude.state [%| ["application path needs the standard prelude in partial inference" ~]]
7757+ ?. =(at.u.prelude.state /lib/jibb/prelude/jibb)
7758+ [%| ["application path needs the standard prelude in partial inference" ~]]
7759+ =/ standard=(unit ischeme) (find-jibb-mold %qath u.prelude.state)
7760+ ?~ standard [%| ["application path needs the standard prelude in partial inference" ~]]
7761+ ?. ?=(~ vars.u.standard) [%| ["application path mold needs unsupported inference" ~]]
7762+ =/ typ=itype typ.u.standard
7763+ ?. ?=(%jrec -.typ) [%| ["application path mold needs unsupported inference" ~]]
7764+ ?. &(=(at.typ /lib/jibb/internal/jibb) =(%qath name.typ) =(%i head.typ) =(%ta aura.typ) =(%t tail.typ))
7765+ [%| ["application path mold needs unsupported inference" ~]]
7766+ ?: =(0 jrec-fuel.state) [%| ["recursive mold unfolding needs unsupported inference" ~]]
7767+ =/ remain=(unit @ud) (qath-static-fuel segs.e (dec jrec-fuel.state))
7768+ ?~ remain [%| ["application path segments need unsupported inference" ~]]
7769+ [%& typ state(jrec-fuel u.remain)]
73577770 %wing
73587771 ?~ names.e [%| ["empty wing" ~]]
73597772 ?^ t.names.e
@@ -7396,6 +7809,9 @@
73967809 [%| ["local molds shadow a name" ~]]
73977810 =/ local-state=istate
73987811 state(globals (weld local-names globals.state), molds (weld local-molds molds.state))
7812+ =/ mold-hole=(unit span) (simple-local-mold-hole defs.e)
7813+ ?^ mold-hole
7814+ [%| ["type hole needs a determined type" ~[[u.mold-hole "unresolved type hole"]]]]
73997815 ?. (local-molds-supported local-molds local-state)
74007816 [%| ["local molds need unsupported inference" ~]]
74017817 =/ values=(list def) (local-value-defs defs.e)
@@ -7410,9 +7826,10 @@
74107826 ?: (single-structured-pattern e) (infer-single-case-branch e env state ~)
74117827 (infer-cell-branch e env state ~)
74127828 ?^ t.t.arms.e (infer-known-union-branch e env state)
7413− =/ known=(unit itype) (known-union-subject subject.e env state)
7414− ?: &(?=(^ known) ?=(~ (unit-union-payload u.known)))
7415− (infer-known-union-branch e env state)
7829+ =/ known=(unit iresult) (known-union-subject subject.e env state)
7830+ ?: &(?=(^ known) ?=(%| -.u.known) !(duplicate-loobean-arms e)) u.known
7831+ ?: &(?=(^ known) ?=(%& -.u.known) ?=(~ (unit-union-payload (itype-normalize typ.p.u.known sub.state.p.u.known))))
7832+ (infer-known-union-branch-subject e env u.known)
74167833 =/ x=arm i.arms.e
74177834 =/ y=arm i.t.arms.e
74187835 ?: |((unit-empty-pattern pat.x) (unit-empty-pattern pat.y))
@@ -7421,7 +7838,7 @@
74217838 ?. ?=(%lit -.pat.y) (infer-known-union-branch e env state)
74227839 ?. &(=(%loobean form.lit.pat.x) =(%loobean form.lit.pat.y))
74237840 (infer-known-union-branch e env state)
7424− ?^ known (infer-known-union-branch e env state)
7841+ ?: &(?=(^ known) ?=(%& -.u.known)) (infer-known-union-branch-subject e env u.known)
74257842 ?: =(val.lit.pat.x val.lit.pat.y)
74267843 [%| ["branch does not cover both loobeans" ~]]
74277844 =/ subject=iresult $(e subject.e)
@@ -7462,6 +7879,9 @@
74627879 =/ value=iresult
74637880 (infer-call-context-arg val.e typ.u.target env state.u.target at.shape.e)
74647881 ?: ?=(%| -.value) value
7882+ =/ shape=(unit [source=iwfields target=iwfields])
7883+ (width-shape typ.p.value typ.u.target sub.state.p.value)
7884+ ?^ shape [%| ["record width constraint needs unsupported inference" ~]]
74657885 =/ fit=ifit (itype-fit typ.p.value typ.u.target sub.state.p.value next.state.p.value)
74667886 ?: ?=(%unknown -.fit) [%| ["cast constraint is not supported by partial inference" ~]]
74677887 ?: ?=(%bad -.fit)
@@ -7493,6 +7913,8 @@
74937913 [%& [%fn typ.p.sam typ.p.body] state.p.body]
74947914 %call
74957915 ?~ args.e [%| ["call has no argument" ~]]
7916+ ?: (explicit-proj-call e env state)
7917+ [%| ["proj needs an expected record type" ~]]
74967918 (infer-call-with-head e env state (infer-fragment head.e env state))
74977919 * [%| ["expression is not supported by partial inference" ~]]
74987920 ==
@@ -7503,6 +7925,20 @@
75037925::
75047926:: Check a call using the head already inferred in this state. Keeping
75057927:: this shared avoids evaluating or instantiating a contextual head twice.
7928+++ width-has-projections
7929+ |= ps=(list iwprojection)
7930+ ^- ?
7931+ ?~ ps |
7932+ &
7933+::
7934++$ iwidth-elaboration [original=expr typ=itype sub=isub projections=(list iwprojection)]
7935+++ infer-width-elaboration
7936+ |= [e=expr env=ienv state=istate]
7937+ ^- (each iwidth-elaboration idiag)
7938+ =/ out=iresult (infer-fragment e env state)
7939+ ?: ?=(%| -.out) [%| p.out]
7940+ [%& [e typ.p.out sub.state.p.out (flop projections.state.p.out)]]
7941+::
75067942++ infer-call-with-head
75077943 |= [e=expr env=ienv state=istate head=iresult]
75087944 ^- iresult
@@ -7522,7 +7958,13 @@
75227958 =/ st=istate state.p.arg
75237959 =/ ht=itype (itype-walk typ.p.head sub.st)
75247960 ?: ?=(%fn -.ht)
7525− =/ fit=ifit (itype-fit typ.p.arg sample.ht sub.st next.st)
7961+ =/ shape=(unit [source=iwfields target=iwfields])
7962+ ?^ t.args.e ~
7963+ (width-shape typ.p.arg sample.ht sub.st)
7964+ ?^ shape [%| ["record width constraint needs unsupported inference" ~]]
7965+ =/ fit=ifit
7966+ ?^ t.args.e (itype-fit-inner typ.p.arg sample.ht sub.st next.st & |)
7967+ (itype-fit typ.p.arg sample.ht sub.st next.st)
75267968 ?: ?=(%unknown -.fit) [%| ["call constraint is not supported by partial inference" ~]]
75277969 ?: ?=(%bad -.fit)
75287970 ?~ t.args.e
@@ -7622,6 +8064,87 @@
76228064 ?~ sub (infer-call-with-head e env state head)
76238065 (infer-call-with-head e env state [%& typ.p.head state.p.head(sub u.sub)])
76248066::
8067+:: An eligible fully faced literal receives context by name, in source order.
8068+++ width-literal-fields
8069+ |= [items=(list item) axis=@ud fuel=@ud]
8070+ ^- (unit iwfields)
8071+ =/ order=(list iwfield) ~
8072+ =/ index=(map term iwfield) *(map term iwfield)
8073+ |-
8074+ ?~ items ~
8075+ ?: =(0 fuel) ~
8076+ ?~ face.i.items ~
8077+ =/ at-axis=@ud ?~(t.items axis (mul 2 axis))
8078+ =/ entry=iwfield [u.face.i.items at-axis [%noun ~]]
8079+ ?: ?=(^ (~(get by index) name.entry)) ~
8080+ =. index (~(put by index) name.entry entry)
8081+ =. order [entry order]
8082+ ?~ t.items `[(flop order) index]
8083+ $(items t.items, axis +((mul 2 axis)), fuel (dec fuel))
8084+++ width-infer-items
8085+ |= [items=(list item) expected=(map term iwfield) env=ienv state=istate context=span]
8086+ ^- iresult
8087+ ?~ items [%| ["empty record is not supported" ~]]
8088+ ?~ face.i.items [%| ["record face needs unsupported inference" ~]]
8089+ =/ field=(unit iwfield) (~(get by expected) u.face.i.items)
8090+ =/ head=iresult
8091+ ?~ field (infer-fragment val.i.items env state)
8092+ (infer-call-context-arg val.i.items typ.u.field env state context)
8093+ ?: ?=(%| -.head) head
8094+ =/ typ=itype [%face u.face.i.items typ.p.head]
8095+ ?~ t.items [%& typ state.p.head]
8096+ =/ tail=iresult $(items t.items, state state.p.head)
8097+ ?: ?=(%| -.tail) tail
8098+ [%& [%cell typ typ.p.tail] state.p.tail]
8099+++ width-infer-literal
8100+ |= [e=expr expected=itype env=ienv state=istate context=span]
8101+ ^- (unit iresult)
8102+ ?. ?=(%tuple -.e) ~
8103+ ?. |(?=(%cell -.expected) ?=(%face -.expected)) ~
8104+ =/ source=(unit iwfields) (width-literal-fields items.e 1 4.096)
8105+ =/ target=(unit iwfields) (width-scan expected sub.state 1 4.096)
8106+ ?~ source ~
8107+ ?~ target ~
8108+ ?: (lth (lent order.u.source) (lent order.u.target)) ~
8109+ ?. (width-in-order order.u.source order.u.target)
8110+ `(infer-simple-items items.e env state)
8111+ `(width-infer-items items.e index.u.target env state context)
8112+::
8113+:: Recognize only the reserved unqualified, one-argument operation.
8114+++ explicit-proj-call
8115+ |= [e=expr env=ienv state=istate]
8116+ ^- ?
8117+ ?. ?=(%call -.e) |
8118+ ?. ?=([* ~] args.e) |
8119+ ?. ?=(%wing -.head.e) |
8120+ ?. =(names.head.e ~[%proj]) |
8121+ ?: ?=(^ (ienv-lookup %proj env)) |
8122+ ?: (lien globals.state |=(n=term =(n %proj))) |
8123+ ?~ prelude.state &
8124+ ?:(?=(^ (ienv-lookup %proj values.u.prelude.state)) | &)
8125+++ infer-proj-source
8126+ |= [e=expr expected=itype env=ienv state=istate context=span]
8127+ ^- iresult
8128+ ?: ?=(%group -.e) $(e inner.e)
8129+ =/ literal=(unit iresult) (width-infer-literal e expected env state context)
8130+ ?^ literal u.literal
8131+ (infer-fragment e env state)
8132+++ infer-proj-context
8133+ |= [e=expr expected=itype env=ienv state=istate context=span]
8134+ ^- iresult
8135+ ?> ?=(%call -.e)
8136+ ?~ args.e [%| ["proj needs one record" ~]]
8137+ ?. |(?=(%cell -.expected) ?=(%face -.expected)) [%| ["proj needs an expected record type" ~]]
8138+ =/ value=iresult (infer-proj-source i.args.e expected env state context)
8139+ ?: ?=(%| -.value) value
8140+ =/ shape=(unit [source=iwfields target=iwfields])
8141+ (width-proj-shape typ.p.value expected sub.state.p.value)
8142+ ?~ shape [%| ["proj needs a known record containing its expected fields" ~]]
8143+ =/ project=(unit iwidth-result) (width-project u.shape sub.state.p.value next.state.p.value)
8144+ ?~ project [%| ["proj constraint needs unsupported inference" ~]]
8145+ =/ st=istate state.p.value(sub sub.u.project, next next.u.project)
8146+ [%& expected st(projections [[at.e e typ.p.value expected steps.u.project] projections.st])]
8147+::
76258148++ infer-call-context-arg
76268149 |= [e=expr expected=itype env=ienv state=istate context=span]
76278150 ^- iresult
@@ -7635,6 +8158,24 @@
76358158 =/ target=itype (itype-walk expected sub.state)
76368159 |-
76378160 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
8161+ ?: (explicit-proj-call e env state)
8162+ (infer-proj-context e expected env state context)
8163+ :: Only the source-proven one-layer cell is exposed. Each recursive
8164+ :: descent consumes one written tuple; named values use ordinary fit.
8165+ ?: &(?=(%jrec -.target) ?=(%lit -.e) =(%null form.lit.e))
8166+ ?: =(0 jrec-fuel.state) [%| ["recursive mold unfolding needs unsupported inference" ~]]
8167+ [%& target state(jrec-fuel (dec jrec-fuel.state))]
8168+ ?: &(?=(%jrec -.target) ?=(%tuple -.e))
8169+ ?: =(0 jrec-fuel.state) [%| ["recursive mold unfolding needs unsupported inference" ~]]
8170+ =. state state(jrec-fuel (dec jrec-fuel.state))
8171+ =/ shape=itype
8172+ [%cell [%face head.target [%atom aura.target]] [%face tail.target target]]
8173+ =/ value=iresult (infer-call-context-items items.e shape env state context)
8174+ ?: ?=(%| -.value) value
8175+ =/ fit=ifit (itype-fit typ.p.value shape sub.state.p.value next.state.p.value)
8176+ ?: ?=(%unknown -.fit) [%| ["recursive mold cell constraint needs unsupported inference" ~]]
8177+ ?: ?=(%bad -.fit) [%| ["recursive mold cell does not fit its source shape" ~]]
8178+ [%& target state.p.value(sub sub.fit, next next.fit)]
76388179 ?: ?=(%call -.e) (infer-contextual-call e target env state)
76398180 ?: (single-structured-pattern e)
76408181 (infer-single-case-branch e env state `[target context])
@@ -7649,11 +8190,12 @@
76498190 ?. =(%loobean form.literal.target) ~
76508191 `[%const lit.e]
76518192 ?^ singleton [%& u.singleton state]
7652− =/ known=(unit itype)
8193+ =/ known=(unit iresult)
76538194 ?: ?=(%branch -.e) (known-union-subject subject.e env state)
76548195 ~
7655− ?: &(?=(^ known) ?=(~ (unit-union-payload u.known)))
7656− (infer-known-union-context e target env state context)
8196+ ?: &(?=(^ known) ?=(%| -.u.known) !(duplicate-loobean-arms e)) u.known
8197+ ?: &(?=(^ known) ?=(%& -.u.known) ?=(~ (unit-union-payload (itype-normalize typ.p.u.known sub.state.p.u.known))))
8198+ (infer-known-union-context-subject e target env u.known context)
76578199 ?: &(?=(%union -.target) ?=(%unit -.e))
76588200 (infer-unit-context e target env state context)
76598201 ?: &(?=(%flag -.target) (context-union-branch e))
@@ -7669,12 +8211,20 @@
76698211 (infer-fragment e env state)
76708212::
76718213:: Preserve each written face; the final complete sample fit checks faces.
8214+:: A tuple or positional field face belongs to the enclosing sample,
8215+:: not to the expression at that position. A second face, if present,
8216+:: is part of the value's own expected type.
8217+++ projection-field-target
8218+ |= expected=itype
8219+ ^- itype
8220+ ?:(?=(%face -.expected) body.expected expected)
8221+::
76728222++ infer-call-context-items
76738223 |= [items=(list item) expected=itype env=ienv state=istate context=span]
76748224 ^- iresult
76758225 ?~ items [%| ["empty cell is not supported by partial inference" ~]]
76768226 ?~ t.items
7677− =/ last=iresult (infer-call-context-arg val.i.items expected env state context)
8227+ =/ last=iresult (infer-call-context-arg val.i.items (projection-field-target expected) env state context)
76788228 ?: ?=(%| -.last) last
76798229 =/ typ=itype typ.p.last
76808230 =. typ ?~(face.i.items typ [%face u.face.i.items typ])
@@ -7683,7 +8233,7 @@
76838233 |-
76848234 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
76858235 ?. ?=(%cell -.target) (infer-simple-items items env state)
7686− =/ head=iresult (infer-call-context-arg val.i.items hed.target env state context)
8236+ =/ head=iresult (infer-call-context-arg val.i.items (projection-field-target hed.target) env state context)
76878237 ?: ?=(%| -.head) head
76888238 =/ typ=itype typ.p.head
76898239 =. typ ?~(face.i.items typ [%face u.face.i.items typ])
@@ -7695,13 +8245,13 @@
76958245 |= [args=(list expr) expected=itype env=ienv state=istate context=span]
76968246 ^- iresult
76978247 ?~ args [%| ["call has no argument" ~]]
7698− ?~ t.args (infer-call-context-arg i.args expected env state context)
8248+ ?~ t.args (infer-call-context-arg i.args (projection-field-target expected) env state context)
76998249 =/ target=itype (itype-walk expected sub.state)
77008250 |-
77018251 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
77028252 ?. ?=(%cell -.target)
77038253 (infer-simple-items (turn args |=(a=expr [(span-of a) ~ a])) env state)
7704− =/ head=iresult (infer-call-context-arg i.args hed.target env state context)
8254+ =/ head=iresult (infer-call-context-arg i.args (projection-field-target hed.target) env state context)
77058255 ?: ?=(%| -.head) head
77068256 =/ tail=iresult (infer-call-context-args t.args tal.target env state.p.head context)
77078257 ?: ?=(%| -.tail) tail
@@ -7733,7 +8283,7 @@
77338283 ?~ pats [%& ~]
77348284 ?. ?=(%bind -.i.pats) [%| 'branch pattern is not supported by partial inference']
77358285 =/ name=term name.i.pats
7736− ?: |(?=(^ (ienv-lookup name env)) (lien globals |=(n=term =(n name))) (lien seen |=(n=term =(n name))))
8286+ ?: |(=(name %proj) ?=(^ (ienv-lookup name env)) (lien globals |=(n=term =(n name))) (lien seen |=(n=term =(n name))))
77378287 [%| 'pattern shadows a name']
77388288 =/ rest=(each (list term) @t) $(pats t.pats, seen [name seen])
77398289 ?: ?=(%| -.rest) rest
@@ -7758,7 +8308,7 @@
77588308 ?~ t.names |
77598309 =. typ (itype-walk typ sub)
77608310 ?: ?=(%cell -.typ) $(typ tal.typ, names t.names)
7761− |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
8311+ |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
77628312::
77638313++ cell-binder-pattern
77648314 |= e=expr
@@ -7830,6 +8380,7 @@
78308380 ?~ args.t (trip u.label.t)
78318381 "({(trip u.label.t)} {(show-itype-cases args.t sub)})"
78328382 %recursive ?~(label.t "recursive mold" (trip u.label.t))
8383+ %jrec ?~(label.t "recursive mold" (trip u.label.t))
78338384 %collection "({(trip name.t)} {(show-itype-cases args.t sub)})"
78348385 %face "[{(trip name.t)}={(show-itype-context body.t sub)}]"
78358386 %fn "$-({(show-itype-context sample.t sub)} {(show-itype-context product.t sub)})"
@@ -7875,6 +8426,7 @@
78758426 %const |
78768427 %union |((lien cases.typ |=(c=itype (itype-has-nvar c))) (lien args.typ |=(c=itype (itype-has-nvar c))))
78778428 %recursive |
8429+ %jrec |
78788430 %collection (lien args.typ |=(c=itype (itype-has-nvar c)))
78798431 %face $(typ body.typ)
78808432 %fn |($(typ sample.typ) $(typ product.typ))
@@ -7984,6 +8536,7 @@
79848536 %const |
79858537 %union |((lien cases.t |=(c=itype (has-atom-var n c))) (lien args.t |=(c=itype (has-atom-var n c))))
79868538 %recursive |
8539+ %jrec |
79878540 %collection (lien args.t |=(c=itype (has-atom-var n c)))
79888541 %face $(t body.t)
79898542 %fn |($(t sample.t) $(t product.t))
@@ -8356,35 +8909,63 @@
83568909 =/ seeds=ienv (group-seed-env entries.p.seeded ~)
83578910 =/ body=igate-seeds (infer-gate-group-bodies entries.p.seeded seeds state.p.seeded)
83588911 ?: ?=(%| -.body) body
8912+ :: Per-member ownership through mutual recursion is not implemented.
8913+ ?: !=(projections.state.p.body projections.state)
8914+ [%| ["record projection in recursive groups needs unsupported inference" ~]]
8915+ ?: !=(holes.state.p.body holes.state)
8916+ [%| ["holes in recursive groups need unsupported inference" ~]]
83598917 ?: (pending-tags tags.state.p.body sub.state.p.body)
83608918 [%| ["recursive group has unresolved literal constraints" ~]]
83618919 =/ schemes=(each ienv idiag) (group-schemes entries.p.body env state state.p.body)
83628920 ?: ?=(%| -.schemes) schemes
83638921 [%& [(weld p.schemes env) state.p.body(globals globals.state)]]
83648922::
8923+++ width-finalize
8924+ |= [ps=(list iwprojection) sub=isub visible=(list @ud)]
8925+ ^- (unit (list iwprojection))
8926+ ?~ ps `~
8927+ ?: (lien t.ps |=(p=iwprojection =(at.p at.i.ps))) ~
8928+ =/ src=itype (default-decimals (itype-normalize source.i.ps sub))
8929+ =/ dst=itype (default-decimals (itype-normalize target.i.ps sub))
8930+ ?: |((itype-has-nvar src) (itype-has-nvar dst) (itype-has-tag src) (itype-has-tag dst)) ~
8931+ =/ vars=(list @ud) (weld (itype-vars src) (itype-vars dst))
8932+ ?. (levy vars |=(n=@ud (lien visible |=(v=@ud =(n v))))) ~
8933+ =/ rest=(unit (list iwprojection)) $(ps t.ps)
8934+ ?~ rest ~
8935+ =/ entry=iwprojection i.ps
8936+ =. entry entry(source src, target dst)
8937+ `[entry u.rest]
8938+::
83658939++ add-supported-defs
8366− |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile)]
8367− ^- ienv
8368− ?~ ds env
8940+ |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition)]
8941+ ^- [env=ienv artifacts=(list iwidth-definition)]
8942+ ?~ ds [env artifacts]
83698943 =/ d=def i.ds
83708944 ?: ?=(%mold -.d) $(ds t.ds)
83718945 ?. (unique-value-name name.d globals) $(ds t.ds)
83728946 ?^ (ienv-lookup name.d env) $(ds t.ds)
83738947 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
8374− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude]
8948+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
83758949 =. initial (reserve-def-caps val.d initial)
83768950 =/ result=iresult (infer-fragment val.d env initial)
83778951 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
83788952 ?: ?=(%| -.result) $(ds t.ds)
8953+ =. 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)))
8954+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
83798955 ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
83808956 =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
83818957 ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
83828958 ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
83838959 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
83848960 ?: (gth (lent vars) 26) $(ds t.ds)
8961+ =/ finalized=(unit (list iwprojection))
8962+ (width-finalize projections.state.p.result sub.state.p.result vars)
8963+ ?~ finalized $(ds t.ds)
8964+ =? artifacts ?=(^ u.finalized)
8965+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
83858966 $(ds t.ds, env [[name.d [typ vars]] env])
83868967::
8387−+$ iresolved [env=ienv grouped=(list term)]
8968++$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
83888969+$ iadj (map term (list term))
83898970+$ ivisited (map term ?)
83908971+$ iwork (list [name=term done=?])
@@ -8478,9 +9059,9 @@
84789059 (lien (graph-edges i.component graph) |=(x=term =(x i.component)))
84799060::
84809061++ add-groups
8481− |= [ds=(list def) components=icomponents graph=iadj env=ienv grouped=(list term) state=istate]
9062+ |= [ds=(list def) components=icomponents graph=iadj env=ienv grouped=(list term) artifacts=(list iwidth-definition) state=istate]
84829063 ^- iresolved
8483− ?~ components [env grouped]
9064+ ?~ components [env grouped artifacts]
84849065 =/ component=(list term) i.components
84859066 ?. (graph-cycle component graph) $(components t.components)
84869067 ?: (lien component |=(n=term ?=(^ (ienv-lookup n env)))) $(components t.components)
@@ -8499,17 +9080,19 @@
84999080 ^- iresolved
85009081 =/ env=ienv ~
85019082 =/ grouped=(list term) ~
9083+ =/ artifacts=(list iwidth-definition) ~
85029084 =/ names=(list term) (global-value-names ds)
85039085 =/ nameset=ivisited (graph-nameset names ~)
85049086 =/ graph=iadj (graph-make-forward ds nameset ~)
85059087 =/ components=icomponents (graph-components ds names)
85069088 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
85079089 |-
8508− =/ next=ienv (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds at prelude)
8509− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude]
8510− =/ out=iresolved (add-groups ds components graph next grouped initial)
9090+ =/ next=[env=ienv artifacts=(list iwidth-definition)]
9091+ (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9092+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~]
9093+ =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
85119094 ?: =(env env.out) out
8512− $(env env.out, grouped grouped.out)
9095+ $(env env.out, grouped grouped.out, artifacts artifacts.out)
85139096::
85149097++ resolve-supported-defs
85159098 |= [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)]
@@ -8768,11 +9351,142 @@
87689351 [at.first at.second (union-relate a (project-union-mold second molds ~))]
87699352 (weld pairs $(cases t.cases))
87709353::
9354+:: A closed structural mold supplies no equation to determine a hole.
9355+:: Applications, references, unbound capitals and unions are unproved.
9356+++ simple-mold-hole
9357+ |= sh=shape
9358+ ^- (unit (unit span))
9359+ ?: ?=(%generic -.sh)
9360+ ?~ vars.sh ~
9361+ ?. (distinct-params vars.sh) ~
9362+ (simple-mold-hole-in body.sh vars.sh)
9363+ (simple-mold-hole-in sh ~)
9364+++ simple-mold-hole-in
9365+ |= [sh=shape vars=(list @t)]
9366+ ^- (unit (unit span))
9367+ ?- -.sh
9368+ %hole ``at.sh
9369+ ?(%aura %noun %void %flag %const) `~
9370+ %tvar ?:((lien vars |=(v=@t =(v name.sh))) `~ ~)
9371+ %cell (simple-mold-field-holes fields.sh vars)
9372+ %fn
9373+ =/ a=(unit (unit span)) $(sh sample.sh)
9374+ ?~ a ~
9375+ =/ b=(unit (unit span)) $(sh product.sh)
9376+ ?~ b ~
9377+ `?~(u.a u.b u.a)
9378+ %generic ~
9379+ * ~
9380+ ==
9381+++ simple-mold-field-holes
9382+ |= [fields=(list field) vars=(list @t)]
9383+ ^- (unit (unit span))
9384+ ?~ fields `~
9385+ =/ f=field i.fields
9386+ =/ first=(unit (unit span))
9387+ ?- -.f
9388+ %face (simple-mold-hole-in shape.f vars)
9389+ %bare (simple-mold-hole-in shape.f vars)
9390+ %pun ~
9391+ ==
9392+ ?~ first ~
9393+ =/ rest=(unit (unit span)) $(fields t.fields)
9394+ ?~ rest ~
9395+ `?~(u.first u.rest u.first)
9396+++ simple-local-mold-hole
9397+ |= defs=(list def)
9398+ ^- (unit span)
9399+ ?~ defs ~
9400+ ?. ?=(%mold -.i.defs) $(defs t.defs)
9401+ =/ found=(unit (unit span)) (simple-mold-hole shape.i.defs)
9402+ ?~ found $(defs t.defs)
9403+ ?^ u.found u.found
9404+ $(defs t.defs)
9405+::
9406+:: A partial prelude may omit unsupported declarations, but may not
9407+:: publish an interface while a named mold's hole remains unchecked.
9408+++ shape-has-hole
9409+ |= sh=shape
9410+ ^- ?
9411+ ?- -.sh
9412+ %hole &
9413+ %path (lien segs.sh |=(s=pseg ?=(%inferred -.s)))
9414+ %apply (lien args.sh shape-has-hole)
9415+ %union (lien cases.sh shape-has-hole)
9416+ %cell (lien fields.sh field-has-hole)
9417+ %fn |($(sh sample.sh) $(sh product.sh))
9418+ %generic $(sh body.sh)
9419+ * |
9420+ ==
9421+++ field-has-hole
9422+ |= f=field
9423+ ^- ?
9424+ ?- -.f
9425+ %face (shape-has-hole shape.f)
9426+ %bare (shape-has-hole shape.f)
9427+ %pun |
9428+ ==
9429+++ named-mold-has-hole
9430+ |= ds=(list def)
9431+ ^- ?
9432+ ?~ ds |
9433+ ?: &(?=(%mold -.i.ds) (shape-has-hole shape.i.ds)) &
9434+ $(ds t.ds)
9435+::
9436+++ sample-has-hole
9437+ |= sam=sample
9438+ ^- ?
9439+ ?- -.sam
9440+ %face (shape-has-hole shape.sam)
9441+ %bare (shape-has-hole shape.sam)
9442+ %cell (lien items.sam sample-has-hole)
9443+ * |
9444+ ==
9445+++ def-has-hole
9446+ |= d=def
9447+ ^- ?
9448+ ?- -.d
9449+ %mold (shape-has-hole shape.d)
9450+ %value (expr-has-hole val.d)
9451+ ==
9452+++ expr-has-hole
9453+ |= e=expr
9454+ ^- ?
9455+ ?- -.e
9456+ %str (lien pieces.e |=(p=piece ?:(?=(%expr -.p) (expr-has-hole p.p) |)))
9457+ %qath (lien segs.e |=(p=qseg ?:(?=(%expr -.p) (expr-has-hole p.p) |)))
9458+ %change (lien edits.e |=(p=edit (expr-has-hole val.p)))
9459+ %pair $(e val.e)
9460+ %unit $(e val.e)
9461+ %group $(e inner.e)
9462+ %list (lien items.e expr-has-hole)
9463+ %tuple (lien items.e |=(i=item (expr-has-hole val.i)))
9464+ ?(%gate %gate-wide) |((sample-has-hole sample.e) $(e body.e))
9465+ %cast |((shape-has-hole shape.e) $(e val.e))
9466+ %call |($(e head.e) (lien args.e expr-has-hole))
9467+ %trace |($(e val.e) $(e then.e))
9468+ %branch |($(e subject.e) (lien arms.e |=(a=arm (expr-has-hole val.a))))
9469+ %body |((lien defs.e def-has-hole) $(e final.e))
9470+ * |
9471+ ==
9472+++ hole-values-present
9473+ |= [ds=(list def) env=ienv]
9474+ ^- ?
9475+ ?~ ds &
9476+ ?. ?=(%value -.i.ds) $(ds t.ds)
9477+ ?: (expr-has-hole val.i.ds)
9478+ ?. ?=(^ (ienv-lookup name.i.ds env)) |
9479+ $(ds t.ds)
9480+ $(ds t.ds)
87719481++ show-partial-mold
87729482 |= [file=path src=@t d=def molds=imolds]
87739483 ^- @t
87749484 ?> ?=(%mold -.d)
87759485 =/ sh=shape shape.d
9486+ =/ hole=(unit (unit span)) (simple-mold-hole sh)
9487+ ?: &(?=(^ hole) ?=(^ u.hole))
9488+ =/ text=@t (show-error src [file line.beg.u.u.hole col.beg.u.u.hole "unresolved type hole"])
9489+ (of-wain:format ~[(crip "+$ {(trip name.d)}: type hole needs a determined type") text])
87769490 =? sh ?=(%generic -.sh) body.sh
87779491 ?. ?=(%union -.sh) (crip "+$ {(trip name.d)}: not checked")
87789492 =/ pairs=(list upair) (union-pairs cases.sh molds)
@@ -8799,6 +9513,21 @@
87999513 (show-error src [file line.beg.at.site col.beg.at.site note.site])
88009514 (of-wain:format [summary excerpts])
88019515::
9516+:: Both written field sites are shown in the source that declares them.
9517+++ show-duplicate-fields
9518+ |= [file=path src=@t diagnostic=idiag]
9519+ ^- @t
9520+ =/ excerpts=(list @t)
9521+ %+ turn sites.diagnostic
9522+ |= site=[at=span note=tape]
9523+ (show-error src [file line.beg.at.site col.beg.at.site note.site])
9524+ (of-wain:format [(crip msg.diagnostic) excerpts])
9525+::
9526+++ duplicate-fields-report
9527+ |= [file=path src=@t diagnostic=idiag]
9528+ ^- @t
9529+ (of-wain:format ~['partial inference; module not checked' (show-duplicate-fields file src diagnostic)])
9530+::
88029531:: +golden-types: a partial report; it does not claim the module checks
88039532::
88049533++ golden-types
@@ -8828,6 +9557,180 @@
88289557+$ jfile-result (each [iface=ifile cache=jcache] @t)
88299558+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
88309559::
9560+:: Written record fields each have their own lexical record scope.
9561++$ written-fields (map term span)
9562+++ duplicate-written-field
9563+ |= [name=term at=span seen=written-fields]
9564+ ^- (unit idiag)
9565+ =/ prior=(unit span) (~(get by seen) name)
9566+ ?~ prior ~
9567+ `["record field `{(trip name)}` is repeated" ~[[u.prior "first field"] [at "repeated field"]]]
9568+++ duplicate-shapes
9569+ |= xs=(list shape)
9570+ ^- (unit idiag)
9571+ ?~ xs ~
9572+ =/ first (duplicate-shape i.xs)
9573+ ?^ first first
9574+ $(xs t.xs)
9575+++ duplicate-fields
9576+ |= [fields=(list field) seen=written-fields]
9577+ ^- (unit idiag)
9578+ ?~ fields ~
9579+ =/ f=field i.fields
9580+ =/ n=(unit term)
9581+ ?- -.f
9582+ %face `name.f
9583+ %pun `name.f
9584+ %bare ~
9585+ ==
9586+ =/ dup=(unit idiag) ?~(n ~ (duplicate-written-field u.n at.f seen))
9587+ ?^ dup dup
9588+ =/ inner=(unit idiag)
9589+ ?- -.f
9590+ %face (duplicate-shape shape.f)
9591+ %pun ~
9592+ %bare (duplicate-shape shape.f)
9593+ ==
9594+ ?^ inner inner
9595+ $(fields t.fields, seen ?~(n seen (~(put by seen) u.n at.f)))
9596+++ duplicate-shape
9597+ |= s=shape
9598+ ^- (unit idiag)
9599+ ?- -.s
9600+ %cell (duplicate-fields fields.s ~)
9601+ %apply (duplicate-shapes args.s)
9602+ %union (duplicate-shapes cases.s)
9603+ %fn
9604+ =/ left (duplicate-shape sample.s)
9605+ ?^ left left
9606+ (duplicate-shape product.s)
9607+ %generic (duplicate-shape body.s)
9608+ * ~
9609+ ==
9610+++ duplicate-samples
9611+ |= [items=(list sample) seen=written-fields]
9612+ ^- (unit idiag)
9613+ ?~ items ~
9614+ =/ a=sample i.items
9615+ =/ n=(unit term)
9616+ ?- -.a
9617+ %bind `name.a
9618+ %face `name.a
9619+ %pun `name.a
9620+ * ~
9621+ ==
9622+ =/ dup=(unit idiag) ?~(n ~ (duplicate-written-field u.n at.a seen))
9623+ ?^ dup dup
9624+ =/ inner (duplicate-sample a)
9625+ ?^ inner inner
9626+ $(items t.items, seen ?~(n seen (~(put by seen) u.n at.a)))
9627+++ duplicate-sample
9628+ |= s=sample
9629+ ^- (unit idiag)
9630+ ?- -.s
9631+ %cell (duplicate-samples items.s ~)
9632+ %face (duplicate-shape shape.s)
9633+ %bare (duplicate-shape shape.s)
9634+ * ~
9635+ ==
9636+++ duplicate-exprs
9637+ |= xs=(list expr)
9638+ ^- (unit idiag)
9639+ ?~ xs ~
9640+ =/ first (duplicate-expr i.xs)
9641+ ?^ first first
9642+ $(xs t.xs)
9643+++ duplicate-items
9644+ |= [items=(list item) seen=written-fields]
9645+ ^- (unit idiag)
9646+ ?~ items ~
9647+ =/ a=item i.items
9648+ =/ dup=(unit idiag) ?~(face.a ~ (duplicate-written-field u.face.a at.a seen))
9649+ ?^ dup dup
9650+ =/ inner (duplicate-expr val.a)
9651+ ?^ inner inner
9652+ $(items t.items, seen ?~(face.a seen (~(put by seen) u.face.a at.a)))
9653+++ duplicate-pieces
9654+ |= pieces=(list piece)
9655+ ^- (unit idiag)
9656+ ?~ pieces ~
9657+ =/ first=(unit idiag) ?:(?=(%expr -.i.pieces) (duplicate-expr p.i.pieces) ~)
9658+ ?^ first first
9659+ $(pieces t.pieces)
9660+++ duplicate-qsegs
9661+ |= segs=(list qseg)
9662+ ^- (unit idiag)
9663+ ?~ segs ~
9664+ =/ first=(unit idiag) ?:(?=(%expr -.i.segs) (duplicate-expr p.i.segs) ~)
9665+ ?^ first first
9666+ $(segs t.segs)
9667+++ duplicate-edits
9668+ |= edits=(list edit)
9669+ ^- (unit idiag)
9670+ ?~ edits ~
9671+ =/ first (duplicate-expr val.i.edits)
9672+ ?^ first first
9673+ $(edits t.edits)
9674+++ duplicate-arms
9675+ |= arms=(list arm)
9676+ ^- (unit idiag)
9677+ ?~ arms ~
9678+ =/ first (duplicate-expr val.i.arms)
9679+ ?^ first first
9680+ $(arms t.arms)
9681+++ duplicate-defs
9682+ |= defs=(list def)
9683+ ^- (unit idiag)
9684+ ?~ defs ~
9685+ =/ first=(unit idiag)
9686+ ?- -.i.defs
9687+ %mold (duplicate-shape shape.i.defs)
9688+ %value (duplicate-expr val.i.defs)
9689+ ==
9690+ ?^ first first
9691+ $(defs t.defs)
9692+++ duplicate-expr
9693+ |= e=expr
9694+ ^- (unit idiag)
9695+ ?- -.e
9696+ %str (duplicate-pieces pieces.e)
9697+ %qath (duplicate-qsegs segs.e)
9698+ %change (duplicate-edits edits.e)
9699+ %pair (duplicate-expr val.e)
9700+ %unit (duplicate-expr val.e)
9701+ %group (duplicate-expr inner.e)
9702+ %list (duplicate-exprs items.e)
9703+ %tuple (duplicate-items items.e ~)
9704+ %gate-wide
9705+ =/ first (duplicate-sample sample.e)
9706+ ?^ first first
9707+ (duplicate-expr body.e)
9708+ %gate
9709+ =/ first (duplicate-sample sample.e)
9710+ ?^ first first
9711+ (duplicate-expr body.e)
9712+ %cast
9713+ =/ first (duplicate-shape shape.e)
9714+ ?^ first first
9715+ (duplicate-expr val.e)
9716+ %call
9717+ =/ first (duplicate-expr head.e)
9718+ ?^ first first
9719+ (duplicate-exprs args.e)
9720+ %trace
9721+ =/ first (duplicate-expr val.e)
9722+ ?^ first first
9723+ (duplicate-expr then.e)
9724+ %branch
9725+ =/ first (duplicate-expr subject.e)
9726+ ?^ first first
9727+ (duplicate-arms arms.e)
9728+ %body
9729+ =/ first (duplicate-defs defs.e)
9730+ ?^ first first
9731+ (duplicate-expr final.e)
9732+ * ~
9733+ ==
88319734++ import-binding-names
88329735 |= imports=(list import)
88339736 ^- (list term)
@@ -8840,6 +9743,60 @@
88409743 ==
88419744 [n $(imports t.imports)]
88429745::
9746+++ reserved-proj-sample
9747+ |= sam=sample
9748+ ^- ?
9749+ ?- -.sam
9750+ %bind =(name.sam %proj)
9751+ %face =(name.sam %proj)
9752+ %pun =(name.sam %proj)
9753+ %cell (lien items.sam reserved-proj-sample)
9754+ * |
9755+ ==
9756+++ reserved-proj-pattern
9757+ |= p=pattern
9758+ ^- ?
9759+ ?- -.p
9760+ %bind =(name.p %proj)
9761+ %cell (lien items.p reserved-proj-pattern)
9762+ * |
9763+ ==
9764+++ reserved-proj-def
9765+ |= d=def
9766+ ^- ?
9767+ ?: =(name.d %proj) &
9768+ ?: ?=(%value -.d) (reserved-proj-expr val.d)
9769+ |
9770+++ reserved-proj-expr
9771+ |= e=expr
9772+ ^- ?
9773+ ?- -.e
9774+ %str (lien pieces.e |=(p=piece ?:(?=(%expr -.p) (reserved-proj-expr p.p) |)))
9775+ %qath (lien segs.e |=(p=qseg ?:(?=(%expr -.p) (reserved-proj-expr p.p) |)))
9776+ %change (lien edits.e |=(p=edit (reserved-proj-expr val.p)))
9777+ %pair $(e val.e)
9778+ %unit $(e val.e)
9779+ %group $(e inner.e)
9780+ %list (lien items.e reserved-proj-expr)
9781+ %tuple (lien items.e |=(i=item (reserved-proj-expr val.i)))
9782+ ?(%gate %gate-wide) |((reserved-proj-sample sample.e) $(e body.e))
9783+ %cast $(e val.e)
9784+ %call |($(e head.e) (lien args.e reserved-proj-expr))
9785+ %trace |($(e val.e) $(e then.e))
9786+ %branch |($(e subject.e) (lien arms.e |=(a=arm |((reserved-proj-pattern pat.a) (reserved-proj-expr val.a)))))
9787+ %body |((lien defs.e reserved-proj-def) $(e final.e))
9788+ * |
9789+ ==
9790+::
9791+++ module-has-reserved-proj
9792+ |= mod=module
9793+ ^- ?
9794+ =/ imported=(list term) (import-binding-names imports.mod)
9795+ =/ vals=(list term) (global-value-names defs.mod)
9796+ =/ molds=imolds (collect-simple-molds defs.mod)
9797+ =/ mold-names=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9798+ |((lien (weld imported (weld vals mold-names)) |=(n=term =(n %proj))) (lien defs.mod reserved-proj-def))
9799+::
88439800++ module-scope-valid
88449801 |= [mod=module prelude-values=(list term) prelude-molds=(list term)]
88459802 ^- ?
@@ -8847,6 +9804,7 @@
88479804 =/ vals=(list term) (global-value-names defs.mod)
88489805 =/ molds=imolds (collect-simple-molds defs.mod)
88499806 =/ mold-names=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9807+ ?: (module-has-reserved-proj mod) |
88509808 ?. %+ levy imported
88519809 |= n=term
88529810 &((unique-value-name n imported) !(lien vals |=(v=term =(n v))) !(lien mold-names |=(m=term =(n m))) !(lien prelude-values |=(v=term =(n v))) !(lien prelude-molds |=(m=term =(n m))))
@@ -8930,6 +9888,7 @@
89309888++ prelude-label
89319889 |= [typ=itype name=term]
89329890 ^- itype
9891+ ?: ?=(%jrec -.typ) typ(label `name)
89339892 ?. ?=(%union -.typ) typ
89349893 ?^ args.typ typ
89359894 typ(label `name)
@@ -8956,7 +9915,7 @@
89569915 =/ a=itype [%avar 0]
89579916 =/ pair=itype [%cell a a]
89589917 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
8959− [~[[%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~]
9918+ [~[[%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~]
89609919::
89619920++ infer-private-internal
89629921 |= src=@t
@@ -8965,6 +9924,7 @@
89659924 =/ parsed (parse at src)
89669925 ?: ?=(%| -.parsed) ~
89679926 =/ mod=module p.parsed
9927+ ?^ (duplicate-defs defs.mod) ~
89689928 ?~ imports.mod
89699929 =/ built=jfile-result (infer-jibb-file at src ~ ~ ~ ~[at] ~ ~ ~ ~)
89709930 ?: ?=(%| -.built) ~
@@ -8979,12 +9939,13 @@
89799939 =/ js=ijimports ~[[face.i.imports.mod private-primitive-interface]]
89809940 =/ reserved=(list term) ~[face.i.imports.mod]
89819941 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
8982− =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~]
9942+ =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~]
89839943 =/ mts=(each imold-types @t) (module-mold-types molds state)
89849944 ?: ?=(%| -.mts) ~
8985− =/ env=ienv (resolve-supported-defs defs.mod molds globals ~ ~ ~ ~ js reserved at ~)
9945+ =/ resolution=iresolved (resolve-groups defs.mod molds globals ~ ~ ~ ~ js reserved at ~)
9946+ =/ env=ienv env.resolution
89869947 ?. (module-values-complete defs.mod env) ~
8987− `[env p.mts at ~]
9948+ `[env p.mts at ~ artifacts.resolution ~ `src]
89889949::
89899950++ partial-prelude-interface-with-internal
89909951 |= [src=@t internal-source=(unit @t)]
@@ -8993,6 +9954,8 @@
89939954 =/ at=path /lib/jibb/prelude/jibb
89949955 =/ parsed (parse at src)
89959956 ?: ?=(%| -.parsed) ~
9957+ ?: (named-mold-has-hole defs.p.parsed) ~
9958+ ?^ (duplicate-defs defs.p.parsed) ~
89969959 =/ private=(unit ijimports)
89979960 ?~ imports.p.parsed `~
89989961 ?. ?=([[%jibb *] ~] imports.p.parsed) ~
@@ -9015,9 +9978,16 @@
90159978 =? env-molds declared
90169979 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
90179980 =/ reserved=(list term) ?:(declared ~[%list] ~)
9018− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~]
9019− =/ mt=imold-types (partial-prelude-molds molds state)
9020− =/ partial=ifile [~ mt at ~]
9981+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~]
9982+ :: Other prelude molds may use list only after its source has passed
9983+ :: the standard-list check. The raw declaration remains removed.
9984+ =/ declared-list=(unit shape) (find-simple-mold %list molds)
9985+ =/ mold-prelude=(unit ifile)
9986+ ?~ declared-list ~
9987+ ?. (standard-prelude-list u.declared-list) ~
9988+ `[~ ~[[%list [[%collection %list ~[[%var 0]]] ~[0]]]] at ~ ~ ~ ~]
9989+ =/ mt=imold-types (partial-prelude-molds molds state(prelude mold-prelude))
9990+ =/ partial=ifile [~ mt at ~ ~ ~ ~]
90219991 :: An explicitly qualified re-export must resolve. Other unsupported
90229992 :: prelude declarations remain reserved but absent from the interface.
90239993 =/ required=imolds
@@ -9028,8 +9998,13 @@
90289998 ?~ names.sh |
90299999 ?=(^ t.names.sh)
903010000 ?. (levy required |=(m=[name=term body=shape] ?=(^ (find-jibb-mold name.m partial)))) ~
9031− =/ env=ienv (resolve-supported-defs ds env-molds globals ~ ~ ~ ~ u.private reserved at `partial)
9032− `[env mt at ~]
10001+ =/ resolution=iresolved (resolve-groups ds env-molds globals ~ ~ ~ ~ u.private reserved at `partial)
10002+ =/ env=ienv env.resolution
10003+ ?. (hole-values-present ds env) ~
10004+ =/ deps=(list iwidth-dependency)
10005+ ?~ u.private ~
10006+ ~[[at.interface.i.u.private source.interface.i.u.private elaborations.interface.i.u.private]]
10007+ `[env mt at ~ artifacts.resolution deps `src]
903310008::
903410009++ partial-prelude-interface
903510010 |= src=@t
@@ -9148,7 +10123,7 @@
914810123 ?~ segments `~
914910124 ?: ?=(%knot -.i.segments) $(segments t.segments)
915010125 =/ seg=pseg i.segments
9151− ?> ?=(%typed -.seg)
10126+ ?. ?=(%typed -.seg) ~
915210127 ?: =(0 aura.seg) ~
915310128 ?: (lien seen |=(n=term =(n name.seg))) ~
915410129 =/ rest=(unit (list iapi-parameter)) $(segments t.segments, seen [name.seg seen])
@@ -9234,6 +10209,7 @@
923410209 ^- ?
923510210 =/ path-names=(list term) (turn paths |=(p=iapi-path name.p))
923610211 =/ derived=(list term) (weld path-names poke-names)
10212+ ?: (lien derived |=(n=term =(n %proj))) |
923710213 =/ outer=(list term) (weld prelude-values (weld (global-value-names defs.mod) (api-import-faces imports.mod)))
923810214 (levy derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x))))))
923910215::
@@ -9279,6 +10255,8 @@
927910255++ api-path-analysis
928010256 |= [mod=module externals=imark-externals prelude-values=(list term) prelude-molds=(list term)]
928110257 ^- (unit (list iapi-path-typed))
10258+ ?: (lien defs.mod def-has-hole) ~
10259+ ?^ (duplicate-defs defs.mod) ~
928210260 =/ ds=(list def) defs.mod
928310261 =/ declarations=(list def)
928410262 (skim ds |=(d=def &(?=(%mold -.d) =(%paths name.d))))
@@ -9306,9 +10284,11 @@
930610284 |= [file=path src=@t externals=iexternals marks=imark-externals modules=jbundle prepared=(unit iprelude)]
930710285 ^- (each (list iapi-path-typed) @t)
930810286 ?. ?=([%ui %api @ %jibb ~] file) [%| 'API path analysis requires /ui/api/<agent>.jibb']
9309− ?~ prepared [%| 'API path analysis needs the prepared prelude']
931010287 =/ parsed (parse file src)
931110288 ?: ?=(%| -.parsed) [%| 'API path source does not parse']
10289+ =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
10290+ ?^ duplicate [%| (show-duplicate-fields file src u.duplicate)]
10291+ ?~ prepared [%| 'API path analysis needs the prepared prelude']
931210292 =/ prelude=(unit ifile) `iface.u.prepared
931310293 =/ deps=jimports-result
931410294 (resolve-jibb-imports imports.p.parsed externals marks modules ~[file] values.u.prepared molds.u.prepared ~ prelude)
@@ -9331,7 +10311,9 @@
933110311++ api-poke-interface
933210312 |= [at=path mod=module mark-externals=imark-externals prelude-values=(list term) prelude-molds=(list term) prelude=(unit ifile)]
933310313 ^- (unit ifile)
10314+ ?: (lien defs.mod def-has-hole) ~
933410315 ?. ?=([%ui %api @ %jibb ~] at) ~
10316+ ?^ (duplicate-defs defs.mod) ~
933510317 ?~ prelude ~
933610318 ?. =(at.u.prelude /lib/jibb/prelude/jibb) ~
933710319 =/ poke=(unit ischeme) (find-jibb-mold %poke u.prelude)
@@ -9359,7 +10341,7 @@
935910341 =/ mark=(unit itype) (find-imported-mark n mark-externals marks)
936010342 ?~ mark ~
936110343 =/ sc=ischeme [[%fn u.mark typ.u.poke] ~]
9362− `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]]]
10344+ `[~[[n sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]] ~ ~ ~]
936310345::
936410346++ infer-jibb-file
936510347 |= [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)]
@@ -9367,10 +10349,13 @@
936710349 =/ parsed (parse at src)
936810350 ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
936910351 =/ mod=module p.parsed
10352+ =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
10353+ ?^ duplicate [%| (show-duplicate-fields at src u.duplicate)]
937010354 ?: ?=([%ui %api *] at)
937110355 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
937210356 ?~ iface [%| (crip "API module needs unsupported inference: {(spud at)}")]
9373− [%& [u.iface [[at u.iface] cache]]]
10357+ =/ checked=ifile u.iface(source `src)
10358+ [%& [checked [[at checked] cache]]]
937410359 ?. (module-scope-valid mod prelude-values prelude-molds)
937510360 ?: (pending-declared-poke at mod prelude-values prelude-molds)
937610361 [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
@@ -9386,13 +10371,15 @@
938610371 =/ marks=(list term) (collect-mark-imports imports.mod)
938710372 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
938810373 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9389− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude]
10374+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~]
939010375 =/ mts=(each imold-types @t) (module-mold-types molds state)
939110376 ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
9392− =/ env=ienv (resolve-supported-defs defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
10377+ =/ resolution=iresolved (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
10378+ =/ env=ienv env.resolution
939310379 ?. (module-values-complete defs.mod env)
939410380 [%| (crip "module definitions need unsupported inference: {(spud at)}")]
9395− [%& [[env p.mts at ~] [[at [env p.mts at ~]] cache.p.js]]]
10381+ =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src]
10382+ [%& [iface [[at iface] cache.p.js]]]
939610383::
939710384:: +golden-types-with-modules fails closed for imports without prelude
939810385:: scope. +golden-types-with-prelude resolves supported library graphs;
@@ -9403,6 +10390,8 @@
940310390 ^- @t
940410391 =/ parsed (parse file src)
940510392 ?: ?=(%| -.parsed) (show-error src p.parsed)
10393+ =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
10394+ ?^ duplicate (duplicate-fields-report file src u.duplicate)
940610395 ?: (lien imports.p.parsed |=(i=import ?=(%jibb -.i)))
940710396 'partial inference; module not checked\0aprelude source missing; module import inference unsupported'
940810397 (golden-types-with-marks file src externals mark-externals)
@@ -9417,6 +10406,8 @@
941710406 ^- @t
941810407 =/ parsed (parse file src)
941910408 ?: ?=(%| -.parsed) (show-error src p.parsed)
10409+ =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
10410+ ?^ duplicate (duplicate-fields-report file src u.duplicate)
942010411 ?: =(0 prelude-source) 'partial inference; module not checked\0aprelude source missing; module import inference unsupported'
942110412 =/ prelude (parse /lib/jibb/prelude/jibb prelude-source)
942210413 ?: ?=(%| -.prelude) 'partial inference; module not checked\0aprelude source does not parse; module import inference unsupported'
@@ -9435,6 +10426,8 @@
943510426 ^- @t
943610427 =/ parsed (parse file src)
943710428 ?: ?=(%| -.parsed) (show-error src p.parsed)
10429+ =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
10430+ ?^ duplicate (duplicate-fields-report file src u.duplicate)
943810431 ?~ prepared 'partial inference; module not checked\0aprelude interface is not supported'
943910432 =/ prelude-values=(list term) values.u.prepared
944010433 =/ prelude-molds=(list term) molds.u.prepared
@@ -9482,6 +10475,10 @@
948210475 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
948310476 =/ parsed (parse file src)
948410477 ?: ?=(%| -.parsed) (show-error src p.parsed)
10478+ =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
10479+ ?^ duplicate (duplicate-fields-report file src u.duplicate)
10480+ ?: (module-has-reserved-proj p.parsed)
10481+ 'module has reserved proj name'
948510482 =/ ds=(list def) defs.p.parsed
948610483 =/ molds=imolds (collect-simple-molds ds)
948710484 =/ globals=(list term) (weld prelude-values (weld (turn jimports |=(j=[face=term interface=ifile] face.j)) (global-value-names ds)))
@@ -9509,7 +10506,7 @@
950910506 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
951010507 $(ds t.ds, lines [line lines])
951110508 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9512− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude]
10509+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~]
951310510 =. initial (reserve-def-caps val.d initial)
951410511 =/ result=iresult
951510512 ?: |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
@@ -9517,6 +10514,10 @@
951710514 (infer-fragment val.d env initial)
951810515 ?: ?=(%| -.result)
951910516 $(ds t.ds, lines [(show-inference-diagnostic file src name.d p.result) lines])
10517+ =. 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)))
10518+ =/ hole=(unit idiag) (unresolved-hole holes.state.p.result holes.initial state.p.result)
10519+ ?^ hole
10520+ $(ds t.ds, lines [(show-inference-diagnostic file src name.d u.hole) lines])
952010521 =/ merged=(unit [first=icap second=icap])
952110522 (merged-capitals caps.state.p.result sub.state.p.result)
952210523 ?^ merged
@@ -9539,6 +10540,8 @@
953910540 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
954010541 ?: (gth (lent vars) 26)
954110542 $(ds t.ds, lines [(crip "++ {(trip name.d)}: too many variables for partial printer") lines])
10543+ ?~ (width-finalize projections.state.p.result sub.state.p.result vars)
10544+ $(ds t.ds, lines [(crip "++ {(trip name.d)}: record projection elaboration needs unsupported inference") lines])
954210545 =/ printable=itype (canonical-itype typ vars)
954310546 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype printable ~)}{(show-atom-constraint printable)}")
954410547 $(ds t.ds, lines [line lines])
jibb-dev/lib/jibb/internal.jibb+5
@@ -9,3 +9,8 @@
99
1010:: The compiler supplies this private interface; execution is not yet implemented.
1111++ gth-atom |= args=[A A] (raw-gth.core args)
12+
13+:: Application paths are knot sequences.
14++$ qath
15+ ~
16+ [i=@ta t=qath]
jibb-dev/lib/jibb/prelude.jibb+7
@@ -1,5 +1,6 @@
11/= internal /lib/jibb/internal
22+$ poke poke.internal
3++$ qath qath.internal
34
45:: Initial prelude functions. The rest of the inventory is still to come.
56
@@ -149,6 +150,12 @@
149150 ~ ~
150151 [~ value] [value ~]
151152
153+++ bond |= fallback=$-(~ A)
154+ |= maybe=(unit A)
155+ ?- maybe
156+ ~ (fallback ~)
157+ [~ value] value
158+
152159++ bind |= args=[(unit A) $-(A B)]
153160 ?- args
154161 [maybe f] ^- (unit B)
tests/clay-fixtures/tlon-mop-expected.txt+1−1
@@ -1 +1 @@
1−[%.y %.y]
1+[%.y %.y %.y]
tests/clay-fixtures/tlon-mop.txt+7−1
@@ -6,9 +6,15 @@
66=/ read-gate=vase (slap reader (ream 'read-named'))
77=/ result=vase (slym read-gate [%notes %log -.src])
88=/ recursive=vase (slym read-gate [%notes %import-node -.src])
9+=/ nested=vase (slym read-gate [%notes %a-notebook -.src])
910=/ contains-ref
1011 |= node=*
1112 ?: =(node [%ref %notes %import-node]) &
1213 ?@ node |
1314 |($(node -.node) $(node +.node))
14−(pure:m !>([?=([%& [%apply %mop [[%atom %da ~] [%fork *] ~]]] +.result) &(?=([%& [%fork *]] +.recursive) (contains-ref +.recursive))]))
15+=/ contains-named
16+ |= node=*
17+ ?: ?=([%named %notes %import-node [%fork *]] node) (contains-ref node)
18+ ?@ node |
19+ |($(node -.node) $(node +.node))
20+(pure:m !>([?=([%& [%apply %mop [[%atom %da ~] [%fork *] ~]]] +.result) &(?=([%& [%fork *]] +.recursive) (contains-ref +.recursive)) &(?=([%& [%fork *]] +.nested) (contains-named +.nested))]))
tests/golden/doc-grammar-04-step/source.jibb+1−1
@@ -10,5 +10,5 @@
1010 [%move %left n] "left {n}"
1111 [%move %right n] "right {n}"
1212 [t %draft] t
13− [t %sent at] t
13+ [t %sent sent-at] t
1414 %stop "stop"
tests/golden/doc-grammar-04-step/tokens.txt+2−2
@@ -74,8 +74,8 @@
747413:5 glyph [
757513:6 tight name t
767613:8 lit %sent
77−13:14 name at
78−13:16 tight glyph ]
77+13:14 name sent-at
78+13:21 tight glyph ]
797913:23 name t
808014:5 NEWLINE
818114:5 lit %stop
tests/golden/doc-grammar-04-step/tree.txt+1−1
@@ -33,6 +33,6 @@
3333 (cell 12:5 (bind 12:6 t) (lit 12:8 %draft))
3434 (wing 12:23 t))
3535 (arm 13:5
36− (cell 13:5 (bind 13:6 t) (lit 13:8 %sent) (bind 13:14 at))
36+ (cell 13:5 (bind 13:6 t) (lit 13:8 %sent) (bind 13:14 sent-at))
3737 (wing 13:23 t))
3838 (arm 14:5 (lit 14:5 %stop) (str 14:23 "stop")))))))
tests/golden/inline-mold-opaque/about.txt+2−2
@@ -1,3 +1,3 @@
1−source: Grammar tab, Molds: "Opaque: `poke`, `ask` and `qath`, built only by derived gates, `pure` and application-path literals."
2−tests: the opaque molds by name
1+source: Grammar tab, Molds: "`poke`, `ask` and `qath` are transparent types, defined in the internal prelude and re-exported normally; callers can construct and inspect their values."
2+tests: the effect and application-path types by name
33expect: parses
tests/golden/parser-hole-parameter-rejected/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Types and molds: `_` is an inferred type hole.
2+tests: An anonymous hole is not a named generic parameter.
3+expect: error at 1:12
tests/golden/parser-hole-parameter-rejected/source.jibbnew file+1
@@ -0,0 +1 @@
1++$ bad |$ [_] @t
tests/golden/parser-hole-parameter-rejected/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph +$
2+1:4 name bad
3+1:8 glyph |$
4+1:11 glyph [
5+1:12 tight glyph _
6+1:13 tight glyph ]
7+1:15 aura @t
8+1:17 NEWLINE
tests/golden/parser-hole-parameter-rejected/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+/tests/golden/parser-hole-parameter-rejected/source.jibb:1:12: expected a type variable, found `_`
2++$ bad |$ [_] @t
3+ ^
tests/golden/parser-hole-path-space/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Types and molds: `_` is an inferred type hole.
2+tests: A path-segment type hole must remain tight after the field's `=`.
3+expect: error at 1:14
tests/golden/parser-hole-path-space/source.jibbnew file+1
@@ -0,0 +1 @@
1++$ path /[id= _]
tests/golden/parser-hole-path-space/tokens.txtnew file+9
@@ -0,0 +1,9 @@
1+1:1 glyph +$
2+1:4 name path
3+1:9 glyph /
4+1:10 tight glyph [
5+1:11 tight name id
6+1:13 tight glyph =
7+1:15 glyph _
8+1:16 tight glyph ]
9+1:17 NEWLINE
tests/golden/parser-hole-path-space/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+/tests/golden/parser-hole-path-space/source.jibb:1:14: expected an aura or type hole right after `=`, found a space
2++$ path /[id= _]
3+ ^
tests/golden/parser-hole-path/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Types and molds: `_` is an inferred type hole.
2+tests: Underscores in `/_` and `%/_` remain literal path knots, while `[id=_]` is a typed-segment hole.
3+expect: parses
tests/golden/parser-hole-path/source.jibbnew file+4
@@ -0,0 +1,4 @@
1++$ root /_
2++$ child /item/_x
3+++ show %/_
4++$ inferred /items/[id=_]
tests/golden/parser-hole-path/tokens.txtnew file+28
@@ -0,0 +1,28 @@
1+1:1 glyph +$
2+1:4 name root
3+1:9 glyph /
4+1:10 tight knot _
5+2:1 NEWLINE
6+2:1 glyph +$
7+2:4 name child
8+2:10 glyph /
9+2:11 tight knot item
10+2:15 tight glyph /
11+2:16 tight knot _x
12+3:1 NEWLINE
13+3:1 glyph ++
14+3:4 name show
15+3:9 glyph %/
16+3:11 tight knot _
17+4:1 NEWLINE
18+4:1 glyph +$
19+4:4 name inferred
20+4:13 glyph /
21+4:14 tight knot items
22+4:19 tight glyph /
23+4:20 tight glyph [
24+4:21 tight name id
25+4:23 tight glyph =
26+4:24 tight glyph _
27+4:25 tight glyph ]
28+4:26 NEWLINE
tests/golden/parser-hole-path/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (mold 1:1 root (path 1:9 /_))
3+ (mold 2:1 child (path 2:10 /item/_x))
4+ (value 3:1 show (qath 3:9 _))
5+ (mold 4:1 inferred (path 4:13 /items/[id=_])))
tests/golden/parser-hole-pattern-rejected/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Types and molds: `_` is an inferred type hole.
2+tests: A type hole is not a branch-pattern wildcard.
3+expect: error at 3:5
tests/golden/parser-hole-pattern-rejected/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ bad |= x=@t
2+ ?- x
3+ _ "no"
tests/golden/parser-hole-pattern-rejected/tokens.txtnew file+15
@@ -0,0 +1,15 @@
1+1:1 glyph ++
2+1:4 name bad
3+1:8 glyph |=
4+1:11 name x
5+1:12 tight glyph =
6+1:13 tight aura @t
7+2:3 INDENT
8+2:3 glyph ?-
9+2:6 name x
10+3:5 INDENT
11+3:5 glyph _
12+3:7 str "no"
13+3:11 DEDENT
14+3:11 DEDENT
15+3:11 NEWLINE
tests/golden/parser-hole-pattern-rejected/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+/tests/golden/parser-hole-pattern-rejected/source.jibb:3:5: expected a pattern, found `_`
2+ _ "no"
3+ ^
tests/golden/parser-hole-shapes/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Types and molds: `_` is an inferred type hole.
2+tests: Holes in samples, casts, nested records, gate molds and generic mold arguments have their own source spans.
3+expect: parses
tests/golden/parser-hole-shapes/source.jibbnew file+11
@@ -0,0 +1,11 @@
1++$ unused _
2++$ nested [a=_ b=$-(_ (list _))]
3++$ alias |$ [A] (pair A _)
4+++ identity |= x=_ x
5+++ inferred ^- _ "hello"
6+++ cast-nested |= x=[$-(_ _) (list _)] ^- [first=_ second=_] [x x]
7+++ bare-sample |= _ "hello"
8+++ cell-sample |= [a=_ b=_] [a b]
9+++ local |= x=@t
10+ ++ inside |= y=_ ^- _ y
11+ (inside x)
tests/golden/parser-hole-shapes/tokens.txtnew file+121
@@ -0,0 +1,121 @@
1+1:1 glyph +$
2+1:4 name unused
3+1:11 glyph _
4+2:1 NEWLINE
5+2:1 glyph +$
6+2:4 name nested
7+2:11 glyph [
8+2:12 tight name a
9+2:13 tight glyph =
10+2:14 tight glyph _
11+2:16 name b
12+2:17 tight glyph =
13+2:18 tight glyph $-(
14+2:21 tight glyph _
15+2:23 glyph (
16+2:24 tight name list
17+2:29 glyph _
18+2:30 tight glyph )
19+2:31 tight glyph )
20+2:32 tight glyph ]
21+3:1 NEWLINE
22+3:1 glyph +$
23+3:4 name alias
24+3:10 glyph |$
25+3:13 glyph [
26+3:14 tight tvar A
27+3:15 tight glyph ]
28+3:17 glyph (
29+3:18 tight name pair
30+3:23 tvar A
31+3:25 glyph _
32+3:26 tight glyph )
33+4:1 NEWLINE
34+4:1 glyph ++
35+4:4 name identity
36+4:13 glyph |=
37+4:16 name x
38+4:17 tight glyph =
39+4:18 tight glyph _
40+4:20 name x
41+5:1 NEWLINE
42+5:1 glyph ++
43+5:4 name inferred
44+5:13 glyph ^-
45+5:16 glyph _
46+5:18 str "hello"
47+6:1 NEWLINE
48+6:1 glyph ++
49+6:4 name cast-nested
50+6:16 glyph |=
51+6:19 name x
52+6:20 tight glyph =
53+6:21 tight glyph [
54+6:22 tight glyph $-(
55+6:25 tight glyph _
56+6:27 glyph _
57+6:28 tight glyph )
58+6:30 glyph (
59+6:31 tight name list
60+6:36 glyph _
61+6:37 tight glyph )
62+6:38 tight glyph ]
63+6:40 glyph ^-
64+6:43 glyph [
65+6:44 tight name first
66+6:49 tight glyph =
67+6:50 tight glyph _
68+6:52 name second
69+6:58 tight glyph =
70+6:59 tight glyph _
71+6:60 tight glyph ]
72+6:62 glyph [
73+6:63 tight name x
74+6:65 name x
75+6:66 tight glyph ]
76+7:1 NEWLINE
77+7:1 glyph ++
78+7:4 name bare-sample
79+7:16 glyph |=
80+7:19 glyph _
81+7:21 str "hello"
82+8:1 NEWLINE
83+8:1 glyph ++
84+8:4 name cell-sample
85+8:16 glyph |=
86+8:19 glyph [
87+8:20 tight name a
88+8:21 tight glyph =
89+8:22 tight glyph _
90+8:24 name b
91+8:25 tight glyph =
92+8:26 tight glyph _
93+8:27 tight glyph ]
94+8:29 glyph [
95+8:30 tight name a
96+8:32 name b
97+8:33 tight glyph ]
98+9:1 NEWLINE
99+9:1 glyph ++
100+9:4 name local
101+9:10 glyph |=
102+9:13 name x
103+9:14 tight glyph =
104+9:15 tight aura @t
105+10:3 INDENT
106+10:3 glyph ++
107+10:6 name inside
108+10:13 glyph |=
109+10:16 name y
110+10:17 tight glyph =
111+10:18 tight glyph _
112+10:20 glyph ^-
113+10:23 glyph _
114+10:25 name y
115+11:3 NEWLINE
116+11:3 glyph (
117+11:4 tight name inside
118+11:11 name x
119+11:12 tight glyph )
120+11:13 DEDENT
121+11:13 NEWLINE
tests/golden/parser-hole-shapes/tree.txtnew file+47
@@ -0,0 +1,47 @@
1+(module
2+ (mold 1:1 unused (hole 1:11))
3+ (mold 2:1 nested
4+ (cell 2:11
5+ (face 2:12 a (hole 2:14))
6+ (face 2:16 b
7+ (fn 2:18
8+ (hole 2:21)
9+ (apply 2:23 list (hole 2:29))))))
10+ (mold 3:1 alias
11+ (generic 3:10 A
12+ (apply 3:17 pair (tvar 3:23 A) (hole 3:25))))
13+ (value 4:1 identity
14+ (gate 4:13
15+ (face 4:16 x (hole 4:18))
16+ (wing 4:20 x)))
17+ (value 5:1 inferred
18+ (cast 5:13 (hole 5:16) (str 5:18 "hello")))
19+ (value 6:1 cast-nested
20+ (gate 6:16
21+ (face 6:19 x
22+ (cell 6:21
23+ (fn 6:22 (hole 6:25) (hole 6:27))
24+ (apply 6:30 list (hole 6:36))))
25+ (cast 6:40
26+ (cell 6:43
27+ (face 6:44 first (hole 6:50))
28+ (face 6:52 second (hole 6:59)))
29+ (tuple 6:62 (wing 6:63 x) (wing 6:65 x)))))
30+ (value 7:1 bare-sample
31+ (gate 7:16 (hole 7:19) (str 7:21 "hello")))
32+ (value 8:1 cell-sample
33+ (gate 8:16
34+ (cell 8:19
35+ (face 8:20 a (hole 8:22))
36+ (face 8:24 b (hole 8:26)))
37+ (tuple 8:29 (wing 8:30 a) (wing 8:32 b))))
38+ (value 9:1 local
39+ (gate 9:10
40+ (face 9:13 x (aura 9:15 @t))
41+ (body 10:3
42+ (value 10:3 inside
43+ (gate 10:13
44+ (face 10:16 y (hole 10:18))
45+ (cast 10:20 (hole 10:23) (wing 10:25 y))))
46+ (group 11:3
47+ (call 11:4 (wing 11:4 inside) (wing 11:11 x)))))))
tests/golden/parser-hole-value-rejected/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Types and molds: `_` is an inferred type hole.
2+tests: A type hole is not a value expression.
3+expect: error at 1:8
tests/golden/parser-hole-value-rejected/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ bad _
tests/golden/parser-hole-value-rejected/tokens.txtnew file+4
@@ -0,0 +1,4 @@
1+1:1 glyph ++
2+1:4 name bad
3+1:8 glyph _
4+1:9 NEWLINE
tests/golden/parser-hole-value-rejected/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+/tests/golden/parser-hole-value-rejected/source.jibb:1:8: expected an expression, found `_`
2+++ bad _
3+ ^
tests/golden/types-hole-concrete/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: Independent holes fixed to concrete results and samples, decimal defaulting, atom widening and a pending tag.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-concrete/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ cast ^- _ "hello"
2+++ sample |= x=_ ^- @t x
3+++ separate |= x=[_ _] ^- [@t @p] x
4+++ decimal ^- _ 1
5+++ atom |= x=@ ^- _ x
6+++ unresolved-tag ^- _ %foo
tests/golden/types-hole-concrete/tokens.txtnew file+54
@@ -0,0 +1,54 @@
1+1:1 glyph ++
2+1:4 name cast
3+1:9 glyph ^-
4+1:12 glyph _
5+1:14 str "hello"
6+2:1 NEWLINE
7+2:1 glyph ++
8+2:4 name sample
9+2:11 glyph |=
10+2:14 name x
11+2:15 tight glyph =
12+2:16 tight glyph _
13+2:18 glyph ^-
14+2:21 aura @t
15+2:24 name x
16+3:1 NEWLINE
17+3:1 glyph ++
18+3:4 name separate
19+3:13 glyph |=
20+3:16 name x
21+3:17 tight glyph =
22+3:18 tight glyph [
23+3:19 tight glyph _
24+3:21 glyph _
25+3:22 tight glyph ]
26+3:24 glyph ^-
27+3:27 glyph [
28+3:28 tight aura @t
29+3:31 aura @p
30+3:33 tight glyph ]
31+3:35 name x
32+4:1 NEWLINE
33+4:1 glyph ++
34+4:4 name decimal
35+4:12 glyph ^-
36+4:15 glyph _
37+4:17 lit 1
38+5:1 NEWLINE
39+5:1 glyph ++
40+5:4 name atom
41+5:9 glyph |=
42+5:12 name x
43+5:13 tight glyph =
44+5:14 tight aura @
45+5:16 glyph ^-
46+5:19 glyph _
47+5:21 name x
48+6:1 NEWLINE
49+6:1 glyph ++
50+6:4 name unresolved-tag
51+6:19 glyph ^-
52+6:22 glyph _
53+6:24 lit %foo
54+6:28 NEWLINE
tests/golden/types-hole-concrete/tree.txtnew file+22
@@ -0,0 +1,22 @@
1+(module
2+ (value 1:1 cast
3+ (cast 1:9 (hole 1:12) (str 1:14 "hello")))
4+ (value 2:1 sample
5+ (gate 2:11
6+ (face 2:14 x (hole 2:16))
7+ (cast 2:18 (aura 2:21 @t) (wing 2:24 x))))
8+ (value 3:1 separate
9+ (gate 3:13
10+ (face 3:16 x
11+ (cell 3:18 (hole 3:19) (hole 3:21)))
12+ (cast 3:24
13+ (cell 3:27 (aura 3:28 @t) (aura 3:31 @p))
14+ (wing 3:35 x))))
15+ (value 4:1 decimal
16+ (cast 4:12 (hole 4:15) (lit 4:17 1)))
17+ (value 5:1 atom
18+ (gate 5:9
19+ (face 5:12 x (aura 5:14 @))
20+ (cast 5:16 (hole 5:19) (wing 5:21 x))))
21+ (value 6:1 unresolved-tag
22+ (cast 6:19 (hole 6:22) (lit 6:24 %foo))))
tests/golden/types-hole-concrete/types.txtnew file+10
@@ -0,0 +1,10 @@
1+partial inference; module not checked
2+++ cast: @t
3+++ sample: $-(@t @t)
4+++ separate: $-([@t @p] [@t @p])
5+++ decimal: @ud
6+++ atom: $-(@ @)
7+++ unresolved-tag: type hole needs unsupported inference
8+/tests/golden/types-hole-concrete/source.jibb:6:22: type hole
9+++ unresolved-tag ^- _ %foo
10+ ^
tests/golden/types-hole-generic-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: named molds must determine their own holes.
2+tests: A declared generic parameter does not determine a separate hole in the same record, and later application cannot repair it.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-generic-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ generic |$ [A] [left=A right=_]
2+++ later |= x=(generic @t) x
tests/golden/types-hole-generic-mold/tokens.txtnew file+26
@@ -0,0 +1,26 @@
1+1:1 glyph +$
2+1:4 name generic
3+1:12 glyph |$
4+1:15 glyph [
5+1:16 tight tvar A
6+1:17 tight glyph ]
7+1:19 glyph [
8+1:20 tight name left
9+1:24 tight glyph =
10+1:25 tight tvar A
11+1:27 name right
12+1:32 tight glyph =
13+1:33 tight glyph _
14+1:34 tight glyph ]
15+2:1 NEWLINE
16+2:1 glyph ++
17+2:4 name later
18+2:10 glyph |=
19+2:13 name x
20+2:14 tight glyph =
21+2:15 tight glyph (
22+2:16 tight name generic
23+2:24 aura @t
24+2:26 tight glyph )
25+2:28 name x
26+2:29 NEWLINE
tests/golden/types-hole-generic-mold/tree.txtnew file+11
@@ -0,0 +1,11 @@
1+(module
2+ (mold 1:1 generic
3+ (generic 1:12 A
4+ (cell 1:19
5+ (face 1:20 left (tvar 1:25 A))
6+ (face 1:27 right (hole 1:33)))))
7+ (value 2:1 later
8+ (gate 2:10
9+ (face 2:13 x
10+ (apply 2:15 generic (aura 2:24 @t)))
11+ (wing 2:28 x))))
tests/golden/types-hole-generic-mold/types.txtnew file+6
@@ -0,0 +1,6 @@
1+partial inference; module not checked
2++$ generic: type hole needs a determined type
3+/tests/golden/types-hole-generic-mold/source.jibb:1:33: unresolved type hole
4++$ generic |$ [A] [left=A right=_]
5+ ^
6+++ later: sample mold is not supported by partial inference
tests/golden/types-hole-local-boundary/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: Local definition boundaries, unused locals, a locally solved hole, and recursive groups.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-local-boundary/source.jibbnew file+16
@@ -0,0 +1,16 @@
1+++ later
2+ ++ id |= x=_ x
3+ (id "hello")
4+++ ignored |= x=@t
5+ ++ id |= y=_ y
6+ x
7+++ resolved
8+ ++ id |= x=_ ^- @t x
9+ (id "hello")
10+++ self |= x=_ (self x)
11+++ mutual
12+ ++ left |= x=_ (right x)
13+ ++ right |= x=_ (left x)
14+ (left "hello")
15+++ grouped-a |= x=_ (grouped-b x)
16+++ grouped-b |= x=@t (grouped-a x)
tests/golden/types-hole-local-boundary/tokens.txtnew file+118
@@ -0,0 +1,118 @@
1+1:1 glyph ++
2+1:4 name later
3+2:3 INDENT
4+2:3 glyph ++
5+2:6 name id
6+2:9 glyph |=
7+2:12 name x
8+2:13 tight glyph =
9+2:14 tight glyph _
10+2:16 name x
11+3:3 NEWLINE
12+3:3 glyph (
13+3:4 tight name id
14+3:7 str "hello"
15+3:14 tight glyph )
16+4:1 DEDENT
17+4:1 NEWLINE
18+4:1 glyph ++
19+4:4 name ignored
20+4:12 glyph |=
21+4:15 name x
22+4:16 tight glyph =
23+4:17 tight aura @t
24+5:3 INDENT
25+5:3 glyph ++
26+5:6 name id
27+5:9 glyph |=
28+5:12 name y
29+5:13 tight glyph =
30+5:14 tight glyph _
31+5:16 name y
32+6:3 NEWLINE
33+6:3 name x
34+7:1 DEDENT
35+7:1 NEWLINE
36+7:1 glyph ++
37+7:4 name resolved
38+8:3 INDENT
39+8:3 glyph ++
40+8:6 name id
41+8:9 glyph |=
42+8:12 name x
43+8:13 tight glyph =
44+8:14 tight glyph _
45+8:16 glyph ^-
46+8:19 aura @t
47+8:22 name x
48+9:3 NEWLINE
49+9:3 glyph (
50+9:4 tight name id
51+9:7 str "hello"
52+9:14 tight glyph )
53+10:1 DEDENT
54+10:1 NEWLINE
55+10:1 glyph ++
56+10:4 name self
57+10:9 glyph |=
58+10:12 name x
59+10:13 tight glyph =
60+10:14 tight glyph _
61+10:16 glyph (
62+10:17 tight name self
63+10:22 name x
64+10:23 tight glyph )
65+11:1 NEWLINE
66+11:1 glyph ++
67+11:4 name mutual
68+12:3 INDENT
69+12:3 glyph ++
70+12:6 name left
71+12:11 glyph |=
72+12:14 name x
73+12:15 tight glyph =
74+12:16 tight glyph _
75+12:18 glyph (
76+12:19 tight name right
77+12:25 name x
78+12:26 tight glyph )
79+13:3 NEWLINE
80+13:3 glyph ++
81+13:6 name right
82+13:12 glyph |=
83+13:15 name x
84+13:16 tight glyph =
85+13:17 tight glyph _
86+13:19 glyph (
87+13:20 tight name left
88+13:25 name x
89+13:26 tight glyph )
90+14:3 NEWLINE
91+14:3 glyph (
92+14:4 tight name left
93+14:9 str "hello"
94+14:16 tight glyph )
95+15:1 DEDENT
96+15:1 NEWLINE
97+15:1 glyph ++
98+15:4 name grouped-a
99+15:14 glyph |=
100+15:17 name x
101+15:18 tight glyph =
102+15:19 tight glyph _
103+15:21 glyph (
104+15:22 tight name grouped-b
105+15:32 name x
106+15:33 tight glyph )
107+16:1 NEWLINE
108+16:1 glyph ++
109+16:4 name grouped-b
110+16:14 glyph |=
111+16:17 name x
112+16:18 tight glyph =
113+16:19 tight aura @t
114+16:22 glyph (
115+16:23 tight name grouped-a
116+16:33 name x
117+16:34 tight glyph )
118+16:35 NEWLINE
tests/golden/types-hole-local-boundary/tree.txtnew file+55
@@ -0,0 +1,55 @@
1+(module
2+ (value 1:1 later
3+ (body 2:3
4+ (value 2:3 id
5+ (gate 2:9
6+ (face 2:12 x (hole 2:14))
7+ (wing 2:16 x)))
8+ (group 3:3
9+ (call 3:4 (wing 3:4 id) (str 3:7 "hello")))))
10+ (value 4:1 ignored
11+ (gate 4:12
12+ (face 4:15 x (aura 4:17 @t))
13+ (body 5:3
14+ (value 5:3 id
15+ (gate 5:9
16+ (face 5:12 y (hole 5:14))
17+ (wing 5:16 y)))
18+ (wing 6:3 x))))
19+ (value 7:1 resolved
20+ (body 8:3
21+ (value 8:3 id
22+ (gate 8:9
23+ (face 8:12 x (hole 8:14))
24+ (cast 8:16 (aura 8:19 @t) (wing 8:22 x))))
25+ (group 9:3
26+ (call 9:4 (wing 9:4 id) (str 9:7 "hello")))))
27+ (value 10:1 self
28+ (gate 10:9
29+ (face 10:12 x (hole 10:14))
30+ (group 10:16
31+ (call 10:17 (wing 10:17 self) (wing 10:22 x)))))
32+ (value 11:1 mutual
33+ (body 12:3
34+ (value 12:3 left
35+ (gate 12:11
36+ (face 12:14 x (hole 12:16))
37+ (group 12:18
38+ (call 12:19 (wing 12:19 right) (wing 12:25 x)))))
39+ (value 13:3 right
40+ (gate 13:12
41+ (face 13:15 x (hole 13:17))
42+ (group 13:19
43+ (call 13:20 (wing 13:20 left) (wing 13:25 x)))))
44+ (group 14:3
45+ (call 14:4 (wing 14:4 left) (str 14:9 "hello")))))
46+ (value 15:1 grouped-a
47+ (gate 15:14
48+ (face 15:17 x (hole 15:19))
49+ (group 15:21
50+ (call 15:22 (wing 15:22 grouped-b) (wing 15:32 x)))))
51+ (value 16:1 grouped-b
52+ (gate 16:14
53+ (face 16:17 x (aura 16:19 @t))
54+ (group 16:22
55+ (call 16:23 (wing 16:23 grouped-a) (wing 16:33 x))))))
tests/golden/types-hole-local-boundary/types.txtnew file+17
@@ -0,0 +1,17 @@
1+partial inference; module not checked
2+++ later: type hole needs a determined type
3+/tests/golden/types-hole-local-boundary/source.jibb:2:14: unresolved type hole
4+ ++ id |= x=_ x
5+ ^
6+++ ignored: type hole needs a determined type
7+/tests/golden/types-hole-local-boundary/source.jibb:5:14: unresolved type hole
8+ ++ id |= y=_ y
9+ ^
10+++ resolved: @t
11+++ self: type hole needs a determined type
12+/tests/golden/types-hole-local-boundary/source.jibb:10:14: unresolved type hole
13+++ self |= x=_ (self x)
14+ ^
15+++ mutual: local definitions need unsupported inference
16+++ grouped-a: name is not available to partial inference
17+++ grouped-b: name is not available to partial inference
tests/golden/types-hole-module-boundary/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: A module export cannot generalize an unresolved hole that the importing call later fixes.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-module-boundary/module-trees.txtnew file+6
@@ -0,0 +1,6 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 id
4+ (gate 1:7
5+ (face 1:10 x (hole 1:12))
6+ (wing 1:14 x))))
tests/golden/types-module-field-ambiguous/modules.txt → tests/golden/types-hole-module-boundary/modules.txtrenamed

The content is the same.

tests/golden/types-hole-module-boundary/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ id |= x=_ x
tests/golden/types-hole-module-boundary/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ use (id.lib "hello")
tests/golden/types-hole-module-boundary/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:4 name lib
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name use
10+2:8 glyph (
11+2:9 tight wing id.lib
12+2:16 str "hello"
13+2:23 tight glyph )
14+2:24 NEWLINE
tests/golden/types-hole-module-boundary/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 use
4+ (group 2:8
5+ (call 2:9 (wing 2:9 id.lib) (str 2:16 "hello")))))
tests/golden/types-hole-module-boundary/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module definitions need unsupported inference: /ui/lib/jibb
tests/golden/types-hole-named-complex/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: An applied named mold containing a hole must not be repaired by its use; partial analysis may fail closed.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-named-complex/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ applied (list _)
2+++ later |= x=applied ^- (list @t) x
tests/golden/types-hole-named-complex/tokens.txtnew file+20
@@ -0,0 +1,20 @@
1+1:1 glyph +$
2+1:4 name applied
3+1:12 glyph (
4+1:13 tight name list
5+1:18 glyph _
6+1:19 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name later
10+2:10 glyph |=
11+2:13 name x
12+2:14 tight glyph =
13+2:15 tight name applied
14+2:23 glyph ^-
15+2:26 glyph (
16+2:27 tight name list
17+2:32 aura @t
18+2:34 tight glyph )
19+2:36 name x
20+2:37 NEWLINE
tests/golden/types-hole-named-complex/tree.txtnew file+9
@@ -0,0 +1,9 @@
1+(module
2+ (mold 1:1 applied
3+ (apply 1:12 list (hole 1:18)))
4+ (value 2:1 later
5+ (gate 2:10
6+ (face 2:13 x (ref 2:15 applied))
7+ (cast 2:23
8+ (apply 2:26 list (aura 2:32 @t))
9+ (wing 2:36 x)))))
tests/golden/types-hole-named-complex/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2++$ applied: not checked
3+++ later: sample mold is not supported by partial inference
tests/golden/types-hole-numeric-capture/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: Decimal defaults and ordering when a hole shares a written or captured variable, plus discarded pending expressions.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-numeric-capture/source.jibbnew file+19
@@ -0,0 +1,19 @@
1+++ same |= [a=A b=A] a
2+++ independent ^- _ 1
3+++ first |= x=A ^- _ (same x 1)
4+++ second |= x=A ^- _ (same 1 x)
5+++ capture |= x
6+ ++ local ^- _ (same x 1)
7+ ^- @ux x
8+++ local-independent |= x=@t
9+ ++ local ^- _ 1
10+ x
11+++ unresolved-tag
12+ ~& %orphan
13+ ^- _ 1
14+++ discarded-number
15+ ~& 1
16+ ^- _ "hello"
17+++ captured-second |= x
18+ ++ local ^- _ (same 1 x)
19+ ^- @ux x
tests/golden/types-hole-numeric-capture/tokens.txtnew file+127
@@ -0,0 +1,127 @@
1+1:1 glyph ++
2+1:4 name same
3+1:9 glyph |=
4+1:12 glyph [
5+1:13 tight name a
6+1:14 tight glyph =
7+1:15 tight tvar A
8+1:17 name b
9+1:18 tight glyph =
10+1:19 tight tvar A
11+1:20 tight glyph ]
12+1:22 name a
13+2:1 NEWLINE
14+2:1 glyph ++
15+2:4 name independent
16+2:16 glyph ^-
17+2:19 glyph _
18+2:21 lit 1
19+3:1 NEWLINE
20+3:1 glyph ++
21+3:4 name first
22+3:10 glyph |=
23+3:13 name x
24+3:14 tight glyph =
25+3:15 tight tvar A
26+3:17 glyph ^-
27+3:20 glyph _
28+3:22 glyph (
29+3:23 tight name same
30+3:28 name x
31+3:30 lit 1
32+3:31 tight glyph )
33+4:1 NEWLINE
34+4:1 glyph ++
35+4:4 name second
36+4:11 glyph |=
37+4:14 name x
38+4:15 tight glyph =
39+4:16 tight tvar A
40+4:18 glyph ^-
41+4:21 glyph _
42+4:23 glyph (
43+4:24 tight name same
44+4:29 lit 1
45+4:31 name x
46+4:32 tight glyph )
47+5:1 NEWLINE
48+5:1 glyph ++
49+5:4 name capture
50+5:12 glyph |=
51+5:15 name x
52+6:3 INDENT
53+6:3 glyph ++
54+6:6 name local
55+6:12 glyph ^-
56+6:15 glyph _
57+6:17 glyph (
58+6:18 tight name same
59+6:23 name x
60+6:25 lit 1
61+6:26 tight glyph )
62+7:3 NEWLINE
63+7:3 glyph ^-
64+7:6 aura @ux
65+7:10 name x
66+8:1 DEDENT
67+8:1 NEWLINE
68+8:1 glyph ++
69+8:4 name local-independent
70+8:22 glyph |=
71+8:25 name x
72+8:26 tight glyph =
73+8:27 tight aura @t
74+9:3 INDENT
75+9:3 glyph ++
76+9:6 name local
77+9:12 glyph ^-
78+9:15 glyph _
79+9:17 lit 1
80+10:3 NEWLINE
81+10:3 name x
82+11:1 DEDENT
83+11:1 NEWLINE
84+11:1 glyph ++
85+11:4 name unresolved-tag
86+12:3 INDENT
87+12:3 glyph ~&
88+12:6 lit %orphan
89+13:5 INDENT
90+13:5 glyph ^-
91+13:8 glyph _
92+13:10 lit 1
93+14:1 DEDENT
94+14:1 DEDENT
95+14:1 NEWLINE
96+14:1 glyph ++
97+14:4 name discarded-number
98+15:3 INDENT
99+15:3 glyph ~&
100+15:6 lit 1
101+16:5 INDENT
102+16:5 glyph ^-
103+16:8 glyph _
104+16:10 str "hello"
105+17:1 DEDENT
106+17:1 DEDENT
107+17:1 NEWLINE
108+17:1 glyph ++
109+17:4 name captured-second
110+17:20 glyph |=
111+17:23 name x
112+18:3 INDENT
113+18:3 glyph ++
114+18:6 name local
115+18:12 glyph ^-
116+18:15 glyph _
117+18:17 glyph (
118+18:18 tight name same
119+18:23 lit 1
120+18:25 name x
121+18:26 tight glyph )
122+19:3 NEWLINE
123+19:3 glyph ^-
124+19:6 aura @ux
125+19:10 name x
126+19:11 DEDENT
127+19:11 NEWLINE
tests/golden/types-hole-numeric-capture/tree.txtnew file+62
@@ -0,0 +1,62 @@
1+(module
2+ (value 1:1 same
3+ (gate 1:9
4+ (cell 1:12
5+ (face 1:13 a (tvar 1:15 A))
6+ (face 1:17 b (tvar 1:19 A)))
7+ (wing 1:22 a)))
8+ (value 2:1 independent
9+ (cast 2:16 (hole 2:19) (lit 2:21 1)))
10+ (value 3:1 first
11+ (gate 3:10
12+ (face 3:13 x (tvar 3:15 A))
13+ (cast 3:17
14+ (hole 3:20)
15+ (group 3:22
16+ (call 3:23 (wing 3:23 same) (wing 3:28 x) (lit 3:30 1))))))
17+ (value 4:1 second
18+ (gate 4:11
19+ (face 4:14 x (tvar 4:16 A))
20+ (cast 4:18
21+ (hole 4:21)
22+ (group 4:23
23+ (call 4:24 (wing 4:24 same) (lit 4:29 1) (wing 4:31 x))))))
24+ (value 5:1 capture
25+ (gate 5:12
26+ (bind 5:15 x)
27+ (body 6:3
28+ (value 6:3 local
29+ (cast 6:12
30+ (hole 6:15)
31+ (group 6:17
32+ (call 6:18 (wing 6:18 same) (wing 6:23 x) (lit 6:25 1)))))
33+ (cast 7:3 (aura 7:6 @ux) (wing 7:10 x)))))
34+ (value 8:1 local-independent
35+ (gate 8:22
36+ (face 8:25 x (aura 8:27 @t))
37+ (body 9:3
38+ (value 9:3 local
39+ (cast 9:12 (hole 9:15) (lit 9:17 1)))
40+ (wing 10:3 x))))
41+ (value 11:1 unresolved-tag
42+ (body 12:3
43+ (trace 12:3
44+ (lit 12:6 %orphan)
45+ (body 13:5
46+ (cast 13:5 (hole 13:8) (lit 13:10 1))))))
47+ (value 14:1 discarded-number
48+ (body 15:3
49+ (trace 15:3
50+ (lit 15:6 1)
51+ (body 16:5
52+ (cast 16:5 (hole 16:8) (str 16:10 "hello"))))))
53+ (value 17:1 captured-second
54+ (gate 17:20
55+ (bind 17:23 x)
56+ (body 18:3
57+ (value 18:3 local
58+ (cast 18:12
59+ (hole 18:15)
60+ (group 18:17
61+ (call 18:18 (wing 18:18 same) (lit 18:23 1) (wing 18:25 x)))))
62+ (cast 19:3 (aura 19:6 @ux) (wing 19:10 x))))))
tests/golden/types-hole-numeric-capture/types.txtnew file+10
@@ -0,0 +1,10 @@
1+partial inference; module not checked
2+++ same: $-([a=A b=A] A)
3+++ independent: @ud
4+++ first: call constraint is not supported by partial inference
5+++ second: call constraint is not supported by partial inference
6+++ capture: local definitions need unsupported inference
7+++ local-independent: $-(@t @t)
8+++ unresolved-tag: tag needs context in partial inference
9+++ discarded-number: @t
10+++ captured-second: local definitions need unsupported inference
tests/golden/types-hole-unbound-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: named molds must determine their own holes.
2+tests: An unbound capital prevents a definite structural-hole error until the invalid mold is otherwise understood.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-unbound-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ invalid [left=A right=_]
2+++ later |= x=invalid x
tests/golden/types-hole-unbound-mold/tokens.txtnew file+19
@@ -0,0 +1,19 @@
1+1:1 glyph +$
2+1:4 name invalid
3+1:12 glyph [
4+1:13 tight name left
5+1:17 tight glyph =
6+1:18 tight tvar A
7+1:20 name right
8+1:25 tight glyph =
9+1:26 tight glyph _
10+1:27 tight glyph ]
11+2:1 NEWLINE
12+2:1 glyph ++
13+2:4 name later
14+2:10 glyph |=
15+2:13 name x
16+2:14 tight glyph =
17+2:15 tight name invalid
18+2:23 name x
19+2:24 NEWLINE
tests/golden/types-hole-unbound-mold/tree.txtnew file+9
@@ -0,0 +1,9 @@
1+(module
2+ (mold 1:1 invalid
3+ (cell 1:12
4+ (face 1:13 left (tvar 1:18 A))
5+ (face 1:20 right (hole 1:26))))
6+ (value 2:1 later
7+ (gate 2:10
8+ (face 2:13 x (ref 2:15 invalid))
9+ (wing 2:23 x))))
tests/golden/types-hole-unbound-mold/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2++$ invalid: not checked
3+++ later: sample mold is not supported by partial inference
tests/golden/types-hole-unsupported/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a value definition must determine its own type holes.
2+tests: An unconstrained sample hole reports its source site, while a cast hole can resolve to @t from its expression.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-unsupported/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+++ identity |= x=_ x
2+++ cast ^- _ "hello"
tests/golden/types-hole-unsupported/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph ++
2+1:4 name identity
3+1:13 glyph |=
4+1:16 name x
5+1:17 tight glyph =
6+1:18 tight glyph _
7+1:20 name x
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name cast
11+2:9 glyph ^-
12+2:12 glyph _
13+2:14 str "hello"
14+2:21 NEWLINE
tests/golden/types-hole-unsupported/tree.txtnew file+7
@@ -0,0 +1,7 @@
1+(module
2+ (value 1:1 identity
3+ (gate 1:13
4+ (face 1:16 x (hole 1:18))
5+ (wing 1:20 x)))
6+ (value 2:1 cast
7+ (cast 2:9 (hole 2:12) (str 2:14 "hello"))))
tests/golden/types-hole-unsupported/types.txtnew file+6
@@ -0,0 +1,6 @@
1+partial inference; module not checked
2+++ identity: type hole needs a determined type
3+/tests/golden/types-hole-unsupported/source.jibb:1:18: unresolved type hole
4+++ identity |= x=_ x
5+ ^
6+++ cast: @t
tests/golden/types-hole-user-generic/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: The user’s `A` example and independent instantiations; one independent unresolved sample must not disappear.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-user-generic/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ id |= x=A ^- _ x
2+++ use-text (id "hello")
3+++ use-ship (id ~zod)
4+++ record |= x=A ^- [value=_] [value=x]
5+++ same |= [a=A b=_] ^- A b
6+++ distinct |= x=A |= y=_ ^- _ x
tests/golden/types-hole-user-generic/tokens.txtnew file+71
@@ -0,0 +1,71 @@
1+1:1 glyph ++
2+1:4 name id
3+1:7 glyph |=
4+1:10 name x
5+1:11 tight glyph =
6+1:12 tight tvar A
7+1:14 glyph ^-
8+1:17 glyph _
9+1:19 name x
10+2:1 NEWLINE
11+2:1 glyph ++
12+2:4 name use-text
13+2:13 glyph (
14+2:14 tight name id
15+2:17 str "hello"
16+2:24 tight glyph )
17+3:1 NEWLINE
18+3:1 glyph ++
19+3:4 name use-ship
20+3:13 glyph (
21+3:14 tight name id
22+3:17 lit ~zod
23+3:21 tight glyph )
24+4:1 NEWLINE
25+4:1 glyph ++
26+4:4 name record
27+4:11 glyph |=
28+4:14 name x
29+4:15 tight glyph =
30+4:16 tight tvar A
31+4:18 glyph ^-
32+4:21 glyph [
33+4:22 tight name value
34+4:27 tight glyph =
35+4:28 tight glyph _
36+4:29 tight glyph ]
37+4:31 glyph [
38+4:32 tight name value
39+4:37 tight glyph =
40+4:38 tight name x
41+4:39 tight glyph ]
42+5:1 NEWLINE
43+5:1 glyph ++
44+5:4 name same
45+5:9 glyph |=
46+5:12 glyph [
47+5:13 tight name a
48+5:14 tight glyph =
49+5:15 tight tvar A
50+5:17 name b
51+5:18 tight glyph =
52+5:19 tight glyph _
53+5:20 tight glyph ]
54+5:22 glyph ^-
55+5:25 tvar A
56+5:27 name b
57+6:1 NEWLINE
58+6:1 glyph ++
59+6:4 name distinct
60+6:13 glyph |=
61+6:16 name x
62+6:17 tight glyph =
63+6:18 tight tvar A
64+6:20 glyph |=
65+6:23 name y
66+6:24 tight glyph =
67+6:25 tight glyph _
68+6:27 glyph ^-
69+6:30 glyph _
70+6:32 name x
71+6:33 NEWLINE
tests/golden/types-hole-user-generic/tree.txtnew file+31
@@ -0,0 +1,31 @@
1+(module
2+ (value 1:1 id
3+ (gate 1:7
4+ (face 1:10 x (tvar 1:12 A))
5+ (cast 1:14 (hole 1:17) (wing 1:19 x))))
6+ (value 2:1 use-text
7+ (group 2:13
8+ (call 2:14 (wing 2:14 id) (str 2:17 "hello"))))
9+ (value 3:1 use-ship
10+ (group 3:13
11+ (call 3:14 (wing 3:14 id) (lit 3:17 ~zod))))
12+ (value 4:1 record
13+ (gate 4:11
14+ (face 4:14 x (tvar 4:16 A))
15+ (cast 4:18
16+ (cell 4:21
17+ (face 4:22 value (hole 4:28)))
18+ (tuple 4:31
19+ (face 4:32 value (wing 4:38 x))))))
20+ (value 5:1 same
21+ (gate 5:9
22+ (cell 5:12
23+ (face 5:13 a (tvar 5:15 A))
24+ (face 5:17 b (hole 5:19)))
25+ (cast 5:22 (tvar 5:25 A) (wing 5:27 b))))
26+ (value 6:1 distinct
27+ (gate 6:13
28+ (face 6:16 x (tvar 6:18 A))
29+ (gate 6:20
30+ (face 6:23 y (hole 6:25))
31+ (cast 6:27 (hole 6:30) (wing 6:32 x))))))
tests/golden/types-hole-user-generic/types.txtnew file+10
@@ -0,0 +1,10 @@
1+partial inference; module not checked
2+++ id: $-(A A)
3+++ use-text: @t
4+++ use-ship: @p
5+++ record: $-(A [value=A])
6+++ same: $-([a=A b=A] A)
7+++ distinct: type hole needs a determined type
8+/tests/golden/types-hole-user-generic/source.jibb:6:25: unresolved type hole
9+++ distinct |= x=A |= y=_ ^- _ x
10+ ^
tests/golden/types-hole-user-named/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: The user’s `[item=_]` named mold remains unresolved even if a later use supplies @t.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-user-named/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ box [item=_]
2+++ later |= x=box ^- [item=@t] x
tests/golden/types-hole-user-named/tokens.txtnew file+22
@@ -0,0 +1,22 @@
1+1:1 glyph +$
2+1:4 name box
3+1:8 glyph [
4+1:9 tight name item
5+1:13 tight glyph =
6+1:14 tight glyph _
7+1:15 tight glyph ]
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name later
11+2:10 glyph |=
12+2:13 name x
13+2:14 tight glyph =
14+2:15 tight name box
15+2:19 glyph ^-
16+2:22 glyph [
17+2:23 tight name item
18+2:27 tight glyph =
19+2:28 tight aura @t
20+2:30 tight glyph ]
21+2:32 name x
22+2:33 NEWLINE
tests/golden/types-hole-user-named/tree.txtnew file+11
@@ -0,0 +1,11 @@
1+(module
2+ (mold 1:1 box
3+ (cell 1:8
4+ (face 1:9 item (hole 1:14))))
5+ (value 2:1 later
6+ (gate 2:10
7+ (face 2:13 x (ref 2:15 box))
8+ (cast 2:19
9+ (cell 2:22
10+ (face 2:23 item (aura 2:28 @t)))
11+ (wing 2:32 x)))))
tests/golden/types-hole-user-named/types.txtnew file+6
@@ -0,0 +1,6 @@
1+partial inference; module not checked
2++$ box: type hole needs a determined type
3+/tests/golden/types-hole-user-named/source.jibb:1:14: unresolved type hole
4++$ box [item=_]
5+ ^
6+++ later: sample mold is not supported by partial inference
tests/golden/types-hole-user-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: a definition must determine its own type holes.
2+tests: An identity with an unconstrained hole stays invalid even when a later definition calls it with a cord.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-hole-user-value/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ id |= x=_ x
2+++ later (id "hello")
3+++ independent ^- _ "resolved"
tests/golden/types-hole-user-value/tokens.txtnew file+21
@@ -0,0 +1,21 @@
1+1:1 glyph ++
2+1:4 name id
3+1:7 glyph |=
4+1:10 name x
5+1:11 tight glyph =
6+1:12 tight glyph _
7+1:14 name x
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name later
11+2:10 glyph (
12+2:11 tight name id
13+2:14 str "hello"
14+2:21 tight glyph )
15+3:1 NEWLINE
16+3:1 glyph ++
17+3:4 name independent
18+3:16 glyph ^-
19+3:19 glyph _
20+3:21 str "resolved"
21+3:31 NEWLINE
tests/golden/types-hole-user-value/tree.txtnew file+10
@@ -0,0 +1,10 @@
1+(module
2+ (value 1:1 id
3+ (gate 1:7
4+ (face 1:10 x (hole 1:12))
5+ (wing 1:14 x)))
6+ (value 2:1 later
7+ (group 2:10
8+ (call 2:11 (wing 2:11 id) (str 2:14 "hello"))))
9+ (value 3:1 independent
10+ (cast 3:16 (hole 3:19) (str 3:21 "resolved"))))
tests/golden/types-hole-user-value/types.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2+++ id: type hole needs a determined type
3+/tests/golden/types-hole-user-value/source.jibb:1:12: unresolved type hole
4+++ id |= x=_ x
5+ ^
6+++ later: name is not available to partial inference
7+++ independent: @t
tests/golden/types-import-tlon-notes/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Overview, Importing Hoon types: Hoon `$%` imports as a union if its cases differ as nouns; unused molds are skipped. Grammar, Literals: `~` is null.
2−tests: The unmodified Tlon `desk/sur/notes.hoon` at tloncorp/tlon-apps commit 38f9328f4580000a37a7fdc3ab820fcd65069487 (MIT license in `tests/importer/tlon-license.txt`) has tagged unions with null cases. The real update and action molds reach partial inference. A notebook update and its enclosing record contain one source-proved named union dependency; The `log` ordered map is accepted through its named mold operand, The recursive `import-node` reaches an identity gate as an opaque nominal type; unsupported sibling molds remain unchecked.
2+tests: The unmodified Tlon `desk/sur/notes.hoon` at tloncorp/tlon-apps commit 38f9328f4580000a37a7fdc3ab820fcd65069487 (MIT license in `tests/importer/tlon-license.txt`) has tagged unions with null cases. The real update and action molds reach partial inference. A notebook update and its enclosing record contain one source-proved named union dependency. The `log` ordered map is accepted through its named mold operand. The recursive `import-node` reaches an identity gate as an opaque nominal type; a notebook action preserves that same nested recursive owner. Unsupported sibling molds remain unchecked.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-import-tlon-notes/imports.txt+1
@@ -4,3 +4,4 @@ notes u-notebook
44notes u-notes
55notes log
66notes import-node
7+notes a-notebook
tests/golden/types-import-tlon-notes/source.jibb+1
@@ -5,3 +5,4 @@
55++ notes-update |= x=u-notes.notes x
66++ log-identity |= x=log.notes x
77++ import-node-id |= x=import-node.notes x
8+++ notebook-action-identity |= x=a-notebook.notes x
tests/golden/types-import-tlon-notes/tokens.txt+9−1
@@ -48,4 +48,12 @@
48487:23 tight glyph =
49497:24 tight wing import-node.notes
50507:42 name x
51−7:43 NEWLINE
51+8:1 NEWLINE
52+8:1 glyph ++
53+8:4 name notebook-action-identity
54+8:29 glyph |=
55+8:32 name x
56+8:33 tight glyph =
57+8:34 tight wing a-notebook.notes
58+8:51 name x
59+8:52 NEWLINE
tests/golden/types-import-tlon-notes/tree.txt+5−1
@@ -23,4 +23,8 @@
2323 (value 7:1 import-node-id
2424 (gate 7:19
2525 (face 7:22 x (ref 7:24 import-node.notes))
26− (wing 7:42 x))))
26+ (wing 7:42 x)))
27+ (value 8:1 notebook-action-identity
28+ (gate 8:29
29+ (face 8:32 x (ref 8:34 a-notebook.notes))
30+ (wing 8:51 x))))
tests/golden/types-import-tlon-notes/types.txt+1
@@ -5,3 +5,4 @@ partial inference; module not checked
55++ notes-update: $-([flag=[ship=@p name=@tas] u-notebook=([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]])] [flag=[ship=@p name=@tas] u-notebook=([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]])])
66++ log-identity: $-((mop @da ([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]])) (mop @da ([%note [id=@ud u-note=([%updated note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%created note=[id=@ud [notebook-id=@ud [folder-id=@ud [title=@t [slug=(unit @t) [body-md=@t [created-by=@p [created-at=@da [updated-by=@p [updated-at=@da revision=@ud]]]]]]]]]]] [%deleted ~] [%published html=@t] [%unpublished ~] [%history-archived note-revision=[rev=@ud [at=@da [author=@p [title=@t body-md=@t]]]]])]] [%folder [id=@ud u-folder=([%updated folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%created folder=[id=@ud [notebook-id=@ud [name=@t [parent-folder-id=(unit @ud) [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]]]] [%deleted ~])]] [%updated notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]]] [%created [notebook=[id=@ud [title=@t [created-by=@p [created-at=@da [updated-at=@da updated-by=@p]]]]] visibility=(%public %private)]] [%deleted ~] [%visibility visibility=(%public %private)] [%member-left who=@p] [%member-joined [who=@p role=(%owner %viewer %editor)]] [%invite-removed ~] [%invite-received [from=@p title=@t]])))
77++ import-node-id: $-(import-node.notes import-node.notes)
8+++ notebook-action-identity: $-(([%note [id=@ud a-note=([%move folder=@ud] [%rename title=@t] [%update [body=@t expected-revision=@ud]] [%delete ~] [%modify [title=(unit @t) folder=(unit @ud)]] [%restore rev=@ud] [%publish html=@t] [%unpublish ~])]] [%rename title=@t] [%delete ~] [%invite who=@p] [%folder [id=@ud a-folder=([%move new-parent=@ud] [%rename name=@t] [%update [name=(unit @t) parent=(unit @ud)]] [%delete recursive=?])]] [%visibility visibility=(%public %private)] [%create-note [folder=@ud [title=@t body=@t]]] [%batch-import [folder=@ud notes=(list [title=@t body=@t])]] [%create-folder [parent=@ud name=@t]] [%batch-import-tree [parent=@ud tree=(list import-node.notes)]]) ([%note [id=@ud a-note=([%move folder=@ud] [%rename title=@t] [%update [body=@t expected-revision=@ud]] [%delete ~] [%modify [title=(unit @t) folder=(unit @ud)]] [%restore rev=@ud] [%publish html=@t] [%unpublish ~])]] [%rename title=@t] [%delete ~] [%invite who=@p] [%folder [id=@ud a-folder=([%move new-parent=@ud] [%rename name=@t] [%update [name=(unit @t) parent=(unit @ud)]] [%delete recursive=?])]] [%visibility visibility=(%public %private)] [%create-note [folder=@ud [title=@t body=@t]]] [%batch-import [folder=@ud notes=(list [title=@t body=@t])]] [%create-folder [parent=@ud name=@t]] [%batch-import-tree [parent=@ud tree=(list import-node.notes)]]))
tests/golden/types-module-field-ambiguous/about.txtdeleted−4
@@ -1,4 +0,0 @@
1−source: Grammar, Expressions and Imports: a wing selects a named field, and a module import gives access through its face.
2−tests: An imported record with two same-named fields does not allow an arbitrary choice; ambiguous selection stays unsupported.
3−expect: parses
4−expect-types: a partial inference report
tests/golden/types-module-field-ambiguous/types.txtdeleted−2
@@ -1,2 +0,0 @@
1−partial inference; module not checked
2−++ value: field name is ambiguous in partial inference
tests/golden/types-module-field-duplicate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds; Imports: record fields are distinct within each record scope.
2+tests: A reachable imported module with duplicate record-expression faces is rejected at both source sites.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-module-field-ambiguous/module-trees.txt → tests/golden/types-module-field-duplicate/module-trees.txtrenamed

The content is the same.

tests/golden/types-module-field-duplicate/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-module-field-ambiguous/modules/ui/lib.jibb → tests/golden/types-module-field-duplicate/modules/ui/lib.jibbrenamed

The content is the same.

tests/golden/types-module-field-ambiguous/source.jibb → tests/golden/types-module-field-duplicate/source.jibbrenamed

The content is the same.

tests/golden/types-module-field-ambiguous/tokens.txt → tests/golden/types-module-field-duplicate/tokens.txtrenamed

The content is the same.

tests/golden/types-module-field-ambiguous/tree.txt → tests/golden/types-module-field-duplicate/tree.txtrenamed

The content is the same.

tests/golden/types-module-field-duplicate/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `x` is repeated
3+/ui/lib.jibb:1:15: first field
4+++ ambiguous [x="hi" x=~zod]
5+ ^
6+/ui/lib.jibb:1:22: repeated field
7+++ ambiguous [x="hi" x=~zod]
8+ ^
tests/golden/types-prelude-bond/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Prelude: "Hoon's standard library regrouped, written in Jibb and vendored as `/lib/jibb/prelude`".
2+tests: The curried `bond` gate uses a fallback trap for an absent unit and returns the value of a present unit; both results keep the fallback type, including generic, cord and ship uses.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-bond/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-prelude-bond/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ choose (bond |=(~ "default"))
2+++ missing (choose ~)
3+++ present (choose `"found")
4+++ wrap |= fallback=$-(~ A) (bond fallback)
5+++ choose-ship (bond |=(~ ~zod))
6+++ present-ship (choose-ship `~zod)
tests/golden/types-prelude-bond/tokens.txtnew file+57
@@ -0,0 +1,57 @@
1+1:1 glyph ++
2+1:4 name choose
3+1:11 glyph (
4+1:12 tight name bond
5+1:17 glyph |=(
6+1:20 tight lit ~
7+1:22 str "default"
8+1:31 tight glyph )
9+1:32 tight glyph )
10+2:1 NEWLINE
11+2:1 glyph ++
12+2:4 name missing
13+2:12 glyph (
14+2:13 tight name choose
15+2:20 lit ~
16+2:21 tight glyph )
17+3:1 NEWLINE
18+3:1 glyph ++
19+3:4 name present
20+3:12 glyph (
21+3:13 tight name choose
22+3:20 glyph `
23+3:21 tight str "found"
24+3:28 tight glyph )
25+4:1 NEWLINE
26+4: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 )
39+5:1 NEWLINE
40+5:1 glyph ++
41+5:4 name choose-ship
42+5:16 glyph (
43+5:17 tight name bond
44+5:22 glyph |=(
45+5:25 tight lit ~
46+5:27 lit ~zod
47+5:31 tight glyph )
48+5:32 tight glyph )
49+6:1 NEWLINE
50+6:1 glyph ++
51+6:4 name present-ship
52+6:17 glyph (
53+6:18 tight name choose-ship
54+6:30 glyph `
55+6:31 tight lit ~zod
56+6:35 tight glyph )
57+6:36 NEWLINE
tests/golden/types-prelude-bond/tree.txtnew file+30
@@ -0,0 +1,30 @@
1+(module
2+ (value 1:1 choose
3+ (group 1:11
4+ (call 1:12
5+ (wing 1:12 bond)
6+ (gate-wide 1:17 (const 1:20 ~) (str 1:22 "default")))))
7+ (value 2:1 missing
8+ (group 2:12
9+ (call 2:13 (wing 2:13 choose) (lit 2:20 ~))))
10+ (value 3:1 present
11+ (group 3:12
12+ (call 3:13
13+ (wing 3:13 choose)
14+ (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)))))
21+ (value 5:1 choose-ship
22+ (group 5:16
23+ (call 5:17
24+ (wing 5:17 bond)
25+ (gate-wide 5:22 (const 5:25 ~) (lit 5:27 ~zod)))))
26+ (value 6:1 present-ship
27+ (group 6:17
28+ (call 6:18
29+ (wing 6:18 choose-ship)
30+ (unit 6:30 (lit 6:31 ~zod))))))
tests/golden/types-prelude-bond/types.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2+++ choose: $-((unit @t) @t)
3+++ missing: @t
4+++ present: @t
5+++ wrap: $-($-(~ A) $-((unit A) A))
6+++ choose-ship: $-((unit @p) @p)
7+++ present-ship: @p
tests/golden/types-prelude-list-alias/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: named generic molds and the source-backed prelude.
2+tests: The verified prelude list is available to path, tape and their dependent aliases; a generic list alias has independent @t and @p uses and rejects an incompatible item.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-list-alias/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude for this case.
tests/golden/types-prelude-list-alias/source.jibbnew file+7
@@ -0,0 +1,7 @@
1++$ bag |$ [A] (list A)
2+++ path-id |= x=path x
3+++ tape-id |= x=tape x
4+++ spot-id |= x=spot x
5+++ text |= x=(bag @t) x
6+++ ship |= x=(bag @p) x
7+++ wrong ^- (bag @t) ~[~zod]
tests/golden/types-prelude-list-alias/tokens.txtnew file+68
@@ -0,0 +1,68 @@
1+1:1 glyph +$
2+1:4 name bag
3+1:8 glyph |$
4+1:11 glyph [
5+1:12 tight tvar A
6+1:13 tight glyph ]
7+1:15 glyph (
8+1:16 tight name list
9+1:21 tvar A
10+1:22 tight glyph )
11+2:1 NEWLINE
12+2:1 glyph ++
13+2:4 name path-id
14+2:12 glyph |=
15+2:15 name x
16+2:16 tight glyph =
17+2:17 tight name path
18+2:22 name x
19+3:1 NEWLINE
20+3:1 glyph ++
21+3:4 name tape-id
22+3:12 glyph |=
23+3:15 name x
24+3:16 tight glyph =
25+3:17 tight name tape
26+3:22 name x
27+4:1 NEWLINE
28+4:1 glyph ++
29+4:4 name spot-id
30+4:12 glyph |=
31+4:15 name x
32+4:16 tight glyph =
33+4:17 tight name spot
34+4:22 name x
35+5:1 NEWLINE
36+5: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
46+6:1 NEWLINE
47+6:1 glyph ++
48+6:4 name ship
49+6:9 glyph |=
50+6:12 name x
51+6:13 tight glyph =
52+6:14 tight glyph (
53+6:15 tight name bag
54+6:19 aura @p
55+6:21 tight glyph )
56+6:23 name x
57+7:1 NEWLINE
58+7:1 glyph ++
59+7:4 name wrong
60+7:10 glyph ^-
61+7:13 glyph (
62+7:14 tight name bag
63+7:18 aura @t
64+7:20 tight glyph )
65+7:22 glyph ~[
66+7:24 tight lit ~zod
67+7:28 tight glyph ]
68+7:29 NEWLINE
tests/golden/types-prelude-list-alias/tree.txtnew file+30
@@ -0,0 +1,30 @@
1+(module
2+ (mold 1:1 bag
3+ (generic 1:8 A
4+ (apply 1:15 list (tvar 1:21 A))))
5+ (value 2:1 path-id
6+ (gate 2:12
7+ (face 2:15 x (ref 2:17 path))
8+ (wing 2:22 x)))
9+ (value 3:1 tape-id
10+ (gate 3:12
11+ (face 3:15 x (ref 3:17 tape))
12+ (wing 3:22 x)))
13+ (value 4:1 spot-id
14+ (gate 4:12
15+ (face 4:15 x (ref 4:17 spot))
16+ (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)))
22+ (value 6:1 ship
23+ (gate 6:9
24+ (face 6:12 x
25+ (apply 6:14 bag (aura 6:19 @p)))
26+ (wing 6:23 x)))
27+ (value 7:1 wrong
28+ (cast 7:10
29+ (apply 7:13 bag (aura 7:18 @t))
30+ (list 7:22 (lit 7:24 ~zod)))))
tests/golden/types-prelude-list-alias/types.txtnew file+14
@@ -0,0 +1,14 @@
1+partial inference; module not checked
2++$ bag: not checked
3+++ path-id: $-((list @ta) (list @ta))
4+++ tape-id: $-((list @tD) (list @tD))
5+++ 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))
7+++ ship: $-((list @p) (list @p))
8+++ wrong: list item does not fit its expected type
9+/tests/golden/types-prelude-list-alias/source.jibb:7:13: expected item has type @t
10+++ wrong ^- (bag @t) ~[~zod]
11+ ^
12+/tests/golden/types-prelude-list-alias/source.jibb:7:24: list item has type @p
13+++ wrong ^- (bag @t) ~[~zod]
14+ ^
tests/golden/types-proj-explicit-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: Result casts, call context, generic fields, exact-width records, a discarded effect and pending tags/null. Nested record context and single-field targets infer when the target is known. Bare or aliased proj, wrong arity, incompatible or missing fields and absent target context currently fail closed. A multi-argument generic-tail call retains ordinary right-nested semantics without projection. The current implementation accepts a same-order subsequence and fails closed on reversed fields while field-order semantics are pending.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-explicit-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-explicit-context/source.jibbnew file+35
@@ -0,0 +1,35 @@
1+:: Explicit proj selects fields from its expected result type.
2+:: The operation is reserved; direct calls do not insert a projection.
3+++ choose |= x=[a=@t b=@p] a.x
4+++ source |= x=@t [a=x b=~zod c=%.y]
5+++ trace-extra |= x=@t
6+ ~& "extra"
7+ x
8+++ direct ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])
9+++ from-call ^- [a=@t b=@p] (proj (source "hi"))
10+++ into-call (choose (proj [a="hi" b=~zod c=%.y]))
11+++ nested ^- [result=[a=@t b=@p] done=?] [result=(proj [a="hi" b=~zod c=%.y]) done=%.y]
12+++ generic |= x=B ^- [a=@t b=B] (proj [a="hi" b=x c=%.y])
13+++ no-context (proj [a="hi" b=~zod c=%.y])
14+++ unknown-target |= x (proj x)
15+++ missing ^- [a=@t b=@p] (proj [a="hi" c=%.y d=~zod])
16+++ incompatible ^- [a=@t b=@p] (proj [a="hi" b="wrong" c=%.y])
17+++ trace-extra-field ^- [a=@t b=@p] (proj [a="hi" b=~zod c=(trace-extra "once")])
18+++ pending-tag ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%orphan])
19+++ pending-null ^- [a=@t b=@p] (proj [a="hi" b=~zod c=~])
20+++ positional ^- [a=@t b=@p] (proj "hi" ~zod %.y)
21+++ not-record ^- [a=@t b=@p] (proj "hi")
22+:: The user chose explicit proj; implicit projection must be rejected.
23+++ bare-cast ^- [a=@t b=@p] [a="hi" b=~zod c=%.y]
24+++ bare-call (choose [a="hi" b=~zod c=%.y])
25+++ bare-result |= x=@t ^- [a=@t b=@p] (source x)
26+++ bare proj
27+++ alias proj
28+++ alias-use ^- [a=@t b=@p] (alias [a="hi" b=~zod c=%.y])
29+++ two-arguments ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y] [a="x" b=~zod c=%.y])
30+++ one-field ^- [a=@t] (proj [a="hi" b=~zod c=%.y])
31+++ exact-record ^- [a=@t b=@p] (proj [a="hi" b=~zod])
32+++ positional-generic |= [a=@t b=B] a
33+++ positional-generic-call (positional-generic "hi" ~zod %.y)
34+++ subsequence ^- [a=@t c=?] (proj [a="hi" b=~zod c=%.y])
35+++ reversed ^- [b=@p a=@t] (proj [a="hi" b=~zod c=%.y])
tests/golden/types-proj-explicit-context/tokens.txtnew file+626
@@ -0,0 +1,626 @@
1+3:1 glyph ++
2+3:4 name choose
3+3:11 glyph |=
4+3:14 name x
5+3:15 tight glyph =
6+3:16 tight glyph [
7+3:17 tight name a
8+3:18 tight glyph =
9+3:19 tight aura @t
10+3:22 name b
11+3:23 tight glyph =
12+3:24 tight aura @p
13+3:26 tight glyph ]
14+3:28 wing a.x
15+4:1 NEWLINE
16+4:1 glyph ++
17+4:4 name source
18+4:11 glyph |=
19+4:14 name x
20+4:15 tight glyph =
21+4:16 tight aura @t
22+4:19 glyph [
23+4:20 tight name a
24+4:21 tight glyph =
25+4:22 tight name x
26+4:24 name b
27+4:25 tight glyph =
28+4:26 tight lit ~zod
29+4:31 name c
30+4:32 tight glyph =
31+4:33 tight lit %.y
32+4:36 tight glyph ]
33+5:1 NEWLINE
34+5:1 glyph ++
35+5:4 name trace-extra
36+5:16 glyph |=
37+5:19 name x
38+5:20 tight glyph =
39+5:21 tight aura @t
40+6:3 INDENT
41+6:3 glyph ~&
42+6:6 str "extra"
43+7:5 INDENT
44+7:5 name x
45+8:1 DEDENT
46+8:1 DEDENT
47+8:1 NEWLINE
48+8:1 glyph ++
49+8:4 name direct
50+8:11 glyph ^-
51+8:14 glyph [
52+8:15 tight name a
53+8:16 tight glyph =
54+8:17 tight aura @t
55+8:20 name b
56+8:21 tight glyph =
57+8:22 tight aura @p
58+8:24 tight glyph ]
59+8:26 glyph (
60+8:27 tight name proj
61+8:32 glyph [
62+8:33 tight name a
63+8:34 tight glyph =
64+8:35 tight str "hi"
65+8:40 name b
66+8:41 tight glyph =
67+8:42 tight lit ~zod
68+8:47 name c
69+8:48 tight glyph =
70+8:49 tight lit %.y
71+8:52 tight glyph ]
72+8:53 tight glyph )
73+9:1 NEWLINE
74+9:1 glyph ++
75+9:4 name from-call
76+9:14 glyph ^-
77+9:17 glyph [
78+9:18 tight name a
79+9:19 tight glyph =
80+9:20 tight aura @t
81+9:23 name b
82+9:24 tight glyph =
83+9:25 tight aura @p
84+9:27 tight glyph ]
85+9:29 glyph (
86+9:30 tight name proj
87+9:35 glyph (
88+9:36 tight name source
89+9:43 str "hi"
90+9:47 tight glyph )
91+9:48 tight glyph )
92+10:1 NEWLINE
93+10:1 glyph ++
94+10:4 name into-call
95+10:14 glyph (
96+10:15 tight name choose
97+10:22 glyph (
98+10:23 tight name proj
99+10:28 glyph [
100+10:29 tight name a
101+10:30 tight glyph =
102+10:31 tight str "hi"
103+10:36 name b
104+10:37 tight glyph =
105+10:38 tight lit ~zod
106+10:43 name c
107+10:44 tight glyph =
108+10:45 tight lit %.y
109+10:48 tight glyph ]
110+10:49 tight glyph )
111+10:50 tight glyph )
112+11:1 NEWLINE
113+11:1 glyph ++
114+11:4 name nested
115+11:11 glyph ^-
116+11:14 glyph [
117+11:15 tight name result
118+11:21 tight glyph =
119+11:22 tight glyph [
120+11:23 tight name a
121+11:24 tight glyph =
122+11:25 tight aura @t
123+11:28 name b
124+11:29 tight glyph =
125+11:30 tight aura @p
126+11:32 tight glyph ]
127+11:34 name done
128+11:38 tight glyph =
129+11:39 tight glyph ?
130+11:40 tight glyph ]
131+11:42 glyph [
132+11:43 tight name result
133+11:49 tight glyph =
134+11:50 tight glyph (
135+11:51 tight name proj
136+11:56 glyph [
137+11:57 tight name a
138+11:58 tight glyph =
139+11:59 tight str "hi"
140+11:64 name b
141+11:65 tight glyph =
142+11:66 tight lit ~zod
143+11:71 name c
144+11:72 tight glyph =
145+11:73 tight lit %.y
146+11:76 tight glyph ]
147+11:77 tight glyph )
148+11:79 name done
149+11:83 tight glyph =
150+11:84 tight lit %.y
151+11:87 tight glyph ]
152+12:1 NEWLINE
153+12:1 glyph ++
154+12:4 name generic
155+12:12 glyph |=
156+12:15 name x
157+12:16 tight glyph =
158+12:17 tight tvar B
159+12:19 glyph ^-
160+12:22 glyph [
161+12:23 tight name a
162+12:24 tight glyph =
163+12:25 tight aura @t
164+12:28 name b
165+12:29 tight glyph =
166+12:30 tight tvar B
167+12:31 tight glyph ]
168+12:33 glyph (
169+12:34 tight name proj
170+12:39 glyph [
171+12:40 tight name a
172+12:41 tight glyph =
173+12:42 tight str "hi"
174+12:47 name b
175+12:48 tight glyph =
176+12:49 tight name x
177+12:51 name c
178+12:52 tight glyph =
179+12:53 tight lit %.y
180+12:56 tight glyph ]
181+12:57 tight glyph )
182+13:1 NEWLINE
183+13:1 glyph ++
184+13:4 name no-context
185+13:15 glyph (
186+13:16 tight name proj
187+13:21 glyph [
188+13:22 tight name a
189+13:23 tight glyph =
190+13:24 tight str "hi"
191+13:29 name b
192+13:30 tight glyph =
193+13:31 tight lit ~zod
194+13:36 name c
195+13:37 tight glyph =
196+13:38 tight lit %.y
197+13:41 tight glyph ]
198+13:42 tight glyph )
199+14:1 NEWLINE
200+14:1 glyph ++
201+14:4 name unknown-target
202+14:19 glyph |=
203+14:22 name x
204+14:24 glyph (
205+14:25 tight name proj
206+14:30 name x
207+14:31 tight glyph )
208+15:1 NEWLINE
209+15:1 glyph ++
210+15:4 name missing
211+15:12 glyph ^-
212+15:15 glyph [
213+15:16 tight name a
214+15:17 tight glyph =
215+15:18 tight aura @t
216+15:21 name b
217+15:22 tight glyph =
218+15:23 tight aura @p
219+15:25 tight glyph ]
220+15:27 glyph (
221+15:28 tight name proj
222+15:33 glyph [
223+15:34 tight name a
224+15:35 tight glyph =
225+15:36 tight str "hi"
226+15:41 name c
227+15:42 tight glyph =
228+15:43 tight lit %.y
229+15:47 name d
230+15:48 tight glyph =
231+15:49 tight lit ~zod
232+15:53 tight glyph ]
233+15:54 tight glyph )
234+16:1 NEWLINE
235+16:1 glyph ++
236+16:4 name incompatible
237+16:17 glyph ^-
238+16:20 glyph [
239+16:21 tight name a
240+16:22 tight glyph =
241+16:23 tight aura @t
242+16:26 name b
243+16:27 tight glyph =
244+16:28 tight aura @p
245+16:30 tight glyph ]
246+16:32 glyph (
247+16:33 tight name proj
248+16:38 glyph [
249+16:39 tight name a
250+16:40 tight glyph =
251+16:41 tight str "hi"
252+16:46 name b
253+16:47 tight glyph =
254+16:48 tight str "wrong"
255+16:56 name c
256+16:57 tight glyph =
257+16:58 tight lit %.y
258+16:61 tight glyph ]
259+16:62 tight glyph )
260+17:1 NEWLINE
261+17:1 glyph ++
262+17:4 name trace-extra-field
263+17:22 glyph ^-
264+17:25 glyph [
265+17:26 tight name a
266+17:27 tight glyph =
267+17:28 tight aura @t
268+17:31 name b
269+17:32 tight glyph =
270+17:33 tight aura @p
271+17:35 tight glyph ]
272+17:37 glyph (
273+17:38 tight name proj
274+17:43 glyph [
275+17:44 tight name a
276+17:45 tight glyph =
277+17:46 tight str "hi"
278+17:51 name b
279+17:52 tight glyph =
280+17:53 tight lit ~zod
281+17:58 name c
282+17:59 tight glyph =
283+17:60 tight glyph (
284+17:61 tight name trace-extra
285+17:73 str "once"
286+17:79 tight glyph )
287+17:80 tight glyph ]
288+17:81 tight glyph )
289+18:1 NEWLINE
290+18:1 glyph ++
291+18:4 name pending-tag
292+18:16 glyph ^-
293+18:19 glyph [
294+18:20 tight name a
295+18:21 tight glyph =
296+18:22 tight aura @t
297+18:25 name b
298+18:26 tight glyph =
299+18:27 tight aura @p
300+18:29 tight glyph ]
301+18:31 glyph (
302+18:32 tight name proj
303+18:37 glyph [
304+18:38 tight name a
305+18:39 tight glyph =
306+18:40 tight str "hi"
307+18:45 name b
308+18:46 tight glyph =
309+18:47 tight lit ~zod
310+18:52 name c
311+18:53 tight glyph =
312+18:54 tight lit %orphan
313+18:61 tight glyph ]
314+18:62 tight glyph )
315+19:1 NEWLINE
316+19:1 glyph ++
317+19:4 name pending-null
318+19:17 glyph ^-
319+19:20 glyph [
320+19:21 tight name a
321+19:22 tight glyph =
322+19:23 tight aura @t
323+19:26 name b
324+19:27 tight glyph =
325+19:28 tight aura @p
326+19:30 tight glyph ]
327+19:32 glyph (
328+19:33 tight name proj
329+19:38 glyph [
330+19:39 tight name a
331+19:40 tight glyph =
332+19:41 tight str "hi"
333+19:46 name b
334+19:47 tight glyph =
335+19:48 tight lit ~zod
336+19:53 name c
337+19:54 tight glyph =
338+19:55 tight lit ~
339+19:56 tight glyph ]
340+19:57 tight glyph )
341+20:1 NEWLINE
342+20:1 glyph ++
343+20:4 name positional
344+20:15 glyph ^-
345+20:18 glyph [
346+20:19 tight name a
347+20:20 tight glyph =
348+20:21 tight aura @t
349+20:24 name b
350+20:25 tight glyph =
351+20:26 tight aura @p
352+20:28 tight glyph ]
353+20:30 glyph (
354+20:31 tight name proj
355+20:36 str "hi"
356+20:41 lit ~zod
357+20:46 lit %.y
358+20:49 tight glyph )
359+21:1 NEWLINE
360+21:1 glyph ++
361+21:4 name not-record
362+21:15 glyph ^-
363+21:18 glyph [
364+21:19 tight name a
365+21:20 tight glyph =
366+21:21 tight aura @t
367+21:24 name b
368+21:25 tight glyph =
369+21:26 tight aura @p
370+21:28 tight glyph ]
371+21:30 glyph (
372+21:31 tight name proj
373+21:36 str "hi"
374+21:40 tight glyph )
375+23:1 NEWLINE
376+23:1 glyph ++
377+23:4 name bare-cast
378+23:14 glyph ^-
379+23:17 glyph [
380+23:18 tight name a
381+23:19 tight glyph =
382+23:20 tight aura @t
383+23:23 name b
384+23:24 tight glyph =
385+23:25 tight aura @p
386+23:27 tight glyph ]
387+23:29 glyph [
388+23:30 tight name a
389+23:31 tight glyph =
390+23:32 tight str "hi"
391+23:37 name b
392+23:38 tight glyph =
393+23:39 tight lit ~zod
394+23:44 name c
395+23:45 tight glyph =
396+23:46 tight lit %.y
397+23:49 tight glyph ]
398+24:1 NEWLINE
399+24:1 glyph ++
400+24:4 name bare-call
401+24:14 glyph (
402+24:15 tight name choose
403+24:22 glyph [
404+24:23 tight name a
405+24:24 tight glyph =
406+24:25 tight str "hi"
407+24:30 name b
408+24:31 tight glyph =
409+24:32 tight lit ~zod
410+24:37 name c
411+24:38 tight glyph =
412+24:39 tight lit %.y
413+24:42 tight glyph ]
414+24:43 tight glyph )
415+25:1 NEWLINE
416+25:1 glyph ++
417+25:4 name bare-result
418+25:16 glyph |=
419+25:19 name x
420+25:20 tight glyph =
421+25:21 tight aura @t
422+25:24 glyph ^-
423+25:27 glyph [
424+25:28 tight name a
425+25:29 tight glyph =
426+25:30 tight aura @t
427+25:33 name b
428+25:34 tight glyph =
429+25:35 tight aura @p
430+25:37 tight glyph ]
431+25:39 glyph (
432+25:40 tight name source
433+25:47 name x
434+25:48 tight glyph )
435+26:1 NEWLINE
436+26:1 glyph ++
437+26:4 name bare
438+26:9 name proj
439+27:1 NEWLINE
440+27:1 glyph ++
441+27:4 name alias
442+27:10 name proj
443+28:1 NEWLINE
444+28:1 glyph ++
445+28:4 name alias-use
446+28:14 glyph ^-
447+28:17 glyph [
448+28:18 tight name a
449+28:19 tight glyph =
450+28:20 tight aura @t
451+28:23 name b
452+28:24 tight glyph =
453+28:25 tight aura @p
454+28:27 tight glyph ]
455+28:29 glyph (
456+28:30 tight name alias
457+28:36 glyph [
458+28:37 tight name a
459+28:38 tight glyph =
460+28:39 tight str "hi"
461+28:44 name b
462+28:45 tight glyph =
463+28:46 tight lit ~zod
464+28:51 name c
465+28:52 tight glyph =
466+28:53 tight lit %.y
467+28:56 tight glyph ]
468+28:57 tight glyph )
469+29:1 NEWLINE
470+29:1 glyph ++
471+29:4 name two-arguments
472+29:18 glyph ^-
473+29:21 glyph [
474+29:22 tight name a
475+29:23 tight glyph =
476+29:24 tight aura @t
477+29:27 name b
478+29:28 tight glyph =
479+29:29 tight aura @p
480+29:31 tight glyph ]
481+29:33 glyph (
482+29:34 tight name proj
483+29:39 glyph [
484+29:40 tight name a
485+29:41 tight glyph =
486+29:42 tight str "hi"
487+29:47 name b
488+29:48 tight glyph =
489+29:49 tight lit ~zod
490+29:54 name c
491+29:55 tight glyph =
492+29:56 tight lit %.y
493+29:59 tight glyph ]
494+29:61 glyph [
495+29:62 tight name a
496+29:63 tight glyph =
497+29:64 tight str "x"
498+29:68 name b
499+29:69 tight glyph =
500+29:70 tight lit ~zod
501+29:75 name c
502+29:76 tight glyph =
503+29:77 tight lit %.y
504+29:80 tight glyph ]
505+29:81 tight glyph )
506+30:1 NEWLINE
507+30:1 glyph ++
508+30:4 name one-field
509+30:14 glyph ^-
510+30:17 glyph [
511+30:18 tight name a
512+30:19 tight glyph =
513+30:20 tight aura @t
514+30:22 tight glyph ]
515+30:24 glyph (
516+30:25 tight name proj
517+30:30 glyph [
518+30:31 tight name a
519+30:32 tight glyph =
520+30:33 tight str "hi"
521+30:38 name b
522+30:39 tight glyph =
523+30:40 tight lit ~zod
524+30:45 name c
525+30:46 tight glyph =
526+30:47 tight lit %.y
527+30:50 tight glyph ]
528+30:51 tight glyph )
529+31:1 NEWLINE
530+31:1 glyph ++
531+31:4 name exact-record
532+31:17 glyph ^-
533+31:20 glyph [
534+31:21 tight name a
535+31:22 tight glyph =
536+31:23 tight aura @t
537+31:26 name b
538+31:27 tight glyph =
539+31:28 tight aura @p
540+31:30 tight glyph ]
541+31:32 glyph (
542+31:33 tight name proj
543+31:38 glyph [
544+31:39 tight name a
545+31:40 tight glyph =
546+31:41 tight str "hi"
547+31:46 name b
548+31:47 tight glyph =
549+31:48 tight lit ~zod
550+31:52 tight glyph ]
551+31:53 tight glyph )
552+32:1 NEWLINE
553+32:1 glyph ++
554+32:4 name positional-generic
555+32:23 glyph |=
556+32:26 glyph [
557+32:27 tight name a
558+32:28 tight glyph =
559+32:29 tight aura @t
560+32:32 name b
561+32:33 tight glyph =
562+32:34 tight tvar B
563+32:35 tight glyph ]
564+32:37 name a
565+33:1 NEWLINE
566+33:1 glyph ++
567+33:4 name positional-generic-call
568+33:28 glyph (
569+33:29 tight name positional-generic
570+33:48 str "hi"
571+33:53 lit ~zod
572+33:58 lit %.y
573+33:61 tight glyph )
574+34:1 NEWLINE
575+34:1 glyph ++
576+34:4 name subsequence
577+34:16 glyph ^-
578+34:19 glyph [
579+34:20 tight name a
580+34:21 tight glyph =
581+34:22 tight aura @t
582+34:25 name c
583+34:26 tight glyph =
584+34:27 tight glyph ?
585+34:28 tight glyph ]
586+34:30 glyph (
587+34:31 tight name proj
588+34:36 glyph [
589+34:37 tight name a
590+34:38 tight glyph =
591+34:39 tight str "hi"
592+34:44 name b
593+34:45 tight glyph =
594+34:46 tight lit ~zod
595+34:51 name c
596+34:52 tight glyph =
597+34:53 tight lit %.y
598+34:56 tight glyph ]
599+34:57 tight glyph )
600+35:1 NEWLINE
601+35:1 glyph ++
602+35:4 name reversed
603+35:13 glyph ^-
604+35:16 glyph [
605+35:17 tight name b
606+35:18 tight glyph =
607+35:19 tight aura @p
608+35:22 name a
609+35:23 tight glyph =
610+35:24 tight aura @t
611+35:26 tight glyph ]
612+35:28 glyph (
613+35:29 tight name proj
614+35:34 glyph [
615+35:35 tight name a
616+35:36 tight glyph =
617+35:37 tight str "hi"
618+35:42 name b
619+35:43 tight glyph =
620+35:44 tight lit ~zod
621+35:49 name c
622+35:50 tight glyph =
623+35:51 tight lit %.y
624+35:54 tight glyph ]
625+35:55 tight glyph )
626+35:56 NEWLINE
tests/golden/types-proj-explicit-context/tree.txtnew file+287
@@ -0,0 +1,287 @@
1+(module
2+ (value 3:1 choose
3+ (gate 3:11
4+ (face 3:14 x
5+ (cell 3:16
6+ (face 3:17 a (aura 3:19 @t))
7+ (face 3:22 b (aura 3:24 @p))))
8+ (wing 3:28 a.x)))
9+ (value 4:1 source
10+ (gate 4:11
11+ (face 4:14 x (aura 4:16 @t))
12+ (tuple 4:19
13+ (face 4:20 a (wing 4:22 x))
14+ (face 4:24 b (lit 4:26 ~zod))
15+ (face 4:31 c (lit 4:33 %.y)))))
16+ (value 5:1 trace-extra
17+ (gate 5:16
18+ (face 5:19 x (aura 5:21 @t))
19+ (body 6:3
20+ (trace 6:3
21+ (str 6:6 "extra")
22+ (body 7:5 (wing 7:5 x))))))
23+ (value 8:1 direct
24+ (cast 8:11
25+ (cell 8:14
26+ (face 8:15 a (aura 8:17 @t))
27+ (face 8:20 b (aura 8:22 @p)))
28+ (group 8:26
29+ (call 8:27
30+ (wing 8:27 proj)
31+ (tuple 8:32
32+ (face 8:33 a (str 8:35 "hi"))
33+ (face 8:40 b (lit 8:42 ~zod))
34+ (face 8:47 c (lit 8:49 %.y)))))))
35+ (value 9:1 from-call
36+ (cast 9:14
37+ (cell 9:17
38+ (face 9:18 a (aura 9:20 @t))
39+ (face 9:23 b (aura 9:25 @p)))
40+ (group 9:29
41+ (call 9:30
42+ (wing 9:30 proj)
43+ (group 9:35
44+ (call 9:36 (wing 9:36 source) (str 9:43 "hi")))))))
45+ (value 10:1 into-call
46+ (group 10:14
47+ (call 10:15
48+ (wing 10:15 choose)
49+ (group 10:22
50+ (call 10:23
51+ (wing 10:23 proj)
52+ (tuple 10:28
53+ (face 10:29 a (str 10:31 "hi"))
54+ (face 10:36 b (lit 10:38 ~zod))
55+ (face 10:43 c (lit 10:45 %.y))))))))
56+ (value 11:1 nested
57+ (cast 11:11
58+ (cell 11:14
59+ (face 11:15 result
60+ (cell 11:22
61+ (face 11:23 a (aura 11:25 @t))
62+ (face 11:28 b (aura 11:30 @p))))
63+ (face 11:34 done (flag 11:39)))
64+ (tuple 11:42
65+ (face 11:43 result
66+ (group 11:50
67+ (call 11:51
68+ (wing 11:51 proj)
69+ (tuple 11:56
70+ (face 11:57 a (str 11:59 "hi"))
71+ (face 11:64 b (lit 11:66 ~zod))
72+ (face 11:71 c (lit 11:73 %.y))))))
73+ (face 11:79 done (lit 11:84 %.y)))))
74+ (value 12:1 generic
75+ (gate 12:12
76+ (face 12:15 x (tvar 12:17 B))
77+ (cast 12:19
78+ (cell 12:22
79+ (face 12:23 a (aura 12:25 @t))
80+ (face 12:28 b (tvar 12:30 B)))
81+ (group 12:33
82+ (call 12:34
83+ (wing 12:34 proj)
84+ (tuple 12:39
85+ (face 12:40 a (str 12:42 "hi"))
86+ (face 12:47 b (wing 12:49 x))
87+ (face 12:51 c (lit 12:53 %.y))))))))
88+ (value 13:1 no-context
89+ (group 13:15
90+ (call 13:16
91+ (wing 13:16 proj)
92+ (tuple 13:21
93+ (face 13:22 a (str 13:24 "hi"))
94+ (face 13:29 b (lit 13:31 ~zod))
95+ (face 13:36 c (lit 13:38 %.y))))))
96+ (value 14:1 unknown-target
97+ (gate 14:19
98+ (bind 14:22 x)
99+ (group 14:24
100+ (call 14:25 (wing 14:25 proj) (wing 14:30 x)))))
101+ (value 15:1 missing
102+ (cast 15:12
103+ (cell 15:15
104+ (face 15:16 a (aura 15:18 @t))
105+ (face 15:21 b (aura 15:23 @p)))
106+ (group 15:27
107+ (call 15:28
108+ (wing 15:28 proj)
109+ (tuple 15:33
110+ (face 15:34 a (str 15:36 "hi"))
111+ (face 15:41 c (lit 15:43 %.y))
112+ (face 15:47 d (lit 15:49 ~zod)))))))
113+ (value 16:1 incompatible
114+ (cast 16:17
115+ (cell 16:20
116+ (face 16:21 a (aura 16:23 @t))
117+ (face 16:26 b (aura 16:28 @p)))
118+ (group 16:32
119+ (call 16:33
120+ (wing 16:33 proj)
121+ (tuple 16:38
122+ (face 16:39 a (str 16:41 "hi"))
123+ (face 16:46 b (str 16:48 "wrong"))
124+ (face 16:56 c (lit 16:58 %.y)))))))
125+ (value 17:1 trace-extra-field
126+ (cast 17:22
127+ (cell 17:25
128+ (face 17:26 a (aura 17:28 @t))
129+ (face 17:31 b (aura 17:33 @p)))
130+ (group 17:37
131+ (call 17:38
132+ (wing 17:38 proj)
133+ (tuple 17:43
134+ (face 17:44 a (str 17:46 "hi"))
135+ (face 17:51 b (lit 17:53 ~zod))
136+ (face 17:58 c
137+ (group 17:60
138+ (call 17:61 (wing 17:61 trace-extra) (str 17:73 "once")))))))))
139+ (value 18:1 pending-tag
140+ (cast 18:16
141+ (cell 18:19
142+ (face 18:20 a (aura 18:22 @t))
143+ (face 18:25 b (aura 18:27 @p)))
144+ (group 18:31
145+ (call 18:32
146+ (wing 18:32 proj)
147+ (tuple 18:37
148+ (face 18:38 a (str 18:40 "hi"))
149+ (face 18:45 b (lit 18:47 ~zod))
150+ (face 18:52 c (lit 18:54 %orphan)))))))
151+ (value 19:1 pending-null
152+ (cast 19:17
153+ (cell 19:20
154+ (face 19:21 a (aura 19:23 @t))
155+ (face 19:26 b (aura 19:28 @p)))
156+ (group 19:32
157+ (call 19:33
158+ (wing 19:33 proj)
159+ (tuple 19:38
160+ (face 19:39 a (str 19:41 "hi"))
161+ (face 19:46 b (lit 19:48 ~zod))
162+ (face 19:53 c (lit 19:55 ~)))))))
163+ (value 20:1 positional
164+ (cast 20:15
165+ (cell 20:18
166+ (face 20:19 a (aura 20:21 @t))
167+ (face 20:24 b (aura 20:26 @p)))
168+ (group 20:30
169+ (call 20:31 (wing 20:31 proj) (str 20:36 "hi") (lit 20:41 ~zod) (lit 20:46 %.y)))))
170+ (value 21:1 not-record
171+ (cast 21:15
172+ (cell 21:18
173+ (face 21:19 a (aura 21:21 @t))
174+ (face 21:24 b (aura 21:26 @p)))
175+ (group 21:30
176+ (call 21:31 (wing 21:31 proj) (str 21:36 "hi")))))
177+ (value 23:1 bare-cast
178+ (cast 23:14
179+ (cell 23:17
180+ (face 23:18 a (aura 23:20 @t))
181+ (face 23:23 b (aura 23:25 @p)))
182+ (tuple 23:29
183+ (face 23:30 a (str 23:32 "hi"))
184+ (face 23:37 b (lit 23:39 ~zod))
185+ (face 23:44 c (lit 23:46 %.y)))))
186+ (value 24:1 bare-call
187+ (group 24:14
188+ (call 24:15
189+ (wing 24:15 choose)
190+ (tuple 24:22
191+ (face 24:23 a (str 24:25 "hi"))
192+ (face 24:30 b (lit 24:32 ~zod))
193+ (face 24:37 c (lit 24:39 %.y))))))
194+ (value 25:1 bare-result
195+ (gate 25:16
196+ (face 25:19 x (aura 25:21 @t))
197+ (cast 25:24
198+ (cell 25:27
199+ (face 25:28 a (aura 25:30 @t))
200+ (face 25:33 b (aura 25:35 @p)))
201+ (group 25:39
202+ (call 25:40 (wing 25:40 source) (wing 25:47 x))))))
203+ (value 26:1 bare (wing 26:9 proj))
204+ (value 27:1 alias (wing 27:10 proj))
205+ (value 28:1 alias-use
206+ (cast 28:14
207+ (cell 28:17
208+ (face 28:18 a (aura 28:20 @t))
209+ (face 28:23 b (aura 28:25 @p)))
210+ (group 28:29
211+ (call 28:30
212+ (wing 28:30 alias)
213+ (tuple 28:36
214+ (face 28:37 a (str 28:39 "hi"))
215+ (face 28:44 b (lit 28:46 ~zod))
216+ (face 28:51 c (lit 28:53 %.y)))))))
217+ (value 29:1 two-arguments
218+ (cast 29:18
219+ (cell 29:21
220+ (face 29:22 a (aura 29:24 @t))
221+ (face 29:27 b (aura 29:29 @p)))
222+ (group 29:33
223+ (call 29:34
224+ (wing 29:34 proj)
225+ (tuple 29:39
226+ (face 29:40 a (str 29:42 "hi"))
227+ (face 29:47 b (lit 29:49 ~zod))
228+ (face 29:54 c (lit 29:56 %.y)))
229+ (tuple 29:61
230+ (face 29:62 a (str 29:64 "x"))
231+ (face 29:68 b (lit 29:70 ~zod))
232+ (face 29:75 c (lit 29:77 %.y)))))))
233+ (value 30:1 one-field
234+ (cast 30:14
235+ (cell 30:17
236+ (face 30:18 a (aura 30:20 @t)))
237+ (group 30:24
238+ (call 30:25
239+ (wing 30:25 proj)
240+ (tuple 30:30
241+ (face 30:31 a (str 30:33 "hi"))
242+ (face 30:38 b (lit 30:40 ~zod))
243+ (face 30:45 c (lit 30:47 %.y)))))))
244+ (value 31:1 exact-record
245+ (cast 31:17
246+ (cell 31:20
247+ (face 31:21 a (aura 31:23 @t))
248+ (face 31:26 b (aura 31:28 @p)))
249+ (group 31:32
250+ (call 31:33
251+ (wing 31:33 proj)
252+ (tuple 31:38
253+ (face 31:39 a (str 31:41 "hi"))
254+ (face 31:46 b (lit 31:48 ~zod)))))))
255+ (value 32:1 positional-generic
256+ (gate 32:23
257+ (cell 32:26
258+ (face 32:27 a (aura 32:29 @t))
259+ (face 32:32 b (tvar 32:34 B)))
260+ (wing 32:37 a)))
261+ (value 33:1 positional-generic-call
262+ (group 33:28
263+ (call 33:29 (wing 33:29 positional-generic) (str 33:48 "hi") (lit 33:53 ~zod) (lit 33:58 %.y))))
264+ (value 34:1 subsequence
265+ (cast 34:16
266+ (cell 34:19
267+ (face 34:20 a (aura 34:22 @t))
268+ (face 34:25 c (flag 34:27)))
269+ (group 34:30
270+ (call 34:31
271+ (wing 34:31 proj)
272+ (tuple 34:36
273+ (face 34:37 a (str 34:39 "hi"))
274+ (face 34:44 b (lit 34:46 ~zod))
275+ (face 34:51 c (lit 34:53 %.y)))))))
276+ (value 35:1 reversed
277+ (cast 35:13
278+ (cell 35:16
279+ (face 35:17 b (aura 35:19 @p))
280+ (face 35:22 a (aura 35:24 @t)))
281+ (group 35:28
282+ (call 35:29
283+ (wing 35:29 proj)
284+ (tuple 35:34
285+ (face 35:35 a (str 35:37 "hi"))
286+ (face 35:42 b (lit 35:44 ~zod))
287+ (face 35:49 c (lit 35:51 %.y))))))))
tests/golden/types-proj-explicit-context/types.txtnew file+31
@@ -0,0 +1,31 @@
1+partial inference; module not checked
2+++ choose: $-([a=@t b=@p] @t)
3+++ source: $-(@t [a=@t [b=@p c=?]])
4+++ trace-extra: $-(@t @t)
5+++ direct: [a=@t b=@p]
6+++ from-call: [a=@t b=@p]
7+++ into-call: @t
8+++ nested: [result=[a=@t b=@p] done=?]
9+++ generic: $-(A [a=@t b=A])
10+++ no-context: proj needs an expected record type
11+++ unknown-target: proj needs an expected record type
12+++ missing: proj constraint needs unsupported inference
13+++ incompatible: proj constraint needs unsupported inference
14+++ trace-extra-field: [a=@t b=@p]
15+++ pending-tag: tag needs context in partial inference
16+++ pending-null: `~` needs context in partial inference
17+++ positional: name is not available to partial inference
18+++ not-record: proj needs a known record containing its expected fields
19+++ bare-cast: record width constraint needs unsupported inference
20+++ bare-call: record width constraint needs unsupported inference
21+++ bare-result: record width constraint needs unsupported inference
22+++ bare: name is not available to partial inference
23+++ alias: name is not available to partial inference
24+++ alias-use: name is not available to partial inference
25+++ two-arguments: name is not available to partial inference
26+++ one-field: [a=@t]
27+++ exact-record: [a=@t b=@p]
28+++ positional-generic: $-([a=@t b=A] @t)
29+++ positional-generic-call: @t
30+++ subsequence: [a=@t c=?]
31+++ reversed: proj constraint needs unsupported inference
tests/golden/types-proj-nested-no-implicit/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A wider record at each nested call site must fail closed; an ambiguous generic tail may report unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-nested-no-implicit/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-nested-no-implicit/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ sink-unit |= v=(unit [a=@t b=B]) "ok"
2+++ unit-bad (sink-unit `[a="x" b=~zod c=%.y])
3+++ sink-list |= v=(list [a=@t b=B]) "ok"
4+++ list-bad (sink-list ~[[a="x" b=~zod c=%.y]])
5+++ sink-nested |= v=[one=[a=@t b=B] other=@ud] "ok"
6+++ nested-bad (sink-nested [one=[a="x" b=~zod c=%.y] other=0])
tests/golden/types-proj-nested-no-implicit/tokens.txtnew file+119
@@ -0,0 +1,119 @@
1+1:1 glyph ++
2+1:4 name sink-unit
3+1:14 glyph |=
4+1:17 name v
5+1:18 tight glyph =
6+1:19 tight glyph (
7+1:20 tight name unit
8+1:25 glyph [
9+1:26 tight name a
10+1:27 tight glyph =
11+1:28 tight aura @t
12+1:31 name b
13+1:32 tight glyph =
14+1:33 tight tvar B
15+1:34 tight glyph ]
16+1:35 tight glyph )
17+1:37 str "ok"
18+2:1 NEWLINE
19+2:1 glyph ++
20+2:4 name unit-bad
21+2:13 glyph (
22+2:14 tight name sink-unit
23+2:24 glyph `
24+2:25 tight glyph [
25+2:26 tight name a
26+2:27 tight glyph =
27+2:28 tight str "x"
28+2:32 name b
29+2:33 tight glyph =
30+2:34 tight lit ~zod
31+2:39 name c
32+2:40 tight glyph =
33+2:41 tight lit %.y
34+2:44 tight glyph ]
35+2:45 tight glyph )
36+3:1 NEWLINE
37+3:1 glyph ++
38+3:4 name sink-list
39+3:14 glyph |=
40+3:17 name v
41+3:18 tight glyph =
42+3:19 tight glyph (
43+3:20 tight name list
44+3:25 glyph [
45+3:26 tight name a
46+3:27 tight glyph =
47+3:28 tight aura @t
48+3:31 name b
49+3:32 tight glyph =
50+3:33 tight tvar B
51+3:34 tight glyph ]
52+3:35 tight glyph )
53+3:37 str "ok"
54+4:1 NEWLINE
55+4:1 glyph ++
56+4:4 name list-bad
57+4:13 glyph (
58+4:14 tight name sink-list
59+4:24 glyph ~[
60+4:26 tight glyph [
61+4:27 tight name a
62+4:28 tight glyph =
63+4:29 tight str "x"
64+4:33 name b
65+4:34 tight glyph =
66+4:35 tight lit ~zod
67+4:40 name c
68+4:41 tight glyph =
69+4:42 tight lit %.y
70+4:45 tight glyph ]
71+4:46 tight glyph ]
72+4:47 tight glyph )
73+5:1 NEWLINE
74+5:1 glyph ++
75+5:4 name sink-nested
76+5:16 glyph |=
77+5:19 name v
78+5:20 tight glyph =
79+5:21 tight glyph [
80+5:22 tight name one
81+5:25 tight glyph =
82+5:26 tight glyph [
83+5:27 tight name a
84+5:28 tight glyph =
85+5:29 tight aura @t
86+5:32 name b
87+5:33 tight glyph =
88+5:34 tight tvar B
89+5:35 tight glyph ]
90+5:37 name other
91+5:42 tight glyph =
92+5:43 tight aura @ud
93+5:46 tight glyph ]
94+5:48 str "ok"
95+6:1 NEWLINE
96+6:1 glyph ++
97+6:4 name nested-bad
98+6:15 glyph (
99+6:16 tight name sink-nested
100+6:28 glyph [
101+6:29 tight name one
102+6:32 tight glyph =
103+6:33 tight glyph [
104+6:34 tight name a
105+6:35 tight glyph =
106+6:36 tight str "x"
107+6:40 name b
108+6:41 tight glyph =
109+6:42 tight lit ~zod
110+6:47 name c
111+6:48 tight glyph =
112+6:49 tight lit %.y
113+6:52 tight glyph ]
114+6:54 name other
115+6:59 tight glyph =
116+6:60 tight lit 0
117+6:61 tight glyph ]
118+6:62 tight glyph )
119+6:63 NEWLINE
tests/golden/types-proj-nested-no-implicit/tree.txtnew file+56
@@ -0,0 +1,56 @@
1+(module
2+ (value 1:1 sink-unit
3+ (gate 1:14
4+ (face 1:17 v
5+ (apply 1:19 unit
6+ (cell 1:25
7+ (face 1:26 a (aura 1:28 @t))
8+ (face 1:31 b (tvar 1:33 B)))))
9+ (str 1:37 "ok")))
10+ (value 2:1 unit-bad
11+ (group 2:13
12+ (call 2:14
13+ (wing 2:14 sink-unit)
14+ (unit 2:24
15+ (tuple 2:25
16+ (face 2:26 a (str 2:28 "x"))
17+ (face 2:32 b (lit 2:34 ~zod))
18+ (face 2:39 c (lit 2:41 %.y)))))))
19+ (value 3:1 sink-list
20+ (gate 3:14
21+ (face 3:17 v
22+ (apply 3:19 list
23+ (cell 3:25
24+ (face 3:26 a (aura 3:28 @t))
25+ (face 3:31 b (tvar 3:33 B)))))
26+ (str 3:37 "ok")))
27+ (value 4:1 list-bad
28+ (group 4:13
29+ (call 4:14
30+ (wing 4:14 sink-list)
31+ (list 4:24
32+ (tuple 4:26
33+ (face 4:27 a (str 4:29 "x"))
34+ (face 4:33 b (lit 4:35 ~zod))
35+ (face 4:40 c (lit 4:42 %.y)))))))
36+ (value 5:1 sink-nested
37+ (gate 5:16
38+ (face 5:19 v
39+ (cell 5:21
40+ (face 5:22 one
41+ (cell 5:26
42+ (face 5:27 a (aura 5:29 @t))
43+ (face 5:32 b (tvar 5:34 B))))
44+ (face 5:37 other (aura 5:43 @ud))))
45+ (str 5:48 "ok")))
46+ (value 6:1 nested-bad
47+ (group 6:15
48+ (call 6:16
49+ (wing 6:16 sink-nested)
50+ (tuple 6:28
51+ (face 6:29 one
52+ (tuple 6:33
53+ (face 6:34 a (str 6:36 "x"))
54+ (face 6:40 b (lit 6:42 ~zod))
55+ (face 6:47 c (lit 6:49 %.y))))
56+ (face 6:54 other (lit 6:60 0)))))))
tests/golden/types-proj-nested-no-implicit/types.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2+++ sink-unit: $-((unit [a=@t b=A]) @t)
3+++ unit-bad: unit payload constraint is not supported by partial inference
4+++ sink-list: $-((list [a=@t b=A]) @t)
5+++ list-bad: list item constraint is not supported by partial inference
6+++ sink-nested: $-([one=[a=@t b=A] other=@ud] @t)
7+++ nested-bad: call constraint is not supported by partial inference
tests/golden/types-proj-reserved-imported-definition/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A reachable imported module cannot define proj, even if the definition is unused.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-imported-definition/module-trees.txtnew file+10
@@ -0,0 +1,10 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 proj
4+ (gate 1:9
5+ (face 1:12 x (aura 1:14 @t))
6+ (wing 1:17 x)))
7+ (value 2:1 identity
8+ (gate 2:13
9+ (face 2:16 x (aura 2:18 @t))
10+ (wing 2:21 x))))
tests/golden/types-proj-reserved-imported-definition/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-proj-reserved-imported-definition/modules/ui/lib.jibbnew file+2
@@ -0,0 +1,2 @@
1+++ proj |= x=@t x
2+++ identity |= x=@t x
tests/golden/types-proj-reserved-imported-definition/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ okay "ok"
tests/golden/types-proj-reserved-imported-definition/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:4 name lib
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name okay
10+2:9 str "ok"
11+2:13 NEWLINE
tests/golden/types-proj-reserved-imported-definition/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-imported-definition/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names: /ui/lib/jibb
tests/golden/types-proj-reserved-jibb-import/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A Jibb import face named proj is rejected.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-jibb-import/module-trees.txtnew file+6
@@ -0,0 +1,6 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate 1:13
5+ (face 1:16 x (aura 1:18 @t))
6+ (wing 1:21 x))))
tests/golden/types-proj-reserved-jibb-import/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-proj-reserved-jibb-import/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |= x=@t x
tests/golden/types-proj-reserved-jibb-import/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= proj /ui/lib
2+++ okay "ok"
tests/golden/types-proj-reserved-jibb-import/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:4 name proj
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name okay
10+2:9 str "ok"
11+2:13 NEWLINE
tests/golden/types-proj-reserved-jibb-import/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 proj /ui/lib)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-jibb-import/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-local-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A local mold cannot use proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-local-mold/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-local-mold/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ okay
2+ +$ proj @t
3+ "ok"
tests/golden/types-proj-reserved-local-mold/tokens.txtnew file+10
@@ -0,0 +1,10 @@
1+1:1 glyph ++
2+1:4 name okay
3+2:3 INDENT
4+2:3 glyph +$
5+2:6 name proj
6+2:11 aura @t
7+3:3 NEWLINE
8+3:3 str "ok"
9+3:7 DEDENT
10+3:7 NEWLINE
tests/golden/types-proj-reserved-local-mold/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (value 1:1 okay
3+ (body 2:3
4+ (mold 2:3 proj (aura 2:11 @t))
5+ (str 3:3 "ok"))))
tests/golden/types-proj-reserved-local-mold/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-local/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An otherwise valid local value cannot use proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-local/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-local/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ okay
2+ ++ proj |= x=@t x
3+ "ok"
tests/golden/types-proj-reserved-local/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph ++
2+1:4 name okay
3+2:3 INDENT
4+2:3 glyph ++
5+2:6 name proj
6+2:11 glyph |=
7+2:14 name x
8+2:15 tight glyph =
9+2:16 tight aura @t
10+2:19 name x
11+3:3 NEWLINE
12+3:3 str "ok"
13+3:7 DEDENT
14+3:7 NEWLINE
tests/golden/types-proj-reserved-local/tree.txtnew file+8
@@ -0,0 +1,8 @@
1+(module
2+ (value 1:1 okay
3+ (body 2:3
4+ (value 2:3 proj
5+ (gate 2:11
6+ (face 2:14 x (aura 2:16 @t))
7+ (wing 2:19 x)))
8+ (str 3:3 "ok"))))
tests/golden/types-proj-reserved-local/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-mark-import/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A Hoon mark import face named proj is rejected.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-mark-import/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-mark-import/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %proj
2+++ okay "ok"
tests/golden/types-proj-reserved-mark-import/tokens.txtnew file+7
@@ -0,0 +1,7 @@
1+1:1 glyph /%
2+1:4 lit %proj
3+2:1 NEWLINE
4+2:1 glyph ++
5+2:4 name okay
6+2:9 str "ok"
7+2:13 NEWLINE
tests/golden/types-proj-reserved-mark-import/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mark 1:1 %proj)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-mark-import/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A top-level mold named proj is rejected even when unused.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-mold/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ proj @t
2+++ okay "ok"
tests/golden/types-proj-reserved-mold/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph +$
2+1:4 name proj
3+1:9 aura @t
4+2:1 NEWLINE
5+2:1 glyph ++
6+2:4 name okay
7+2:9 str "ok"
8+2:13 NEWLINE
tests/golden/types-proj-reserved-mold/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mold 1:1 proj (aura 1:9 @t))
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-mold/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-pattern/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A branch pattern cannot bind proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-pattern/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-pattern/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ okay |= x=[@t @p]
2+ ?- x
3+ [proj other] proj
tests/golden/types-proj-reserved-pattern/tokens.txtnew file+21
@@ -0,0 +1,21 @@
1+1:1 glyph ++
2+1:4 name okay
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight glyph [
7+1:15 tight aura @t
8+1:18 aura @p
9+1:20 tight glyph ]
10+2:3 INDENT
11+2:3 glyph ?-
12+2:6 name x
13+3:5 INDENT
14+3:5 glyph [
15+3:6 tight name proj
16+3:11 name other
17+3:16 tight glyph ]
18+3:18 name proj
19+3:22 DEDENT
20+3:22 DEDENT
21+3:22 NEWLINE
tests/golden/types-proj-reserved-pattern/tree.txtnew file+11
@@ -0,0 +1,11 @@
1+(module
2+ (value 1:1 okay
3+ (gate 1:9
4+ (face 1:12 x
5+ (cell 1:14 (aura 1:15 @t) (aura 1:18 @p)))
6+ (body 2:3
7+ (branch 2:3
8+ (wing 2:6 x)
9+ (arm 3:5
10+ (cell 3:5 (bind 3:6 proj) (bind 3:11 other))
11+ (wing 3:18 proj)))))))
tests/golden/types-proj-reserved-pattern/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-positive/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A normal projection, a distinct binding, a field label and a term tag with this spelling.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-positive/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-positive/source.jibbnew file+8
@@ -0,0 +1,8 @@
1++$ action
2+ %proj
3+ %other
4+++ projection |= x=@t x
5+++ label |= x=[proj=@t other=@p] proj.x
6+++ tag ^- action %proj
7+++ use ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])
8+++ similar (projection "okay")
tests/golden/types-proj-reserved-positive/tokens.txtnew file+70
@@ -0,0 +1,70 @@
1+1:1 glyph +$
2+1:4 name action
3+2:3 INDENT
4+2:3 lit %proj
5+3:3 NEWLINE
6+3:3 lit %other
7+4:1 DEDENT
8+4:1 NEWLINE
9+4:1 glyph ++
10+4:4 name projection
11+4:15 glyph |=
12+4:18 name x
13+4:19 tight glyph =
14+4:20 tight aura @t
15+4:23 name x
16+5:1 NEWLINE
17+5:1 glyph ++
18+5:4 name label
19+5:10 glyph |=
20+5:13 name x
21+5:14 tight glyph =
22+5:15 tight glyph [
23+5:16 tight name proj
24+5:20 tight glyph =
25+5:21 tight aura @t
26+5:24 name other
27+5:29 tight glyph =
28+5:30 tight aura @p
29+5:32 tight glyph ]
30+5:34 wing proj.x
31+6:1 NEWLINE
32+6:1 glyph ++
33+6:4 name tag
34+6:8 glyph ^-
35+6:11 name action
36+6:18 lit %proj
37+7:1 NEWLINE
38+7:1 glyph ++
39+7:4 name use
40+7:8 glyph ^-
41+7:11 glyph [
42+7:12 tight name a
43+7:13 tight glyph =
44+7:14 tight aura @t
45+7:17 name b
46+7:18 tight glyph =
47+7:19 tight aura @p
48+7:21 tight glyph ]
49+7:23 glyph (
50+7:24 tight name proj
51+7:29 glyph [
52+7:30 tight name a
53+7:31 tight glyph =
54+7:32 tight str "hi"
55+7:37 name b
56+7:38 tight glyph =
57+7:39 tight lit ~zod
58+7:44 name c
59+7:45 tight glyph =
60+7:46 tight lit %.y
61+7:49 tight glyph ]
62+7:50 tight glyph )
63+8:1 NEWLINE
64+8:1 glyph ++
65+8:4 name similar
66+8:12 glyph (
67+8:13 tight name projection
68+8:24 str "okay"
69+8:30 tight glyph )
70+8:31 NEWLINE
tests/golden/types-proj-reserved-positive/tree.txtnew file+31
@@ -0,0 +1,31 @@
1+(module
2+ (mold 1:1 action
3+ (union 2:3 (const 2:3 %proj) (const 3:3 %other)))
4+ (value 4:1 projection
5+ (gate 4:15
6+ (face 4:18 x (aura 4:20 @t))
7+ (wing 4:23 x)))
8+ (value 5:1 label
9+ (gate 5:10
10+ (face 5:13 x
11+ (cell 5:15
12+ (face 5:16 proj (aura 5:21 @t))
13+ (face 5:24 other (aura 5:30 @p))))
14+ (wing 5:34 proj.x)))
15+ (value 6:1 tag
16+ (cast 6:8 (ref 6:11 action) (lit 6:18 %proj)))
17+ (value 7:1 use
18+ (cast 7:8
19+ (cell 7:11
20+ (face 7:12 a (aura 7:14 @t))
21+ (face 7:17 b (aura 7:19 @p)))
22+ (group 7:23
23+ (call 7:24
24+ (wing 7:24 proj)
25+ (tuple 7:29
26+ (face 7:30 a (str 7:32 "hi"))
27+ (face 7:37 b (lit 7:39 ~zod))
28+ (face 7:44 c (lit 7:46 %.y)))))))
29+ (value 8:1 similar
30+ (group 8:12
31+ (call 8:13 (wing 8:13 projection) (str 8:24 "okay")))))
tests/golden/types-proj-reserved-positive/types.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2++$ action: cases proven disjoint; mold not checked
3+++ projection: $-(@t @t)
4+++ label: $-([proj=@t other=@p] @t)
5+++ tag: action
6+++ use: [a=@t b=@p]
7+++ similar: @t
tests/golden/types-proj-reserved-sample/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A gate sample cannot bind proj.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-sample/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-sample/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ okay |= proj=@t proj
tests/golden/types-proj-reserved-sample/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph ++
2+1:4 name okay
3+1:9 glyph |=
4+1:12 name proj
5+1:16 tight glyph =
6+1:17 tight aura @t
7+1:20 name proj
8+1:24 NEWLINE
tests/golden/types-proj-reserved-sample/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (value 1:1 okay
3+ (gate 1:9
4+ (face 1:12 proj (aura 1:17 @t))
5+ (wing 1:20 proj))))
tests/golden/types-proj-reserved-sample/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-sur-import/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A Hoon sur import face named proj is rejected.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-sur-import/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-sur-import/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/- proj
2+++ okay "ok"
tests/golden/types-proj-reserved-sur-import/tokens.txtnew file+7
@@ -0,0 +1,7 @@
1+1:1 glyph /-
2+1:4 name proj
3+2:1 NEWLINE
4+2:1 glyph ++
5+2:4 name okay
6+2:9 str "ok"
7+2:13 NEWLINE
tests/golden/types-proj-reserved-sur-import/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (sur 1:1 proj)
3+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-sur-import/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-unused-pattern/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An unsupported unused definition cannot hide this reserved local name.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-unused-pattern/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-unused-pattern/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ outer |= n=@t
2+ ++ unused |= pair=[@t @p]
3+ ?- pair
4+ [proj other] (unknown %orphan)
5+ n
6+++ okay "ok"
tests/golden/types-proj-reserved-unused-pattern/tokens.txtnew file+38
@@ -0,0 +1,38 @@
1+1:1 glyph ++
2+1:4 name outer
3+1:10 glyph |=
4+1:13 name n
5+1:14 tight glyph =
6+1:15 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name unused
10+2:13 glyph |=
11+2:16 name pair
12+2:20 tight glyph =
13+2:21 tight glyph [
14+2:22 tight aura @t
15+2:25 aura @p
16+2:27 tight glyph ]
17+3:5 INDENT
18+3:5 glyph ?-
19+3:8 name pair
20+4:7 INDENT
21+4:7 glyph [
22+4:8 tight name proj
23+4:13 name other
24+4:18 tight glyph ]
25+4:20 glyph (
26+4:21 tight name unknown
27+4:29 lit %orphan
28+4:36 tight glyph )
29+5:3 DEDENT
30+5:3 DEDENT
31+5:3 NEWLINE
32+5:3 name n
33+6:1 DEDENT
34+6:1 NEWLINE
35+6:1 glyph ++
36+6:4 name okay
37+6:9 str "ok"
38+6:13 NEWLINE
tests/golden/types-proj-reserved-unused-pattern/tree.txtnew file+18
@@ -0,0 +1,18 @@
1+(module
2+ (value 1:1 outer
3+ (gate 1:10
4+ (face 1:13 n (aura 1:15 @t))
5+ (body 2:3
6+ (value 2:3 unused
7+ (gate 2:13
8+ (face 2:16 pair
9+ (cell 2:21 (aura 2:22 @t) (aura 2:25 @p)))
10+ (body 3:5
11+ (branch 3:5
12+ (wing 3:8 pair)
13+ (arm 4:7
14+ (cell 4:7 (bind 4:8 proj) (bind 4:13 other))
15+ (group 4:20
16+ (call 4:21 (wing 4:21 unknown) (lit 4:29 %orphan))))))))
17+ (wing 5:3 n))))
18+ (value 6:1 okay (str 6:9 "ok")))
tests/golden/types-proj-reserved-unused-pattern/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-unused-sample/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An unsupported unused definition cannot hide this reserved local name.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-unused-sample/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-unused-sample/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+++ outer |= n=@t
2+ ++ unused |= proj=@p (unknown %orphan)
3+ n
4+++ okay "ok"
tests/golden/types-proj-reserved-unused-sample/tokens.txtnew file+25
@@ -0,0 +1,25 @@
1+1:1 glyph ++
2+1:4 name outer
3+1:10 glyph |=
4+1:13 name n
5+1:14 tight glyph =
6+1:15 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name unused
10+2:13 glyph |=
11+2:16 name proj
12+2:20 tight glyph =
13+2:21 tight aura @p
14+2:24 glyph (
15+2:25 tight name unknown
16+2:33 lit %orphan
17+2:40 tight glyph )
18+3:3 NEWLINE
19+3:3 name n
20+4:1 DEDENT
21+4:1 NEWLINE
22+4:1 glyph ++
23+4:4 name okay
24+4:9 str "ok"
25+4:13 NEWLINE
tests/golden/types-proj-reserved-unused-sample/tree.txtnew file+12
@@ -0,0 +1,12 @@
1+(module
2+ (value 1:1 outer
3+ (gate 1:10
4+ (face 1:13 n (aura 1:15 @t))
5+ (body 2:3
6+ (value 2:3 unused
7+ (gate 2:13
8+ (face 2:16 proj (aura 2:21 @p))
9+ (group 2:24
10+ (call 2:25 (wing 2:25 unknown) (lit 2:33 %orphan)))))
11+ (wing 3:3 n))))
12+ (value 4:1 okay (str 4:9 "ok")))
tests/golden/types-proj-reserved-unused-sample/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-unused-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: An unsupported unused definition cannot hide this reserved local name.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-unused-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-reserved-unused-value/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ outer |= n=@t
2+ ++ unused
3+ ++ proj |= x=@t x
4+ (unknown %orphan)
5+ n
6+++ okay "ok"
tests/golden/types-proj-reserved-unused-value/tokens.txtnew file+31
@@ -0,0 +1,31 @@
1+1:1 glyph ++
2+1:4 name outer
3+1:10 glyph |=
4+1:13 name n
5+1:14 tight glyph =
6+1:15 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name unused
10+3:5 INDENT
11+3:5 glyph ++
12+3:8 name proj
13+3:13 glyph |=
14+3:16 name x
15+3:17 tight glyph =
16+3:18 tight aura @t
17+3:21 name x
18+4:5 NEWLINE
19+4:5 glyph (
20+4:6 tight name unknown
21+4:14 lit %orphan
22+4:21 tight glyph )
23+5:3 DEDENT
24+5:3 NEWLINE
25+5:3 name n
26+6:1 DEDENT
27+6:1 NEWLINE
28+6:1 glyph ++
29+6:4 name okay
30+6:9 str "ok"
31+6:13 NEWLINE
tests/golden/types-proj-reserved-unused-value/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (value 1:1 outer
3+ (gate 1:10
4+ (face 1:13 n (aura 1:15 @t))
5+ (body 2:3
6+ (value 2:3 unused
7+ (body 3:5
8+ (value 3:5 proj
9+ (gate 3:13
10+ (face 3:16 x (aura 3:18 @t))
11+ (wing 3:21 x)))
12+ (group 4:5
13+ (call 4:6 (wing 4:6 unknown) (lit 4:14 %orphan)))))
14+ (wing 5:3 n))))
15+ (value 6:1 okay (str 6:9 "ok")))
tests/golden/types-proj-reserved-unused-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-reserved-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: A top-level value named proj is rejected even when unused.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-reserved-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use source-backed prelude.
tests/golden/types-proj-reserved-value/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+++ proj |= x=@t x
2+++ okay "ok"
tests/golden/types-proj-reserved-value/tokens.txtnew file+12
@@ -0,0 +1,12 @@
1+1:1 glyph ++
2+1:4 name proj
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight aura @t
7+1:17 name x
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name okay
11+2:9 str "ok"
12+2:13 NEWLINE
tests/golden/types-proj-reserved-value/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (value 1:1 proj
3+ (gate 1:9
4+ (face 1:12 x (aura 1:14 @t))
5+ (wing 1:17 x)))
6+ (value 2:1 okay (str 2:9 "ok")))
tests/golden/types-proj-reserved-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/types-proj-single-duplicate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: proj cannot hide duplicate fields in its source.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-single-duplicate/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-single-duplicate/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ duplicate ^- [x=@t] (proj [x="hi" x="again" last=%.y])
tests/golden/types-proj-single-duplicate/tokens.txtnew file+23
@@ -0,0 +1,23 @@
1+1:1 glyph ++
2+1:4 name duplicate
3+1:14 glyph ^-
4+1:17 glyph [
5+1:18 tight name x
6+1:19 tight glyph =
7+1:20 tight aura @t
8+1:22 tight glyph ]
9+1:24 glyph (
10+1:25 tight name proj
11+1:30 glyph [
12+1:31 tight name x
13+1:32 tight glyph =
14+1:33 tight str "hi"
15+1:38 name x
16+1:39 tight glyph =
17+1:40 tight str "again"
18+1:48 name last
19+1:52 tight glyph =
20+1:53 tight lit %.y
21+1:56 tight glyph ]
22+1:57 tight glyph )
23+1:58 NEWLINE
tests/golden/types-proj-single-duplicate/tree.txtnew file+12
@@ -0,0 +1,12 @@
1+(module
2+ (value 1:1 duplicate
3+ (cast 1:14
4+ (cell 1:17
5+ (face 1:18 x (aura 1:20 @t)))
6+ (group 1:24
7+ (call 1:25
8+ (wing 1:25 proj)
9+ (tuple 1:30
10+ (face 1:31 x (str 1:33 "hi"))
11+ (face 1:38 x (str 1:40 "again"))
12+ (face 1:48 last (lit 1:53 %.y))))))))
tests/golden/types-proj-single-duplicate/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `x` is repeated
3+/tests/golden/types-proj-single-duplicate/source.jibb:1:31: first field
4+++ duplicate ^- [x=@t] (proj [x="hi" x="again" last=%.y])
5+ ^
6+/tests/golden/types-proj-single-duplicate/source.jibb:1:38: repeated field
7+++ duplicate ^- [x=@t] (proj [x="hi" x="again" last=%.y])
8+ ^
tests/golden/types-proj-single-field/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: Single-field results select first, middle or last source fields in casts and known calls; the source can be computed or generic. Missing and incompatible fields, unresolved targets and pending literals fail closed. An enclosing scalar field face cannot become the projection target, including in positional calls; a genuinely nested one-field record can.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-single-field/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-single-field/source.jibbnew file+25
@@ -0,0 +1,25 @@
1+++ sink |= r=[x=@t] x.r
2+++ first ^- [x=@t] (proj [x="hi" middle=~zod last=%.y])
3+++ middle ^- [x=@t] (proj [first=~zod x="hi" last=%.y])
4+++ last ^- [x=@t] (proj [first=~zod middle=%.y x="hi"])
5+++ call-context (sink (proj [x="hi" middle=~zod last=%.y]))
6+++ source |= v=@t [first=~zod x=v last=%.y]
7+++ computed ^- [x=@t] (proj (source "hi"))
8+++ exact ^- [x=@t] (proj [x="hi"])
9+++ generic |= v=A ^- [x=A] (proj [first="hi" x=v last=%.y])
10+++ generic-call (generic ~zod)
11+++ missing ^- [x=@t] (proj [first="hi" middle=~zod last=%.y])
12+++ mismatch ^- [x=@t] (proj [x=~zod middle="hi" last=%.y])
13+++ pending-tag ^- [x=@t] (proj [x="hi" middle=~zod last=%orphan])
14+++ pending-null ^- [x=@t] (proj [x="hi" middle=~zod last=~])
15+++ without-context (proj [x="hi" middle=~zod last=%.y])
16+++ direct-width ^- [x=@t] [x="hi" middle=~zod last=%.y]
17+:: The outer label x expects an atom, not a one-field record to be projected.
18+++ nested-scalar ^- [x=@t y=@p] [x=(proj [x="hi" middle=~zod last=%.y]) y=~zod]
19+++ nested-proj |= r=[x=@t y=@p] r
20+++ nested-call (nested-proj [x=(proj [x="hi" middle=~zod last=%.y]) y=~zod])
21+++ nested-record ^- [inner=[x=@t] y=@p] [inner=(proj [x="hi" middle=~zod last=%.y]) y=~zod]
22+++ scalar-positional |= [x=@t y=@p] x
23+++ scalar-positional-bad (scalar-positional (proj [x="hi" middle=~zod last=%.y]) ~zod)
24+++ record-positional |= [x=[x=@t] y=@p] x
25+++ record-positional-good (record-positional (proj [x="hi" middle=~zod last=%.y]) ~zod)
tests/golden/types-proj-single-field/tokens.txtnew file+499
@@ -0,0 +1,499 @@
1+1:1 glyph ++
2+1:4 name sink
3+1:9 glyph |=
4+1:12 name r
5+1:13 tight glyph =
6+1:14 tight glyph [
7+1:15 tight name x
8+1:16 tight glyph =
9+1:17 tight aura @t
10+1:19 tight glyph ]
11+1:21 wing x.r
12+2:1 NEWLINE
13+2:1 glyph ++
14+2:4 name first
15+2:10 glyph ^-
16+2:13 glyph [
17+2:14 tight name x
18+2:15 tight glyph =
19+2:16 tight aura @t
20+2:18 tight glyph ]
21+2:20 glyph (
22+2:21 tight name proj
23+2:26 glyph [
24+2:27 tight name x
25+2:28 tight glyph =
26+2:29 tight str "hi"
27+2:34 name middle
28+2:40 tight glyph =
29+2:41 tight lit ~zod
30+2:46 name last
31+2:50 tight glyph =
32+2:51 tight lit %.y
33+2:54 tight glyph ]
34+2:55 tight glyph )
35+3:1 NEWLINE
36+3:1 glyph ++
37+3:4 name middle
38+3:11 glyph ^-
39+3:14 glyph [
40+3:15 tight name x
41+3:16 tight glyph =
42+3:17 tight aura @t
43+3:19 tight glyph ]
44+3:21 glyph (
45+3:22 tight name proj
46+3:27 glyph [
47+3:28 tight name first
48+3:33 tight glyph =
49+3:34 tight lit ~zod
50+3:39 name x
51+3:40 tight glyph =
52+3:41 tight str "hi"
53+3:46 name last
54+3:50 tight glyph =
55+3:51 tight lit %.y
56+3:54 tight glyph ]
57+3:55 tight glyph )
58+4:1 NEWLINE
59+4:1 glyph ++
60+4:4 name last
61+4:9 glyph ^-
62+4:12 glyph [
63+4:13 tight name x
64+4:14 tight glyph =
65+4:15 tight aura @t
66+4:17 tight glyph ]
67+4:19 glyph (
68+4:20 tight name proj
69+4:25 glyph [
70+4:26 tight name first
71+4:31 tight glyph =
72+4:32 tight lit ~zod
73+4:37 name middle
74+4:43 tight glyph =
75+4:44 tight lit %.y
76+4:48 name x
77+4:49 tight glyph =
78+4:50 tight str "hi"
79+4:54 tight glyph ]
80+4:55 tight glyph )
81+5:1 NEWLINE
82+5:1 glyph ++
83+5:4 name call-context
84+5:17 glyph (
85+5:18 tight name sink
86+5:23 glyph (
87+5:24 tight name proj
88+5:29 glyph [
89+5:30 tight name x
90+5:31 tight glyph =
91+5:32 tight str "hi"
92+5:37 name middle
93+5:43 tight glyph =
94+5:44 tight lit ~zod
95+5:49 name last
96+5:53 tight glyph =
97+5:54 tight lit %.y
98+5:57 tight glyph ]
99+5:58 tight glyph )
100+5:59 tight glyph )
101+6:1 NEWLINE
102+6:1 glyph ++
103+6:4 name source
104+6:11 glyph |=
105+6:14 name v
106+6:15 tight glyph =
107+6:16 tight aura @t
108+6:19 glyph [
109+6:20 tight name first
110+6:25 tight glyph =
111+6:26 tight lit ~zod
112+6:31 name x
113+6:32 tight glyph =
114+6:33 tight name v
115+6:35 name last
116+6:39 tight glyph =
117+6:40 tight lit %.y
118+6:43 tight glyph ]
119+7:1 NEWLINE
120+7:1 glyph ++
121+7:4 name computed
122+7:13 glyph ^-
123+7:16 glyph [
124+7:17 tight name x
125+7:18 tight glyph =
126+7:19 tight aura @t
127+7:21 tight glyph ]
128+7:23 glyph (
129+7:24 tight name proj
130+7:29 glyph (
131+7:30 tight name source
132+7:37 str "hi"
133+7:41 tight glyph )
134+7:42 tight glyph )
135+8:1 NEWLINE
136+8:1 glyph ++
137+8:4 name exact
138+8:10 glyph ^-
139+8:13 glyph [
140+8:14 tight name x
141+8:15 tight glyph =
142+8:16 tight aura @t
143+8:18 tight glyph ]
144+8:20 glyph (
145+8:21 tight name proj
146+8:26 glyph [
147+8:27 tight name x
148+8:28 tight glyph =
149+8:29 tight str "hi"
150+8:33 tight glyph ]
151+8:34 tight glyph )
152+9:1 NEWLINE
153+9:1 glyph ++
154+9:4 name generic
155+9:12 glyph |=
156+9:15 name v
157+9:16 tight glyph =
158+9:17 tight tvar A
159+9:19 glyph ^-
160+9:22 glyph [
161+9:23 tight name x
162+9:24 tight glyph =
163+9:25 tight tvar A
164+9:26 tight glyph ]
165+9:28 glyph (
166+9:29 tight name proj
167+9:34 glyph [
168+9:35 tight name first
169+9:40 tight glyph =
170+9:41 tight str "hi"
171+9:46 name x
172+9:47 tight glyph =
173+9:48 tight name v
174+9:50 name last
175+9:54 tight glyph =
176+9:55 tight lit %.y
177+9:58 tight glyph ]
178+9:59 tight glyph )
179+10:1 NEWLINE
180+10:1 glyph ++
181+10:4 name generic-call
182+10:17 glyph (
183+10:18 tight name generic
184+10:26 lit ~zod
185+10:30 tight glyph )
186+11:1 NEWLINE
187+11:1 glyph ++
188+11:4 name missing
189+11:12 glyph ^-
190+11:15 glyph [
191+11:16 tight name x
192+11:17 tight glyph =
193+11:18 tight aura @t
194+11:20 tight glyph ]
195+11:22 glyph (
196+11:23 tight name proj
197+11:28 glyph [
198+11:29 tight name first
199+11:34 tight glyph =
200+11:35 tight str "hi"
201+11:40 name middle
202+11:46 tight glyph =
203+11:47 tight lit ~zod
204+11:52 name last
205+11:56 tight glyph =
206+11:57 tight lit %.y
207+11:60 tight glyph ]
208+11:61 tight glyph )
209+12:1 NEWLINE
210+12:1 glyph ++
211+12:4 name mismatch
212+12:13 glyph ^-
213+12:16 glyph [
214+12:17 tight name x
215+12:18 tight glyph =
216+12:19 tight aura @t
217+12:21 tight glyph ]
218+12:23 glyph (
219+12:24 tight name proj
220+12:29 glyph [
221+12:30 tight name x
222+12:31 tight glyph =
223+12:32 tight lit ~zod
224+12:37 name middle
225+12:43 tight glyph =
226+12:44 tight str "hi"
227+12:49 name last
228+12:53 tight glyph =
229+12:54 tight lit %.y
230+12:57 tight glyph ]
231+12:58 tight glyph )
232+13:1 NEWLINE
233+13:1 glyph ++
234+13:4 name pending-tag
235+13:16 glyph ^-
236+13:19 glyph [
237+13:20 tight name x
238+13:21 tight glyph =
239+13:22 tight aura @t
240+13:24 tight glyph ]
241+13:26 glyph (
242+13:27 tight name proj
243+13:32 glyph [
244+13:33 tight name x
245+13:34 tight glyph =
246+13:35 tight str "hi"
247+13:40 name middle
248+13:46 tight glyph =
249+13:47 tight lit ~zod
250+13:52 name last
251+13:56 tight glyph =
252+13:57 tight lit %orphan
253+13:64 tight glyph ]
254+13:65 tight glyph )
255+14:1 NEWLINE
256+14:1 glyph ++
257+14:4 name pending-null
258+14:17 glyph ^-
259+14:20 glyph [
260+14:21 tight name x
261+14:22 tight glyph =
262+14:23 tight aura @t
263+14:25 tight glyph ]
264+14:27 glyph (
265+14:28 tight name proj
266+14:33 glyph [
267+14:34 tight name x
268+14:35 tight glyph =
269+14:36 tight str "hi"
270+14:41 name middle
271+14:47 tight glyph =
272+14:48 tight lit ~zod
273+14:53 name last
274+14:57 tight glyph =
275+14:58 tight lit ~
276+14:59 tight glyph ]
277+14:60 tight glyph )
278+15:1 NEWLINE
279+15:1 glyph ++
280+15:4 name without-context
281+15:20 glyph (
282+15:21 tight name proj
283+15:26 glyph [
284+15:27 tight name x
285+15:28 tight glyph =
286+15:29 tight str "hi"
287+15:34 name middle
288+15:40 tight glyph =
289+15:41 tight lit ~zod
290+15:46 name last
291+15:50 tight glyph =
292+15:51 tight lit %.y
293+15:54 tight glyph ]
294+15:55 tight glyph )
295+16:1 NEWLINE
296+16:1 glyph ++
297+16:4 name direct-width
298+16:17 glyph ^-
299+16:20 glyph [
300+16:21 tight name x
301+16:22 tight glyph =
302+16:23 tight aura @t
303+16:25 tight glyph ]
304+16:27 glyph [
305+16:28 tight name x
306+16:29 tight glyph =
307+16:30 tight str "hi"
308+16:35 name middle
309+16:41 tight glyph =
310+16:42 tight lit ~zod
311+16:47 name last
312+16:51 tight glyph =
313+16:52 tight lit %.y
314+16:55 tight glyph ]
315+18:1 NEWLINE
316+18:1 glyph ++
317+18:4 name nested-scalar
318+18:18 glyph ^-
319+18:21 glyph [
320+18:22 tight name x
321+18:23 tight glyph =
322+18:24 tight aura @t
323+18:27 name y
324+18:28 tight glyph =
325+18:29 tight aura @p
326+18:31 tight glyph ]
327+18:33 glyph [
328+18:34 tight name x
329+18:35 tight glyph =
330+18:36 tight glyph (
331+18:37 tight name proj
332+18:42 glyph [
333+18:43 tight name x
334+18:44 tight glyph =
335+18:45 tight str "hi"
336+18:50 name middle
337+18:56 tight glyph =
338+18:57 tight lit ~zod
339+18:62 name last
340+18:66 tight glyph =
341+18:67 tight lit %.y
342+18:70 tight glyph ]
343+18:71 tight glyph )
344+18:73 name y
345+18:74 tight glyph =
346+18:75 tight lit ~zod
347+18:79 tight glyph ]
348+19:1 NEWLINE
349+19:1 glyph ++
350+19:4 name nested-proj
351+19:16 glyph |=
352+19:19 name r
353+19:20 tight glyph =
354+19:21 tight glyph [
355+19:22 tight name x
356+19:23 tight glyph =
357+19:24 tight aura @t
358+19:27 name y
359+19:28 tight glyph =
360+19:29 tight aura @p
361+19:31 tight glyph ]
362+19:33 name r
363+20:1 NEWLINE
364+20:1 glyph ++
365+20:4 name nested-call
366+20:16 glyph (
367+20:17 tight name nested-proj
368+20:29 glyph [
369+20:30 tight name x
370+20:31 tight glyph =
371+20:32 tight glyph (
372+20:33 tight name proj
373+20:38 glyph [
374+20:39 tight name x
375+20:40 tight glyph =
376+20:41 tight str "hi"
377+20:46 name middle
378+20:52 tight glyph =
379+20:53 tight lit ~zod
380+20:58 name last
381+20:62 tight glyph =
382+20:63 tight lit %.y
383+20:66 tight glyph ]
384+20:67 tight glyph )
385+20:69 name y
386+20:70 tight glyph =
387+20:71 tight lit ~zod
388+20:75 tight glyph ]
389+20:76 tight glyph )
390+21:1 NEWLINE
391+21:1 glyph ++
392+21:4 name nested-record
393+21:18 glyph ^-
394+21:21 glyph [
395+21:22 tight name inner
396+21:27 tight glyph =
397+21:28 tight glyph [
398+21:29 tight name x
399+21:30 tight glyph =
400+21:31 tight aura @t
401+21:33 tight glyph ]
402+21:35 name y
403+21:36 tight glyph =
404+21:37 tight aura @p
405+21:39 tight glyph ]
406+21:41 glyph [
407+21:42 tight name inner
408+21:47 tight glyph =
409+21:48 tight glyph (
410+21:49 tight name proj
411+21:54 glyph [
412+21:55 tight name x
413+21:56 tight glyph =
414+21:57 tight str "hi"
415+21:62 name middle
416+21:68 tight glyph =
417+21:69 tight lit ~zod
418+21:74 name last
419+21:78 tight glyph =
420+21:79 tight lit %.y
421+21:82 tight glyph ]
422+21:83 tight glyph )
423+21:85 name y
424+21:86 tight glyph =
425+21:87 tight lit ~zod
426+21:91 tight glyph ]
427+22:1 NEWLINE
428+22:1 glyph ++
429+22:4 name scalar-positional
430+22:22 glyph |=
431+22:25 glyph [
432+22:26 tight name x
433+22:27 tight glyph =
434+22:28 tight aura @t
435+22:31 name y
436+22:32 tight glyph =
437+22:33 tight aura @p
438+22:35 tight glyph ]
439+22:37 name x
440+23:1 NEWLINE
441+23:1 glyph ++
442+23:4 name scalar-positional-bad
443+23:26 glyph (
444+23:27 tight name scalar-positional
445+23:45 glyph (
446+23:46 tight name proj
447+23:51 glyph [
448+23:52 tight name x
449+23:53 tight glyph =
450+23:54 tight str "hi"
451+23:59 name middle
452+23:65 tight glyph =
453+23:66 tight lit ~zod
454+23:71 name last
455+23:75 tight glyph =
456+23:76 tight lit %.y
457+23:79 tight glyph ]
458+23:80 tight glyph )
459+23:82 lit ~zod
460+23:86 tight glyph )
461+24:1 NEWLINE
462+24:1 glyph ++
463+24:4 name record-positional
464+24:22 glyph |=
465+24:25 glyph [
466+24:26 tight name x
467+24:27 tight glyph =
468+24:28 tight glyph [
469+24:29 tight name x
470+24:30 tight glyph =
471+24:31 tight aura @t
472+24:33 tight glyph ]
473+24:35 name y
474+24:36 tight glyph =
475+24:37 tight aura @p
476+24:39 tight glyph ]
477+24:41 name x
478+25:1 NEWLINE
479+25:1 glyph ++
480+25:4 name record-positional-good
481+25:27 glyph (
482+25:28 tight name record-positional
483+25:46 glyph (
484+25:47 tight name proj
485+25:52 glyph [
486+25:53 tight name x
487+25:54 tight glyph =
488+25:55 tight str "hi"
489+25:60 name middle
490+25:66 tight glyph =
491+25:67 tight lit ~zod
492+25:72 name last
493+25:76 tight glyph =
494+25:77 tight lit %.y
495+25:80 tight glyph ]
496+25:81 tight glyph )
497+25:83 lit ~zod
498+25:87 tight glyph )
499+25:88 NEWLINE
tests/golden/types-proj-single-field/tree.txtnew file+243
@@ -0,0 +1,243 @@
1+(module
2+ (value 1:1 sink
3+ (gate 1:9
4+ (face 1:12 r
5+ (cell 1:14
6+ (face 1:15 x (aura 1:17 @t))))
7+ (wing 1:21 x.r)))
8+ (value 2:1 first
9+ (cast 2:10
10+ (cell 2:13
11+ (face 2:14 x (aura 2:16 @t)))
12+ (group 2:20
13+ (call 2:21
14+ (wing 2:21 proj)
15+ (tuple 2:26
16+ (face 2:27 x (str 2:29 "hi"))
17+ (face 2:34 middle (lit 2:41 ~zod))
18+ (face 2:46 last (lit 2:51 %.y)))))))
19+ (value 3:1 middle
20+ (cast 3:11
21+ (cell 3:14
22+ (face 3:15 x (aura 3:17 @t)))
23+ (group 3:21
24+ (call 3:22
25+ (wing 3:22 proj)
26+ (tuple 3:27
27+ (face 3:28 first (lit 3:34 ~zod))
28+ (face 3:39 x (str 3:41 "hi"))
29+ (face 3:46 last (lit 3:51 %.y)))))))
30+ (value 4:1 last
31+ (cast 4:9
32+ (cell 4:12
33+ (face 4:13 x (aura 4:15 @t)))
34+ (group 4:19
35+ (call 4:20
36+ (wing 4:20 proj)
37+ (tuple 4:25
38+ (face 4:26 first (lit 4:32 ~zod))
39+ (face 4:37 middle (lit 4:44 %.y))
40+ (face 4:48 x (str 4:50 "hi")))))))
41+ (value 5:1 call-context
42+ (group 5:17
43+ (call 5:18
44+ (wing 5:18 sink)
45+ (group 5:23
46+ (call 5:24
47+ (wing 5:24 proj)
48+ (tuple 5:29
49+ (face 5:30 x (str 5:32 "hi"))
50+ (face 5:37 middle (lit 5:44 ~zod))
51+ (face 5:49 last (lit 5:54 %.y))))))))
52+ (value 6:1 source
53+ (gate 6:11
54+ (face 6:14 v (aura 6:16 @t))
55+ (tuple 6:19
56+ (face 6:20 first (lit 6:26 ~zod))
57+ (face 6:31 x (wing 6:33 v))
58+ (face 6:35 last (lit 6:40 %.y)))))
59+ (value 7:1 computed
60+ (cast 7:13
61+ (cell 7:16
62+ (face 7:17 x (aura 7:19 @t)))
63+ (group 7:23
64+ (call 7:24
65+ (wing 7:24 proj)
66+ (group 7:29
67+ (call 7:30 (wing 7:30 source) (str 7:37 "hi")))))))
68+ (value 8:1 exact
69+ (cast 8:10
70+ (cell 8:13
71+ (face 8:14 x (aura 8:16 @t)))
72+ (group 8:20
73+ (call 8:21
74+ (wing 8:21 proj)
75+ (tuple 8:26
76+ (face 8:27 x (str 8:29 "hi")))))))
77+ (value 9:1 generic
78+ (gate 9:12
79+ (face 9:15 v (tvar 9:17 A))
80+ (cast 9:19
81+ (cell 9:22
82+ (face 9:23 x (tvar 9:25 A)))
83+ (group 9:28
84+ (call 9:29
85+ (wing 9:29 proj)
86+ (tuple 9:34
87+ (face 9:35 first (str 9:41 "hi"))
88+ (face 9:46 x (wing 9:48 v))
89+ (face 9:50 last (lit 9:55 %.y))))))))
90+ (value 10:1 generic-call
91+ (group 10:17
92+ (call 10:18 (wing 10:18 generic) (lit 10:26 ~zod))))
93+ (value 11:1 missing
94+ (cast 11:12
95+ (cell 11:15
96+ (face 11:16 x (aura 11:18 @t)))
97+ (group 11:22
98+ (call 11:23
99+ (wing 11:23 proj)
100+ (tuple 11:28
101+ (face 11:29 first (str 11:35 "hi"))
102+ (face 11:40 middle (lit 11:47 ~zod))
103+ (face 11:52 last (lit 11:57 %.y)))))))
104+ (value 12:1 mismatch
105+ (cast 12:13
106+ (cell 12:16
107+ (face 12:17 x (aura 12:19 @t)))
108+ (group 12:23
109+ (call 12:24
110+ (wing 12:24 proj)
111+ (tuple 12:29
112+ (face 12:30 x (lit 12:32 ~zod))
113+ (face 12:37 middle (str 12:44 "hi"))
114+ (face 12:49 last (lit 12:54 %.y)))))))
115+ (value 13:1 pending-tag
116+ (cast 13:16
117+ (cell 13:19
118+ (face 13:20 x (aura 13:22 @t)))
119+ (group 13:26
120+ (call 13:27
121+ (wing 13:27 proj)
122+ (tuple 13:32
123+ (face 13:33 x (str 13:35 "hi"))
124+ (face 13:40 middle (lit 13:47 ~zod))
125+ (face 13:52 last (lit 13:57 %orphan)))))))
126+ (value 14:1 pending-null
127+ (cast 14:17
128+ (cell 14:20
129+ (face 14:21 x (aura 14:23 @t)))
130+ (group 14:27
131+ (call 14:28
132+ (wing 14:28 proj)
133+ (tuple 14:33
134+ (face 14:34 x (str 14:36 "hi"))
135+ (face 14:41 middle (lit 14:48 ~zod))
136+ (face 14:53 last (lit 14:58 ~)))))))
137+ (value 15:1 without-context
138+ (group 15:20
139+ (call 15:21
140+ (wing 15:21 proj)
141+ (tuple 15:26
142+ (face 15:27 x (str 15:29 "hi"))
143+ (face 15:34 middle (lit 15:41 ~zod))
144+ (face 15:46 last (lit 15:51 %.y))))))
145+ (value 16:1 direct-width
146+ (cast 16:17
147+ (cell 16:20
148+ (face 16:21 x (aura 16:23 @t)))
149+ (tuple 16:27
150+ (face 16:28 x (str 16:30 "hi"))
151+ (face 16:35 middle (lit 16:42 ~zod))
152+ (face 16:47 last (lit 16:52 %.y)))))
153+ (value 18:1 nested-scalar
154+ (cast 18:18
155+ (cell 18:21
156+ (face 18:22 x (aura 18:24 @t))
157+ (face 18:27 y (aura 18:29 @p)))
158+ (tuple 18:33
159+ (face 18:34 x
160+ (group 18:36
161+ (call 18:37
162+ (wing 18:37 proj)
163+ (tuple 18:42
164+ (face 18:43 x (str 18:45 "hi"))
165+ (face 18:50 middle (lit 18:57 ~zod))
166+ (face 18:62 last (lit 18:67 %.y))))))
167+ (face 18:73 y (lit 18:75 ~zod)))))
168+ (value 19:1 nested-proj
169+ (gate 19:16
170+ (face 19:19 r
171+ (cell 19:21
172+ (face 19:22 x (aura 19:24 @t))
173+ (face 19:27 y (aura 19:29 @p))))
174+ (wing 19:33 r)))
175+ (value 20:1 nested-call
176+ (group 20:16
177+ (call 20:17
178+ (wing 20:17 nested-proj)
179+ (tuple 20:29
180+ (face 20:30 x
181+ (group 20:32
182+ (call 20:33
183+ (wing 20:33 proj)
184+ (tuple 20:38
185+ (face 20:39 x (str 20:41 "hi"))
186+ (face 20:46 middle (lit 20:53 ~zod))
187+ (face 20:58 last (lit 20:63 %.y))))))
188+ (face 20:69 y (lit 20:71 ~zod))))))
189+ (value 21:1 nested-record
190+ (cast 21:18
191+ (cell 21:21
192+ (face 21:22 inner
193+ (cell 21:28
194+ (face 21:29 x (aura 21:31 @t))))
195+ (face 21:35 y (aura 21:37 @p)))
196+ (tuple 21:41
197+ (face 21:42 inner
198+ (group 21:48
199+ (call 21:49
200+ (wing 21:49 proj)
201+ (tuple 21:54
202+ (face 21:55 x (str 21:57 "hi"))
203+ (face 21:62 middle (lit 21:69 ~zod))
204+ (face 21:74 last (lit 21:79 %.y))))))
205+ (face 21:85 y (lit 21:87 ~zod)))))
206+ (value 22:1 scalar-positional
207+ (gate 22:22
208+ (cell 22:25
209+ (face 22:26 x (aura 22:28 @t))
210+ (face 22:31 y (aura 22:33 @p)))
211+ (wing 22:37 x)))
212+ (value 23:1 scalar-positional-bad
213+ (group 23:26
214+ (call 23:27
215+ (wing 23:27 scalar-positional)
216+ (group 23:45
217+ (call 23:46
218+ (wing 23:46 proj)
219+ (tuple 23:51
220+ (face 23:52 x (str 23:54 "hi"))
221+ (face 23:59 middle (lit 23:66 ~zod))
222+ (face 23:71 last (lit 23:76 %.y)))))
223+ (lit 23:82 ~zod))))
224+ (value 24:1 record-positional
225+ (gate 24:22
226+ (cell 24:25
227+ (face 24:26 x
228+ (cell 24:28
229+ (face 24:29 x (aura 24:31 @t))))
230+ (face 24:35 y (aura 24:37 @p)))
231+ (wing 24:41 x)))
232+ (value 25:1 record-positional-good
233+ (group 25:27
234+ (call 25:28
235+ (wing 25:28 record-positional)
236+ (group 25:46
237+ (call 25:47
238+ (wing 25:47 proj)
239+ (tuple 25:52
240+ (face 25:53 x (str 25:55 "hi"))
241+ (face 25:60 middle (lit 25:67 ~zod))
242+ (face 25:72 last (lit 25:77 %.y)))))
243+ (lit 25:83 ~zod)))))
tests/golden/types-proj-single-field/types.txtnew file+31
@@ -0,0 +1,31 @@
1+partial inference; module not checked
2+++ sink: $-([x=@t] @t)
3+++ first: [x=@t]
4+++ middle: [x=@t]
5+++ last: [x=@t]
6+++ call-context: @t
7+++ source: $-(@t [first=@p [x=@t last=?]])
8+++ computed: [x=@t]
9+++ exact: [x=@t]
10+++ generic: $-(A [x=A])
11+++ generic-call: [x=@p]
12+++ missing: proj constraint needs unsupported inference
13+++ mismatch: proj constraint needs unsupported inference
14+++ pending-tag: tag needs context in partial inference
15+++ pending-null: `~` needs context in partial inference
16+++ without-context: proj needs an expected record type
17+++ direct-width: cast mold and expression type do not unify
18+/tests/golden/types-proj-single-field/source.jibb:16:20: cast mold has type [x=@t]
19+++ direct-width ^- [x=@t] [x="hi" middle=~zod last=%.y]
20+ ^
21+/tests/golden/types-proj-single-field/source.jibb:16:27: expression has type [x=@t [middle=@p last=?]]
22+++ direct-width ^- [x=@t] [x="hi" middle=~zod last=%.y]
23+ ^
24+++ nested-scalar: proj needs an expected record type
25+++ nested-proj: $-([x=@t y=@p] [x=@t y=@p])
26+++ nested-call: proj needs an expected record type
27+++ nested-record: [inner=[x=@t] y=@p]
28+++ scalar-positional: $-([x=@t y=@p] @t)
29+++ scalar-positional-bad: proj needs an expected record type
30+++ record-positional: $-([x=[x=@t] y=@p] [x=@t])
31+++ record-positional-good: [x=@t]
tests/golden/types-proj-single-sample-face/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: Scalar and nested one-field record samples through direct, branch and trace arguments. A sample face x must not become the target, and a nested field a must not be replaced by that sample face.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-single-sample-face/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-single-sample-face/source.jibbnew file+22
@@ -0,0 +1,22 @@
1+++ scalar-sink |= x=@t x
2+++ record-sink |= x=[a=@t] a.x
3+++ scalar-direct (scalar-sink (proj [x="hi" a="wrong" other=~zod]))
4+++ record-direct (record-sink (proj [x=~zod a="hi" other=%.y]))
5+++ scalar-branch |= flag=?
6+ (scalar-sink
7+ ?- flag
8+ %.y (proj [x="hi" a="wrong" other=~zod])
9+ %.n (proj [x="hi" a="wrong" other=~zod])
10+++ record-branch |= flag=?
11+ (record-sink
12+ ?- flag
13+ %.y (proj [x=~zod a="hi" other=%.y])
14+ %.n (proj [x=~zod a="hi" other=%.y])
15+++ scalar-trace
16+ (scalar-sink
17+ ~& "trace"
18+ (proj [x="hi" a="wrong" other=~zod])
19+++ record-trace
20+ (record-sink
21+ ~& "trace"
22+ (proj [x=~zod a="hi" other=%.y])
tests/golden/types-proj-single-sample-face/tokens.txtnew file+210
@@ -0,0 +1,210 @@
1+1:1 glyph ++
2+1:4 name scalar-sink
3+1:16 glyph |=
4+1:19 name x
5+1:20 tight glyph =
6+1:21 tight aura @t
7+1:24 name x
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name record-sink
11+2:16 glyph |=
12+2:19 name x
13+2:20 tight glyph =
14+2:21 tight glyph [
15+2:22 tight name a
16+2:23 tight glyph =
17+2:24 tight aura @t
18+2:26 tight glyph ]
19+2:28 wing a.x
20+3:1 NEWLINE
21+3:1 glyph ++
22+3:4 name scalar-direct
23+3:18 glyph (
24+3:19 tight name scalar-sink
25+3:31 glyph (
26+3:32 tight name proj
27+3:37 glyph [
28+3:38 tight name x
29+3:39 tight glyph =
30+3:40 tight str "hi"
31+3:45 name a
32+3:46 tight glyph =
33+3:47 tight str "wrong"
34+3:55 name other
35+3:60 tight glyph =
36+3:61 tight lit ~zod
37+3:65 tight glyph ]
38+3:66 tight glyph )
39+3:67 tight glyph )
40+4:1 NEWLINE
41+4:1 glyph ++
42+4:4 name record-direct
43+4:18 glyph (
44+4:19 tight name record-sink
45+4:31 glyph (
46+4:32 tight name proj
47+4:37 glyph [
48+4:38 tight name x
49+4:39 tight glyph =
50+4:40 tight lit ~zod
51+4:45 name a
52+4:46 tight glyph =
53+4:47 tight str "hi"
54+4:52 name other
55+4:57 tight glyph =
56+4:58 tight lit %.y
57+4:61 tight glyph ]
58+4:62 tight glyph )
59+4:63 tight glyph )
60+5:1 NEWLINE
61+5:1 glyph ++
62+5:4 name scalar-branch
63+5:18 glyph |=
64+5:21 name flag
65+5:25 tight glyph =
66+5:26 tight glyph ?
67+6:3 INDENT
68+6:3 glyph (
69+6:4 tight name scalar-sink
70+7:5 INDENT
71+7:5 glyph ?-
72+7:8 name flag
73+8:7 INDENT
74+8:7 lit %.y
75+8:11 glyph (
76+8:12 tight name proj
77+8:17 glyph [
78+8:18 tight name x
79+8:19 tight glyph =
80+8:20 tight str "hi"
81+8:25 name a
82+8:26 tight glyph =
83+8:27 tight str "wrong"
84+8:35 name other
85+8:40 tight glyph =
86+8:41 tight lit ~zod
87+8:45 tight glyph ]
88+8:46 tight glyph )
89+9:7 NEWLINE
90+9:7 lit %.n
91+9:11 glyph (
92+9:12 tight name proj
93+9:17 glyph [
94+9:18 tight name x
95+9:19 tight glyph =
96+9:20 tight str "hi"
97+9:25 name a
98+9:26 tight glyph =
99+9:27 tight str "wrong"
100+9:35 name other
101+9:40 tight glyph =
102+9:41 tight lit ~zod
103+9:45 tight glyph ]
104+9:46 tight glyph )
105+10:1 DEDENT
106+10:1 DEDENT
107+10:1 DEDENT
108+10:1 NEWLINE
109+10:1 glyph ++
110+10:4 name record-branch
111+10:18 glyph |=
112+10:21 name flag
113+10:25 tight glyph =
114+10:26 tight glyph ?
115+11:3 INDENT
116+11:3 glyph (
117+11:4 tight name record-sink
118+12:5 INDENT
119+12:5 glyph ?-
120+12:8 name flag
121+13:7 INDENT
122+13:7 lit %.y
123+13:11 glyph (
124+13:12 tight name proj
125+13:17 glyph [
126+13:18 tight name x
127+13:19 tight glyph =
128+13:20 tight lit ~zod
129+13:25 name a
130+13:26 tight glyph =
131+13:27 tight str "hi"
132+13:32 name other
133+13:37 tight glyph =
134+13:38 tight lit %.y
135+13:41 tight glyph ]
136+13:42 tight glyph )
137+14:7 NEWLINE
138+14:7 lit %.n
139+14:11 glyph (
140+14:12 tight name proj
141+14:17 glyph [
142+14:18 tight name x
143+14:19 tight glyph =
144+14:20 tight lit ~zod
145+14:25 name a
146+14:26 tight glyph =
147+14:27 tight str "hi"
148+14:32 name other
149+14:37 tight glyph =
150+14:38 tight lit %.y
151+14:41 tight glyph ]
152+14:42 tight glyph )
153+15:1 DEDENT
154+15:1 DEDENT
155+15:1 DEDENT
156+15:1 NEWLINE
157+15:1 glyph ++
158+15:4 name scalar-trace
159+16:3 INDENT
160+16:3 glyph (
161+16:4 tight name scalar-sink
162+17:5 INDENT
163+17:5 glyph ~&
164+17:8 str "trace"
165+18:7 INDENT
166+18:7 glyph (
167+18:8 tight name proj
168+18:13 glyph [
169+18:14 tight name x
170+18:15 tight glyph =
171+18:16 tight str "hi"
172+18:21 name a
173+18:22 tight glyph =
174+18:23 tight str "wrong"
175+18:31 name other
176+18:36 tight glyph =
177+18:37 tight lit ~zod
178+18:41 tight glyph ]
179+18:42 tight glyph )
180+19:1 DEDENT
181+19:1 DEDENT
182+19:1 DEDENT
183+19:1 NEWLINE
184+19:1 glyph ++
185+19:4 name record-trace
186+20:3 INDENT
187+20:3 glyph (
188+20:4 tight name record-sink
189+21:5 INDENT
190+21:5 glyph ~&
191+21:8 str "trace"
192+22:7 INDENT
193+22:7 glyph (
194+22:8 tight name proj
195+22:13 glyph [
196+22:14 tight name x
197+22:15 tight glyph =
198+22:16 tight lit ~zod
199+22:21 name a
200+22:22 tight glyph =
201+22:23 tight str "hi"
202+22:28 name other
203+22:33 tight glyph =
204+22:34 tight lit %.y
205+22:37 tight glyph ]
206+22:38 tight glyph )
207+22:39 DEDENT
208+22:39 DEDENT
209+22:39 DEDENT
210+22:39 NEWLINE
tests/golden/types-proj-single-sample-face/tree.txtnew file+117
@@ -0,0 +1,117 @@
1+(module
2+ (value 1:1 scalar-sink
3+ (gate 1:16
4+ (face 1:19 x (aura 1:21 @t))
5+ (wing 1:24 x)))
6+ (value 2:1 record-sink
7+ (gate 2:16
8+ (face 2:19 x
9+ (cell 2:21
10+ (face 2:22 a (aura 2:24 @t))))
11+ (wing 2:28 a.x)))
12+ (value 3:1 scalar-direct
13+ (group 3:18
14+ (call 3:19
15+ (wing 3:19 scalar-sink)
16+ (group 3:31
17+ (call 3:32
18+ (wing 3:32 proj)
19+ (tuple 3:37
20+ (face 3:38 x (str 3:40 "hi"))
21+ (face 3:45 a (str 3:47 "wrong"))
22+ (face 3:55 other (lit 3:61 ~zod))))))))
23+ (value 4:1 record-direct
24+ (group 4:18
25+ (call 4:19
26+ (wing 4:19 record-sink)
27+ (group 4:31
28+ (call 4:32
29+ (wing 4:32 proj)
30+ (tuple 4:37
31+ (face 4:38 x (lit 4:40 ~zod))
32+ (face 4:45 a (str 4:47 "hi"))
33+ (face 4:52 other (lit 4:58 %.y))))))))
34+ (value 5:1 scalar-branch
35+ (gate 5:18
36+ (face 5:21 flag (flag 5:26))
37+ (body 6:3
38+ (group 6:3
39+ (call 6:4
40+ (wing 6:4 scalar-sink)
41+ (branch 7:5
42+ (wing 7:8 flag)
43+ (arm 8:7
44+ (lit 8:7 %.y)
45+ (group 8:11
46+ (call 8:12
47+ (wing 8:12 proj)
48+ (tuple 8:17
49+ (face 8:18 x (str 8:20 "hi"))
50+ (face 8:25 a (str 8:27 "wrong"))
51+ (face 8:35 other (lit 8:41 ~zod))))))
52+ (arm 9:7
53+ (lit 9:7 %.n)
54+ (group 9:11
55+ (call 9:12
56+ (wing 9:12 proj)
57+ (tuple 9:17
58+ (face 9:18 x (str 9:20 "hi"))
59+ (face 9:25 a (str 9:27 "wrong"))
60+ (face 9:35 other (lit 9:41 ~zod))))))))))))
61+ (value 10:1 record-branch
62+ (gate 10:18
63+ (face 10:21 flag (flag 10:26))
64+ (body 11:3
65+ (group 11:3
66+ (call 11:4
67+ (wing 11:4 record-sink)
68+ (branch 12:5
69+ (wing 12:8 flag)
70+ (arm 13:7
71+ (lit 13:7 %.y)
72+ (group 13:11
73+ (call 13:12
74+ (wing 13:12 proj)
75+ (tuple 13:17
76+ (face 13:18 x (lit 13:20 ~zod))
77+ (face 13:25 a (str 13:27 "hi"))
78+ (face 13:32 other (lit 13:38 %.y))))))
79+ (arm 14:7
80+ (lit 14:7 %.n)
81+ (group 14:11
82+ (call 14:12
83+ (wing 14:12 proj)
84+ (tuple 14:17
85+ (face 14:18 x (lit 14:20 ~zod))
86+ (face 14:25 a (str 14:27 "hi"))
87+ (face 14:32 other (lit 14:38 %.y))))))))))))
88+ (value 15:1 scalar-trace
89+ (body 16:3
90+ (group 16:3
91+ (call 16:4
92+ (wing 16:4 scalar-sink)
93+ (trace 17:5
94+ (str 17:8 "trace")
95+ (body 18:7
96+ (group 18:7
97+ (call 18:8
98+ (wing 18:8 proj)
99+ (tuple 18:13
100+ (face 18:14 x (str 18:16 "hi"))
101+ (face 18:21 a (str 18:23 "wrong"))
102+ (face 18:31 other (lit 18:37 ~zod)))))))))))
103+ (value 19:1 record-trace
104+ (body 20:3
105+ (group 20:3
106+ (call 20:4
107+ (wing 20:4 record-sink)
108+ (trace 21:5
109+ (str 21:8 "trace")
110+ (body 22:7
111+ (group 22:7
112+ (call 22:8
113+ (wing 22:8 proj)
114+ (tuple 22:13
115+ (face 22:14 x (lit 22:16 ~zod))
116+ (face 22:21 a (str 22:23 "hi"))
117+ (face 22:28 other (lit 22:34 %.y))))))))))))
tests/golden/types-proj-single-sample-face/types.txtnew file+9
@@ -0,0 +1,9 @@
1+partial inference; module not checked
2+++ scalar-sink: $-(@t @t)
3+++ record-sink: $-([a=@t] @t)
4+++ scalar-direct: proj needs an expected record type
5+++ record-direct: @t
6+++ scalar-branch: proj needs an expected record type
7+++ record-branch: proj needs an expected record type
8+++ scalar-trace: proj needs an expected record type
9+++ record-trace: @t
tests/golden/types-proj-single-wrapped/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Records and tuples: "The explicit type-directed operation `(proj record)` selects fields from its argument according to the expected result type" and "`proj` is reserved: a module cannot define or import another name `proj`".
2+tests: Branch and trace wrappers beneath an enclosing scalar field must not reinterpret its label as the requested record. A trace beneath a genuinely nested one-field record retains its context; the branch case remains unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-proj-single-wrapped/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-proj-single-wrapped/source.jibbnew file+26
@@ -0,0 +1,26 @@
1+++ scalar-branch |= flag=?
2+ ^- [x=@t y=@p]
3+ [
4+ x=(?- flag
5+ %.y (proj [x="a" extra=~zod])
6+ %.n (proj [x="b" extra=~zod])
7+ y=~zod
8+++ nested-branch |= flag=?
9+ ^- [inner=[x=@t] y=@p]
10+ [
11+ inner=(?- flag
12+ %.y (proj [x="a" extra=~zod])
13+ %.n (proj [x="b" extra=~zod])
14+ y=~zod
15+++ scalar-trace
16+ ^- [x=@t y=@p]
17+ [
18+ x=(~& "trace"
19+ (proj [x="a" extra=~zod])
20+ y=~zod
21+++ nested-trace
22+ ^- [inner=[x=@t] y=@p]
23+ [
24+ inner=(~& "trace"
25+ (proj [x="a" extra=~zod])
26+ y=~zod
tests/golden/types-proj-single-wrapped/tokens.txtnew file+208
@@ -0,0 +1,208 @@
1+1:1 glyph ++
2+1:4 name scalar-branch
3+1:18 glyph |=
4+1:21 name flag
5+1:25 tight glyph =
6+1:26 tight glyph ?
7+2:3 INDENT
8+2:3 glyph ^-
9+2:6 glyph [
10+2:7 tight name x
11+2:8 tight glyph =
12+2:9 tight aura @t
13+2:12 name y
14+2:13 tight glyph =
15+2:14 tight aura @p
16+2:16 tight glyph ]
17+3:5 INDENT
18+3:5 glyph [
19+4:7 INDENT
20+4:7 name x
21+4:8 tight glyph =
22+4:9 tight glyph (
23+4:10 tight glyph ?-
24+4:13 name flag
25+5:9 INDENT
26+5:9 lit %.y
27+5:13 glyph (
28+5:14 tight name proj
29+5:19 glyph [
30+5:20 tight name x
31+5:21 tight glyph =
32+5:22 tight str "a"
33+5:26 name extra
34+5:31 tight glyph =
35+5:32 tight lit ~zod
36+5:36 tight glyph ]
37+5:37 tight glyph )
38+6:9 NEWLINE
39+6:9 lit %.n
40+6:13 glyph (
41+6:14 tight name proj
42+6:19 glyph [
43+6:20 tight name x
44+6:21 tight glyph =
45+6:22 tight str "b"
46+6:26 name extra
47+6:31 tight glyph =
48+6:32 tight lit ~zod
49+6:36 tight glyph ]
50+6:37 tight glyph )
51+7:7 DEDENT
52+7:7 NEWLINE
53+7:7 name y
54+7:8 tight glyph =
55+7:9 tight lit ~zod
56+8:1 DEDENT
57+8:1 DEDENT
58+8:1 DEDENT
59+8:1 NEWLINE
60+8:1 glyph ++
61+8:4 name nested-branch
62+8:18 glyph |=
63+8:21 name flag
64+8:25 tight glyph =
65+8:26 tight glyph ?
66+9:3 INDENT
67+9:3 glyph ^-
68+9:6 glyph [
69+9:7 tight name inner
70+9:12 tight glyph =
71+9:13 tight glyph [
72+9:14 tight name x
73+9:15 tight glyph =
74+9:16 tight aura @t
75+9:18 tight glyph ]
76+9:20 name y
77+9:21 tight glyph =
78+9:22 tight aura @p
79+9:24 tight glyph ]
80+10:5 INDENT
81+10:5 glyph [
82+11:7 INDENT
83+11:7 name inner
84+11:12 tight glyph =
85+11:13 tight glyph (
86+11:14 tight glyph ?-
87+11:17 name flag
88+12:9 INDENT
89+12:9 lit %.y
90+12:13 glyph (
91+12:14 tight name proj
92+12:19 glyph [
93+12:20 tight name x
94+12:21 tight glyph =
95+12:22 tight str "a"
96+12:26 name extra
97+12:31 tight glyph =
98+12:32 tight lit ~zod
99+12:36 tight glyph ]
100+12:37 tight glyph )
101+13:9 NEWLINE
102+13:9 lit %.n
103+13:13 glyph (
104+13:14 tight name proj
105+13:19 glyph [
106+13:20 tight name x
107+13:21 tight glyph =
108+13:22 tight str "b"
109+13:26 name extra
110+13:31 tight glyph =
111+13:32 tight lit ~zod
112+13:36 tight glyph ]
113+13:37 tight glyph )
114+14:7 DEDENT
115+14:7 NEWLINE
116+14:7 name y
117+14:8 tight glyph =
118+14:9 tight lit ~zod
119+15:1 DEDENT
120+15:1 DEDENT
121+15:1 DEDENT
122+15:1 NEWLINE
123+15:1 glyph ++
124+15:4 name scalar-trace
125+16:3 INDENT
126+16:3 glyph ^-
127+16:6 glyph [
128+16:7 tight name x
129+16:8 tight glyph =
130+16:9 tight aura @t
131+16:12 name y
132+16:13 tight glyph =
133+16:14 tight aura @p
134+16:16 tight glyph ]
135+17:5 INDENT
136+17:5 glyph [
137+18:7 INDENT
138+18:7 name x
139+18:8 tight glyph =
140+18:9 tight glyph (
141+18:10 tight glyph ~&
142+18:13 str "trace"
143+19:9 INDENT
144+19:9 glyph (
145+19:10 tight name proj
146+19:15 glyph [
147+19:16 tight name x
148+19:17 tight glyph =
149+19:18 tight str "a"
150+19:22 name extra
151+19:27 tight glyph =
152+19:28 tight lit ~zod
153+19:32 tight glyph ]
154+19:33 tight glyph )
155+20:7 DEDENT
156+20:7 NEWLINE
157+20:7 name y
158+20:8 tight glyph =
159+20:9 tight lit ~zod
160+21:1 DEDENT
161+21:1 DEDENT
162+21:1 DEDENT
163+21:1 NEWLINE
164+21:1 glyph ++
165+21:4 name nested-trace
166+22:3 INDENT
167+22:3 glyph ^-
168+22:6 glyph [
169+22:7 tight name inner
170+22:12 tight glyph =
171+22:13 tight glyph [
172+22:14 tight name x
173+22:15 tight glyph =
174+22:16 tight aura @t
175+22:18 tight glyph ]
176+22:20 name y
177+22:21 tight glyph =
178+22:22 tight aura @p
179+22:24 tight glyph ]
180+23:5 INDENT
181+23:5 glyph [
182+24:7 INDENT
183+24:7 name inner
184+24:12 tight glyph =
185+24:13 tight glyph (
186+24:14 tight glyph ~&
187+24:17 str "trace"
188+25:9 INDENT
189+25:9 glyph (
190+25:10 tight name proj
191+25:15 glyph [
192+25:16 tight name x
193+25:17 tight glyph =
194+25:18 tight str "a"
195+25:22 name extra
196+25:27 tight glyph =
197+25:28 tight lit ~zod
198+25:32 tight glyph ]
199+25:33 tight glyph )
200+26:7 DEDENT
201+26:7 NEWLINE
202+26:7 name y
203+26:8 tight glyph =
204+26:9 tight lit ~zod
205+26:13 DEDENT
206+26:13 DEDENT
207+26:13 DEDENT
208+26:13 NEWLINE
tests/golden/types-proj-single-wrapped/tree.txtnew file+107
@@ -0,0 +1,107 @@
1+(module
2+ (value 1:1 scalar-branch
3+ (gate 1:18
4+ (face 1:21 flag (flag 1:26))
5+ (body 2:3
6+ (cast 2:3
7+ (cell 2:6
8+ (face 2:7 x (aura 2:9 @t))
9+ (face 2:12 y (aura 2:14 @p)))
10+ (body 3:5
11+ (tuple 3:5
12+ (face 4:7 x
13+ (group 4:9
14+ (branch 4:10
15+ (wing 4:13 flag)
16+ (arm 5:9
17+ (lit 5:9 %.y)
18+ (group 5:13
19+ (call 5:14
20+ (wing 5:14 proj)
21+ (tuple 5:19
22+ (face 5:20 x (str 5:22 "a"))
23+ (face 5:26 extra (lit 5:32 ~zod))))))
24+ (arm 6:9
25+ (lit 6:9 %.n)
26+ (group 6:13
27+ (call 6:14
28+ (wing 6:14 proj)
29+ (tuple 6:19
30+ (face 6:20 x (str 6:22 "b"))
31+ (face 6:26 extra (lit 6:32 ~zod)))))))))
32+ (face 7:7 y (lit 7:9 ~zod))))))))
33+ (value 8:1 nested-branch
34+ (gate 8:18
35+ (face 8:21 flag (flag 8:26))
36+ (body 9:3
37+ (cast 9:3
38+ (cell 9:6
39+ (face 9:7 inner
40+ (cell 9:13
41+ (face 9:14 x (aura 9:16 @t))))
42+ (face 9:20 y (aura 9:22 @p)))
43+ (body 10:5
44+ (tuple 10:5
45+ (face 11:7 inner
46+ (group 11:13
47+ (branch 11:14
48+ (wing 11:17 flag)
49+ (arm 12:9
50+ (lit 12:9 %.y)
51+ (group 12:13
52+ (call 12:14
53+ (wing 12:14 proj)
54+ (tuple 12:19
55+ (face 12:20 x (str 12:22 "a"))
56+ (face 12:26 extra (lit 12:32 ~zod))))))
57+ (arm 13:9
58+ (lit 13:9 %.n)
59+ (group 13:13
60+ (call 13:14
61+ (wing 13:14 proj)
62+ (tuple 13:19
63+ (face 13:20 x (str 13:22 "b"))
64+ (face 13:26 extra (lit 13:32 ~zod)))))))))
65+ (face 14:7 y (lit 14:9 ~zod))))))))
66+ (value 15:1 scalar-trace
67+ (body 16:3
68+ (cast 16:3
69+ (cell 16:6
70+ (face 16:7 x (aura 16:9 @t))
71+ (face 16:12 y (aura 16:14 @p)))
72+ (body 17:5
73+ (tuple 17:5
74+ (face 18:7 x
75+ (group 18:9
76+ (trace 18:10
77+ (str 18:13 "trace")
78+ (body 19:9
79+ (group 19:9
80+ (call 19:10
81+ (wing 19:10 proj)
82+ (tuple 19:15
83+ (face 19:16 x (str 19:18 "a"))
84+ (face 19:22 extra (lit 19:28 ~zod)))))))))
85+ (face 20:7 y (lit 20:9 ~zod)))))))
86+ (value 21:1 nested-trace
87+ (body 22:3
88+ (cast 22:3
89+ (cell 22:6
90+ (face 22:7 inner
91+ (cell 22:13
92+ (face 22:14 x (aura 22:16 @t))))
93+ (face 22:20 y (aura 22:22 @p)))
94+ (body 23:5
95+ (tuple 23:5
96+ (face 24:7 inner
97+ (group 24:13
98+ (trace 24:14
99+ (str 24:17 "trace")
100+ (body 25:9
101+ (group 25:9
102+ (call 25:10
103+ (wing 25:10 proj)
104+ (tuple 25:15
105+ (face 25:16 x (str 25:18 "a"))
106+ (face 25:22 extra (lit 25:28 ~zod)))))))))
107+ (face 26:7 y (lit 26:9 ~zod))))))))
tests/golden/types-proj-single-wrapped/types.txtnew file+5
@@ -0,0 +1,5 @@
1+partial inference; module not checked
2+++ scalar-branch: proj needs an expected record type
3+++ nested-branch: proj needs an expected record type
4+++ scalar-trace: proj needs an expected record type
5+++ nested-trace: [inner=[x=@t] y=@p]
tests/golden/types-qath-faces/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: faces are part of a record type; unnamed fields may acquire faces.
2+tests: Concrete qath values fit faced fields in both directions, distinct explicit faces conflict, and a previously bound inference variable does not silently acquire an unresolved face.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-qath-faces/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-qath-faces/source.jibbnew file+8
@@ -0,0 +1,8 @@
1+++ concrete |= x=qath ^- [field=qath yes=?] [x %.y]
2+++ reverse |= x=[field=qath yes=?] ^- [qath ?] x
3+++ mismatch |= x=[bad=qath yes=?] ^- [good=qath yes=?] x
4+++ previously-bound |= x
5+ ~& ^- qath x
6+ ^- [field=qath yes=?] [x %.y]
7+++ nested-bad |= x=[outer=[bad=qath yes=?] done=?]
8+ ^- [outer=[good=qath yes=?] done=?] x
tests/golden/types-qath-faces/tokens.txtnew file+130
@@ -0,0 +1,130 @@
1+1:1 glyph ++
2+1:4 name concrete
3+1:13 glyph |=
4+1:16 name x
5+1:17 tight glyph =
6+1:18 tight name qath
7+1:23 glyph ^-
8+1:26 glyph [
9+1:27 tight name field
10+1:32 tight glyph =
11+1:33 tight name qath
12+1:38 name yes
13+1:41 tight glyph =
14+1:42 tight glyph ?
15+1:43 tight glyph ]
16+1:45 glyph [
17+1:46 tight name x
18+1:48 lit %.y
19+1:51 tight glyph ]
20+2:1 NEWLINE
21+2:1 glyph ++
22+2:4 name reverse
23+2:12 glyph |=
24+2:15 name x
25+2:16 tight glyph =
26+2:17 tight glyph [
27+2:18 tight name field
28+2:23 tight glyph =
29+2:24 tight name qath
30+2:29 name yes
31+2:32 tight glyph =
32+2:33 tight glyph ?
33+2:34 tight glyph ]
34+2:36 glyph ^-
35+2:39 glyph [
36+2:40 tight name qath
37+2:45 glyph ?
38+2:46 tight glyph ]
39+2:48 name x
40+3:1 NEWLINE
41+3:1 glyph ++
42+3:4 name mismatch
43+3:13 glyph |=
44+3:16 name x
45+3:17 tight glyph =
46+3:18 tight glyph [
47+3:19 tight name bad
48+3:22 tight glyph =
49+3:23 tight name qath
50+3:28 name yes
51+3:31 tight glyph =
52+3:32 tight glyph ?
53+3:33 tight glyph ]
54+3:35 glyph ^-
55+3:38 glyph [
56+3:39 tight name good
57+3:43 tight glyph =
58+3:44 tight name qath
59+3:49 name yes
60+3:52 tight glyph =
61+3:53 tight glyph ?
62+3:54 tight glyph ]
63+3:56 name x
64+4:1 NEWLINE
65+4:1 glyph ++
66+4:4 name previously-bound
67+4:21 glyph |=
68+4:24 name x
69+5:3 INDENT
70+5:3 glyph ~&
71+5:6 glyph ^-
72+5:9 name qath
73+5:14 name x
74+6:5 INDENT
75+6:5 glyph ^-
76+6:8 glyph [
77+6:9 tight name field
78+6:14 tight glyph =
79+6:15 tight name qath
80+6:20 name yes
81+6:23 tight glyph =
82+6:24 tight glyph ?
83+6:25 tight glyph ]
84+6:27 glyph [
85+6:28 tight name x
86+6:30 lit %.y
87+6:33 tight glyph ]
88+7:1 DEDENT
89+7:1 DEDENT
90+7:1 NEWLINE
91+7:1 glyph ++
92+7:4 name nested-bad
93+7:15 glyph |=
94+7:18 name x
95+7:19 tight glyph =
96+7:20 tight glyph [
97+7:21 tight name outer
98+7:26 tight glyph =
99+7:27 tight glyph [
100+7:28 tight name bad
101+7:31 tight glyph =
102+7:32 tight name qath
103+7:37 name yes
104+7:40 tight glyph =
105+7:41 tight glyph ?
106+7:42 tight glyph ]
107+7:44 name done
108+7:48 tight glyph =
109+7:49 tight glyph ?
110+7:50 tight glyph ]
111+8:3 INDENT
112+8:3 glyph ^-
113+8:6 glyph [
114+8:7 tight name outer
115+8:12 tight glyph =
116+8:13 tight glyph [
117+8:14 tight name good
118+8:18 tight glyph =
119+8:19 tight name qath
120+8:24 name yes
121+8:27 tight glyph =
122+8:28 tight glyph ?
123+8:29 tight glyph ]
124+8:31 name done
125+8:35 tight glyph =
126+8:36 tight glyph ?
127+8:37 tight glyph ]
128+8:39 name x
129+8:40 DEDENT
130+8:40 NEWLINE
tests/golden/types-qath-faces/tree.txtnew file+59
@@ -0,0 +1,59 @@
1+(module
2+ (value 1:1 concrete
3+ (gate 1:13
4+ (face 1:16 x (ref 1:18 qath))
5+ (cast 1:23
6+ (cell 1:26
7+ (face 1:27 field (ref 1:33 qath))
8+ (face 1:38 yes (flag 1:42)))
9+ (tuple 1:45 (wing 1:46 x) (lit 1:48 %.y)))))
10+ (value 2:1 reverse
11+ (gate 2:12
12+ (face 2:15 x
13+ (cell 2:17
14+ (face 2:18 field (ref 2:24 qath))
15+ (face 2:29 yes (flag 2:33))))
16+ (cast 2:36
17+ (cell 2:39 (ref 2:40 qath) (flag 2:45))
18+ (wing 2:48 x))))
19+ (value 3:1 mismatch
20+ (gate 3:13
21+ (face 3:16 x
22+ (cell 3:18
23+ (face 3:19 bad (ref 3:23 qath))
24+ (face 3:28 yes (flag 3:32))))
25+ (cast 3:35
26+ (cell 3:38
27+ (face 3:39 good (ref 3:44 qath))
28+ (face 3:49 yes (flag 3:53)))
29+ (wing 3:56 x))))
30+ (value 4:1 previously-bound
31+ (gate 4:21
32+ (bind 4:24 x)
33+ (body 5:3
34+ (trace 5:3
35+ (cast 5:6 (ref 5:9 qath) (wing 5:14 x))
36+ (body 6:5
37+ (cast 6:5
38+ (cell 6:8
39+ (face 6:9 field (ref 6:15 qath))
40+ (face 6:20 yes (flag 6:24)))
41+ (tuple 6:27 (wing 6:28 x) (lit 6:30 %.y))))))))
42+ (value 7:1 nested-bad
43+ (gate 7:15
44+ (face 7:18 x
45+ (cell 7:20
46+ (face 7:21 outer
47+ (cell 7:27
48+ (face 7:28 bad (ref 7:32 qath))
49+ (face 7:37 yes (flag 7:41))))
50+ (face 7:44 done (flag 7:49))))
51+ (body 8:3
52+ (cast 8:3
53+ (cell 8:6
54+ (face 8:7 outer
55+ (cell 8:13
56+ (face 8:14 good (ref 8:19 qath))
57+ (face 8:24 yes (flag 8:28))))
58+ (face 8:31 done (flag 8:36)))
59+ (wing 8:39 x))))))
tests/golden/types-qath-faces/types.txtnew file+18
@@ -0,0 +1,18 @@
1+partial inference; module not checked
2+++ concrete: $-(qath [field=qath yes=?])
3+++ reverse: $-([field=qath yes=?] [field=qath yes=?])
4+++ mismatch: cast mold and expression type do not unify
5+/tests/golden/types-qath-faces/source.jibb:3:38: cast mold has type [good=qath yes=?]
6+++ mismatch |= x=[bad=qath yes=?] ^- [good=qath yes=?] x
7+ ^
8+/tests/golden/types-qath-faces/source.jibb:3:56: expression has type [bad=qath yes=?]
9+++ mismatch |= x=[bad=qath yes=?] ^- [good=qath yes=?] x
10+ ^
11+++ previously-bound: cast constraint is not supported by partial inference
12+++ nested-bad: cast mold and expression type do not unify
13+/tests/golden/types-qath-faces/source.jibb:8:6: cast mold has type [outer=[good=qath yes=?] done=?]
14+ ^- [outer=[good=qath yes=?] done=?] x
15+ ^
16+/tests/golden/types-qath-faces/source.jibb:8:39: expression has type [outer=[bad=qath yes=?] done=?]
17+ ^- [outer=[good=qath yes=?] done=?] x
18+ ^
tests/golden/types-qath-holes/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: type holes, and the transparent qath type.
2+tests: Holes determined by qath resolve, while independent local/sample holes and pending tags survive contextual construction and static literals; a fixed incompatible head is rejected; decimal defaulting works in qath-containing records and remains conservative for composite holes or actual gates.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-qath-holes/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude.
tests/golden/types-qath-holes/source.jibbnew file+18
@@ -0,0 +1,18 @@
1+++ resolved |= x=qath ^- _ x
2+++ literal ^- _ %/foo
3+++ nested ^- _ ^- qath [i=~.hello t=[i=~.world t=~]]
4+++ isolated |= [p=qath other=_] p
5+++ local-hole
6+ ++ ignored |= x=_ x
7+ ^- qath [i=~.hello t=~]
8+++ pending-construction
9+ ~& %orphan
10+ ^- qath [i=~.hello t=~]
11+++ pending-literal
12+ ~& %orphan
13+ %/foo
14+++ wrong-head ^- qath [i=~zod t=~]
15+++ record-number [path=%/foo n=1]
16+++ nested-number [payload=[path=%/foo] n=1]
17+++ composite-hole ^- _ [path=%/foo n=1]
18+++ returned-gate [path=%/foo f=|=(x x) n=1]
tests/golden/types-qath-holes/tokens.txtnew file+178
@@ -0,0 +1,178 @@
1+1:1 glyph ++
2+1:4 name resolved
3+1:13 glyph |=
4+1:16 name x
5+1:17 tight glyph =
6+1:18 tight name qath
7+1:23 glyph ^-
8+1:26 glyph _
9+1:28 name x
10+2:1 NEWLINE
11+2:1 glyph ++
12+2:4 name literal
13+2:12 glyph ^-
14+2:15 glyph _
15+2:17 glyph %/
16+2:19 tight knot foo
17+3:1 NEWLINE
18+3:1 glyph ++
19+3:4 name nested
20+3:11 glyph ^-
21+3:14 glyph _
22+3:16 glyph ^-
23+3:19 name qath
24+3:24 glyph [
25+3:25 tight name i
26+3:26 tight glyph =
27+3:27 tight lit ~.hello
28+3:35 name t
29+3:36 tight glyph =
30+3:37 tight glyph [
31+3:38 tight name i
32+3:39 tight glyph =
33+3:40 tight lit ~.world
34+3:48 name t
35+3:49 tight glyph =
36+3:50 tight lit ~
37+3:51 tight glyph ]
38+3:52 tight glyph ]
39+4:1 NEWLINE
40+4:1 glyph ++
41+4:4 name isolated
42+4:13 glyph |=
43+4:16 glyph [
44+4:17 tight name p
45+4:18 tight glyph =
46+4:19 tight name qath
47+4:24 name other
48+4:29 tight glyph =
49+4:30 tight glyph _
50+4:31 tight glyph ]
51+4:33 name p
52+5:1 NEWLINE
53+5:1 glyph ++
54+5:4 name local-hole
55+6:3 INDENT
56+6:3 glyph ++
57+6:6 name ignored
58+6:14 glyph |=
59+6:17 name x
60+6:18 tight glyph =
61+6:19 tight glyph _
62+6:21 name x
63+7:3 NEWLINE
64+7:3 glyph ^-
65+7:6 name qath
66+7:11 glyph [
67+7:12 tight name i
68+7:13 tight glyph =
69+7:14 tight lit ~.hello
70+7:22 name t
71+7:23 tight glyph =
72+7:24 tight lit ~
73+7:25 tight glyph ]
74+8:1 DEDENT
75+8:1 NEWLINE
76+8:1 glyph ++
77+8:4 name pending-construction
78+9:3 INDENT
79+9:3 glyph ~&
80+9:6 lit %orphan
81+10:5 INDENT
82+10:5 glyph ^-
83+10:8 name qath
84+10:13 glyph [
85+10:14 tight name i
86+10:15 tight glyph =
87+10:16 tight lit ~.hello
88+10:24 name t
89+10:25 tight glyph =
90+10:26 tight lit ~
91+10:27 tight glyph ]
92+11:1 DEDENT
93+11:1 DEDENT
94+11:1 NEWLINE
95+11:1 glyph ++
96+11:4 name pending-literal
97+12:3 INDENT
98+12:3 glyph ~&
99+12:6 lit %orphan
100+13:5 INDENT
101+13:5 glyph %/
102+13:7 tight knot foo
103+14:1 DEDENT
104+14:1 DEDENT
105+14:1 NEWLINE
106+14:1 glyph ++
107+14:4 name wrong-head
108+14:15 glyph ^-
109+14:18 name qath
110+14:23 glyph [
111+14:24 tight name i
112+14:25 tight glyph =
113+14:26 tight lit ~zod
114+14:31 name t
115+14:32 tight glyph =
116+14:33 tight lit ~
117+14:34 tight glyph ]
118+15:1 NEWLINE
119+15:1 glyph ++
120+15:4 name record-number
121+15:18 glyph [
122+15:19 tight name path
123+15:23 tight glyph =
124+15:24 tight glyph %/
125+15:26 tight knot foo
126+15:30 name n
127+15:31 tight glyph =
128+15:32 tight lit 1
129+15:33 tight glyph ]
130+16:1 NEWLINE
131+16:1 glyph ++
132+16:4 name nested-number
133+16:18 glyph [
134+16:19 tight name payload
135+16:26 tight glyph =
136+16:27 tight glyph [
137+16:28 tight name path
138+16:32 tight glyph =
139+16:33 tight glyph %/
140+16:35 tight knot foo
141+16:38 tight glyph ]
142+16:40 name n
143+16:41 tight glyph =
144+16:42 tight lit 1
145+16:43 tight glyph ]
146+17:1 NEWLINE
147+17:1 glyph ++
148+17:4 name composite-hole
149+17:19 glyph ^-
150+17:22 glyph _
151+17:24 glyph [
152+17:25 tight name path
153+17:29 tight glyph =
154+17:30 tight glyph %/
155+17:32 tight knot foo
156+17:36 name n
157+17:37 tight glyph =
158+17:38 tight lit 1
159+17:39 tight glyph ]
160+18:1 NEWLINE
161+18:1 glyph ++
162+18:4 name returned-gate
163+18:18 glyph [
164+18:19 tight name path
165+18:23 tight glyph =
166+18:24 tight glyph %/
167+18:26 tight knot foo
168+18:30 name f
169+18:31 tight glyph =
170+18:32 tight glyph |=(
171+18:35 tight name x
172+18:37 name x
173+18:38 tight glyph )
174+18:40 name n
175+18:41 tight glyph =
176+18:42 tight lit 1
177+18:43 tight glyph ]
178+18:44 NEWLINE
tests/golden/types-qath-holes/tree.txtnew file+78
@@ -0,0 +1,78 @@
1+(module
2+ (value 1:1 resolved
3+ (gate 1:13
4+ (face 1:16 x (ref 1:18 qath))
5+ (cast 1:23 (hole 1:26) (wing 1:28 x))))
6+ (value 2:1 literal
7+ (cast 2:12 (hole 2:15) (qath 2:17 foo)))
8+ (value 3:1 nested
9+ (cast 3:11
10+ (hole 3:14)
11+ (cast 3:16
12+ (ref 3:19 qath)
13+ (tuple 3:24
14+ (face 3:25 i (lit 3:27 ~.hello))
15+ (face 3:35 t
16+ (tuple 3:37
17+ (face 3:38 i (lit 3:40 ~.world))
18+ (face 3:48 t (lit 3:50 ~))))))))
19+ (value 4:1 isolated
20+ (gate 4:13
21+ (cell 4:16
22+ (face 4:17 p (ref 4:19 qath))
23+ (face 4:24 other (hole 4:30)))
24+ (wing 4:33 p)))
25+ (value 5:1 local-hole
26+ (body 6:3
27+ (value 6:3 ignored
28+ (gate 6:14
29+ (face 6:17 x (hole 6:19))
30+ (wing 6:21 x)))
31+ (cast 7:3
32+ (ref 7:6 qath)
33+ (tuple 7:11
34+ (face 7:12 i (lit 7:14 ~.hello))
35+ (face 7:22 t (lit 7:24 ~))))))
36+ (value 8:1 pending-construction
37+ (body 9:3
38+ (trace 9:3
39+ (lit 9:6 %orphan)
40+ (body 10:5
41+ (cast 10:5
42+ (ref 10:8 qath)
43+ (tuple 10:13
44+ (face 10:14 i (lit 10:16 ~.hello))
45+ (face 10:24 t (lit 10:26 ~))))))))
46+ (value 11:1 pending-literal
47+ (body 12:3
48+ (trace 12:3
49+ (lit 12:6 %orphan)
50+ (body 13:5 (qath 13:5 foo)))))
51+ (value 14:1 wrong-head
52+ (cast 14:15
53+ (ref 14:18 qath)
54+ (tuple 14:23
55+ (face 14:24 i (lit 14:26 ~zod))
56+ (face 14:31 t (lit 14:33 ~)))))
57+ (value 15:1 record-number
58+ (tuple 15:18
59+ (face 15:19 path (qath 15:24 foo))
60+ (face 15:30 n (lit 15:32 1))))
61+ (value 16:1 nested-number
62+ (tuple 16:18
63+ (face 16:19 payload
64+ (tuple 16:27
65+ (face 16:28 path (qath 16:33 foo))))
66+ (face 16:40 n (lit 16:42 1))))
67+ (value 17:1 composite-hole
68+ (cast 17:19
69+ (hole 17:22)
70+ (tuple 17:24
71+ (face 17:25 path (qath 17:30 foo))
72+ (face 17:36 n (lit 17:38 1)))))
73+ (value 18:1 returned-gate
74+ (tuple 18:18
75+ (face 18:19 path (qath 18:24 foo))
76+ (face 18:30 f
77+ (gate-wide 18:32 (bind 18:35 x) (wing 18:37 x)))
78+ (face 18:40 n (lit 18:42 1)))))
tests/golden/types-qath-holes/types.txtnew file+22
@@ -0,0 +1,22 @@
1+partial inference; module not checked
2+++ resolved: $-(qath qath)
3+++ literal: qath
4+++ nested: qath
5+++ isolated: type hole needs a determined type
6+/tests/golden/types-qath-holes/source.jibb:4:30: unresolved type hole
7+++ isolated |= [p=qath other=_] p
8+ ^
9+++ local-hole: type hole needs a determined type
10+/tests/golden/types-qath-holes/source.jibb:6:19: unresolved type hole
11+ ++ ignored |= x=_ x
12+ ^
13+++ pending-construction: tag needs context in partial inference
14+++ pending-literal: tag needs context in partial inference
15+++ wrong-head: recursive mold cell does not fit its source shape
16+++ record-number: [path=qath n=@ud]
17+++ nested-number: [payload=[path=qath] n=@ud]
18+++ composite-hole: type hole needs unsupported inference
19+/tests/golden/types-qath-holes/source.jibb:17:22: type hole
20+++ composite-hole ^- _ [path=%/foo n=1]
21+ ^
22+++ returned-gate: unresolved aura-variable inference
tests/golden/types-qath-module-identity/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Molds: named recursive molds retain their source identity across module aliases and reexports.
2+tests: Equivalent imports and aliases of a recursive mold, a transitive alias, the public prelude qath, different source origins and list comparisons.
3+expect: parses
4+expect-types: a partial inference report; recursive-origin mismatches are rejected and list comparisons remain unsupported.
tests/golden/types-qath-module-identity/module-trees.txtnew file+44
@@ -0,0 +1,44 @@
1+/ui/one.jibb
2+(module
3+ (mold 1:1 alpha
4+ (union 2:3
5+ (const 2:3 ~)
6+ (cell 3:3
7+ (face 3:4 i (aura 3:6 @ta))
8+ (face 3:10 t (ref 3:12 alpha)))))
9+ (mold 4:1 exported (ref 4:13 alpha))
10+ (mold 5:1 route (ref 5:10 qath))
11+ (value 6:1 identity
12+ (gate 6:13
13+ (face 6:16 x (ref 6:18 alpha))
14+ (wing 6:24 x)))
15+ (value 7:1 qidentity
16+ (gate 7:14
17+ (face 7:17 x (ref 7:19 qath))
18+ (wing 7:24 x))))
19+/ui/two.jibb
20+(module
21+ (mold 1:1 alpha
22+ (union 2:3
23+ (const 2:3 ~)
24+ (cell 3:3
25+ (face 3:4 i (aura 3:6 @ta))
26+ (face 3:10 t (ref 3:12 alpha)))))
27+ (value 4:1 identity
28+ (gate 4:13
29+ (face 4:16 x (ref 4:18 alpha))
30+ (wing 4:24 x))))
31+/ui/mid.jibb
32+(module
33+ (jibb 1:1 base /ui/one)
34+ (mold 2:1 result (ref 2:11 exported.base))
35+ (value 3:1 forward
36+ (gate 3:12
37+ (face 3:15 x (ref 3:17 result))
38+ (group 3:24
39+ (call 3:25 (wing 3:25 identity.base) (wing 3:39 x)))))
40+ (value 4:1 forward-q
41+ (gate 4:14
42+ (face 4:17 x (ref 4:19 qath))
43+ (group 4:24
44+ (call 4:25 (wing 4:25 qidentity.base) (wing 4:40 x))))))
tests/golden/types-qath-module-identity/modules.txtnew file+3
@@ -0,0 +1,3 @@
1+/ui/one.jibb
2+/ui/two.jibb
3+/ui/mid.jibb
tests/golden/types-qath-module-identity/modules/ui/mid.jibbnew file+4
@@ -0,0 +1,4 @@
1+/= base /ui/one
2++$ result exported.base
3+++ forward |= x=result (identity.base x)
4+++ forward-q |= x=qath (qidentity.base x)
tests/golden/types-qath-module-identity/modules/ui/one.jibbnew file+7
@@ -0,0 +1,7 @@
1++$ alpha
2+ ~
3+ [i=@ta t=alpha]
4++$ exported alpha
5++$ route qath
6+++ identity |= x=alpha x
7+++ qidentity |= x=qath x
tests/golden/types-qath-module-identity/modules/ui/two.jibbnew file+4
@@ -0,0 +1,4 @@
1++$ alpha
2+ ~
3+ [i=@ta t=alpha]
4+++ identity |= x=alpha x
tests/golden/types-qath-module-identity/source.jibbnew file+15
@@ -0,0 +1,15 @@
1+/= one /ui/one
2+/= other /ui/one
3+/= two /ui/two
4+/= mid /ui/mid
5+++ same-origin |= x=alpha.one (identity.other x)
6+++ same-alias |= x=exported.one (identity.other x)
7+++ different |= x=alpha.one (identity.two x)
8+++ transit |= x=result.mid (forward.mid x)
9+++ prelude |= x=qath (qidentity.one x)
10+++ public-alias |= x=route.one (forward-q.mid x)
11+++ same-tail |= x=alpha.other ^- alpha.one [i=~.hello t=x]
12+++ other-tail |= x=alpha.two ^- alpha.one [i=~.hello t=x]
13+++ qath-tail |= x=qath ^- alpha.one [i=~.hello t=x]
14+++ list-to-qath |= x=(list @ta) ^- qath x
15+++ qath-to-list |= x=qath ^- (list @ta) x
tests/golden/types-qath-module-identity/tokens.txtnew file+171
@@ -0,0 +1,171 @@
1+1:1 glyph /=
2+1:4 name one
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot one
7+2:1 NEWLINE
8+2:1 glyph /=
9+2:4 name other
10+2:10 glyph /
11+2:11 tight knot ui
12+2:13 tight glyph /
13+2:14 tight knot one
14+3:1 NEWLINE
15+3:1 glyph /=
16+3:4 name two
17+3:8 glyph /
18+3:9 tight knot ui
19+3:11 tight glyph /
20+3:12 tight knot two
21+4:1 NEWLINE
22+4:1 glyph /=
23+4:4 name mid
24+4:8 glyph /
25+4:9 tight knot ui
26+4:11 tight glyph /
27+4:12 tight knot mid
28+5:1 NEWLINE
29+5:1 glyph ++
30+5:4 name same-origin
31+5:16 glyph |=
32+5:19 name x
33+5:20 tight glyph =
34+5:21 tight wing alpha.one
35+5:31 glyph (
36+5:32 tight wing identity.other
37+5:47 name x
38+5:48 tight glyph )
39+6:1 NEWLINE
40+6:1 glyph ++
41+6:4 name same-alias
42+6:15 glyph |=
43+6:18 name x
44+6:19 tight glyph =
45+6:20 tight wing exported.one
46+6:33 glyph (
47+6:34 tight wing identity.other
48+6:49 name x
49+6:50 tight glyph )
50+7:1 NEWLINE
51+7:1 glyph ++
52+7:4 name different
53+7:14 glyph |=
54+7:17 name x
55+7:18 tight glyph =
56+7:19 tight wing alpha.one
57+7:29 glyph (
58+7:30 tight wing identity.two
59+7:43 name x
60+7:44 tight glyph )
61+8:1 NEWLINE
62+8:1 glyph ++
63+8:4 name transit
64+8:12 glyph |=
65+8:15 name x
66+8:16 tight glyph =
67+8:17 tight wing result.mid
68+8:28 glyph (
69+8:29 tight wing forward.mid
70+8:41 name x
71+8:42 tight glyph )
72+9:1 NEWLINE
73+9:1 glyph ++
74+9:4 name prelude
75+9:12 glyph |=
76+9:15 name x
77+9:16 tight glyph =
78+9:17 tight name qath
79+9:22 glyph (
80+9:23 tight wing qidentity.one
81+9:37 name x
82+9:38 tight glyph )
83+10:1 NEWLINE
84+10:1 glyph ++
85+10:4 name public-alias
86+10:17 glyph |=
87+10:20 name x
88+10:21 tight glyph =
89+10:22 tight wing route.one
90+10:32 glyph (
91+10:33 tight wing forward-q.mid
92+10:47 name x
93+10:48 tight glyph )
94+11:1 NEWLINE
95+11:1 glyph ++
96+11:4 name same-tail
97+11:14 glyph |=
98+11:17 name x
99+11:18 tight glyph =
100+11:19 tight wing alpha.other
101+11:31 glyph ^-
102+11:34 wing alpha.one
103+11:44 glyph [
104+11:45 tight name i
105+11:46 tight glyph =
106+11:47 tight lit ~.hello
107+11:55 name t
108+11:56 tight glyph =
109+11:57 tight name x
110+11:58 tight glyph ]
111+12:1 NEWLINE
112+12:1 glyph ++
113+12:4 name other-tail
114+12:15 glyph |=
115+12:18 name x
116+12:19 tight glyph =
117+12:20 tight wing alpha.two
118+12:30 glyph ^-
119+12:33 wing alpha.one
120+12:43 glyph [
121+12:44 tight name i
122+12:45 tight glyph =
123+12:46 tight lit ~.hello
124+12:54 name t
125+12:55 tight glyph =
126+12:56 tight name x
127+12:57 tight glyph ]
128+13:1 NEWLINE
129+13:1 glyph ++
130+13:4 name qath-tail
131+13:14 glyph |=
132+13:17 name x
133+13:18 tight glyph =
134+13:19 tight name qath
135+13:24 glyph ^-
136+13:27 wing alpha.one
137+13:37 glyph [
138+13:38 tight name i
139+13:39 tight glyph =
140+13:40 tight lit ~.hello
141+13:48 name t
142+13:49 tight glyph =
143+13:50 tight name x
144+13:51 tight glyph ]
145+14:1 NEWLINE
146+14:1 glyph ++
147+14:4 name list-to-qath
148+14:17 glyph |=
149+14:20 name x
150+14:21 tight glyph =
151+14:22 tight glyph (
152+14:23 tight name list
153+14:28 aura @ta
154+14:31 tight glyph )
155+14:33 glyph ^-
156+14:36 name qath
157+14:41 name x
158+15:1 NEWLINE
159+15:1 glyph ++
160+15:4 name qath-to-list
161+15:17 glyph |=
162+15:20 name x
163+15:21 tight glyph =
164+15:22 tight name qath
165+15:27 glyph ^-
166+15:30 glyph (
167+15:31 tight name list
168+15:36 aura @ta
169+15:39 tight glyph )
170+15:41 name x
171+15:42 NEWLINE
tests/golden/types-qath-module-identity/tree.txtnew file+70
@@ -0,0 +1,70 @@
1+(module
2+ (jibb 1:1 one /ui/one)
3+ (jibb 2:1 other /ui/one)
4+ (jibb 3:1 two /ui/two)
5+ (jibb 4:1 mid /ui/mid)
6+ (value 5:1 same-origin
7+ (gate 5:16
8+ (face 5:19 x (ref 5:21 alpha.one))
9+ (group 5:31
10+ (call 5:32 (wing 5:32 identity.other) (wing 5:47 x)))))
11+ (value 6:1 same-alias
12+ (gate 6:15
13+ (face 6:18 x (ref 6:20 exported.one))
14+ (group 6:33
15+ (call 6:34 (wing 6:34 identity.other) (wing 6:49 x)))))
16+ (value 7:1 different
17+ (gate 7:14
18+ (face 7:17 x (ref 7:19 alpha.one))
19+ (group 7:29
20+ (call 7:30 (wing 7:30 identity.two) (wing 7:43 x)))))
21+ (value 8:1 transit
22+ (gate 8:12
23+ (face 8:15 x (ref 8:17 result.mid))
24+ (group 8:28
25+ (call 8:29 (wing 8:29 forward.mid) (wing 8:41 x)))))
26+ (value 9:1 prelude
27+ (gate 9:12
28+ (face 9:15 x (ref 9:17 qath))
29+ (group 9:22
30+ (call 9:23 (wing 9:23 qidentity.one) (wing 9:37 x)))))
31+ (value 10:1 public-alias
32+ (gate 10:17
33+ (face 10:20 x (ref 10:22 route.one))
34+ (group 10:32
35+ (call 10:33 (wing 10:33 forward-q.mid) (wing 10:47 x)))))
36+ (value 11:1 same-tail
37+ (gate 11:14
38+ (face 11:17 x (ref 11:19 alpha.other))
39+ (cast 11:31
40+ (ref 11:34 alpha.one)
41+ (tuple 11:44
42+ (face 11:45 i (lit 11:47 ~.hello))
43+ (face 11:55 t (wing 11:57 x))))))
44+ (value 12:1 other-tail
45+ (gate 12:15
46+ (face 12:18 x (ref 12:20 alpha.two))
47+ (cast 12:30
48+ (ref 12:33 alpha.one)
49+ (tuple 12:43
50+ (face 12:44 i (lit 12:46 ~.hello))
51+ (face 12:54 t (wing 12:56 x))))))
52+ (value 13:1 qath-tail
53+ (gate 13:14
54+ (face 13:17 x (ref 13:19 qath))
55+ (cast 13:24
56+ (ref 13:27 alpha.one)
57+ (tuple 13:37
58+ (face 13:38 i (lit 13:40 ~.hello))
59+ (face 13:48 t (wing 13:50 x))))))
60+ (value 14:1 list-to-qath
61+ (gate 14:17
62+ (face 14:20 x
63+ (apply 14:22 list (aura 14:28 @ta)))
64+ (cast 14:33 (ref 14:36 qath) (wing 14:41 x))))
65+ (value 15:1 qath-to-list
66+ (gate 15:17
67+ (face 15:20 x (ref 15:22 qath))
68+ (cast 15:27
69+ (apply 15:30 list (aura 15:36 @ta))
70+ (wing 15:41 x)))))
tests/golden/types-qath-module-identity/types.txtnew file+18
@@ -0,0 +1,18 @@
1+partial inference; module not checked
2+++ same-origin: $-(alpha.one alpha.other)
3+++ same-alias: $-(alpha.one alpha.other)
4+++ different: call's sample and argument types do not unify
5+/tests/golden/types-qath-module-identity/source.jibb:7:30: called gate has type $-(alpha.two alpha.two)
6+++ different |= x=alpha.one (identity.two x)
7+ ^
8+/tests/golden/types-qath-module-identity/source.jibb:7:43: argument has type alpha.one
9+++ different |= x=alpha.one (identity.two x)
10+ ^
11+++ transit: $-(result.mid result.mid)
12+++ prelude: $-(qath qath)
13+++ public-alias: $-(qath qath)
14+++ same-tail: $-(alpha.other alpha.one)
15+++ other-tail: recursive mold cell does not fit its source shape
16+++ qath-tail: recursive mold cell does not fit its source shape
17+++ list-to-qath: cast constraint is not supported by partial inference
18+++ qath-to-list: cast constraint is not supported by partial inference
tests/golden/types-qath-recursive/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Molds and Paths; Overview, Links and URLs: qath is a transparent source-defined recursive type, and application paths have that type.
2+tests: Construction, positional and named fields, nested cells, same-type identity, simple exhaustive inspection, static literals, and conservative failures for dynamic segments and incompatible heads, tails and field names. Route and static-file validation is deferred to milestone 4.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-qath-recursive/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the source-backed prelude for this case.
tests/golden/types-qath-recursive/source.jibbnew file+19
@@ -0,0 +1,19 @@
1+++ empty ^- qath ~
2+++ one ^- qath [~.blog ~]
3+++ named ^- qath [i=~.blog t=~]
4+++ nested ^- qath [~.blog [~.post ~]]
5+++ identity |= x=qath x
6+++ first |= x=qath
7+ ?- x
8+ ~ ~.none
9+ [piece remainder] piece
10+++ rest |= x=qath
11+ ?- x
12+ ~ x
13+ [piece remainder] remainder
14+++ literal %/blog/post
15+++ root %/
16+++ dynamic |= slug=@ta %/blog/(slug)
17+++ bad-head ^- qath [~zod ~]
18+++ bad-tail ^- qath [~.blog ~zod]
19+++ bad-face ^- qath [wrong=~.blog t=~]
tests/golden/types-qath-recursive/tokens.txtnew file+145
@@ -0,0 +1,145 @@
1+1:1 glyph ++
2+1:4 name empty
3+1:10 glyph ^-
4+1:13 name qath
5+1:18 lit ~
6+2:1 NEWLINE
7+2:1 glyph ++
8+2:4 name one
9+2:8 glyph ^-
10+2:11 name qath
11+2:16 glyph [
12+2:17 tight lit ~.blog
13+2:24 lit ~
14+2:25 tight glyph ]
15+3:1 NEWLINE
16+3:1 glyph ++
17+3:4 name named
18+3:10 glyph ^-
19+3:13 name qath
20+3:18 glyph [
21+3:19 tight name i
22+3:20 tight glyph =
23+3:21 tight lit ~.blog
24+3:28 name t
25+3:29 tight glyph =
26+3:30 tight lit ~
27+3:31 tight glyph ]
28+4:1 NEWLINE
29+4:1 glyph ++
30+4:4 name nested
31+4:11 glyph ^-
32+4:14 name qath
33+4:19 glyph [
34+4:20 tight lit ~.blog
35+4:27 glyph [
36+4:28 tight lit ~.post
37+4:35 lit ~
38+4:36 tight glyph ]
39+4:37 tight glyph ]
40+5:1 NEWLINE
41+5:1 glyph ++
42+5:4 name identity
43+5:13 glyph |=
44+5:16 name x
45+5:17 tight glyph =
46+5:18 tight name qath
47+5:23 name x
48+6:1 NEWLINE
49+6:1 glyph ++
50+6:4 name first
51+6:10 glyph |=
52+6:13 name x
53+6:14 tight glyph =
54+6:15 tight name qath
55+7:3 INDENT
56+7:3 glyph ?-
57+7:6 name x
58+8:5 INDENT
59+8:5 lit ~
60+8:7 lit ~.none
61+9:5 NEWLINE
62+9:5 glyph [
63+9:6 tight name piece
64+9:12 name remainder
65+9:21 tight glyph ]
66+9:23 name piece
67+10:1 DEDENT
68+10:1 DEDENT
69+10:1 NEWLINE
70+10:1 glyph ++
71+10:4 name rest
72+10:9 glyph |=
73+10:12 name x
74+10:13 tight glyph =
75+10:14 tight name qath
76+11:3 INDENT
77+11:3 glyph ?-
78+11:6 name x
79+12:5 INDENT
80+12:5 lit ~
81+12:7 name x
82+13:5 NEWLINE
83+13:5 glyph [
84+13:6 tight name piece
85+13:12 name remainder
86+13:21 tight glyph ]
87+13:23 name remainder
88+14:1 DEDENT
89+14:1 DEDENT
90+14:1 NEWLINE
91+14:1 glyph ++
92+14:4 name literal
93+14:12 glyph %/
94+14:14 tight knot blog
95+14:18 tight glyph /
96+14:19 tight knot post
97+15:1 NEWLINE
98+15:1 glyph ++
99+15:4 name root
100+15:9 glyph %/
101+16:1 NEWLINE
102+16:1 glyph ++
103+16:4 name dynamic
104+16:12 glyph |=
105+16:15 name slug
106+16:19 tight glyph =
107+16:20 tight aura @ta
108+16:24 glyph %/
109+16:26 tight knot blog
110+16:30 tight glyph /
111+16:31 tight glyph (
112+16:32 tight name slug
113+16:36 tight glyph )
114+17:1 NEWLINE
115+17:1 glyph ++
116+17:4 name bad-head
117+17:13 glyph ^-
118+17:16 name qath
119+17:21 glyph [
120+17:22 tight lit ~zod
121+17:27 lit ~
122+17:28 tight glyph ]
123+18:1 NEWLINE
124+18:1 glyph ++
125+18:4 name bad-tail
126+18:13 glyph ^-
127+18:16 name qath
128+18:21 glyph [
129+18:22 tight lit ~.blog
130+18:29 lit ~zod
131+18:33 tight glyph ]
132+19:1 NEWLINE
133+19:1 glyph ++
134+19:4 name bad-face
135+19:13 glyph ^-
136+19:16 name qath
137+19:21 glyph [
138+19:22 tight name wrong
139+19:27 tight glyph =
140+19:28 tight lit ~.blog
141+19:35 name t
142+19:36 tight glyph =
143+19:37 tight lit ~
144+19:38 tight glyph ]
145+19:39 NEWLINE
tests/golden/types-qath-recursive/tree.txtnew file+63
@@ -0,0 +1,63 @@
1+(module
2+ (value 1:1 empty
3+ (cast 1:10 (ref 1:13 qath) (lit 1:18 ~)))
4+ (value 2:1 one
5+ (cast 2:8
6+ (ref 2:11 qath)
7+ (tuple 2:16 (lit 2:17 ~.blog) (lit 2:24 ~))))
8+ (value 3:1 named
9+ (cast 3:10
10+ (ref 3:13 qath)
11+ (tuple 3:18
12+ (face 3:19 i (lit 3:21 ~.blog))
13+ (face 3:28 t (lit 3:30 ~)))))
14+ (value 4:1 nested
15+ (cast 4:11
16+ (ref 4:14 qath)
17+ (tuple 4:19
18+ (lit 4:20 ~.blog)
19+ (tuple 4:27 (lit 4:28 ~.post) (lit 4:35 ~)))))
20+ (value 5:1 identity
21+ (gate 5:13
22+ (face 5:16 x (ref 5:18 qath))
23+ (wing 5:23 x)))
24+ (value 6:1 first
25+ (gate 6:10
26+ (face 6:13 x (ref 6:15 qath))
27+ (body 7:3
28+ (branch 7:3
29+ (wing 7:6 x)
30+ (arm 8:5 (lit 8:5 ~) (lit 8:7 ~.none))
31+ (arm 9:5
32+ (cell 9:5 (bind 9:6 piece) (bind 9:12 remainder))
33+ (wing 9:23 piece))))))
34+ (value 10:1 rest
35+ (gate 10:9
36+ (face 10:12 x (ref 10:14 qath))
37+ (body 11:3
38+ (branch 11:3
39+ (wing 11:6 x)
40+ (arm 12:5 (lit 12:5 ~) (wing 12:7 x))
41+ (arm 13:5
42+ (cell 13:5 (bind 13:6 piece) (bind 13:12 remainder))
43+ (wing 13:23 remainder))))))
44+ (value 14:1 literal (qath 14:12 blog post))
45+ (value 15:1 root (qath 15:9))
46+ (value 16:1 dynamic
47+ (gate 16:12
48+ (face 16:15 slug (aura 16:20 @ta))
49+ (qath 16:24 blog (wing 16:32 slug))))
50+ (value 17:1 bad-head
51+ (cast 17:13
52+ (ref 17:16 qath)
53+ (tuple 17:21 (lit 17:22 ~zod) (lit 17:27 ~))))
54+ (value 18:1 bad-tail
55+ (cast 18:13
56+ (ref 18:16 qath)
57+ (tuple 18:21 (lit 18:22 ~.blog) (lit 18:29 ~zod))))
58+ (value 19:1 bad-face
59+ (cast 19:13
60+ (ref 19:16 qath)
61+ (tuple 19:21
62+ (face 19:22 wrong (lit 19:28 ~.blog))
63+ (face 19:35 t (lit 19:37 ~))))))
tests/golden/types-qath-recursive/types.txtnew file+14
@@ -0,0 +1,14 @@
1+partial inference; module not checked
2+++ empty: qath
3+++ one: qath
4+++ named: qath
5+++ nested: qath
6+++ identity: $-(qath qath)
7+++ first: $-(qath @ta)
8+++ rest: $-(qath qath)
9+++ literal: qath
10+++ root: qath
11+++ dynamic: application path segments need unsupported inference
12+++ bad-head: recursive mold cell does not fit its source shape
13+++ bad-tail: recursive mold cell constraint needs unsupported inference
14+++ bad-face: recursive mold cell does not fit its source shape
tests/golden/types-record-change-generic/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Molds: "Type variables are capitals, generalized per `++`"; Modules: no name may shadow one already in scope.
2−tests: A replacement preserves shared generic field variables; forcing a written capital concrete stays unsupported and a mismatched replacement reports both sites. Unrelated tags and invalid expressions stay visible; repeated edits and ambiguous faces fail closed.
2+tests: A replacement preserves shared generic field variables; forcing a written capital concrete stays unsupported and a mismatched replacement reports both sites. Unrelated tags and invalid expressions stay visible; repeated edits fail closed.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-record-change-generic/source.jibb−2
@@ -7,5 +7,3 @@
77 ~& %orphan
88 s(value=v)
99++ invalid-value |= [s=(box @t) v=@t] s(value=missing)
10−+$ ambiguous [same=@t same=@p]
11−++ ambiguous-field |= s=ambiguous s(same="x")
tests/golden/types-record-change-generic/tokens.txt+1−25
@@ -142,28 +142,4 @@
1421429:46 tight glyph =
1431439:47 tight name missing
1441449:54 tight glyph )
145−10:1 NEWLINE
146−10:1 glyph +$
147−10:4 name ambiguous
148−10:14 glyph [
149−10:15 tight name same
150−10:19 tight glyph =
151−10:20 tight aura @t
152−10:23 name same
153−10:27 tight glyph =
154−10:28 tight aura @p
155−10:30 tight glyph ]
156−11:1 NEWLINE
157−11:1 glyph ++
158−11:4 name ambiguous-field
159−11:20 glyph |=
160−11:23 name s
161−11:24 tight glyph =
162−11:25 tight name ambiguous
163−11:35 name s
164−11:36 tight glyph (
165−11:37 tight name same
166−11:41 tight glyph =
167−11:42 tight str "x"
168−11:45 tight glyph )
169−11:46 NEWLINE
145+9:55 NEWLINE
tests/golden/types-record-change-generic/tree.txt+1−10
@@ -54,13 +54,4 @@
5454 (apply 9:24 box (aura 9:29 @t)))
5555 (face 9:33 v (aura 9:35 @t)))
5656 (change 9:39 s
57− (edit 9:41 value (wing 9:47 missing)))))
58− (mold 10:1 ambiguous
59− (cell 10:14
60− (face 10:15 same (aura 10:20 @t))
61− (face 10:23 same (aura 10:28 @p))))
62− (value 11:1 ambiguous-field
63− (gate 11:20
64− (face 11:23 s (ref 11:25 ambiguous))
65− (change 11:35 s
66− (edit 11:37 same (str 11:42 "x"))))))
57+ (edit 9:41 value (wing 9:47 missing))))))
tests/golden/types-record-change-generic/types.txt−2
@@ -12,5 +12,3 @@ partial inference; module not checked
1212++ duplicate: repeated change fields are not supported by partial inference
1313++ unrelated: tag needs context in partial inference
1414++ invalid-value: name is not available to partial inference
15−+$ ambiguous: not checked
16−++ ambiguous-field: change field is ambiguous in partial inference
tests/golden/types-record-field-edit-separate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: Edits of distinct nested records preserve independent scopes.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-edit-separate/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ edit |= x=[left=[value=@t other=?] right=[value=@p other=?]] x(left=[value="a" other=%.y] right=[value=~zod other=%.n])
tests/golden/types-record-field-edit-separate/tokens.txtnew file+51
@@ -0,0 +1,51 @@
1+1:1 glyph ++
2+1:4 name edit
3+1:9 glyph |=
4+1:12 name x
5+1:13 tight glyph =
6+1:14 tight glyph [
7+1:15 tight name left
8+1:19 tight glyph =
9+1:20 tight glyph [
10+1:21 tight name value
11+1:26 tight glyph =
12+1:27 tight aura @t
13+1:30 name other
14+1:35 tight glyph =
15+1:36 tight glyph ?
16+1:37 tight glyph ]
17+1:39 name right
18+1:44 tight glyph =
19+1:45 tight glyph [
20+1:46 tight name value
21+1:51 tight glyph =
22+1:52 tight aura @p
23+1:55 name other
24+1:60 tight glyph =
25+1:61 tight glyph ?
26+1:62 tight glyph ]
27+1:63 tight glyph ]
28+1:65 name x
29+1:66 tight glyph (
30+1:67 tight name left
31+1:71 tight glyph =
32+1:72 tight glyph [
33+1:73 tight name value
34+1:78 tight glyph =
35+1:79 tight str "a"
36+1:83 name other
37+1:88 tight glyph =
38+1:89 tight lit %.y
39+1:92 tight glyph ]
40+1:94 name right
41+1:99 tight glyph =
42+1:100 tight glyph [
43+1:101 tight name value
44+1:106 tight glyph =
45+1:107 tight lit ~zod
46+1:112 name other
47+1:117 tight glyph =
48+1:118 tight lit %.n
49+1:121 tight glyph ]
50+1:122 tight glyph )
51+1:123 NEWLINE
tests/golden/types-record-field-edit-separate/tree.txtnew file+22
@@ -0,0 +1,22 @@
1+(module
2+ (value 1:1 edit
3+ (gate 1:9
4+ (face 1:12 x
5+ (cell 1:14
6+ (face 1:15 left
7+ (cell 1:20
8+ (face 1:21 value (aura 1:27 @t))
9+ (face 1:30 other (flag 1:36))))
10+ (face 1:39 right
11+ (cell 1:45
12+ (face 1:46 value (aura 1:52 @p))
13+ (face 1:55 other (flag 1:61))))))
14+ (change 1:65 x
15+ (edit 1:67 left
16+ (tuple 1:72
17+ (face 1:73 value (str 1:79 "a"))
18+ (face 1:83 other (lit 1:89 %.y))))
19+ (edit 1:94 right
20+ (tuple 1:100
21+ (face 1:101 value (lit 1:107 ~zod))
22+ (face 1:112 other (lit 1:118 %.n))))))))
tests/golden/types-record-field-edit-separate/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ edit: $-([left=[value=@t other=?] right=[value=@p other=?]] [left=[value=@t other=?] right=[value=@p other=?]])
tests/golden/types-record-field-expr-duplicate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: A record expression with repeated faces is rejected even when another definition is valid.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-expr-duplicate/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+++ good [value="ok" flag=%.y]
2+++ bad [value="one" value="two"]
tests/golden/types-record-field-expr-duplicate/tokens.txtnew file+22
@@ -0,0 +1,22 @@
1+1:1 glyph ++
2+1:4 name good
3+1:9 glyph [
4+1:10 tight name value
5+1:15 tight glyph =
6+1:16 tight str "ok"
7+1:21 name flag
8+1:25 tight glyph =
9+1:26 tight lit %.y
10+1:29 tight glyph ]
11+2:1 NEWLINE
12+2:1 glyph ++
13+2:4 name bad
14+2:8 glyph [
15+2:9 tight name value
16+2:14 tight glyph =
17+2:15 tight str "one"
18+2:21 name value
19+2:26 tight glyph =
20+2:27 tight str "two"
21+2:32 tight glyph ]
22+2:33 NEWLINE
tests/golden/types-record-field-expr-duplicate/tree.txtnew file+9
@@ -0,0 +1,9 @@
1+(module
2+ (value 1:1 good
3+ (tuple 1:9
4+ (face 1:10 value (str 1:16 "ok"))
5+ (face 1:21 flag (lit 1:26 %.y))))
6+ (value 2:1 bad
7+ (tuple 2:8
8+ (face 2:9 value (str 2:15 "one"))
9+ (face 2:21 value (str 2:27 "two")))))
tests/golden/types-record-field-expr-duplicate/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `value` is repeated
3+/tests/golden/types-record-field-expr-duplicate/source.jibb:2:9: first field
4+++ bad [value="one" value="two"]
5+ ^
6+/tests/golden/types-record-field-expr-duplicate/source.jibb:2:21: repeated field
7+++ bad [value="one" value="two"]
8+ ^
tests/golden/types-record-field-expr-separate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: Sibling nested record expressions may use the same face spelling.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-expr-separate/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ okay [left=[value="text" yes=%.y] right=[value=~zod yes=%.n]]
tests/golden/types-record-field-expr-separate/tokens.txtnew file+25
@@ -0,0 +1,25 @@
1+1:1 glyph ++
2+1:4 name okay
3+1:9 glyph [
4+1:10 tight name left
5+1:14 tight glyph =
6+1:15 tight glyph [
7+1:16 tight name value
8+1:21 tight glyph =
9+1:22 tight str "text"
10+1:29 name yes
11+1:32 tight glyph =
12+1:33 tight lit %.y
13+1:36 tight glyph ]
14+1:38 name right
15+1:43 tight glyph =
16+1:44 tight glyph [
17+1:45 tight name value
18+1:50 tight glyph =
19+1:51 tight lit ~zod
20+1:56 name yes
21+1:59 tight glyph =
22+1:60 tight lit %.n
23+1:63 tight glyph ]
24+1:64 tight glyph ]
25+1:65 NEWLINE
tests/golden/types-record-field-expr-separate/tree.txtnew file+11
@@ -0,0 +1,11 @@
1+(module
2+ (value 1:1 okay
3+ (tuple 1:9
4+ (face 1:10 left
5+ (tuple 1:15
6+ (face 1:16 value (str 1:22 "text"))
7+ (face 1:29 yes (lit 1:33 %.y))))
8+ (face 1:38 right
9+ (tuple 1:44
10+ (face 1:45 value (lit 1:51 ~zod))
11+ (face 1:56 yes (lit 1:60 %.n)))))))
tests/golden/types-record-field-expr-separate/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ okay: [left=[value=@t yes=?] right=[value=@p yes=?]]
tests/golden/types-record-field-module-reachable/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds; Imports: record fields are distinct within each record scope.
2+tests: A reachable module rejects an unused duplicate-faced mold and retains its own source sites.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-module-reachable/module-trees.txtnew file+7
@@ -0,0 +1,7 @@
1+/ui/lib.jibb
2+(module
3+ (mold 1:1 unused
4+ (cell 1:11
5+ (face 1:12 value (aura 1:18 @t))
6+ (face 1:21 value (aura 1:27 @p))))
7+ (value 2:1 item (str 2:9 "hello")))
tests/golden/types-record-field-module-reachable/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/types-record-field-module-reachable/modules/ui/lib.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ unused [value=@t value=@p]
2+++ item "hello"
tests/golden/types-record-field-module-reachable/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ use item.lib
tests/golden/types-record-field-module-reachable/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:4 name lib
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name use
10+2:8 wing item.lib
11+2:16 NEWLINE
tests/golden/types-record-field-module-reachable/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 use (wing 2:8 item.lib)))
tests/golden/types-record-field-module-reachable/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `value` is repeated
3+/ui/lib.jibb:1:12: first field
4++$ unused [value=@t value=@p]
5+ ^
6+/ui/lib.jibb:1:21: repeated field
7++$ unused [value=@t value=@p]
8+ ^
tests/golden/types-record-field-module-unused/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds; Imports: record fields are distinct within each record scope.
2+tests: An unreferenced module fixture does not affect a valid imported module.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-module-unused/module-trees.txtnew file+10
@@ -0,0 +1,10 @@
1+/ui/good.jibb
2+(module
3+ (value 1:1 item (str 1:9 "hello")))
4+/ui/unused.jibb
5+(module
6+ (mold 1:1 unused
7+ (cell 1:11
8+ (face 1:12 value (aura 1:18 @t))
9+ (face 1:21 value (aura 1:27 @p))))
10+ (value 2:1 item (str 2:9 "hello")))
tests/golden/types-record-field-module-unused/modules.txtnew file+2
@@ -0,0 +1,2 @@
1+/ui/good.jibb
2+/ui/unused.jibb
tests/golden/types-record-field-module-unused/modules/ui/good.jibbnew file+1
@@ -0,0 +1 @@
1+++ item "hello"
tests/golden/types-record-field-module-unused/modules/ui/unused.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ unused [value=@t value=@p]
2+++ item "hello"
tests/golden/types-record-field-module-unused/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= good /ui/good
2+++ use item.good
tests/golden/types-record-field-module-unused/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:4 name good
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot good
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name use
10+2:8 wing item.good
11+2:17 NEWLINE
tests/golden/types-record-field-module-unused/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 good /ui/good)
3+ (value 2:1 use (wing 2:8 item.good)))
tests/golden/types-record-field-module-unused/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ use: @t
tests/golden/types-record-field-nested-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: A repeated face within a nested record is rejected at both sites.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-nested-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ broken [outer=[value=@t value=@p] tag=@t]
2+++ value "ok"
tests/golden/types-record-field-nested-mold/tokens.txtnew file+22
@@ -0,0 +1,22 @@
1+1:1 glyph +$
2+1:4 name broken
3+1:11 glyph [
4+1:12 tight name outer
5+1:17 tight glyph =
6+1:18 tight glyph [
7+1:19 tight name value
8+1:24 tight glyph =
9+1:25 tight aura @t
10+1:28 name value
11+1:33 tight glyph =
12+1:34 tight aura @p
13+1:36 tight glyph ]
14+1:38 name tag
15+1:41 tight glyph =
16+1:42 tight aura @t
17+1:44 tight glyph ]
18+2:1 NEWLINE
19+2:1 glyph ++
20+2:4 name value
21+2:10 str "ok"
22+2:14 NEWLINE
tests/golden/types-record-field-nested-mold/tree.txtnew file+9
@@ -0,0 +1,9 @@
1+(module
2+ (mold 1:1 broken
3+ (cell 1:11
4+ (face 1:12 outer
5+ (cell 1:18
6+ (face 1:19 value (aura 1:25 @t))
7+ (face 1:28 value (aura 1:34 @p))))
8+ (face 1:38 tag (aura 1:42 @t))))
9+ (value 2:1 value (str 2:10 "ok")))
tests/golden/types-record-field-nested-mold/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `value` is repeated
3+/tests/golden/types-record-field-nested-mold/source.jibb:1:19: first field
4++$ broken [outer=[value=@t value=@p] tag=@t]
5+ ^
6+/tests/golden/types-record-field-nested-mold/source.jibb:1:28: repeated field
7++$ broken [outer=[value=@t value=@p] tag=@t]
8+ ^
tests/golden/types-record-field-outer-inner/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: A parent record and its nested child may use the same face spelling.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-outer-inner/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ fine [value=@t nested=[value=@p other=?]]
2+++ identity |= x=fine x
tests/golden/types-record-field-outer-inner/tokens.txtnew file+26
@@ -0,0 +1,26 @@
1+1:1 glyph +$
2+1:4 name fine
3+1:9 glyph [
4+1:10 tight name value
5+1:15 tight glyph =
6+1:16 tight aura @t
7+1:19 name nested
8+1:25 tight glyph =
9+1:26 tight glyph [
10+1:27 tight name value
11+1:32 tight glyph =
12+1:33 tight aura @p
13+1:36 name other
14+1:41 tight glyph =
15+1:42 tight glyph ?
16+1:43 tight glyph ]
17+1:44 tight glyph ]
18+2:1 NEWLINE
19+2:1 glyph ++
20+2:4 name identity
21+2:13 glyph |=
22+2:16 name x
23+2:17 tight glyph =
24+2:18 tight name fine
25+2:23 name x
26+2:24 NEWLINE
tests/golden/types-record-field-outer-inner/tree.txtnew file+12
@@ -0,0 +1,12 @@
1+(module
2+ (mold 1:1 fine
3+ (cell 1:9
4+ (face 1:10 value (aura 1:16 @t))
5+ (face 1:19 nested
6+ (cell 1:26
7+ (face 1:27 value (aura 1:33 @p))
8+ (face 1:36 other (flag 1:42))))))
9+ (value 2:1 identity
10+ (gate 2:13
11+ (face 2:16 x (ref 2:18 fine))
12+ (wing 2:23 x))))
tests/golden/types-record-field-outer-inner/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2++$ fine: not checked
3+++ identity: $-([value=@t nested=[value=@p other=?]] [value=@t nested=[value=@p other=?]])
tests/golden/types-record-field-sample-duplicate/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: A faced gate sample with repeated fields is rejected at both sites.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-sample-duplicate/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ invalid |= [value=@t value=@p] value
tests/golden/types-record-field-sample-duplicate/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph ++
2+1:4 name invalid
3+1:12 glyph |=
4+1:15 glyph [
5+1:16 tight name value
6+1:21 tight glyph =
7+1:22 tight aura @t
8+1:25 name value
9+1:30 tight glyph =
10+1:31 tight aura @p
11+1:33 tight glyph ]
12+1:35 name value
13+1:40 NEWLINE
tests/golden/types-record-field-sample-duplicate/tree.txtnew file+7
@@ -0,0 +1,7 @@
1+(module
2+ (value 1:1 invalid
3+ (gate 1:12
4+ (cell 1:15
5+ (face 1:16 value (aura 1:22 @t))
6+ (face 1:25 value (aura 1:31 @p)))
7+ (wing 1:35 value))))
tests/golden/types-record-field-sample-duplicate/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `value` is repeated
3+/tests/golden/types-record-field-sample-duplicate/source.jibb:1:16: first field
4+++ invalid |= [value=@t value=@p] value
5+ ^
6+/tests/golden/types-record-field-sample-duplicate/source.jibb:1:25: repeated field
7+++ invalid |= [value=@t value=@p] value
8+ ^
tests/golden/types-record-field-separate-molds/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: Repeated spellings in distinct nested record scopes remain valid.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-separate-molds/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ fine [left=[value=@t count=@ud] right=[value=@p count=?]]
2+++ identity |= x=fine x
tests/golden/types-record-field-separate-molds/tokens.txtnew file+33
@@ -0,0 +1,33 @@
1+1:1 glyph +$
2+1:4 name fine
3+1:9 glyph [
4+1:10 tight name left
5+1:14 tight glyph =
6+1:15 tight glyph [
7+1:16 tight name value
8+1:21 tight glyph =
9+1:22 tight aura @t
10+1:25 name count
11+1:30 tight glyph =
12+1:31 tight aura @ud
13+1:34 tight glyph ]
14+1:36 name right
15+1:41 tight glyph =
16+1:42 tight glyph [
17+1:43 tight name value
18+1:48 tight glyph =
19+1:49 tight aura @p
20+1:52 name count
21+1:57 tight glyph =
22+1:58 tight glyph ?
23+1:59 tight glyph ]
24+1:60 tight glyph ]
25+2:1 NEWLINE
26+2:1 glyph ++
27+2:4 name identity
28+2:13 glyph |=
29+2:16 name x
30+2:17 tight glyph =
31+2:18 tight name fine
32+2:23 name x
33+2:24 NEWLINE
tests/golden/types-record-field-separate-molds/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (mold 1:1 fine
3+ (cell 1:9
4+ (face 1:10 left
5+ (cell 1:15
6+ (face 1:16 value (aura 1:22 @t))
7+ (face 1:25 count (aura 1:31 @ud))))
8+ (face 1:36 right
9+ (cell 1:42
10+ (face 1:43 value (aura 1:49 @p))
11+ (face 1:52 count (flag 1:58))))))
12+ (value 2:1 identity
13+ (gate 2:13
14+ (face 2:16 x (ref 2:18 fine))
15+ (wing 2:23 x))))
tests/golden/types-record-field-separate-molds/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2++$ fine: not checked
3+++ identity: $-([left=[value=@t count=@ud] right=[value=@p count=?]] [left=[value=@t count=@ud] right=[value=@p count=?]])
tests/golden/types-record-field-unused-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Types and molds: record fields have distinct names in each record scope.
2+tests: An unused named mold with repeated faces is rejected at both field sites.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-record-field-unused-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ unused [name=@t name=@p]
2+++ value "ok"
tests/golden/types-record-field-unused-mold/tokens.txtnew file+15
@@ -0,0 +1,15 @@
1+1:1 glyph +$
2+1:4 name unused
3+1:11 glyph [
4+1:12 tight name name
5+1:16 tight glyph =
6+1:17 tight aura @t
7+1:20 name name
8+1:24 tight glyph =
9+1:25 tight aura @p
10+1:27 tight glyph ]
11+2:1 NEWLINE
12+2:1 glyph ++
13+2:4 name value
14+2:10 str "ok"
15+2:14 NEWLINE
tests/golden/types-record-field-unused-mold/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (mold 1:1 unused
3+ (cell 1:11
4+ (face 1:12 name (aura 1:17 @t))
5+ (face 1:20 name (aura 1:25 @p))))
6+ (value 2:1 value (str 2:10 "ok")))
tests/golden/types-record-field-unused-mold/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+record field `name` is repeated
3+/tests/golden/types-record-field-unused-mold/source.jibb:1:12: first field
4++$ unused [name=@t name=@p]
5+ ^
6+/tests/golden/types-record-field-unused-mold/source.jibb:1:20: repeated field
7++$ unused [name=@t name=@p]
8+ ^
tests/golden/types-tuple-context-nested/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Literals by context: tags and null take their type from context; Molds: faces are part of record types and distinct specific auras do not unify.
2−tests: Context passes through nested faced records to union tags, lists and case constructors. Wrong tags, faces, counts, later list items, repeated generic parameters and constructors fail with sites. An unknown callee and unrelated pending tag or null remain unresolved.
2+tests: Context passes through nested faced records to union tags, lists and case constructors. Wrong tags, faces, counts, later list items, repeated generic parameters and constructors fail with sites where a mismatch is proved. The extra-field case now reports unsupported: the partial checker cannot prove a cell-shaped tail cannot fit a list. An unknown callee and unrelated pending tag or null remain unresolved.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-tuple-context-nested/types.txt+1−7
@@ -16,13 +16,7 @@ partial inference; module not checked
1616/tests/golden/types-tuple-context-nested/source.jibb:7:19: argument
1717++ bad-face (take [wrong=%go xs=~])
1818 ^
19−++ extra: call's sample and argument types do not unify
20−/tests/golden/types-tuple-context-nested/source.jibb:8:11: called gate
21−++ extra (take [payload=%go xs=~ extra="x"])
22− ^
23−/tests/golden/types-tuple-context-nested/source.jibb:8:16: argument
24−++ extra (take [payload=%go xs=~ extra="x"])
25− ^
19+++ extra: record width constraint needs unsupported inference
2620++ nest: $-([data=[payload=msg xs=(list @t)] z=@p] [data=[payload=msg xs=(list @t)] z=@p])
2721++ nested: [data=[payload=msg xs=(list @t)] z=@p]
2822++ unconstrained: `~` needs context in partial inference
tests/golden/types-union-nonwing-subject/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, pattern matching: branch subjects can be expressions, and known union cases support coverage and contextual result checking.
2+tests: Grouped and call subjects are inferred once before matching, including finite loobean refinements and a shared generic substitution. Wrong tags, missing and dead arms, shadowing, pending subject and body literals, unknown subjects, explicit capitals and call errors retain their appropriate failures. Deeply nested calls remain unsupported. The module report is partial.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-union-nonwing-subject/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no modules
tests/golden/types-union-nonwing-subject/source.jibbnew file+82
@@ -0,0 +1,82 @@
1++$ input
2+ [%item flag=? text=@t]
3+ %none
4++$ result
5+ %good
6+ %empty
7+++ local-id |= x x
8+++ passthrough |= x=input x
9+++ grouped |= x=input ^- (list @t)
10+ ?- (x)
11+ [%item flag text] ~[text]
12+ %none ~
13+++ call |= x=input ^- (list @t)
14+ ?- (local-id x)
15+ [%item flag text] ~[text]
16+ %none ~
17+++ nested |= x=input ^- result
18+ ?- (local-id (passthrough x))
19+ [%item flag text] %good
20+ %none %empty
21+++ finite |= x=input ^- (list @t)
22+ ?- (local-id x)
23+ [%item %.y text] ~[text]
24+ [%item %.n text] ~[]
25+ %none ~
26+++ wrong |= x=input ^- result
27+ ?- (local-id x)
28+ [%item flag text] %missing
29+ %none %empty
30+++ missing |= x=input ^- (list @t)
31+ ?- (local-id x)
32+ %none ~
33+++ dead |= x=input ^- (list @t)
34+ ?- (local-id x)
35+ %none ~
36+ %none ~
37+ [%item flag text] ~[text]
38+++ shadow |= x=input ^- result
39+ ?- (local-id x)
40+ [%item flag same] %good
41+ %none %empty
42+++ pending |= x=input ^- result
43+ ~& %dangling
44+ ?- (local-id x)
45+ [%item flag text] %good
46+ %none %empty
47+++ unknown |= x ^- (list @t)
48+ ?- (local-id x)
49+ [%item flag text] ~[text]
50+ %none ~
51+++ nonunion |= x=@t ^- (list @t)
52+ ?- (local-id x)
53+ [%item flag text] ~[text]
54+ %none ~
55+++ explicit |= [x=input y=A] ^- (list A)
56+ ?- (local-id x)
57+ [%item flag text] ~["text"]
58+ %none ~
59++$ payload |$ [A]
60+ [%present value=A]
61+ %none
62+++ shared |= [x=(payload A) y=A] ^- (list A)
63+ ?- (local-id x)
64+ [%present v] ~[y v]
65+ %none ~
66+++ bad-subject |= x=input ^- result
67+ ?- (passthrough "wrong")
68+ [%item flag text] %missing
69+ %none %empty
70+++ first-of |= [a b] a
71+++ pending-subject |= x=input ^- result
72+ ?- (first-of x %dangling)
73+ [%item flag text] %good
74+ %none %empty
75+++ duplicate-flag-subject |= x=@t ^- (list @t)
76+ ?- (passthrough x)
77+ %.y ~[]
78+ %.y ~[]
79+++ bad-unit-subject |= x=@t ^- (list @t)
80+ ?- (passthrough x)
81+ ~ ~[]
82+ [~ value] ~[]
tests/golden/types-union-nonwing-subject/tokens.txtnew file+593
@@ -0,0 +1,593 @@
1+1:1 glyph +$
2+1:4 name input
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %item
6+2:10 name flag
7+2:14 tight glyph =
8+2:15 tight glyph ?
9+2:17 name text
10+2:21 tight glyph =
11+2:22 tight aura @t
12+2:24 tight glyph ]
13+3:3 NEWLINE
14+3:3 lit %none
15+4:1 DEDENT
16+4:1 NEWLINE
17+4:1 glyph +$
18+4:4 name result
19+5:3 INDENT
20+5:3 lit %good
21+6:3 NEWLINE
22+6:3 lit %empty
23+7:1 DEDENT
24+7:1 NEWLINE
25+7:1 glyph ++
26+7:4 name local-id
27+7:13 glyph |=
28+7:16 name x
29+7:18 name x
30+8:1 NEWLINE
31+8:1 glyph ++
32+8:4 name passthrough
33+8:16 glyph |=
34+8:19 name x
35+8:20 tight glyph =
36+8:21 tight name input
37+8:27 name x
38+9:1 NEWLINE
39+9:1 glyph ++
40+9:4 name grouped
41+9:12 glyph |=
42+9:15 name x
43+9:16 tight glyph =
44+9:17 tight name input
45+9:23 glyph ^-
46+9:26 glyph (
47+9:27 tight name list
48+9:32 aura @t
49+9:34 tight glyph )
50+10:3 INDENT
51+10:3 glyph ?-
52+10:6 glyph (
53+10:7 tight name x
54+10:8 tight glyph )
55+11:5 INDENT
56+11:5 glyph [
57+11:6 tight lit %item
58+11: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 ]
64+12:5 NEWLINE
65+12:5 lit %none
66+12:11 lit ~
67+13:1 DEDENT
68+13:1 DEDENT
69+13:1 NEWLINE
70+13:1 glyph ++
71+13:4 name call
72+13:9 glyph |=
73+13:12 name x
74+13:13 tight glyph =
75+13:14 tight name input
76+13:20 glyph ^-
77+13:23 glyph (
78+13:24 tight name list
79+13:29 aura @t
80+13:31 tight glyph )
81+14:3 INDENT
82+14:3 glyph ?-
83+14:6 glyph (
84+14:7 tight name local-id
85+14:16 name x
86+14:17 tight glyph )
87+15:5 INDENT
88+15:5 glyph [
89+15:6 tight lit %item
90+15: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 ]
96+16:5 NEWLINE
97+16:5 lit %none
98+16:11 lit ~
99+17:1 DEDENT
100+17:1 DEDENT
101+17:1 NEWLINE
102+17:1 glyph ++
103+17:4 name nested
104+17:11 glyph |=
105+17:14 name x
106+17:15 tight glyph =
107+17:16 tight name input
108+17:22 glyph ^-
109+17:25 name result
110+18:3 INDENT
111+18:3 glyph ?-
112+18:6 glyph (
113+18:7 tight name local-id
114+18:16 glyph (
115+18:17 tight name passthrough
116+18:29 name x
117+18:30 tight glyph )
118+18:31 tight glyph )
119+19:5 INDENT
120+19:5 glyph [
121+19:6 tight lit %item
122+19:12 name flag
123+19:17 name text
124+19:21 tight glyph ]
125+19:23 lit %good
126+20:5 NEWLINE
127+20:5 lit %none
128+20:11 lit %empty
129+21:1 DEDENT
130+21:1 DEDENT
131+21:1 NEWLINE
132+21:1 glyph ++
133+21:4 name finite
134+21:11 glyph |=
135+21:14 name x
136+21:15 tight glyph =
137+21:16 tight name input
138+21:22 glyph ^-
139+21:25 glyph (
140+21:26 tight name list
141+21:31 aura @t
142+21:33 tight glyph )
143+22:3 INDENT
144+22:3 glyph ?-
145+22:6 glyph (
146+22:7 tight name local-id
147+22:16 name x
148+22:17 tight glyph )
149+23:5 INDENT
150+23:5 glyph [
151+23:6 tight lit %item
152+23: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 ]
158+24:5 NEWLINE
159+24:5 glyph [
160+24:6 tight lit %item
161+24:12 lit %.n
162+24:16 name text
163+24:20 tight glyph ]
164+24:22 glyph ~[
165+24:24 tight glyph ]
166+25:5 NEWLINE
167+25:5 lit %none
168+25:11 lit ~
169+26:1 DEDENT
170+26:1 DEDENT
171+26:1 NEWLINE
172+26:1 glyph ++
173+26:4 name wrong
174+26:10 glyph |=
175+26:13 name x
176+26:14 tight glyph =
177+26:15 tight name input
178+26:21 glyph ^-
179+26:24 name result
180+27:3 INDENT
181+27:3 glyph ?-
182+27:6 glyph (
183+27:7 tight name local-id
184+27:16 name x
185+27:17 tight glyph )
186+28:5 INDENT
187+28:5 glyph [
188+28:6 tight lit %item
189+28:12 name flag
190+28:17 name text
191+28:21 tight glyph ]
192+28:23 lit %missing
193+29:5 NEWLINE
194+29:5 lit %none
195+29:11 lit %empty
196+30:1 DEDENT
197+30:1 DEDENT
198+30:1 NEWLINE
199+30:1 glyph ++
200+30:4 name missing
201+30:12 glyph |=
202+30:15 name x
203+30:16 tight glyph =
204+30:17 tight name input
205+30:23 glyph ^-
206+30:26 glyph (
207+30:27 tight name list
208+30:32 aura @t
209+30:34 tight glyph )
210+31:3 INDENT
211+31:3 glyph ?-
212+31:6 glyph (
213+31:7 tight name local-id
214+31:16 name x
215+31:17 tight glyph )
216+32:5 INDENT
217+32:5 lit %none
218+32:11 lit ~
219+33:1 DEDENT
220+33:1 DEDENT
221+33:1 NEWLINE
222+33:1 glyph ++
223+33:4 name dead
224+33:9 glyph |=
225+33:12 name x
226+33:13 tight glyph =
227+33:14 tight name input
228+33:20 glyph ^-
229+33:23 glyph (
230+33:24 tight name list
231+33:29 aura @t
232+33:31 tight glyph )
233+34:3 INDENT
234+34:3 glyph ?-
235+34:6 glyph (
236+34:7 tight name local-id
237+34:16 name x
238+34:17 tight glyph )
239+35:5 INDENT
240+35:5 lit %none
241+35:11 lit ~
242+36:5 NEWLINE
243+36:5 lit %none
244+36:11 lit ~
245+37:5 NEWLINE
246+37:5 glyph [
247+37:6 tight lit %item
248+37: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 ]
254+38:1 DEDENT
255+38:1 DEDENT
256+38:1 NEWLINE
257+38:1 glyph ++
258+38:4 name shadow
259+38:11 glyph |=
260+38:14 name x
261+38:15 tight glyph =
262+38:16 tight name input
263+38:22 glyph ^-
264+38:25 name result
265+39:3 INDENT
266+39:3 glyph ?-
267+39:6 glyph (
268+39:7 tight name local-id
269+39:16 name x
270+39:17 tight glyph )
271+40:5 INDENT
272+40:5 glyph [
273+40:6 tight lit %item
274+40:12 name flag
275+40:17 name same
276+40:21 tight glyph ]
277+40:23 lit %good
278+41:5 NEWLINE
279+41:5 lit %none
280+41:11 lit %empty
281+42:1 DEDENT
282+42:1 DEDENT
283+42:1 NEWLINE
284+42:1 glyph ++
285+42:4 name pending
286+42:12 glyph |=
287+42:15 name x
288+42:16 tight glyph =
289+42:17 tight name input
290+42:23 glyph ^-
291+42:26 name result
292+43:3 INDENT
293+43:3 glyph ~&
294+43:6 lit %dangling
295+44:5 INDENT
296+44:5 glyph ?-
297+44:8 glyph (
298+44:9 tight name local-id
299+44:18 name x
300+44:19 tight glyph )
301+45:7 INDENT
302+45:7 glyph [
303+45:8 tight lit %item
304+45:14 name flag
305+45:19 name text
306+45:23 tight glyph ]
307+45:25 lit %good
308+46:7 NEWLINE
309+46:7 lit %none
310+46:13 lit %empty
311+47:1 DEDENT
312+47:1 DEDENT
313+47:1 DEDENT
314+47:1 NEWLINE
315+47:1 glyph ++
316+47:4 name unknown
317+47:12 glyph |=
318+47:15 name x
319+47:17 glyph ^-
320+47:20 glyph (
321+47:21 tight name list
322+47:26 aura @t
323+47:28 tight glyph )
324+48:3 INDENT
325+48:3 glyph ?-
326+48:6 glyph (
327+48:7 tight name local-id
328+48:16 name x
329+48:17 tight glyph )
330+49:5 INDENT
331+49:5 glyph [
332+49:6 tight lit %item
333+49: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 ]
339+50:5 NEWLINE
340+50:5 lit %none
341+50:11 lit ~
342+51:1 DEDENT
343+51:1 DEDENT
344+51:1 NEWLINE
345+51:1 glyph ++
346+51:4 name nonunion
347+51:13 glyph |=
348+51:16 name x
349+51:17 tight glyph =
350+51:18 tight aura @t
351+51:21 glyph ^-
352+51:24 glyph (
353+51:25 tight name list
354+51:30 aura @t
355+51:32 tight glyph )
356+52:3 INDENT
357+52:3 glyph ?-
358+52:6 glyph (
359+52:7 tight name local-id
360+52:16 name x
361+52:17 tight glyph )
362+53:5 INDENT
363+53:5 glyph [
364+53:6 tight lit %item
365+53: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 ]
371+54:5 NEWLINE
372+54:5 lit %none
373+54:11 lit ~
374+55:1 DEDENT
375+55:1 DEDENT
376+55:1 NEWLINE
377+55:1 glyph ++
378+55:4 name explicit
379+55:13 glyph |=
380+55:16 glyph [
381+55:17 tight name x
382+55:18 tight glyph =
383+55:19 tight name input
384+55:25 name y
385+55:26 tight glyph =
386+55:27 tight tvar A
387+55:28 tight glyph ]
388+55:30 glyph ^-
389+55:33 glyph (
390+55:34 tight name list
391+55:39 tvar A
392+55:40 tight glyph )
393+56:3 INDENT
394+56:3 glyph ?-
395+56:6 glyph (
396+56:7 tight name local-id
397+56:16 name x
398+56:17 tight glyph )
399+57:5 INDENT
400+57:5 glyph [
401+57:6 tight lit %item
402+57: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 ]
408+58:5 NEWLINE
409+58:5 lit %none
410+58:11 lit ~
411+59:1 DEDENT
412+59:1 DEDENT
413+59:1 NEWLINE
414+59:1 glyph +$
415+59:4 name payload
416+59:12 glyph |$
417+59:15 glyph [
418+59:16 tight tvar A
419+59:17 tight glyph ]
420+60:3 INDENT
421+60:3 glyph [
422+60:4 tight lit %present
423+60:13 name value
424+60:18 tight glyph =
425+60:19 tight tvar A
426+60:20 tight glyph ]
427+61:3 NEWLINE
428+61:3 lit %none
429+62:1 DEDENT
430+62:1 NEWLINE
431+62:1 glyph ++
432+62:4 name shared
433+62:11 glyph |=
434+62:14 glyph [
435+62:15 tight name x
436+62:16 tight glyph =
437+62:17 tight glyph (
438+62:18 tight name payload
439+62:26 tvar A
440+62:27 tight glyph )
441+62:29 name y
442+62:30 tight glyph =
443+62:31 tight tvar A
444+62:32 tight glyph ]
445+62:34 glyph ^-
446+62:37 glyph (
447+62:38 tight name list
448+62:43 tvar A
449+62:44 tight glyph )
450+63:3 INDENT
451+63:3 glyph ?-
452+63:6 glyph (
453+63:7 tight name local-id
454+63:16 name x
455+63:17 tight glyph )
456+64:5 INDENT
457+64:5 glyph [
458+64:6 tight lit %present
459+64:15 name v
460+64:16 tight glyph ]
461+64:18 glyph ~[
462+64:20 tight name y
463+64:22 name v
464+64:23 tight glyph ]
465+65:5 NEWLINE
466+65:5 lit %none
467+65:11 lit ~
468+66:1 DEDENT
469+66:1 DEDENT
470+66:1 NEWLINE
471+66:1 glyph ++
472+66:4 name bad-subject
473+66:16 glyph |=
474+66:19 name x
475+66:20 tight glyph =
476+66:21 tight name input
477+66:27 glyph ^-
478+66:30 name result
479+67:3 INDENT
480+67:3 glyph ?-
481+67:6 glyph (
482+67:7 tight name passthrough
483+67:19 str "wrong"
484+67:26 tight glyph )
485+68:5 INDENT
486+68:5 glyph [
487+68:6 tight lit %item
488+68:12 name flag
489+68:17 name text
490+68:21 tight glyph ]
491+68:23 lit %missing
492+69:5 NEWLINE
493+69:5 lit %none
494+69:11 lit %empty
495+70:1 DEDENT
496+70:1 DEDENT
497+70:1 NEWLINE
498+70:1 glyph ++
499+70:4 name first-of
500+70:13 glyph |=
501+70:16 glyph [
502+70:17 tight name a
503+70:19 name b
504+70:20 tight glyph ]
505+70:22 name a
506+71:1 NEWLINE
507+71:1 glyph ++
508+71:4 name pending-subject
509+71:20 glyph |=
510+71:23 name x
511+71:24 tight glyph =
512+71:25 tight name input
513+71:31 glyph ^-
514+71:34 name result
515+72:3 INDENT
516+72:3 glyph ?-
517+72:6 glyph (
518+72:7 tight name first-of
519+72:16 name x
520+72:18 lit %dangling
521+72:27 tight glyph )
522+73:5 INDENT
523+73:5 glyph [
524+73:6 tight lit %item
525+73:12 name flag
526+73:17 name text
527+73:21 tight glyph ]
528+73:23 lit %good
529+74:5 NEWLINE
530+74:5 lit %none
531+74:11 lit %empty
532+75:1 DEDENT
533+75:1 DEDENT
534+75:1 NEWLINE
535+75:1 glyph ++
536+75:4 name duplicate-flag-subject
537+75:27 glyph |=
538+75:30 name x
539+75:31 tight glyph =
540+75:32 tight aura @t
541+75:35 glyph ^-
542+75:38 glyph (
543+75:39 tight name list
544+75:44 aura @t
545+75:46 tight glyph )
546+76:3 INDENT
547+76:3 glyph ?-
548+76:6 glyph (
549+76:7 tight name passthrough
550+76:19 name x
551+76:20 tight glyph )
552+77:5 INDENT
553+77:5 lit %.y
554+77:9 glyph ~[
555+77:11 tight glyph ]
556+78:5 NEWLINE
557+78:5 lit %.y
558+78:9 glyph ~[
559+78:11 tight glyph ]
560+79:1 DEDENT
561+79:1 DEDENT
562+79:1 NEWLINE
563+79:1 glyph ++
564+79:4 name bad-unit-subject
565+79:21 glyph |=
566+79:24 name x
567+79:25 tight glyph =
568+79:26 tight aura @t
569+79:29 glyph ^-
570+79:32 glyph (
571+79:33 tight name list
572+79:38 aura @t
573+79:40 tight glyph )
574+80:3 INDENT
575+80:3 glyph ?-
576+80:6 glyph (
577+80:7 tight name passthrough
578+80:19 name x
579+80:20 tight glyph )
580+81:5 INDENT
581+81:5 lit ~
582+81:7 glyph ~[
583+81:9 tight glyph ]
584+82:5 NEWLINE
585+82:5 glyph [
586+82:6 tight lit ~
587+82:8 name value
588+82:13 tight glyph ]
589+82:15 glyph ~[
590+82:17 tight glyph ]
591+82:18 DEDENT
592+82:18 DEDENT
593+82:18 NEWLINE
tests/golden/types-union-nonwing-subject/tree.txtnew file+257
@@ -0,0 +1,257 @@
1+(module
2+ (mold 1:1 input
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %item)
6+ (face 2:10 flag (flag 2:15))
7+ (face 2:17 text (aura 2:22 @t)))
8+ (const 3:3 %none)))
9+ (mold 4:1 result
10+ (union 5:3 (const 5:3 %good) (const 6:3 %empty)))
11+ (value 7:1 local-id
12+ (gate 7:13 (bind 7:16 x) (wing 7:18 x)))
13+ (value 8:1 passthrough
14+ (gate 8:16
15+ (face 8:19 x (ref 8:21 input))
16+ (wing 8:27 x)))
17+ (value 9:1 grouped
18+ (gate 9:12
19+ (face 9:15 x (ref 9:17 input))
20+ (cast 9:23
21+ (apply 9:26 list (aura 9:32 @t))
22+ (body 10:3
23+ (branch 10:3
24+ (group 10:6 (wing 10:7 x))
25+ (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)))
28+ (arm 12:5 (lit 12:5 %none) (lit 12:11 ~)))))))
29+ (value 13:1 call
30+ (gate 13:9
31+ (face 13:12 x (ref 13:14 input))
32+ (cast 13:20
33+ (apply 13:23 list (aura 13:29 @t))
34+ (body 14:3
35+ (branch 14:3
36+ (group 14:6
37+ (call 14:7 (wing 14:7 local-id) (wing 14:16 x)))
38+ (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)))
41+ (arm 16:5 (lit 16:5 %none) (lit 16:11 ~)))))))
42+ (value 17:1 nested
43+ (gate 17:11
44+ (face 17:14 x (ref 17:16 input))
45+ (cast 17:22
46+ (ref 17:25 result)
47+ (body 18:3
48+ (branch 18:3
49+ (group 18:6
50+ (call 18:7
51+ (wing 18:7 local-id)
52+ (group 18:16
53+ (call 18:17 (wing 18:17 passthrough) (wing 18:29 x)))))
54+ (arm 19:5
55+ (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 text))
56+ (lit 19:23 %good))
57+ (arm 20:5 (lit 20:5 %none) (lit 20:11 %empty)))))))
58+ (value 21:1 finite
59+ (gate 21:11
60+ (face 21:14 x (ref 21:16 input))
61+ (cast 21:22
62+ (apply 21:25 list (aura 21:31 @t))
63+ (body 22:3
64+ (branch 22:3
65+ (group 22:6
66+ (call 22:7 (wing 22:7 local-id) (wing 22:16 x)))
67+ (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)))
70+ (arm 24:5
71+ (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 text))
72+ (list 24:22))
73+ (arm 25:5 (lit 25:5 %none) (lit 25:11 ~)))))))
74+ (value 26:1 wrong
75+ (gate 26:10
76+ (face 26:13 x (ref 26:15 input))
77+ (cast 26:21
78+ (ref 26:24 result)
79+ (body 27:3
80+ (branch 27:3
81+ (group 27:6
82+ (call 27:7 (wing 27:7 local-id) (wing 27:16 x)))
83+ (arm 28:5
84+ (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 text))
85+ (lit 28:23 %missing))
86+ (arm 29:5 (lit 29:5 %none) (lit 29:11 %empty)))))))
87+ (value 30:1 missing
88+ (gate 30:12
89+ (face 30:15 x (ref 30:17 input))
90+ (cast 30:23
91+ (apply 30:26 list (aura 30:32 @t))
92+ (body 31:3
93+ (branch 31:3
94+ (group 31:6
95+ (call 31:7 (wing 31:7 local-id) (wing 31:16 x)))
96+ (arm 32:5 (lit 32:5 %none) (lit 32:11 ~)))))))
97+ (value 33:1 dead
98+ (gate 33:9
99+ (face 33:12 x (ref 33:14 input))
100+ (cast 33:20
101+ (apply 33:23 list (aura 33:29 @t))
102+ (body 34:3
103+ (branch 34:3
104+ (group 34:6
105+ (call 34:7 (wing 34:7 local-id) (wing 34:16 x)))
106+ (arm 35:5 (lit 35:5 %none) (lit 35:11 ~))
107+ (arm 36:5 (lit 36:5 %none) (lit 36:11 ~))
108+ (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))))))))
111+ (value 38:1 shadow
112+ (gate 38:11
113+ (face 38:14 x (ref 38:16 input))
114+ (cast 38:22
115+ (ref 38:25 result)
116+ (body 39:3
117+ (branch 39:3
118+ (group 39:6
119+ (call 39:7 (wing 39:7 local-id) (wing 39:16 x)))
120+ (arm 40:5
121+ (cell 40:5 (lit 40:6 %item) (bind 40:12 flag) (bind 40:17 same))
122+ (lit 40:23 %good))
123+ (arm 41:5 (lit 41:5 %none) (lit 41:11 %empty)))))))
124+ (value 42:1 pending
125+ (gate 42:12
126+ (face 42:15 x (ref 42:17 input))
127+ (cast 42:23
128+ (ref 42:26 result)
129+ (body 43:3
130+ (trace 43:3
131+ (lit 43:6 %dangling)
132+ (body 44:5
133+ (branch 44:5
134+ (group 44:8
135+ (call 44:9 (wing 44:9 local-id) (wing 44:18 x)))
136+ (arm 45:7
137+ (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 text))
138+ (lit 45:25 %good))
139+ (arm 46:7 (lit 46:7 %none) (lit 46:13 %empty)))))))))
140+ (value 47:1 unknown
141+ (gate 47:12
142+ (bind 47:15 x)
143+ (cast 47:17
144+ (apply 47:20 list (aura 47:26 @t))
145+ (body 48:3
146+ (branch 48:3
147+ (group 48:6
148+ (call 48:7 (wing 48:7 local-id) (wing 48:16 x)))
149+ (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)))
152+ (arm 50:5 (lit 50:5 %none) (lit 50:11 ~)))))))
153+ (value 51:1 nonunion
154+ (gate 51:13
155+ (face 51:16 x (aura 51:18 @t))
156+ (cast 51:21
157+ (apply 51:24 list (aura 51:30 @t))
158+ (body 52:3
159+ (branch 52:3
160+ (group 52:6
161+ (call 52:7 (wing 52:7 local-id) (wing 52:16 x)))
162+ (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)))
165+ (arm 54:5 (lit 54:5 %none) (lit 54:11 ~)))))))
166+ (value 55:1 explicit
167+ (gate 55:13
168+ (cell 55:16
169+ (face 55:17 x (ref 55:19 input))
170+ (face 55:25 y (tvar 55:27 A)))
171+ (cast 55:30
172+ (apply 55:33 list (tvar 55:39 A))
173+ (body 56:3
174+ (branch 56:3
175+ (group 56:6
176+ (call 56:7 (wing 56:7 local-id) (wing 56:16 x)))
177+ (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")))
180+ (arm 58:5 (lit 58:5 %none) (lit 58:11 ~)))))))
181+ (mold 59:1 payload
182+ (generic 59:12 A
183+ (union 60:3
184+ (cell 60:3
185+ (const 60:4 %present)
186+ (face 60:13 value (tvar 60:19 A)))
187+ (const 61:3 %none))))
188+ (value 62:1 shared
189+ (gate 62:11
190+ (cell 62:14
191+ (face 62:15 x
192+ (apply 62:17 payload (tvar 62:26 A)))
193+ (face 62:29 y (tvar 62:31 A)))
194+ (cast 62:34
195+ (apply 62:37 list (tvar 62:43 A))
196+ (body 63:3
197+ (branch 63:3
198+ (group 63:6
199+ (call 63:7 (wing 63:7 local-id) (wing 63:16 x)))
200+ (arm 64:5
201+ (cell 64:5 (lit 64:6 %present) (bind 64:15 v))
202+ (list 64:18 (wing 64:20 y) (wing 64:22 v)))
203+ (arm 65:5 (lit 65:5 %none) (lit 65:11 ~)))))))
204+ (value 66:1 bad-subject
205+ (gate 66:16
206+ (face 66:19 x (ref 66:21 input))
207+ (cast 66:27
208+ (ref 66:30 result)
209+ (body 67:3
210+ (branch 67:3
211+ (group 67:6
212+ (call 67:7 (wing 67:7 passthrough) (str 67:19 "wrong")))
213+ (arm 68:5
214+ (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 text))
215+ (lit 68:23 %missing))
216+ (arm 69:5 (lit 69:5 %none) (lit 69:11 %empty)))))))
217+ (value 70:1 first-of
218+ (gate 70:13
219+ (cell 70:16 (bind 70:17 a) (bind 70:19 b))
220+ (wing 70:22 a)))
221+ (value 71:1 pending-subject
222+ (gate 71:20
223+ (face 71:23 x (ref 71:25 input))
224+ (cast 71:31
225+ (ref 71:34 result)
226+ (body 72:3
227+ (branch 72:3
228+ (group 72:6
229+ (call 72:7 (wing 72:7 first-of) (wing 72:16 x) (lit 72:18 %dangling)))
230+ (arm 73:5
231+ (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 text))
232+ (lit 73:23 %good))
233+ (arm 74:5 (lit 74:5 %none) (lit 74:11 %empty)))))))
234+ (value 75:1 duplicate-flag-subject
235+ (gate 75:27
236+ (face 75:30 x (aura 75:32 @t))
237+ (cast 75:35
238+ (apply 75:38 list (aura 75:44 @t))
239+ (body 76:3
240+ (branch 76:3
241+ (group 76:6
242+ (call 76:7 (wing 76:7 passthrough) (wing 76:19 x)))
243+ (arm 77:5 (lit 77:5 %.y) (list 77:9))
244+ (arm 78:5 (lit 78:5 %.y) (list 78:9)))))))
245+ (value 79:1 bad-unit-subject
246+ (gate 79:21
247+ (face 79:24 x (aura 79:26 @t))
248+ (cast 79:29
249+ (apply 79:32 list (aura 79:38 @t))
250+ (body 80:3
251+ (branch 80:3
252+ (group 80:6
253+ (call 80:7 (wing 80:7 passthrough) (wing 80:19 x)))
254+ (arm 81:5 (lit 81:5 ~) (list 81:7))
255+ (arm 82:5
256+ (cell 82:5 (lit 82:6 ~) (bind 82:8 value))
257+ (list 82:15))))))))
tests/golden/types-union-nonwing-subject/types.txtnew file+45
@@ -0,0 +1,45 @@
1+partial inference; module not checked
2++$ input: cases proven disjoint; mold not checked
3++$ result: cases proven disjoint; mold not checked
4+++ local-id: $-(A A)
5+++ passthrough: $-(input input)
6+++ grouped: $-(input (list @t))
7+++ call: $-(input (list @t))
8+++ nested: branch pattern is not supported by partial inference
9+++ finite: $-(input (list @t))
10+++ wrong: result has no case `%missing`
11+/tests/golden/types-union-nonwing-subject/source.jibb:26:24: expected union
12+++ wrong |= x=input ^- result
13+ ^
14+/tests/golden/types-union-nonwing-subject/source.jibb:28:23: tag
15+ [%item flag text] %missing
16+ ^
17+++ missing: missing union case [%item [flag=? text=@t]]
18+++ dead: branch arm is covered by earlier arms
19+/tests/golden/types-union-nonwing-subject/source.jibb:36:5: covered arm
20+ %none ~
21+ ^
22+++ shadow: pattern binder shadows a name
23+++ pending: tag needs context in partial inference
24+++ unknown: branch pattern is not supported by partial inference
25+++ nonunion: branch pattern is not supported by partial inference
26+++ explicit: explicit capital constraints are not supported by partial inference
27++$ payload: cases proven disjoint; mold not checked
28+++ shared: $-([x=(payload A) y=A] (list A))
29+++ bad-subject: call's sample and argument types do not unify
30+/tests/golden/types-union-nonwing-subject/source.jibb:67:7: called gate
31+ ?- (passthrough "wrong")
32+ ^
33+/tests/golden/types-union-nonwing-subject/source.jibb:67:19: argument has type @t
34+ ?- (passthrough "wrong")
35+ ^
36+++ first-of: $-([a=A b=B] A)
37+++ pending-subject: tag needs context in partial inference
38+++ duplicate-flag-subject: branch does not cover both loobeans
39+++ bad-unit-subject: call's sample and argument types do not unify
40+/tests/golden/types-union-nonwing-subject/source.jibb:80:7: called gate
41+ ?- (passthrough x)
42+ ^
43+/tests/golden/types-union-nonwing-subject/source.jibb:80:19: argument has type @t
44+ ?- (passthrough x)
45+ ^
tests/golden/types-union-pattern-result-controls/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: `?-` is exhaustive and an earlier arm makes a covered arm an error; Literals by context: `~` and cells take their type from context.
2−tests: A known union subject with whole-case arms receives a result context through casts, including list and cell positions. Missing and covered arms, incorrect results, unresolved tags and explicit capitals are checked or kept unsupported; partial and non-wing patterns remain unsupported.
2+tests: A known union subject with whole-case arms receives a result context through casts, including list and cell positions. Missing and covered arms, incorrect results, unresolved tags and explicit capitals are checked or kept unsupported; unproven partial patterns and unknown subjects remain unsupported; a known union returned by a call can be matched.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-pattern-result-controls/types.txt+1−1
@@ -15,7 +15,7 @@ partial inference; module not checked
1515 ^
1616++ unknown: partial union pattern is not supported by partial inference
1717++ from-call: $-((list @t) (list @t))
18−++ non-wing: branch pattern is not supported by partial inference
18+++ non-wing: $-(msg (list @t))
1919++ generic: $-([a=msg x=A] (list A))
2020++ generic-bad: explicit capital constraints are not supported by partial inference
2121++ pending-tag: tag needs context in partial inference
tests/golden/types-union-patterns/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; "An arm that earlier arms cover ... is an error"; "A name in a pattern always binds anew".
2−tests: Whole cases of a closed tagged union match payload binders and catch-alls; missing cases and covered arms are named, and shadowing fails. A boolean pattern can cover part of a case when all finite alternatives are accounted for; other partial patterns stay unsupported. Null and loobean patterns are compared by noun value. A union-result or list-result context and a complex union subject stay unsupported rather than reporting a loobean mismatch.
2+tests: Whole cases of a closed tagged union match payload binders and catch-alls; missing cases and covered arms are named, and shadowing fails. A boolean pattern can cover part of a case when all finite alternatives are accounted for; other partial patterns stay unsupported. Null and loobean patterns are compared by noun value. Union and list result contexts propagate through supported branches, and a grouped known-union subject can be matched; unknown or unproven subjects remain unsupported.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-patterns/types.txt+1−1
@@ -22,4 +22,4 @@ partial inference; module not checked
2222+$ output: cases proven disjoint; mold not checked
2323++ context: $-(digits output)
2424++ context-list: $-(digits (list @t))
25−++ grouped-subject: union-pattern branch subject is not supported by partial inference
25+++ grouped-subject: $-(digits @t)
tests/importer/about.txt+5
@@ -54,3 +54,8 @@ unmodified `desk/sur/epic.hoon`, `desk/sur/presence.hoon` and
5454Hoon tests. The separately stored `tree.txt` is a diagnostic projection of the
5555internal type graph, not the Jibb type printer. It runs under eval and on the fake
5656ship; +fixture-test also checks the underlying structured values.
57+
58+The nested recursive cases retain a source-proven named owner for one nested
59+tagged union, including repeated uses. Duplicate tags, hidden overlaps,
60+mutual recursion and overlapping outer cases remain unsupported. The owner
61+probe ensures another named boundary does not supply the parent's self-reference.
tests/importer/small.txt+10
@@ -136,6 +136,16 @@
136136+$ tag-nest-overlap $%([%one x=tag-invalid-cell] [%two ~])
137137+$ tag-nest-recursive $%([%step next=(unit tag-nest-recursive)] [%done ~])
138138+$ tag-nest-recursive-outer $%([%one x=tag-nest-recursive] [%two ~])
139+:: One nested source-proven recursive union retains its own named owner.
140++$ tag-nest-rec-list $%([%branch children=(list tag-nest-rec-list)] [%leaf @t])
141++$ tag-nest-rec-list-outer $%([%nested item=tag-nest-rec-list] [%other ~])
142++$ tag-nest-rec-repeat $%([%nested a=tag-nest-rec-list b=tag-nest-rec-list] [%other ~])
143++$ tag-nest-rec-duplicate $%([%same children=(list tag-nest-rec-duplicate)] [%same @t])
144++$ tag-nest-rec-bad-outer $%([%nested item=tag-nest-rec-duplicate] [%other ~])
145++$ tag-nest-rec-hidden $%([%branch children=(list tag-nest-rec-hidden) item=tag-invalid-cell] [%leaf @t])
146++$ tag-nest-rec-hidden-outer $%([%nested item=tag-nest-rec-hidden] [%other ~])
147++$ tag-nest-rec-mutual-outer $%([%nested item=tag-mutual-a] [%other ~])
148++$ tag-nest-rec-outer-overlap $%([%same item=tag-nest-rec-list] [%same @t])
139149:: Direct self-recursive tagged roots and conservative rejection controls.
140150+$ tag-self $%([%branch children=(list tag-self)] [%leaf value=@t])
141151+$ tag-self-tail $%([%branch next=tag-self-tail] [%leaf value=@t])
tests/importer/tree.txt+9−2
@@ -169,7 +169,14 @@ tag-nest-diamond: (union [one [x=(union [left value=@t] [right value=@ud]) y=(un
169169tag-nest-deep: error: a Hoon union needs a source-level disjointness check
170170tag-nest-hidden: error: a Hoon union needs a source-level disjointness check
171171tag-nest-overlap: error: a Hoon union needs a source-level disjointness check
172−tag-nest-recursive: error: a Hoon union needs a source-level disjointness check
172+tag-nest-recursive: (union [one x=(named tag-nest-recursive.small (union [done @n:0] [step next=(unit tag-nest-recursive.small)]))] [two @n:0])
173+tag-nest-rec-list: (union [other @n:0] [nested item=(named tag-nest-rec-list.small (union [leaf @t] [branch children=(list tag-nest-rec-list.small)]))])
174+tag-nest-rec-repeat: (union [other @n:0] [nested [a=(named tag-nest-rec-list.small (union [leaf @t] [branch children=(list tag-nest-rec-list.small)])) b=(named tag-nest-rec-list.small (union [leaf @t] [branch children=(list tag-nest-rec-list.small)]))]])
175+tag-nest-rec-duplicate: error: a Hoon union needs a source-level disjointness check
176+tag-nest-rec-hidden: error: a Hoon union needs a source-level disjointness check
177+tag-nest-rec-mutual: error: a Hoon union needs a source-level disjointness check
178+tag-nest-rec-outer-overlap: error: a Hoon union needs a source-level disjointness check
179+tag-nest-rec-owner: yes
173180tag-nest-many: error: a Hoon union needs a source-level disjointness check
174181tag-nest-shadow: error: a Hoon union needs a source-level disjointness check
175182tag-nest-wrong-hold: unsupported
@@ -181,7 +188,7 @@ tag-self-hidden: error: a Hoon union needs a source-level disjointness check
181188tag-self-indirect: error: a Hoon union needs a source-level disjointness check
182189tag-mutual-a: error: a Hoon union needs a source-level disjointness check
183190tag-mutual-b: error: a Hoon union needs a source-level disjointness check
184−tag-self-pair: [one=(list (union [leaf value=@t] [branch children=(list tag-self.small)])) two=(list (union [leaf value=@t] [branch children=(list tag-self.small)]))]
191+tag-self-pair: [one=(list (named tag-self.small (union [leaf value=@t] [branch children=(list tag-self.small)]))) two=(list (named tag-self.small (union [leaf value=@t] [branch children=(list tag-self.small)])))]
185192tag-self-ford-collision: error: a Hoon union needs a source-level disjointness check
186193tag-self-wrong-core: error: Hoon module provenance does not match the selected mold
187194tag-flat-large: supported above 256
tests/lib/jibb-bridge.hoon+29−1
@@ -60,6 +60,34 @@
6060 "recursive-list {(trip name.test)}: {?:(=(yes good.test) "ok" "BAD")}"
6161 (of-wain:format (turn out |=(line=tape (crip line))))
6262::
63+++ named-recursive-synthetic
64+ ^- @t
65+ =/ good=*
66+ [%fork ~[[%atom %n [~ 0]] [%cell [%atom %tas [~ %branch]] [%apply %list ~[[%ref %notes %node]]]]]]
67+ =/ duplicate=*
68+ [%fork ~[[%atom %n [~ 0]] [%cell [%face %dup [%atom %tas [~ %branch]]] [%face %dup [%apply %list ~[[%ref %notes %node]]]]]]]
69+ =/ tests=(list [name=@t node=* good=?])
70+ :~ ['valid' [%named %notes %node good] &]
71+ ['wrong-module' [%named %notes %node [%fork ~[[%atom %n [~ 0]] [%cell [%atom %tas [~ %branch]] [%ref %other %node]]]]] |]
72+ ['wrong-name' [%named %notes %node [%fork ~[[%atom %n [~ 0]] [%cell [%atom %tas [~ %branch]] [%ref %notes %other]]]]] |]
73+ ['no-reference' [%named %notes %node [%fork ~[[%atom %n [~ 0]] [%cell [%atom %tas [~ %branch]] [%atom %ud ~]]]]] |]
74+ ['overlap' [%named %notes %node [%fork ~[[%atom %n [~ 0]] [%apply %list ~[[%ref %notes %node]]]]]] |]
75+ ['duplicate-faces' [%named %notes %node duplicate] |]
76+ ['malformed' [%named %notes %node] |]
77+ ['wrong-arity' [%named %notes %node [%apply %list ~[[%ref %notes %node] [%atom %t ~]]]] |]
78+ ['bare-reference' [%named %notes %node [%ref %notes %node]] |]
79+ ['non-fork' [%named %notes %node [%cell [%atom %ud ~] [%ref %notes %node]]] |]
80+ ==
81+ =/ out=wall
82+ %+ turn tests
83+ |= test=[name=@t node=* good=?]
84+ =/ got=(unit itype:jibb)
85+ (find-imported-mold:jibb %notes %outer ~[[%notes %outer [%& [%cell [%atom %ud ~] node.test]]]] ~[%notes])
86+ =/ yes=? ?=([~ [%cell [%atom %ud] [%recursive %notes %node *]]] got)
87+ "named-recursive {(trip name.test)}: {?:(=(yes good.test) "ok" "BAD")}"
88+ (of-wain:format (turn out |=(line=tape (crip line))))
89+::
90+::
6391++ bridge-output
6492 |= [sur-text=@t src=@t]
6593 ^- @t
@@ -133,5 +161,5 @@
133161 (crip "/- fixture\0a++ canonical ^- (unit @t) `\"hi\"\0a++ lookalike ^- zero-lookalike.fixture `\"hi\"\0a")
134162 =/ unit-report=@t
135163 (golden-types-with-prelude:jibb /ui/unit-client/jibb unit-client external ~ ~ unit-prelude)
136− (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' recursive-list-synthetic))))))))
164+ (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' (cat 3 recursive-list-synthetic (cat 3 '\0a' named-recursive-synthetic))))))))))
137165--
tests/lib/jibb-hole-guards.hoonnew file+77
@@ -0,0 +1,77 @@
1+:: Verify hole defaulting and API fail-closed boundaries under eval and ship.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+|%
6+++ hole-guard-errors
7+ ^- (list tape)
8+ =/ base=istate:jibb *istate:jibb
9+ =. base base(sub ~[[0 [%nvar 1]]], holes ~[[0 *span:jibb]], next 2)
10+ =/ env=ienv:jibb ~[[%outer [[%var 1] ~]]]
11+ =/ guarded=istate:jibb (default-hole-numbers:jibb holes.base ~ base env &)
12+ =/ independent=istate:jibb (default-hole-numbers:jibb holes.base ~ base ~ &)
13+ =/ explicit=istate:jibb base(caps ~[['A' 1 *span:jibb]])
14+ =/ named=istate:jibb (default-hole-numbers:jibb holes.explicit ~ explicit ~ &)
15+ =/ failures=(list tape) ~
16+ =? failures !?=(~ (itype-lookup:jibb 1 sub.guarded))
17+ ["a captured numeric variable was defaulted" failures]
18+ =? failures !?=([~ [%atom %ud]] (itype-lookup:jibb 1 sub.independent))
19+ ["an independent numeric variable did not default to @ud" failures]
20+ =? failures !?=(~ (itype-lookup:jibb 1 sub.named))
21+ ["a written-capital numeric variable was defaulted" failures]
22+ :: A named-mold hole is definite only in a valid generic scope.
23+ =/ hole=shape:jibb [%hole *span:jibb ~]
24+ =/ outer=shape:jibb [%generic *span:jibb ~['A'] [%fn *span:jibb [%tvar *span:jibb 'A'] hole]]
25+ =/ empty=shape:jibb [%generic *span:jibb ~ hole]
26+ =/ dup=shape:jibb [%generic *span:jibb ~['A' 'A'] hole]
27+ =/ shadow=shape:jibb [%generic *span:jibb ~['A'] [%generic *span:jibb ~['A'] hole]]
28+ =/ fresh=shape:jibb [%generic *span:jibb ~['A'] [%generic *span:jibb ~['B'] [%fn *span:jibb [%tvar *span:jibb 'A'] hole]]]
29+ =/ unbound=shape:jibb [%generic *span:jibb ~['A'] [%fn *span:jibb [%tvar *span:jibb 'B'] hole]]
30+ =? failures !?=([~ [~ *]] (simple-mold-hole:jibb outer))
31+ ["a valid generic structural hole was not detected" failures]
32+ =? failures ?=(^ (simple-mold-hole:jibb empty))
33+ ["an empty generic parameter scope reported a definite hole" failures]
34+ =? failures ?=(^ (simple-mold-hole:jibb dup))
35+ ["duplicate generic parameters reported a definite hole" failures]
36+ =? failures ?=(^ (simple-mold-hole:jibb shadow))
37+ ["a shadowed generic parameter reported a definite hole" failures]
38+ =? failures ?=(^ (simple-mold-hole:jibb fresh))
39+ ["a nested generic scope reported a definite hole" failures]
40+ =? failures ?=(^ (simple-mold-hole:jibb unbound))
41+ ["an unbound capital reported a definite hole" failures]
42+ =/ path-good=@t (crip "/% %todo\0a+$ paths [%one /one todo]\0a")
43+ =/ path-bad=@t (cat 3 path-good '+$ unused [a=_]\0a')
44+ =/ path-value=@t (cat 3 path-good '++ unused |= x=_ x\0a')
45+ =/ g=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb path-good)
46+ =/ b=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb path-bad)
47+ =/ v=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb path-value)
48+ ?. &(?=(%& -.g) ?=(%& -.b) ?=(%& -.v))
49+ ["API path control sources did not parse" failures]
50+ =/ ext=imark-externals:jibb ~[[%todo [%& [%atom %t ~]]]]
51+ =? failures ?=(~ (api-path-analysis:jibb p.g ext ~ ~))
52+ ["a valid API path was rejected" failures]
53+ =? failures ?=(^ (api-path-analysis:jibb p.b ext ~ ~))
54+ ["an API path ignored an unused mold hole" failures]
55+ =? failures ?=(^ (api-path-analysis:jibb p.v ext ~ ~))
56+ ["an API path ignored an unused value hole" failures]
57+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb real-prelude real-internal)
58+ ?~ prepared ["actual prelude was not prepared" failures]
59+ =/ poke-good=@t (crip "/% %todo\0a+$ poke todo\0a")
60+ =/ poke-bad=@t (cat 3 poke-good '+$ unused [a=_]\0a')
61+ =/ poke-value=@t (cat 3 poke-good '++ unused |= x=_ x\0a')
62+ =/ pg=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb poke-good)
63+ =/ pb=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb poke-bad)
64+ =/ pv=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb poke-value)
65+ ?. &(?=(%& -.pg) ?=(%& -.pb) ?=(%& -.pv))
66+ ["API poke control sources did not parse" failures]
67+ =? failures ?=(~ (api-poke-interface:jibb /ui/api/demo/jibb p.pg ext values.u.prepared molds.u.prepared `iface.u.prepared))
68+ ["a valid API poke interface was rejected" failures]
69+ =? failures ?=(^ (api-poke-interface:jibb /ui/api/demo/jibb p.pb ext values.u.prepared molds.u.prepared `iface.u.prepared))
70+ ["an API poke interface ignored an unused mold hole" failures]
71+ =? failures ?=(^ (api-poke-interface:jibb /ui/api/demo/jibb p.pv ext values.u.prepared molds.u.prepared `iface.u.prepared))
72+ ["an API poke interface ignored an unused value hole" failures]
73+ (flop failures)
74+++ test-hole-guards
75+ ^- tang
76+ (turn hole-guard-errors |=(reason=tape leaf+reason))
77+--
tests/lib/jibb-list-alias-guards.hoonnew file+27
@@ -0,0 +1,27 @@
1+:: Compare source-backed list alias preparation under eval and ship.
2+/+ jibb
3+/* expected %txt /tests/type-list-alias/expected/txt
4+|%
5+++ list-alias-output
6+ ^- @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")
8+ =/ canonical=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
9+ =/ altered=@t (crip "+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
10+ =/ omitted=@t (crip "+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
11+ =/ duplicate=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
12+ =/ malformed=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)\0a")
13+ =/ cyclic=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (alias A)\0a+$ alias |$ [A] (bag A)\0a")
14+ =/ good (golden-types-with-prelude:jibb /ui/test/jibb src ~ ~ ~ canonical)
15+ =/ bad (golden-types-with-prelude:jibb /ui/test/jibb src ~ ~ ~ altered)
16+ =/ missing (golden-types-with-prelude:jibb /ui/test/jibb src ~ ~ ~ omitted)
17+ =/ repeated (golden-types-with-prelude:jibb /ui/test/jibb src ~ ~ ~ duplicate)
18+ =/ broken (golden-types-with-prelude:jibb /ui/test/jibb src ~ ~ ~ malformed)
19+ =/ cycle (golden-types-with-prelude:jibb /ui/test/jibb src ~ ~ ~ cyclic)
20+ (of-wain:format ~['canonical' good 'altered' bad 'omitted' missing 'duplicate' repeated 'malformed' broken 'cyclic' cycle])
21+++ test-list-alias-guards
22+ ^- tang
23+ ?~ expected ~[leaf+"list alias expected output is missing"]
24+ ?. =((to-wain:format (cat 3 list-alias-output '\0a')) expected)
25+ ~[leaf+"list alias preparation differs from its golden"]
26+ ~
27+--
tests/lib/jibb-proj-guards.hoonnew file+124
@@ -0,0 +1,124 @@
1+:: Explicit proj retains lowering evidence and is reserved for API bindings.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+|%
6+++ proj-guard-errors
7+ ^- (list tape)
8+ =/ src=@t '++ exact ^- [a=@t b=@p] (proj [a="hi" b=~zod])\0a++ wider ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a++ effect |= x=@t\0a ~& "effect"\0a x\0a++ traced ^- [a=@t b=@p] (proj [a="hi" b=~zod c=(effect "once")])\0a'
9+ =/ result=jfile-result:jibb (infer-jibb-file:jibb /ui/record/jibb src ~ ~ ~ ~ ~ ~ ~ ~)
10+ ?: ?=(%| -.result) ~["proj evidence fixture did not infer"]
11+ =/ defs=(list iwidth-definition:jibb) elaborations.iface.p.result
12+ =/ exact=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%exact name.d)))
13+ =/ wider=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%wider name.d)))
14+ =/ traced=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%traced name.d)))
15+ ?~ exact ~["exact-width proj lacks lowering evidence"]
16+ ?~ wider ~["wider proj lacks lowering evidence"]
17+ ?~ traced ~["traced proj lacks lowering evidence"]
18+ ?: |(!=(1 (lent projections.i.exact)) !=(1 (lent projections.i.wider)))
19+ ~["proj evidence has an unexpected number of actions"]
20+ ?~ projections.i.exact ~["exact-width proj action is missing"]
21+ =/ call=expr:jibb original.i.projections.i.exact
22+ ?. ?=(%call -.call) ~["exact-width proj did not retain its call"]
23+ ?. ?=(%wing -.head.call) ~["exact-width proj head is not a wing"]
24+ ?. =(names.head.call ~[%proj]) ~["exact-width proj head is not proj"]
25+ ?. =(steps.i.projections.i.exact ~[[%a 2] [%b 3]]) ~["exact-width proj has incorrect field axes"]
26+ ?: !=(1 (lent projections.i.traced)) ~["traced proj has an unexpected number of actions"]
27+ ?~ projections.i.traced ~["traced proj action is missing"]
28+ =/ traced-call=expr:jibb original.i.projections.i.traced
29+ ?. ?=(%call -.traced-call) ~["traced proj did not retain its call"]
30+ ?. ?=([* ~] args.traced-call) ~["traced proj did not retain one source expression"]
31+ =/ traced-record=expr:jibb i.args.traced-call
32+ ?. ?=(%tuple -.traced-record) ~["traced proj source is not a record"]
33+ =/ fields=(list item:jibb) items.traced-record
34+ ?~ fields ~["traced proj source lacks first field"]
35+ ?~ t.fields ~["traced proj source lacks second field"]
36+ ?~ t.t.fields ~["traced proj source lacks discarded field"]
37+ =/ effect=expr:jibb val.i.t.t.fields
38+ ?. ?=(%group -.effect) ~["discarded effect source was not retained"]
39+ ?. ?=(%call -.inner.effect) ~["discarded effect call was not retained"]
40+ =/ valid-src=@t '/% %todo\0a+$ paths [%safe /proj todo]\0a'
41+ =/ clash-src=@t '/% %todo\0a+$ paths [%proj /safe todo]\0a'
42+ =/ poke-src=@t '/% %proj\0a+$ poke proj\0a'
43+ =/ valid=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb valid-src)
44+ =/ clash=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb clash-src)
45+ =/ poke=(each module:jibb error:jibb) (parse:jibb /ui/api/demo/jibb poke-src)
46+ ?: |(?=(%| -.valid) ?=(%| -.clash) ?=(%| -.poke)) ~["API reservation controls did not parse"]
47+ =/ todo=imark-externals:jibb ~[[%todo [%& [%atom %t ~]]]]
48+ =/ proj-mark=imark-externals:jibb ~[[%proj [%& [%atom %t ~]]]]
49+ =/ good=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.valid todo ~ ~)
50+ =/ bad=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.clash todo ~ ~)
51+ ?~ good ~["a literal /proj path was rejected"]
52+ ?^ bad ~["an API-derived proj path name was accepted"]
53+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb real-prelude real-internal)
54+ ?~ prepared ~["real prelude did not prepare"]
55+ =/ derived=(unit ifile:jibb)
56+ (api-poke-interface:jibb /ui/api/demo/jibb p.poke proj-mark values.u.prepared molds.u.prepared `iface.u.prepared)
57+ ?^ derived ~["an API-derived proj poke name was accepted"]
58+ proj-graph-errors
59+++ proj-graph-errors
60+ ^- (list tape)
61+ =/ child=@t '++ owned ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a++ exported owned\0a'
62+ =/ parent=@t '/= dep /ui/dep\0a++ answer exported.dep\0a'
63+ =/ bundle=jbundle:jibb ~[[/ui/dep/jibb child]]
64+ =/ built=jfile-result:jibb (infer-jibb-file:jibb /ui/root/jibb parent ~ ~ bundle ~[/ui/root/jibb] ~ ~ ~ ~)
65+ ?: ?=(%| -.built) ~["imported projection module did not infer"]
66+ =/ dep=(unit ifile:jibb) (find-jibb-cache:jibb /ui/dep/jibb cache.p.built)
67+ ?~ dep ~["imported module cache is missing"]
68+ =/ owned=(list iwidth-definition:jibb) (skim elaborations.u.dep |=(d=iwidth-definition:jibb =(%owned name.d)))
69+ ?~ owned ~["imported module projection evidence is missing"]
70+ =/ private=@t '/= core /lib/jibb/primitives\0a++ pick |= x=[a=@t b=@p] a.x\0a++ project (pick (proj [a="hi" b=~zod c=%.y]))\0a'
71+ =/ public=@t '/= internal /lib/jibb/internal\0a++ exposed project.internal\0a++ local ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a'
72+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
73+ ?~ prep ~["source prelude did not prepare"]
74+ =/ local=(list iwidth-definition:jibb) (skim elaborations.iface.u.prep |=(d=iwidth-definition:jibb =(%local name.d)))
75+ ?~ local ~["public prelude projection evidence is missing"]
76+ =/ deps=(list iwidth-dependency:jibb) dependencies.iface.u.prep
77+ =/ private-deps=(list iwidth-dependency:jibb) (skim deps |=(d=iwidth-dependency:jibb =(at.d /lib/jibb/internal/jibb)))
78+ ?~ private-deps ~["private prelude dependency is missing"]
79+ =/ private-defs=(list iwidth-definition:jibb) (skim definitions.i.private-deps |=(d=iwidth-definition:jibb =(%project name.d)))
80+ ?~ private-defs ~["private dependency projection evidence is missing"]
81+ proj-single-errors
82+++ proj-single-errors
83+ ^- (list tape)
84+ =/ src=@t '++ first ^- [x=@t] (proj [x="hi" middle=~zod last=%.y])\0a++ middle ^- [x=@t] (proj [first=~zod x="hi" last=%.y])\0a++ last ^- [x=@t] (proj [first=~zod middle=%.y x="hi"])\0a++ exact ^- [x=@t] (proj [x="hi"])\0a++ effect |= x=@t\0a ~& "effect"\0a x\0a++ retained ^- [x=@t] (proj [x="hi" middle=~zod last=(effect "once")])\0a'
85+ =/ built=jfile-result:jibb (infer-jibb-file:jibb /ui/single/jibb src ~ ~ ~ ~ ~ ~ ~ ~)
86+ ?: ?=(%| -.built) ~["single-field projection fixture did not infer"]
87+ =/ defs=(list iwidth-definition:jibb) elaborations.iface.p.built
88+ =/ first=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%first name.d)))
89+ =/ middle=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%middle name.d)))
90+ =/ last=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%last name.d)))
91+ =/ exact=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%exact name.d)))
92+ =/ retained=(list iwidth-definition:jibb) (skim defs |=(d=iwidth-definition:jibb =(%retained name.d)))
93+ ?~ first ~["first-field projection evidence is missing"]
94+ ?~ middle ~["middle-field projection evidence is missing"]
95+ ?~ last ~["last-field projection evidence is missing"]
96+ ?~ exact ~["exact single-field projection evidence is missing"]
97+ ?~ retained ~["discarded effect projection evidence is missing"]
98+ ?~ projections.i.first ~["first-field projection action is missing"]
99+ ?~ projections.i.middle ~["middle-field projection action is missing"]
100+ ?~ projections.i.last ~["last-field projection action is missing"]
101+ ?~ projections.i.exact ~["exact single-field projection action is missing"]
102+ ?~ projections.i.retained ~["discarded effect projection action is missing"]
103+ ?. =(steps.i.projections.i.first ~[[%x 2]]) ~["first-field projection axis is incorrect"]
104+ ?. =(steps.i.projections.i.middle ~[[%x 6]]) ~["middle-field projection axis is incorrect"]
105+ ?. =(steps.i.projections.i.last ~[[%x 7]]) ~["last-field projection axis is incorrect"]
106+ ?. =(steps.i.projections.i.exact ~[[%x 1]]) ~["exact single-field projection axis is incorrect"]
107+ ?: !=(1 (lent projections.i.retained)) ~["discarded effect projection has multiple actions"]
108+ =/ call=expr:jibb original.i.projections.i.retained
109+ ?. ?=(%call -.call) ~["single-field intrinsic call was not retained"]
110+ ?. ?=([* ~] args.call) ~["single-field source was not retained once"]
111+ =/ tuple=expr:jibb i.args.call
112+ ?. ?=(%tuple -.tuple) ~["single-field source tuple was not retained"]
113+ =/ fields=(list item:jibb) items.tuple
114+ ?~ fields ~["single-field source lacks its first field"]
115+ ?~ t.fields ~["single-field source lacks its middle field"]
116+ ?~ t.t.fields ~["single-field source lacks its discarded field"]
117+ =/ effect=expr:jibb val.i.t.t.fields
118+ ?. ?=(%group -.effect) ~["single-field discarded effect was not retained"]
119+ ?. ?=(%call -.inner.effect) ~["single-field discarded effect call was not retained"]
120+ ~
121+++ test-proj-guards
122+ ^- tang
123+ (turn proj-guard-errors |=(reason=tape leaf+reason))
124+--
tests/lib/jibb-qath-fuel.hoonnew file+52
@@ -0,0 +1,52 @@
1+:: Recursive qath unfolding uses bounded fuel and preserves uncertain faces.
2+/+ jibb
3+|%
4+++ qath-fuel-errors
5+ ^- (list tape)
6+ =/ typ=itype:jibb [%jrec /lib/jibb/internal/jibb %qath ~ %i %ta %t]
7+ =/ lit=expr:jibb [%lit *span:jibb [%null %n 0 '~']]
8+ =/ state=istate:jibb *istate:jibb
9+ =/ faced=itype:jibb [%face %field typ]
10+ =/ wrong=itype:jibb [%face %other typ]
11+ =/ bound=isub:jibb ~[[0 typ]]
12+ =/ checks
13+ :^ -:(infer-call-context-arg:jibb lit typ ~ state(jrec-fuel 0) *span:jibb)
14+ -:(infer-call-context-arg:jibb lit typ ~ state(jrec-fuel 1) *span:jibb)
15+ -:(infer-call-context-arg:jibb lit typ ~ state(jrec-fuel 2) *span:jibb)
16+ :~ -:(itype-fit:jibb [%var 0] faced bound 1)
17+ -:(itype-fit:jibb faced [%var 0] bound 1)
18+ -:(itype-fit:jibb typ faced ~ 1)
19+ -:(itype-fit:jibb faced typ ~ 1)
20+ -:(itype-fit:jibb faced wrong ~ 1)
21+ -:(itype-fit:jibb wrong faced ~ 1)
22+ ==
23+ ?. ?=([%| %& %& %unknown %unknown %ok %ok %bad %bad ~] checks)
24+ ~["qath null fuel or recursive face fitting failed"]
25+ =/ static-zero (qath-static-fuel:jibb ~[[%knot 'x']] 0)
26+ =/ static-one (qath-static-fuel:jibb ~[[%knot 'x']] 1)
27+ =/ static-two (qath-static-fuel:jibb ~[[%knot 'x']] 2)
28+ ?. &(=(~ static-zero) =(static-one [~ 0]) =(static-two [~ 1]))
29+ ~["qath static path fuel failed"]
30+ =/ source=@t (crip "++ nil ~\0a++ cell [i=~.hi t=~]\0a++ branch ?- x\0a ~ 0\0a [a b] 1\0a")
31+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /ui/test/jibb source)
32+ ?: ?=(%| -.parsed) ~["qath fuel controls did not parse"]
33+ =/ ds=(list def:jibb) defs.p.parsed
34+ ?~ ds ~["qath fuel controls are missing definitions"]
35+ ?~ t.ds ~["qath fuel controls are missing definitions"]
36+ ?~ t.t.ds ~["qath fuel controls are missing definitions"]
37+ ?> &(?=(%value -.i.t.ds) ?=(%value -.i.t.t.ds))
38+ =/ cell=expr:jibb val.i.t.ds
39+ =/ branch=expr:jibb val.i.t.t.ds
40+ =/ cell-zero (infer-call-context-arg:jibb cell typ ~ state(jrec-fuel 0) *span:jibb)
41+ =/ cell-one (infer-call-context-arg:jibb cell typ ~ state(jrec-fuel 1) *span:jibb)
42+ =/ cell-two (infer-call-context-arg:jibb cell typ ~ state(jrec-fuel 2) *span:jibb)
43+ =/ match-zero (jrec-match-view:jibb branch [%& typ state(jrec-fuel 0)])
44+ =/ match-one (jrec-match-view:jibb branch [%& typ state(jrec-fuel 1)])
45+ =/ match-two (jrec-match-view:jibb branch [%& typ state(jrec-fuel 2)])
46+ ?. &(?=(%| -.cell-zero) ?=(%| -.cell-one) ?=(%& -.cell-two) ?=(%| -.match-zero) ?=(%& -.match-one) ?=(%& -.match-two))
47+ ~["qath cell or match fuel failed"]
48+ ~
49+++ test-qath-fuel
50+ ^- tang
51+ (turn qath-fuel-errors |=(reason=tape leaf+reason))
52+--
tests/lib/jibb-qath-source.hoonnew file+34
@@ -0,0 +1,34 @@
1+:: Source-backed qath accepts only the proven public and internal interfaces.
2+/+ jibb
3+/* real-internal %jibb /lib/jibb/internal/jibb
4+|%
5+++ check-literal-interface
6+ |= [prelude=(unit ifile:jibb) okay=?]
7+ ^- ?
8+ =/ literal=expr:jibb [%qath *span:jibb ~[[%knot 'foo']]]
9+ =/ state=istate:jibb *istate:jibb
10+ =/ out=iresult:jibb (infer-fragment:jibb literal ~ state(prelude prelude, jrec-fuel 2))
11+ ?:(okay ?=(%& -.out) ?=(%| -.out))
12+++ check-source-prelude
13+ |= [source=@t internal=@t want=@tas]
14+ ^- ?
15+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb source internal)
16+ ?: =(%unprepared want) ?=(~ prepared)
17+ ?~ prepared |
18+ (check-literal-interface `iface.u.prepared =(%accept want))
19+++ qath-source-errors
20+ ^- (list tape)
21+ =/ minimal=@t '/= internal /lib/jibb/internal\0a+$ qath qath.internal\0a'
22+ =/ sources=(list [source=@t internal=@t want=@tas])
23+ :~ [minimal real-internal %accept]
24+ [minimal '' %unprepared]
25+ ['++ identity |= x x\0a' real-internal %decline]
26+ ['+$ qath @t\0a' real-internal %decline]
27+ [minimal '+$ qath @t\0a' %decline]
28+ ==
29+ ?: (levy sources |=(c=[source=@t internal=@t want=@tas] (check-source-prelude source.c internal.c want.c))) ~
30+ ~["qath source provenance guard failed"]
31+++ test-qath-source
32+ ^- tang
33+ (turn qath-source-errors |=(reason=tape leaf+reason))
34+--
tests/lib/jibb.hoon+1325−991
@@ -1286,817 +1286,1043 @@
12861286/* mod-395-2 %jibb /tests/golden/module-import-unused-invalid/modules/ui/unused/jibb
12871287/* typ-395 %txt /tests/golden/module-import-unused-invalid/types/txt
12881288/* mtre-395 %txt /tests/golden/module-import-unused-invalid/module-trees/txt
1289−/* src-396 %jibb /tests/golden/prelude-1c-structural/source/jibb
1290−/* tok-396 %txt /tests/golden/prelude-1c-structural/tokens/txt
1291−/* tre-396 %txt /tests/golden/prelude-1c-structural/tree/txt
1292−/* typ-396 %txt /tests/golden/prelude-1c-structural/types/txt
1293−/* src-397 %jibb /tests/golden/prelude-3g-basic/source/jibb
1294−/* tok-397 %txt /tests/golden/prelude-3g-basic/tokens/txt
1295−/* tre-397 %txt /tests/golden/prelude-3g-basic/tree/txt
1296−/* typ-397 %txt /tests/golden/prelude-3g-basic/types/txt
1297−/* src-398 %jibb /tests/golden/prelude-3g-like/source/jibb
1298−/* tok-398 %txt /tests/golden/prelude-3g-like/tokens/txt
1299−/* tre-398 %txt /tests/golden/prelude-3g-like/tree/txt
1300−/* typ-398 %txt /tests/golden/prelude-3g-like/types/txt
1301−/* src-399 %jibb /tests/golden/prelude-3g-structural/source/jibb
1302−/* tok-399 %txt /tests/golden/prelude-3g-structural/tokens/txt
1303−/* tre-399 %txt /tests/golden/prelude-3g-structural/tree/txt
1304−/* typ-399 %txt /tests/golden/prelude-3g-structural/types/txt
1305−/* src-400 %jibb /tests/golden/prelude-core-functions/source/jibb
1306−/* tok-400 %txt /tests/golden/prelude-core-functions/tokens/txt
1307−/* tre-400 %txt /tests/golden/prelude-core-functions/tree/txt
1308−/* typ-400 %txt /tests/golden/prelude-core-functions/types/txt
1309−/* src-401 %jibb /tests/golden/prelude-list-helpers/source/jibb
1310−/* tok-401 %txt /tests/golden/prelude-list-helpers/tokens/txt
1311−/* tre-401 %txt /tests/golden/prelude-list-helpers/tree/txt
1312−/* typ-401 %txt /tests/golden/prelude-list-helpers/types/txt
1313−/* src-402 %jibb /tests/golden/prelude-list-unit/source/jibb
1314−/* tok-402 %txt /tests/golden/prelude-list-unit/tokens/txt
1315−/* tre-402 %txt /tests/golden/prelude-list-unit/tree/txt
1316−/* typ-402 %txt /tests/golden/prelude-list-unit/types/txt
1317−/* src-403 %jibb /tests/golden/prelude-unit-list-transforms/source/jibb
1318−/* tok-403 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1319−/* tre-403 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1320−/* typ-403 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1321−/* src-404 %jibb /tests/golden/types-capital-distinct/source/jibb
1322−/* tok-404 %txt /tests/golden/types-capital-distinct/tokens/txt
1323−/* tre-404 %txt /tests/golden/types-capital-distinct/tree/txt
1324−/* typ-404 %txt /tests/golden/types-capital-distinct/types/txt
1325−/* src-405 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1326−/* tok-405 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1327−/* tre-405 %txt /tests/golden/types-cell-pattern-many/tree/txt
1328−/* typ-405 %txt /tests/golden/types-cell-pattern-many/types/txt
1329−/* src-406 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1330−/* tok-406 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1331−/* tre-406 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1332−/* typ-406 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1333−/* src-407 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1334−/* tok-407 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1335−/* tre-407 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1336−/* typ-407 %txt /tests/golden/types-cell-pattern-tail/types/txt
1337−/* src-408 %jibb /tests/golden/types-deferred-call-context/source/jibb
1338−/* tok-408 %txt /tests/golden/types-deferred-call-context/tokens/txt
1339−/* tre-408 %txt /tests/golden/types-deferred-call-context/tree/txt
1340−/* typ-408 %txt /tests/golden/types-deferred-call-context/types/txt
1341−/* src-409 %jibb /tests/golden/types-flag-branch-context/source/jibb
1342−/* tok-409 %txt /tests/golden/types-flag-branch-context/tokens/txt
1343−/* tre-409 %txt /tests/golden/types-flag-branch-context/tree/txt
1344−/* typ-409 %txt /tests/golden/types-flag-branch-context/types/txt
1345−/* src-410 %jibb /tests/golden/types-generic-arity/source/jibb
1346−/* tok-410 %txt /tests/golden/types-generic-arity/tokens/txt
1347−/* tre-410 %txt /tests/golden/types-generic-arity/tree/txt
1348−/* typ-410 %txt /tests/golden/types-generic-arity/types/txt
1349−/* src-411 %jibb /tests/golden/types-generic-face-inference/source/jibb
1350−/* tok-411 %txt /tests/golden/types-generic-face-inference/tokens/txt
1351−/* tre-411 %txt /tests/golden/types-generic-face-inference/tree/txt
1352−/* typ-411 %txt /tests/golden/types-generic-face-inference/types/txt
1353−/* src-412 %jibb /tests/golden/types-generic-gates/source/jibb
1354−/* tok-412 %txt /tests/golden/types-generic-gates/tokens/txt
1355−/* tre-412 %txt /tests/golden/types-generic-gates/tree/txt
1356−/* typ-412 %txt /tests/golden/types-generic-gates/types/txt
1357−/* src-413 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1358−/* tok-413 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1359−/* tre-413 %txt /tests/golden/types-generic-import-reverse/tree/txt
1360−/* mod-413-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1361−/* typ-413 %txt /tests/golden/types-generic-import-reverse/types/txt
1362−/* mtre-413 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1363−/* src-414 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1364−/* tok-414 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1365−/* tre-414 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1366−/* typ-414 %txt /tests/golden/types-generic-lexical-alias/types/txt
1367−/* src-415 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1368−/* tok-415 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1369−/* tre-415 %txt /tests/golden/types-generic-local-parameter/tree/txt
1370−/* typ-415 %txt /tests/golden/types-generic-local-parameter/types/txt
1371−/* src-416 %jibb /tests/golden/types-generic-local-scope/source/jibb
1372−/* tok-416 %txt /tests/golden/types-generic-local-scope/tokens/txt
1373−/* tre-416 %txt /tests/golden/types-generic-local-scope/tree/txt
1374−/* typ-416 %txt /tests/golden/types-generic-local-scope/types/txt
1375−/* src-417 %jibb /tests/golden/types-generic-module/source/jibb
1376−/* tok-417 %txt /tests/golden/types-generic-module/tokens/txt
1377−/* tre-417 %txt /tests/golden/types-generic-module/tree/txt
1378−/* mod-417-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1379−/* typ-417 %txt /tests/golden/types-generic-module/types/txt
1380−/* mtre-417 %txt /tests/golden/types-generic-module/module-trees/txt
1381−/* src-418 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1382−/* tok-418 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1383−/* tre-418 %txt /tests/golden/types-generic-nested-scope/tree/txt
1384−/* typ-418 %txt /tests/golden/types-generic-nested-scope/types/txt
1385−/* src-419 %jibb /tests/golden/types-generic-parameters/source/jibb
1386−/* tok-419 %txt /tests/golden/types-generic-parameters/tokens/txt
1387−/* tre-419 %txt /tests/golden/types-generic-parameters/tree/txt
1388−/* typ-419 %txt /tests/golden/types-generic-parameters/types/txt
1389−/* src-420 %jibb /tests/golden/types-generic-record/source/jibb
1390−/* tok-420 %txt /tests/golden/types-generic-record/tokens/txt
1391−/* tre-420 %txt /tests/golden/types-generic-record/tree/txt
1392−/* typ-420 %txt /tests/golden/types-generic-record/types/txt
1393−/* src-421 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1394−/* tok-421 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1395−/* tre-421 %txt /tests/golden/types-generic-recursive-union/tree/txt
1396−/* typ-421 %txt /tests/golden/types-generic-recursive-union/types/txt
1397−/* src-422 %jibb /tests/golden/types-generic-repeated/source/jibb
1398−/* tok-422 %txt /tests/golden/types-generic-repeated/tokens/txt
1399−/* tre-422 %txt /tests/golden/types-generic-repeated/tree/txt
1400−/* typ-422 %txt /tests/golden/types-generic-repeated/types/txt
1401−/* src-423 %jibb /tests/golden/types-generic-union-alias/source/jibb
1402−/* tok-423 %txt /tests/golden/types-generic-union-alias/tokens/txt
1403−/* tre-423 %txt /tests/golden/types-generic-union-alias/tree/txt
1404−/* typ-423 %txt /tests/golden/types-generic-union-alias/types/txt
1405−/* src-424 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1406−/* tok-424 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1407−/* tre-424 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1408−/* mod-424-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1409−/* typ-424 %txt /tests/golden/types-generic-union-alias-face/types/txt
1410−/* mtre-424 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1411−/* src-425 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1412−/* tok-425 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1413−/* tre-425 %txt /tests/golden/types-generic-union-capitals/tree/txt
1414−/* typ-425 %txt /tests/golden/types-generic-union-capitals/types/txt
1415−/* src-426 %jibb /tests/golden/types-generic-union-errors/source/jibb
1416−/* tok-426 %txt /tests/golden/types-generic-union-errors/tokens/txt
1417−/* tre-426 %txt /tests/golden/types-generic-union-errors/tree/txt
1418−/* typ-426 %txt /tests/golden/types-generic-union-errors/types/txt
1419−/* src-427 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1420−/* tok-427 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1421−/* tre-427 %txt /tests/golden/types-generic-union-escaping/tree/txt
1422−/* mod-427-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1423−/* mod-427-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1424−/* typ-427 %txt /tests/golden/types-generic-union-escaping/types/txt
1425−/* mtre-427 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1426−/* src-428 %jibb /tests/golden/types-generic-union-import/source/jibb
1427−/* tok-428 %txt /tests/golden/types-generic-union-import/tokens/txt
1428−/* tre-428 %txt /tests/golden/types-generic-union-import/tree/txt
1429−/* mod-428-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1430−/* mod-428-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1431−/* typ-428 %txt /tests/golden/types-generic-union-import/types/txt
1432−/* mtre-428 %txt /tests/golden/types-generic-union-import/module-trees/txt
1433−/* src-429 %jibb /tests/golden/types-generic-union-local/source/jibb
1434−/* tok-429 %txt /tests/golden/types-generic-union-local/tokens/txt
1435−/* tre-429 %txt /tests/golden/types-generic-union-local/tree/txt
1436−/* typ-429 %txt /tests/golden/types-generic-union-local/types/txt
1437−/* src-430 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1438−/* tok-430 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1439−/* tre-430 %txt /tests/golden/types-generic-union-transitive/tree/txt
1440−/* mod-430-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1441−/* mod-430-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1442−/* typ-430 %txt /tests/golden/types-generic-union-transitive/types/txt
1443−/* mtre-430 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1444−/* src-431 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1445−/* tok-431 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1446−/* tre-431 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1447−/* typ-431 %txt /tests/golden/types-import-duplicate-mark/types/txt
1448−/* mark-431-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1449−/* src-432 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1450−/* tok-432 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1451−/* tre-432 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1452−/* typ-432 %txt /tests/golden/types-import-duplicate-sur/types/txt
1453−/* imp-432-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1454−/* imp-432-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1455−/* imp-432-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1456−/* src-433 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1457−/* tok-433 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1458−/* tre-433 %txt /tests/golden/types-import-hoon-flags/tree/txt
1459−/* typ-433 %txt /tests/golden/types-import-hoon-flags/types/txt
1460−/* imp-433-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1461−/* imp-433-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1462−/* imp-433-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1463−/* imp-433-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1464−/* src-434 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1465−/* tok-434 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1466−/* tre-434 %txt /tests/golden/types-import-hoon-noun/tree/txt
1467−/* typ-434 %txt /tests/golden/types-import-hoon-noun/types/txt
1468−/* imp-434-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1469−/* imp-434-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1470−/* imp-434-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1471−/* imp-434-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1472−/* src-435 %jibb /tests/golden/types-import-mark/source/jibb
1473−/* tok-435 %txt /tests/golden/types-import-mark/tokens/txt
1474−/* tre-435 %txt /tests/golden/types-import-mark/tree/txt
1475−/* typ-435 %txt /tests/golden/types-import-mark/types/txt
1476−/* imp-435-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1477−/* mark-435-1 %txt /tests/golden/types-import-mark/mar/label/txt
1478−/* src-436 %jibb /tests/golden/types-import-mark-record/source/jibb
1479−/* tok-436 %txt /tests/golden/types-import-mark-record/tokens/txt
1480−/* tre-436 %txt /tests/golden/types-import-mark-record/tree/txt
1481−/* typ-436 %txt /tests/golden/types-import-mark-record/types/txt
1482−/* mark-436-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1483−/* mark-436-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1484−/* src-437 %jibb /tests/golden/types-import-missing-mold/source/jibb
1485−/* tok-437 %txt /tests/golden/types-import-missing-mold/tokens/txt
1486−/* tre-437 %txt /tests/golden/types-import-missing-mold/tree/txt
1487−/* typ-437 %txt /tests/golden/types-import-missing-mold/types/txt
1488−/* imp-437-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1489−/* src-438 %jibb /tests/golden/types-import-sur/source/jibb
1490−/* tok-438 %txt /tests/golden/types-import-sur/tokens/txt
1491−/* tre-438 %txt /tests/golden/types-import-sur/tree/txt
1492−/* typ-438 %txt /tests/golden/types-import-sur/types/txt
1493−/* imp-438-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1494−/* imp-438-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1495−/* src-439 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1496−/* tok-439 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1497−/* tre-439 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1498−/* mod-439-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1499−/* typ-439 %txt /tests/golden/types-import-sur-record-graph/types/txt
1500−/* imp-439-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1501−/* mtre-439 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1502−/* src-440 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1503−/* tok-440 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1504−/* tre-440 %txt /tests/golden/types-import-tlon-notes/tree/txt
1505−/* typ-440 %txt /tests/golden/types-import-tlon-notes/types/txt
1506−/* imp-440-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1507−/* imp-440-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1508−/* imp-440-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1509−/* imp-440-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1510−/* imp-440-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1511−/* imp-440-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1512−/* src-441 %jibb /tests/golden/types-list-branch/source/jibb
1513−/* tok-441 %txt /tests/golden/types-list-branch/tokens/txt
1514−/* tre-441 %txt /tests/golden/types-list-branch/tree/txt
1515−/* typ-441 %txt /tests/golden/types-list-branch/types/txt
1516−/* src-442 %jibb /tests/golden/types-list-cons/source/jibb
1517−/* tok-442 %txt /tests/golden/types-list-cons/tokens/txt
1518−/* tre-442 %txt /tests/golden/types-list-cons/tree/txt
1519−/* typ-442 %txt /tests/golden/types-list-cons/types/txt
1520−/* src-443 %jibb /tests/golden/types-list-context/source/jibb
1521−/* tok-443 %txt /tests/golden/types-list-context/tokens/txt
1522−/* tre-443 %txt /tests/golden/types-list-context/tree/txt
1523−/* typ-443 %txt /tests/golden/types-list-context/types/txt
1524−/* src-444 %jibb /tests/golden/types-list-imported/source/jibb
1525−/* tok-444 %txt /tests/golden/types-list-imported/tokens/txt
1526−/* tre-444 %txt /tests/golden/types-list-imported/tree/txt
1527−/* typ-444 %txt /tests/golden/types-list-imported/types/txt
1528−/* imp-444-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1529−/* imp-444-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1530−/* src-445 %jibb /tests/golden/types-list-open/source/jibb
1531−/* tok-445 %txt /tests/golden/types-list-open/tokens/txt
1532−/* tre-445 %txt /tests/golden/types-list-open/tree/txt
1533−/* typ-445 %txt /tests/golden/types-list-open/types/txt
1534−/* src-446 %jibb /tests/golden/types-list-open-constraints/source/jibb
1535−/* tok-446 %txt /tests/golden/types-list-open-constraints/tokens/txt
1536−/* tre-446 %txt /tests/golden/types-list-open-constraints/tree/txt
1537−/* typ-446 %txt /tests/golden/types-list-open-constraints/types/txt
1538−/* src-447 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1539−/* tok-447 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1540−/* tre-447 %txt /tests/golden/types-list-pattern-imported/tree/txt
1541−/* typ-447 %txt /tests/golden/types-list-pattern-imported/types/txt
1542−/* imp-447-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1543−/* imp-447-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1544−/* src-448 %jibb /tests/golden/types-list-patterns/source/jibb
1545−/* tok-448 %txt /tests/golden/types-list-patterns/tokens/txt
1546−/* tre-448 %txt /tests/golden/types-list-patterns/tree/txt
1547−/* typ-448 %txt /tests/golden/types-list-patterns/types/txt
1548−/* src-449 %jibb /tests/golden/types-list-zero-fit/source/jibb
1549−/* tok-449 %txt /tests/golden/types-list-zero-fit/tokens/txt
1550−/* tre-449 %txt /tests/golden/types-list-zero-fit/tree/txt
1551−/* typ-449 %txt /tests/golden/types-list-zero-fit/types/txt
1552−/* src-450 %jibb /tests/golden/types-local-capitals/source/jibb
1553−/* tok-450 %txt /tests/golden/types-local-capitals/tokens/txt
1554−/* tre-450 %txt /tests/golden/types-local-capitals/tree/txt
1555−/* typ-450 %txt /tests/golden/types-local-capitals/types/txt
1556−/* src-451 %jibb /tests/golden/types-local-recursive/source/jibb
1557−/* tok-451 %txt /tests/golden/types-local-recursive/tokens/txt
1558−/* tre-451 %txt /tests/golden/types-local-recursive/tree/txt
1559−/* typ-451 %txt /tests/golden/types-local-recursive/types/txt
1560−/* src-452 %jibb /tests/golden/types-local-scc/source/jibb
1561−/* tok-452 %txt /tests/golden/types-local-scc/tokens/txt
1562−/* tre-452 %txt /tests/golden/types-local-scc/tree/txt
1563−/* typ-452 %txt /tests/golden/types-local-scc/types/txt
1564−/* src-453 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1565−/* tok-453 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1566−/* tre-453 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1567−/* typ-453 %txt /tests/golden/types-local-scc-adversarial/types/txt
1568−/* src-454 %jibb /tests/golden/types-missing-tag-context/source/jibb
1569−/* tok-454 %txt /tests/golden/types-missing-tag-context/tokens/txt
1570−/* tre-454 %txt /tests/golden/types-missing-tag-context/tree/txt
1571−/* typ-454 %txt /tests/golden/types-missing-tag-context/types/txt
1572−/* src-455 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1573−/* tok-455 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1574−/* tre-455 %txt /tests/golden/types-missing-tag-imported/tree/txt
1575−/* typ-455 %txt /tests/golden/types-missing-tag-imported/types/txt
1576−/* imp-455-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1577−/* imp-455-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1578−/* src-456 %jibb /tests/golden/types-missing-tag-named/source/jibb
1579−/* tok-456 %txt /tests/golden/types-missing-tag-named/tokens/txt
1580−/* tre-456 %txt /tests/golden/types-missing-tag-named/tree/txt
1581−/* typ-456 %txt /tests/golden/types-missing-tag-named/types/txt
1582−/* src-457 %jibb /tests/golden/types-module-field-ambiguous/source/jibb
1583−/* tok-457 %txt /tests/golden/types-module-field-ambiguous/tokens/txt
1584−/* tre-457 %txt /tests/golden/types-module-field-ambiguous/tree/txt
1585−/* mod-457-1 %jibb /tests/golden/types-module-field-ambiguous/modules/ui/lib/jibb
1586−/* typ-457 %txt /tests/golden/types-module-field-ambiguous/types/txt
1587−/* mtre-457 %txt /tests/golden/types-module-field-ambiguous/module-trees/txt
1588−/* src-458 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1589−/* tok-458 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1590−/* tre-458 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1591−/* mod-458-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1592−/* typ-458 %txt /tests/golden/types-module-field-nonrecord/types/txt
1593−/* mtre-458 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1594−/* src-459 %jibb /tests/golden/types-module-field-path/source/jibb
1595−/* tok-459 %txt /tests/golden/types-module-field-path/tokens/txt
1596−/* tre-459 %txt /tests/golden/types-module-field-path/tree/txt
1597−/* mod-459-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1598−/* typ-459 %txt /tests/golden/types-module-field-path/types/txt
1599−/* mtre-459 %txt /tests/golden/types-module-field-path/module-trees/txt
1600−/* src-460 %jibb /tests/golden/types-module-field-shadow/source/jibb
1601−/* tok-460 %txt /tests/golden/types-module-field-shadow/tokens/txt
1602−/* tre-460 %txt /tests/golden/types-module-field-shadow/tree/txt
1603−/* mod-460-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1604−/* typ-460 %txt /tests/golden/types-module-field-shadow/types/txt
1605−/* mtre-460 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1606−/* src-461 %jibb /tests/golden/types-module-fixtures/source/jibb
1607−/* tok-461 %txt /tests/golden/types-module-fixtures/tokens/txt
1608−/* tre-461 %txt /tests/golden/types-module-fixtures/tree/txt
1609−/* mod-461-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1610−/* mod-461-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1611−/* typ-461 %txt /tests/golden/types-module-fixtures/types/txt
1612−/* mtre-461 %txt /tests/golden/types-module-fixtures/module-trees/txt
1613−/* src-462 %jibb /tests/golden/types-module-mixed/source/jibb
1614−/* tok-462 %txt /tests/golden/types-module-mixed/tokens/txt
1615−/* tre-462 %txt /tests/golden/types-module-mixed/tree/txt
1616−/* mod-462-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1617−/* typ-462 %txt /tests/golden/types-module-mixed/types/txt
1618−/* imp-462-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1619−/* mark-462-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1620−/* mtre-462 %txt /tests/golden/types-module-mixed/module-trees/txt
1621−/* src-463 %jibb /tests/golden/types-multi-call/source/jibb
1622−/* tok-463 %txt /tests/golden/types-multi-call/tokens/txt
1623−/* tre-463 %txt /tests/golden/types-multi-call/tree/txt
1624−/* typ-463 %txt /tests/golden/types-multi-call/types/txt
1625−/* src-464 %jibb /tests/golden/types-multi-import/source/jibb
1626−/* tok-464 %txt /tests/golden/types-multi-import/tokens/txt
1627−/* tre-464 %txt /tests/golden/types-multi-import/tree/txt
1628−/* mod-464-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1629−/* typ-464 %txt /tests/golden/types-multi-import/types/txt
1630−/* mtre-464 %txt /tests/golden/types-multi-import/module-trees/txt
1631−/* src-465 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1632−/* tok-465 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1633−/* tre-465 %txt /tests/golden/types-nested-missing-tag/tree/txt
1634−/* typ-465 %txt /tests/golden/types-nested-missing-tag/types/txt
1635−/* src-466 %jibb /tests/golden/types-null-context/source/jibb
1636−/* tok-466 %txt /tests/golden/types-null-context/tokens/txt
1637−/* tre-466 %txt /tests/golden/types-null-context/tree/txt
1638−/* typ-466 %txt /tests/golden/types-null-context/types/txt
1639−/* src-467 %jibb /tests/golden/types-null-overlap/source/jibb
1640−/* tok-467 %txt /tests/golden/types-null-overlap/tokens/txt
1641−/* tre-467 %txt /tests/golden/types-null-overlap/tree/txt
1642−/* typ-467 %txt /tests/golden/types-null-overlap/types/txt
1643−/* src-468 %jibb /tests/golden/types-null-unresolved/source/jibb
1644−/* tok-468 %txt /tests/golden/types-null-unresolved/tokens/txt
1645−/* tre-468 %txt /tests/golden/types-null-unresolved/tree/txt
1646−/* typ-468 %txt /tests/golden/types-null-unresolved/types/txt
1647−/* src-469 %jibb /tests/golden/types-pair-context/source/jibb
1648−/* tok-469 %txt /tests/golden/types-pair-context/tokens/txt
1649−/* tre-469 %txt /tests/golden/types-pair-context/tree/txt
1650−/* typ-469 %txt /tests/golden/types-pair-context/types/txt
1651−/* src-470 %jibb /tests/golden/types-partial-apply/source/jibb
1652−/* tok-470 %txt /tests/golden/types-partial-apply/tokens/txt
1653−/* tre-470 %txt /tests/golden/types-partial-apply/tree/txt
1654−/* typ-470 %txt /tests/golden/types-partial-apply/types/txt
1655−/* src-471 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1656−/* tok-471 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1657−/* tre-471 %txt /tests/golden/types-partial-atom-alias/tree/txt
1658−/* typ-471 %txt /tests/golden/types-partial-atom-alias/types/txt
1659−/* src-472 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1660−/* tok-472 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1661−/* tre-472 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1662−/* typ-472 %txt /tests/golden/types-partial-atom-constraint/types/txt
1663−/* src-473 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1664−/* tok-473 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1665−/* tre-473 %txt /tests/golden/types-partial-atom-widening/tree/txt
1666−/* typ-473 %txt /tests/golden/types-partial-atom-widening/types/txt
1667−/* src-474 %jibb /tests/golden/types-partial-aura/source/jibb
1668−/* tok-474 %txt /tests/golden/types-partial-aura/tokens/txt
1669−/* tre-474 %txt /tests/golden/types-partial-aura/tree/txt
1670−/* typ-474 %txt /tests/golden/types-partial-aura/types/txt
1671−/* src-475 %jibb /tests/golden/types-partial-aura-family/source/jibb
1672−/* tok-475 %txt /tests/golden/types-partial-aura-family/tokens/txt
1673−/* tre-475 %txt /tests/golden/types-partial-aura-family/tree/txt
1674−/* typ-475 %txt /tests/golden/types-partial-aura-family/types/txt
1675−/* src-476 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1676−/* tok-476 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1677−/* tre-476 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1678−/* typ-476 %txt /tests/golden/types-partial-aura-generalization/types/txt
1679−/* src-477 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1680−/* tok-477 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1681−/* tre-477 %txt /tests/golden/types-partial-bare-atom/tree/txt
1682−/* typ-477 %txt /tests/golden/types-partial-bare-atom/types/txt
1683−/* src-478 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1684−/* tok-478 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1685−/* tre-478 %txt /tests/golden/types-partial-branch-widening/tree/txt
1686−/* typ-478 %txt /tests/golden/types-partial-branch-widening/types/txt
1687−/* src-479 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1688−/* tok-479 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1689−/* tre-479 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1690−/* typ-479 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1691−/* src-480 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1692−/* tok-480 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1693−/* tre-480 %txt /tests/golden/types-partial-decimal-default/tree/txt
1694−/* typ-480 %txt /tests/golden/types-partial-decimal-default/types/txt
1695−/* src-481 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1696−/* tok-481 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1697−/* tre-481 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1698−/* typ-481 %txt /tests/golden/types-partial-dependency-chain/types/txt
1699−/* src-482 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1700−/* tok-482 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1701−/* tre-482 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1702−/* typ-482 %txt /tests/golden/types-partial-explicit-capital/types/txt
1703−/* src-483 %jibb /tests/golden/types-partial-forward/source/jibb
1704−/* tok-483 %txt /tests/golden/types-partial-forward/tokens/txt
1705−/* tre-483 %txt /tests/golden/types-partial-forward/tree/txt
1706−/* typ-483 %txt /tests/golden/types-partial-forward/types/txt
1707−/* src-484 %jibb /tests/golden/types-partial-generalization/source/jibb
1708−/* tok-484 %txt /tests/golden/types-partial-generalization/tokens/txt
1709−/* tre-484 %txt /tests/golden/types-partial-generalization/tree/txt
1710−/* typ-484 %txt /tests/golden/types-partial-generalization/types/txt
1711−/* src-485 %jibb /tests/golden/types-partial-identity/source/jibb
1712−/* tok-485 %txt /tests/golden/types-partial-identity/tokens/txt
1713−/* tre-485 %txt /tests/golden/types-partial-identity/tree/txt
1714−/* typ-485 %txt /tests/golden/types-partial-identity/types/txt
1715−/* src-486 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1716−/* tok-486 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1717−/* tre-486 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1718−/* typ-486 %txt /tests/golden/types-partial-independent-atoms/types/txt
1719−/* src-487 %jibb /tests/golden/types-partial-local-molds/source/jibb
1720−/* tok-487 %txt /tests/golden/types-partial-local-molds/tokens/txt
1721−/* tre-487 %txt /tests/golden/types-partial-local-molds/tree/txt
1722−/* typ-487 %txt /tests/golden/types-partial-local-molds/types/txt
1723−/* src-488 %jibb /tests/golden/types-partial-locals/source/jibb
1724−/* tok-488 %txt /tests/golden/types-partial-locals/tokens/txt
1725−/* tre-488 %txt /tests/golden/types-partial-locals/tree/txt
1726−/* typ-488 %txt /tests/golden/types-partial-locals/types/txt
1727−/* src-489 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1728−/* tok-489 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1729−/* tre-489 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1730−/* typ-489 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1731−/* src-490 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1732−/* tok-490 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1733−/* tre-490 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1734−/* typ-490 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1735−/* src-491 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1736−/* tok-491 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1737−/* tre-491 %txt /tests/golden/types-partial-mold-composite/tree/txt
1738−/* typ-491 %txt /tests/golden/types-partial-mold-composite/types/txt
1739−/* src-492 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1740−/* tok-492 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1741−/* tre-492 %txt /tests/golden/types-partial-mold-forward/tree/txt
1742−/* typ-492 %txt /tests/golden/types-partial-mold-forward/types/txt
1743−/* src-493 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1744−/* tok-493 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1745−/* tre-493 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1746−/* typ-493 %txt /tests/golden/types-partial-mold-recursive/types/txt
1747−/* src-494 %jibb /tests/golden/types-partial-occurs/source/jibb
1748−/* tok-494 %txt /tests/golden/types-partial-occurs/tokens/txt
1749−/* tre-494 %txt /tests/golden/types-partial-occurs/tree/txt
1750−/* typ-494 %txt /tests/golden/types-partial-occurs/types/txt
1751−/* src-495 %jibb /tests/golden/types-partial-projection/source/jibb
1752−/* tok-495 %txt /tests/golden/types-partial-projection/tokens/txt
1753−/* tre-495 %txt /tests/golden/types-partial-projection/tree/txt
1754−/* typ-495 %txt /tests/golden/types-partial-projection/types/txt
1755−/* src-496 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1756−/* tok-496 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1757−/* tre-496 %txt /tests/golden/types-partial-shadow-global/tree/txt
1758−/* typ-496 %txt /tests/golden/types-partial-shadow-global/types/txt
1759−/* src-497 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1760−/* tok-497 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1761−/* tre-497 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1762−/* typ-497 %txt /tests/golden/types-partial-shared-tvar/types/txt
1763−/* src-498 %jibb /tests/golden/types-partial-union-cases/source/jibb
1764−/* tok-498 %txt /tests/golden/types-partial-union-cases/tokens/txt
1765−/* tre-498 %txt /tests/golden/types-partial-union-cases/tree/txt
1766−/* typ-498 %txt /tests/golden/types-partial-union-cases/types/txt
1767−/* src-499 %jibb /tests/golden/types-partial-union-edges/source/jibb
1768−/* tok-499 %txt /tests/golden/types-partial-union-edges/tokens/txt
1769−/* tre-499 %txt /tests/golden/types-partial-union-edges/tree/txt
1770−/* typ-499 %txt /tests/golden/types-partial-union-edges/types/txt
1771−/* src-500 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1772−/* tok-500 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1773−/* tre-500 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1774−/* typ-500 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1775−/* src-501 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1776−/* tok-501 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1777−/* tre-501 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1778−/* typ-501 %txt /tests/golden/types-prelude-arithmetic/types/txt
1779−/* src-502 %jibb /tests/golden/types-prelude-cmd/source/jibb
1780−/* tok-502 %txt /tests/golden/types-prelude-cmd/tokens/txt
1781−/* tre-502 %txt /tests/golden/types-prelude-cmd/tree/txt
1782−/* typ-502 %txt /tests/golden/types-prelude-cmd/types/txt
1783−/* src-503 %jibb /tests/golden/types-prelude-direct/source/jibb
1784−/* tok-503 %txt /tests/golden/types-prelude-direct/tokens/txt
1785−/* tre-503 %txt /tests/golden/types-prelude-direct/tree/txt
1786−/* typ-503 %txt /tests/golden/types-prelude-direct/types/txt
1787−/* src-504 %jibb /tests/golden/types-prelude-functional/source/jibb
1788−/* tok-504 %txt /tests/golden/types-prelude-functional/tokens/txt
1789−/* tre-504 %txt /tests/golden/types-prelude-functional/tree/txt
1790−/* typ-504 %txt /tests/golden/types-prelude-functional/types/txt
1791−/* src-505 %jibb /tests/golden/types-prelude-interface/source/jibb
1792−/* tok-505 %txt /tests/golden/types-prelude-interface/tokens/txt
1793−/* tre-505 %txt /tests/golden/types-prelude-interface/tree/txt
1794−/* mod-505-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1795−/* mod-505-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1796−/* typ-505 %txt /tests/golden/types-prelude-interface/types/txt
1797−/* mtre-505 %txt /tests/golden/types-prelude-interface/module-trees/txt
1798−/* src-506 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1799−/* tok-506 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1800−/* tre-506 %txt /tests/golden/types-prelude-list-functions/tree/txt
1801−/* mod-506-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1802−/* typ-506 %txt /tests/golden/types-prelude-list-functions/types/txt
1803−/* mtre-506 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1804−/* src-507 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1805−/* tok-507 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1806−/* tre-507 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1807−/* typ-507 %txt /tests/golden/types-prelude-list-helpers/types/txt
1808−/* src-508 %jibb /tests/golden/types-prelude-predicates/source/jibb
1809−/* tok-508 %txt /tests/golden/types-prelude-predicates/tokens/txt
1810−/* tre-508 %txt /tests/golden/types-prelude-predicates/tree/txt
1811−/* typ-508 %txt /tests/golden/types-prelude-predicates/types/txt
1812−/* src-509 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1813−/* tok-509 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1814−/* tre-509 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1815−/* typ-509 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1816−/* src-510 %jibb /tests/golden/types-record-bound-variable/source/jibb
1817−/* tok-510 %txt /tests/golden/types-record-bound-variable/tokens/txt
1818−/* tre-510 %txt /tests/golden/types-record-bound-variable/tree/txt
1819−/* typ-510 %txt /tests/golden/types-record-bound-variable/types/txt
1820−/* src-511 %jibb /tests/golden/types-record-cast-context/source/jibb
1821−/* tok-511 %txt /tests/golden/types-record-cast-context/tokens/txt
1822−/* tre-511 %txt /tests/golden/types-record-cast-context/tree/txt
1823−/* typ-511 %txt /tests/golden/types-record-cast-context/types/txt
1824−/* src-512 %jibb /tests/golden/types-record-change/source/jibb
1825−/* tok-512 %txt /tests/golden/types-record-change/tokens/txt
1826−/* tre-512 %txt /tests/golden/types-record-change/tree/txt
1827−/* typ-512 %txt /tests/golden/types-record-change/types/txt
1828−/* src-513 %jibb /tests/golden/types-record-change-generic/source/jibb
1829−/* tok-513 %txt /tests/golden/types-record-change-generic/tokens/txt
1830−/* tre-513 %txt /tests/golden/types-record-change-generic/tree/txt
1831−/* typ-513 %txt /tests/golden/types-record-change-generic/types/txt
1832−/* src-514 %jibb /tests/golden/types-record-faces/source/jibb
1833−/* tok-514 %txt /tests/golden/types-record-faces/tokens/txt
1834−/* tre-514 %txt /tests/golden/types-record-faces/tree/txt
1835−/* typ-514 %txt /tests/golden/types-record-faces/types/txt
1836−/* src-515 %jibb /tests/golden/types-record-import/source/jibb
1837−/* tok-515 %txt /tests/golden/types-record-import/tokens/txt
1838−/* tre-515 %txt /tests/golden/types-record-import/tree/txt
1839−/* mod-515-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
1840−/* typ-515 %txt /tests/golden/types-record-import/types/txt
1841−/* mtre-515 %txt /tests/golden/types-record-import/module-trees/txt
1842−/* src-516 %jibb /tests/golden/types-record-local-scheme/source/jibb
1843−/* tok-516 %txt /tests/golden/types-record-local-scheme/tokens/txt
1844−/* tre-516 %txt /tests/golden/types-record-local-scheme/tree/txt
1845−/* typ-516 %txt /tests/golden/types-record-local-scheme/types/txt
1846−/* src-517 %jibb /tests/golden/types-record-nested/source/jibb
1847−/* tok-517 %txt /tests/golden/types-record-nested/tokens/txt
1848−/* tre-517 %txt /tests/golden/types-record-nested/tree/txt
1849−/* typ-517 %txt /tests/golden/types-record-nested/types/txt
1850−/* src-518 %jibb /tests/golden/types-record-to-tuple/source/jibb
1851−/* tok-518 %txt /tests/golden/types-record-to-tuple/tokens/txt
1852−/* tre-518 %txt /tests/golden/types-record-to-tuple/tree/txt
1853−/* typ-518 %txt /tests/golden/types-record-to-tuple/types/txt
1854−/* src-519 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
1855−/* tok-519 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
1856−/* tre-519 %txt /tests/golden/types-recursion-scc-failures/tree/txt
1857−/* typ-519 %txt /tests/golden/types-recursion-scc-failures/types/txt
1858−/* src-520 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
1859−/* tok-520 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
1860−/* tre-520 %txt /tests/golden/types-recursion-scc-groups/tree/txt
1861−/* typ-520 %txt /tests/golden/types-recursion-scc-groups/types/txt
1862−/* src-521 %jibb /tests/golden/types-recursion-scc-import/source/jibb
1863−/* tok-521 %txt /tests/golden/types-recursion-scc-import/tokens/txt
1864−/* tre-521 %txt /tests/golden/types-recursion-scc-import/tree/txt
1865−/* mod-521-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
1866−/* typ-521 %txt /tests/golden/types-recursion-scc-import/types/txt
1867−/* mtre-521 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
1868−/* src-522 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
1869−/* tok-522 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
1870−/* tre-522 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
1871−/* mod-522-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
1872−/* typ-522 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
1873−/* mtre-522 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
1874−/* src-523 %jibb /tests/golden/types-recursion-scc-local/source/jibb
1875−/* tok-523 %txt /tests/golden/types-recursion-scc-local/tokens/txt
1876−/* tre-523 %txt /tests/golden/types-recursion-scc-local/tree/txt
1877−/* typ-523 %txt /tests/golden/types-recursion-scc-local/types/txt
1878−/* src-524 %jibb /tests/golden/types-recursion-scc-order/source/jibb
1879−/* tok-524 %txt /tests/golden/types-recursion-scc-order/tokens/txt
1880−/* tre-524 %txt /tests/golden/types-recursion-scc-order/tree/txt
1881−/* typ-524 %txt /tests/golden/types-recursion-scc-order/types/txt
1882−/* src-525 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
1883−/* tok-525 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
1884−/* tre-525 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
1885−/* typ-525 %txt /tests/golden/types-recursion-scc-shadow/types/txt
1886−/* src-526 %jibb /tests/golden/types-recursive-branch/source/jibb
1887−/* tok-526 %txt /tests/golden/types-recursive-branch/tokens/txt
1888−/* tre-526 %txt /tests/golden/types-recursive-branch/tree/txt
1889−/* typ-526 %txt /tests/golden/types-recursive-branch/types/txt
1890−/* src-527 %jibb /tests/golden/types-recursive-gate/source/jibb
1891−/* tok-527 %txt /tests/golden/types-recursive-gate/tokens/txt
1892−/* tre-527 %txt /tests/golden/types-recursive-gate/tree/txt
1893−/* typ-527 %txt /tests/golden/types-recursive-gate/types/txt
1894−/* src-528 %jibb /tests/golden/types-recursive-sample/source/jibb
1895−/* tok-528 %txt /tests/golden/types-recursive-sample/tokens/txt
1896−/* tre-528 %txt /tests/golden/types-recursive-sample/tree/txt
1897−/* typ-528 %txt /tests/golden/types-recursive-sample/types/txt
1898−/* src-529 %jibb /tests/golden/types-scope-library-poke/source/jibb
1899−/* tok-529 %txt /tests/golden/types-scope-library-poke/tokens/txt
1900−/* tre-529 %txt /tests/golden/types-scope-library-poke/tree/txt
1901−/* typ-529 %txt /tests/golden/types-scope-library-poke/types/txt
1902−/* src-530 %jibb /tests/golden/types-scope-root-api/source/jibb
1903−/* tok-530 %txt /tests/golden/types-scope-root-api/tokens/txt
1904−/* tre-530 %txt /tests/golden/types-scope-root-api/tree/txt
1905−/* typ-530 %txt /tests/golden/types-scope-root-api/types/txt
1906−/* src-531 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
1907−/* tok-531 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
1908−/* tre-531 %txt /tests/golden/types-scope-store-duplicate/tree/txt
1909−/* typ-531 %txt /tests/golden/types-scope-store-duplicate/types/txt
1910−/* src-532 %jibb /tests/golden/types-scope-store-shadow/source/jibb
1911−/* tok-532 %txt /tests/golden/types-scope-store-shadow/tokens/txt
1912−/* tre-532 %txt /tests/golden/types-scope-store-shadow/tree/txt
1913−/* typ-532 %txt /tests/golden/types-scope-store-shadow/types/txt
1914−/* src-533 %jibb /tests/golden/types-single-case-pattern/source/jibb
1915−/* tok-533 %txt /tests/golden/types-single-case-pattern/tokens/txt
1916−/* tre-533 %txt /tests/golden/types-single-case-pattern/tree/txt
1917−/* typ-533 %txt /tests/golden/types-single-case-pattern/types/txt
1918−/* src-534 %jibb /tests/golden/types-string-interpolation/source/jibb
1919−/* tok-534 %txt /tests/golden/types-string-interpolation/tokens/txt
1920−/* tre-534 %txt /tests/golden/types-string-interpolation/tree/txt
1921−/* typ-534 %txt /tests/golden/types-string-interpolation/types/txt
1922−/* src-535 %jibb /tests/golden/types-tuple-context/source/jibb
1923−/* tok-535 %txt /tests/golden/types-tuple-context/tokens/txt
1924−/* tre-535 %txt /tests/golden/types-tuple-context/tree/txt
1925−/* typ-535 %txt /tests/golden/types-tuple-context/types/txt
1926−/* src-536 %jibb /tests/golden/types-tuple-context-nested/source/jibb
1927−/* tok-536 %txt /tests/golden/types-tuple-context-nested/tokens/txt
1928−/* tre-536 %txt /tests/golden/types-tuple-context-nested/tree/txt
1929−/* typ-536 %txt /tests/golden/types-tuple-context-nested/types/txt
1930−/* src-537 %jibb /tests/golden/types-union-alias/source/jibb
1931−/* tok-537 %txt /tests/golden/types-union-alias/tokens/txt
1932−/* tre-537 %txt /tests/golden/types-union-alias/tree/txt
1933−/* typ-537 %txt /tests/golden/types-union-alias/types/txt
1934−/* src-538 %jibb /tests/golden/types-union-branch-context/source/jibb
1935−/* tok-538 %txt /tests/golden/types-union-branch-context/tokens/txt
1936−/* tre-538 %txt /tests/golden/types-union-branch-context/tree/txt
1937−/* typ-538 %txt /tests/golden/types-union-branch-context/types/txt
1938−/* src-539 %jibb /tests/golden/types-union-branch-pending/source/jibb
1939−/* tok-539 %txt /tests/golden/types-union-branch-pending/tokens/txt
1940−/* tre-539 %txt /tests/golden/types-union-branch-pending/tree/txt
1941−/* typ-539 %txt /tests/golden/types-union-branch-pending/types/txt
1942−/* src-540 %jibb /tests/golden/types-union-constructor-shape/source/jibb
1943−/* tok-540 %txt /tests/golden/types-union-constructor-shape/tokens/txt
1944−/* tre-540 %txt /tests/golden/types-union-constructor-shape/tree/txt
1945−/* typ-540 %txt /tests/golden/types-union-constructor-shape/types/txt
1946−/* src-541 %jibb /tests/golden/types-union-context-flow/source/jibb
1947−/* tok-541 %txt /tests/golden/types-union-context-flow/tokens/txt
1948−/* tre-541 %txt /tests/golden/types-union-context-flow/tree/txt
1949−/* typ-541 %txt /tests/golden/types-union-context-flow/types/txt
1950−/* src-542 %jibb /tests/golden/types-union-finite/source/jibb
1951−/* tok-542 %txt /tests/golden/types-union-finite/tokens/txt
1952−/* tre-542 %txt /tests/golden/types-union-finite/tree/txt
1953−/* typ-542 %txt /tests/golden/types-union-finite/types/txt
1954−/* src-543 %jibb /tests/golden/types-union-finite-context/source/jibb
1955−/* tok-543 %txt /tests/golden/types-union-finite-context/tokens/txt
1956−/* tre-543 %txt /tests/golden/types-union-finite-context/tree/txt
1957−/* typ-543 %txt /tests/golden/types-union-finite-context/types/txt
1958−/* src-544 %jibb /tests/golden/types-union-finite-generic/source/jibb
1959−/* tok-544 %txt /tests/golden/types-union-finite-generic/tokens/txt
1960−/* tre-544 %txt /tests/golden/types-union-finite-generic/tree/txt
1961−/* typ-544 %txt /tests/golden/types-union-finite-generic/types/txt
1962−/* src-545 %jibb /tests/golden/types-union-finite-limit/source/jibb
1963−/* tok-545 %txt /tests/golden/types-union-finite-limit/tokens/txt
1964−/* tre-545 %txt /tests/golden/types-union-finite-limit/tree/txt
1965−/* typ-545 %txt /tests/golden/types-union-finite-limit/types/txt
1966−/* src-546 %jibb /tests/golden/types-union-import/source/jibb
1967−/* tok-546 %txt /tests/golden/types-union-import/tokens/txt
1968−/* tre-546 %txt /tests/golden/types-union-import/tree/txt
1969−/* mod-546-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
1970−/* typ-546 %txt /tests/golden/types-union-import/types/txt
1971−/* mtre-546 %txt /tests/golden/types-union-import/module-trees/txt
1972−/* src-547 %jibb /tests/golden/types-union-local-pending/source/jibb
1973−/* tok-547 %txt /tests/golden/types-union-local-pending/tokens/txt
1974−/* tre-547 %txt /tests/golden/types-union-local-pending/tree/txt
1975−/* typ-547 %txt /tests/golden/types-union-local-pending/types/txt
1976−/* src-548 %jibb /tests/golden/types-union-overlap/source/jibb
1977−/* tok-548 %txt /tests/golden/types-union-overlap/tokens/txt
1978−/* tre-548 %txt /tests/golden/types-union-overlap/tree/txt
1979−/* typ-548 %txt /tests/golden/types-union-overlap/types/txt
1980−/* src-549 %jibb /tests/golden/types-union-overlap-nested/source/jibb
1981−/* tok-549 %txt /tests/golden/types-union-overlap-nested/tokens/txt
1982−/* tre-549 %txt /tests/golden/types-union-overlap-nested/tree/txt
1983−/* typ-549 %txt /tests/golden/types-union-overlap-nested/types/txt
1984−/* src-550 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
1985−/* tok-550 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
1986−/* tre-550 %txt /tests/golden/types-union-pattern-result-context/tree/txt
1987−/* typ-550 %txt /tests/golden/types-union-pattern-result-context/types/txt
1988−/* src-551 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
1989−/* tok-551 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
1990−/* tre-551 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
1991−/* typ-551 %txt /tests/golden/types-union-pattern-result-controls/types/txt
1992−/* src-552 %jibb /tests/golden/types-union-patterns/source/jibb
1993−/* tok-552 %txt /tests/golden/types-union-patterns/tokens/txt
1994−/* tre-552 %txt /tests/golden/types-union-patterns/tree/txt
1995−/* typ-552 %txt /tests/golden/types-union-patterns/types/txt
1996−/* src-553 %jibb /tests/golden/types-union-patterns-generic/source/jibb
1997−/* tok-553 %txt /tests/golden/types-union-patterns-generic/tokens/txt
1998−/* tre-553 %txt /tests/golden/types-union-patterns-generic/tree/txt
1999−/* typ-553 %txt /tests/golden/types-union-patterns-generic/types/txt
2000−/* src-554 %jibb /tests/golden/types-union-patterns-import/source/jibb
2001−/* tok-554 %txt /tests/golden/types-union-patterns-import/tokens/txt
2002−/* tre-554 %txt /tests/golden/types-union-patterns-import/tree/txt
2003−/* mod-554-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2004−/* typ-554 %txt /tests/golden/types-union-patterns-import/types/txt
2005−/* mtre-554 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2006−/* src-555 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2007−/* tok-555 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2008−/* tre-555 %txt /tests/golden/types-union-phantom-generic/tree/txt
2009−/* typ-555 %txt /tests/golden/types-union-phantom-generic/types/txt
2010−/* src-556 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2011−/* tok-556 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2012−/* tre-556 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2013−/* mod-556-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2014−/* mod-556-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2015−/* typ-556 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2016−/* mtre-556 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2017−/* src-557 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2018−/* tok-557 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2019−/* tre-557 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2020−/* mod-557-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2021−/* typ-557 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2022−/* mtre-557 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2023−/* src-558 %jibb /tests/golden/types-union-print-distinct/source/jibb
2024−/* tok-558 %txt /tests/golden/types-union-print-distinct/tokens/txt
2025−/* tre-558 %txt /tests/golden/types-union-print-distinct/tree/txt
2026−/* mod-558-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2027−/* mod-558-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2028−/* mod-558-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2029−/* typ-558 %txt /tests/golden/types-union-print-distinct/types/txt
2030−/* mtre-558 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2031−/* src-559 %jibb /tests/golden/types-union-print-escape/source/jibb
2032−/* tok-559 %txt /tests/golden/types-union-print-escape/tokens/txt
2033−/* tre-559 %txt /tests/golden/types-union-print-escape/tree/txt
2034−/* typ-559 %txt /tests/golden/types-union-print-escape/types/txt
2035−/* src-560 %jibb /tests/golden/types-union-print-local/source/jibb
2036−/* tok-560 %txt /tests/golden/types-union-print-local/tokens/txt
2037−/* tre-560 %txt /tests/golden/types-union-print-local/tree/txt
2038−/* typ-560 %txt /tests/golden/types-union-print-local/types/txt
2039−/* src-561 %jibb /tests/golden/types-union-print-nested/source/jibb
2040−/* tok-561 %txt /tests/golden/types-union-print-nested/tokens/txt
2041−/* tre-561 %txt /tests/golden/types-union-print-nested/tree/txt
2042−/* typ-561 %txt /tests/golden/types-union-print-nested/types/txt
2043−/* src-562 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2044−/* tok-562 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2045−/* tre-562 %txt /tests/golden/types-union-print-same-origin/tree/txt
2046−/* mod-562-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2047−/* typ-562 %txt /tests/golden/types-union-print-same-origin/types/txt
2048−/* mtre-562 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2049−/* src-563 %jibb /tests/golden/types-union-print-transitive/source/jibb
2050−/* tok-563 %txt /tests/golden/types-union-print-transitive/tokens/txt
2051−/* tre-563 %txt /tests/golden/types-union-print-transitive/tree/txt
2052−/* mod-563-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2053−/* mod-563-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2054−/* typ-563 %txt /tests/golden/types-union-print-transitive/types/txt
2055−/* mtre-563 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2056−/* src-564 %jibb /tests/golden/types-union-singleton/source/jibb
2057−/* tok-564 %txt /tests/golden/types-union-singleton/tokens/txt
2058−/* tre-564 %txt /tests/golden/types-union-singleton/tree/txt
2059−/* typ-564 %txt /tests/golden/types-union-singleton/types/txt
2060−/* src-565 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2061−/* tok-565 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2062−/* tre-565 %txt /tests/golden/types-union-tag-atoms/tree/txt
2063−/* typ-565 %txt /tests/golden/types-union-tag-atoms/types/txt
2064−/* src-566 %jibb /tests/golden/types-union-tags/source/jibb
2065−/* tok-566 %txt /tests/golden/types-union-tags/tokens/txt
2066−/* tre-566 %txt /tests/golden/types-union-tags/tree/txt
2067−/* typ-566 %txt /tests/golden/types-union-tags/types/txt
2068−/* src-567 %jibb /tests/golden/types-union-unresolved/source/jibb
2069−/* tok-567 %txt /tests/golden/types-union-unresolved/tokens/txt
2070−/* tre-567 %txt /tests/golden/types-union-unresolved/tree/txt
2071−/* typ-567 %txt /tests/golden/types-union-unresolved/types/txt
2072−/* src-568 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2073−/* tok-568 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2074−/* tre-568 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2075−/* typ-568 %txt /tests/golden/types-union-unresolved-flow/types/txt
2076−/* src-569 %jibb /tests/golden/types-unit-construction/source/jibb
2077−/* tok-569 %txt /tests/golden/types-unit-construction/tokens/txt
2078−/* tre-569 %txt /tests/golden/types-unit-construction/tree/txt
2079−/* typ-569 %txt /tests/golden/types-unit-construction/types/txt
2080−/* src-570 %jibb /tests/golden/types-unit-context/source/jibb
2081−/* tok-570 %txt /tests/golden/types-unit-context/tokens/txt
2082−/* tre-570 %txt /tests/golden/types-unit-context/tree/txt
2083−/* typ-570 %txt /tests/golden/types-unit-context/types/txt
2084−/* src-571 %jibb /tests/golden/types-unit-patterns/source/jibb
2085−/* tok-571 %txt /tests/golden/types-unit-patterns/tokens/txt
2086−/* tre-571 %txt /tests/golden/types-unit-patterns/tree/txt
2087−/* typ-571 %txt /tests/golden/types-unit-patterns/types/txt
2088−/* src-572 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2089−/* tok-572 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2090−/* tre-572 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2091−/* typ-572 %txt /tests/golden/types-value-cycle-shadow/types/txt
2092−/* src-573 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2093−/* tok-573 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2094−/* tre-573 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2095−/* typ-573 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2096−/* src-574 %jibb /tests/golden/types-value-cycles/source/jibb
2097−/* tok-574 %txt /tests/golden/types-value-cycles/tokens/txt
2098−/* tre-574 %txt /tests/golden/types-value-cycles/tree/txt
2099−/* typ-574 %txt /tests/golden/types-value-cycles/types/txt
1289+/* src-396 %jibb /tests/golden/parser-hole-parameter-rejected/source/jibb
1290+/* tok-396 %txt /tests/golden/parser-hole-parameter-rejected/tokens/txt
1291+/* tre-396 %txt /tests/golden/parser-hole-parameter-rejected/tree/txt
1292+/* src-397 %jibb /tests/golden/parser-hole-path/source/jibb
1293+/* tok-397 %txt /tests/golden/parser-hole-path/tokens/txt
1294+/* tre-397 %txt /tests/golden/parser-hole-path/tree/txt
1295+/* src-398 %jibb /tests/golden/parser-hole-path-space/source/jibb
1296+/* tok-398 %txt /tests/golden/parser-hole-path-space/tokens/txt
1297+/* tre-398 %txt /tests/golden/parser-hole-path-space/tree/txt
1298+/* src-399 %jibb /tests/golden/parser-hole-pattern-rejected/source/jibb
1299+/* tok-399 %txt /tests/golden/parser-hole-pattern-rejected/tokens/txt
1300+/* tre-399 %txt /tests/golden/parser-hole-pattern-rejected/tree/txt
1301+/* src-400 %jibb /tests/golden/parser-hole-shapes/source/jibb
1302+/* tok-400 %txt /tests/golden/parser-hole-shapes/tokens/txt
1303+/* tre-400 %txt /tests/golden/parser-hole-shapes/tree/txt
1304+/* src-401 %jibb /tests/golden/parser-hole-value-rejected/source/jibb
1305+/* tok-401 %txt /tests/golden/parser-hole-value-rejected/tokens/txt
1306+/* tre-401 %txt /tests/golden/parser-hole-value-rejected/tree/txt
1307+/* src-402 %jibb /tests/golden/prelude-1c-structural/source/jibb
1308+/* tok-402 %txt /tests/golden/prelude-1c-structural/tokens/txt
1309+/* tre-402 %txt /tests/golden/prelude-1c-structural/tree/txt
1310+/* typ-402 %txt /tests/golden/prelude-1c-structural/types/txt
1311+/* src-403 %jibb /tests/golden/prelude-3g-basic/source/jibb
1312+/* tok-403 %txt /tests/golden/prelude-3g-basic/tokens/txt
1313+/* tre-403 %txt /tests/golden/prelude-3g-basic/tree/txt
1314+/* typ-403 %txt /tests/golden/prelude-3g-basic/types/txt
1315+/* src-404 %jibb /tests/golden/prelude-3g-like/source/jibb
1316+/* tok-404 %txt /tests/golden/prelude-3g-like/tokens/txt
1317+/* tre-404 %txt /tests/golden/prelude-3g-like/tree/txt
1318+/* typ-404 %txt /tests/golden/prelude-3g-like/types/txt
1319+/* src-405 %jibb /tests/golden/prelude-3g-structural/source/jibb
1320+/* tok-405 %txt /tests/golden/prelude-3g-structural/tokens/txt
1321+/* tre-405 %txt /tests/golden/prelude-3g-structural/tree/txt
1322+/* typ-405 %txt /tests/golden/prelude-3g-structural/types/txt
1323+/* src-406 %jibb /tests/golden/prelude-core-functions/source/jibb
1324+/* tok-406 %txt /tests/golden/prelude-core-functions/tokens/txt
1325+/* tre-406 %txt /tests/golden/prelude-core-functions/tree/txt
1326+/* typ-406 %txt /tests/golden/prelude-core-functions/types/txt
1327+/* src-407 %jibb /tests/golden/prelude-list-helpers/source/jibb
1328+/* tok-407 %txt /tests/golden/prelude-list-helpers/tokens/txt
1329+/* tre-407 %txt /tests/golden/prelude-list-helpers/tree/txt
1330+/* typ-407 %txt /tests/golden/prelude-list-helpers/types/txt
1331+/* src-408 %jibb /tests/golden/prelude-list-unit/source/jibb
1332+/* tok-408 %txt /tests/golden/prelude-list-unit/tokens/txt
1333+/* tre-408 %txt /tests/golden/prelude-list-unit/tree/txt
1334+/* typ-408 %txt /tests/golden/prelude-list-unit/types/txt
1335+/* src-409 %jibb /tests/golden/prelude-unit-list-transforms/source/jibb
1336+/* tok-409 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1337+/* tre-409 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1338+/* typ-409 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1339+/* src-410 %jibb /tests/golden/types-capital-distinct/source/jibb
1340+/* tok-410 %txt /tests/golden/types-capital-distinct/tokens/txt
1341+/* tre-410 %txt /tests/golden/types-capital-distinct/tree/txt
1342+/* typ-410 %txt /tests/golden/types-capital-distinct/types/txt
1343+/* src-411 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1344+/* tok-411 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1345+/* tre-411 %txt /tests/golden/types-cell-pattern-many/tree/txt
1346+/* typ-411 %txt /tests/golden/types-cell-pattern-many/types/txt
1347+/* src-412 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1348+/* tok-412 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1349+/* tre-412 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1350+/* typ-412 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1351+/* src-413 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1352+/* tok-413 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1353+/* tre-413 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1354+/* typ-413 %txt /tests/golden/types-cell-pattern-tail/types/txt
1355+/* src-414 %jibb /tests/golden/types-deferred-call-context/source/jibb
1356+/* tok-414 %txt /tests/golden/types-deferred-call-context/tokens/txt
1357+/* tre-414 %txt /tests/golden/types-deferred-call-context/tree/txt
1358+/* typ-414 %txt /tests/golden/types-deferred-call-context/types/txt
1359+/* src-415 %jibb /tests/golden/types-flag-branch-context/source/jibb
1360+/* tok-415 %txt /tests/golden/types-flag-branch-context/tokens/txt
1361+/* tre-415 %txt /tests/golden/types-flag-branch-context/tree/txt
1362+/* typ-415 %txt /tests/golden/types-flag-branch-context/types/txt
1363+/* src-416 %jibb /tests/golden/types-generic-arity/source/jibb
1364+/* tok-416 %txt /tests/golden/types-generic-arity/tokens/txt
1365+/* tre-416 %txt /tests/golden/types-generic-arity/tree/txt
1366+/* typ-416 %txt /tests/golden/types-generic-arity/types/txt
1367+/* src-417 %jibb /tests/golden/types-generic-face-inference/source/jibb
1368+/* tok-417 %txt /tests/golden/types-generic-face-inference/tokens/txt
1369+/* tre-417 %txt /tests/golden/types-generic-face-inference/tree/txt
1370+/* typ-417 %txt /tests/golden/types-generic-face-inference/types/txt
1371+/* src-418 %jibb /tests/golden/types-generic-gates/source/jibb
1372+/* tok-418 %txt /tests/golden/types-generic-gates/tokens/txt
1373+/* tre-418 %txt /tests/golden/types-generic-gates/tree/txt
1374+/* typ-418 %txt /tests/golden/types-generic-gates/types/txt
1375+/* src-419 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1376+/* tok-419 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1377+/* tre-419 %txt /tests/golden/types-generic-import-reverse/tree/txt
1378+/* mod-419-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1379+/* typ-419 %txt /tests/golden/types-generic-import-reverse/types/txt
1380+/* mtre-419 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1381+/* src-420 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1382+/* tok-420 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1383+/* tre-420 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1384+/* typ-420 %txt /tests/golden/types-generic-lexical-alias/types/txt
1385+/* src-421 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1386+/* tok-421 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1387+/* tre-421 %txt /tests/golden/types-generic-local-parameter/tree/txt
1388+/* typ-421 %txt /tests/golden/types-generic-local-parameter/types/txt
1389+/* src-422 %jibb /tests/golden/types-generic-local-scope/source/jibb
1390+/* tok-422 %txt /tests/golden/types-generic-local-scope/tokens/txt
1391+/* tre-422 %txt /tests/golden/types-generic-local-scope/tree/txt
1392+/* typ-422 %txt /tests/golden/types-generic-local-scope/types/txt
1393+/* src-423 %jibb /tests/golden/types-generic-module/source/jibb
1394+/* tok-423 %txt /tests/golden/types-generic-module/tokens/txt
1395+/* tre-423 %txt /tests/golden/types-generic-module/tree/txt
1396+/* mod-423-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1397+/* typ-423 %txt /tests/golden/types-generic-module/types/txt
1398+/* mtre-423 %txt /tests/golden/types-generic-module/module-trees/txt
1399+/* src-424 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1400+/* tok-424 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1401+/* tre-424 %txt /tests/golden/types-generic-nested-scope/tree/txt
1402+/* typ-424 %txt /tests/golden/types-generic-nested-scope/types/txt
1403+/* src-425 %jibb /tests/golden/types-generic-parameters/source/jibb
1404+/* tok-425 %txt /tests/golden/types-generic-parameters/tokens/txt
1405+/* tre-425 %txt /tests/golden/types-generic-parameters/tree/txt
1406+/* typ-425 %txt /tests/golden/types-generic-parameters/types/txt
1407+/* src-426 %jibb /tests/golden/types-generic-record/source/jibb
1408+/* tok-426 %txt /tests/golden/types-generic-record/tokens/txt
1409+/* tre-426 %txt /tests/golden/types-generic-record/tree/txt
1410+/* typ-426 %txt /tests/golden/types-generic-record/types/txt
1411+/* src-427 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1412+/* tok-427 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1413+/* tre-427 %txt /tests/golden/types-generic-recursive-union/tree/txt
1414+/* typ-427 %txt /tests/golden/types-generic-recursive-union/types/txt
1415+/* src-428 %jibb /tests/golden/types-generic-repeated/source/jibb
1416+/* tok-428 %txt /tests/golden/types-generic-repeated/tokens/txt
1417+/* tre-428 %txt /tests/golden/types-generic-repeated/tree/txt
1418+/* typ-428 %txt /tests/golden/types-generic-repeated/types/txt
1419+/* src-429 %jibb /tests/golden/types-generic-union-alias/source/jibb
1420+/* tok-429 %txt /tests/golden/types-generic-union-alias/tokens/txt
1421+/* tre-429 %txt /tests/golden/types-generic-union-alias/tree/txt
1422+/* typ-429 %txt /tests/golden/types-generic-union-alias/types/txt
1423+/* src-430 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1424+/* tok-430 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1425+/* tre-430 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1426+/* mod-430-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1427+/* typ-430 %txt /tests/golden/types-generic-union-alias-face/types/txt
1428+/* mtre-430 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1429+/* src-431 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1430+/* tok-431 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1431+/* tre-431 %txt /tests/golden/types-generic-union-capitals/tree/txt
1432+/* typ-431 %txt /tests/golden/types-generic-union-capitals/types/txt
1433+/* src-432 %jibb /tests/golden/types-generic-union-errors/source/jibb
1434+/* tok-432 %txt /tests/golden/types-generic-union-errors/tokens/txt
1435+/* tre-432 %txt /tests/golden/types-generic-union-errors/tree/txt
1436+/* typ-432 %txt /tests/golden/types-generic-union-errors/types/txt
1437+/* src-433 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1438+/* tok-433 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1439+/* tre-433 %txt /tests/golden/types-generic-union-escaping/tree/txt
1440+/* mod-433-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1441+/* mod-433-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1442+/* typ-433 %txt /tests/golden/types-generic-union-escaping/types/txt
1443+/* mtre-433 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1444+/* src-434 %jibb /tests/golden/types-generic-union-import/source/jibb
1445+/* tok-434 %txt /tests/golden/types-generic-union-import/tokens/txt
1446+/* tre-434 %txt /tests/golden/types-generic-union-import/tree/txt
1447+/* mod-434-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1448+/* mod-434-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1449+/* typ-434 %txt /tests/golden/types-generic-union-import/types/txt
1450+/* mtre-434 %txt /tests/golden/types-generic-union-import/module-trees/txt
1451+/* src-435 %jibb /tests/golden/types-generic-union-local/source/jibb
1452+/* tok-435 %txt /tests/golden/types-generic-union-local/tokens/txt
1453+/* tre-435 %txt /tests/golden/types-generic-union-local/tree/txt
1454+/* typ-435 %txt /tests/golden/types-generic-union-local/types/txt
1455+/* src-436 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1456+/* tok-436 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1457+/* tre-436 %txt /tests/golden/types-generic-union-transitive/tree/txt
1458+/* mod-436-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1459+/* mod-436-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1460+/* typ-436 %txt /tests/golden/types-generic-union-transitive/types/txt
1461+/* mtre-436 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1462+/* src-437 %jibb /tests/golden/types-hole-concrete/source/jibb
1463+/* tok-437 %txt /tests/golden/types-hole-concrete/tokens/txt
1464+/* tre-437 %txt /tests/golden/types-hole-concrete/tree/txt
1465+/* typ-437 %txt /tests/golden/types-hole-concrete/types/txt
1466+/* src-438 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1467+/* tok-438 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1468+/* tre-438 %txt /tests/golden/types-hole-generic-mold/tree/txt
1469+/* typ-438 %txt /tests/golden/types-hole-generic-mold/types/txt
1470+/* src-439 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1471+/* tok-439 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1472+/* tre-439 %txt /tests/golden/types-hole-local-boundary/tree/txt
1473+/* typ-439 %txt /tests/golden/types-hole-local-boundary/types/txt
1474+/* src-440 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1475+/* tok-440 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1476+/* tre-440 %txt /tests/golden/types-hole-module-boundary/tree/txt
1477+/* mod-440-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1478+/* typ-440 %txt /tests/golden/types-hole-module-boundary/types/txt
1479+/* mtre-440 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1480+/* src-441 %jibb /tests/golden/types-hole-named-complex/source/jibb
1481+/* tok-441 %txt /tests/golden/types-hole-named-complex/tokens/txt
1482+/* tre-441 %txt /tests/golden/types-hole-named-complex/tree/txt
1483+/* typ-441 %txt /tests/golden/types-hole-named-complex/types/txt
1484+/* src-442 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1485+/* tok-442 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1486+/* tre-442 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1487+/* typ-442 %txt /tests/golden/types-hole-numeric-capture/types/txt
1488+/* src-443 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1489+/* tok-443 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1490+/* tre-443 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1491+/* typ-443 %txt /tests/golden/types-hole-unbound-mold/types/txt
1492+/* src-444 %jibb /tests/golden/types-hole-unsupported/source/jibb
1493+/* tok-444 %txt /tests/golden/types-hole-unsupported/tokens/txt
1494+/* tre-444 %txt /tests/golden/types-hole-unsupported/tree/txt
1495+/* typ-444 %txt /tests/golden/types-hole-unsupported/types/txt
1496+/* src-445 %jibb /tests/golden/types-hole-user-generic/source/jibb
1497+/* tok-445 %txt /tests/golden/types-hole-user-generic/tokens/txt
1498+/* tre-445 %txt /tests/golden/types-hole-user-generic/tree/txt
1499+/* typ-445 %txt /tests/golden/types-hole-user-generic/types/txt
1500+/* src-446 %jibb /tests/golden/types-hole-user-named/source/jibb
1501+/* tok-446 %txt /tests/golden/types-hole-user-named/tokens/txt
1502+/* tre-446 %txt /tests/golden/types-hole-user-named/tree/txt
1503+/* typ-446 %txt /tests/golden/types-hole-user-named/types/txt
1504+/* src-447 %jibb /tests/golden/types-hole-user-value/source/jibb
1505+/* tok-447 %txt /tests/golden/types-hole-user-value/tokens/txt
1506+/* tre-447 %txt /tests/golden/types-hole-user-value/tree/txt
1507+/* typ-447 %txt /tests/golden/types-hole-user-value/types/txt
1508+/* src-448 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1509+/* tok-448 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1510+/* tre-448 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1511+/* typ-448 %txt /tests/golden/types-import-duplicate-mark/types/txt
1512+/* mark-448-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1513+/* src-449 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1514+/* tok-449 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1515+/* tre-449 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1516+/* typ-449 %txt /tests/golden/types-import-duplicate-sur/types/txt
1517+/* imp-449-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1518+/* imp-449-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1519+/* imp-449-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1520+/* src-450 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1521+/* tok-450 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1522+/* tre-450 %txt /tests/golden/types-import-hoon-flags/tree/txt
1523+/* typ-450 %txt /tests/golden/types-import-hoon-flags/types/txt
1524+/* imp-450-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1525+/* imp-450-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1526+/* imp-450-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1527+/* imp-450-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1528+/* src-451 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1529+/* tok-451 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1530+/* tre-451 %txt /tests/golden/types-import-hoon-noun/tree/txt
1531+/* typ-451 %txt /tests/golden/types-import-hoon-noun/types/txt
1532+/* imp-451-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1533+/* imp-451-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1534+/* imp-451-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1535+/* imp-451-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1536+/* src-452 %jibb /tests/golden/types-import-mark/source/jibb
1537+/* tok-452 %txt /tests/golden/types-import-mark/tokens/txt
1538+/* tre-452 %txt /tests/golden/types-import-mark/tree/txt
1539+/* typ-452 %txt /tests/golden/types-import-mark/types/txt
1540+/* imp-452-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1541+/* mark-452-1 %txt /tests/golden/types-import-mark/mar/label/txt
1542+/* src-453 %jibb /tests/golden/types-import-mark-record/source/jibb
1543+/* tok-453 %txt /tests/golden/types-import-mark-record/tokens/txt
1544+/* tre-453 %txt /tests/golden/types-import-mark-record/tree/txt
1545+/* typ-453 %txt /tests/golden/types-import-mark-record/types/txt
1546+/* mark-453-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1547+/* mark-453-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1548+/* src-454 %jibb /tests/golden/types-import-missing-mold/source/jibb
1549+/* tok-454 %txt /tests/golden/types-import-missing-mold/tokens/txt
1550+/* tre-454 %txt /tests/golden/types-import-missing-mold/tree/txt
1551+/* typ-454 %txt /tests/golden/types-import-missing-mold/types/txt
1552+/* imp-454-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1553+/* src-455 %jibb /tests/golden/types-import-sur/source/jibb
1554+/* tok-455 %txt /tests/golden/types-import-sur/tokens/txt
1555+/* tre-455 %txt /tests/golden/types-import-sur/tree/txt
1556+/* typ-455 %txt /tests/golden/types-import-sur/types/txt
1557+/* imp-455-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1558+/* imp-455-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1559+/* src-456 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1560+/* tok-456 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1561+/* tre-456 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1562+/* mod-456-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1563+/* typ-456 %txt /tests/golden/types-import-sur-record-graph/types/txt
1564+/* imp-456-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1565+/* mtre-456 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1566+/* src-457 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1567+/* tok-457 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1568+/* tre-457 %txt /tests/golden/types-import-tlon-notes/tree/txt
1569+/* typ-457 %txt /tests/golden/types-import-tlon-notes/types/txt
1570+/* imp-457-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1571+/* imp-457-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1572+/* imp-457-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1573+/* imp-457-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1574+/* imp-457-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1575+/* imp-457-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1576+/* imp-457-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1577+/* src-458 %jibb /tests/golden/types-list-branch/source/jibb
1578+/* tok-458 %txt /tests/golden/types-list-branch/tokens/txt
1579+/* tre-458 %txt /tests/golden/types-list-branch/tree/txt
1580+/* typ-458 %txt /tests/golden/types-list-branch/types/txt
1581+/* src-459 %jibb /tests/golden/types-list-cons/source/jibb
1582+/* tok-459 %txt /tests/golden/types-list-cons/tokens/txt
1583+/* tre-459 %txt /tests/golden/types-list-cons/tree/txt
1584+/* typ-459 %txt /tests/golden/types-list-cons/types/txt
1585+/* src-460 %jibb /tests/golden/types-list-context/source/jibb
1586+/* tok-460 %txt /tests/golden/types-list-context/tokens/txt
1587+/* tre-460 %txt /tests/golden/types-list-context/tree/txt
1588+/* typ-460 %txt /tests/golden/types-list-context/types/txt
1589+/* src-461 %jibb /tests/golden/types-list-imported/source/jibb
1590+/* tok-461 %txt /tests/golden/types-list-imported/tokens/txt
1591+/* tre-461 %txt /tests/golden/types-list-imported/tree/txt
1592+/* typ-461 %txt /tests/golden/types-list-imported/types/txt
1593+/* imp-461-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1594+/* imp-461-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1595+/* src-462 %jibb /tests/golden/types-list-open/source/jibb
1596+/* tok-462 %txt /tests/golden/types-list-open/tokens/txt
1597+/* tre-462 %txt /tests/golden/types-list-open/tree/txt
1598+/* typ-462 %txt /tests/golden/types-list-open/types/txt
1599+/* src-463 %jibb /tests/golden/types-list-open-constraints/source/jibb
1600+/* tok-463 %txt /tests/golden/types-list-open-constraints/tokens/txt
1601+/* tre-463 %txt /tests/golden/types-list-open-constraints/tree/txt
1602+/* typ-463 %txt /tests/golden/types-list-open-constraints/types/txt
1603+/* src-464 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1604+/* tok-464 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1605+/* tre-464 %txt /tests/golden/types-list-pattern-imported/tree/txt
1606+/* typ-464 %txt /tests/golden/types-list-pattern-imported/types/txt
1607+/* imp-464-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1608+/* imp-464-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1609+/* src-465 %jibb /tests/golden/types-list-patterns/source/jibb
1610+/* tok-465 %txt /tests/golden/types-list-patterns/tokens/txt
1611+/* tre-465 %txt /tests/golden/types-list-patterns/tree/txt
1612+/* typ-465 %txt /tests/golden/types-list-patterns/types/txt
1613+/* src-466 %jibb /tests/golden/types-list-zero-fit/source/jibb
1614+/* tok-466 %txt /tests/golden/types-list-zero-fit/tokens/txt
1615+/* tre-466 %txt /tests/golden/types-list-zero-fit/tree/txt
1616+/* typ-466 %txt /tests/golden/types-list-zero-fit/types/txt
1617+/* src-467 %jibb /tests/golden/types-local-capitals/source/jibb
1618+/* tok-467 %txt /tests/golden/types-local-capitals/tokens/txt
1619+/* tre-467 %txt /tests/golden/types-local-capitals/tree/txt
1620+/* typ-467 %txt /tests/golden/types-local-capitals/types/txt
1621+/* src-468 %jibb /tests/golden/types-local-recursive/source/jibb
1622+/* tok-468 %txt /tests/golden/types-local-recursive/tokens/txt
1623+/* tre-468 %txt /tests/golden/types-local-recursive/tree/txt
1624+/* typ-468 %txt /tests/golden/types-local-recursive/types/txt
1625+/* src-469 %jibb /tests/golden/types-local-scc/source/jibb
1626+/* tok-469 %txt /tests/golden/types-local-scc/tokens/txt
1627+/* tre-469 %txt /tests/golden/types-local-scc/tree/txt
1628+/* typ-469 %txt /tests/golden/types-local-scc/types/txt
1629+/* src-470 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1630+/* tok-470 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1631+/* tre-470 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1632+/* typ-470 %txt /tests/golden/types-local-scc-adversarial/types/txt
1633+/* src-471 %jibb /tests/golden/types-missing-tag-context/source/jibb
1634+/* tok-471 %txt /tests/golden/types-missing-tag-context/tokens/txt
1635+/* tre-471 %txt /tests/golden/types-missing-tag-context/tree/txt
1636+/* typ-471 %txt /tests/golden/types-missing-tag-context/types/txt
1637+/* src-472 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1638+/* tok-472 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1639+/* tre-472 %txt /tests/golden/types-missing-tag-imported/tree/txt
1640+/* typ-472 %txt /tests/golden/types-missing-tag-imported/types/txt
1641+/* imp-472-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1642+/* imp-472-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1643+/* src-473 %jibb /tests/golden/types-missing-tag-named/source/jibb
1644+/* tok-473 %txt /tests/golden/types-missing-tag-named/tokens/txt
1645+/* tre-473 %txt /tests/golden/types-missing-tag-named/tree/txt
1646+/* typ-473 %txt /tests/golden/types-missing-tag-named/types/txt
1647+/* src-474 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1648+/* tok-474 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1649+/* tre-474 %txt /tests/golden/types-module-field-duplicate/tree/txt
1650+/* mod-474-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1651+/* typ-474 %txt /tests/golden/types-module-field-duplicate/types/txt
1652+/* mtre-474 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1653+/* src-475 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1654+/* tok-475 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1655+/* tre-475 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1656+/* mod-475-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1657+/* typ-475 %txt /tests/golden/types-module-field-nonrecord/types/txt
1658+/* mtre-475 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1659+/* src-476 %jibb /tests/golden/types-module-field-path/source/jibb
1660+/* tok-476 %txt /tests/golden/types-module-field-path/tokens/txt
1661+/* tre-476 %txt /tests/golden/types-module-field-path/tree/txt
1662+/* mod-476-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1663+/* typ-476 %txt /tests/golden/types-module-field-path/types/txt
1664+/* mtre-476 %txt /tests/golden/types-module-field-path/module-trees/txt
1665+/* src-477 %jibb /tests/golden/types-module-field-shadow/source/jibb
1666+/* tok-477 %txt /tests/golden/types-module-field-shadow/tokens/txt
1667+/* tre-477 %txt /tests/golden/types-module-field-shadow/tree/txt
1668+/* mod-477-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1669+/* typ-477 %txt /tests/golden/types-module-field-shadow/types/txt
1670+/* mtre-477 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1671+/* src-478 %jibb /tests/golden/types-module-fixtures/source/jibb
1672+/* tok-478 %txt /tests/golden/types-module-fixtures/tokens/txt
1673+/* tre-478 %txt /tests/golden/types-module-fixtures/tree/txt
1674+/* mod-478-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1675+/* mod-478-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1676+/* typ-478 %txt /tests/golden/types-module-fixtures/types/txt
1677+/* mtre-478 %txt /tests/golden/types-module-fixtures/module-trees/txt
1678+/* src-479 %jibb /tests/golden/types-module-mixed/source/jibb
1679+/* tok-479 %txt /tests/golden/types-module-mixed/tokens/txt
1680+/* tre-479 %txt /tests/golden/types-module-mixed/tree/txt
1681+/* mod-479-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1682+/* typ-479 %txt /tests/golden/types-module-mixed/types/txt
1683+/* imp-479-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1684+/* mark-479-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1685+/* mtre-479 %txt /tests/golden/types-module-mixed/module-trees/txt
1686+/* src-480 %jibb /tests/golden/types-multi-call/source/jibb
1687+/* tok-480 %txt /tests/golden/types-multi-call/tokens/txt
1688+/* tre-480 %txt /tests/golden/types-multi-call/tree/txt
1689+/* typ-480 %txt /tests/golden/types-multi-call/types/txt
1690+/* src-481 %jibb /tests/golden/types-multi-import/source/jibb
1691+/* tok-481 %txt /tests/golden/types-multi-import/tokens/txt
1692+/* tre-481 %txt /tests/golden/types-multi-import/tree/txt
1693+/* mod-481-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1694+/* typ-481 %txt /tests/golden/types-multi-import/types/txt
1695+/* mtre-481 %txt /tests/golden/types-multi-import/module-trees/txt
1696+/* src-482 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1697+/* tok-482 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1698+/* tre-482 %txt /tests/golden/types-nested-missing-tag/tree/txt
1699+/* typ-482 %txt /tests/golden/types-nested-missing-tag/types/txt
1700+/* src-483 %jibb /tests/golden/types-null-context/source/jibb
1701+/* tok-483 %txt /tests/golden/types-null-context/tokens/txt
1702+/* tre-483 %txt /tests/golden/types-null-context/tree/txt
1703+/* typ-483 %txt /tests/golden/types-null-context/types/txt
1704+/* src-484 %jibb /tests/golden/types-null-overlap/source/jibb
1705+/* tok-484 %txt /tests/golden/types-null-overlap/tokens/txt
1706+/* tre-484 %txt /tests/golden/types-null-overlap/tree/txt
1707+/* typ-484 %txt /tests/golden/types-null-overlap/types/txt
1708+/* src-485 %jibb /tests/golden/types-null-unresolved/source/jibb
1709+/* tok-485 %txt /tests/golden/types-null-unresolved/tokens/txt
1710+/* tre-485 %txt /tests/golden/types-null-unresolved/tree/txt
1711+/* typ-485 %txt /tests/golden/types-null-unresolved/types/txt
1712+/* src-486 %jibb /tests/golden/types-pair-context/source/jibb
1713+/* tok-486 %txt /tests/golden/types-pair-context/tokens/txt
1714+/* tre-486 %txt /tests/golden/types-pair-context/tree/txt
1715+/* typ-486 %txt /tests/golden/types-pair-context/types/txt
1716+/* src-487 %jibb /tests/golden/types-partial-apply/source/jibb
1717+/* tok-487 %txt /tests/golden/types-partial-apply/tokens/txt
1718+/* tre-487 %txt /tests/golden/types-partial-apply/tree/txt
1719+/* typ-487 %txt /tests/golden/types-partial-apply/types/txt
1720+/* src-488 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1721+/* tok-488 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1722+/* tre-488 %txt /tests/golden/types-partial-atom-alias/tree/txt
1723+/* typ-488 %txt /tests/golden/types-partial-atom-alias/types/txt
1724+/* src-489 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1725+/* tok-489 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1726+/* tre-489 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1727+/* typ-489 %txt /tests/golden/types-partial-atom-constraint/types/txt
1728+/* src-490 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1729+/* tok-490 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1730+/* tre-490 %txt /tests/golden/types-partial-atom-widening/tree/txt
1731+/* typ-490 %txt /tests/golden/types-partial-atom-widening/types/txt
1732+/* src-491 %jibb /tests/golden/types-partial-aura/source/jibb
1733+/* tok-491 %txt /tests/golden/types-partial-aura/tokens/txt
1734+/* tre-491 %txt /tests/golden/types-partial-aura/tree/txt
1735+/* typ-491 %txt /tests/golden/types-partial-aura/types/txt
1736+/* src-492 %jibb /tests/golden/types-partial-aura-family/source/jibb
1737+/* tok-492 %txt /tests/golden/types-partial-aura-family/tokens/txt
1738+/* tre-492 %txt /tests/golden/types-partial-aura-family/tree/txt
1739+/* typ-492 %txt /tests/golden/types-partial-aura-family/types/txt
1740+/* src-493 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1741+/* tok-493 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1742+/* tre-493 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1743+/* typ-493 %txt /tests/golden/types-partial-aura-generalization/types/txt
1744+/* src-494 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1745+/* tok-494 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1746+/* tre-494 %txt /tests/golden/types-partial-bare-atom/tree/txt
1747+/* typ-494 %txt /tests/golden/types-partial-bare-atom/types/txt
1748+/* src-495 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1749+/* tok-495 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1750+/* tre-495 %txt /tests/golden/types-partial-branch-widening/tree/txt
1751+/* typ-495 %txt /tests/golden/types-partial-branch-widening/types/txt
1752+/* src-496 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1753+/* tok-496 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1754+/* tre-496 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1755+/* typ-496 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1756+/* src-497 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1757+/* tok-497 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1758+/* tre-497 %txt /tests/golden/types-partial-decimal-default/tree/txt
1759+/* typ-497 %txt /tests/golden/types-partial-decimal-default/types/txt
1760+/* src-498 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1761+/* tok-498 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1762+/* tre-498 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1763+/* typ-498 %txt /tests/golden/types-partial-dependency-chain/types/txt
1764+/* src-499 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1765+/* tok-499 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1766+/* tre-499 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1767+/* typ-499 %txt /tests/golden/types-partial-explicit-capital/types/txt
1768+/* src-500 %jibb /tests/golden/types-partial-forward/source/jibb
1769+/* tok-500 %txt /tests/golden/types-partial-forward/tokens/txt
1770+/* tre-500 %txt /tests/golden/types-partial-forward/tree/txt
1771+/* typ-500 %txt /tests/golden/types-partial-forward/types/txt
1772+/* src-501 %jibb /tests/golden/types-partial-generalization/source/jibb
1773+/* tok-501 %txt /tests/golden/types-partial-generalization/tokens/txt
1774+/* tre-501 %txt /tests/golden/types-partial-generalization/tree/txt
1775+/* typ-501 %txt /tests/golden/types-partial-generalization/types/txt
1776+/* src-502 %jibb /tests/golden/types-partial-identity/source/jibb
1777+/* tok-502 %txt /tests/golden/types-partial-identity/tokens/txt
1778+/* tre-502 %txt /tests/golden/types-partial-identity/tree/txt
1779+/* typ-502 %txt /tests/golden/types-partial-identity/types/txt
1780+/* src-503 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1781+/* tok-503 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1782+/* tre-503 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1783+/* typ-503 %txt /tests/golden/types-partial-independent-atoms/types/txt
1784+/* src-504 %jibb /tests/golden/types-partial-local-molds/source/jibb
1785+/* tok-504 %txt /tests/golden/types-partial-local-molds/tokens/txt
1786+/* tre-504 %txt /tests/golden/types-partial-local-molds/tree/txt
1787+/* typ-504 %txt /tests/golden/types-partial-local-molds/types/txt
1788+/* src-505 %jibb /tests/golden/types-partial-locals/source/jibb
1789+/* tok-505 %txt /tests/golden/types-partial-locals/tokens/txt
1790+/* tre-505 %txt /tests/golden/types-partial-locals/tree/txt
1791+/* typ-505 %txt /tests/golden/types-partial-locals/types/txt
1792+/* src-506 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1793+/* tok-506 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1794+/* tre-506 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1795+/* typ-506 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1796+/* src-507 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1797+/* tok-507 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1798+/* tre-507 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1799+/* typ-507 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1800+/* src-508 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1801+/* tok-508 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1802+/* tre-508 %txt /tests/golden/types-partial-mold-composite/tree/txt
1803+/* typ-508 %txt /tests/golden/types-partial-mold-composite/types/txt
1804+/* src-509 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1805+/* tok-509 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1806+/* tre-509 %txt /tests/golden/types-partial-mold-forward/tree/txt
1807+/* typ-509 %txt /tests/golden/types-partial-mold-forward/types/txt
1808+/* src-510 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1809+/* tok-510 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1810+/* tre-510 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1811+/* typ-510 %txt /tests/golden/types-partial-mold-recursive/types/txt
1812+/* src-511 %jibb /tests/golden/types-partial-occurs/source/jibb
1813+/* tok-511 %txt /tests/golden/types-partial-occurs/tokens/txt
1814+/* tre-511 %txt /tests/golden/types-partial-occurs/tree/txt
1815+/* typ-511 %txt /tests/golden/types-partial-occurs/types/txt
1816+/* src-512 %jibb /tests/golden/types-partial-projection/source/jibb
1817+/* tok-512 %txt /tests/golden/types-partial-projection/tokens/txt
1818+/* tre-512 %txt /tests/golden/types-partial-projection/tree/txt
1819+/* typ-512 %txt /tests/golden/types-partial-projection/types/txt
1820+/* src-513 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1821+/* tok-513 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1822+/* tre-513 %txt /tests/golden/types-partial-shadow-global/tree/txt
1823+/* typ-513 %txt /tests/golden/types-partial-shadow-global/types/txt
1824+/* src-514 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1825+/* tok-514 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1826+/* tre-514 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1827+/* typ-514 %txt /tests/golden/types-partial-shared-tvar/types/txt
1828+/* src-515 %jibb /tests/golden/types-partial-union-cases/source/jibb
1829+/* tok-515 %txt /tests/golden/types-partial-union-cases/tokens/txt
1830+/* tre-515 %txt /tests/golden/types-partial-union-cases/tree/txt
1831+/* typ-515 %txt /tests/golden/types-partial-union-cases/types/txt
1832+/* src-516 %jibb /tests/golden/types-partial-union-edges/source/jibb
1833+/* tok-516 %txt /tests/golden/types-partial-union-edges/tokens/txt
1834+/* tre-516 %txt /tests/golden/types-partial-union-edges/tree/txt
1835+/* typ-516 %txt /tests/golden/types-partial-union-edges/types/txt
1836+/* src-517 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1837+/* tok-517 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1838+/* tre-517 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1839+/* typ-517 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1840+/* src-518 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1841+/* tok-518 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1842+/* tre-518 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1843+/* typ-518 %txt /tests/golden/types-prelude-arithmetic/types/txt
1844+/* src-519 %jibb /tests/golden/types-prelude-bond/source/jibb
1845+/* tok-519 %txt /tests/golden/types-prelude-bond/tokens/txt
1846+/* tre-519 %txt /tests/golden/types-prelude-bond/tree/txt
1847+/* typ-519 %txt /tests/golden/types-prelude-bond/types/txt
1848+/* src-520 %jibb /tests/golden/types-prelude-cmd/source/jibb
1849+/* tok-520 %txt /tests/golden/types-prelude-cmd/tokens/txt
1850+/* tre-520 %txt /tests/golden/types-prelude-cmd/tree/txt
1851+/* typ-520 %txt /tests/golden/types-prelude-cmd/types/txt
1852+/* src-521 %jibb /tests/golden/types-prelude-direct/source/jibb
1853+/* tok-521 %txt /tests/golden/types-prelude-direct/tokens/txt
1854+/* tre-521 %txt /tests/golden/types-prelude-direct/tree/txt
1855+/* typ-521 %txt /tests/golden/types-prelude-direct/types/txt
1856+/* src-522 %jibb /tests/golden/types-prelude-functional/source/jibb
1857+/* tok-522 %txt /tests/golden/types-prelude-functional/tokens/txt
1858+/* tre-522 %txt /tests/golden/types-prelude-functional/tree/txt
1859+/* typ-522 %txt /tests/golden/types-prelude-functional/types/txt
1860+/* src-523 %jibb /tests/golden/types-prelude-interface/source/jibb
1861+/* tok-523 %txt /tests/golden/types-prelude-interface/tokens/txt
1862+/* tre-523 %txt /tests/golden/types-prelude-interface/tree/txt
1863+/* mod-523-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1864+/* mod-523-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1865+/* typ-523 %txt /tests/golden/types-prelude-interface/types/txt
1866+/* mtre-523 %txt /tests/golden/types-prelude-interface/module-trees/txt
1867+/* src-524 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1868+/* tok-524 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1869+/* tre-524 %txt /tests/golden/types-prelude-list-alias/tree/txt
1870+/* typ-524 %txt /tests/golden/types-prelude-list-alias/types/txt
1871+/* src-525 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1872+/* tok-525 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1873+/* tre-525 %txt /tests/golden/types-prelude-list-functions/tree/txt
1874+/* mod-525-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1875+/* typ-525 %txt /tests/golden/types-prelude-list-functions/types/txt
1876+/* mtre-525 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1877+/* src-526 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1878+/* tok-526 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1879+/* tre-526 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1880+/* typ-526 %txt /tests/golden/types-prelude-list-helpers/types/txt
1881+/* src-527 %jibb /tests/golden/types-prelude-predicates/source/jibb
1882+/* tok-527 %txt /tests/golden/types-prelude-predicates/tokens/txt
1883+/* tre-527 %txt /tests/golden/types-prelude-predicates/tree/txt
1884+/* typ-527 %txt /tests/golden/types-prelude-predicates/types/txt
1885+/* src-528 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1886+/* tok-528 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1887+/* tre-528 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1888+/* typ-528 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1889+/* src-529 %jibb /tests/golden/types-proj-explicit-context/source/jibb
1890+/* tok-529 %txt /tests/golden/types-proj-explicit-context/tokens/txt
1891+/* tre-529 %txt /tests/golden/types-proj-explicit-context/tree/txt
1892+/* typ-529 %txt /tests/golden/types-proj-explicit-context/types/txt
1893+/* src-530 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
1894+/* tok-530 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
1895+/* tre-530 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
1896+/* typ-530 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
1897+/* src-531 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
1898+/* tok-531 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
1899+/* tre-531 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
1900+/* mod-531-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
1901+/* typ-531 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
1902+/* mtre-531 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
1903+/* src-532 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
1904+/* tok-532 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
1905+/* tre-532 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
1906+/* mod-532-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
1907+/* typ-532 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
1908+/* mtre-532 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
1909+/* src-533 %jibb /tests/golden/types-proj-reserved-local/source/jibb
1910+/* tok-533 %txt /tests/golden/types-proj-reserved-local/tokens/txt
1911+/* tre-533 %txt /tests/golden/types-proj-reserved-local/tree/txt
1912+/* typ-533 %txt /tests/golden/types-proj-reserved-local/types/txt
1913+/* src-534 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
1914+/* tok-534 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
1915+/* tre-534 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
1916+/* typ-534 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
1917+/* src-535 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
1918+/* tok-535 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
1919+/* tre-535 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
1920+/* typ-535 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
1921+/* src-536 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
1922+/* tok-536 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
1923+/* tre-536 %txt /tests/golden/types-proj-reserved-mold/tree/txt
1924+/* typ-536 %txt /tests/golden/types-proj-reserved-mold/types/txt
1925+/* src-537 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
1926+/* tok-537 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
1927+/* tre-537 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
1928+/* typ-537 %txt /tests/golden/types-proj-reserved-pattern/types/txt
1929+/* src-538 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
1930+/* tok-538 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
1931+/* tre-538 %txt /tests/golden/types-proj-reserved-positive/tree/txt
1932+/* typ-538 %txt /tests/golden/types-proj-reserved-positive/types/txt
1933+/* src-539 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
1934+/* tok-539 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
1935+/* tre-539 %txt /tests/golden/types-proj-reserved-sample/tree/txt
1936+/* typ-539 %txt /tests/golden/types-proj-reserved-sample/types/txt
1937+/* src-540 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
1938+/* tok-540 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
1939+/* tre-540 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
1940+/* typ-540 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
1941+/* src-541 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
1942+/* tok-541 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
1943+/* tre-541 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
1944+/* typ-541 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
1945+/* src-542 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
1946+/* tok-542 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
1947+/* tre-542 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
1948+/* typ-542 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
1949+/* src-543 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
1950+/* tok-543 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
1951+/* tre-543 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
1952+/* typ-543 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
1953+/* src-544 %jibb /tests/golden/types-proj-reserved-value/source/jibb
1954+/* tok-544 %txt /tests/golden/types-proj-reserved-value/tokens/txt
1955+/* tre-544 %txt /tests/golden/types-proj-reserved-value/tree/txt
1956+/* typ-544 %txt /tests/golden/types-proj-reserved-value/types/txt
1957+/* src-545 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
1958+/* tok-545 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
1959+/* tre-545 %txt /tests/golden/types-proj-single-duplicate/tree/txt
1960+/* typ-545 %txt /tests/golden/types-proj-single-duplicate/types/txt
1961+/* src-546 %jibb /tests/golden/types-proj-single-field/source/jibb
1962+/* tok-546 %txt /tests/golden/types-proj-single-field/tokens/txt
1963+/* tre-546 %txt /tests/golden/types-proj-single-field/tree/txt
1964+/* typ-546 %txt /tests/golden/types-proj-single-field/types/txt
1965+/* src-547 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
1966+/* tok-547 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
1967+/* tre-547 %txt /tests/golden/types-proj-single-sample-face/tree/txt
1968+/* typ-547 %txt /tests/golden/types-proj-single-sample-face/types/txt
1969+/* src-548 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
1970+/* tok-548 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
1971+/* tre-548 %txt /tests/golden/types-proj-single-wrapped/tree/txt
1972+/* typ-548 %txt /tests/golden/types-proj-single-wrapped/types/txt
1973+/* src-549 %jibb /tests/golden/types-qath-faces/source/jibb
1974+/* tok-549 %txt /tests/golden/types-qath-faces/tokens/txt
1975+/* tre-549 %txt /tests/golden/types-qath-faces/tree/txt
1976+/* typ-549 %txt /tests/golden/types-qath-faces/types/txt
1977+/* src-550 %jibb /tests/golden/types-qath-holes/source/jibb
1978+/* tok-550 %txt /tests/golden/types-qath-holes/tokens/txt
1979+/* tre-550 %txt /tests/golden/types-qath-holes/tree/txt
1980+/* typ-550 %txt /tests/golden/types-qath-holes/types/txt
1981+/* src-551 %jibb /tests/golden/types-qath-module-identity/source/jibb
1982+/* tok-551 %txt /tests/golden/types-qath-module-identity/tokens/txt
1983+/* tre-551 %txt /tests/golden/types-qath-module-identity/tree/txt
1984+/* mod-551-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
1985+/* mod-551-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
1986+/* mod-551-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
1987+/* typ-551 %txt /tests/golden/types-qath-module-identity/types/txt
1988+/* mtre-551 %txt /tests/golden/types-qath-module-identity/module-trees/txt
1989+/* src-552 %jibb /tests/golden/types-qath-recursive/source/jibb
1990+/* tok-552 %txt /tests/golden/types-qath-recursive/tokens/txt
1991+/* tre-552 %txt /tests/golden/types-qath-recursive/tree/txt
1992+/* typ-552 %txt /tests/golden/types-qath-recursive/types/txt
1993+/* src-553 %jibb /tests/golden/types-record-bound-variable/source/jibb
1994+/* tok-553 %txt /tests/golden/types-record-bound-variable/tokens/txt
1995+/* tre-553 %txt /tests/golden/types-record-bound-variable/tree/txt
1996+/* typ-553 %txt /tests/golden/types-record-bound-variable/types/txt
1997+/* src-554 %jibb /tests/golden/types-record-cast-context/source/jibb
1998+/* tok-554 %txt /tests/golden/types-record-cast-context/tokens/txt
1999+/* tre-554 %txt /tests/golden/types-record-cast-context/tree/txt
2000+/* typ-554 %txt /tests/golden/types-record-cast-context/types/txt
2001+/* src-555 %jibb /tests/golden/types-record-change/source/jibb
2002+/* tok-555 %txt /tests/golden/types-record-change/tokens/txt
2003+/* tre-555 %txt /tests/golden/types-record-change/tree/txt
2004+/* typ-555 %txt /tests/golden/types-record-change/types/txt
2005+/* src-556 %jibb /tests/golden/types-record-change-generic/source/jibb
2006+/* tok-556 %txt /tests/golden/types-record-change-generic/tokens/txt
2007+/* tre-556 %txt /tests/golden/types-record-change-generic/tree/txt
2008+/* typ-556 %txt /tests/golden/types-record-change-generic/types/txt
2009+/* src-557 %jibb /tests/golden/types-record-faces/source/jibb
2010+/* tok-557 %txt /tests/golden/types-record-faces/tokens/txt
2011+/* tre-557 %txt /tests/golden/types-record-faces/tree/txt
2012+/* typ-557 %txt /tests/golden/types-record-faces/types/txt
2013+/* src-558 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2014+/* tok-558 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2015+/* tre-558 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2016+/* typ-558 %txt /tests/golden/types-record-field-edit-separate/types/txt
2017+/* src-559 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2018+/* tok-559 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2019+/* tre-559 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2020+/* typ-559 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2021+/* src-560 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2022+/* tok-560 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2023+/* tre-560 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2024+/* typ-560 %txt /tests/golden/types-record-field-expr-separate/types/txt
2025+/* src-561 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2026+/* tok-561 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2027+/* tre-561 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2028+/* mod-561-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2029+/* typ-561 %txt /tests/golden/types-record-field-module-reachable/types/txt
2030+/* mtre-561 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2031+/* src-562 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2032+/* tok-562 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2033+/* tre-562 %txt /tests/golden/types-record-field-module-unused/tree/txt
2034+/* mod-562-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2035+/* mod-562-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2036+/* typ-562 %txt /tests/golden/types-record-field-module-unused/types/txt
2037+/* mtre-562 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2038+/* src-563 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2039+/* tok-563 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2040+/* tre-563 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2041+/* typ-563 %txt /tests/golden/types-record-field-nested-mold/types/txt
2042+/* src-564 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2043+/* tok-564 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2044+/* tre-564 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2045+/* typ-564 %txt /tests/golden/types-record-field-outer-inner/types/txt
2046+/* src-565 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2047+/* tok-565 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2048+/* tre-565 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2049+/* typ-565 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2050+/* src-566 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2051+/* tok-566 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2052+/* tre-566 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2053+/* typ-566 %txt /tests/golden/types-record-field-separate-molds/types/txt
2054+/* src-567 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2055+/* tok-567 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2056+/* tre-567 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2057+/* typ-567 %txt /tests/golden/types-record-field-unused-mold/types/txt
2058+/* src-568 %jibb /tests/golden/types-record-import/source/jibb
2059+/* tok-568 %txt /tests/golden/types-record-import/tokens/txt
2060+/* tre-568 %txt /tests/golden/types-record-import/tree/txt
2061+/* mod-568-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2062+/* typ-568 %txt /tests/golden/types-record-import/types/txt
2063+/* mtre-568 %txt /tests/golden/types-record-import/module-trees/txt
2064+/* src-569 %jibb /tests/golden/types-record-local-scheme/source/jibb
2065+/* tok-569 %txt /tests/golden/types-record-local-scheme/tokens/txt
2066+/* tre-569 %txt /tests/golden/types-record-local-scheme/tree/txt
2067+/* typ-569 %txt /tests/golden/types-record-local-scheme/types/txt
2068+/* src-570 %jibb /tests/golden/types-record-nested/source/jibb
2069+/* tok-570 %txt /tests/golden/types-record-nested/tokens/txt
2070+/* tre-570 %txt /tests/golden/types-record-nested/tree/txt
2071+/* typ-570 %txt /tests/golden/types-record-nested/types/txt
2072+/* src-571 %jibb /tests/golden/types-record-to-tuple/source/jibb
2073+/* tok-571 %txt /tests/golden/types-record-to-tuple/tokens/txt
2074+/* tre-571 %txt /tests/golden/types-record-to-tuple/tree/txt
2075+/* typ-571 %txt /tests/golden/types-record-to-tuple/types/txt
2076+/* src-572 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2077+/* tok-572 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2078+/* tre-572 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2079+/* typ-572 %txt /tests/golden/types-recursion-scc-failures/types/txt
2080+/* src-573 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2081+/* tok-573 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2082+/* tre-573 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2083+/* typ-573 %txt /tests/golden/types-recursion-scc-groups/types/txt
2084+/* src-574 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2085+/* tok-574 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2086+/* tre-574 %txt /tests/golden/types-recursion-scc-import/tree/txt
2087+/* mod-574-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2088+/* typ-574 %txt /tests/golden/types-recursion-scc-import/types/txt
2089+/* mtre-574 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2090+/* src-575 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2091+/* tok-575 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2092+/* tre-575 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2093+/* mod-575-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2094+/* typ-575 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2095+/* mtre-575 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2096+/* src-576 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2097+/* tok-576 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2098+/* tre-576 %txt /tests/golden/types-recursion-scc-local/tree/txt
2099+/* typ-576 %txt /tests/golden/types-recursion-scc-local/types/txt
2100+/* src-577 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2101+/* tok-577 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2102+/* tre-577 %txt /tests/golden/types-recursion-scc-order/tree/txt
2103+/* typ-577 %txt /tests/golden/types-recursion-scc-order/types/txt
2104+/* src-578 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2105+/* tok-578 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2106+/* tre-578 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2107+/* typ-578 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2108+/* src-579 %jibb /tests/golden/types-recursive-branch/source/jibb
2109+/* tok-579 %txt /tests/golden/types-recursive-branch/tokens/txt
2110+/* tre-579 %txt /tests/golden/types-recursive-branch/tree/txt
2111+/* typ-579 %txt /tests/golden/types-recursive-branch/types/txt
2112+/* src-580 %jibb /tests/golden/types-recursive-gate/source/jibb
2113+/* tok-580 %txt /tests/golden/types-recursive-gate/tokens/txt
2114+/* tre-580 %txt /tests/golden/types-recursive-gate/tree/txt
2115+/* typ-580 %txt /tests/golden/types-recursive-gate/types/txt
2116+/* src-581 %jibb /tests/golden/types-recursive-sample/source/jibb
2117+/* tok-581 %txt /tests/golden/types-recursive-sample/tokens/txt
2118+/* tre-581 %txt /tests/golden/types-recursive-sample/tree/txt
2119+/* typ-581 %txt /tests/golden/types-recursive-sample/types/txt
2120+/* src-582 %jibb /tests/golden/types-scope-library-poke/source/jibb
2121+/* tok-582 %txt /tests/golden/types-scope-library-poke/tokens/txt
2122+/* tre-582 %txt /tests/golden/types-scope-library-poke/tree/txt
2123+/* typ-582 %txt /tests/golden/types-scope-library-poke/types/txt
2124+/* src-583 %jibb /tests/golden/types-scope-root-api/source/jibb
2125+/* tok-583 %txt /tests/golden/types-scope-root-api/tokens/txt
2126+/* tre-583 %txt /tests/golden/types-scope-root-api/tree/txt
2127+/* typ-583 %txt /tests/golden/types-scope-root-api/types/txt
2128+/* src-584 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2129+/* tok-584 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2130+/* tre-584 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2131+/* typ-584 %txt /tests/golden/types-scope-store-duplicate/types/txt
2132+/* src-585 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2133+/* tok-585 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2134+/* tre-585 %txt /tests/golden/types-scope-store-shadow/tree/txt
2135+/* typ-585 %txt /tests/golden/types-scope-store-shadow/types/txt
2136+/* src-586 %jibb /tests/golden/types-single-case-pattern/source/jibb
2137+/* tok-586 %txt /tests/golden/types-single-case-pattern/tokens/txt
2138+/* tre-586 %txt /tests/golden/types-single-case-pattern/tree/txt
2139+/* typ-586 %txt /tests/golden/types-single-case-pattern/types/txt
2140+/* src-587 %jibb /tests/golden/types-string-interpolation/source/jibb
2141+/* tok-587 %txt /tests/golden/types-string-interpolation/tokens/txt
2142+/* tre-587 %txt /tests/golden/types-string-interpolation/tree/txt
2143+/* typ-587 %txt /tests/golden/types-string-interpolation/types/txt
2144+/* src-588 %jibb /tests/golden/types-tuple-context/source/jibb
2145+/* tok-588 %txt /tests/golden/types-tuple-context/tokens/txt
2146+/* tre-588 %txt /tests/golden/types-tuple-context/tree/txt
2147+/* typ-588 %txt /tests/golden/types-tuple-context/types/txt
2148+/* src-589 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2149+/* tok-589 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2150+/* tre-589 %txt /tests/golden/types-tuple-context-nested/tree/txt
2151+/* typ-589 %txt /tests/golden/types-tuple-context-nested/types/txt
2152+/* src-590 %jibb /tests/golden/types-union-alias/source/jibb
2153+/* tok-590 %txt /tests/golden/types-union-alias/tokens/txt
2154+/* tre-590 %txt /tests/golden/types-union-alias/tree/txt
2155+/* typ-590 %txt /tests/golden/types-union-alias/types/txt
2156+/* src-591 %jibb /tests/golden/types-union-branch-context/source/jibb
2157+/* tok-591 %txt /tests/golden/types-union-branch-context/tokens/txt
2158+/* tre-591 %txt /tests/golden/types-union-branch-context/tree/txt
2159+/* typ-591 %txt /tests/golden/types-union-branch-context/types/txt
2160+/* src-592 %jibb /tests/golden/types-union-branch-pending/source/jibb
2161+/* tok-592 %txt /tests/golden/types-union-branch-pending/tokens/txt
2162+/* tre-592 %txt /tests/golden/types-union-branch-pending/tree/txt
2163+/* typ-592 %txt /tests/golden/types-union-branch-pending/types/txt
2164+/* src-593 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2165+/* tok-593 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2166+/* tre-593 %txt /tests/golden/types-union-constructor-shape/tree/txt
2167+/* typ-593 %txt /tests/golden/types-union-constructor-shape/types/txt
2168+/* src-594 %jibb /tests/golden/types-union-context-flow/source/jibb
2169+/* tok-594 %txt /tests/golden/types-union-context-flow/tokens/txt
2170+/* tre-594 %txt /tests/golden/types-union-context-flow/tree/txt
2171+/* typ-594 %txt /tests/golden/types-union-context-flow/types/txt
2172+/* src-595 %jibb /tests/golden/types-union-finite/source/jibb
2173+/* tok-595 %txt /tests/golden/types-union-finite/tokens/txt
2174+/* tre-595 %txt /tests/golden/types-union-finite/tree/txt
2175+/* typ-595 %txt /tests/golden/types-union-finite/types/txt
2176+/* src-596 %jibb /tests/golden/types-union-finite-context/source/jibb
2177+/* tok-596 %txt /tests/golden/types-union-finite-context/tokens/txt
2178+/* tre-596 %txt /tests/golden/types-union-finite-context/tree/txt
2179+/* typ-596 %txt /tests/golden/types-union-finite-context/types/txt
2180+/* src-597 %jibb /tests/golden/types-union-finite-generic/source/jibb
2181+/* tok-597 %txt /tests/golden/types-union-finite-generic/tokens/txt
2182+/* tre-597 %txt /tests/golden/types-union-finite-generic/tree/txt
2183+/* typ-597 %txt /tests/golden/types-union-finite-generic/types/txt
2184+/* src-598 %jibb /tests/golden/types-union-finite-limit/source/jibb
2185+/* tok-598 %txt /tests/golden/types-union-finite-limit/tokens/txt
2186+/* tre-598 %txt /tests/golden/types-union-finite-limit/tree/txt
2187+/* typ-598 %txt /tests/golden/types-union-finite-limit/types/txt
2188+/* src-599 %jibb /tests/golden/types-union-import/source/jibb
2189+/* tok-599 %txt /tests/golden/types-union-import/tokens/txt
2190+/* tre-599 %txt /tests/golden/types-union-import/tree/txt
2191+/* mod-599-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2192+/* typ-599 %txt /tests/golden/types-union-import/types/txt
2193+/* mtre-599 %txt /tests/golden/types-union-import/module-trees/txt
2194+/* src-600 %jibb /tests/golden/types-union-local-pending/source/jibb
2195+/* tok-600 %txt /tests/golden/types-union-local-pending/tokens/txt
2196+/* tre-600 %txt /tests/golden/types-union-local-pending/tree/txt
2197+/* typ-600 %txt /tests/golden/types-union-local-pending/types/txt
2198+/* src-601 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2199+/* tok-601 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2200+/* tre-601 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2201+/* typ-601 %txt /tests/golden/types-union-nonwing-subject/types/txt
2202+/* src-602 %jibb /tests/golden/types-union-overlap/source/jibb
2203+/* tok-602 %txt /tests/golden/types-union-overlap/tokens/txt
2204+/* tre-602 %txt /tests/golden/types-union-overlap/tree/txt
2205+/* typ-602 %txt /tests/golden/types-union-overlap/types/txt
2206+/* src-603 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2207+/* tok-603 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2208+/* tre-603 %txt /tests/golden/types-union-overlap-nested/tree/txt
2209+/* typ-603 %txt /tests/golden/types-union-overlap-nested/types/txt
2210+/* src-604 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2211+/* tok-604 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2212+/* tre-604 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2213+/* typ-604 %txt /tests/golden/types-union-pattern-result-context/types/txt
2214+/* src-605 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2215+/* tok-605 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2216+/* tre-605 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2217+/* typ-605 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2218+/* src-606 %jibb /tests/golden/types-union-patterns/source/jibb
2219+/* tok-606 %txt /tests/golden/types-union-patterns/tokens/txt
2220+/* tre-606 %txt /tests/golden/types-union-patterns/tree/txt
2221+/* typ-606 %txt /tests/golden/types-union-patterns/types/txt
2222+/* src-607 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2223+/* tok-607 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2224+/* tre-607 %txt /tests/golden/types-union-patterns-generic/tree/txt
2225+/* typ-607 %txt /tests/golden/types-union-patterns-generic/types/txt
2226+/* src-608 %jibb /tests/golden/types-union-patterns-import/source/jibb
2227+/* tok-608 %txt /tests/golden/types-union-patterns-import/tokens/txt
2228+/* tre-608 %txt /tests/golden/types-union-patterns-import/tree/txt
2229+/* mod-608-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2230+/* typ-608 %txt /tests/golden/types-union-patterns-import/types/txt
2231+/* mtre-608 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2232+/* src-609 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2233+/* tok-609 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2234+/* tre-609 %txt /tests/golden/types-union-phantom-generic/tree/txt
2235+/* typ-609 %txt /tests/golden/types-union-phantom-generic/types/txt
2236+/* src-610 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2237+/* tok-610 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2238+/* tre-610 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2239+/* mod-610-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2240+/* mod-610-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2241+/* typ-610 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2242+/* mtre-610 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2243+/* src-611 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2244+/* tok-611 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2245+/* tre-611 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2246+/* mod-611-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2247+/* typ-611 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2248+/* mtre-611 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2249+/* src-612 %jibb /tests/golden/types-union-print-distinct/source/jibb
2250+/* tok-612 %txt /tests/golden/types-union-print-distinct/tokens/txt
2251+/* tre-612 %txt /tests/golden/types-union-print-distinct/tree/txt
2252+/* mod-612-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2253+/* mod-612-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2254+/* mod-612-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2255+/* typ-612 %txt /tests/golden/types-union-print-distinct/types/txt
2256+/* mtre-612 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2257+/* src-613 %jibb /tests/golden/types-union-print-escape/source/jibb
2258+/* tok-613 %txt /tests/golden/types-union-print-escape/tokens/txt
2259+/* tre-613 %txt /tests/golden/types-union-print-escape/tree/txt
2260+/* typ-613 %txt /tests/golden/types-union-print-escape/types/txt
2261+/* src-614 %jibb /tests/golden/types-union-print-local/source/jibb
2262+/* tok-614 %txt /tests/golden/types-union-print-local/tokens/txt
2263+/* tre-614 %txt /tests/golden/types-union-print-local/tree/txt
2264+/* typ-614 %txt /tests/golden/types-union-print-local/types/txt
2265+/* src-615 %jibb /tests/golden/types-union-print-nested/source/jibb
2266+/* tok-615 %txt /tests/golden/types-union-print-nested/tokens/txt
2267+/* tre-615 %txt /tests/golden/types-union-print-nested/tree/txt
2268+/* typ-615 %txt /tests/golden/types-union-print-nested/types/txt
2269+/* src-616 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2270+/* tok-616 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2271+/* tre-616 %txt /tests/golden/types-union-print-same-origin/tree/txt
2272+/* mod-616-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2273+/* typ-616 %txt /tests/golden/types-union-print-same-origin/types/txt
2274+/* mtre-616 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2275+/* src-617 %jibb /tests/golden/types-union-print-transitive/source/jibb
2276+/* tok-617 %txt /tests/golden/types-union-print-transitive/tokens/txt
2277+/* tre-617 %txt /tests/golden/types-union-print-transitive/tree/txt
2278+/* mod-617-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2279+/* mod-617-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2280+/* typ-617 %txt /tests/golden/types-union-print-transitive/types/txt
2281+/* mtre-617 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2282+/* src-618 %jibb /tests/golden/types-union-singleton/source/jibb
2283+/* tok-618 %txt /tests/golden/types-union-singleton/tokens/txt
2284+/* tre-618 %txt /tests/golden/types-union-singleton/tree/txt
2285+/* typ-618 %txt /tests/golden/types-union-singleton/types/txt
2286+/* src-619 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2287+/* tok-619 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2288+/* tre-619 %txt /tests/golden/types-union-tag-atoms/tree/txt
2289+/* typ-619 %txt /tests/golden/types-union-tag-atoms/types/txt
2290+/* src-620 %jibb /tests/golden/types-union-tags/source/jibb
2291+/* tok-620 %txt /tests/golden/types-union-tags/tokens/txt
2292+/* tre-620 %txt /tests/golden/types-union-tags/tree/txt
2293+/* typ-620 %txt /tests/golden/types-union-tags/types/txt
2294+/* src-621 %jibb /tests/golden/types-union-unresolved/source/jibb
2295+/* tok-621 %txt /tests/golden/types-union-unresolved/tokens/txt
2296+/* tre-621 %txt /tests/golden/types-union-unresolved/tree/txt
2297+/* typ-621 %txt /tests/golden/types-union-unresolved/types/txt
2298+/* src-622 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2299+/* tok-622 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2300+/* tre-622 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2301+/* typ-622 %txt /tests/golden/types-union-unresolved-flow/types/txt
2302+/* src-623 %jibb /tests/golden/types-unit-construction/source/jibb
2303+/* tok-623 %txt /tests/golden/types-unit-construction/tokens/txt
2304+/* tre-623 %txt /tests/golden/types-unit-construction/tree/txt
2305+/* typ-623 %txt /tests/golden/types-unit-construction/types/txt
2306+/* src-624 %jibb /tests/golden/types-unit-context/source/jibb
2307+/* tok-624 %txt /tests/golden/types-unit-context/tokens/txt
2308+/* tre-624 %txt /tests/golden/types-unit-context/tree/txt
2309+/* typ-624 %txt /tests/golden/types-unit-context/types/txt
2310+/* src-625 %jibb /tests/golden/types-unit-patterns/source/jibb
2311+/* tok-625 %txt /tests/golden/types-unit-patterns/tokens/txt
2312+/* tre-625 %txt /tests/golden/types-unit-patterns/tree/txt
2313+/* typ-625 %txt /tests/golden/types-unit-patterns/types/txt
2314+/* src-626 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2315+/* tok-626 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2316+/* tre-626 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2317+/* typ-626 %txt /tests/golden/types-value-cycle-shadow/types/txt
2318+/* src-627 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2319+/* tok-627 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2320+/* tre-627 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2321+/* typ-627 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2322+/* src-628 %jibb /tests/golden/types-value-cycles/source/jibb
2323+/* tok-628 %txt /tests/golden/types-value-cycles/tokens/txt
2324+/* tre-628 %txt /tests/golden/types-value-cycles/tree/txt
2325+/* typ-628 %txt /tests/golden/types-value-cycles/types/txt
21002326=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
21012327|%
21022328:: one arm per case
@@ -2891,364 +3117,472 @@
28913117 (weld (weld (check-at ~.module-import-transitive ~[~.ui ~.main ~.jibb] src-394 `tok-394 `tre-394) (check-module-types ~.module-import-transitive ~[~.ui ~.main ~.jibb] src-394 `typ-394 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-394-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-394-2] ['/ui/c.jibb' ~[~.ui ~.c ~.jibb] mod-394-3]])) (check-module-trees ~.module-import-transitive `mtre-394 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-394-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-394-2] ['/ui/c.jibb' ~[~.ui ~.c ~.jibb] mod-394-3]]))
28923118++ test-module-import-unused-invalid
28933119 (weld (weld (check ~.module-import-unused-invalid src-395 `tok-395 `tre-395) (check-module-types ~.module-import-unused-invalid ~[%tests %golden ~.module-import-unused-invalid %source %jibb] src-395 `typ-395 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-395-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-395-2]])) (check-module-trees ~.module-import-unused-invalid `mtre-395 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-395-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-395-2]]))
3120+++ test-parser-hole-parameter-rejected
3121+ (check ~.parser-hole-parameter-rejected src-396 `tok-396 `tre-396)
3122+++ test-parser-hole-path
3123+ (check ~.parser-hole-path src-397 `tok-397 `tre-397)
3124+++ test-parser-hole-path-space
3125+ (check ~.parser-hole-path-space src-398 `tok-398 `tre-398)
3126+++ test-parser-hole-pattern-rejected
3127+ (check ~.parser-hole-pattern-rejected src-399 `tok-399 `tre-399)
3128+++ test-parser-hole-shapes
3129+ (check ~.parser-hole-shapes src-400 `tok-400 `tre-400)
3130+++ test-parser-hole-value-rejected
3131+ (check ~.parser-hole-value-rejected src-401 `tok-401 `tre-401)
28943132++ test-prelude-1c-structural
2895− (weld (check ~.prelude-1c-structural src-396 `tok-396 `tre-396) (check-types ~.prelude-1c-structural ~[%tests %golden ~.prelude-1c-structural %source %jibb] src-396 `typ-396))
3133+ (weld (check ~.prelude-1c-structural src-402 `tok-402 `tre-402) (check-types ~.prelude-1c-structural ~[%tests %golden ~.prelude-1c-structural %source %jibb] src-402 `typ-402))
28963134++ test-prelude-3g-basic
2897− (weld (check ~.prelude-3g-basic src-397 `tok-397 `tre-397) (check-types ~.prelude-3g-basic ~[%tests %golden ~.prelude-3g-basic %source %jibb] src-397 `typ-397))
3135+ (weld (check ~.prelude-3g-basic src-403 `tok-403 `tre-403) (check-types ~.prelude-3g-basic ~[%tests %golden ~.prelude-3g-basic %source %jibb] src-403 `typ-403))
28983136++ test-prelude-3g-like
2899− (weld (check ~.prelude-3g-like src-398 `tok-398 `tre-398) (check-types ~.prelude-3g-like ~[%tests %golden ~.prelude-3g-like %source %jibb] src-398 `typ-398))
3137+ (weld (check ~.prelude-3g-like src-404 `tok-404 `tre-404) (check-types ~.prelude-3g-like ~[%tests %golden ~.prelude-3g-like %source %jibb] src-404 `typ-404))
29003138++ test-prelude-3g-structural
2901− (weld (check ~.prelude-3g-structural src-399 `tok-399 `tre-399) (check-types ~.prelude-3g-structural ~[%tests %golden ~.prelude-3g-structural %source %jibb] src-399 `typ-399))
3139+ (weld (check ~.prelude-3g-structural src-405 `tok-405 `tre-405) (check-types ~.prelude-3g-structural ~[%tests %golden ~.prelude-3g-structural %source %jibb] src-405 `typ-405))
29023140++ test-prelude-core-functions
2903− (weld (check ~.prelude-core-functions src-400 `tok-400 `tre-400) (check-types ~.prelude-core-functions ~[%tests %golden ~.prelude-core-functions %source %jibb] src-400 `typ-400))
3141+ (weld (check ~.prelude-core-functions src-406 `tok-406 `tre-406) (check-types ~.prelude-core-functions ~[%tests %golden ~.prelude-core-functions %source %jibb] src-406 `typ-406))
29043142++ test-prelude-list-helpers
2905− (weld (check ~.prelude-list-helpers src-401 `tok-401 `tre-401) (check-types ~.prelude-list-helpers ~[%tests %golden ~.prelude-list-helpers %source %jibb] src-401 `typ-401))
3143+ (weld (check ~.prelude-list-helpers src-407 `tok-407 `tre-407) (check-types ~.prelude-list-helpers ~[%tests %golden ~.prelude-list-helpers %source %jibb] src-407 `typ-407))
29063144++ test-prelude-list-unit
2907− (weld (check ~.prelude-list-unit src-402 `tok-402 `tre-402) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-402 `typ-402))
3145+ (weld (check ~.prelude-list-unit src-408 `tok-408 `tre-408) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-408 `typ-408))
29083146++ test-prelude-unit-list-transforms
2909− (weld (check ~.prelude-unit-list-transforms src-403 `tok-403 `tre-403) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-403 `typ-403))
3147+ (weld (check ~.prelude-unit-list-transforms src-409 `tok-409 `tre-409) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-409 `typ-409))
29103148++ test-types-capital-distinct
2911− (weld (check ~.types-capital-distinct src-404 `tok-404 `tre-404) (check-types ~.types-capital-distinct ~[%tests %golden ~.types-capital-distinct %source %jibb] src-404 `typ-404))
3149+ (weld (check ~.types-capital-distinct src-410 `tok-410 `tre-410) (check-types ~.types-capital-distinct ~[%tests %golden ~.types-capital-distinct %source %jibb] src-410 `typ-410))
29123150++ test-types-cell-pattern-many
2913− (weld (check ~.types-cell-pattern-many src-405 `tok-405 `tre-405) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-405 `typ-405 ~ ~ ~))
3151+ (weld (check ~.types-cell-pattern-many src-411 `tok-411 `tre-411) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-411 `typ-411 ~ ~ ~))
29143152++ test-types-cell-pattern-schemes
2915− (weld (check ~.types-cell-pattern-schemes src-406 `tok-406 `tre-406) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-406 `typ-406 ~ ~ ~))
3153+ (weld (check ~.types-cell-pattern-schemes src-412 `tok-412 `tre-412) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-412 `typ-412 ~ ~ ~))
29163154++ test-types-cell-pattern-tail
2917− (weld (check ~.types-cell-pattern-tail src-407 `tok-407 `tre-407) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-407 `typ-407 ~ ~ ~))
3155+ (weld (check ~.types-cell-pattern-tail src-413 `tok-413 `tre-413) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-413 `typ-413 ~ ~ ~))
29183156++ test-types-deferred-call-context
2919− (weld (check ~.types-deferred-call-context src-408 `tok-408 `tre-408) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-408 `typ-408 ~ ~ ~))
3157+ (weld (check ~.types-deferred-call-context src-414 `tok-414 `tre-414) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-414 `typ-414 ~ ~ ~))
29203158++ test-types-flag-branch-context
2921− (weld (check ~.types-flag-branch-context src-409 `tok-409 `tre-409) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-409 `typ-409 ~ ~ ~))
3159+ (weld (check ~.types-flag-branch-context src-415 `tok-415 `tre-415) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-415 `typ-415 ~ ~ ~))
29223160++ test-types-generic-arity
2923− (weld (check ~.types-generic-arity src-410 `tok-410 `tre-410) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-410 `typ-410))
3161+ (weld (check ~.types-generic-arity src-416 `tok-416 `tre-416) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-416 `typ-416))
29243162++ test-types-generic-face-inference
2925− (weld (check ~.types-generic-face-inference src-411 `tok-411 `tre-411) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-411 `typ-411))
3163+ (weld (check ~.types-generic-face-inference src-417 `tok-417 `tre-417) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-417 `typ-417))
29263164++ test-types-generic-gates
2927− (weld (check ~.types-generic-gates src-412 `tok-412 `tre-412) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-412 `typ-412))
3165+ (weld (check ~.types-generic-gates src-418 `tok-418 `tre-418) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-418 `typ-418))
29283166++ test-types-generic-import-reverse
2929− (weld (weld (check ~.types-generic-import-reverse src-413 `tok-413 `tre-413) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-413 `typ-413 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-413-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-413 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-413-1]]))
3167+ (weld (weld (check ~.types-generic-import-reverse src-419 `tok-419 `tre-419) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-419 `typ-419 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-419-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-419 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-419-1]]))
29303168++ test-types-generic-lexical-alias
2931− (weld (check ~.types-generic-lexical-alias src-414 `tok-414 `tre-414) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-414 `typ-414))
3169+ (weld (check ~.types-generic-lexical-alias src-420 `tok-420 `tre-420) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-420 `typ-420))
29323170++ test-types-generic-local-parameter
2933− (weld (check ~.types-generic-local-parameter src-415 `tok-415 `tre-415) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-415 `typ-415))
3171+ (weld (check ~.types-generic-local-parameter src-421 `tok-421 `tre-421) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-421 `typ-421))
29343172++ test-types-generic-local-scope
2935− (weld (check ~.types-generic-local-scope src-416 `tok-416 `tre-416) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-416 `typ-416))
3173+ (weld (check ~.types-generic-local-scope src-422 `tok-422 `tre-422) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-422 `typ-422))
29363174++ test-types-generic-module
2937− (weld (weld (check ~.types-generic-module src-417 `tok-417 `tre-417) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-417 `typ-417 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-417-1]])) (check-module-trees ~.types-generic-module `mtre-417 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-417-1]]))
3175+ (weld (weld (check ~.types-generic-module src-423 `tok-423 `tre-423) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-423 `typ-423 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-423-1]])) (check-module-trees ~.types-generic-module `mtre-423 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-423-1]]))
29383176++ test-types-generic-nested-scope
2939− (weld (check ~.types-generic-nested-scope src-418 `tok-418 `tre-418) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-418 `typ-418))
3177+ (weld (check ~.types-generic-nested-scope src-424 `tok-424 `tre-424) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-424 `typ-424))
29403178++ test-types-generic-parameters
2941− (weld (check ~.types-generic-parameters src-419 `tok-419 `tre-419) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-419 `typ-419))
3179+ (weld (check ~.types-generic-parameters src-425 `tok-425 `tre-425) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-425 `typ-425))
29423180++ test-types-generic-record
2943− (weld (check ~.types-generic-record src-420 `tok-420 `tre-420) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-420 `typ-420))
3181+ (weld (check ~.types-generic-record src-426 `tok-426 `tre-426) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-426 `typ-426))
29443182++ test-types-generic-recursive-union
2945− (weld (check ~.types-generic-recursive-union src-421 `tok-421 `tre-421) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-421 `typ-421))
3183+ (weld (check ~.types-generic-recursive-union src-427 `tok-427 `tre-427) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-427 `typ-427))
29463184++ test-types-generic-repeated
2947− (weld (check ~.types-generic-repeated src-422 `tok-422 `tre-422) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-422 `typ-422))
3185+ (weld (check ~.types-generic-repeated src-428 `tok-428 `tre-428) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-428 `typ-428))
29483186++ test-types-generic-union-alias
2949− (weld (check ~.types-generic-union-alias src-423 `tok-423 `tre-423) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-423 `typ-423))
3187+ (weld (check ~.types-generic-union-alias src-429 `tok-429 `tre-429) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-429 `typ-429))
29503188++ test-types-generic-union-alias-face
2951− (weld (weld (check ~.types-generic-union-alias-face src-424 `tok-424 `tre-424) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-424 `typ-424 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-424-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-424 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-424-1]]))
3189+ (weld (weld (check ~.types-generic-union-alias-face src-430 `tok-430 `tre-430) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-430 `typ-430 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-430-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-430 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-430-1]]))
29523190++ test-types-generic-union-capitals
2953− (weld (check ~.types-generic-union-capitals src-425 `tok-425 `tre-425) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-425 `typ-425))
3191+ (weld (check ~.types-generic-union-capitals src-431 `tok-431 `tre-431) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-431 `typ-431))
29543192++ test-types-generic-union-errors
2955− (weld (check ~.types-generic-union-errors src-426 `tok-426 `tre-426) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-426 `typ-426))
3193+ (weld (check ~.types-generic-union-errors src-432 `tok-432 `tre-432) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-432 `typ-432))
29563194++ test-types-generic-union-escaping
2957− (weld (weld (check ~.types-generic-union-escaping src-427 `tok-427 `tre-427) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-427 `typ-427 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-427-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-427-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-427 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-427-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-427-2]]))
3195+ (weld (weld (check ~.types-generic-union-escaping src-433 `tok-433 `tre-433) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-433 `typ-433 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-433-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-433-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-433 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-433-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-433-2]]))
29583196++ test-types-generic-union-import
2959− (weld (weld (check ~.types-generic-union-import src-428 `tok-428 `tre-428) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-428 `typ-428 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-428-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-428-2]])) (check-module-trees ~.types-generic-union-import `mtre-428 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-428-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-428-2]]))
3197+ (weld (weld (check ~.types-generic-union-import src-434 `tok-434 `tre-434) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-434 `typ-434 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-434-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-434-2]])) (check-module-trees ~.types-generic-union-import `mtre-434 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-434-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-434-2]]))
29603198++ test-types-generic-union-local
2961− (weld (check ~.types-generic-union-local src-429 `tok-429 `tre-429) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-429 `typ-429))
3199+ (weld (check ~.types-generic-union-local src-435 `tok-435 `tre-435) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-435 `typ-435))
29623200++ test-types-generic-union-transitive
2963− (weld (weld (check ~.types-generic-union-transitive src-430 `tok-430 `tre-430) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-430 `typ-430 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-430-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-430-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-430 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-430-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-430-2]]))
3201+ (weld (weld (check ~.types-generic-union-transitive src-436 `tok-436 `tre-436) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-436 `typ-436 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-436-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-436-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-436 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-436-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-436-2]]))
3202+++ test-types-hole-concrete
3203+ (weld (check ~.types-hole-concrete src-437 `tok-437 `tre-437) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-437 `typ-437))
3204+++ test-types-hole-generic-mold
3205+ (weld (check ~.types-hole-generic-mold src-438 `tok-438 `tre-438) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-438 `typ-438))
3206+++ test-types-hole-local-boundary
3207+ (weld (check ~.types-hole-local-boundary src-439 `tok-439 `tre-439) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-439 `typ-439))
3208+++ test-types-hole-module-boundary
3209+ (weld (weld (check ~.types-hole-module-boundary src-440 `tok-440 `tre-440) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-440 `typ-440 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-440-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-440 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-440-1]]))
3210+++ test-types-hole-named-complex
3211+ (weld (check ~.types-hole-named-complex src-441 `tok-441 `tre-441) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-441 `typ-441))
3212+++ test-types-hole-numeric-capture
3213+ (weld (check ~.types-hole-numeric-capture src-442 `tok-442 `tre-442) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-442 `typ-442))
3214+++ test-types-hole-unbound-mold
3215+ (weld (check ~.types-hole-unbound-mold src-443 `tok-443 `tre-443) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-443 `typ-443))
3216+++ test-types-hole-unsupported
3217+ (weld (check ~.types-hole-unsupported src-444 `tok-444 `tre-444) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-444 `typ-444))
3218+++ test-types-hole-user-generic
3219+ (weld (check ~.types-hole-user-generic src-445 `tok-445 `tre-445) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-445 `typ-445))
3220+++ test-types-hole-user-named
3221+ (weld (check ~.types-hole-user-named src-446 `tok-446 `tre-446) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-446 `typ-446))
3222+++ test-types-hole-user-value
3223+ (weld (check ~.types-hole-user-value src-447 `tok-447 `tre-447) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-447 `typ-447))
29643224++ test-types-import-duplicate-mark
2965− (weld (check ~.types-import-duplicate-mark src-431 `tok-431 `tre-431) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-431 `typ-431 ~ ~[[%duplicate mark-431-1]]))
3225+ (weld (check ~.types-import-duplicate-mark src-448 `tok-448 `tre-448) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-448 `typ-448 ~ ~[[%duplicate mark-448-1]]))
29663226++ test-types-import-duplicate-sur
2967− (weld (check ~.types-import-duplicate-sur src-432 `tok-432 `tre-432) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-432 `typ-432 ~[[%fixture %direct imp-432-1] [%fixture %nested imp-432-2] [%fixture %valid imp-432-3]]))
3227+ (weld (check ~.types-import-duplicate-sur src-449 `tok-449 `tre-449) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-449 `typ-449 ~[[%fixture %direct imp-449-1] [%fixture %nested imp-449-2] [%fixture %valid imp-449-3]]))
29683228++ test-types-import-hoon-flags
2969− (weld (check ~.types-import-hoon-flags src-433 `tok-433 `tre-433) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-433 `typ-433 ~[[%flags %flag imp-433-1] [%flags %yes imp-433-2] [%flags %no imp-433-3] [%flags %record imp-433-4]]))
3229+ (weld (check ~.types-import-hoon-flags src-450 `tok-450 `tre-450) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-450 `typ-450 ~[[%flags %flag imp-450-1] [%flags %yes imp-450-2] [%flags %no imp-450-3] [%flags %record imp-450-4]]))
29703230++ test-types-import-hoon-noun
2971− (weld (check ~.types-import-hoon-noun src-434 `tok-434 `tre-434) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-434 `typ-434 ~[[%fixture %any imp-434-1] [%fixture %payload imp-434-2] [%fixture %option imp-434-3] [%fixture %overlap imp-434-4]]))
3231+ (weld (check ~.types-import-hoon-noun src-451 `tok-451 `tre-451) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-451 `typ-451 ~[[%fixture %any imp-451-1] [%fixture %payload imp-451-2] [%fixture %option imp-451-3] [%fixture %overlap imp-451-4]]))
29723232++ test-types-import-mark
2973− (weld (check ~.types-import-mark src-435 `tok-435 `tre-435) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-435 `typ-435 ~[[%fixture %title imp-435-1]] ~[[%label mark-435-1]]))
3233+ (weld (check ~.types-import-mark src-452 `tok-452 `tre-452) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-452 `typ-452 ~[[%fixture %title imp-452-1]] ~[[%label mark-452-1]]))
29743234++ test-types-import-mark-record
2975− (weld (check ~.types-import-mark-record src-436 `tok-436 `tre-436) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-436 `typ-436 ~ ~[[%note mark-436-1] [%choice mark-436-2]]))
3235+ (weld (check ~.types-import-mark-record src-453 `tok-453 `tre-453) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-453 `typ-453 ~ ~[[%note mark-453-1] [%choice mark-453-2]]))
29763236++ test-types-import-missing-mold
2977− (weld (check ~.types-import-missing-mold src-437 `tok-437 `tre-437) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-437 `typ-437 ~[[%fixture %missing imp-437-1]]))
3237+ (weld (check ~.types-import-missing-mold src-454 `tok-454 `tre-454) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-454 `typ-454 ~[[%fixture %missing imp-454-1]]))
29783238++ test-types-import-sur
2979− (weld (check ~.types-import-sur src-438 `tok-438 `tre-438) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-438 `typ-438 ~[[%fixture %title imp-438-1] [%fixture %pair imp-438-2]]))
3239+ (weld (check ~.types-import-sur src-455 `tok-455 `tre-455) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-455 `typ-455 ~[[%fixture %title imp-455-1] [%fixture %pair imp-455-2]]))
29803240++ test-types-import-sur-record-graph
2981− (weld (weld (check ~.types-import-sur-record-graph src-439 `tok-439 `tre-439) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-439 `typ-439 ~[[%fixture %entry imp-439-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-439-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-439 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-439-1]]))
3241+ (weld (weld (check ~.types-import-sur-record-graph src-456 `tok-456 `tre-456) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-456 `typ-456 ~[[%fixture %entry imp-456-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-456-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-456 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-456-1]]))
29823242++ test-types-import-tlon-notes
2983− (weld (check ~.types-import-tlon-notes src-440 `tok-440 `tre-440) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-440 `typ-440 ~[[%notes %u-note imp-440-1] [%notes %a-note imp-440-2] [%notes %u-notebook imp-440-3] [%notes %u-notes imp-440-4] [%notes %log imp-440-5] [%notes %import-node imp-440-6]]))
3243+ (weld (check ~.types-import-tlon-notes src-457 `tok-457 `tre-457) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-457 `typ-457 ~[[%notes %u-note imp-457-1] [%notes %a-note imp-457-2] [%notes %u-notebook imp-457-3] [%notes %u-notes imp-457-4] [%notes %log imp-457-5] [%notes %import-node imp-457-6] [%notes %a-notebook imp-457-7]]))
29843244++ test-types-list-branch
2985− (weld (check ~.types-list-branch src-441 `tok-441 `tre-441) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-441 `typ-441 ~ ~ ~))
3245+ (weld (check ~.types-list-branch src-458 `tok-458 `tre-458) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-458 `typ-458 ~ ~ ~))
29863246++ test-types-list-cons
2987− (weld (check ~.types-list-cons src-442 `tok-442 `tre-442) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-442 `typ-442 ~ ~ ~))
3247+ (weld (check ~.types-list-cons src-459 `tok-459 `tre-459) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-459 `typ-459 ~ ~ ~))
29883248++ test-types-list-context
2989− (weld (check ~.types-list-context src-443 `tok-443 `tre-443) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-443 `typ-443 ~ ~ ~))
3249+ (weld (check ~.types-list-context src-460 `tok-460 `tre-460) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-460 `typ-460 ~ ~ ~))
29903250++ test-types-list-imported
2991− (weld (check ~.types-list-imported src-444 `tok-444 `tre-444) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-444 `typ-444 ~[[%fixture %texts imp-444-1] [%fixture %ships imp-444-2]] ~ ~))
3251+ (weld (check ~.types-list-imported src-461 `tok-461 `tre-461) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-461 `typ-461 ~[[%fixture %texts imp-461-1] [%fixture %ships imp-461-2]] ~ ~))
29923252++ test-types-list-open
2993− (weld (check ~.types-list-open src-445 `tok-445 `tre-445) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-445 `typ-445 ~ ~ ~))
3253+ (weld (check ~.types-list-open src-462 `tok-462 `tre-462) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-462 `typ-462 ~ ~ ~))
29943254++ test-types-list-open-constraints
2995− (weld (check ~.types-list-open-constraints src-446 `tok-446 `tre-446) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-446 `typ-446 ~ ~ ~))
3255+ (weld (check ~.types-list-open-constraints src-463 `tok-463 `tre-463) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-463 `typ-463 ~ ~ ~))
29963256++ test-types-list-pattern-imported
2997− (weld (check ~.types-list-pattern-imported src-447 `tok-447 `tre-447) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-447 `typ-447 ~[[%fixture %texts imp-447-1] [%fixture %text-set imp-447-2]] ~ ~))
3257+ (weld (check ~.types-list-pattern-imported src-464 `tok-464 `tre-464) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-464 `typ-464 ~[[%fixture %texts imp-464-1] [%fixture %text-set imp-464-2]] ~ ~))
29983258++ test-types-list-patterns
2999− (weld (check ~.types-list-patterns src-448 `tok-448 `tre-448) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-448 `typ-448 ~ ~ ~))
3259+ (weld (check ~.types-list-patterns src-465 `tok-465 `tre-465) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-465 `typ-465 ~ ~ ~))
30003260++ test-types-list-zero-fit
3001− (weld (check ~.types-list-zero-fit src-449 `tok-449 `tre-449) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-449 `typ-449 ~ ~ ~))
3261+ (weld (check ~.types-list-zero-fit src-466 `tok-466 `tre-466) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-466 `typ-466 ~ ~ ~))
30023262++ test-types-local-capitals
3003− (weld (check ~.types-local-capitals src-450 `tok-450 `tre-450) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-450 `typ-450 ~ ~ ~))
3263+ (weld (check ~.types-local-capitals src-467 `tok-467 `tre-467) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-467 `typ-467 ~ ~ ~))
30043264++ test-types-local-recursive
3005− (weld (check ~.types-local-recursive src-451 `tok-451 `tre-451) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-451 `typ-451 ~ ~ ~))
3265+ (weld (check ~.types-local-recursive src-468 `tok-468 `tre-468) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-468 `typ-468 ~ ~ ~))
30063266++ test-types-local-scc
3007− (weld (check ~.types-local-scc src-452 `tok-452 `tre-452) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-452 `typ-452 ~ ~ ~))
3267+ (weld (check ~.types-local-scc src-469 `tok-469 `tre-469) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-469 `typ-469 ~ ~ ~))
30083268++ test-types-local-scc-adversarial
3009− (weld (check ~.types-local-scc-adversarial src-453 `tok-453 `tre-453) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-453 `typ-453 ~ ~ ~))
3269+ (weld (check ~.types-local-scc-adversarial src-470 `tok-470 `tre-470) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-470 `typ-470 ~ ~ ~))
30103270++ test-types-missing-tag-context
3011− (weld (check ~.types-missing-tag-context src-454 `tok-454 `tre-454) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-454 `typ-454 ~ ~ ~))
3271+ (weld (check ~.types-missing-tag-context src-471 `tok-471 `tre-471) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-471 `typ-471 ~ ~ ~))
30123272++ test-types-missing-tag-imported
3013− (weld (check ~.types-missing-tag-imported src-455 `tok-455 `tre-455) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-455 `typ-455 ~[[%fixture %choice imp-455-1] [%fixture %nested-choice imp-455-2]]))
3273+ (weld (check ~.types-missing-tag-imported src-472 `tok-472 `tre-472) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-472 `typ-472 ~[[%fixture %choice imp-472-1] [%fixture %nested-choice imp-472-2]]))
30143274++ test-types-missing-tag-named
3015− (weld (check ~.types-missing-tag-named src-456 `tok-456 `tre-456) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-456 `typ-456 ~ ~ ~))
3016−++ test-types-module-field-ambiguous
3017− (weld (weld (check ~.types-module-field-ambiguous src-457 `tok-457 `tre-457) (check-module-types ~.types-module-field-ambiguous ~[%tests %golden ~.types-module-field-ambiguous %source %jibb] src-457 `typ-457 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-457-1]])) (check-module-trees ~.types-module-field-ambiguous `mtre-457 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-457-1]]))
3275+ (weld (check ~.types-missing-tag-named src-473 `tok-473 `tre-473) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-473 `typ-473 ~ ~ ~))
3276+++ test-types-module-field-duplicate
3277+ (weld (weld (check ~.types-module-field-duplicate src-474 `tok-474 `tre-474) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-474 `typ-474 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-474-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-474 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-474-1]]))
30183278++ test-types-module-field-nonrecord
3019− (weld (weld (check ~.types-module-field-nonrecord src-458 `tok-458 `tre-458) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-458 `typ-458 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-458-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-458 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-458-1]]))
3279+ (weld (weld (check ~.types-module-field-nonrecord src-475 `tok-475 `tre-475) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-475 `typ-475 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-475-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-475 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-475-1]]))
30203280++ test-types-module-field-path
3021− (weld (weld (check ~.types-module-field-path src-459 `tok-459 `tre-459) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-459 `typ-459 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-459-1]])) (check-module-trees ~.types-module-field-path `mtre-459 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-459-1]]))
3281+ (weld (weld (check ~.types-module-field-path src-476 `tok-476 `tre-476) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-476 `typ-476 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-476-1]])) (check-module-trees ~.types-module-field-path `mtre-476 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-476-1]]))
30223282++ test-types-module-field-shadow
3023− (weld (weld (check ~.types-module-field-shadow src-460 `tok-460 `tre-460) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-460 `typ-460 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-460-1]])) (check-module-trees ~.types-module-field-shadow `mtre-460 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-460-1]]))
3283+ (weld (weld (check ~.types-module-field-shadow src-477 `tok-477 `tre-477) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-477 `typ-477 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-477-1]])) (check-module-trees ~.types-module-field-shadow `mtre-477 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-477-1]]))
30243284++ test-types-module-fixtures
3025− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-461 `tok-461 `tre-461) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-461 `typ-461 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-461-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-461-2]])) (check-module-trees ~.types-module-fixtures `mtre-461 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-461-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-461-2]]))
3285+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-478 `tok-478 `tre-478) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-478 `typ-478 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-478-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-478-2]])) (check-module-trees ~.types-module-fixtures `mtre-478 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-478-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-478-2]]))
30263286++ test-types-module-mixed
3027− (weld (weld (check ~.types-module-mixed src-462 `tok-462 `tre-462) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-462 `typ-462 ~[[%fixture %title imp-462-1]] ~[[%label mark-462-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-462-1]])) (check-module-trees ~.types-module-mixed `mtre-462 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-462-1]]))
3287+ (weld (weld (check ~.types-module-mixed src-479 `tok-479 `tre-479) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-479 `typ-479 ~[[%fixture %title imp-479-1]] ~[[%label mark-479-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-479-1]])) (check-module-trees ~.types-module-mixed `mtre-479 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-479-1]]))
30283288++ test-types-multi-call
3029− (weld (check ~.types-multi-call src-463 `tok-463 `tre-463) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-463 `typ-463 ~ ~ ~))
3289+ (weld (check ~.types-multi-call src-480 `tok-480 `tre-480) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-480 `typ-480 ~ ~ ~))
30303290++ test-types-multi-import
3031− (weld (weld (check ~.types-multi-import src-464 `tok-464 `tre-464) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-464 `typ-464 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]])) (check-module-trees ~.types-multi-import `mtre-464 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]]))
3291+ (weld (weld (check ~.types-multi-import src-481 `tok-481 `tre-481) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-481 `typ-481 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-481-1]])) (check-module-trees ~.types-multi-import `mtre-481 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-481-1]]))
30323292++ test-types-nested-missing-tag
3033− (weld (check ~.types-nested-missing-tag src-465 `tok-465 `tre-465) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-465 `typ-465 ~ ~ ~))
3293+ (weld (check ~.types-nested-missing-tag src-482 `tok-482 `tre-482) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-482 `typ-482 ~ ~ ~))
30343294++ test-types-null-context
3035− (weld (check ~.types-null-context src-466 `tok-466 `tre-466) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-466 `typ-466))
3295+ (weld (check ~.types-null-context src-483 `tok-483 `tre-483) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-483 `typ-483))
30363296++ test-types-null-overlap
3037− (weld (check ~.types-null-overlap src-467 `tok-467 `tre-467) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-467 `typ-467))
3297+ (weld (check ~.types-null-overlap src-484 `tok-484 `tre-484) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-484 `typ-484))
30383298++ test-types-null-unresolved
3039− (weld (check ~.types-null-unresolved src-468 `tok-468 `tre-468) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-468 `typ-468))
3299+ (weld (check ~.types-null-unresolved src-485 `tok-485 `tre-485) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-485 `typ-485))
30403300++ test-types-pair-context
3041− (weld (check ~.types-pair-context src-469 `tok-469 `tre-469) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-469 `typ-469 ~ ~ ~))
3301+ (weld (check ~.types-pair-context src-486 `tok-486 `tre-486) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-486 `typ-486 ~ ~ ~))
30423302++ test-types-partial-apply
3043− (weld (check ~.types-partial-apply src-470 `tok-470 `tre-470) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-470 `typ-470))
3303+ (weld (check ~.types-partial-apply src-487 `tok-487 `tre-487) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-487 `typ-487))
30443304++ test-types-partial-atom-alias
3045− (weld (check ~.types-partial-atom-alias src-471 `tok-471 `tre-471) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-471 `typ-471))
3305+ (weld (check ~.types-partial-atom-alias src-488 `tok-488 `tre-488) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-488 `typ-488))
30463306++ test-types-partial-atom-constraint
3047− (weld (check ~.types-partial-atom-constraint src-472 `tok-472 `tre-472) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-472 `typ-472))
3307+ (weld (check ~.types-partial-atom-constraint src-489 `tok-489 `tre-489) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-489 `typ-489))
30483308++ test-types-partial-atom-widening
3049− (weld (check ~.types-partial-atom-widening src-473 `tok-473 `tre-473) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-473 `typ-473))
3309+ (weld (check ~.types-partial-atom-widening src-490 `tok-490 `tre-490) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-490 `typ-490))
30503310++ test-types-partial-aura
3051− (weld (check ~.types-partial-aura src-474 `tok-474 `tre-474) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-474 `typ-474))
3311+ (weld (check ~.types-partial-aura src-491 `tok-491 `tre-491) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-491 `typ-491))
30523312++ test-types-partial-aura-family
3053− (weld (check ~.types-partial-aura-family src-475 `tok-475 `tre-475) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-475 `typ-475))
3313+ (weld (check ~.types-partial-aura-family src-492 `tok-492 `tre-492) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-492 `typ-492))
30543314++ test-types-partial-aura-generalization
3055− (weld (check ~.types-partial-aura-generalization src-476 `tok-476 `tre-476) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-476 `typ-476))
3315+ (weld (check ~.types-partial-aura-generalization src-493 `tok-493 `tre-493) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-493 `typ-493))
30563316++ test-types-partial-bare-atom
3057− (weld (check ~.types-partial-bare-atom src-477 `tok-477 `tre-477) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-477 `typ-477))
3317+ (weld (check ~.types-partial-bare-atom src-494 `tok-494 `tre-494) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-494 `typ-494))
30583318++ test-types-partial-branch-widening
3059− (weld (check ~.types-partial-branch-widening src-478 `tok-478 `tre-478) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-478 `typ-478))
3319+ (weld (check ~.types-partial-branch-widening src-495 `tok-495 `tre-495) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-495 `typ-495))
30603320++ test-types-partial-conflicting-sites
3061− (weld (check ~.types-partial-conflicting-sites src-479 `tok-479 `tre-479) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-479 `typ-479))
3321+ (weld (check ~.types-partial-conflicting-sites src-496 `tok-496 `tre-496) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-496 `typ-496))
30623322++ test-types-partial-decimal-default
3063− (weld (check ~.types-partial-decimal-default src-480 `tok-480 `tre-480) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-480 `typ-480))
3323+ (weld (check ~.types-partial-decimal-default src-497 `tok-497 `tre-497) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-497 `typ-497))
30643324++ test-types-partial-dependency-chain
3065− (weld (check ~.types-partial-dependency-chain src-481 `tok-481 `tre-481) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-481 `typ-481))
3325+ (weld (check ~.types-partial-dependency-chain src-498 `tok-498 `tre-498) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-498 `typ-498))
30663326++ test-types-partial-explicit-capital
3067− (weld (check ~.types-partial-explicit-capital src-482 `tok-482 `tre-482) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-482 `typ-482))
3327+ (weld (check ~.types-partial-explicit-capital src-499 `tok-499 `tre-499) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-499 `typ-499))
30683328++ test-types-partial-forward
3069− (weld (check ~.types-partial-forward src-483 `tok-483 `tre-483) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-483 `typ-483))
3329+ (weld (check ~.types-partial-forward src-500 `tok-500 `tre-500) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-500 `typ-500))
30703330++ test-types-partial-generalization
3071− (weld (check ~.types-partial-generalization src-484 `tok-484 `tre-484) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-484 `typ-484))
3331+ (weld (check ~.types-partial-generalization src-501 `tok-501 `tre-501) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-501 `typ-501))
30723332++ test-types-partial-identity
3073− (weld (check ~.types-partial-identity src-485 `tok-485 `tre-485) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-485 `typ-485))
3333+ (weld (check ~.types-partial-identity src-502 `tok-502 `tre-502) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-502 `typ-502))
30743334++ test-types-partial-independent-atoms
3075− (weld (check ~.types-partial-independent-atoms src-486 `tok-486 `tre-486) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-486 `typ-486))
3335+ (weld (check ~.types-partial-independent-atoms src-503 `tok-503 `tre-503) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-503 `typ-503))
30763336++ test-types-partial-local-molds
3077− (weld (check ~.types-partial-local-molds src-487 `tok-487 `tre-487) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-487 `typ-487))
3337+ (weld (check ~.types-partial-local-molds src-504 `tok-504 `tre-504) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-504 `typ-504))
30783338++ test-types-partial-locals
3079− (weld (check ~.types-partial-locals src-488 `tok-488 `tre-488) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-488 `typ-488))
3339+ (weld (check ~.types-partial-locals src-505 `tok-505 `tre-505) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-505 `typ-505))
30803340++ test-types-partial-many-atom-constraints
3081− (weld (check ~.types-partial-many-atom-constraints src-489 `tok-489 `tre-489) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-489 `typ-489))
3341+ (weld (check ~.types-partial-many-atom-constraints src-506 `tok-506 `tre-506) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-506 `typ-506))
30823342++ test-types-partial-mold-bare-aura
3083− (weld (check ~.types-partial-mold-bare-aura src-490 `tok-490 `tre-490) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-490 `typ-490))
3343+ (weld (check ~.types-partial-mold-bare-aura src-507 `tok-507 `tre-507) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-507 `typ-507))
30843344++ test-types-partial-mold-composite
3085− (weld (check ~.types-partial-mold-composite src-491 `tok-491 `tre-491) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-491 `typ-491))
3345+ (weld (check ~.types-partial-mold-composite src-508 `tok-508 `tre-508) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-508 `typ-508))
30863346++ test-types-partial-mold-forward
3087− (weld (check ~.types-partial-mold-forward src-492 `tok-492 `tre-492) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-492 `typ-492))
3347+ (weld (check ~.types-partial-mold-forward src-509 `tok-509 `tre-509) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-509 `typ-509))
30883348++ test-types-partial-mold-recursive
3089− (weld (check ~.types-partial-mold-recursive src-493 `tok-493 `tre-493) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-493 `typ-493))
3349+ (weld (check ~.types-partial-mold-recursive src-510 `tok-510 `tre-510) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-510 `typ-510))
30903350++ test-types-partial-occurs
3091− (weld (check ~.types-partial-occurs src-494 `tok-494 `tre-494) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-494 `typ-494))
3351+ (weld (check ~.types-partial-occurs src-511 `tok-511 `tre-511) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-511 `typ-511))
30923352++ test-types-partial-projection
3093− (weld (check ~.types-partial-projection src-495 `tok-495 `tre-495) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-495 `typ-495))
3353+ (weld (check ~.types-partial-projection src-512 `tok-512 `tre-512) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-512 `typ-512))
30943354++ test-types-partial-shadow-global
3095− (weld (check ~.types-partial-shadow-global src-496 `tok-496 `tre-496) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-496 `typ-496))
3355+ (weld (check ~.types-partial-shadow-global src-513 `tok-513 `tre-513) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-513 `typ-513))
30963356++ test-types-partial-shared-tvar
3097− (weld (check ~.types-partial-shared-tvar src-497 `tok-497 `tre-497) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-497 `typ-497))
3357+ (weld (check ~.types-partial-shared-tvar src-514 `tok-514 `tre-514) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-514 `typ-514))
30983358++ test-types-partial-union-cases
3099− (weld (check ~.types-partial-union-cases src-498 `tok-498 `tre-498) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-498 `typ-498))
3359+ (weld (check ~.types-partial-union-cases src-515 `tok-515 `tre-515) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-515 `typ-515))
31003360++ test-types-partial-union-edges
3101− (weld (check ~.types-partial-union-edges src-499 `tok-499 `tre-499) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-499 `typ-499))
3361+ (weld (check ~.types-partial-union-edges src-516 `tok-516 `tre-516) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-516 `typ-516))
31023362++ test-types-partial-unresolved-tag
3103− (weld (check ~.types-partial-unresolved-tag src-500 `tok-500 `tre-500) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-500 `typ-500))
3363+ (weld (check ~.types-partial-unresolved-tag src-517 `tok-517 `tre-517) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-517 `typ-517))
31043364++ test-types-prelude-arithmetic
3105− (weld (check ~.types-prelude-arithmetic src-501 `tok-501 `tre-501) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-501 `typ-501 ~ ~ ~))
3365+ (weld (check ~.types-prelude-arithmetic src-518 `tok-518 `tre-518) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-518 `typ-518 ~ ~ ~))
3366+++ test-types-prelude-bond
3367+ (weld (check ~.types-prelude-bond src-519 `tok-519 `tre-519) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-519 `typ-519 ~ ~ ~))
31063368++ test-types-prelude-cmd
3107− (weld (check ~.types-prelude-cmd src-502 `tok-502 `tre-502) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-502 `typ-502 ~ ~ ~))
3369+ (weld (check ~.types-prelude-cmd src-520 `tok-520 `tre-520) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-520 `typ-520 ~ ~ ~))
31083370++ test-types-prelude-direct
3109− (weld (check ~.types-prelude-direct src-503 `tok-503 `tre-503) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-503 `typ-503 ~ ~ ~))
3371+ (weld (check ~.types-prelude-direct src-521 `tok-521 `tre-521) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-521 `typ-521 ~ ~ ~))
31103372++ test-types-prelude-functional
3111− (weld (check ~.types-prelude-functional src-504 `tok-504 `tre-504) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-504 `typ-504 ~ ~ ~))
3373+ (weld (check ~.types-prelude-functional src-522 `tok-522 `tre-522) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-522 `typ-522 ~ ~ ~))
31123374++ test-types-prelude-interface
3113− (weld (weld (check ~.types-prelude-interface src-505 `tok-505 `tre-505) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-505 `typ-505 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-505-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-505-2]])) (check-module-trees ~.types-prelude-interface `mtre-505 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-505-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-505-2]]))
3375+ (weld (weld (check ~.types-prelude-interface src-523 `tok-523 `tre-523) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-523 `typ-523 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-523-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-523-2]])) (check-module-trees ~.types-prelude-interface `mtre-523 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-523-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-523-2]]))
3376+++ test-types-prelude-list-alias
3377+ (weld (check ~.types-prelude-list-alias src-524 `tok-524 `tre-524) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-524 `typ-524 ~ ~ ~))
31143378++ test-types-prelude-list-functions
3115− (weld (weld (check ~.types-prelude-list-functions src-506 `tok-506 `tre-506) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-506 `typ-506 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-506-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-506 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-506-1]]))
3379+ (weld (weld (check ~.types-prelude-list-functions src-525 `tok-525 `tre-525) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-525 `typ-525 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-525-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-525 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-525-1]]))
31163380++ test-types-prelude-list-helpers
3117− (weld (check ~.types-prelude-list-helpers src-507 `tok-507 `tre-507) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-507 `typ-507 ~ ~ ~))
3381+ (weld (check ~.types-prelude-list-helpers src-526 `tok-526 `tre-526) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-526 `typ-526 ~ ~ ~))
31183382++ test-types-prelude-predicates
3119− (weld (check ~.types-prelude-predicates src-508 `tok-508 `tre-508) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-508 `typ-508 ~ ~ ~))
3383+ (weld (check ~.types-prelude-predicates src-527 `tok-527 `tre-527) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-527 `typ-527 ~ ~ ~))
31203384++ test-types-prelude-unit-helpers
3121− (weld (check ~.types-prelude-unit-helpers src-509 `tok-509 `tre-509) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-509 `typ-509 ~ ~ ~))
3385+ (weld (check ~.types-prelude-unit-helpers src-528 `tok-528 `tre-528) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-528 `typ-528 ~ ~ ~))
3386+++ test-types-proj-explicit-context
3387+ (weld (check ~.types-proj-explicit-context src-529 `tok-529 `tre-529) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-529 `typ-529 ~ ~ ~))
3388+++ test-types-proj-nested-no-implicit
3389+ (weld (check ~.types-proj-nested-no-implicit src-530 `tok-530 `tre-530) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-530 `typ-530 ~ ~ ~))
3390+++ test-types-proj-reserved-imported-definition
3391+ (weld (weld (check ~.types-proj-reserved-imported-definition src-531 `tok-531 `tre-531) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-531 `typ-531 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-531-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-531 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-531-1]]))
3392+++ test-types-proj-reserved-jibb-import
3393+ (weld (weld (check ~.types-proj-reserved-jibb-import src-532 `tok-532 `tre-532) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-532 `typ-532 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-532-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-532 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-532-1]]))
3394+++ test-types-proj-reserved-local
3395+ (weld (check ~.types-proj-reserved-local src-533 `tok-533 `tre-533) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-533 `typ-533 ~ ~ ~))
3396+++ test-types-proj-reserved-local-mold
3397+ (weld (check ~.types-proj-reserved-local-mold src-534 `tok-534 `tre-534) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-534 `typ-534 ~ ~ ~))
3398+++ test-types-proj-reserved-mark-import
3399+ (weld (check ~.types-proj-reserved-mark-import src-535 `tok-535 `tre-535) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-535 `typ-535 ~ ~ ~))
3400+++ test-types-proj-reserved-mold
3401+ (weld (check ~.types-proj-reserved-mold src-536 `tok-536 `tre-536) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-536 `typ-536 ~ ~ ~))
3402+++ test-types-proj-reserved-pattern
3403+ (weld (check ~.types-proj-reserved-pattern src-537 `tok-537 `tre-537) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-537 `typ-537 ~ ~ ~))
3404+++ test-types-proj-reserved-positive
3405+ (weld (check ~.types-proj-reserved-positive src-538 `tok-538 `tre-538) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-538 `typ-538 ~ ~ ~))
3406+++ test-types-proj-reserved-sample
3407+ (weld (check ~.types-proj-reserved-sample src-539 `tok-539 `tre-539) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-539 `typ-539 ~ ~ ~))
3408+++ test-types-proj-reserved-sur-import
3409+ (weld (check ~.types-proj-reserved-sur-import src-540 `tok-540 `tre-540) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-540 `typ-540 ~ ~ ~))
3410+++ test-types-proj-reserved-unused-pattern
3411+ (weld (check ~.types-proj-reserved-unused-pattern src-541 `tok-541 `tre-541) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-541 `typ-541 ~ ~ ~))
3412+++ test-types-proj-reserved-unused-sample
3413+ (weld (check ~.types-proj-reserved-unused-sample src-542 `tok-542 `tre-542) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-542 `typ-542 ~ ~ ~))
3414+++ test-types-proj-reserved-unused-value
3415+ (weld (check ~.types-proj-reserved-unused-value src-543 `tok-543 `tre-543) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-543 `typ-543 ~ ~ ~))
3416+++ test-types-proj-reserved-value
3417+ (weld (check ~.types-proj-reserved-value src-544 `tok-544 `tre-544) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-544 `typ-544 ~ ~ ~))
3418+++ test-types-proj-single-duplicate
3419+ (weld (check ~.types-proj-single-duplicate src-545 `tok-545 `tre-545) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-545 `typ-545 ~ ~ ~))
3420+++ test-types-proj-single-field
3421+ (weld (check ~.types-proj-single-field src-546 `tok-546 `tre-546) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-546 `typ-546 ~ ~ ~))
3422+++ test-types-proj-single-sample-face
3423+ (weld (check ~.types-proj-single-sample-face src-547 `tok-547 `tre-547) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-547 `typ-547 ~ ~ ~))
3424+++ test-types-proj-single-wrapped
3425+ (weld (check ~.types-proj-single-wrapped src-548 `tok-548 `tre-548) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-548 `typ-548 ~ ~ ~))
3426+++ test-types-qath-faces
3427+ (weld (check ~.types-qath-faces src-549 `tok-549 `tre-549) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-549 `typ-549 ~ ~ ~))
3428+++ test-types-qath-holes
3429+ (weld (check ~.types-qath-holes src-550 `tok-550 `tre-550) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-550 `typ-550 ~ ~ ~))
3430+++ test-types-qath-module-identity
3431+ (weld (weld (check ~.types-qath-module-identity src-551 `tok-551 `tre-551) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-551 `typ-551 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-551-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-551-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-551-3]])) (check-module-trees ~.types-qath-module-identity `mtre-551 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-551-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-551-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-551-3]]))
3432+++ test-types-qath-recursive
3433+ (weld (check ~.types-qath-recursive src-552 `tok-552 `tre-552) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-552 `typ-552 ~ ~ ~))
31223434++ test-types-record-bound-variable
3123− (weld (check ~.types-record-bound-variable src-510 `tok-510 `tre-510) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-510 `typ-510))
3435+ (weld (check ~.types-record-bound-variable src-553 `tok-553 `tre-553) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-553 `typ-553))
31243436++ test-types-record-cast-context
3125− (weld (check ~.types-record-cast-context src-511 `tok-511 `tre-511) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-511 `typ-511 ~ ~ ~))
3437+ (weld (check ~.types-record-cast-context src-554 `tok-554 `tre-554) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-554 `typ-554 ~ ~ ~))
31263438++ test-types-record-change
3127− (weld (check ~.types-record-change src-512 `tok-512 `tre-512) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-512 `typ-512 ~ ~ ~))
3439+ (weld (check ~.types-record-change src-555 `tok-555 `tre-555) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-555 `typ-555 ~ ~ ~))
31283440++ test-types-record-change-generic
3129− (weld (check ~.types-record-change-generic src-513 `tok-513 `tre-513) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-513 `typ-513 ~ ~ ~))
3441+ (weld (check ~.types-record-change-generic src-556 `tok-556 `tre-556) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-556 `typ-556 ~ ~ ~))
31303442++ test-types-record-faces
3131− (weld (check ~.types-record-faces src-514 `tok-514 `tre-514) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-514 `typ-514))
3443+ (weld (check ~.types-record-faces src-557 `tok-557 `tre-557) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-557 `typ-557))
3444+++ test-types-record-field-edit-separate
3445+ (weld (check ~.types-record-field-edit-separate src-558 `tok-558 `tre-558) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-558 `typ-558))
3446+++ test-types-record-field-expr-duplicate
3447+ (weld (check ~.types-record-field-expr-duplicate src-559 `tok-559 `tre-559) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-559 `typ-559))
3448+++ test-types-record-field-expr-separate
3449+ (weld (check ~.types-record-field-expr-separate src-560 `tok-560 `tre-560) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-560 `typ-560))
3450+++ test-types-record-field-module-reachable
3451+ (weld (weld (check ~.types-record-field-module-reachable src-561 `tok-561 `tre-561) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-561 `typ-561 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-561-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-561 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-561-1]]))
3452+++ test-types-record-field-module-unused
3453+ (weld (weld (check ~.types-record-field-module-unused src-562 `tok-562 `tre-562) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-562 `typ-562 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-562-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-562-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-562 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-562-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-562-2]]))
3454+++ test-types-record-field-nested-mold
3455+ (weld (check ~.types-record-field-nested-mold src-563 `tok-563 `tre-563) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-563 `typ-563))
3456+++ test-types-record-field-outer-inner
3457+ (weld (check ~.types-record-field-outer-inner src-564 `tok-564 `tre-564) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-564 `typ-564))
3458+++ test-types-record-field-sample-duplicate
3459+ (weld (check ~.types-record-field-sample-duplicate src-565 `tok-565 `tre-565) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-565 `typ-565))
3460+++ test-types-record-field-separate-molds
3461+ (weld (check ~.types-record-field-separate-molds src-566 `tok-566 `tre-566) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-566 `typ-566))
3462+++ test-types-record-field-unused-mold
3463+ (weld (check ~.types-record-field-unused-mold src-567 `tok-567 `tre-567) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-567 `typ-567))
31323464++ test-types-record-import
3133− (weld (weld (check ~.types-record-import src-515 `tok-515 `tre-515) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-515 `typ-515 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-515-1]])) (check-module-trees ~.types-record-import `mtre-515 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-515-1]]))
3465+ (weld (weld (check ~.types-record-import src-568 `tok-568 `tre-568) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-568 `typ-568 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-568-1]])) (check-module-trees ~.types-record-import `mtre-568 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-568-1]]))
31343466++ test-types-record-local-scheme
3135− (weld (check ~.types-record-local-scheme src-516 `tok-516 `tre-516) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-516 `typ-516))
3467+ (weld (check ~.types-record-local-scheme src-569 `tok-569 `tre-569) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-569 `typ-569))
31363468++ test-types-record-nested
3137− (weld (check ~.types-record-nested src-517 `tok-517 `tre-517) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-517 `typ-517))
3469+ (weld (check ~.types-record-nested src-570 `tok-570 `tre-570) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-570 `typ-570))
31383470++ test-types-record-to-tuple
3139− (weld (check ~.types-record-to-tuple src-518 `tok-518 `tre-518) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-518 `typ-518))
3471+ (weld (check ~.types-record-to-tuple src-571 `tok-571 `tre-571) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-571 `typ-571))
31403472++ test-types-recursion-scc-failures
3141− (weld (check ~.types-recursion-scc-failures src-519 `tok-519 `tre-519) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-519 `typ-519 ~ ~ ~))
3473+ (weld (check ~.types-recursion-scc-failures src-572 `tok-572 `tre-572) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-572 `typ-572 ~ ~ ~))
31423474++ test-types-recursion-scc-groups
3143− (weld (check ~.types-recursion-scc-groups src-520 `tok-520 `tre-520) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-520 `typ-520 ~ ~ ~))
3475+ (weld (check ~.types-recursion-scc-groups src-573 `tok-573 `tre-573) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-573 `typ-573 ~ ~ ~))
31443476++ test-types-recursion-scc-import
3145− (weld (weld (check ~.types-recursion-scc-import src-521 `tok-521 `tre-521) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-521 `typ-521 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-521-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-521 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-521-1]]))
3477+ (weld (weld (check ~.types-recursion-scc-import src-574 `tok-574 `tre-574) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-574 `typ-574 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-574-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-574 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-574-1]]))
31463478++ test-types-recursion-scc-import-bad
3147− (weld (weld (check ~.types-recursion-scc-import-bad src-522 `tok-522 `tre-522) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-522 `typ-522 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-522-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-522 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-522-1]]))
3479+ (weld (weld (check ~.types-recursion-scc-import-bad src-575 `tok-575 `tre-575) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-575 `typ-575 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-575-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-575 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-575-1]]))
31483480++ test-types-recursion-scc-local
3149− (weld (check ~.types-recursion-scc-local src-523 `tok-523 `tre-523) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-523 `typ-523 ~ ~ ~))
3481+ (weld (check ~.types-recursion-scc-local src-576 `tok-576 `tre-576) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-576 `typ-576 ~ ~ ~))
31503482++ test-types-recursion-scc-order
3151− (weld (check ~.types-recursion-scc-order src-524 `tok-524 `tre-524) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-524 `typ-524 ~ ~ ~))
3483+ (weld (check ~.types-recursion-scc-order src-577 `tok-577 `tre-577) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-577 `typ-577 ~ ~ ~))
31523484++ test-types-recursion-scc-shadow
3153− (weld (check ~.types-recursion-scc-shadow src-525 `tok-525 `tre-525) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-525 `typ-525 ~ ~ ~))
3485+ (weld (check ~.types-recursion-scc-shadow src-578 `tok-578 `tre-578) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-578 `typ-578 ~ ~ ~))
31543486++ test-types-recursive-branch
3155− (weld (check ~.types-recursive-branch src-526 `tok-526 `tre-526) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-526 `typ-526 ~ ~ ~))
3487+ (weld (check ~.types-recursive-branch src-579 `tok-579 `tre-579) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-579 `typ-579 ~ ~ ~))
31563488++ test-types-recursive-gate
3157− (weld (check ~.types-recursive-gate src-527 `tok-527 `tre-527) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-527 `typ-527))
3489+ (weld (check ~.types-recursive-gate src-580 `tok-580 `tre-580) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-580 `typ-580))
31583490++ test-types-recursive-sample
3159− (weld (check ~.types-recursive-sample src-528 `tok-528 `tre-528) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-528 `typ-528))
3491+ (weld (check ~.types-recursive-sample src-581 `tok-581 `tre-581) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-581 `typ-581))
31603492++ test-types-scope-library-poke
3161− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-529 `tok-529 `tre-529) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-529 `typ-529 ~ ~ ~))
3493+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-582 `tok-582 `tre-582) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-582 `typ-582 ~ ~ ~))
31623494++ test-types-scope-root-api
3163− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-530 `tok-530 `tre-530) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-530 `typ-530 ~ ~ ~))
3495+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-583 `tok-583 `tre-583) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-583 `typ-583 ~ ~ ~))
31643496++ test-types-scope-store-duplicate
3165− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-531 `tok-531 `tre-531) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-531 `typ-531 ~ ~ ~))
3497+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-584 `tok-584 `tre-584) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-584 `typ-584 ~ ~ ~))
31663498++ test-types-scope-store-shadow
3167− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-532 `tok-532 `tre-532) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-532 `typ-532 ~ ~ ~))
3499+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-585 `tok-585 `tre-585) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-585 `typ-585 ~ ~ ~))
31683500++ test-types-single-case-pattern
3169− (weld (check ~.types-single-case-pattern src-533 `tok-533 `tre-533) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-533 `typ-533 ~ ~ ~))
3501+ (weld (check ~.types-single-case-pattern src-586 `tok-586 `tre-586) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-586 `typ-586 ~ ~ ~))
31703502++ test-types-string-interpolation
3171− (weld (check ~.types-string-interpolation src-534 `tok-534 `tre-534) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-534 `typ-534 ~ ~ ~))
3503+ (weld (check ~.types-string-interpolation src-587 `tok-587 `tre-587) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-587 `typ-587 ~ ~ ~))
31723504++ test-types-tuple-context
3173− (weld (check ~.types-tuple-context src-535 `tok-535 `tre-535) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-535 `typ-535 ~ ~ ~))
3505+ (weld (check ~.types-tuple-context src-588 `tok-588 `tre-588) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-588 `typ-588 ~ ~ ~))
31743506++ test-types-tuple-context-nested
3175− (weld (check ~.types-tuple-context-nested src-536 `tok-536 `tre-536) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-536 `typ-536 ~ ~ ~))
3507+ (weld (check ~.types-tuple-context-nested src-589 `tok-589 `tre-589) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-589 `typ-589 ~ ~ ~))
31763508++ test-types-union-alias
3177− (weld (check ~.types-union-alias src-537 `tok-537 `tre-537) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-537 `typ-537))
3509+ (weld (check ~.types-union-alias src-590 `tok-590 `tre-590) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-590 `typ-590))
31783510++ test-types-union-branch-context
3179− (weld (check ~.types-union-branch-context src-538 `tok-538 `tre-538) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-538 `typ-538))
3511+ (weld (check ~.types-union-branch-context src-591 `tok-591 `tre-591) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-591 `typ-591))
31803512++ test-types-union-branch-pending
3181− (weld (check ~.types-union-branch-pending src-539 `tok-539 `tre-539) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-539 `typ-539))
3513+ (weld (check ~.types-union-branch-pending src-592 `tok-592 `tre-592) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-592 `typ-592))
31823514++ test-types-union-constructor-shape
3183− (weld (check ~.types-union-constructor-shape src-540 `tok-540 `tre-540) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-540 `typ-540))
3515+ (weld (check ~.types-union-constructor-shape src-593 `tok-593 `tre-593) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-593 `typ-593))
31843516++ test-types-union-context-flow
3185− (weld (check ~.types-union-context-flow src-541 `tok-541 `tre-541) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-541 `typ-541))
3517+ (weld (check ~.types-union-context-flow src-594 `tok-594 `tre-594) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-594 `typ-594))
31863518++ test-types-union-finite
3187− (weld (check ~.types-union-finite src-542 `tok-542 `tre-542) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-542 `typ-542 ~ ~ ~))
3519+ (weld (check ~.types-union-finite src-595 `tok-595 `tre-595) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-595 `typ-595 ~ ~ ~))
31883520++ test-types-union-finite-context
3189− (weld (check ~.types-union-finite-context src-543 `tok-543 `tre-543) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-543 `typ-543 ~ ~ ~))
3521+ (weld (check ~.types-union-finite-context src-596 `tok-596 `tre-596) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-596 `typ-596 ~ ~ ~))
31903522++ test-types-union-finite-generic
3191− (weld (check ~.types-union-finite-generic src-544 `tok-544 `tre-544) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-544 `typ-544 ~ ~ ~))
3523+ (weld (check ~.types-union-finite-generic src-597 `tok-597 `tre-597) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-597 `typ-597 ~ ~ ~))
31923524++ test-types-union-finite-limit
3193− (weld (check ~.types-union-finite-limit src-545 `tok-545 `tre-545) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-545 `typ-545 ~ ~ ~))
3525+ (weld (check ~.types-union-finite-limit src-598 `tok-598 `tre-598) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-598 `typ-598 ~ ~ ~))
31943526++ test-types-union-import
3195− (weld (weld (check ~.types-union-import src-546 `tok-546 `tre-546) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-546 `typ-546 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-546-1]])) (check-module-trees ~.types-union-import `mtre-546 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-546-1]]))
3527+ (weld (weld (check ~.types-union-import src-599 `tok-599 `tre-599) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-599 `typ-599 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-599-1]])) (check-module-trees ~.types-union-import `mtre-599 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-599-1]]))
31963528++ test-types-union-local-pending
3197− (weld (check ~.types-union-local-pending src-547 `tok-547 `tre-547) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-547 `typ-547))
3529+ (weld (check ~.types-union-local-pending src-600 `tok-600 `tre-600) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-600 `typ-600))
3530+++ test-types-union-nonwing-subject
3531+ (weld (check ~.types-union-nonwing-subject src-601 `tok-601 `tre-601) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-601 `typ-601 ~ ~ ~))
31983532++ test-types-union-overlap
3199− (weld (check ~.types-union-overlap src-548 `tok-548 `tre-548) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-548 `typ-548))
3533+ (weld (check ~.types-union-overlap src-602 `tok-602 `tre-602) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-602 `typ-602))
32003534++ test-types-union-overlap-nested
3201− (weld (check ~.types-union-overlap-nested src-549 `tok-549 `tre-549) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-549 `typ-549))
3535+ (weld (check ~.types-union-overlap-nested src-603 `tok-603 `tre-603) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-603 `typ-603))
32023536++ test-types-union-pattern-result-context
3203− (weld (check ~.types-union-pattern-result-context src-550 `tok-550 `tre-550) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-550 `typ-550 ~ ~ ~))
3537+ (weld (check ~.types-union-pattern-result-context src-604 `tok-604 `tre-604) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-604 `typ-604 ~ ~ ~))
32043538++ test-types-union-pattern-result-controls
3205− (weld (check ~.types-union-pattern-result-controls src-551 `tok-551 `tre-551) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-551 `typ-551 ~ ~ ~))
3539+ (weld (check ~.types-union-pattern-result-controls src-605 `tok-605 `tre-605) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-605 `typ-605 ~ ~ ~))
32063540++ test-types-union-patterns
3207− (weld (check ~.types-union-patterns src-552 `tok-552 `tre-552) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-552 `typ-552 ~ ~ ~))
3541+ (weld (check ~.types-union-patterns src-606 `tok-606 `tre-606) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-606 `typ-606 ~ ~ ~))
32083542++ test-types-union-patterns-generic
3209− (weld (check ~.types-union-patterns-generic src-553 `tok-553 `tre-553) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-553 `typ-553 ~ ~ ~))
3543+ (weld (check ~.types-union-patterns-generic src-607 `tok-607 `tre-607) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-607 `typ-607 ~ ~ ~))
32103544++ test-types-union-patterns-import
3211− (weld (weld (check ~.types-union-patterns-import src-554 `tok-554 `tre-554) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-554 `typ-554 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]])) (check-module-trees ~.types-union-patterns-import `mtre-554 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]]))
3545+ (weld (weld (check ~.types-union-patterns-import src-608 `tok-608 `tre-608) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-608 `typ-608 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-608-1]])) (check-module-trees ~.types-union-patterns-import `mtre-608 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-608-1]]))
32123546++ test-types-union-phantom-generic
3213− (weld (check ~.types-union-phantom-generic src-555 `tok-555 `tre-555) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-555 `typ-555))
3547+ (weld (check ~.types-union-phantom-generic src-609 `tok-609 `tre-609) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-609 `typ-609))
32143548++ test-types-union-polymorphic-identity
3215− (weld (weld (check ~.types-union-polymorphic-identity src-556 `tok-556 `tre-556) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-556 `typ-556 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-556-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-556-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-556 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-556-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-556-2]]))
3549+ (weld (weld (check ~.types-union-polymorphic-identity src-610 `tok-610 `tre-610) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-610 `typ-610 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-610-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-610-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-610 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-610-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-610-2]]))
32163550++ test-types-union-print-cross-namespace
3217− (weld (weld (check ~.types-union-print-cross-namespace src-557 `tok-557 `tre-557) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-557 `typ-557 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-557-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-557 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-557-1]]))
3551+ (weld (weld (check ~.types-union-print-cross-namespace src-611 `tok-611 `tre-611) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-611 `typ-611 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-611-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-611 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-611-1]]))
32183552++ test-types-union-print-distinct
3219− (weld (weld (check ~.types-union-print-distinct src-558 `tok-558 `tre-558) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-558 `typ-558 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-558-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-558-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-558-3]])) (check-module-trees ~.types-union-print-distinct `mtre-558 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-558-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-558-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-558-3]]))
3553+ (weld (weld (check ~.types-union-print-distinct src-612 `tok-612 `tre-612) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-612 `typ-612 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-612-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-612-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-612-3]])) (check-module-trees ~.types-union-print-distinct `mtre-612 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-612-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-612-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-612-3]]))
32203554++ test-types-union-print-escape
3221− (weld (check ~.types-union-print-escape src-559 `tok-559 `tre-559) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-559 `typ-559))
3555+ (weld (check ~.types-union-print-escape src-613 `tok-613 `tre-613) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-613 `typ-613))
32223556++ test-types-union-print-local
3223− (weld (check ~.types-union-print-local src-560 `tok-560 `tre-560) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-560 `typ-560))
3557+ (weld (check ~.types-union-print-local src-614 `tok-614 `tre-614) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-614 `typ-614))
32243558++ test-types-union-print-nested
3225− (weld (check ~.types-union-print-nested src-561 `tok-561 `tre-561) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-561 `typ-561))
3559+ (weld (check ~.types-union-print-nested src-615 `tok-615 `tre-615) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-615 `typ-615))
32263560++ test-types-union-print-same-origin
3227− (weld (weld (check ~.types-union-print-same-origin src-562 `tok-562 `tre-562) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-562 `typ-562 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-562-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-562 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-562-1]]))
3561+ (weld (weld (check ~.types-union-print-same-origin src-616 `tok-616 `tre-616) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-616 `typ-616 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-616-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-616 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-616-1]]))
32283562++ test-types-union-print-transitive
3229− (weld (weld (check ~.types-union-print-transitive src-563 `tok-563 `tre-563) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-563 `typ-563 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-563-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-563-2]])) (check-module-trees ~.types-union-print-transitive `mtre-563 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-563-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-563-2]]))
3563+ (weld (weld (check ~.types-union-print-transitive src-617 `tok-617 `tre-617) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-617 `typ-617 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-617-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-617-2]])) (check-module-trees ~.types-union-print-transitive `mtre-617 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-617-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-617-2]]))
32303564++ test-types-union-singleton
3231− (weld (check ~.types-union-singleton src-564 `tok-564 `tre-564) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-564 `typ-564))
3565+ (weld (check ~.types-union-singleton src-618 `tok-618 `tre-618) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-618 `typ-618))
32323566++ test-types-union-tag-atoms
3233− (weld (check ~.types-union-tag-atoms src-565 `tok-565 `tre-565) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-565 `typ-565))
3567+ (weld (check ~.types-union-tag-atoms src-619 `tok-619 `tre-619) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-619 `typ-619))
32343568++ test-types-union-tags
3235− (weld (check ~.types-union-tags src-566 `tok-566 `tre-566) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-566 `typ-566))
3569+ (weld (check ~.types-union-tags src-620 `tok-620 `tre-620) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-620 `typ-620))
32363570++ test-types-union-unresolved
3237− (weld (check ~.types-union-unresolved src-567 `tok-567 `tre-567) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-567 `typ-567))
3571+ (weld (check ~.types-union-unresolved src-621 `tok-621 `tre-621) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-621 `typ-621))
32383572++ test-types-union-unresolved-flow
3239− (weld (check ~.types-union-unresolved-flow src-568 `tok-568 `tre-568) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-568 `typ-568))
3573+ (weld (check ~.types-union-unresolved-flow src-622 `tok-622 `tre-622) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-622 `typ-622))
32403574++ test-types-unit-construction
3241− (weld (check ~.types-unit-construction src-569 `tok-569 `tre-569) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-569 `typ-569 ~ ~ ~))
3575+ (weld (check ~.types-unit-construction src-623 `tok-623 `tre-623) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-623 `typ-623 ~ ~ ~))
32423576++ test-types-unit-context
3243− (weld (check ~.types-unit-context src-570 `tok-570 `tre-570) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-570 `typ-570 ~ ~ ~))
3577+ (weld (check ~.types-unit-context src-624 `tok-624 `tre-624) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-624 `typ-624 ~ ~ ~))
32443578++ test-types-unit-patterns
3245− (weld (check ~.types-unit-patterns src-571 `tok-571 `tre-571) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-571 `typ-571))
3579+ (weld (check ~.types-unit-patterns src-625 `tok-625 `tre-625) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-625 `typ-625))
32463580++ test-types-value-cycle-shadow
3247− (weld (check ~.types-value-cycle-shadow src-572 `tok-572 `tre-572) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-572 `typ-572 ~ ~ ~))
3581+ (weld (check ~.types-value-cycle-shadow src-626 `tok-626 `tre-626) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-626 `typ-626 ~ ~ ~))
32483582++ test-types-value-cycle-unsupported
3249− (weld (check ~.types-value-cycle-unsupported src-573 `tok-573 `tre-573) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-573 `typ-573 ~ ~ ~))
3583+ (weld (check ~.types-value-cycle-unsupported src-627 `tok-627 `tre-627) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-627 `typ-627 ~ ~ ~))
32503584++ test-types-value-cycles
3251− (weld (check ~.types-value-cycles src-574 `tok-574 `tre-574) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-574 `typ-574 ~ ~ ~))
3585+ (weld (check ~.types-value-cycles src-628 `tok-628 `tre-628) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-628 `typ-628 ~ ~ ~))
32523586::
32533587:: +check: run golden:jibb on a case and compare both outputs
32543588::
tests/type-import-diagnostic/nested.txt+1−1
@@ -7,5 +7,5 @@
77++ alias-use ^- alias !!
88++ first-unsupported ^- [a=* b=bad.foo] !!
99++ recursive-first ^- [a=recursive b=bad.foo] !!
10−++ shadow |= [a=@t a=bad.foo] a
10+++ shadow |= [a=@t [a=bad.foo b=@t]] a
1111++ first-invalid |= [a=bad.foo b=bad.foo] a
tests/type-import/expected.txt+10
@@ -127,3 +127,13 @@ recursive-list other-collection: ok
127127recursive-list malformed-reference: ok
128128recursive-list null-overlap: ok
129129recursive-list duplicate-faces: ok
130+named-recursive valid: ok
131+named-recursive wrong-module: ok
132+named-recursive wrong-name: ok
133+named-recursive no-reference: ok
134+named-recursive overlap: ok
135+named-recursive duplicate-faces: ok
136+named-recursive malformed: ok
137+named-recursive wrong-arity: ok
138+named-recursive bare-reference: ok
139+named-recursive non-fork: ok
tests/type-list-alias/expected.txtnew file+36
@@ -0,0 +1,36 @@
1+canonical
2+partial inference; module not checked
3+++ text: $-((list @t) (list @t))
4+++ ship: $-((list @p) (list @p))
5+++ wrong: list item does not fit its expected type
6+/ui/test.jibb:3:13: expected item has type @t
7+++ wrong ^- (alias @t) ~[~zod]
8+ ^
9+/ui/test.jibb:3:26: list item has type @p
10+++ wrong ^- (alias @t) ~[~zod]
11+ ^
12+++ shadow: local molds shadow a name
13+altered
14+partial inference; module not checked
15+++ text: sample mold is not supported by partial inference
16+++ ship: sample mold is not supported by partial inference
17+++ wrong: cast mold is not supported by partial inference
18+++ shadow: sample mold is not supported by partial inference
19+omitted
20+partial inference; module not checked
21+++ text: sample mold is not supported by partial inference
22+++ ship: sample mold is not supported by partial inference
23+++ wrong: cast mold is not supported by partial inference
24+++ shadow: sample mold is not supported by partial inference
25+duplicate
26+partial inference; module not checked
27+prelude interface is not supported
28+malformed
29+partial inference; module not checked
30+prelude source does not parse; module import inference unsupported
31+cyclic
32+partial inference; module not checked
33+++ text: sample mold is not supported by partial inference
34+++ ship: sample mold is not supported by partial inference
35+++ wrong: cast mold is not supported by partial inference
36+++ shadow: local molds shadow a name
tools/importer-test+1−1
@@ -34,4 +34,4 @@ if result.stdout != expected:
3434 result.stdout.decode().splitlines(keepends=True),
3535 fromfile='expected tree.txt', tofile='actual types'))
3636 sys.exit(1)
37−print('importer golden: 214 projections passed')
37+print('importer golden: 221 projections passed')
tools/type-hole-guards-testnew file+32
@@ -0,0 +1,32 @@
1+#!/usr/bin/env python3
2+"""Run the shared hole-defaulting and API guard 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+tests = (root / 'tests/lib/jibb-hole-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ real-prelude=@t prelude\n'
16+ '=/ real-internal=@t internal\n=/ suite\n' + tests +
17+ '\n=/ failures=(list tape) hole-guard-errors:suite\n^- @t\n'
18+ "?~ failures 'hole guards passed'\n"
19+ '(of-wain:format (turn failures crip))\n')
20+with tempfile.TemporaryDirectory(prefix='jibb-hole-guards-') as tmp:
21+ program = Path(tmp) / 'guards.hoon'
22+ program.write_text(expression)
23+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
24+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
25+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
26+ result = subprocess.run(command, stdout=subprocess.PIPE)
27+if result.returncode:
28+ sys.exit(result.returncode)
29+if result.stdout != b'hole guards passed\n':
30+ sys.stderr.buffer.write(result.stdout)
31+ sys.exit(1)
32+print('hole defaulting and API guards passed')
tools/type-list-alias-testnew file+33
@@ -0,0 +1,33 @@
1+#!/usr/bin/env python3
2+"""Compare source-backed list alias preparation 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+tests = (root / 'tests/lib/jibb-list-alias-guards.hoon').read_text()
16+tests = tests[tests.index('\n|%\n') + 1:]
17+expression = '=/ jibb .\n=/ expected=wain ~\n=/ suite\n' + tests + '\nlist-alias-output:suite\n'
18+with tempfile.TemporaryDirectory(prefix='jibb-list-alias-') as tmp:
19+ program = Path(tmp) / 'guards.hoon'
20+ program.write_text(expression)
21+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program)], stdout=subprocess.PIPE)
22+if result.returncode:
23+ sys.exit(result.returncode)
24+expected_path = root / 'tests/type-list-alias/expected.txt'
25+if args.update:
26+ expected_path.write_bytes(result.stdout)
27+ print('updated list alias guards golden')
28+ sys.exit(0)
29+expected = expected_path.read_bytes()
30+if result.stdout != expected:
31+ sys.stderr.writelines(difflib.unified_diff(expected.decode().splitlines(keepends=True), result.stdout.decode().splitlines(keepends=True), fromfile='expected.txt', tofile='actual'))
32+ sys.exit(1)
33+print('list alias guards golden passed')
tools/type-proj-guards-testnew file+32
@@ -0,0 +1,32 @@
1+#!/usr/bin/env python3
2+"""Run the shared proj lowering and API reservation guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+tests = (root / 'tests/lib/jibb-proj-guards.hoon').read_text()
14+tests = tests[tests.index('\n|%\n') + 1:]
15+expression = ('=/ jibb .\n=/ real-prelude=@t prelude\n'
16+ '=/ real-internal=@t internal\n=/ suite\n' + tests +
17+ '\n=/ failures=(list tape) proj-guard-errors:suite\n^- @t\n'
18+ "?~ failures 'proj guards passed'\n"
19+ '(of-wain:format (turn failures crip))\n')
20+with tempfile.TemporaryDirectory(prefix='jibb-proj-guards-') as tmp:
21+ program = Path(tmp) / 'guards.hoon'
22+ program.write_text(expression)
23+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
24+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
25+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
26+ result = subprocess.run(command, stdout=subprocess.PIPE)
27+if result.returncode:
28+ sys.exit(result.returncode)
29+if result.stdout != b'proj guards passed\n':
30+ sys.stderr.buffer.write(result.stdout)
31+ sys.exit(1)
32+print('proj lowering and API reservation guards passed')
tools/type-qath-guards-testnew file+31
@@ -0,0 +1,31 @@
1+#!/usr/bin/env python3
2+"""Run the shared qath fuel, face, and source-provenance guards under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+with tempfile.TemporaryDirectory(prefix='jibb-qath-guards-') as tmp:
14+ for kind in ('fuel', 'source'):
15+ tests = (root / f'tests/lib/jibb-qath-{kind}.hoon').read_text()
16+ tests = tests[tests.index('\n|%\n') + 1:]
17+ expression = ('=/ jibb .\n=/ real-internal=@t internal\n=/ suite\n' + tests +
18+ f'\n=/ failures=(list tape) qath-{kind}-errors:suite\n^- @t\n' +
19+ "?~ failures 'qath guards passed'\n" +
20+ '(of-wain:format (turn failures crip))\n')
21+ program = Path(tmp) / f'{kind}.hoon'
22+ program.write_text(expression)
23+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
24+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
25+ result = subprocess.run(command, stdout=subprocess.PIPE)
26+ if result.returncode:
27+ sys.exit(result.returncode)
28+ if result.stdout != b'qath guards passed\n':
29+ sys.stderr.buffer.write(result.stdout)
30+ sys.exit(1)
31+print('qath fuel, face, and source guards passed')