on master help sign in
438 files changed+16517−2371
since splitsnapshots
unifiedsplit
README.md+9−1 docs/README.md+2 docs/compiler.md+48−4 docs/development.md+52 docs/prelude-inventory.md+12−4 docs/spec/decisions.md+3−2 docs/spec/implementation-plan.md+1−1 docs/spec/overview.md+4−2 docs/status.md+94−9 jibb-dev/lib/jibb-import.hoon+181−6 jibb-dev/lib/jibb.hoon+3363−103 jibb-dev/lib/jibb/internal.jibb+2 jibb-dev/lib/jibb/prelude.jibb+169 my-app/ui/theme.jibb+1−1 tests/golden/doc-overview-02-theme/source.jibb+1−1 tests/golden/doc-overview-02-theme/tokens.txt+24−23 tests/golden/doc-overview-02-theme/tree.txt+9−8 tests/golden/module-import-cycle/source.jibb+1−1 tests/golden/module-import-cycle/tokens.txt+6−6 tests/golden/module-import-cycle/tree.txt+3−3 tests/golden/module-import-identity/source.jibb+1−1 tests/golden/module-import-identity/tokens.txt+5−5 tests/golden/module-import-identity/tree.txt+3−3 tests/golden/module-import-identity/types.txt+1−1 tests/golden/module-import-transitive/source.jibb+1−1 tests/golden/module-import-transitive/tokens.txt+6−6 tests/golden/module-import-transitive/tree.txt+3−3 tests/golden/module-import-transitive/types.txt+1−1 tests/golden/module-import-unused-invalid/source.jibb+1−1 tests/golden/module-import-unused-invalid/tokens.txt+6−6 tests/golden/module-import-unused-invalid/tree.txt+3−3 tests/golden/module-import-unused-invalid/types.txt+1−1 tests/golden/types-arithmetic-module/source.jibb+1−1 tests/golden/types-arithmetic-module/tokens.txt+8−8 tests/golden/types-arithmetic-module/tree.txt+5−5 tests/golden/types-arithmetic-module/types.txt+1−1 tests/golden/types-cell-branch-context/about.txt+4 tests/golden/types-cell-branch-context/modules.txt+1 tests/golden/types-cell-branch-context/source.jibb+37 tests/golden/types-cell-branch-context/tokens.txt+308 tests/golden/types-cell-branch-context/tree.txt+156 tests/golden/types-cell-branch-context/types.txt+11 tests/golden/types-cell-pattern-schemes/source.jibb+1−1 tests/golden/types-cell-pattern-schemes/tokens.txt+7−7 tests/golden/types-cell-pattern-schemes/tree.txt+3−3 tests/golden/types-cell-pattern-schemes/types.txt+1−1 tests/golden/types-generic-result-context/source.jibb+9−9 tests/golden/types-generic-result-context/tokens.txt+65−65 tests/golden/types-generic-result-context/tree.txt+24−24 tests/golden/types-generic-result-context/types.txt+6−6 tests/golden/types-generic-union-escaping/module-trees.txt+4−4 tests/golden/types-generic-union-escaping/modules/ui/mid.jibb+1−1 tests/golden/types-generic-union-escaping/source.jibb+1−1 tests/golden/types-generic-union-escaping/tokens.txt+1−1 tests/golden/types-generic-union-escaping/tree.txt+1−1 tests/golden/types-list-patterns/about.txt+1−1 tests/golden/types-list-patterns/types.txt+1−1 tests/golden/types-nested-shallow-preserve/source.jibb+15−15 tests/golden/types-nested-shallow-preserve/tokens.txt+107−107 tests/golden/types-nested-shallow-preserve/tree.txt+61−61 tests/golden/types-nested-shallow-preserve/types.txt+20−20 tests/golden/types-pair-context/source.jibb+14−14 tests/golden/types-pair-context/tokens.txt+71−71 tests/golden/types-pair-context/tree.txt+34−34 tests/golden/types-pair-context/types.txt+19−19 tests/golden/types-partial-aura-family/source.jibb+1−1 tests/golden/types-partial-aura-family/tokens.txt+8−8 tests/golden/types-partial-aura-family/tree.txt+4−4 tests/golden/types-partial-aura-family/types.txt+1−1 tests/golden/types-partial-locals/source.jibb+2−2 tests/golden/types-partial-locals/tokens.txt+10−10 tests/golden/types-partial-locals/tree.txt+5−5 tests/golden/types-partial-locals/types.txt+1−1 tests/golden/types-prelude-ask/source.jibb+1−1 tests/golden/types-prelude-ask/tokens.txt+25−25 tests/golden/types-prelude-ask/tree.txt+11−11 tests/golden/types-prelude-ask/types.txt+1−1 tests/golden/types-prelude-bond/source.jibb+1−1 tests/golden/types-prelude-bond/tokens.txt+12−12 tests/golden/types-prelude-bond/tree.txt+6−6 tests/golden/types-prelude-bond/types.txt+1−1 tests/golden/types-prelude-cmd/source.jibb+4−4 tests/golden/types-prelude-cmd/tokens.txt+30−30 tests/golden/types-prelude-cmd/tree.txt+13−13 tests/golden/types-prelude-cmd/types.txt+7−7 tests/golden/types-prelude-comparison/about.txt+4 tests/golden/types-prelude-comparison/modules.txt+1 tests/golden/types-prelude-comparison/source.jibb+18 tests/golden/types-prelude-comparison/tokens.txt+175 tests/golden/types-prelude-comparison/tree.txt+71 tests/golden/types-prelude-comparison/types.txt+31 tests/golden/types-prelude-lead-late/about.txt+4 tests/golden/types-prelude-lead-late/modules.txt+1 tests/golden/types-prelude-lead-late/source.jibb+10 tests/golden/types-prelude-lead-late/tokens.txt+151 tests/golden/types-prelude-lead-late/tree.txt+83 tests/golden/types-prelude-lead-late/types.txt+17 tests/golden/types-prelude-list-alias/source.jibb+1−1 tests/golden/types-prelude-list-alias/tokens.txt+9−9 tests/golden/types-prelude-list-alias/tree.txt+5−5 tests/golden/types-prelude-list-alias/types.txt+1−1 tests/golden/types-prelude-succ/about.txt+4 tests/golden/types-prelude-succ/modules.txt+1 tests/golden/types-prelude-succ/source.jibb+4 tests/golden/types-prelude-succ/tokens.txt+32 tests/golden/types-prelude-succ/tree.txt+15 tests/golden/types-prelude-succ/types.txt+11 tests/golden/types-prelude-text/about.txt+4 tests/golden/types-prelude-text/modules.txt+1 tests/golden/types-prelude-text/source.jibb+8 tests/golden/types-prelude-text/tokens.txt+66 tests/golden/types-prelude-text/tree.txt+36 tests/golden/types-prelude-text/types.txt+26 tests/golden/types-prelude-ui/about.txt+4 tests/golden/types-prelude-ui/modules.txt+1 tests/golden/types-prelude-ui/source.jibb+78 tests/golden/types-prelude-ui/tokens.txt+728 tests/golden/types-prelude-ui/tree.txt+300 tests/golden/types-prelude-ui/types.txt+85 tests/golden/types-prelude-zing/about.txt+4 tests/golden/types-prelude-zing/modules.txt+1 tests/golden/types-prelude-zing/source.jibb+6 tests/golden/types-prelude-zing/tokens.txt+92 tests/golden/types-prelude-zing/tree.txt+43 tests/golden/types-prelude-zing/types.txt+13 tests/golden/types-recursion-scc-import/source.jibb+1−1 tests/golden/types-recursion-scc-import/tokens.txt+7−7 tests/golden/types-recursion-scc-import/tree.txt+5−5 tests/golden/types-recursion-scc-import/types.txt+1−1 tests/golden/types-union-finite-context/source.jibb+1−1 tests/golden/types-union-finite-context/tokens.txt+3−3 tests/golden/types-union-finite-context/tree.txt+2−2 tests/golden/types-union-finite-limit/about.txt+1−1 tests/golden/types-union-finite-limit/types.txt+1−1 tests/golden/types-union-nonwing-subject/source.jibb+13−13 tests/golden/types-union-nonwing-subject/tokens.txt+54−54 tests/golden/types-union-nonwing-subject/tree.txt+26−26 tests/golden/types-union-nonwing-subject/types.txt+3−3 tests/golden/types-union-runtime-equality/about.txt+3 tests/golden/types-union-runtime-equality/source.jibb+16 tests/golden/types-union-runtime-equality/tokens.txt+96 tests/golden/types-union-runtime-equality/tree.txt+37 tests/golden/types-union-runtime-equality/types.txt+25 tests/golden/types-union-source-alias/about.txt+4 tests/golden/types-union-source-alias/source.jibb+18 tests/golden/types-union-source-alias/tokens.txt+119 tests/golden/types-union-source-alias/tree.txt+41 tests/golden/types-union-source-alias/types.txt+23 tests/golden/types-unit-context/source.jibb+3−3 tests/golden/types-unit-context/tokens.txt+33−33 tests/golden/types-unit-context/tree.txt+21−21 tests/golden/types-unit-context/types.txt+15−15 tests/importer/about.txt+3−1 tests/importer/tree.txt+3−3 tests/lib/jibb-bridge.hoon+5−2 tests/lib/jibb-cell-branch.hoon+53 tests/lib/jibb-deferred-context.hoon+83 tests/lib/jibb-deferred-prepared.hoon+114 tests/lib/jibb-deferred-resolver.hoon+113 tests/lib/jibb-deferred.hoon+244 tests/lib/jibb-direct-gate-source.hoon+3−3 tests/lib/jibb-empty.hoon+174 tests/lib/jibb-full-overlap-basic.hoon+143 tests/lib/jibb-full-overlap-graph.hoon+126 tests/lib/jibb-generic-construction.hoon+141 tests/lib/jibb-generic-pattern.hoon+165 tests/lib/jibb-generic-recursion.hoon+170 tests/lib/jibb-import-overlap.hoon+80 tests/lib/jibb-import-structural.hoon+82 tests/lib/jibb-list-alias-guards.hoon+1−1 tests/lib/jibb-page-main.hoon+168 tests/lib/jibb-program-init.hoon+134 tests/lib/jibb-program-main.hoon+141 tests/lib/jibb-program-update.hoon+139 tests/lib/jibb-program-watch.hoon+209 tests/lib/jibb-request-guards.hoon+2−2 tests/lib/jibb-store.hoon+261 tests/lib/jibb-theme.hoon+86 tests/lib/jibb-todo-full.hoon+157 tests/lib/jibb-union-alias-overlap.hoon+107 tests/lib/jibb-union-source.hoon+152 tests/lib/jibb.hoon+1350−1296 tests/type-cell-branch/about.txt+2 tests/type-cell-branch/bad.txt+3 tests/type-cell-branch/good.txt+3 tests/type-deferred-context/about.txt+3 tests/type-deferred-context/collision-early.txt+27 tests/type-deferred-context/collision-late.txt+28 tests/type-deferred-context/dangling.txt+16 tests/type-deferred-context/duplicate.txt+14 tests/type-deferred-context/missing.txt+14 tests/type-deferred-context/plain.txt+11 tests/type-deferred-context/report.txt+15 tests/type-deferred-context/rich.txt+27 tests/type-deferred-context/simple.txt+10 tests/type-deferred-context/wrong.txt+14 tests/type-deferred-prepared/expected-control.txt+7 tests/type-deferred-prepared/expected-tuple-only.txt+4 tests/type-deferred-prepared/expected.txt+8 tests/type-deferred-prepared/good.txt+9 tests/type-deferred-prepared/imported.txt+11 tests/type-deferred-prepared/main.txt+10 tests/type-deferred-prepared/mold-collision.txt+9 tests/type-deferred-prepared/no-final-cast.txt+8 tests/type-deferred-prepared/no-prelude.txt+9 tests/type-deferred-prepared/tuple-only.txt+3 tests/type-deferred-prepared/unrelated-tag.txt+11 tests/type-deferred-prepared/wrong-draft.txt+9 tests/type-deferred-prepared/wrong-unit.txt+9 tests/type-deferred-resolver/about.txt+5 tests/type-deferred-resolver/conflict.txt+12 tests/type-deferred-resolver/duplicate.txt+12 tests/type-deferred-resolver/expected.txt+42 tests/type-deferred-resolver/face.txt+6 tests/type-deferred-resolver/good.txt+11 tests/type-deferred-resolver/hole.txt+12 tests/type-deferred-resolver/missing.txt+10 tests/type-deferred-resolver/stability-early.txt+6 tests/type-deferred-resolver/stability-late.txt+6 tests/type-deferred-resolver/stability-output-early.txt+9 tests/type-deferred-resolver/stability-output-late.txt+9 tests/type-deferred-resolver/stability-simple-early.txt+6 tests/type-deferred-resolver/stability-simple-late.txt+6 tests/type-deferred-resolver/stability-slot-early.txt+9 tests/type-deferred-resolver/stability-slot-late.txt+9 tests/type-deferred-resolver/store.txt+12 tests/type-deferred/about.txt+3 tests/type-deferred/conflict-src.txt+12 tests/type-deferred/duplicate-src.txt+12 tests/type-deferred/expected.txt+38 tests/type-deferred/face-bad-src.txt+6 tests/type-deferred/face-good-src.txt+6 tests/type-deferred/hole-src.txt+12 tests/type-deferred/local-src.txt+8 tests/type-deferred/missing-src.txt+10 tests/type-deferred/mold-hole-src.txt+12 tests/type-deferred/mutual-src.txt+7 tests/type-deferred/nested-src.txt+7 tests/type-deferred/principal-src.txt+11 tests/type-direct-gate/expected.txt+11−11 tests/type-direct-gate/source.txt+3−3 tests/type-empty/about.txt+3 tests/type-empty/dead.txt+7 tests/type-empty/expected.txt+59 tests/type-empty/face-source.txt+2 tests/type-empty/good.txt+11 tests/type-empty/late-cap.txt+16 tests/type-empty/list-dead.txt+4 tests/type-empty/list-live.txt+3 tests/type-empty/list-open.txt+3 tests/type-empty/missing.txt+6 tests/type-empty/overlap.txt+3 tests/type-empty/standard-good.txt+11 tests/type-empty/unit-dead.txt+4 tests/type-full-overlap/about.txt+3 tests/type-full-overlap/child.txt+4 tests/type-full-overlap/distinct.txt+5 tests/type-full-overlap/duplicate-generic.txt+4 tests/type-full-overlap/duplicate.txt+5 tests/type-full-overlap/expected-basic.txt+16 tests/type-full-overlap/expected-graph.txt+8 tests/type-full-overlap/generic.txt+4 tests/type-full-overlap/invalid.txt+4 tests/type-full-overlap/parent.txt+5 tests/type-full-overlap/precedence.txt+5 tests/type-full-overlap/same.txt+4 tests/type-full-overlap/unsupported.txt+4 tests/type-full-overlap/zero.txt+4 tests/type-generic-construction/about.txt+9 tests/type-generic-construction/alias-client.txt+12 tests/type-generic-construction/alias.txt+3 tests/type-generic-construction/client.txt+24 tests/type-generic-construction/expected.txt+65 tests/type-generic-construction/no-event-client.txt+8 tests/type-generic-construction/owner-negative.txt+10 tests/type-generic-construction/owner-positive.txt+9 tests/type-generic-construction/sibling-values.txt+4 tests/type-generic-construction/tree-no-event.txt+4 tests/type-generic-construction/tree.txt+6 tests/type-generic-pattern/about.txt+10 tests/type-generic-pattern/client.txt+166 tests/type-generic-pattern/expected.txt+91 tests/type-generic-pattern/no-event.txt+17 tests/type-generic-pattern/owner-bad.txt+22 tests/type-generic-pattern/owner.txt+18 tests/type-generic-pattern/poly-values.txt+2 tests/type-generic-pattern/values.txt+18 tests/type-generic-recursion/about.txt+14 tests/type-generic-recursion/alias.txt+3 tests/type-generic-recursion/bad-constructor.txt+8 tests/type-generic-recursion/bad-match.txt+10 tests/type-generic-recursion/bad-mold.txt+8 tests/type-generic-recursion/bad-parameter.txt+6 tests/type-generic-recursion/chain.txt+3 tests/type-generic-recursion/client.txt+11 tests/type-generic-recursion/expected.txt+35 tests/type-generic-recursion/list-shadow.txt+4 tests/type-generic-recursion/local-distinct.txt+11 tests/type-generic-recursion/local-only.txt+11 tests/type-generic-recursion/local-shadow.txt+11 tests/type-generic-recursion/tree-changed.txt+6 tests/type-generic-recursion/tree.txt+6 tests/type-import-overlap/about.txt+24 tests/type-import-overlap/expected.txt+26 tests/type-import-overlap/source.txt+4 tests/type-import-overlap/sur.txt+17 tests/type-import-structural/about.txt+14 tests/type-import-structural/expected.txt+41 tests/type-import-structural/source.txt+5 tests/type-import-structural/sur.txt+12 tests/type-import/about.txt+10−2 tests/type-import/expected.txt+10−1 tests/type-import/source.txt+5 tests/type-import/sur.txt+3 tests/type-list-alias/expected.txt+4−4 tests/type-page-main/about.txt+3 tests/type-page-main/arbitrary-main.txt+1 tests/type-page-main/blog-api.txt+5 tests/type-page-main/blog-index.txt+9 tests/type-page-main/blog-sur.txt+6 tests/type-page-main/card.txt+5 tests/type-page-main/ctor-page.txt+10 tests/type-page-main/diff-load.txt+11 tests/type-page-main/hand-built-load.txt+14 tests/type-page-main/index.txt+10 tests/type-page-main/indirect-load.txt+11 tests/type-page-main/page-alias.txt+11 tests/type-page-main/posts-mark.txt+6 tests/type-page-main/pure-load.txt+10 tests/type-page-main/static.txt+7 tests/type-page-main/todo-api.txt+13 tests/type-page-main/todo-island.txt+40 tests/type-page-main/typed-load.txt+8 tests/type-page-main/wrong-static.txt+1 tests/type-program-main/about.txt+1 tests/type-program-main/alias-main.txt+11 tests/type-program-main/arbitrary-main.txt+10 tests/type-program-main/consumer.txt+2 tests/type-program-main/gate-data.txt+10 tests/type-program-main/gate-model.txt+11 tests/type-program-main/initializer-consumer.txt+2 tests/type-program-main/initializer-earlier.txt+10 tests/type-program-main/initializer-error.txt+10 tests/type-program-main/initializer-generic.txt+10 tests/type-program-main/initializer-message.txt+13 tests/type-program-main/initializer-missing.txt+9 tests/type-program-main/initializer-model.txt+11 tests/type-program-main/initializer-no-main.txt+10 tests/type-program-main/initializer-subs.txt+10 tests/type-program-main/initializer-tag.txt+13 tests/type-program-main/initializer-unfaced.txt+10 tests/type-program-main/initializer.txt+12 tests/type-program-main/mismatched-model.txt+10 tests/type-program-main/nonempty-subs.txt+12 tests/type-program-main/open-message.txt+7 tests/type-program-main/source.txt+12 tests/type-program-update/consumer.txt+2 tests/type-program-update/malformed-sample.txt+9 tests/type-program-update/missing-list.txt+15 tests/type-program-update/non-main.txt+14 tests/type-program-update/source.txt+15 tests/type-program-update/three-slot-sample.txt+9 tests/type-program-update/unrelated-tag.txt+16 tests/type-program-update/wrong-message.txt+10 tests/type-program-update/wrong-model.txt+12 tests/type-program-update/wrong-result.txt+12 tests/type-program-watch/about.txt+1 tests/type-store/basket.txt+32 tests/type-store/cart.txt+13 tests/type-theme/dark-absent.txt+8 tests/type-theme/missing-field.txt+7 tests/type-theme/source.txt+8 tests/type-theme/wrong-dark.txt+8 tests/type-theme/wrong-font.txt+8 tests/type-theme/wrong-nested-aura.txt+8 tests/type-todo-full/about.txt+3 tests/type-todo-full/alias.txt+42 tests/type-todo-full/ambiguous-mapper.txt+41 tests/type-todo-full/expected.txt+2 tests/type-todo-full/non-gate-view.txt+33 tests/type-todo-full/open-key.txt+40 tests/type-todo-full/wrong-message.txt+40 tests/type-todo-full/wrong-model.txt+40 tests/type-todo-full/wrong-result.txt+40 tests/type-todo-full/wrong-watch.txt+40 tests/type-todo-partial/expected.txt+2−2 tests/type-union-alias-overlap/duplicate.txt+5 tests/type-union-alias-overlap/expected.txt+25 tests/type-union-alias-overlap/flag-source.txt+7 tests/type-union-alias-overlap/multi.txt+5 tests/type-union-alias-overlap/negative.txt+16 tests/type-union-alias-overlap/nonzero.txt+4 tests/type-union-alias-overlap/opaque.txt+4 tests/type-union-alias-overlap/positive.txt+8 tests/type-union-alias-overlap/qualified.txt+5 tests/type-union-alias-overlap/wrong.txt+5 tests/type-union-source/direct-source.txt+3 tests/type-union-source/duplicate-params.txt+4 tests/type-union-source/duplicate.txt+5 tests/type-union-source/expected.txt+36 tests/type-union-source/free-source.txt+4 tests/type-union-source/good.txt+9 tests/type-union-source/hidden-ref.txt+5 tests/type-union-source/late-source.txt+4 tests/type-union-source/mixed-source.txt+8 tests/type-union-source/nested.txt+4 tests/type-union-source/qualified.txt+4 tests/type-union-source/same.txt+5 tests/type-union-source/shadow-source.txt+7 tests/type-union-source/wide-source.txt+4 tests/type-union-source/wrong.txt+5 tests/type-union-source/zero.txt+5 tools/testdata/lead-late-hoon-reference.hoon+24 tools/testdata/ship-selftest+119−1 tools/testdata/succ-hoon-reference.hoon+9 tools/testdata/zing-hoon-reference.hoon+17 tools/type-cell-branch-test+43 tools/type-deferred-context-test+31 tools/type-deferred-prepared-test+49 tools/type-deferred-resolver-test+33 tools/type-deferred-test+32 tools/type-empty-test+55 tools/type-full-overlap-test+49 tools/type-generic-construction-test+49 tools/type-generic-pattern-test+52 tools/type-generic-recursion-test+61 tools/type-import-overlap-test+33 tools/type-import-structural-test+36 tools/type-page-main-test+86 tools/type-program-init-test+49 tools/type-program-main-test+46 tools/type-program-update-test+46 tools/type-program-watch-test+48 tools/type-store-test+41 tools/type-theme-test+44 tools/type-todo-full-test+98 tools/type-union-alias-overlap-test+52 tools/type-union-source-test+55
README.md+9−1
@@ -42,7 +42,15 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
4242tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
4343```
4444
45−`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-tlon-test`, `tools/type-mark-test`, `tools/type-poke-test` and `tools/type-api-paths-test` check importer/checker, prelude and partial API path analysis boundaries under eval; the ship suite runs the same fixtures.
45+`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-import-overlap-test`, `tools/type-import-structural-test`, `tools/type-union-source-test`, `tools/type-union-alias-overlap-test`, `tools/type-full-overlap-test`, `tools/type-generic-recursion-test`, `tools/type-generic-construction-test`, `tools/type-generic-pattern-test`, `tools/type-deferred-test`, `tools/type-deferred-prepared-test`, `tools/type-deferred-resolver-test`, `tools/type-deferred-context-test`, `tools/type-empty-test`, `tools/type-cell-branch-test`, `tools/type-tlon-test`, `tools/type-mark-test`, `tools/type-poke-test` and `tools/type-api-paths-test` check importer/checker, prelude and partial API path analysis boundaries under eval; the ship suite runs the same fixtures.
46+
47+The focused `tools/type-page-main-test` fully checks the byte-identical static about page and direct blog/todo data pages through the real readers, with exact main types, downstream imports and fail-closed syntax/evidence controls; the same fixture runs on the fake ship. It does not render pages or execute requests.
48+
49+The focused `tools/type-theme-test` fully checks the byte-identical real theme against the exact prelude mold, including its exported type, structural downstream import, dark absent/present forms and malformed-field negatives under eval with a shared fake-ship arm. It does not check contrast, render themes or route fonts.
50+
51+The focused `tools/type-store-test` checks the byte-identical cart store and basket through detailed and legacy inference, exact main and derived schemes, structural imports, direct store watch evidence and rejection controls under eval with a shared fake-ship arm. It does not lower or execute stores, support multi-action declarations, or permit store requests in page loads.
52+
53+The focused `tools/type-program-main-test` checks the narrow closed, subscription-free `main` slice and its shared fake-ship fixture. `tools/type-program-init-test` checks transactional initializer recovery for a synthetic direct program, including exact exported and imported types and rejection boundaries. `tools/type-program-update-test` checks derived result context for an unannotated two-slot update, including a union/boolean branch, downstream types and fail-closed controls under eval with a shared fake-ship arm. `tools/type-program-watch-test` uses the real todo readers with synthetic program components to check one direct request value against merged API-source evidence and reject hand-built, indirect, parameterized, diff and ambiguous subscriptions. These are static checks only: they do not run an island or establish runtime watching. `tools/type-todo-full-test` additionally checks the byte-identical todo island through both full-module APIs, verifies its exact closed `main` type and structural downstream import, and runs rejection controls.
4654
4755### The doc's examples
4856
docs/README.md+2
@@ -2,6 +2,8 @@
22
33Jibb's spec is a design doc by @iko, [Jibb — an Elm-architecture UI language for Urbit](https://claude.ai/artifact/DMBr48qzi5z8hcwn2ccPBv), and its repository copy in `spec/`. The repository copy records decisions made on 2026-10-30, including dropping `$?`, adding `%$` as a term literal and pattern, making `@` an unrestricted atom, treating `?` as two atoms for union disjointness, and the milestone 2 type and prelude decisions; the Claude document still needs to be synchronized. This folder also holds where the build stands, what is still open, and how to work on the code.
44
5+The current full-module checker also has a narrow static/data-page slice, documented in [compiler.md](compiler.md) and [status.md](status.md). Its shared eval/ship fixture checks the real about, blog index and todo index sources without claiming rendering or request execution. The shared theme fixture likewise full-checks the byte-identical real theme and its exact type without implementing theme behavior.
6+
57| File | What it holds |
68| --- | --- |
79| [spec/](spec/) | The doc's tabs, as Markdown |
docs/compiler.md+48−4
@@ -56,13 +56,17 @@ The core is split into chapters, `+| %name`, in this order:
5656| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
5757| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
5858
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a cell pattern of two or more binders, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals, even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. Some proven non-gate value cycles are diagnosed; other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. Literal heads compare by their runtime noun, so `|=%$` can construct an explicit null-, loobean-zero- or term-zero-headed case. Equal heads with distinct payloads can be selected when exactly one payload fit is proven; unknown or ambiguous alternatives remain unsupported. Unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. A generic union declared directly inside a body and recursive molds remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample while retaining its origin, generic arguments and faces. Unnamed, pending-tag, recursive, unknown-atom and variable-bound union origins remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types and the source-bound gate-sample proof below. For a single recursive gate outside a group, the reporting path repeats inference rather than instantiating its generalized interface inside its own body; a group report uses its stored schemes. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
59+The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a cell pattern of two or more binders, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals, even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. Some proven non-gate value cycles are diagnosed; other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. Literal heads compare by their runtime noun, so `|=%$` can construct an explicit null-, loobean-zero- or term-zero-headed case. Equal heads with distinct payloads can be selected when exactly one payload fit is proven; unknown or ambiguous alternatives remain unsupported. Unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. Generic unions declared directly inside a body and recursive molds outside the source-proven slices described below remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample while retaining its origin, generic arguments and faces. Unnamed, pending-tag, recursive, unknown-atom and variable-bound union origins remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types and the source-bound gate-sample proof below. For a single recursive gate outside a group, the reporting path repeats inference rather than instantiating its generalized interface inside its own body; a group report uses its stored schemes. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
6060
6161A direct unshadowed prelude call can use checked source layouts when a positional argument is a directly named, already inferred root gate. For two-slot function samples, the checker can match a named update against an unnamed generic gate sample without confusing a binder face with a nested record face. Both explicitly named slots must agree; source boundaries are evidence for this fit, not a call-arity rule. The source gate and prelude annotation must be available from their checked bindings. Local or dynamic gates, aliases without direct evidence, recursive or SCC placeholder bodies, other sample shapes and unresolved call-sample variables remain unsupported by this proof. Ordinary inference remains the fallback.
6262
6363The checker retains a per-analysis index of finalized root gates and a prelude source table bound to the entire trusted prepared interface. A dependency screen avoids building the table when the root cannot use it; changing the interface invalidates it. The host remains responsible for supplying a prepared interface paired with its source. The matcher checks each slot and product in both directions with a shared substitution. Before returning its tentative proof it requires both complete call samples to normalize to closed, tag-free types, then repeats every slot check and requires the substitution and fresh-ID counter to remain unchanged. This keeps later argument or enclosing constraints from invalidating an earlier face check, and preserves pending constraints, capital checks and projection evidence. These scans and the bounded second proof add work; they do not establish a global linear-time bound.
6464
65−In single sequential eval runs including startup, 2,000 ordinary gates used 70.20 seconds of user CPU at baseline and 70.64 seconds with the cached source table. Fifty unsupported eligible scalar-slot calls used 24.75 and 25.71 seconds, while fifty function-slot failures used 24.15 and 25.36 seconds. Fifty successful calls took 26.56 seconds before the final stability replay and 26.99 seconds with it. These are synthetic measurements, not production performance limits.
65+Before the empty-capital optimization below, single sequential eval runs including startup showed that 2,000 ordinary gates used 70.20 seconds of user CPU at baseline and 70.64 seconds with the cached source table. Fifty unsupported eligible scalar-slot calls used 24.75 and 25.71 seconds, while fifty function-slot failures used 24.15 and 25.36 seconds. Fifty successful calls took 26.56 seconds before the final stability replay and 26.99 seconds with it. These are synthetic measurements, not production performance limits.
66+
67+Restricted-number promotion only applies to written capital variables. If none are present, it returns immediately instead of traversing the environment. In one startup-inclusive pair of runs on 2,000 independent gates, output was byte-identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds while other checks were running. This does not establish a bound for dependent modules or a complete-checker benchmark.
68+
69+A bounded source proof can also establish distinct literal heads when a union case is a one-hop application of a uniquely resolved local generic mold. It compares literal runtime nouns and checks the original mold normally before publishing an interface. The same source proof improves the partial report, which still says the mold is not checked. The new proof declines nested or qualified applications, opaque references, recursive-index states, holes and deferred obligations; other valid unions can remain unsupported. A 256-node source budget and a separate 256-entry inherited-state budget apply per attempt. They do not bound the existing pairwise union pass, parsing, atom or name sizes, or downstream checking. Prepared interfaces and inference state remain trusted inputs. `tools/type-union-source-test` and the shared ship guard exercise source resolution, reporting, rollback and these bounds. A separate positive witness can identify overlap in two-field, literal-headed cases when a unique one-hop local, one-parameter generic alias is applied to a concrete primitive payload. It compares the literal noun values and proves the payloads have a shared noun, so an empty or unknown payload is not a witness. The partial report identifies both original case sites. `infer-jibb-file-detailed` returns structured overlap evidence for the first failed mold, including the originating path, exact source, mold name and both case spans. Ordinary Jibb imports preserve a child’s evidence through source and cache checks; the legacy `infer-jibb-file` API remains a text-result adapter and renders both excerpts. Specialized API and prepared-prelude paths retain their existing generic or text-only error boundaries. This witness uses a shared 256-node source/pair budget per attempt; generic-wrapper parameter validation has a separate 256-entry cap. An unsupported earlier case may hide a later overlap. Existing pairwise union analysis, parsing, atom and name sizes, source-excerpt rendering, and downstream checking remain outside these budgets. `tools/type-union-alias-overlap-test` checks the source proof and partial report; `tools/type-full-overlap-test` checks the detailed and legacy full-module paths, source attribution and cache behavior.
6670
6771A single-arm cell pattern can bind two or more positions, with its last binder capturing the remaining tail. Duplicate and shadowed names are rejected. A definite non-cell spine fails; an intermediate union or collection that might contain a cell remains unsupported. For a known non-union cell, a separate one-arm rule also accepts structured patterns, including nested literal and wildcard positions, when the existing coverage proof establishes the whole pattern. It binds payloads with their original types and checks result context; unknown, partially covered, union or recursive spines stay unsupported.
6872
@@ -86,17 +90,25 @@ A backtick constructs a unit when the supplied prelude has the validated standar
8690
8791A 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.
8892
93+The checked inference fragment represents the empty mold `!!` explicitly. A cell with a proven-empty field is empty, while a gate returning `!!` and the empty values of `(list !!)` and `(unit !!)` remain inhabited. Supported union matches discard proven-empty cases, reject unreachable list or unit payload arms, and require a proof of reachability for fixed opaque cases. A written capital may have an inhabited instance; the existing definition-boundary checks still reject forcing it to a concrete empty type. A directly known standard `(list !!)` permits a single null arm, including in a result context. Unknown and opaque types, other one-arm list subjects, and proofs exceeding their budgets fail closed. Emptiness checks use up to 256 type-node visits per fit or list/unit reachability proof and 4,096 visits when filtering union cases. These bounds do not cover substitution walking, parsing, normalization, source lookup or repeated attempts. This is a supported checking slice, not a proof of arbitrary recursive molds or runtime execution.
94+
8995A 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.
9096
9197A 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.
9298
9399The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also recognizes a direct ordered-map call with two simple named mold operands, as in Tlon `notes.log`, after validating provenance and operand source; revisiting the same map hold fails closed. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. For a mark whose sample is exactly a named arm of its single Ford-imported `/sur` core, it can recover a source-proved nonrecursive union, including source-location wrappers around fields; recursive or unverified fallback results remain unsupported. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, including bare `~` fields, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. The real Tlon `notes.u-note` exercises its `[%deleted ~]` case. A bounded fallback also recovers one level of local named tagged unions inside such a union, including Tlon `notes.u-notebook` and `notes.u-notes`. Source-proved tagged unions can also be wrapped in Hoon `$~` defaults, including a downstream union using Tlon `epic.saga`; the selected source and projected branches still undergo the same provenance and disjointness checks. The tagged-source helper peels up to four consecutive default wrappers, while default wrappers encountered inside dependency proofs consume the existing semantic-node budget. A source-proved nested self-recursive union retains its named owner, including Tlon `notes.import-node`; deeper, mutually recursive or unproven cases stay unsupported. The nested source proof has a 256-visit semantic-node budget, and source-location wrapper peeling is limited to four per node; Hoon evaluation and source scans are not metered. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, Hoon's `%n` zero singleton as Jibb `~`, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/type-tlon-test` and its ship counterpart exercise four real Tlon presence unions and a field read through the source-aware reader and partial checker. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
94100
101+An import-free Jibb library can export an opaque single-parameter recursive identity when its source has exactly two distinct term-tagged cases: a text leaf and a node containing `(list (name M))`, optionally with one `$-(@t M)` event field. A module-local index records the exact parsed source, defining path and prepared prelude interface; it is shared across that module's inference passes, and its canonical `list` must be source-backed. The normal resolver publishes an interface only after all ordinary mold and value checks succeed. Same-origin aliases retain the defining identity and independently instantiate type arguments; distinct origins remain unsupported. The opaque identity is conservatively treated as gate-bearing for numeric defaulting, and gate-freedom remains unknown. Explicit literal-headed construction uses a source-proven one-layer view: the event result receives the existing type argument and recursive children keep the defining identity. It consumes the existing shared 256-step recursive inference budget, and a per-view 4,096-visit guard bounds the new face and substitution scan; longer scans decline. These bounds do not cover parsing, existing inference, atom sizes or repeated attempts. One startup-inclusive, shared-load comparison of 100 valid and 100 invalid source definitions took 29.67 s wall / 25.14 s user CPU before this slice and 33.47 s / 26.99 s with it; the former declined all 200 while the latter inferred the valid definitions. These single runs are not a production benchmark. Matches over explicit source tags, flat binder or wildcard fields, and nonbinding catch-alls use that same one-layer view and existing binder, coverage and branch checks. Up to 128 arms are screened per attempt; longer matches decline. A single-arm match on a direct in-scope wing can report its missing case, and a contextual one-arm call subject can use a nonbinding catch-all. Recursive children retain their nominal type and arguments. Subject recognition and view validation can each scan substitutions, and the scan cap applies separately to each attempt. In one separate startup-inclusive comparison of 100 valid and 100 invalid source matches, the construction-only checker took 30.18 s wall / 29.31 s user CPU and declined all 200, while the pattern slice took 28.28 s / 27.69 s and inferred or diagnosed them. These single shared-load figures are not production benchmarks. General structural fits, whole-case binders, nested recursive patterns, uncontextualized single-arm call subjects, recursive source with imports and local recursive molds remain unsupported; the test tree does not prescribe the eventual `element` representation. Caller-supplied detached interfaces and caches retain the existing trusted-input contract.
102+
95103Self-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.
96104
97105The 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.
98106
99−Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` aura and core evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the opt-in `+golden-types-with-reader-diagnostics` accepts unchanged structured reader results and reports definite aura or core errors at their imported mold use sites, when the import and supplied input are unique. Ordered replay covers direct and nested cell samples, record and function casts, and non-generic same-module aliases; it stops at an unsupported prefix, cycle or shadowing failure. Union molds, generic applications, transitive modules and unsupported reader outcomes still report generic limitations. Replay repeats inference and may add work; this entry point remains partial. Existing checker entry points continue treating failed imports as unsupported. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
107+Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The opt-in `+read-named-diagnostic` and `+read-mark-diagnostic` preserve successful graphs and distinguish definite `%invalid` evidence emitted directly by the reader from `%unsupported` failures. Other failures, including unverified union disjointness and vase recognition based only on a name, remain unsupported. These entry points revalidate and re-walk failed types; the opt-in `+golden-types-with-reader-diagnostics` accepts unchanged structured reader results and reports definite aura, core or proven union-overlap errors at their imported mold use sites, when the import and supplied input are unique. Ordered replay covers direct and nested cell samples, record and function casts, and non-generic same-module aliases; it stops at an unsupported prefix, cycle or shadowing failure. Union molds, generic applications, transitive modules and unsupported reader outcomes still report generic limitations. Replay repeats inference and may add work; this entry point remains partial. Existing checker entry points continue treating failed imports as unsupported. It also fails closed on repeated field faces along an imported record spine, including recursive roots; the diagnostic remains generic. Hoon type graphs can erase unfaced nested-cell boundaries, so the check may conservatively reject a valid source with equal names in distinct erased scopes. Faced nested records and union alternatives keep separate scopes.
108+
109+For supported source-aware Hoon `$?` unions, the reader can prove a definite overlap by independently evaluating and projecting the original cases, verifying each projected head against its source tag, and finding a shared runtime noun in a pair. Its positive witness traverses faces, named nodes, forks, cells, supported atom forms and `*`; `!!`, opaque references, applications and unproved aura intersections cannot themselves establish a witness. It compares singleton noun values independently of aura, and requires inhabited positions throughout a cell. Unknown or exhausted proof remains unsupported, while existing disjoint-source recovery still handles proven distinct cases. The source screen admits at most 128 cases and 4,096 raw noun nodes; dependency checking and the pair/type witness each have their own 4,096-node budget. Hoon evaluation, projected-graph validation, chapter lookup, atom byte sizes and other type-graph walks remain outside those budgets. The error points at the Jibb use; source case locations are unavailable. This is a partial named-reader analysis, not general imported-union checking or a mark-reader overlap diagnostic.
110+
111+In single startup-inclusive runs of eight Hoon reads, a benign three-case union used 37.78 seconds of user CPU with the earlier narrow witness and 39.99 seconds with the structural witness; a repeated-head union used 39.84 and 40.97 seconds. Other checks ran concurrently, so these measurements do not establish a production bound.
100112
101113The 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.
102114
@@ -116,14 +128,32 @@ A two-item tuple with an explicit term, null or loobean head can receive payload
116128
117129`+gate-free-type` is a separate three-way proof over normalized checker types: it reports a gate-free result, a gate-bearing witness with its field path, or unknown. It tracks conservative inhabitance before reporting a gate in a cell, spends one shared node budget, and treats opaque recursion, open variables, unknown collection forms and `*` conservatively. Source-proven `qath` and the recognized list/unit representations have dedicated proofs. `+gate-free-mold-source` parses and resolves one named mold with a fresh active-root graph, retaining the complete prepared prelude, source bundle, trusted reader inputs, dependency cache and inferred mold. It caps classification at 256 nodes; parsing, import resolution and type inference are not covered by that cap. The host must canonicalize paths and bind trusted sources and reader results to their versions. API, store and private roots decline; other definitions and unused imported Hoon bindings are not fully checked. This is mold analysis, not a module, kind, island, watchability or runtime check, and it does not infer general gate-free constraints.
118130
131+A full ordinary module may export a narrow checked program `main` only as a direct, unqualified `(program init update view subs)` call with four simple wing arguments, modulo transparent grouping. The canonical prepared prelude must supply both the `program` value and mold. The ordinary source-backed program fit and all normal mold, value and request-graph checks complete first. The inferred `main` must be closed and invariantly match an instantiated `program` mold from that prelude. The initializer must have a closed gate scheme; its data and model contain no open variables and share the existing 256-node gate-free budget, with `%yes` required for both. The named subscription gate may syntactically return null through transparent casts, groups and definition-free bodies. Alternatively, after a successful request-graph merge, it may return one singleton list containing an unfaced `[%watch request]` pair whose request is a direct `case.face` call with one direct constructor callback. The face must resolve to an imported interface whose member has the exact plain derived-request scheme. Exactly one merged request evidence must match its API path and case, agree with the declaration's inner name, and appear in that interface's own graph; the interface source must equal the evidence's API source. The declaration must have no scry, diffs or path parameters. Pure or hand-built requests, helpers, aliases, re-exports, typed paths, folds, multiple subscriptions and missing or ambiguous evidence fail closed. Arbitrary or aliased mains, API/store kinds, and gates or unknowns in data/model also fail closed. This retains source and graph evidence and permits ordinary downstream imports; it neither executes the program nor implements runtime watching.
132+
133+The same post-inference, post-request-graph kind boundary accepts a static `main` by instantiating its ordinary scheme, fitting it to canonical `(element !!)`, requiring the specialized result closed, and publishing that closed canonical scheme. Thus `main view` works when `view` is generic only in its element message. A data page must instead be a direct `(page load view)` call with simple wing arguments and a closed main type invariant against the instantiated canonical `page` mold. Its named load must be a direct gate whose transparent body is exactly `case.face reply`, with a simple wing or direct constructor reply. Page loads and direct program watches share the exact plain derived-member/request-evidence check: unique evidence in the selected interface's own graph, matching API source and inner case name, no typed path segments, diffs or scry. Page aliases, indirect or hand-built/pure/unknown requests, other main types and store paths fail closed. These are interface checks only, not rendering or runtime request claims.
134+
135+A store `main` is recognized only as a direct, unqualified `(store init update)` call with two simple wing arguments, modulo grouping, independently of its directory. Its module must declare exactly one ordinary `state` mold and one `+$ poke` whose body is one unqualified reference to a local ordinary action mold. The declaration is removed before ordinary mold/value inference and is not exported. `+store-main-closed` checks the canonical closed store main, exact init/state equality, and an invariant `$-([action state] state)` update after erasing only the two outer binder faces. It deliberately performs no gate-free-state check. The direct form can recover a missing main from checked components; aliases and hand-built records cannot.
136+
137+The store interface adds a derived `$-(action poke)` constructor and a generic `$-($-(state M) (ask M))` state request after validating the exact internal `poke` and `ask` representations. Derived names must not collide with values, imports or other derived names. Store request certificates are distinct from API certificates and retain the exact store path, source, state and action identities across graph merges. `+derived-store-request-member` requires the selected interface's unique state member and action constructor to match freshly derived canonical schemes and the same certificate to occur in both interface and consumer graphs. Store state is watchable by definition only after those checks; page loads continue to accept API evidence alone. Multi-action declarations, lowering and execution are outside this slice.
138+
139+When only that program's initializer and `main` are unresolved, a bounded transactional retry can derive the initializer's expected gate from the resolved update, view and subscription components. It instantiates all schemes above the greatest variable ID in the module and prelude, reuses the source-backed positional fit and stable replay, and leaves only the initializer's data variable open. The named initializer must be a direct gate whose transparent body is a tuple ending in null. Its own sample fixes data; ordinary inference, product and whole-gate fits, pending-tag and finalization checks, and a fresh ordinary `main` inference must all succeed before the ordinary kind and graph checks publish anything. Aliases, non-main libraries, simultaneous unresolved subscriptions, nonempty subscriptions and unrelated pending tags decline.
140+
141+A component-local recovery sequence handles a recognized direct program whose context-dependent definitions cannot resolve ordinarily. Update first derives its result from its inferred two-slot sample and canonical `cmd`/`list` templates. Subscription recovery then checks the same message/model relation and the canonical fourth slot. A narrow keyed-view proof finds exactly one direct `each (turn xs mapper)` site, derives the mapper from the actual `each` and `turn` schemes, and recovers the view before the existing initializer and ordinary `main` retries. Every recovered scheme must be closed and freshly allocated above the current environment and prelude IDs. A source screen skips doomed ordinary attempts only for this keyed shape and never skips final `main` inference; non-gate views and aliases decline without crashing. Final publication still requires all module definitions, the program-mold and gate-free checks, and request-value watchability.
142+
143+Canonical `element` composition has two tightly scoped accommodations. Recursive result context is allowed only when every recursive side has the prepared prelude's `element` origin. When ordinary list-item fitting fails, an `element` target may instead prove its message argument invariantly or select one exact literal case with a full payload fit; a successful ordinary fit always takes precedence. This covers the unchanged todo's union controls and raw constructors without opening those paths to other unions. `tools/type-todo-full-test` checks the byte-identical island through both full APIs, the exact closed `main` type, structural downstream import, and model/message/mapper/watch rejection controls. It does not execute Jibb or implement runtime watching.
144+
119145Each case's canonical API identity and source-derived schema travel across imports in a nonrecursive graph certificate containing the exact source bundle, prelude, reserved scope and trusted reader results. Cached interfaces must match those inputs and cannot hide an active ancestor; unknown legacy entries are rebuilt from their unique supplied source. Request-bearing closures are limited to 256 paths and requests. Closed gate samples can also fit when an unnamed input slot corresponds to a named one, provided products are identical and nested value faces and ambiguous cell tails remain intact. This is type inference only: request lowering, runtime schema validation and value watchability proofs are not implemented.
120146
121147`+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.
122148
123−The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn`, `lent`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `cork`, `corl`, `cury` and `curr`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. A dedicated trusted internal-prelude preparation path also supplies private comparison and arithmetic schemes for the Jibb-written `gth`, `add` and `dec` wrappers. Ordinary module resolution rejects that primitive path even if a caller supplies a spoofed root or bundle. The low-level prepared interface is still trusted host input; the host must select the vendored sources and canonicalize paths. Primitive execution and shape-based jet recognition are not implemented. The source-backed `add` and `dec` wrappers use private arithmetic interfaces whose shared atom variable excludes loobeans; the partial checker preserves that constraint through supported inference and prints `where A is an atom other than ?`. The partial checker resolves the supported `poke` source shape, preserves its public name, and rejects ordinary imports of the private internal path. The Jibb-written `lent` recursively counts a list using `add`; the partial checker infers its generic list argument and `@ud` result. Its execution and jet recognition remain unverified until the backend exists. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, complete `ask` and `pure` checking, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
149+The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn`, `lent`, `zing`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `cork`, `corl`, `cury`, `curr`, `lead`, `late`, `trip` and `tuba`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. A dedicated trusted internal-prelude preparation path also supplies private comparison, arithmetic and text-conversion schemes for the Jibb-written `gth`, `add`, `dec`, `trip` and `tuba` wrappers. Ordinary module resolution rejects that primitive path even if a caller supplies a spoofed root or bundle. The low-level prepared interface is still trusted host input; the host must select the vendored sources and canonicalize paths. Primitive execution and shape-based jet recognition are not implemented. The Jibb-written `lth`, `gte` and `lte` gates compose the source-backed `gth` and `not` gates; supported calls infer a shared atom constraint and return `?`. Their execution and jet recognition await the backend. The source-backed `add` and `dec` wrappers use private arithmetic interfaces whose shared atom variable excludes loobeans; the partial checker preserves that constraint through supported inference and prints `where A is an atom other than ?`. The partial checker resolves the supported `poke` source shape, preserves its public name, and rejects ordinary imports of the private internal path. The Jibb-written `lent` recursively counts a list using `add`; the partial checker infers its generic list argument and `@ud` result. Its execution and jet recognition remain unverified until the backend exists. The Jibb-written `zing` concatenates homogeneous lists in order using `weld`; the checker infers `(list (list A))` to `(list A)`, including for gate elements. Hoon `zing` also accepts heterogeneous noun lists, which this type does not express. `tools/hoon --raw -f tools/testdata/zing-hoon-reference.hoon` compares an equivalent Hoon recursion with Hoon `zing` on selected finite inputs; it does not execute Jibb or verify lowering or jet recognition. The Jibb-written `lead` and `late` are curried pair constructors: `((lead a) b)` returns `[a b]`, while `((late a) b)` returns `[b a]`. The checker infers independent argument types and accepts gates as ordinary values; neither helper invokes an input gate. A Hoon translation is compared with Hoon’s helpers by `tools/hoon --raw -f tools/testdata/lead-late-hoon-reference.hoon`. This does not execute Jibb or verify lowering or jet recognition. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, complete `ask` and `pure` checking, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
124150
125151`+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.
126152
153+The prepared interface includes the source-backed UI molds and constructors, the full nonrecursive `element` union, and the exact `program` and `page` records and builders. Its element union erases nested child, keyed-item and table payloads to `*`, while public constructor schemes retain typed composition and independent key parameters. `types-prelude-ui` checks those schemes and selected valid and invalid compositions. A child-message mismatch currently fails closed as an unsupported list-item constraint rather than a definite mismatch diagnostic. Raw-constructor encapsulation, duplicate-attribute checks, rendering, navigation, storage and execution remain outside this slice.
154+
155+The prepared interface also includes the exact documented `theme` mold. Full checking covers the unchanged real `/ui/theme.jibb`, its exact exported record and a structural downstream import, with dark absent/present and field/type rejection controls. The documented present dark record uses explicit backtick unit syntax, as the Decisions tab records; there is no theme-specific inference exception. This is type checking only: contrast validation, theme rendering and routing remain unimplemented.
156+
127157And the design notes:
128158
129159| Note | Says |
@@ -177,3 +207,17 @@ Note 4 has examples of each.
177207## Speed
178208
179209Starting `urbit eval` and building the library takes about 8 s. A 2,000-line module of 400 definitions then parses in about a second. Loops over definitions, arms, lines and items are tail calls, so a long module grows no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (note 3).
210+
211+The experimental deferred constructor path can close a small import-free library transaction when ordinary resolution stalls. It retries definitions whose earlier attempts failed from their original states, retaining only successful attempts. A transaction with at most 64 definitions makes at most 4,096 attempts; it stops after a pass with no progress. This bounds the new attempt count, not each attempt's parsing, type walks or ordinary inference. Deferred definitions are restricted to simple one-component wings, literals, static strings, gates, transparent groups and empty bodies, calls, casts and a restricted boolean branch. Each successful call or cast fit must have exactly equal normalized operands so later substitutions cannot invalidate a face check. A multi-argument call also needs closed argument, sample and product types because positional face checks depend on slot boundaries and whether the result can be a cell. Other fits fail closed. A 512-node screen bounds visited expression nodes and a separate 512-node scan bounds each stability check; neither bounds mold shapes, string-piece checks, parsing, normalization, lookup, or total repeated inference. It accepts only a direct constructor callback with a closed input, records its pending fit under the source-owned inference state, and generalizes each definition against the live environment and pending constraints. Before publication it discharges and replays every edge, rejects unresolved tags or changed replay state, and checks that all molds and values are complete. The reporter reads the committed schemes for definitions added by the transaction. API and store paths, `main`, prepared-prelude recovery, imports, recursive groups, unresolved holes or written capitals, and new projection actions remain outside this full-module path. `%grec` in the constraint or freshness scan is conservatively unsupported. This is not an island-kind, runtime, or watchability check.
212+
213+An expected cell type can supply context to both arms of a loobean branch. This slice first retains any ordinary inference that already fits. Otherwise it retries from the original state only when a syntax screen excludes nested branches, casts, gates and local bodies, and a substitution screen excludes structural bindings. Both arms must fit, their normalized results and the expected type must be closed, their result types must match, and both fits must replay without changing the final substitution or fresh-ID counter. A successful retry retains the original arm type and its written faces; a failed retry returns the original inference result. The source and substitution screens each visit at most 512 entries. This permits at most one extra attempt for an eligible branch; the screens do not bound preexisting inference, type walks, list construction, or work across separate analyses.
214+
215+In an isolated diagnostic with the real todo API and reader inputs, this cell context allowed the original update body to infer when its result type was written explicitly and experimental source-defined text helpers were supplied. The unchanged island still needs those text helpers, an actual source-backed `program` and UI interface, context propagation across definitions, island-kind checking and watchability proof. This branch change itself provides no runtime implementation or watchability evidence.
216+
217+A deferred boolean branch must use both distinct literal loobean patterns. Its subject is unified with `?`; the arms are inferred in source order without contextual retry. Equal normalized arm types are retained directly. When both written arms are direct literals that each created their own unbound pending tag, the checker can instead retain two source-owned fit obligations to a shared, monomorphic result variable. A later definition may close that variable; replay uses the ordinary literal fit, requires a closed atomic target or a union of direct constant/cell cases, and rejects faced targets and faced union cases. It replays all edges under the final substitution without adding bindings or fresh IDs. This does not support deferred list literals, union-pattern reachability, arbitrary branch expressions or prepared-prelude/imported modules. It does not establish request watchability.
218+
219+With the caller's unchanged prepared prelude, the partial report can also recover a narrow import-free, non-main ordinary library initializer. A direct tuple literal may retain one source-owned fit obligation for each newly created pending literal until a later exact result cast closes them. A separate bounded candidate screen admits a direct tuple even without a constructor call. The prepared transaction requires exact agreement among the supplied interface, value inventory and reserved molds, and retains the API, store, import and `main` exclusions. It only adds recovered entries to the partial report: the ordinary full-module resolver does not publish them. Wrong unit or draft fields, unrelated pending tags and mold-name collisions fail closed; without the later final cast, the initializer remains not checked. This does not add list-literal deferral or import-aware recovery.
220+
221+Before the no-prepared-prelude fallback, the checker screens the already parsed source for a direct single-constructor call beneath groups, gates, casts or bodies without local definitions. The screen visits at most 64 AST nodes per definition and rejects sources with more than 64 definitions or 65,536 bytes. A transaction is attempted at most once per resolver or report invocation and holds at most 64 pending edges. These limits do not bound the initial parsing, ordinary resolution, normalization, or total work across separate analyses. On the pre-recursive-index snapshot, startup-inclusive synthetic 1,000-gate comparisons had baseline/candidate user times of 25.97/29.30 seconds and 26.30/27.46 seconds in reverse order. These are limited shared-load measurements, not production benchmarks. The trimmed source-backed and direct-guard fixture passed in 28.13 seconds wall and 27.53 seconds user on one run after screening; its cases include parse-success checks in the same transaction source pass. The outer resolver and reporter each parse independently, and a fallback currently parses the source again.
222+
223+A single sequential, startup-inclusive comparison against checkpoint `c96597d` measured user CPU for an unrelated stalled library at 25.04 seconds baseline and 26.32 seconds with the screened fallback; an incompatible constructor took 25.72 and 27.16 seconds; a direct constructor that the baseline declined and the candidate resolved took 24.46 and 26.79 seconds. These are small shared-load measurements, not a production benchmark. The screen was separately checked with a trapping fallback: the unrelated source skipped it, while the eligible conflicting source reached it.
docs/development.md+52
@@ -14,6 +14,8 @@ From the plan's Setup and ground rules, and from @iko:
1414- **Push straight to `master`.** @iko reviews work in the project's chat, not in pull requests, so there are none. Run the checks below first.
1515- **Keep docs/ current**: [status.md](status.md) when a milestone moves, [open-questions.md](open-questions.md) when a question is settled or found.
1616
17+The source-backed generic-union guard can be run under eval with `tools/type-union-source-test`; its `test-union-source` arm is also assembled for the fake ship. It checks a bounded partial inference slice, not general union completeness. `tools/type-union-alias-overlap-test` exercises the separate positive overlap witness and its shared ship test arm. `tools/type-full-overlap-test` checks structured full-module overlap evidence and the legacy error text under eval; both of its test arms are assembled for the fake ship.
18+
1719## Setting up a machine
1820
1921The tools need Python 3 and `urbit` (vere) on `PATH`; the ship tools also need a fake `~zod` and click. Everything so far ran with vere 4.6 on Linux.
@@ -62,6 +64,11 @@ git clone https://github.com/urbit/tools /root/src/tools
6264| `tools/importer-test` | Compares the partial Hoon importer's diagnostic trees and errors with `tests/importer/tree.txt` under `urbit eval` |
6365| `tools/type-import-default-test` | Compares default-wrapped union source proofs and adversarial cases under eval; the same golden runs on the ship |
6466| `tools/type-import-test` | Composes the Hoon importer with the partial checker and compares `tests/type-import/expected.txt` under eval |
67+| `tools/type-import-overlap-test` | Checks source-aware Hoon union overlap, provenance and proof-budget controls under eval; the same fixture runs on the ship |
68+| `tools/type-import-structural-test` | Checks multi-case and nested Hoon union overlap witnesses under eval and on the ship |
69+| `tools/type-union-source-test` | Checks bounded local generic-alias disjointness and state guards under eval and on the ship |
70+| `tools/type-union-alias-overlap-test` | Checks source-backed generic-alias overlap witnesses under eval and on the ship |
71+| `tools/type-full-overlap-test` | Checks structured full-module overlap evidence and imported-source attribution |
6572| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
6673| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
6774| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
@@ -70,15 +77,32 @@ git clone https://github.com/urbit/tools /root/src/tools
7077| `tools/type-api-evidence-test` | Runs source, scope, reader-result and declaration-watchability evidence guards under eval and on the ship |
7178| `tools/type-hole-guards-test` | Runs the shared hole-defaulting and API interface guards under eval; the same checks run on the ship |
7279| `tools/type-list-alias-test` | Runs the shared prelude list-alias and provenance guards under eval and on the ship |
80+| `tools/type-generic-recursion-test` | Checks source-backed generic recursive identity and provenance under eval and on the ship |
81+| `tools/type-generic-construction-test` | Checks source-backed one-layer recursive construction, provenance and fuel under eval and on the ship |
82+| `tools/type-generic-pattern-test` | Checks source-backed recursive patterns, catch-all coverage, state and per-attempt fuel/arm limits under eval and on the ship |
83+| `tools/type-deferred-test` | Checks the bounded source-owned deferred inference transaction under eval and on the ship |
84+| `tools/type-deferred-resolver-test` | Checks deferred resolution, report consistency and atomic failure under eval and on the ship |
85+| `tools/type-deferred-context-test` | Checks deferred source order and literal branch contexts under eval and on the ship |
86+| `tools/type-deferred-prepared-test` | Checks prepared-prelude tuple initializer recovery, exact partial reports and fail-closed guards under eval and on the ship |
87+| `tools/type-cell-branch-test` | Checks closed-cell branch context, rollback and bounded retry screens under eval and on the ship |
7388| `tools/type-generic-alias-test` | Runs public/private generic union alias and provenance guards under eval and on the ship |
7489| `tools/type-positional-face-guards-test` | Runs positional-call and nested-face guards under eval and on the ship |
7590| `tools/type-qath-guards-test` | Runs source-provenance, recursive unfolding and face guards under eval and on the ship |
7691| `tools/type-todo-partial-test` | Reports partial inference of the unchanged todo island through the real API and readers under eval and on the ship |
7792| `tools/type-todo-api-test` | Exercises the actual todo API through the real Hoon readers and partial checker |
7893| `tools/type-direct-gate-test` | Checks a synthetic source-backed program report and direct gate provenance under eval and on the ship |
94+| `tools/type-page-main-test` | Fully checks byte-identical static and direct data pages through real readers, exact main types, downstream imports and rejection guards under eval and on the ship |
95+| `tools/type-theme-test` | Fully checks the byte-identical real theme, its exact exported type, structural downstream import, dark absent/present forms and rejection guards under eval and on the ship |
96+| `tools/type-program-main-test` | Checks the narrow closed subscription-free program-main interface, downstream import and rejection guards under eval and on the ship |
97+| `tools/type-program-init-test` | Checks transactional direct-program initializer recovery, exact exported/imported types and fail-closed boundaries under eval and on the ship |
98+| `tools/type-program-update-test` | Checks transactional direct-program update result recovery, union/boolean context, exact exported/imported types and fail-closed boundaries under eval and on the ship |
99+| `tools/type-program-watch-test` | Checks direct singleton request-value watchability against merged real-todo evidence, exact types/imports and rejection boundaries under eval and on the ship |
100+| `tools/type-store-test` | Checks the unchanged cart/basket through detailed and legacy inference, exact store/derived schemes, structural imports, source-bound state watch evidence and rejection guards under eval and on the ship |
101+| `tools/type-todo-full-test` | Fully checks the byte-identical todo island through real readers, exact main type, structural downstream import and rejection controls under eval and on the ship |
79102| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
80103| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
81104| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
105+| `tools/type-empty-test` | Checks source-backed empty molds, inhabitedness, coverage and proof budgets under eval and on the ship |
82106| `tools/type-gate-free-guards-test` | Checks bounded gate-free verdicts, inhabitation and witness paths under eval and on the ship |
83107| `tools/type-gate-free-source-test` | Checks source-backed todo mold analysis through the real readers under eval and on the ship |
84108| `tools/type-sub-guards-test` | Checks source-backed subscription mold dependencies under eval and on the ship |
@@ -101,9 +125,15 @@ git clone https://github.com/urbit/tools /root/src/tools
101125
102126```
103127tools/golden # all cases pass
128+tools/golden --case types-prelude-ui # exact UI/program/page schemes and composition
104129tools/importer-test # Hoon importer fixture projections match
105130tools/type-import-default-test # default-wrapped source proofs match
106131tools/type-import-test # importer/checker bridge golden report matches
132+tools/type-import-overlap-test # source-aware Hoon overlap and provenance controls
133+tools/type-import-structural-test # nested and multi-case Hoon overlap controls
134+tools/type-union-source-test # local generic-alias union guards
135+tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
136+tools/type-full-overlap-test # full-module overlap evidence
107137tools/type-tlon-test # real Tlon importer/checker report matches
108138tools/type-import-diagnostic-test # direct structured reader diagnostics match
109139tools/type-mark-test # mark/checker bridge golden report matches
@@ -118,9 +148,26 @@ tools/type-qath-guards-test # qath source and unfolding guards pass
118148tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
119149tools/type-todo-api-test # real todo API partial inference and reader guards pass
120150tools/type-direct-gate-test # direct gate source and provenance guards pass
151+tools/type-page-main-test # static/data pages, exact types, imports and rejection guards pass
152+tools/type-theme-test # real theme, exact type, structural import and rejection guards pass
153+tools/type-program-main-test # closed program-main interface and rejection guards pass
154+tools/type-program-init-test # transactional direct-program initializer context guards pass
155+tools/type-program-update-test # transactional direct-program update context guards pass
156+tools/type-program-watch-test # direct request-value watchability guards pass
157+tools/type-store-test # unchanged cart/basket, store evidence and rejection guards pass
158+tools/type-todo-full-test # byte-identical full todo, downstream import and rejection guards pass
159+tools/type-generic-recursion-test # source-backed recursive identities and provenance
160+tools/type-generic-construction-test # source-backed recursive construction and bounds
161+tools/type-generic-pattern-test # source-backed recursive patterns and bounds
162+tools/type-deferred-test # source-owned deferred inference guards
163+tools/type-deferred-resolver-test # resolver consistency and failure guards
164+tools/type-deferred-context-test # deferred source-order and branch guards
165+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
166+tools/type-cell-branch-test # contextual branch rollback and bounds
121167tools/type-closed-gate-guards-test # closed gate fit guards pass
122168tools/type-constructor-fit-guards-test # constructor fit guards pass
123169tools/type-nested-union-guards-test # nested union selector guards pass
170+tools/type-empty-test # empty mold and uninhabited-case guards pass
124171tools/type-gate-free-guards-test # bounded gate-free classifier guards pass
125172tools/type-gate-free-source-test # real todo mold analysis and source guards pass
126173tools/type-sub-guards-test # subscription source guards pass
@@ -131,6 +178,9 @@ tools/type-arithmetic-guards-test # arithmetic constraint guards pass
131178tools/type-module-scope-test # module/prelude scope golden report matches
132179tools/hoon check-spans-test # prints <<>>
133180tools/hoon itype-unify-test # type-unification controls pass
181+tools/hoon -f tools/testdata/zing-hoon-reference.hoon # Hoon translation agrees on four inputs
182+tools/hoon -f tools/testdata/lead-late-hoon-reference.hoon # Hoon translation agrees on selected inputs
183+tools/hoon -f tools/testdata/succ-hoon-reference.hoon # Hoon translation agrees on selected inputs
134184tools/testdata/selftest # 22 checks, 0 failed
135185tools/doc-blocks docs/spec # every jibb block has its case
136186tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
@@ -182,3 +232,5 @@ Write `source.jibb` and `about.txt` by hand, run `tools/golden --update --case <
182232## Commits
183233
184234A short subject in the imperative, then a body that says what changed and why, wrapped at 72 columns, as in `git log`. Each commit leaves every check passing.
235+
236+`tools/type-deferred-test` exercises the bounded, source-owned constructor transaction and low-level freshness/replay guards. `tools/type-deferred-resolver-test` checks the experimental import-free library resolver, report consistency, atomic failure, and that both source orders of a late face constraint decline. `tools/type-deferred-prepared-test` checks the separate partial-report-only prepared-prelude route, direct tuple-literal obligations, exact report types and its wrong-field, unrelated-tag, mold-collision and no-final-cast controls. These checks do not establish island-kind or watchability support.
docs/prelude-inventory.md+12−4
@@ -8,13 +8,19 @@ The vendored prelude defines `poke` in its private internal module and re-export
88
99The prelude also declares the generic `cmd` mold exactly as in Overview, Effects. The partial checker infers its five cases and independent message types in the supported examples; complete module checking and backend validation remain outstanding. The public prelude also declares `sub`; the partial checker infers supported constructions, while request watchability and execution remain outstanding.
1010
11+The public prelude now defines the UI `length`, `align`, `role`, `tone` and `attr` molds, a nonrecursive generic `element` union with one case per UI node, and the exact `program` and `page` records with their builders. Nested child, keyed-item and table payloads in the runtime union are erased to `*`; the public constructors retain typed children and independent key types, and `island` stores `[program data]` in its erased payload. The focused `types-prelude-ui` golden infers the complete union and constructor schemes, including static and message-bearing composition. Raw-constructor encapsulation, duplicate-attribute rejection, rendering, storage, navigation and execution are not established by this slice.
12+
13+The public prelude defines the approved generic `store` record `[init=S update=*]` and its builder, whose update argument is `$-([A S] S)` while the result exposes only `S`. Focused store coverage checks both exact schemes, the unchanged cart's closed main and derived state/action gates, and downstream structural imports. Store declaration checking and watch evidence are implemented; multi-action declarations, lowering and runtime execution are not.
14+
15+The public prelude also defines the exact `theme` mold: three space cords, five normal tone cords, `wide`, `lang` and `zone` cords, `(unit qath)` for `font`, and a unit containing the same five dark tone cords. The shared `type-theme` fixture fully checks the byte-identical real theme and its structural downstream import, including dark absent/present and malformed-field negatives. It does not implement contrast checking, rendering, routing or any other theme behavior.
16+
1117Hoon `+$` 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.
1218
1319## 1a
1420
1521`add`, `dec`, `div`, `dvr`, `gte`, `gth`, `lte`, `lth`, `max`, `min`, `mod`, `mul`, `sub`.
1622
17−The source-backed `gth` gate calls a compiler-supplied private comparison interface. The partial checker accepts supported equal-aura atom arguments, including loobeans, and returns `?`; lowering, jet recognition and execution remain unfinished. The public `add` and `dec` gates are written in Jibb over private primitive interfaces. The partial checker infers a shared atom type that excludes loobeans, including through supported generic calls. Primitive execution and jet recognition remain unfinished.
23+The source-backed `gth` gate calls a compiler-supplied private comparison interface. The partial checker accepts supported equal-aura atom arguments, including loobeans, and returns `?`; lowering, jet recognition and execution remain unfinished. The public `add` and `dec` gates are written in Jibb over private primitive interfaces. The partial checker infers a shared atom type that excludes loobeans, including through supported generic calls. The Jibb-written `lth`, `gte` and `lte` gates compose `gth` and `not`; supported calls infer a shared atom constraint and return `?`. Primitive execution and jet recognition remain unfinished.
1824
1925## 1c
2026
@@ -26,7 +32,7 @@ The source-backed `gth` gate calls a compiler-supplied private comparison interf
2632
2733`biff`, `bind`, `bond`, `both`, `clap`, `clef`, `drop`, `fall`, `flit`, `hunt`, `lift`, `mate`, `need`, `some`.
2834
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.
35+The following is an audit of the Hoon 135 bodies, not a completed Jibb interface. The partial checker infers `fall`, `need`, `some`, `bind`, `biff`, `bond`, `both`, `clap`, `clef`, `drop` and `flit`; the remaining written implementations have been parsed, but complete checker validation remains outstanding. Backend validation and jet recognition remain outstanding for all of them.
3036
3137| Name | Hoon behavior | Jibb status |
3238| --- | --- | --- |
@@ -49,7 +55,7 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
4955
5056`snoc`, `lure`, `fand`, `find`, `flop`, `gulf`, `homo`, `join`, `bake`, `lent`, `levy`, `lien`, `limo`, `murn`, `oust`, `reap`, `rear`, `reel`, `roll`, `scag`, `skid`, `skim`, `skip`, `slag`, `snag`, `snip`, `sort`, `spin`, `spun`, `swag`, `turn`, `weld`, `snap`, `into`, `welp`, `zing`.
5157
52−The current prelude writes `snoc`, `lure`, `flop`, `join`, `lent`, `levy`, `lien`, `murn`, `rear`, `reel`, `roll`, `skim`, `skip`, `snip`, `turn` and `weld`. `lent` counts items by recursion and `add`; `murn` keeps the present products of its gate in order; `join` inserts a separator between items; `snip` drops the last item, and `rear` returns it or crashes on an empty list. The folds take an explicit initial value as the Prelude table specifies. The partial checker infers `snoc`, `lure`, `weld`, `turn`, `flop`, `rear`, `skim`, `skip`, `murn`, `join`, `snip`, `lent`, `levy` and `lien` using the validated prelude `list` mold; other list helpers remain limited by that fragment. The result casts on `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy` and `lien` state their existing result types without changing their bodies. Backend validation remains outstanding for all of them.
58+The current prelude writes `snoc`, `lure`, `flop`, `join`, `lent`, `zing`, `levy`, `lien`, `murn`, `rear`, `reel`, `roll`, `skim`, `skip`, `snip`, `turn` and `weld`. `lent` counts items by recursion and `add`; `murn` keeps the present products of its gate in order; `join` inserts a separator between items; `snip` drops the last item, and `rear` returns it or crashes on an empty list. The folds take an explicit initial value as the Prelude table specifies. The partial checker infers `snoc`, `lure`, `weld`, `turn`, `flop`, `rear`, `skim`, `skip`, `murn`, `join`, `snip`, `lent`, `zing`, `levy` and `lien` using the validated prelude `list` mold; other list helpers remain limited by that fragment. The result casts on `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy` and `lien` state their existing result types without changing their bodies. `zing` concatenates homogeneous lists in order; Hoon’s raw `zing` can also flatten heterogeneous noun lists, which this Jibb type does not express. A Hoon translation agrees with Hoon `zing` on selected finite inputs; this is not Jibb execution. Backend validation and jet recognition remain outstanding for all of them.
5359
5460## 2c
5561
@@ -99,7 +105,7 @@ The current prelude writes `snoc`, `lure`, `flop`, `join`, `lent`, `levy`, `lien
99105
100106`aftr`, `cork`, `corl`, `cury`, `curr`, `fore`, `head`, `same`, `succ`, `tail`, `test`, `lead`, `late`.
101107
102−The source-backed `cork` and `corl` compose gates forward and backward, respectively; `cury` and `curr` bind the first and second item of an unfaced pair. The partial checker infers their polymorphic types. Their runtime implementations remain to be validated by a backend.
108+The source-backed `cork` and `corl` compose gates forward and backward, respectively; `cury` and `curr` bind the first and second item of an unfaced pair. `succ` increments an atom through `add`; the partial checker infers a shared atom type excluding loobeans. A Hoon translation agrees with Hoon on ten selected inputs; Jibb execution and jet recognition remain unverified. `lead` and `late` are curried pair constructors: `((lead a) b)` returns `[a b]`, and `((late a) b)` returns `[b a]`. Their arguments may have independent types, including gate values, and neither constructor invokes a gate. The partial checker infers their polymorphic types. A Hoon translation agrees with Hoon’s helpers on selected inputs, but this is not Jibb execution; lowering and jet recognition remain to be validated by a backend.
103109
104110## 2o
105111
@@ -162,6 +168,8 @@ The compiler-result `tone.hoon` has the three cases listed above; the qualified
162168
163169`at`, `cass`, `cuss`, `crip`, `mesc`, `runt`, `sand`, `sane`, `ruth`, `trim`, `trip`, `teff`, `taft`, `tuba`, `tufa`, `tuft`, `wack`, `wick`, `woad`, `wood`.
164170
171+The prelude writes `trip` and `tuba` over private primitives. Their inferred types are `$-(@t (list @tD))` and `$-((list @tD) (list @c))`, matching the target ship's Hoon 135 definitions. Composition with `lent` and invalid argument controls pass in the partial checker; primitive lowering, execution and jet recognition remain unfinished.
172+
165173## 4k
166174
167175`co`.
docs/spec/decisions.md+3−2
@@ -65,7 +65,7 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
6565| Page loading | `load` maps route parameters, `~` for none, to one `ask` or `pure`; pages render per request from a fresh scry of the path, or of its case's scry path; nothing is watched or kept | Decided 2026-10-29 |
6666| Compile targets | Nock on the ship, JavaScript in the browser | Decided |
6767| Optimizer | Basic lowering; holes later | Decided 2026-10-29 |
68−| Island `update` | In the browser | Decided |
68+| Island `update` | In the browser; returns the model and a list of commands, which the runtime processes one at a time in list order | Decided 2026-11-02 |
6969| Island `init` | Takes the page's data, returns the model | Decided 2026-10-29 |
7070| Island rendering | `view` re-runs on model changes; a keyed diff patches the DOM; holes later | Decided 2026-10-29 |
7171| Data crossing to the browser | No gates in island data or models | Decided 2026-10-29 |
@@ -73,11 +73,12 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
7373| Transactions | None; one poke per command | Decided |
7474| Reloads | Restart from the model the page is served with | Decided 2026-10-29 |
7575| Shared state | Stores: browser agents written like API files, with `state`, `+$ poke` and `(store init update)`; the store's `+$ poke` is a declaration, not a mold; derived gates provide poke constructors and state requests; one per page | Decided 2026-10-31 |
76+| Store builder | `+$ store |$ [S] [init=S update=*]`, with `++ store |= [init=S update=$-([A S] S)] ^- (store S) [init update]`: the builder checks action `A`, while `main` exposes only state `S`; the store kind check verifies `A` against the poke declaration | Decided 2026-11-01 |
7677| Subscriptions | By agent and path, shared per page; the first fact is full state, so no paths that need a scry path | Decided 2026-10-29 |
7778| Apps | One island under a catch-all route, given the path by `pure`; `%url` delivers the path on every change; in-section links act as `go`; focus moves to the first heading | Decided 2026-10-29 |
7879| Layout vocabulary | Jibb's elements and theme tokens; the stylesheet comes from the theme alone; chars and fill are inline; `[%fill n]` below 1 counts as 1 | Decided 2026-10-29 |
7980| Responsive layout | `stack` switches at the theme's `wide` | Decided 2026-10-29 |
80−| Theme | A prelude mold with every token required: spaces, five tones with `normal` and `background`, language, zone, `wide`, and an optional static font; 4.5:1 contrast enforced | Decided 2026-10-29 |
81+| Theme | A prelude mold with every token required: spaces, five tones with `normal` and `background`, language, zone, `wide`, and an optional static font; optional values such as dark tones use explicit backtick unit syntax; 4.5:1 contrast enforced | Decided 2026-11-01 |
8182| Dark mode | Hand-written dark tones under `dark`, used when the reader prefers dark | Decided 2026-10-27 |
8283| Links | All text escaped; in-app links are application paths, as `%/blog/(slug)`, with no query or fragment, checked at compile time against routes and static files; paths and unchecked `https`, `mailto` and `tel` URLs and root-relative cords such as `"/apps/groups"` have separate declarations; `link-unsafe`, `image-unsafe` and `go-unsafe` are the unchecked forms; both navigation declarations produce `[%go url=@t]`, with `go` converting the path to a cord including the app's base path; other cords render as text; a CSP on every page | Decided 2026-10-30 |
8384| Data layer | Hoon's nouns: units, treaps, loobeans | Decided |
docs/spec/implementation-plan.md+1−1
@@ -73,7 +73,7 @@ For milestone 6. An island is one loop over one model: events become messages, `
7373- **Messages** come from controls, command replies, facts, timers and `%url`. *Proposed*: an island handles them one at a time, in arrival order.
7474- **Rendering**: a message changes the model when `update` returns a different noun; `view` then re-runs and a keyed diff patches the DOM. An unchanged model renders nothing. *Proposed*: the patch lands before the next message, so a crash in `view` belongs to one message.
7575- **Controls**: after every event, the control that fired is reset to the latest view, even when the model didn't change. A field's text is rewritten only when it differs from the screen, which keeps the caret and any IME composition.
76−- **Commands**: each reply arrives later as a new message, never inside the `update` that sent it. *Proposed*: commands run in list order, after the patch.
76+- **Commands**: an update may return several commands. The runtime processes them one at a time, in list order, after the patch. Each reply arrives later as a new message, never inside the `update` that sent it.
7777
7878| Control | Sends | When |
7979| --- | --- | --- |
docs/spec/overview.md+4−2
@@ -152,6 +152,8 @@ Loads and renders run in Nock.
152152 [%url reply=$-(path M)]
153153```
154154
155+An island's `update` returns `[model (list (cmd M))]`, so one message may produce several commands. The runtime processes the returned commands one at a time, in list order. A store's `update` consumes exactly one poke with the current state and returns the next state.
156+
155157- `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.
156158- 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`.
157159- 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 checker must prove a request is watchable; unknown watchability is also a type error. 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.
@@ -163,7 +165,7 @@ Inputs send a message per `input` event, and one per IME composition, so validat
163165
164166- `init` runs on the ship with the page's data and returns only the model, jammed into the page; the browser resumes from it at start. A reload starts from the model the page is served with.
165167- A crash in `update` drops the message, keeps the model and shows the standard notice.
166−- Stores share state between a page's islands. A store module, written like an API file, has `state`, `+$ poke` and `++ main (store init update)`, where `update` applies a poke. The store's `+$ poke` is a declaration, not a mold. Islands import it with `/=` and use its derived gates: a constructor per poke type, and `(state.cart |=%got)`, whose first fact is the current state and each later fact the next.
168+- Stores share state between a page's islands. A store module, written like an API file, has `state`, `+$ poke` and `++ main (store init update)`, where `update` applies a poke. The store's `+$ poke` is a declaration, not a mold. The builder is `+$ store |$ [S] [init=S update=*]` with `++ store |= [init=S update=$-([A S] S)] ^- (store S) [init update]`: it checks action `A`, while `main` exposes only state `S`; the store kind check verifies `A` against the declaration. Islands import it with `/=` and use its derived gates: a constructor per poke type, and `(state.cart |=%got)`, whose first fact is the current state and each later fact the next.
167169- A store runs in the browser from its `init` when its first island starts, and lasts as long as the page. Islands keep what they watch in their own models.
168170- An app is a page whose view is one island under a catch-all route; its `load` passes the path with `pure`. The island's `%url` subscription delivers the path at start and after every change, back and forward included. `go` pushes history, and `go` or `link` within the section changes the island without a reload. Focus then moves to the new view's first heading, which screen readers announce.
169171
@@ -216,7 +218,7 @@ The theme, `++ theme` in `/ui/theme.jibb`, uses the prelude's `theme` mold, with
216218 lang="en"
217219 zone="UTC"
218220 font=`%/static/fonts/inter.woff2
219− dark=[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
221+ dark=`[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
220222```
221223
222224Style attributes compile to atomic classes in one stylesheet built from the theme, so islands can't compute a missing class. `[%chars n]` and `[%fill n]` become inline styles.
docs/status.md+94−9
@@ -1,6 +1,6 @@
11# Status
22
3−As of 2026-10-31. The plan is [spec/implementation-plan.md](spec/implementation-plan.md); each milestone ends with its checks passing on a fake ship.
3+As of 2026-11-01. The plan is [spec/implementation-plan.md](spec/implementation-plan.md); each milestone ends with its checks passing on a fake ship.
44
55| # | Milestone | Status |
66| --- | --- | --- |
@@ -23,9 +23,23 @@ The parser accepts `_` in mold positions and typed path segments, retaining each
2323
2424On 2026-10-31, @iko chose explicit, result-directed `(proj record)` to construct a record with exactly the expected fields, and reserved `proj` against definitions and imports. The partial checker handles selected explicit calls with known, closed record types, records field-selection evidence for later lowering, and reserves the name across source bindings. Reordered fields, some nested contexts and several open or recursive cases remain unsupported; lowering and execution are not implemented yet. The field-order question remains open.
2525
26−The internal prelude also defines `qath` as a transparent recursive knot sequence, re-exported by the public prelude. The partial checker recognizes its source identity, supports selected null/cell construction and matching, and types static application-path literals. Other recursive shapes, broader patterns and dynamic application-path segments remain unsupported. A 256-step limit applies per inference attempt, not to parsing or retries; checking routes and static files remains milestone 4.
26+The internal prelude also defines `qath` as a transparent recursive knot sequence, re-exported by the public prelude. The partial checker recognizes its source identity, supports selected null/cell construction and matching, and types static application-path literals. Construction and matching for other recursive shapes, broader patterns and dynamic application-path segments remain unsupported. A 256-step limit applies per inference attempt, not to parsing or retries; checking routes and static files remains milestone 4.
2727
28−The internal prelude defines a transparent generic `ask` with pure, agent and store cases, re-exported alongside the Jibb-written `pure` gate. The partial checker infers supported constructors and exhaustive matches. Agent and store receivers operate on raw nouns; their fields do not prove schema validity or watchability. The public prelude now defines the documented source-backed `sub` union; supported `%watch` payloads retain the public `(ask M)` type. Constructing a `sub` does not prove that its request is watchable. Request lowering, checked decoding, runtime validation and island watch checking remain unimplemented.
28+The checker also recognizes a limited source-proven generic recursive tree in an import-free defining module. Its nominal identity retains the defining path, mold name and type arguments, including across supported imports and aliases. With a known expected type it can construct supported tagged cases by checking one source-proven layer at a time. Flat matches with explicit tags or nonbinding catch-alls also work for these source-proven trees, as does a missing-case diagnostic for a supported single-arm match. At most 128 arms are screened per attempt; whole-case binders and nested patterns remain unsupported. Broader pattern matching, general structural fits and gate-free proof remain unsupported; this is not yet the prelude's `element` implementation or island checking. The source index uses fixed-shape checks during mold collection. Each construction or supported pattern attempt has 256 unfolding steps and at most 4,096 face and substitution visits per scan; pattern subject recognition and view validation can each scan separately. Parsing, other inference and retries remain outside those limits. A single startup-inclusive comparison of 1,000 ordinary gates produced identical reports and used 29.12 seconds of user CPU before the shared-resolver refactor and 28.55 seconds after it, with other work running; it is not a general performance bound.
29+
30+A bounded local source proof recognizes a narrow class of generic-alias union cases with different literal heads, then applies the ordinary mold checks. Nested or qualified aliases and several open states remain unsupported, including a valid alias used during the deferred transaction; the partial report states that the mold itself has not been checked. `tools/type-union-source-test` exercises the source and state bounds and failure paths under eval and on the ship. A separate bounded witness now reports proven collisions between supported literal-headed aliases, with both original case sites; unknown payload intersections still decline. The detailed full-module result now carries the first failed mold’s source-bound overlap evidence, including through ordinary Jibb imports; the legacy text result renders both case excerpts. Specialized API and prelude paths remain limited. The shared guards pass under eval and on the ship.
31+
32+The checker can experimentally discharge a narrowly scoped direct-constructor constraint while resolving an import-free library without a prepared prelude. It preserves independent generalized schemes and publishes only after all source molds, values, and recorded constraints close. API/store paths, `main`, imports, prepared preludes, recursive groups, open constraints, projection actions, and `%grec` in the constraint graph remain unsupported by this route. The fallback also declines source shapes outside its bounded direct-call screen. It does not yet typecheck the unchanged todo island or establish watchability.
33+
34+A prepared-prelude partial report can recover a narrow import-free, non-main ordinary library initializer by deferring source-owned literals in a direct tuple until a later exact result cast. The prepared interface and declared-name inventories must agree exactly. API/store paths, `main` and imports remain excluded, and the ordinary full-module resolver does not publish the recovered interface. Wrong field types, unrelated tags and mold collisions fail closed; a no-final-cast control remains unchecked. `tools/type-deferred-prepared-test` checks the exact recovered types and unchanged `partial inference; module not checked` disclaimer under eval and on the ship. List-literal deferral and import-aware recovery remain unsupported.
35+
36+Closed cell context can now flow through a bounded loobean branch while preserving the inferred value faces and original failed-inference behavior. Open or structurally uncertain substitutions and nested retry shapes remain unsupported. This does not by itself provide the remaining cross-definition context or complete island-kind and watchability checks needed by the unchanged todo island.
37+
38+The internal prelude defines a transparent generic `ask` with pure, agent and store cases, re-exported alongside the Jibb-written `pure` gate. The partial checker infers supported constructors and exhaustive matches. Agent and store receivers operate on raw nouns; their fields do not prove schema validity or watchability. The public prelude now defines the documented source-backed `sub` union; supported `%watch` payloads retain the public `(ask M)` type. Constructing a `sub` does not prove that its request is watchable. Request lowering, checked decoding, runtime validation and general island watch checking remain unimplemented; the separate direct-program proof below covers only one narrow static value shape.
39+
40+The public prelude now contains the source-backed UI length/attribute molds, all element constructors, and exact program/page records and builders. The full 19-case generic `element` union is nonrecursive: nested child, keyed-item and table payloads are `*`, while public constructor schemes preserve typed composition and independent key types. `island` returns `(element !!)` with `[program data]` as its erased payload. The focused UI golden checks exact schemes, static and message-bearing composition, concrete programs/pages/islands, malformed inputs and selected mismatches. A child-message mismatch fails closed as an unsupported constraint. Raw-constructor encapsulation, duplicate-attribute checks, rendering, storage, navigation and execution are not claimed.
41+
42+The public prelude now defines the exact documented `theme` record, including required text tokens, an optional `qath` font and optional dark tones. A shared eval/ship fixture fully checks the byte-identical `my-app/ui/theme.jibb`, checks its exact exported type and structural downstream import, and covers absent dark tones plus wrong nested auras, missing fields and wrong font/dark types. On 2026-11-01, @iko chose explicit backtick syntax for present units, and the documented dark record now uses it. No contrast check, rendering, routing or other theme behavior is implemented.
2943
3044Known same-origin generic-union result context can now constrain a call before its arguments are inferred. An unresolved or opaque constructor target stays unsupported rather than producing a definite mismatch; proven missing tags still report errors. A todo request with explicit `(ask msg)` context can infer `|=%got`; its uncontextualized form remains unsupported. A two-item literal-headed tuple can receive payload context from a known union of uniquely headed literal cells when its payload is a shallow wing-headed call with literal, wing or constructor arguments. Existing inference takes precedence when it fits; otherwise the checker tries the contextual path once. It conservatively declines that path when any substitution has a structural root, as well as for duplicate or opaque competitors. The guard scans substitutions per eligible tuple and may add one shallow inference; no global linear-time bound is claimed. This allows an explicitly typed todo subscription body to infer, but does not check the island or prove request watchability.
3145
@@ -33,7 +47,15 @@ A separate source-backed analysis can prove one named mold gate-free, report a d
3347
3448The partial checker can also match a directly named, checked root gate against a generic gate sample in a direct, unshadowed source-backed prelude call. It uses the written two-slot sample layouts to preserve nested record faces, then requires the complete call samples to be closed and tag-free and repeats the fit under the final substitution. The proof falls back to existing inference for unavailable or ambiguous source layouts, local or dynamic gates, aliases, recursive placeholders and open generic caller types. It preserves written-capital checks and projection evidence; it does not add `program`, check islands or prove request watchability. Prepared prelude source and interface remain a trusted pair.
3549
36−The API path analyzer can retain its source, complete prepared prelude, reader results and resolved dependencies as evidence, and classify a unique declaration as watchable, not watchable or unknown. It does not yet prove the provenance of request values or check island subscriptions. Prepared artifacts and reader results remain trusted host inputs.
50+A narrow full-module path now checks direct four-wing `(program init update view subs)` definitions named `main`. It requires the canonical prepared `program` value and mold, reuses ordinary source-backed program fitting, and publishes only after all ordinary module and request-graph checks. The inferred `main` must be closed and invariantly match the instantiated `program` mold. Initializer data and model must be closed and gate-free with `%yes` verdicts inside a shared 256-node budget. `subs` may syntactically return null through transparent forms, or one direct imported request watch after the request graph merges. The latter is only an unfaced two-item `[%watch (case.face |=%callback)]` singleton: the imported member must have the exact plain derived-request scheme, a unique merged request must match the API path and both case names and occur in the interface's own graph, the API source must be identical, and scry, diffs and parameters must be absent. Pure or hand-built values, helpers, aliases, re-exports, typed paths, folds, multiple watches and unknown or ambiguous evidence remain rejected. Checked interfaces retain source evidence and support ordinary downstream imports; no program execution or runtime watching is claimed. A transactional extension can recover a direct initializer whose transparent tuple body ends in null when update, view and subs are already resolved. It derives the expected gate through the ordinary positional program fit with fresh IDs and stable replay, then re-infers the actual initializer and `main` under all ordinary finalization and kind checks. Non-main libraries, aliases, nonempty or simultaneously unresolved subscriptions, and unrelated pending tags remain rejected.
51+
52+Static and direct data-page `main` checking now completes the unchanged about page, blog index and todo index through the real Hoon readers. Static generic element mains specialize to closed canonical `(element !!)`; direct pages require a closed invariant `page` type and a direct plain derived-request load. Page loads reuse the strict source/member/evidence identity checks used by program watches, rejecting aliases, indirect/hand-built/pure/unknown requests, typed paths, diffs and store paths. The shared eval and ship fixture asserts exact main types and structural downstream imports. Rendering, runtime loading and request execution remain unimplemented.
53+
54+The prelude now has the approved `store` mold and action-checking builder. Direct two-wing store mains infer after removing the single local `+$ poke` declaration from ordinary molds and values; the final kind check requires one closed state mold, a direct local action reference, exact init/state and update relations, and no gate-free-state restriction. Stores export their ordinary state/action molds plus derived poke and state-request gates, never the poke declaration. Separate source-bound store certificates prove only the actual imported state member watchable; API evidence checks and page-load rejection remain intact. The unchanged cart and basket pass detailed and legacy checking with exact mains, derived schemes and structural imports, including non-keyed view and null-sample initializer recovery. Multi-action declarations, lowering and runtime execution remain unsupported.
55+
56+The component-local program recovery now covers update, subscriptions, one direct keyed `each`/`turn` mapper and its view, then the existing initializer and ordinary `main` path. Each recovered scheme is closed and freshly allocated; a keyed source screen avoids repeated doomed ordinary attempts without skipping final `main`, and non-gate views decline safely. Canonical `element` recursion and exact singleton-case list fits are narrowly guarded, with successful ordinary fits taking precedence. The byte-identical unchanged todo now passes both detailed and legacy full-module checks with an exact closed `main` type and structural downstream import. Wrong models, messages, results, mappers, keys, aliases, non-gate views and watches fail closed. This is static checking only: no Jibb execution or runtime watching is claimed.
57+
58+The API path analyzer can retain its source, complete prepared prelude, reader results and resolved dependencies as evidence, and classify a unique declaration as watchable, not watchable or unknown. This remains declaration evidence rather than proof about an arbitrary request value. The narrow direct-program check above composes it with final value syntax, resolved imports and merged evidence for one plain request. Prepared artifacts and reader results remain trusted host inputs.
3759
3860For a unique supported path declaration, the request-parts analysis derives ordered typed path parameters, a full-state reply sample and a fold type for one diff mark. Multiple diffs and unsupported or ambiguous evidence fail closed. By itself it does not create request gates or establish watchability of values.
3961
@@ -47,8 +69,26 @@ The repository spec records the subsequent type-system and prelude decisions, in
4769
4870The shared prelude interface reserves every name present in the supplied vendored source and makes only supported inferred entries available, including `list`, `unit`, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn` and `lent`. The validated standard `list` mold is injected when the prelude’s own gates are inferred; `weld` and `turn` have ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through direct or transitive mold aliases. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. Unsupported entries such as most list helpers remain reserved but unavailable; backend validation of the helpers remains outstanding. All callers use the same prelude origin, so a library can export a type containing unqualified `(unit A)` to another module. The source-only `+prepare-prelude` rejects empty, malformed, conflicting or import-bearing source; `+prepare-prelude-with-internal` also accepts the supported private internal import. Prepared values are trusted and must come unchanged from the matching preparation arm. When canonical public list or unit templates are missing or altered, independently inferred private molds remain available, while molds that depend on those templates do not. The module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship. The source and checker remain incomplete, so this does not establish complete shadowing coverage or a checked module.
4971
72+The prelude has a Jibb-written `succ` gate that increments through `add`; partial inference retains its arithmetic atom constraint. A Hoon translation agrees with Hoon on ten selected inputs. Jibb execution and jet recognition remain unverified.
73+
74+The prelude has Jibb-written curried `lead` and `late` pair constructors, inferred with independent argument types including gate values. Their focused golden passes under eval and on the ship, and a Hoon-reference comparison covers operand order. Jibb backend execution remains unverified.
75+
76+The prelude also has a Jibb-written `zing` that concatenates homogeneous lists via `weld`. Its focused golden infers empty, nested text, ship, generic and gate-element lists and reports a non-list error; the same golden passes on the ship. A Hoon translation agrees with Hoon `zing` on selected finite inputs, not on Jibb execution. Hoon’s raw helper additionally accepts heterogeneous noun lists, which the Jibb signature does not express. Backend lowering and jet recognition remain unverified.
77+
78+The experimental deferred constructor transaction conservatively declines general structural tuple fits, most branches, field reads, nonidentical successful call/cast fits, and multi-argument calls with open argument, sample or result types. This prevents a later substitution from invalidating an earlier face-propagation check; cases requiring deferred structural fits remain unsupported. It can retry source definitions after later dependencies become available, and a two-arm boolean branch can retain separately owned literal-result obligations until a later closed context resolves them. Faced targets or union cases, list literals and general union-pattern branches remain unsupported.
79+
80+The checked inference slice now represents `!!`, proves empty cell positions and filters proven-empty union cases. List and unit payload arms whose elements are empty are rejected as unreachable; fixed opaque cases fail closed when reachability is unknown. The new shared guard covers checked interfaces, partial diagnostics and proof budgets. Its shared guard runs under eval and on the ship.
81+
5082An eval and ship fixture now reports partial inference for the unchanged todo island with its real API and Hoon readers. It verifies that the source fixtures match `my-app` and exercises missing or duplicate imports; the report does not claim the module or island has been checked. The prelude also has a Jibb-written recursive `lent` whose supported generic calls infer `@ud`. Execution and shape-based jet recognition remain future backend work. Nested union tests check equal runtime nouns, different nested tags, empty fields and unknown inhabitation.
5183
84+The prelude now writes `lth`, `gte` and `lte` in Jibb using `gth` and `not`. Supported generic and concrete calls infer, including loobeans; mismatched explicit auras fail. Execution, jet recognition and complete import checking remain unfinished.
85+
86+The prelude also writes `trip` and `tuba` over private primitives, with inferred cord, tape and UTF-32 list types matching the target ship's Hoon 135 definitions. Their composition with `lent` and invalid argument controls pass under eval and on the ship; primitive lowering, execution and jet recognition remain unfinished. In the unchanged todo report, `update` now reaches its remaining branch-context limitation instead of failing on missing text names.
87+
88+The Hoon reader can prove overlaps among supported original `$?` source cases, including nested cells and unions with more than two cases, and report them at a Jibb use site. It evaluates each case independently and compares runtime noun values. Other overlaps, Hoon case locations and mark-reader overlap diagnostics remain unfinished. The source screen allows at most 128 cases and 4,096 source noun nodes; dependency checking and pairwise witness analysis each have a separate 4,096-node budget. These budgets do not bound chapter lookup, Hoon evaluation or graph walks.
89+
90+Restricted-number promotion now skips an environment scan when a definition has no written capitals. In a single startup-inclusive pair on 2,000 independent gates, output was identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds with other checks running. This is a partial-inference measurement, not a complete checker or a bound on dependent modules.
91+
5292## Milestone 1: parser and mark
5393
5494What the plan asks for, and where it is:
@@ -65,8 +105,8 @@ What the plan asks for, and where it is:
65105
66106Besides the plan's list:
67107
68−- 651 golden cases: 431 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.
69−- The 651-case corpus passed under `urbit eval` in 106.1 s while other checks were running. The fake ship passed all 683 tests, including the importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report, with 77.1 s for sync and 77.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.
108+- 660 golden cases: 440 that parse and 220 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
109+- The 660-case corpus passed under `urbit eval` in 101.8 s while other checks were running. The fake ship passed all 715 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 104.1 s while other checks were running. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
70110- `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.
71111- 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.
72112- 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).
@@ -164,17 +204,47 @@ Besides the plan's list:
164204| 72acdb3 | 2026-10-31 | Infer selected nested union payloads from context |
165205| 706035c | 2026-10-31 | Analyze gate-free source molds with field witnesses |
166206| 651b8ec | 2026-10-31 | Match source-proven gate samples in direct calls |
167−| This change | 2026-10-31 | Add source-backed list length and real todo regression |
207+| cc8e389 | 2026-10-31 | Add source-backed list length and real todo regression |
208+| 4da6891 | 2026-10-31 | Add source-backed comparisons and nested Hoon union controls |
209+| 09db390 | 2026-10-31 | Skip unnecessary inference environment scans |
210+| 179d717 | 2026-10-31 | Diagnose source-proven Hoon union overlaps |
211+| 142f2e2 | 2026-10-31 | Prove structural overlaps across Hoon union cases |
212+| c96597d | 2026-10-31 | Track source-proven generic recursive identities |
213+| 190a9d5 | 2026-10-31 | Add source-backed list flattening |
214+| d9d51e6 | 2026-10-31 | Check source-proven recursive tree construction |
215+| 30b0a9e | 2026-10-31 | Match source-proven recursive tree cases |
216+| 72d85ab | 2026-10-31 | Add bounded deferred inference and expand runtime equality coverage |
217+| 22f3788 | 2026-10-31 | Check empty molds and propagate closed cell context into branches |
218+| 341bcb4 | 2026-10-31 | Keep deferred fits stable under later substitutions |
219+| b93a94b | 2026-10-31 | Prove local generic-alias union tags and add successor |
220+| 2826c93 | 2026-10-31 | Report generic-alias overlaps and retain deferred branch contexts |
221+| b5cdc80 | 2026-10-31 | Preserve full-module overlap source evidence |
222+| ab6fdc1 | 2026-10-31 | Add source-backed text conversion wrappers |
223+| aa277c9 | 2026-10-31 | Recover prepared tuple initializers in partial reports |
224+| b4703e7 | 2026-11-01 | Check narrow closed subscription-free program mains |
225+| 26bf7a7 | 2026-11-01 | Recover narrow direct-program initializer contexts |
226+| 642d2c0 | 2026-11-01 | Prove direct request-value watchability for program subscriptions |
227+| 2e4d582 | 2026-11-01 | Add the source-backed UI, program and page prelude slice |
228+| a163965 | 2026-11-01 | Recover direct-program update result contexts |
229+| 46748b0 | 2026-11-01 | Check the unchanged todo island through component recovery |
230+| 1e17d5f | 2026-11-01 | Check static and direct data-page mains |
231+| 0517053 | 2026-11-01 | Add the theme mold and require explicit unit syntax |
232+| This change | 2026-11-01 | Check the unchanged cart store and basket |
168233
169234## Checking it
170235
171236On a machine set up as [development.md](development.md) says:
172237
173238```
174−tools/golden # 649 cases under urbit eval
239+tools/golden # 660 cases under urbit eval
175240tools/importer-test # the Hoon importer fixture projection
176241tools/type-import-default-test # default-wrapped source proof golden
177242tools/type-import-test # the importer/checker bridge fixture
243+tools/type-import-overlap-test # source-aware Hoon overlap and provenance fixture
244+tools/type-import-structural-test # structural overlap and multi-case source fixture
245+tools/type-union-source-test # local generic-alias union guards
246+tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
247+tools/type-full-overlap-test # full-module overlap evidence
178248tools/type-tlon-test # the real Tlon reader/checker fixture
179249tools/type-mark-test # the mark/checker bridge fixture
180250tools/type-poke-test # the source-backed poke/API fixture
@@ -183,17 +253,32 @@ tools/type-api-paths-test # partial API path metadata fixture
183253tools/type-hole-guards-test # hole defaulting and API interface guards
184254tools/type-list-alias-test # prelude list-alias guards
185255tools/type-generic-alias-test # generic union alias guards
256+tools/type-generic-recursion-test # source-proven generic recursion guards
257+tools/type-generic-construction-test # source-proven recursive construction guards
258+tools/type-generic-pattern-test # source-proven recursive pattern guards
259+tools/type-deferred-test # source-owned deferred inference guards
260+tools/type-deferred-resolver-test # resolver consistency and failure guards
261+tools/type-deferred-context-test # deferred source-order and branch guards
262+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
263+tools/type-empty-test # empty molds and coverage guards
264+tools/type-cell-branch-test # branch context and rollback guards
186265tools/type-positional-face-guards-test # positional sample face guards
187266tools/type-qath-guards-test # qath source and unfolding guards
188267tools/type-ask-guards-test # ask source and bootstrap guards
189268tools/type-proj-guards-test # projection evidence and scope guards
269+tools/type-theme-test # byte-identical real theme, exact type and rejection guards
190270tools/type-module-scope-test # module and prelude scope fixture
271+tools/type-program-main-test # closed program-main interface and rejection guards
272+tools/type-program-init-test # transactional direct-program initializer context guards
273+tools/type-program-update-test # transactional direct-program update context guards
274+tools/type-program-watch-test # direct request-value watchability guards
275+tools/type-todo-full-test # byte-identical full todo and rejection guards
191276tools/hoon check-spans-test # prints <<>> when the span checker works
192277tools/testdata/selftest # the tools themselves
193278tools/doc-blocks docs/spec # the doc's examples are golden cases
194279tools/ship start
195280tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
196−tools/ship test # the same 649 cases as -test arms on the ship
281+tools/ship test # the same 660 cases as -test arms on the ship
197282tools/testdata/ship-selftest
198283tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
199284tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb-import.hoon+181−6
@@ -47,7 +47,7 @@
4747 ==
4848+$ import-diagnostic
4949 $% [%ok value=imported]
50− [%invalid code=?(%aura %core) message=@t]
50+ [%invalid code=?(%aura %core %overlap) message=@t]
5151 [%unsupported message=@t]
5252 ==
5353+$ signatures (list [name=term code=hoon])
@@ -132,6 +132,35 @@
132132 =/ rest $(cases t.cases, tags [u.tag tags])
133133 ?~ rest ~
134134 `[[u.tag i.cases] u.rest]
135+
136+::
137+:: Bound the new $? branch screen independently of the existing $% path.
138+:: Count raw noun nodes across all cases, and cap pairwise tag comparisons.
139+++ bounded-no-spec-unions
140+ |= [h=* fuel=@ud]
141+ ^- (unit @ud)
142+ ?: =(fuel 0) ~
143+ =. fuel (dec fuel)
144+ ?@ h `fuel
145+ ?: ?=([%bckt ^ ^] h) ~
146+ ?: ?=([%bcwt [^ [^ *]]] h) ~
147+ ?: ?=([%bccn [^ [^ *]]] h) ~
148+ =/ left=(unit @ud) $(h -.h)
149+ ?~ left ~
150+ $(h +.h, fuel u.left)
151+++ tagged-bounded-cases
152+ |= [cases=(list spec) tags=(list @) fuel=@ud left=@ud]
153+ ^- (unit (list tagged-case))
154+ ?~ cases `~
155+ ?: =(left 0) ~
156+ =/ remaining=(unit @ud) (bounded-no-spec-unions i.cases fuel)
157+ ?~ remaining ~
158+ =/ tag=(unit @) (tagged-head i.cases)
159+ ?~ tag ~
160+ ?: (lien tags |=(x=@ =(x u.tag))) ~
161+ =/ rest $(cases t.cases, tags [u.tag tags], fuel u.remaining, left (dec left))
162+ ?~ rest ~
163+ `[[u.tag i.cases] u.rest]
135164::
136165:: Benign source annotations have different typed representations on
137166:: Clay and under eval. Inspect the wrapper as a noun, and validate the
@@ -170,11 +199,19 @@
170199 ?~ found ~
171200 =/ body=(unit spec) (tagged-default-union u.found 4)
172201 ?~ body ~
173− ?. ?=([%bccn *] u.body) ~
174− =/ cases=(list spec) p.u.body
175− ?~ cases ~
176− ?~ t.cases ~
177− (tagged-cases cases ~)
202+ ?- u.body
203+ [%bccn *]
204+ =/ cases=(list spec) p.u.body
205+ ?~ cases ~
206+ ?~ t.cases ~
207+ (tagged-cases cases ~)
208+ [%bcwt *]
209+ =/ cases=(list spec) p.u.body
210+ ?~ cases ~
211+ ?~ t.cases ~
212+ (tagged-bounded-cases cases ~ 4.096 128)
213+ * ~
214+ ==
178215::
179216:: Source proof for dependencies of an explicitly tagged union. Only
180217:: simple local molds, standard collections and distinct term enums are
@@ -346,6 +383,140 @@
346383 ?. ?=([%cell [%atom %tas [~ @]] *] i.ys) ~
347384 ?. =(tag.i.xs u.value.head.i.ys) ~
348385 $(xs t.xs, ys t.ys)
386+
387+::
388+:: Unlike the disjoint-reader fallback, source overlap may have repeated
389+:: tags. Bound both raw case traversal and the number of pair attempts.
390+++ overlap-source-cases
391+ |= [cases=(list spec) fuel=@ud left=@ud]
392+ ^- (unit (list tagged-case))
393+ ?~ cases `~
394+ ?: =(left 0) ~
395+ =/ remaining=(unit @ud) (bounded-no-spec-unions i.cases fuel)
396+ ?~ remaining ~
397+ =/ tag=(unit @) (tagged-head i.cases)
398+ ?~ tag ~
399+ =/ rest $(cases t.cases, fuel u.remaining, left (dec left))
400+ ?~ rest ~
401+ `[[u.tag i.cases] u.rest]
402+++ overlap-repeated-tag
403+ |= cases=(list tagged-case)
404+ ^- ?
405+ ?~ cases |
406+ ?: (lien t.cases |=(c=tagged-case =(tag.c tag.i.cases))) &
407+ $(cases t.cases)
408+++ overlap-projections-match
409+ |= [xs=(list tagged-case) ys=(list imported)]
410+ ^- ?
411+ ?~ xs ?=(~ ys)
412+ ?~ ys |
413+ ?. ?=([%cell [%atom %tas [~ @]] *] i.ys) |
414+ ?. =(tag.i.xs u.value.head.i.ys) |
415+ $(xs t.xs, ys t.ys)
416+++ overlap-source-witness
417+ |= [module=term name=term cor=type]
418+ ^- ?
419+ ?. ?=([%core *] cor) |
420+ =/ selected=(unit hoon) (local-arm-source cor name)
421+ ?~ selected |
422+ =/ shape=(unit spec) (local-mold-spec u.selected name)
423+ ?~ shape |
424+ =/ body=(unit spec) (tagged-default-union u.shape 4)
425+ ?~ body |
426+ ?. ?=([%bcwt *] u.body) |
427+ =/ cases=(unit (list tagged-case)) (overlap-source-cases p.u.body 4.096 128)
428+ ?~ cases |
429+ ?. (overlap-repeated-tag u.cases) |
430+ ?. ?=(^ (safe-source-tagged-fuel-mode u.cases cor ~[name] 4.096 |)) |
431+ =/ tried=(each (list type) tang)
432+ (mule |.((turn u.cases |=(c=tagged-case (~(play ut cor) [%kttr branch.c])))))
433+ ?. ?=([%& *] tried) |
434+ =/ projected=(each (list imported) tang)
435+ (mule |.((turn p.tried |=(t=type (walk module t catalog ~ `cor)))))
436+ ?. ?=([%& *] projected) |
437+ ?^ (first-bads p.projected) |
438+ ?. (overlap-projections-match u.cases p.projected) |
439+ =/ witness=(unit overlap-proof-result) (overlap-case-pairs p.projected 4.096)
440+ ?~ witness |
441+ found.u.witness
442+::
443+:: Positive overlap evidence only: false means no proof, not disjointness.
444+:: Fuel is shared across all examined nodes and sibling alternatives.
445++$ overlap-proof-result [found=? left=@ud]
446+++ overlap-known-atom
447+ |= aura=term
448+ ^- ?
449+ (lien `(list term)`~[%t %tas %ud %f] |=(n=term =(n aura)))
450+++ overlap-inhabited-list
451+ |= [xs=(list imported) fuel=@ud]
452+ ^- (unit overlap-proof-result)
453+ ?~ xs `[| fuel]
454+ ?: =(0 fuel) ~
455+ =/ one=(unit overlap-proof-result) (overlap-inhabited i.xs (dec fuel))
456+ ?~ one ~
457+ ?: found.u.one one
458+ $(xs t.xs, fuel left.u.one)
459+++ overlap-inhabited
460+ |= [x=imported fuel=@ud]
461+ ^- (unit overlap-proof-result)
462+ ?: =(0 fuel) ~
463+ =. fuel (dec fuel)
464+ ?- x
465+ [%noun *] `[& fuel]
466+ [%void *] `[| fuel]
467+ [%atom *] `[|(?=(^ value.x) (overlap-known-atom aura.x)) fuel]
468+ [%face *] $(x body.x)
469+ [%named *] $(x body.x)
470+ [%fork *] (overlap-inhabited-list cases.x fuel)
471+ [%cell *]
472+ =/ a=(unit overlap-proof-result) $(x head.x)
473+ ?~ a ~
474+ ?. found.u.a a
475+ $(x tail.x, fuel left.u.a)
476+ * `[| fuel]
477+ ==
478+++ overlap-pair-list
479+ |= [xs=(list imported) y=imported fuel=@ud]
480+ ^- (unit overlap-proof-result)
481+ ?~ xs `[| fuel]
482+ ?: =(0 fuel) ~
483+ =/ p=(unit overlap-proof-result) (overlap-pair i.xs y (dec fuel))
484+ ?~ p ~
485+ ?: found.u.p p
486+ $(xs t.xs, fuel left.u.p)
487+++ overlap-pair
488+ |= [a=imported b=imported fuel=@ud]
489+ ^- (unit overlap-proof-result)
490+ ?: =(0 fuel) ~
491+ =. fuel (dec fuel)
492+ ?: ?=([%face *] a) $(a body.a)
493+ ?: ?=([%face *] b) $(b body.b)
494+ ?: ?=([%named *] a) $(a body.a)
495+ ?: ?=([%named *] b) $(b body.b)
496+ ?: ?=([%fork *] a) (overlap-pair-list cases.a b fuel)
497+ ?: ?=([%fork *] b) (overlap-pair-list cases.b a fuel)
498+ ?: ?=([%noun *] a) (overlap-inhabited b fuel)
499+ ?: ?=([%noun *] b) (overlap-inhabited a fuel)
500+ ?: &(?=([%cell *] a) ?=([%cell *] b))
501+ =/ p=(unit overlap-proof-result) $(a head.a, b head.b)
502+ ?~ p ~
503+ ?. found.u.p p
504+ $(a tail.a, b tail.b, fuel left.u.p)
505+ ?. &(?=([%atom *] a) ?=([%atom *] b)) `[| fuel]
506+ ?^ value.a
507+ ?^ value.b `[=(u.value.a u.value.b) fuel]
508+ `[&(=(u.value.a 0) (overlap-known-atom aura.b)) fuel]
509+ ?^ value.b `[&(=(u.value.b 0) (overlap-known-atom aura.a)) fuel]
510+ `[&((overlap-known-atom aura.a) (overlap-known-atom aura.b)) fuel]
511+++ overlap-case-pairs
512+ |= [xs=(list imported) fuel=@ud]
513+ ^- (unit overlap-proof-result)
514+ ?~ xs `[| fuel]
515+ ?: =(0 fuel) ~
516+ =/ p=(unit overlap-proof-result) (overlap-pair-list t.xs i.xs (dec fuel))
517+ ?~ p ~
518+ ?: found.u.p p
519+ $(xs t.xs, fuel left.u.p)
349520::
350521:: +read-mold-in: accept the /sur core as provenance. The core must be
351522:: built against zuse or validated Ford imports, and its selected arm
@@ -361,6 +532,8 @@
361532 [%| (crip "Hoon mold `{(trip name)}` is not declared")]
362533 ?. =(typ (~(play ut cor) (ream (cat 3 '*' name))))
363534 [%| 'Hoon module provenance does not match the selected mold']
535+ =/ overlap=(each ? tang) (mule |.((overlap-source-witness module name cor)))
536+ ?: &(?=(%& -.overlap) p.overlap) [%| 'Hoon union cases overlap']
364537 =/ result (read-with module name typ [~ cor])
365538 ?: ?=([%& *] result) result
366539 =/ fallback=(each (unit (each imported @t)) tang)
@@ -461,6 +634,8 @@
461634 [%unsupported p.result]
462635 =/ selected=(each type tang) (mule |.((~(play ut cor) (ream (cat 3 '*' name)))))
463636 ?. ?=(%& -.selected) [%unsupported p.result]
637+ =/ overlap=(each ? tang) (mule |.((overlap-source-witness module name cor)))
638+ ?: &(?=(%& -.overlap) p.overlap) [%invalid %overlap 'Hoon union cases overlap']
464639 =/ again=(each imported tang) (mule |.((walk module p.selected catalog ~ [~ cor])))
465640 ?. ?=(%& -.again) [%unsupported p.result]
466641 =/ evidence=(unit import-diagnostic) (first-invalid p.again)
jibb-dev/lib/jibb.hoon+3363−103
@@ -4607,6 +4607,8 @@
46074607:: Atom constraints tied to an explicit capital or an inferred sample
46084608:: are generalized and printed. Other aura variables remain unsupported until
46094609:: their defaulting and inferred generalization are implemented.
4610+:: Restricted-number promotion considers written capitals only; if there
4611+:: are none, it skips the otherwise unnecessary environment traversal.
46104612:: Bare @ is a separate unrestricted atom type. A directional fit check
46114613:: permits concrete atoms to widen to it, never the reverse. A fit that
46124614:: needs a not-yet-implemented constraint remains unsupported. Named unions
@@ -4665,11 +4667,13 @@
46654667 [%any-atom ~]
46664668 [%flag ~]
46674669 [%noun ~]
4670+ [%empty ~]
46684671 [%tag id=@ud literal=lit constructor=?]
46694672 [%const literal=lit]
46704673 [%collection name=term args=(list itype)]
46714674 [%recursive module=term name=term label=(unit @t)]
46724675 [%jrec at=path name=term label=(unit @t) head=term aura=@ta tail=term]
4676+ [%grec at=path name=term label=(unit @t) proof=shape args=(list itype)]
46734677 [%union cases=(list itype) origin=(unit [at=path name=term]) label=(unit @t) args=(list itype)]
46744678 [%face name=term body=itype]
46754679 [%fn sample=itype product=itype]
@@ -4722,6 +4726,88 @@
47224726 $(t u.found)
47234727 ==
47244728::
4729+:: Prove only emptiness; unknown types are never treated as empty.
4730+:: A shared node budget bounds each proof attempt.
4731+++ itype-empty-cases
4732+ |= [xs=(list itype) sub=isub fuel=@ud]
4733+ ^- (unit [empty=? left=@ud])
4734+ ?~ xs `[& fuel]
4735+ =/ first=(unit [empty=? left=@ud]) (itype-empty-proof i.xs sub fuel)
4736+ ?~ first ~
4737+ ?. empty.u.first `[| left.u.first]
4738+ $(xs t.xs, fuel left.u.first)
4739+++ itype-empty-proof
4740+ |= [typ=itype sub=isub fuel=@ud]
4741+ ^- (unit [empty=? left=@ud])
4742+ ?: =(0 fuel) ~
4743+ =. fuel (dec fuel)
4744+ =. typ (itype-walk typ sub)
4745+ ?- -.typ
4746+ %empty `[& fuel]
4747+ %face $(typ body.typ)
4748+ %cell
4749+ =/ left=(unit [empty=? left=@ud]) $(typ hed.typ)
4750+ ?~ left ~
4751+ ?: empty.u.left `[& left.u.left]
4752+ $(typ tal.typ, fuel left.u.left)
4753+ %union (itype-empty-cases cases.typ sub fuel)
4754+ * `[| fuel]
4755+ ==
4756+:: Prove reachability separately from emptiness. An unresolved fixed
4757+:: recursive type is not presumed inhabited. A written, still-unconstrained
4758+:: capital is existentially inhabited for pattern reachability; the normal
4759+:: definition-boundary checks reject subsequently constrained capitals.
4760+++ itype-inhabited-cases
4761+ |= [xs=(list itype) sub=isub caps=icaps fuel=@ud pending=?]
4762+ ^- (unit [result=?(%yes %no %unknown) left=@ud])
4763+ ?~ xs `[?:(pending %unknown %no) fuel]
4764+ =/ first=(unit [result=?(%yes %no %unknown) left=@ud])
4765+ (itype-inhabited-proof i.xs sub caps fuel)
4766+ ?~ first ~
4767+ ?: =(%yes result.u.first) first
4768+ $(xs t.xs, fuel left.u.first, pending |(pending =(%unknown result.u.first)))
4769+++ itype-inhabited-proof
4770+ |= [typ=itype sub=isub caps=icaps fuel=@ud]
4771+ ^- (unit [result=?(%yes %no %unknown) left=@ud])
4772+ ?: =(0 fuel) ~
4773+ =. fuel (dec fuel)
4774+ =. typ (itype-walk typ sub)
4775+ ?- -.typ
4776+ %empty `[%no fuel]
4777+ ?(%atom %any-atom %flag %const %noun %avar %rvar %nvar %rnvar %fn %jrec) `[%yes fuel]
4778+ %var
4779+ ?: (lien caps |=(c=icap (hole-same-variable typ (itype-walk [%var id.c] sub)))) `[%yes fuel]
4780+ `[%unknown fuel]
4781+ %face $(typ body.typ)
4782+ %cell
4783+ =/ head=(unit [result=?(%yes %no %unknown) left=@ud]) $(typ hed.typ)
4784+ ?~ head ~
4785+ ?: =(%no result.u.head) head
4786+ =/ tail=(unit [result=?(%yes %no %unknown) left=@ud]) $(typ tal.typ, fuel left.u.head)
4787+ ?~ tail ~
4788+ ?: =(%no result.u.tail) tail
4789+ ?: |(=(%unknown result.u.head) =(%unknown result.u.tail)) `[%unknown left.u.tail]
4790+ `[%yes left.u.tail]
4791+ %union (itype-inhabited-cases cases.typ sub caps fuel |)
4792+ %collection
4793+ ?. &(|(=(%list name.typ) =(%unit name.typ)) ?=([* ~] args.typ)) `[%unknown fuel]
4794+ `[%yes fuel]
4795+ %grec ?:((grec-tree-proof name.typ proof.typ) `[%yes fuel] `[%unknown fuel])
4796+ * `[%unknown fuel]
4797+ ==
4798+++ itype-live-cases
4799+ |= [xs=(list itype) sub=isub caps=icaps fuel=@ud]
4800+ ^- (unit (list itype))
4801+ ?~ xs `~
4802+ =/ first=(unit [result=?(%yes %no %unknown) left=@ud])
4803+ (itype-inhabited-proof i.xs sub caps fuel)
4804+ ?~ first ~
4805+ ?: =(%unknown result.u.first) ~
4806+ =/ rest=(unit (list itype)) $(xs t.xs, fuel left.u.first)
4807+ ?~ rest ~
4808+ ?: =(%no result.u.first) rest
4809+ `[i.xs u.rest]
4810+::
47254811++ itype-occurs
47264812 |= [n=@ud t=itype sub=isub]
47274813 ^- ?
@@ -4736,11 +4822,13 @@
47364822 %any-atom |
47374823 %flag |
47384824 %noun |
4825+ %empty |
47394826 %tag =(n id.t)
47404827 %const |
47414828 %union |((lien cases.t |=(c=itype (itype-occurs n c sub))) (lien args.t |=(c=itype (itype-occurs n c sub))))
47424829 %recursive |
47434830 %jrec |
4831+ %grec (lien args.t |=(c=itype (itype-occurs n c sub)))
47444832 %collection (lien args.t |=(c=itype (itype-occurs n c sub)))
47454833 %face $(t body.t)
47464834 %fn |($(t sample.t) $(t product.t))
@@ -4759,6 +4847,9 @@
47594847 =. a (itype-walk a sub)
47604848 =. b (itype-walk b sub)
47614849 ?: =(a b) `sub
4850+ ?: &(?=(%grec -.a) ?=(%grec -.b))
4851+ ?. &(=(at.a at.b) =(name.a name.b)) ~
4852+ (itype-unify-args args.a args.b sub)
47624853 ?: &(?=(%jrec -.a) ?=(%jrec -.b))
47634854 ?:(&(=(at.a at.b) =(name.a name.b) =(head.a head.b) =(aura.a aura.b) =(tail.a tail.b)) `sub ~)
47644855 ?: &(?=(%recursive -.a) ?=(%recursive -.b))
@@ -4864,11 +4955,13 @@
48644955 %any-atom &
48654956 %flag |
48664957 %noun |
4958+ %empty |
48674959 %tag |
48684960 %const |
48694961 %union |((lien cases.t |=(c=itype (itype-has-any-atom c sub))) (lien args.t |=(c=itype (itype-has-any-atom c sub))))
48704962 %recursive |
48714963 %jrec |
4964+ %grec (lien args.t |=(c=itype (itype-has-any-atom c sub)))
48724965 %collection (lien args.t |=(c=itype (itype-has-any-atom c sub)))
48734966 %face $(t body.t)
48744967 %fn |($(t sample.t) $(t product.t))
@@ -4938,11 +5031,13 @@
49385031 %any-atom &
49395032 %flag &
49405033 %noun |
5034+ %empty |
49415035 %tag &
49425036 %const &
49435037 %union |((lien cases.typ |=(c=itype (itype-has-fixed-atom c))) (lien args.typ |=(c=itype (itype-has-fixed-atom c))))
49445038 %recursive |
49455039 %jrec |
5040+ %grec (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
49465041 %collection (lien args.typ |=(c=itype (itype-has-fixed-atom c)))
49475042 %face $(typ body.typ)
49485043 %fn |($(typ sample.typ) $(typ product.typ))
@@ -4971,6 +5066,7 @@
49715066 ^- ?
49725067 =. t (itype-walk t sub)
49735068 ?- -.t
5069+ %grec (lien args.t |=(c=itype (itype-has-face c sub)))
49745070 %collection (lien args.t |=(c=itype (itype-has-face c sub)))
49755071 %face &
49765072 %cell |($(t hed.t) $(t tal.t))
@@ -5027,6 +5123,9 @@
50275123 ^- ?
50285124 =. a (itype-walk a sub)
50295125 =. b (itype-walk b sub)
5126+ ?: &(?=(%grec -.a) ?=(%grec -.b))
5127+ ?. &(=(at.a at.b) =(name.a name.b)) |
5128+ (itype-face-asym-collection-args args.a args.b sub)
50305129 ?: &(?=(%collection -.a) ?=(%collection -.b))
50315130 ?. =(name.a name.b) |
50325131 (itype-face-asym-collection-args args.a args.b sub)
@@ -5089,6 +5188,7 @@
50895188 %union &
50905189 %recursive &
50915190 %jrec &
5191+ %grec &
50925192 %noun &
50935193 %collection &
50945194 %face $(t body.t)
@@ -5118,6 +5218,7 @@
51185218 ^- ?
51195219 ?- -.t
51205220 %tag &
5221+ %grec (lien args.t |=(c=itype (itype-has-tag c)))
51215222 %collection (lien args.t |=(c=itype (itype-has-tag c)))
51225223 %face $(t body.t)
51235224 %fn |($(t sample.t) $(t product.t))
@@ -5131,6 +5232,7 @@
51315232 ^- ?
51325233 ?- -.t
51335234 %union &
5235+ %grec (lien args.t |=(c=itype (itype-has-union c)))
51345236 %collection (lien args.t |=(c=itype (itype-has-union c)))
51355237 %face $(t body.t)
51365238 %fn |($(t sample.t) $(t product.t))
@@ -5149,6 +5251,7 @@
51495251 %union
51505252 ?: &(?=(~ label.t) ?=(^ args.t)) &
51515253 (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-generic c)))
5254+ %grec |(?=(~ label.t) (lien args.t |=(c=itype (itype-has-hidden-generic c))))
51525255 %collection (lien args.t |=(c=itype (itype-has-hidden-generic c)))
51535256 %face $(t body.t)
51545257 %fn |($(t sample.t) $(t product.t))
@@ -5162,6 +5265,7 @@
51625265 ?- -.t
51635266 %recursive &
51645267 %jrec &
5268+ %grec &
51655269 %collection (lien args.t |=(c=itype (itype-has-recursive c)))
51665270 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-recursive c)))
51675271 %face $(t body.t)
@@ -5176,6 +5280,7 @@
51765280 ?- -.t
51775281 %recursive ?=(~ label.t)
51785282 %jrec ?=(~ label.t)
5283+ %grec |(?=(~ label.t) (lien args.t |=(c=itype (itype-has-hidden-recursive c))))
51795284 %collection (lien args.t |=(c=itype (itype-has-hidden-recursive c)))
51805285 %union (lien (weld args.t cases.t) |=(c=itype (itype-has-hidden-recursive c)))
51815286 %face $(t body.t)
@@ -5221,7 +5326,7 @@
52215326 ?: ?=(%var -.raw)
52225327 $(cases t.cases, pending &)
52235328 =/ c=itype (itype-walk raw sub)
5224− ?: ?=(?(%var %tag %recursive %jrec %union %face) -.c)
5329+ ?: ?=(?(%var %tag %recursive %jrec %grec %union %face) -.c)
52255330 $(cases t.cases, pending &)
52265331 ?. ?=(%cell -.c) $(cases t.cases)
52275332 =/ raw-head=itype hed.c
@@ -5234,7 +5339,7 @@
52345339 ?: ?=(?(%atom %any-atom %flag %avar %rvar %nvar %rnvar) -.body.head)
52355340 $(cases t.cases)
52365341 $(cases t.cases, pending &)
5237− ?: ?=(?(%var %tag %recursive %jrec %union) -.head)
5342+ ?: ?=(?(%var %tag %recursive %jrec %grec %union) -.head)
52385343 $(cases t.cases, pending &)
52395344 ?. ?=(%const -.head) $(cases t.cases)
52405345 ?. =(val.literal.head val.tag) $(cases t.cases)
@@ -5252,7 +5357,14 @@
52525357++ itype-fit
52535358 |= [actual=itype expected=itype sub=isub next=@ud]
52545359 ^- ifit
5255− (itype-fit-inner actual expected sub next | |)
5360+ =/ result=ifit (itype-fit-inner actual expected sub next | |)
5361+ ?: ?=(%ok -.result) result
5362+ =/ source=itype (itype-walk actual sub)
5363+ ?. ?=(?(%empty %face %cell %union) -.source) result
5364+ =/ empty=(unit [empty=? left=@ud]) (itype-empty-proof actual sub 256)
5365+ ?~ empty [%unknown ~]
5366+ ?: empty.u.empty [%ok sub next]
5367+ result
52565368++ itype-fit-inner
52575369 |= [actual=itype expected=itype sub=isub next=@ud skip-width=? spine-proof=?]
52585370 ^- ifit
@@ -5271,6 +5383,7 @@
52715383 =. actual (itype-walk actual sub)
52725384 =. expected (itype-walk expected sub)
52735385 ?: =(actual expected) [%ok sub next]
5386+ ?: &(?=(%empty -.expected) |(?=(%cell -.actual) ?=(%face -.actual) ?=(%union -.actual) ?=(%grec -.actual) ?=(%recursive -.actual))) [%unknown ~]
52745387 :: The relation of the source loobean mold to explicit @f is not yet
52755388 :: established. Keep it unsupported rather than asserting a mismatch.
52765389 ?: &(?=(%flag -.actual) ?=(%atom -.expected) =(%f aura.expected)) [%unknown ~]
@@ -5283,6 +5396,14 @@
52835396 [%ok sub next]
52845397 :: An arbitrary noun is not known to fit a narrower type.
52855398 ?: &(?=(%noun -.actual) !?=(%var -.expected)) [%unknown ~]
5399+ ?: &(!uncertain ?=(%grec -.actual) ?=(%face -.expected)) $(expected body.expected)
5400+ ?: &(!uncertain ?=(%face -.actual) ?=(%grec -.expected)) $(actual body.actual)
5401+ ?: &(?=(%grec -.actual) ?=(%grec -.expected))
5402+ ?. &(=(at.actual at.expected) =(name.actual name.expected)) [%unknown ~]
5403+ =/ matched=(unit isub) (itype-unify-args args.actual args.expected sub)
5404+ ?~ matched [%unknown ~]
5405+ [%ok u.matched next]
5406+ ?: &(|(?=(%grec -.actual) ?=(%grec -.expected)) !|(?=(%var -.actual) ?=(%var -.expected))) [%unknown ~]
52865407 ?: &(!uncertain ?=(%jrec -.actual) ?=(%face -.expected)) $(expected body.expected)
52875408 ?: &(!uncertain ?=(%face -.actual) ?=(%jrec -.expected)) $(actual body.actual)
52885409 ?: &(?=(%jrec -.actual) ?=(%jrec -.expected))
@@ -5502,10 +5623,14 @@
55025623:: of an arbitrary ask value. Reader graphs and source inputs are trusted.
55035624+$ irequest-evidence
55045625 [api-at=path name=term path=iapi-path-typed api-source=@t public-source=@t internal-source=@t prelude-values=(list term) prelude-molds=(list term) externals=iexternals marks=imark-externals]
5626+:: Store requests have their own source-bound evidence. In particular, an
5627+:: API path certificate cannot make a store state member watchable, or vice versa.
5628++$ istore-request-evidence
5629+ [store-at=path source=@t state=itype action-name=term action=itype]
55055630:: A unit distinguishes a verified empty closure from a detached legacy file.
55065631:: The opaque prelude is an exact trusted input, not a recursive interface mold.
55075632+$ irequest-graph
5508− [paths=(set path) requests=(list irequest-evidence) bundle-input=* prelude-input=* prelude-values=(list term) prelude-molds=(list term) externals=iexternals marks=imark-externals]
5633+ [paths=(set path) requests=(list irequest-evidence) stores=(list istore-request-evidence) bundle-input=* prelude-input=* prelude-values=(list term) prelude-molds=(list term) externals=iexternals marks=imark-externals]
55095634+$ ifile [values=ienv molds=imold-types at=path derived=(list iderived) elaborations=(list iwidth-definition) dependencies=(list iwidth-dependency) source=(unit @t) graph=(unit irequest-graph)]
55105635+$ ijimports (list [face=term interface=ifile])
55115636+$ icap [name=@t id=@ud at=span]
@@ -5651,6 +5776,7 @@
56515776 =/ head=igate-free $(typ hed.typ, path [[%head ~] path])
56525777 =/ tail=igate-free $(typ tal.typ, fuel left.head, path [[%tail ~] path])
56535778 =/ inhabited=? &(inhabited.head inhabited.tail)
5779+ ?: |(&(=(%yes verdict.head) !inhabited.head) &(=(%yes verdict.tail) !inhabited.tail)) [%yes | left.tail ~]
56545780 ?: &(=(%no verdict.head) inhabited.tail) head(left left.tail)
56555781 ?: &(=(%no verdict.tail) inhabited.head) tail
56565782 ?: |(!=(%yes verdict.head) !=(%yes verdict.tail)) [%unknown inhabited left.tail ~]
@@ -5664,6 +5790,7 @@
56645790 ?~ cases.typ [%unknown | fuel ~]
56655791 (gate-free-types cases.typ fuel path 0)
56665792 %noun [%unknown & fuel ~]
5793+ %empty [%yes | fuel ~]
56675794 %var [%unknown | fuel ~]
56685795 %avar [%yes & fuel ~]
56695796 %rvar [%yes & fuel ~]
@@ -5672,10 +5799,12 @@
56725799 %tag [%unknown | fuel ~]
56735800 %recursive [%unknown | fuel ~]
56745801 %jrec [%yes & fuel ~]
5802+ %grec [%unknown | fuel ~]
56755803 ==
56765804::
56775805+$ igate-prelude-evidence [iface=ifile gates=(map term def)]
5678−+$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) tags=(list ipending) in-mold=? at=path top-molds=(list term) prelude=(unit ifile) holes=(list ihole) jrec-fuel=@ud projections=(list iwprojection) gate-defs=(map term def) head-evidence=(unit igate-prelude-evidence)]
5806++$ dgo [left=itype right=itype at=span context=span]
5807++$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) params=iparams active=(list term) tags=(list ipending) in-mold=? at=path top-molds=(list term) prelude=(unit ifile) holes=(list ihole) jrec-fuel=@ud projections=(list iwprojection) gate-defs=(map term def) head-evidence=(unit igate-prelude-evidence) grec-index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)]) defer=(unit ~) obligations=(list dgo)]
56795808+$ idiag [msg=tape sites=(list [at=span note=tape])]
56805809+$ iresult (each [typ=itype state=istate] idiag)
56815810+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -5695,6 +5824,7 @@
56955824 |= [t=itype sub=isub]
56965825 ^- itype
56975826 =. t (itype-walk t sub)
5827+ ?: ?=(%grec -.t) t(args (turn args.t |=(c=itype (itype-normalize c sub))))
56985828 ?: ?=(%collection -.t) [%collection name.t (turn args.t |=(c=itype (itype-normalize c sub)))]
56995829 ?: ?=(%union -.t)
57005830 [%union (turn cases.t |=(c=itype (itype-normalize c sub))) origin.t label.t (turn args.t |=(c=itype (itype-normalize c sub)))]
@@ -5721,6 +5851,7 @@
57215851 %cell |($(t hed.t) $(t tal.t))
57225852 %recursive |
57235853 %jrec |
5854+ %grec &
57245855 %collection (lien args.t |=(c=itype (itype-has-gate c)))
57255856 %face $(t body.t)
57265857 %union (lien cases.t |=(c=itype (itype-has-gate c)))
@@ -5735,6 +5866,7 @@
57355866 %any-atom |
57365867 %flag |
57375868 %noun |
5869+ %empty |
57385870 ==
57395871::
57405872++ default-decimals
@@ -5744,6 +5876,7 @@
57445876 ?- -.t
57455877 %nvar [%atom %ud]
57465878 %rnvar [%atom %ud]
5879+ %grec t(args (turn args.t |=(c=itype (default-decimals c))))
57475880 %collection [%collection name.t (turn args.t |=(c=itype (default-decimals c)))]
57485881 %face [%face name.t $(t body.t)]
57495882 %cell [%cell $(t hed.t) $(t tal.t)]
@@ -5785,6 +5918,7 @@
57855918 %tag |
57865919 %any-atom &
57875920 %union &((levy cases.t |=(c=itype (hole-known c state))) (levy args.t |=(c=itype (hole-known c state))))
5921+ %grec (levy args.t |=(c=itype (hole-known c state)))
57885922 %collection (levy args.t |=(c=itype (hole-known c state)))
57895923 %face $(t body.t)
57905924 %fn &($(t sample.t) $(t product.t))
@@ -5794,6 +5928,8 @@
57945928++ promote-restricted-numbers
57955929 |= [state=istate env=ienv]
57965930 ^- istate
5931+ :: With no written capitals, there is nothing to promote.
5932+ ?~ caps.state state
57975933 =/ ids=(list @ud) (turn caps.state |=(c=icap id.c))
57985934 =/ free=(list @ud) (free-env-vars env sub.state)
57995935 |-
@@ -5830,6 +5966,7 @@
58305966 ?- -.t
58315967 ?(%tag %nvar %rnvar %avar %rvar) !(hole-known t state)
58325968 %union |((lien cases.t |=(c=itype (hole-uncertain c state))) (lien args.t |=(c=itype (hole-uncertain c state))))
5969+ %grec (lien args.t |=(c=itype (hole-uncertain c state)))
58335970 %collection (lien args.t |=(c=itype (hole-uncertain c state)))
58345971 %face $(t body.t)
58355972 %fn |($(t sample.t) $(t product.t))
@@ -5861,11 +5998,13 @@
58615998 %any-atom ~
58625999 %flag ~
58636000 %noun ~
6001+ %empty ~
58646002 %tag ~
58656003 %const ~
58666004 %union (zing (turn (weld args.t cases.t) |=(c=itype (itype-vars c))))
58676005 %recursive ~
58686006 %jrec ~
6007+ %grec (zing (turn args.t |=(c=itype (itype-vars c))))
58696008 %collection (zing (turn args.t |=(c=itype (itype-vars c))))
58706009 %face $(t body.t)
58716010 %fn (weld $(t sample.t) $(t product.t))
@@ -5909,11 +6048,13 @@
59096048 %any-atom t
59106049 %flag t
59116050 %noun t
6051+ %empty t
59126052 %tag t
59136053 %const t
59146054 %union [%union (turn cases.t |=(c=itype (itype-rename c ren))) origin.t label.t (turn args.t |=(c=itype (itype-rename c ren)))]
59156055 %recursive t
59166056 %jrec t
6057+ %grec t(args (turn args.t |=(c=itype (itype-rename c ren))))
59176058 %collection [%collection name.t (turn args.t |=(c=itype (itype-rename c ren)))]
59186059 %face [%face name.t $(t body.t)]
59196060 %fn [%fn $(t sample.t) $(t product.t)]
@@ -5936,11 +6077,13 @@
59366077 %any-atom |
59376078 %flag |
59386079 %noun |
6080+ %empty |
59396081 %tag |
59406082 %const |
59416083 %union |((lien cases.t |=(c=itype (itype-var-is-atom n c))) (lien args.t |=(c=itype (itype-var-is-atom n c))))
59426084 %recursive |
59436085 %jrec |
6086+ %grec (lien args.t |=(c=itype (itype-var-is-atom n c)))
59446087 %collection (lien args.t |=(c=itype (itype-var-is-atom n c)))
59456088 %face $(t body.t)
59466089 %fn |($(t sample.t) $(t product.t))
@@ -5959,11 +6102,13 @@
59596102 %any-atom |
59606103 %flag |
59616104 %noun |
6105+ %empty |
59626106 %tag |
59636107 %const |
59646108 %union |((lien cases.t |=(c=itype (itype-var-is-restricted n c))) (lien args.t |=(c=itype (itype-var-is-restricted n c))))
59656109 %recursive |
59666110 %jrec |
6111+ %grec (lien args.t |=(c=itype (itype-var-is-restricted n c)))
59676112 %collection (lien args.t |=(c=itype (itype-var-is-restricted n c)))
59686113 %face $(t body.t)
59696114 %fn |($(t sample.t) $(t product.t))
@@ -6260,6 +6405,7 @@
62606405 ^- upat
62616406 ?- -.typ
62626407 %noun [%all ~]
6408+ %empty [%empty ~]
62636409 %atom [%atom ~]
62646410 %flag [%or ~[[%atom `0] [%atom `1]]]
62656411 %const [%atom `val.literal.typ]
@@ -6394,6 +6540,16 @@
63946540 ?: &(?=(~ vars.template) ?=(%jrec -.typ.template) =(at.typ.template origin) =(name.typ.template name)) `name.i.molds
63956541 $(molds t.molds)
63966542::
6543+++ grec-visible-alias
6544+ |= [origin=path name=term proof=shape args=(list itype) molds=imold-types]
6545+ ^- (unit term)
6546+ ?~ molds ~
6547+ =/ template=ischeme template.i.molds
6548+ ?. ?=(%grec -.typ.template) $(molds t.molds)
6549+ ?. &(=(at.typ.template origin) =(name.typ.template name) =(proof.typ.template proof)) $(molds t.molds)
6550+ ?. &((identity-union-parameters vars.template args.typ.template) =((lent vars.template) (lent args))) $(molds t.molds)
6551+ `name.i.molds
6552+::
63976553++ itype-in-import
63986554 |= [t=itype iface=ifile face=term prelude=(unit ifile)]
63996555 ^- itype
@@ -6413,6 +6569,11 @@
64136569 `(crip "{(trip u.alias)}.{(trip face)}")
64146570 [%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)))]
64156571 %recursive [%recursive module.t name.t ~]
6572+ %grec
6573+ =/ public=(unit term) ?~(prelude ~ (grec-visible-alias at.t name.t proof.t args.t molds.u.prelude))
6574+ =/ alias=(unit term) ?~(public (grec-visible-alias at.t name.t proof.t args.t molds.iface) public)
6575+ =/ label=(unit @t) ?~(alias ~ ?~(public `(crip "{(trip u.alias)}.{(trip face)}") `u.alias))
6576+ t(label label, args (turn args.t |=(c=itype (itype-in-import c iface face prelude))))
64166577 %jrec
64176578 =/ public=(unit term) ?~(prelude ~ (jrec-alias at.t name.t molds.u.prelude))
64186579 ?^ public t(label `u.public)
@@ -6525,9 +6686,29 @@
65256686 ?. =(names.tail ~[name]) ~
65266687 `[%jrec at.state name `name name.i.fs aura.shape.i.fs name.i.t.fs]
65276688::
6689+++ simple-source-generic-recursive
6690+ |= [name=term sh=shape args=(list itype) state=istate]
6691+ ^- (unit itype)
6692+ ?. ?=(%generic -.sh) ~
6693+ ?. ?=([@ ~] vars.sh) ~
6694+ ?. ?=([* ~] args) ~
6695+ ?~ grec-index.state ~
6696+ ?. =(at.u.grec-index.state at.state) ~
6697+ ?~ prelude.state ~
6698+ ?. =(prelude.u.grec-index.state u.prelude.state) ~
6699+ =/ proof=(unit shape) (~(get by shapes.u.grec-index.state) name)
6700+ ?~ proof ~
6701+ ?. =(u.proof sh) ~
6702+ `[%grec at.state name `name sh args]
6703+::
6704+
65286705++ infer-mold-template
65296706 |= [sh=shape state=istate]
65306707 ^- (unit [template=ischeme state=istate])
6708+ =/ generic=(unit itype)
6709+ ?. ?=([@ ~] active.state) ~
6710+ (simple-source-generic-recursive i.active.state sh ~[[%var next.state]] state)
6711+ ?^ generic `[[u.generic ~[next.state]] state(next +(next.state))]
65316712 =/ direct=(unit itype)
65326713 ?. ?=([@ ~] active.state) ~
65336714 (simple-source-recursive i.active.state sh state)
@@ -6585,7 +6766,7 @@
65856766 ?~ found ~
65866767 ?^ t.found ~
65876768 result.i.found
6588− ?. ?=([%invalid ?(%aura %core) @] raw) ~
6769+ ?. ?=([%invalid ?(%aura %core %overlap) @] raw) ~
65896770 `["{(trip +>.raw)}" ~[[at.sh "invalid imported mold"]]]
65906771::
65916772:: Replay only the shape branches whose evaluation order we can prove.
@@ -6660,13 +6841,18 @@
66606841 `[[%atom aura.sh] state]
66616842 %flag `[[%flag ~] state]
66626843 %noun `[[%noun ~] state]
6844+ %void `[[%empty ~] state]
66636845 %const
66646846 ?. |(=(%term form.lit.sh) =(%null form.lit.sh) =(%loobean form.lit.sh)) ~
66656847 ?: &(=(%loobean form.lit.sh) !|(=(0 val.lit.sh) =(1 val.lit.sh))) ~
66666848 `[[%const lit.sh] state]
66676849 %union
66686850 =/ pairs=(list upair) (union-pairs cases.sh molds.state)
6669− ?. (levy pairs |=(p=upair =(%disjoint relation.p))) ~
6851+ ?: (lien pairs |=(p=upair =(%overlap relation.p))) ~
6852+ =/ source-proof=?
6853+ ?: (levy pairs |=(p=upair =(%disjoint relation.p))) &
6854+ &((union-source-state-safe state 256) (union-source-distinct-tags cases.sh molds.state 256))
6855+ ?. source-proof ~
66706856 =/ cs=(unit [types=(list itype) state=istate]) (infer-shape-args cases.sh state)
66716857 ?~ cs ~
66726858 `[[%union types.u.cs ~ ~ ~] state.u.cs]
@@ -6740,6 +6926,8 @@
67406926 ?~ applied ~
67416927 `[u.applied state.u.args]
67426928 ?. ?=(%generic -.u.found) ~
6929+ =/ grec=(unit itype) (simple-source-generic-recursive n u.found types.u.args state.u.args)
6930+ ?^ grec `[u.grec state.u.args]
67436931 ?. (distinct-params vars.u.found) ~
67446932 =/ params=(unit iparams) (bind-params vars.u.found types.u.args)
67456933 ?~ params ~
@@ -7068,6 +7256,7 @@
70687256 =/ retried=? ?=(%| -.inferred)
70697257 =? inferred retried (infer-recursive-gate d env local-state)
70707258 ?: ?=(%| -.inferred) $(ds t.ds, remaining [d remaining])
7259+ ?: !=(obligations.state.p.inferred obligations.state) [%| ["deferred local definition needs unsupported inference" ~]]
70717260 =. state.p.inferred (promote-restricted-numbers state.p.inferred env)
70727261 =. 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)))
70737262 =/ hole=(unit idiag) (unresolved-hole holes.state.p.inferred holes.state state.p.inferred)
@@ -7177,6 +7366,8 @@
71777366 ?: &(?=(%collection -.expected) =(%list name.expected) (context-list-expression e))
71787367 (infer-list-context e expected env state context)
71797368 ?: ?=(%branch -.e)
7369+ =/ empty-list=(unit iresult) (empty-list-null-branch e env state `[expected context])
7370+ ?^ empty-list u.empty-list
71807371 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
71817372 ?~ t.arms.e [%| ["branch pattern is not supported by partial inference" ~]]
71827373 ?^ t.t.arms.e [%| ["branch is not supported by partial inference" ~]]
@@ -7290,7 +7481,12 @@
72907481 =/ target=itype (itype-walk expected sub.state)
72917482 =/ value=iresult (infer-call-context-arg i.items target env state context)
72927483 ?: ?=(%| -.value) value
7293− =/ fit=ifit (itype-fit typ.p.value target sub.state.p.value next.state.p.value)
7484+ =/ ordinary-fit=ifit (itype-fit typ.p.value target sub.state.p.value next.state.p.value)
7485+ =/ fit=ifit
7486+ ?: ?=(%ok -.ordinary-fit) ordinary-fit
7487+ ?: ?&(?=(%union -.target) ?=(^ prelude.state) =(origin.target `[at.u.prelude.state %element]))
7488+ (program-single-generic-fit typ.p.value target sub.state.p.value next.state.p.value)
7489+ ordinary-fit
72947490 ?: ?=(%unknown -.fit) [%| ["list item constraint is not supported by partial inference" ~]]
72957491 ?: ?=(%bad -.fit)
72967492 ?: |((itype-family-related typ.p.value target sub.state.p.value) (itype-has-any-atom typ.p.value sub.state.p.value) (itype-has-any-atom target sub.state.p.value))
@@ -7307,7 +7503,12 @@
73077503 =/ target=itype (itype-walk expected sub.state)
73087504 =/ value=iresult (infer-call-context-arg i.items target env state context)
73097505 ?: ?=(%| -.value) value
7310− =/ fit=ifit (itype-fit typ.p.value target sub.state.p.value next.state.p.value)
7506+ =/ ordinary-fit=ifit (itype-fit typ.p.value target sub.state.p.value next.state.p.value)
7507+ =/ fit=ifit
7508+ ?: ?=(%ok -.ordinary-fit) ordinary-fit
7509+ ?: ?&(?=(%union -.target) ?=(^ prelude.state) =(origin.target `[at.u.prelude.state %element]))
7510+ (program-single-generic-fit typ.p.value target sub.state.p.value next.state.p.value)
7511+ ordinary-fit
73117512 ?: ?=(%unknown -.fit) [%| ["list item constraint is not supported by partial inference" ~]]
73127513 ?: ?=(%bad -.fit)
73137514 =/ missing=(unit idiag) (missing-union-tag i.items target sub.state.p.value context)
@@ -7394,6 +7595,11 @@
73947595 [%| ["list pattern needs the standard prelude in partial inference" ~]]
73957596 ?~ args.typ [%| ["list pattern is not supported by partial inference" ~]]
73967597 ?^ t.args.typ [%| ["list pattern is not supported by partial inference" ~]]
7598+ =/ item-live=(unit [result=?(%yes %no %unknown) left=@ud])
7599+ (itype-inhabited-proof i.args.typ sub.state caps.state 256)
7600+ ?~ item-live [%| ["list element reachability needs unsupported inference" ~]]
7601+ ?: =(%unknown result.u.item-live) [%| ["list element reachability needs unsupported inference" ~]]
7602+ ?: =(%no result.u.item-live) [%| ["list nonempty pattern is unreachable" ~]]
73977603 ?~ arms.e [%| ["list branch is not supported by partial inference" ~]]
73987604 ?~ t.arms.e [%| ["list branch is not supported by partial inference" ~]]
73997605 ?^ t.t.arms.e [%| ["list branch is not supported by partial inference" ~]]
@@ -7447,6 +7653,11 @@
74477653 [%| ["pattern binder shadows a name" ~]]
74487654 =/ payload=(unit itype) (unit-union-payload typ)
74497655 ?~ payload [%| ["unit branch subject is not supported by partial inference" ~]]
7656+ =/ payload-live=(unit [result=?(%yes %no %unknown) left=@ud])
7657+ (itype-inhabited-proof u.payload sub.state.p.subject caps.state.p.subject 256)
7658+ ?~ payload-live [%| ["unit payload reachability needs unsupported inference" ~]]
7659+ ?: =(%unknown result.u.payload-live) [%| ["unit payload reachability needs unsupported inference" ~]]
7660+ ?: =(%no result.u.payload-live) [%| ["unit present pattern is unreachable" ~]]
74507661 =/ extended=ienv [[u.binder [u.payload ~]] env]
74517662 =/ left=iresult
74527663 ?~ expected (infer-fragment val.x ?:(first-empty env extended) state.p.subject)
@@ -7599,7 +7810,9 @@
75997810 ?: ?=(%| -.subject) `subject
76007811 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
76017812 ?. ?=(%union -.typ) `[%| ["branch is not supported by partial inference" ~]]
7602− =/ cases=(list itype) cases.typ
7813+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
7814+ ?~ live ~
7815+ =/ cases=(list itype) u.live
76037816 =/ remaining=(list itype) cases
76047817 =/ arms=(list arm) arms.e
76057818 =/ st=istate state.p.subject
@@ -7636,7 +7849,9 @@
76367849 ?: ?=(%| -.subject) `subject
76377850 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
76387851 ?. ?=(%union -.typ) `[%| ["branch is not supported by partial inference" ~]]
7639− =/ cases=(list itype) cases.typ
7852+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
7853+ ?~ live ~
7854+ =/ cases=(list itype) u.live
76407855 =/ remaining=(list itype) cases
76417856 =/ arms=(list arm) arms.e
76427857 =/ st=istate state.p.subject
@@ -7680,7 +7895,9 @@
76807895 ?: ?=(%| -.subject) subject
76817896 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
76827897 ?. ?=(%union -.typ) [%| ["branch is not supported by partial inference" ~]]
7683− =/ expanded=(unit (list ifinite)) (finite-cases cases.typ ~ 0)
7898+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
7899+ ?~ live [%| ["union emptiness needs unsupported inference" ~]]
7900+ =/ expanded=(unit (list ifinite)) (finite-cases u.live ~ 0)
76847901 ?~ expanded [%| ["union pattern expansion needs unsupported inference" ~]]
76857902 =/ cases=(list ifinite) u.expanded
76867903 =/ remaining=(list ifinite) cases
@@ -7801,9 +8018,65 @@
78018018 =/ cell=itype [%cell [%face head.typ [%atom aura.typ]] [%face tail.typ typ]]
78028019 [%& [%union ~[nil cell] ~ ~ ~] state.p.subject(jrec-fuel (dec jrec-fuel.state.p.subject))]
78038020::
8021+:: A bounded source-proven tree match permits flat tag patterns and
8022+:: nonbinding catch-alls. Whole-case binders cannot consume the temporary
8023+:: structural view. Pattern count and field arity are checked first.
8024+++ grec-simple-pattern
8025+ |= [pat=pattern view=itype]
8026+ ^- ?
8027+ ?. ?=(%cell -.pat) |
8028+ ?~ items.pat |
8029+ =/ first=pattern i.items.pat
8030+ ?. ?=(%lit -.first) |
8031+ ?. =(%term form.lit.first) |
8032+ =/ chosen=(unit itype) (contextual-tagged-case view val.lit.first ~)
8033+ ?~ chosen |
8034+ ?> ?=(%cell -.u.chosen)
8035+ =/ rest=(list pattern) t.items.pat
8036+ =/ arity=? ?:(?=(%cell -.tal.u.chosen) ?=([* [* ~]] rest) ?=([* ~] rest))
8037+ ?. arity |
8038+ (levy rest |=(p=pattern |(?=(%bind -.p) ?=(%any -.p))))
8039+::
8040+:: A catch-all with no binder is safe even when it covers both cases.
8041+:: A bound whole case still declines to avoid exporting the analysis view.
8042+++ grec-patterns-eligible
8043+ |= [arms=(list arm) view=itype left=@ud]
8044+ ^- ?
8045+ ?~ arms &
8046+ ?: =(0 left) |
8047+ =/ pat=pattern pat.i.arms
8048+ ?. |(?=(%any -.pat) (grec-simple-pattern pat view)) |
8049+ $(arms t.arms, left (dec left))
8050+++ grec-match-view
8051+ |= [e=expr subject=iresult]
8052+ ^- iresult
8053+ ?: ?=(%| -.subject) subject
8054+ ?. ?=(%branch -.e) subject
8055+ ?. (grec-direct-context typ.p.subject sub.state.p.subject) subject
8056+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
8057+ ?. ?=(%grec -.typ) subject
8058+ ?~ arms.e subject
8059+ =/ view=(unit [view=itype left=@ud]) (grec-unfold-view typ jrec-fuel.state.p.subject)
8060+ ?~ view [%| ["recursive mold unfolding needs unsupported inference" ~]]
8061+ ?. (grec-patterns-eligible arms.e view.u.view 128) subject
8062+ [%& view.u.view state.p.subject(jrec-fuel left.u.view)]
8063+::
8064+:: A single-arm diagnostic only probes a direct, source-typed in-scope wing;
8065+:: other subjects retain the prior single-pattern inference path.
8066+++ grec-single-wing-subject
8067+ |= [e=expr env=ienv state=istate]
8068+ ^- (unit iresult)
8069+ ?. ?=(%wing -.e) ~
8070+ ?. ?=([@ ~] names.e) ~
8071+ =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
8072+ ?~ scheme ~
8073+ ?. (grec-direct-context typ.u.scheme sub.state) ~
8074+ `(infer-fragment e env state)
8075+::
78048076++ infer-known-union-branch-subject
78058077 |= [e=expr env=ienv subject=iresult]
78068078 ^- iresult
8079+ =. subject (grec-match-view e subject)
78078080 =. subject (jrec-match-view e subject)
78088081 =/ whole=(unit iresult) (infer-known-union-whole e env subject)
78098082 ?~ whole (infer-known-union-finite e env subject ~)
@@ -7818,6 +8091,7 @@
78188091++ infer-known-union-context-subject
78198092 |= [e=expr expected=itype env=ienv subject=iresult context=span]
78208093 ^- iresult
8094+ =. subject (grec-match-view e subject)
78218095 =. subject (jrec-match-view e subject)
78228096 =/ whole=(unit iresult) (infer-known-union-context-whole e expected env subject context)
78238097 ?~ whole (infer-known-union-finite e env subject `[expected context])
@@ -7870,9 +8144,67 @@
78708144 =/ subject=iresult (infer-fragment e env state)
78718145 ?: ?=(%| -.subject) ?:((union-subject-call e) `subject ~)
78728146 =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
7873− ?. |(?=(%union -.typ) ?=(%jrec -.typ)) ~
8147+ ?. |(?=(%union -.typ) ?=(%jrec -.typ) &(?=(%grec -.typ) (grec-direct-context typ.p.subject sub.state.p.subject))) ~
78748148 `subject
78758149::
8150+:: A direct wing with an already-known union may skip genuinely empty cases
8151+:: when checking a one-arm match. Other subjects keep their existing path.
8152+:: A directly known canonical list of an empty element contains only null.
8153+:: This helper never refines an opaque or variable-bound subject.
8154+++ empty-list-null-branch
8155+ |= [e=expr env=ienv state=istate expected=(unit [typ=itype context=span])]
8156+ ^- (unit iresult)
8157+ ?. ?=(%branch -.e) ~
8158+ ?~ arms.e ~
8159+ ?^ t.arms.e ~
8160+ ?. (unit-empty-pattern pat.i.arms.e) ~
8161+ ?. ?=(%wing -.subject.e) ~
8162+ ?. ?=([@ ~] names.subject.e) ~
8163+ =/ scheme=(unit ischeme) (ienv-lookup i.names.subject.e env)
8164+ ?~ scheme ~
8165+ ?. ?=(%collection -.typ.u.scheme) ~
8166+ ?. =(%list name.typ.u.scheme) ~
8167+ ?~ prelude.state ~
8168+ ?. =(at.u.prelude.state /lib/jibb/prelude/jibb) ~
8169+ =/ standard=(unit ischeme) (find-jibb-mold %list u.prelude.state)
8170+ ?~ standard ~
8171+ ?. =(u.standard [[%collection %list ~[[%var 0]]] ~[0]]) ~
8172+ =/ subject=iresult (infer-fragment subject.e env state)
8173+ ?: ?=(%| -.subject) ~
8174+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
8175+ ?. ?=(%collection -.typ) ~
8176+ ?. =(%list name.typ) ~
8177+ ?~ args.typ ~
8178+ ?^ t.args.typ ~
8179+ =/ proof=(unit [empty=? left=@ud]) (itype-empty-proof i.args.typ sub.state.p.subject 256)
8180+ ?~ proof ~
8181+ ?. empty.u.proof ~
8182+ ?~ expected `(infer-fragment val.i.arms.e env state.p.subject)
8183+ =/ body=iresult (infer-call-context-arg val.i.arms.e typ.u.expected env state.p.subject context.u.expected)
8184+ ?: ?=(%| -.body) `body
8185+ =/ fit=ifit (itype-fit typ.p.body typ.u.expected sub.state.p.body next.state.p.body)
8186+ ?: ?=(%unknown -.fit) `[%| ["single-case branch result constraint is not supported by partial inference" ~]]
8187+ ?: ?=(%bad -.fit) `[%| ["single-case branch arm does not fit its expected type" ~[[context.u.expected "expected type"] [(span-of val.i.arms.e) "branch arm"]]]]
8188+ ?: (itype-has-tag (itype-normalize typ.u.expected sub.fit))
8189+ `[%| ["single-case branch result needs context in partial inference" ~]]
8190+ `[%& typ.p.body state.p.body(sub sub.fit, next next.fit)]
8191+::
8192+++ known-empty-union-wing
8193+ |= [e=expr env=ienv state=istate]
8194+ ^- (unit iresult)
8195+ ?. ?=(%wing -.e) ~
8196+ ?. ?=([@ ~] names.e) ~
8197+ =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
8198+ ?~ scheme ~
8199+ ?. (contextual-direct-union typ.u.scheme) ~
8200+ =/ subject=iresult (infer-fragment e env state)
8201+ ?: ?=(%| -.subject) ~
8202+ =/ typ=itype (itype-normalize typ.p.subject sub.state.p.subject)
8203+ ?. ?=(%union -.typ) ~
8204+ =/ live=(unit (list itype)) (itype-live-cases cases.typ sub.state.p.subject caps.state.p.subject 4.096)
8205+ ?~ live ~
8206+ ?: =(u.live cases.typ) ~
8207+ `subject
78768208::
78778209:: Infer changes only against a fully known record spine. Retain the
78788210:: target type; unknown spines and repeated edits remain unsupported.
@@ -8117,7 +8449,10 @@
81178449 =/ traced=iresult $(e val.e)
81188450 ?: ?=(%| -.traced) traced
81198451 $(e then.e, state state.p.traced)
8120− %tuple (infer-simple-items items.e env state)
8452+ %tuple
8453+ ?: &(?=(^ defer.state) ?=(^ prelude.state))
8454+ (dg-infer-tuple-items items.e env state)
8455+ (infer-simple-items items.e env state)
81218456 %body
81228457 ?~ defs.e $(e final.e)
81238458 =/ local-names=(list term) (global-value-names defs.e)
@@ -8140,8 +8475,15 @@
81408475 ?: ?=(%| -.result) result
81418476 [%& typ.p.result state.p.result(globals globals.state, molds molds.state)]
81428477 %branch
8478+ ?^ defer.state (dg-boolean-branch e env state)
81438479 ?~ arms.e [%| ["branch is not supported by partial inference" ~]]
81448480 ?~ t.arms.e
8481+ =/ empty-list=(unit iresult) (empty-list-null-branch e env state ~)
8482+ ?^ empty-list u.empty-list
8483+ =/ empty-union=(unit iresult) (known-empty-union-wing subject.e env state)
8484+ ?^ empty-union (infer-known-union-branch-subject e env u.empty-union)
8485+ =/ single=(unit iresult) (grec-single-wing-subject subject.e env state)
8486+ ?^ single (infer-known-union-branch-subject e env u.single)
81458487 ?: (single-structured-pattern e) (infer-single-case-branch e env state ~)
81468488 (infer-cell-branch e env state ~)
81478489 ?^ t.t.arms.e (infer-known-union-branch e env state)
@@ -8209,6 +8551,8 @@
82098551 =/ nested=(unit idiag) (nested-missing-tag val.e typ.p.value typ.u.target sub.state.p.value next.state.p.value at.shape.e)
82108552 ?^ nested [%| u.nested]
82118553 [%| ["cast mold and expression type do not unify" ~[[at.shape.e (site-type-note "cast mold" typ.u.target sub.state.p.value)] [(span-of val.e) (site-type-note "expression" typ.p.value sub.state.p.value)]]]]
8554+ ?: &(?=(^ defer.state.p.value) !(dg-stable-fit typ.p.value typ.u.target sub.fit))
8555+ [%| ["deferred cast fit needs stable inference" ~]]
82128556 =/ merged=itype (itype-merge-faces typ.p.value typ.u.target sub.fit)
82138557 [%& merged state.p.value(sub sub.fit, next next.fit)]
82148558 %crash [%& [%var next.state] state(next +(next.state))]
@@ -8516,7 +8860,13 @@
85168860 ?: ?=(%ok -.fit) ~
85178861 (direct-gate-call-fit e typ.p.arg sample.ht env st)
85188862 =. fit ?~(direct fit u.direct)
8519− ?: ?=(%unknown -.fit) [%| ["call constraint is not supported by partial inference" ~]]
8863+ ?: ?=(%unknown -.fit)
8864+ ?~ defer.st [%| ["call constraint is not supported by partial inference" ~]]
8865+ =/ edge=(unit dgo) (dg-eligible-ctor e typ.p.head typ.p.arg sample.ht st)
8866+ ?~ edge [%| ["call constraint is not supported by partial inference" ~]]
8867+ ?: (gth (lent obligations.st) 63) [%| ["call constraint is not supported by partial inference" ~]]
8868+ [%& product.ht st(obligations [u.edge obligations.st])]
8869+
85208870 ?: ?=(%bad -.fit)
85218871 ?~ t.args.e
85228872 =/ missing=(unit idiag) (missing-union-tag i.args.e sample.ht sub.st (span-of head.e))
@@ -8531,6 +8881,8 @@
85318881 =/ arg-at=span ?~(bad whole-args at.u.bad)
85328882 =/ arg-type=itype ?~(bad typ.p.arg typ.u.bad)
85338883 [%| ["call's sample and argument types do not unify" ~[[(span-of head.e) (site-type-note "called gate" ht sub.st)] [arg-at (site-type-note "argument" arg-type sub.st)]]]]
8884+ ?: &(?=(^ defer.st) !(dg-stable-call-fit typ.p.arg sample.ht product.ht sub.fit ?=(^ t.args.e)))
8885+ [%| ["deferred call fit needs stable inference" ~]]
85348886 =/ face-asym=?
85358887 ?^ direct |
85368888 ?^ t.args.e (itype-positional-face-asym args.e typ.p.arg sample.ht sub.fit)
@@ -8624,7 +8976,17 @@
86248976 ?~ args.result |
86258977 ?. =((lent args.result) (lent args.expected)) |
86268978 ?: |((itype-has-tag (itype-normalize result sub.state.p.head)) (itype-has-tag (itype-normalize expected sub.state.p.head))) |
8627− ?: |((itype-has-recursive (itype-normalize result sub.state.p.head)) (itype-has-recursive (itype-normalize expected sub.state.p.head))) |
8979+ =/ result-recursive=? (itype-has-recursive (itype-normalize result sub.state.p.head))
8980+ =/ expected-recursive=? (itype-has-recursive (itype-normalize expected sub.state.p.head))
8981+ =/ result-ok=?
8982+ ?. result-recursive &
8983+ ?~ prelude.state |
8984+ &(=(at.u.prelude.state /lib/jibb/prelude/jibb) =(origin.result `[at.u.prelude.state %element]))
8985+ =/ expected-ok=?
8986+ ?. expected-recursive &
8987+ ?~ prelude.state |
8988+ &(=(at.u.prelude.state /lib/jibb/prelude/jibb) =(origin.expected `[at.u.prelude.state %element]))
8989+ ?. &(result-ok expected-ok) |
86288990 ?: |((itype-has-any-atom result sub.state.p.head) (itype-has-any-atom expected sub.state.p.head)) |
86298991 &
86308992 ?. eligible (infer-call-with-head e env state head)
@@ -8764,6 +9126,20 @@
87649126 ?: ?=(?(%cell %face %fn %union %collection) -.val.i.sub) |
87659127 $(sub t.sub)
87669128::
9129+:: Check the syntactic root before scanning; scan substitutions once.
9130+++ grec-direct-context
9131+ |= [expected=itype sub=isub]
9132+ ^- ?
9133+ =/ left=@ud 4.096
9134+ |-
9135+ ?: ?=(%face -.expected)
9136+ ?: =(0 left) |
9137+ $(expected body.expected, left (dec left))
9138+ ?. ?=(%grec -.expected) |
9139+ ?~ sub &
9140+ ?: =(0 left) |
9141+ ?: ?=(?(%cell %face %fn %union %collection %grec) -.val.i.sub) |
9142+ $(sub t.sub, left (dec left))
87679143++ contextual-direct-union
87689144 |= target=itype
87699145 ^- ?
@@ -8788,9 +9164,112 @@
87889164 $(remaining t.remaining, found `c)
87899165 $(remaining t.remaining)
87909166::
9167+:: A bounded syntactic screen: no nested branch, cast, gate or local body
9168+:: can re-enter cell-branch retry during either inference attempt.
9169+++ closed-cell-retry-safe
9170+ |= [todo=(list expr) fuel=@ud]
9171+ ^- ?
9172+ ?~ todo &
9173+ ?: =(0 fuel) |
9174+ =/ e=expr i.todo
9175+ =. fuel (dec fuel)
9176+ ?+ -.e |
9177+ %lit $(todo t.todo)
9178+ %wing $(todo t.todo)
9179+ %ctor $(todo t.todo)
9180+ %path $(todo t.todo)
9181+ %crash $(todo t.todo)
9182+ %str
9183+ ?. (levy pieces.e |=(p=piece ?=(%text -.p))) |
9184+ $(todo t.todo)
9185+ %group $(todo [inner.e t.todo])
9186+ %pair $(todo [val.e t.todo])
9187+ %unit $(todo [val.e t.todo])
9188+ %list $(todo (weld items.e t.todo))
9189+ %tuple $(todo (weld (turn items.e |=(i=item val.i)) t.todo))
9190+ %change $(todo (weld (turn edits.e |=(ed=edit val.ed)) t.todo))
9191+ %call $(todo [head.e (weld args.e t.todo)])
9192+ %trace $(todo [val.e then.e t.todo])
9193+ ==
9194+::
9195+++ closed-cell-sub-safe
9196+ |= [sub=isub fuel=@ud]
9197+ ^- ?
9198+ ?~ sub &
9199+ ?: =(0 fuel) |
9200+ ?: ?=(?(%cell %face %fn %union %collection %grec %jrec %recursive) -.val.i.sub) |
9201+ $(sub t.sub, fuel (dec fuel))
9202+::
9203+++ closed-cell-branch-eligible
9204+ |= [e=expr expected=itype sub=isub]
9205+ ^- ?
9206+ ?. &(?=(%branch -.e) ?=(%cell -.expected) (closed-cell-sub-safe sub 512)) |
9207+ ?~ arms.e |
9208+ ?~ t.arms.e |
9209+ ?^ t.t.arms.e |
9210+ =/ x=arm i.arms.e
9211+ =/ y=arm i.t.arms.e
9212+ ?. &(?=(%lit -.pat.x) ?=(%lit -.pat.y)) |
9213+ ?. &(=(%loobean form.lit.pat.x) =(%loobean form.lit.pat.y)) |
9214+ ?: =(val.lit.pat.x val.lit.pat.y) |
9215+ (closed-cell-retry-safe ~[subject.e val.x val.y] 512)
9216+::
9217+:: Attempt ordinary inference first; retry from the same state only for
9218+:: the bounded non-reentrant syntax above. Preserve original value faces.
9219+++ infer-closed-cell-branch
9220+ |= [e=expr expected=itype env=ienv state=istate context=span]
9221+ ^- iresult
9222+ ?> (closed-cell-branch-eligible e expected sub.state)
9223+ ?> ?=(%branch -.e)
9224+ ?> ?=(^ arms.e)
9225+ ?> ?=(^ t.arms.e)
9226+ =/ ordinary=iresult (infer-fragment e env state)
9227+ =/ ordinary-good=?
9228+ ?: ?=(%| -.ordinary) |
9229+ =/ fit=ifit (itype-fit typ.p.ordinary expected sub.state.p.ordinary next.state.p.ordinary)
9230+ ?=(%ok -.fit)
9231+ ?: ordinary-good ordinary
9232+ =/ attempt=(unit iresult)
9233+ =/ x=arm i.arms.e
9234+ =/ y=arm i.t.arms.e
9235+ =/ subject=iresult (infer-fragment subject.e env state)
9236+ ?: ?=(%| -.subject) ~
9237+ =/ subject-type=itype (itype-normalize typ.p.subject sub.state.p.subject)
9238+ ?: ?=(%union -.subject-type) ~
9239+ =/ su=(unit isub) (itype-unify typ.p.subject [%flag ~] sub.state.p.subject)
9240+ ?~ su ~
9241+ =/ left=iresult (infer-call-context-arg val.x expected env state.p.subject(sub u.su) context)
9242+ ?: ?=(%| -.left) ~
9243+ =/ lf=ifit (itype-fit typ.p.left expected sub.state.p.left next.state.p.left)
9244+ ?. ?=(%ok -.lf) ~
9245+ =/ right=iresult (infer-call-context-arg val.y expected env state.p.left(sub sub.lf, next next.lf) context)
9246+ ?: ?=(%| -.right) ~
9247+ =/ rf=ifit (itype-fit typ.p.right expected sub.state.p.right next.state.p.right)
9248+ ?. ?=(%ok -.rf) ~
9249+ =/ sub=isub sub.rf
9250+ =/ next=@ud next.rf
9251+ =/ lt=itype (itype-normalize typ.p.left sub)
9252+ =/ rt=itype (itype-normalize typ.p.right sub)
9253+ =/ et=itype (itype-normalize expected sub)
9254+ ?. =(lt rt) ~
9255+ ?: |(?=(^ (itype-vars lt)) ?=(^ (itype-vars rt)) ?=(^ (itype-vars et))) ~
9256+ ?: |((itype-has-tag lt) (itype-has-tag rt) (itype-has-tag et)) ~
9257+ =/ lcheck=ifit (itype-fit typ.p.left expected sub next)
9258+ ?. ?=(%ok -.lcheck) ~
9259+ ?. &(=(sub.lcheck sub) =(next.lcheck next)) ~
9260+ =/ rcheck=ifit (itype-fit typ.p.right expected sub next)
9261+ ?. ?=(%ok -.rcheck) ~
9262+ ?. &(=(sub.rcheck sub) =(next.rcheck next)) ~
9263+ `[%& typ.p.left state.p.right(sub sub, next next)]
9264+ ?~ attempt ordinary
9265+ u.attempt
9266+::
87919267++ infer-call-context-arg
87929268 |= [e=expr expected=itype env=ienv state=istate context=span]
87939269 ^- iresult
9270+ ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9271+ ?: &(?=(^ defer.state) ?=(^ prelude.state) ?=(%tuple -.e))
9272+ (infer-fragment e env state)
87949273 ?: ?=(%pair -.e) $(e (pair-as-cell e))
87959274 ?: ?=(%group -.e) $(e inner.e)
87969275 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
@@ -8803,6 +9282,23 @@
88039282 ?: ?=(%face -.target) $(target (itype-walk body.target sub.state))
88049283 ?: (explicit-proj-call e env state)
88059284 (infer-proj-context e expected env state context)
9285+ :: Experimental construction only for a source-proven direct target.
9286+ :: Decline any walked structural binding to retain raw-variable provenance.
9287+ ?: &(?=(%grec -.target) ?=(%tuple -.e) (grec-direct-context expected sub.state))
9288+ =/ unfolded=(unit [view=itype left=@ud]) (grec-unfold-view target jrec-fuel.state)
9289+ ?~ unfolded [%| ["recursive mold unfolding needs unsupported inference" ~]]
9290+ ?~ items.e [%| ["recursive mold constructor needs unsupported inference" ~]]
9291+ =/ first=item i.items.e
9292+ ?. &(?=(~ face.first) ?=(%lit -.val.first) =(%term form.lit.val.first))
9293+ [%| ["recursive mold constructor needs unsupported inference" ~]]
9294+ =/ chosen=(unit itype) (contextual-tagged-case view.u.unfolded val.lit.val.first sub.state)
9295+ ?~ chosen [%| ["recursive mold constructor has no matching case" ~]]
9296+ =/ value=iresult (infer-call-context-items items.e u.chosen env state(jrec-fuel left.u.unfolded) context)
9297+ ?: ?=(%| -.value) value
9298+ =/ fit=ifit (itype-fit typ.p.value u.chosen sub.state.p.value next.state.p.value)
9299+ ?: ?=(%unknown -.fit) [%| ["recursive mold case needs unsupported inference" ~]]
9300+ ?: ?=(%bad -.fit) [%| ["recursive mold case does not fit its source shape" ~]]
9301+ [%& target state.p.value(sub sub.fit, next next.fit)]
88069302 :: Only the source-proven one-layer cell is exposed. Each recursive
88079303 :: descent consumes one written tuple; named values use ordinary fit.
88089304 ?: &(?=(%jrec -.target) ?=(%lit -.e) =(%null form.lit.e))
@@ -8820,7 +9316,14 @@
88209316 ?: ?=(%bad -.fit) [%| ["recursive mold cell does not fit its source shape" ~]]
88219317 [%& target state.p.value(sub sub.fit, next next.fit)]
88229318 ?: ?=(%call -.e) (infer-contextual-call e target env state)
9319+ =/ empty-list=(unit iresult) (empty-list-null-branch e env state `[target context])
9320+ ?^ empty-list u.empty-list
88239321 ?: (single-structured-pattern e)
9322+ ?> ?=(%branch -.e)
9323+ =/ empty-union=(unit iresult) (known-empty-union-wing subject.e env state)
9324+ ?^ empty-union (infer-known-union-context-subject e target env u.empty-union context)
9325+ =/ single=(unit iresult) (grec-single-wing-subject subject.e env state)
9326+ ?^ single (infer-known-union-context-subject e target env u.single context)
88249327 (infer-single-case-branch e env state `[target context])
88259328 ?: (cell-binder-pattern e)
88269329 (infer-cell-branch e env state `[target context])
@@ -8840,6 +9343,8 @@
88409343 (infer-known-union-context-subject e target env u.known context)
88419344 ?: &(?=(%union -.target) ?=(%unit -.e))
88429345 (infer-unit-context e target env state context)
9346+ ?: (closed-cell-branch-eligible e expected sub.state)
9347+ (infer-closed-cell-branch e expected env state context)
88439348 ?: &(?=(%flag -.target) (context-union-branch e))
88449349 (infer-union-context e target env state context)
88459350 ?: &(?=(%union -.target) (context-union-branch e))
@@ -8978,7 +9483,7 @@
89789483 ?~ t.names |
89799484 =. typ (itype-walk typ sub)
89809485 ?: ?=(%cell -.typ) $(typ tal.typ, names t.names)
8981− |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
9486+ |(?=(%union -.typ) ?=(%collection -.typ) ?=(%recursive -.typ) ?=(%jrec -.typ) ?=(%grec -.typ) ?=(%noun -.typ) ?=(%fn -.typ) ?=(%tag -.typ))
89829487::
89839488++ cell-binder-pattern
89849489 |= e=expr
@@ -9049,6 +9554,7 @@
90499554 %any-atom "@"
90509555 %flag "?"
90519556 %noun "*"
9557+ %empty "!!"
90529558 %tag (trip txt.literal.t)
90539559 %const (trip txt.literal.t)
90549560 %union
@@ -9057,6 +9563,7 @@
90579563 "({(trip u.label.t)} {(show-itype-cases args.t sub)})"
90589564 %recursive ?~(label.t "recursive mold" (trip u.label.t))
90599565 %jrec ?~(label.t "recursive mold" (trip u.label.t))
9566+ %grec ?~(label.t "recursive mold" "({(trip u.label.t)} {(show-itype-cases args.t sub)})")
90609567 %collection "({(trip name.t)} {(show-itype-cases args.t sub)})"
90619568 %face "[{(trip name.t)}={(show-itype-context body.t sub)}]"
90629569 %fn "$-({(show-itype-context sample.t sub)} {(show-itype-context product.t sub)})"
@@ -9100,11 +9607,13 @@
91009607 %any-atom |
91019608 %flag |
91029609 %noun |
9610+ %empty |
91039611 %tag |
91049612 %const |
91059613 %union |((lien cases.typ |=(c=itype (itype-has-nvar c))) (lien args.typ |=(c=itype (itype-has-nvar c))))
91069614 %recursive |
91079615 %jrec |
9616+ %grec (lien args.typ |=(c=itype (itype-has-nvar c)))
91089617 %collection (lien args.typ |=(c=itype (itype-has-nvar c)))
91099618 %face $(typ body.typ)
91109619 %fn |($(typ sample.typ) $(typ product.typ))
@@ -9216,11 +9725,13 @@
92169725 %any-atom |
92179726 %flag |
92189727 %noun |
9728+ %empty |
92199729 %tag |
92209730 %const |
92219731 %union |((lien cases.t |=(c=itype (has-atom-var n c))) (lien args.t |=(c=itype (has-atom-var n c))))
92229732 %recursive |
92239733 %jrec |
9734+ %grec (lien args.t |=(c=itype (has-atom-var n c)))
92249735 %collection (lien args.t |=(c=itype (has-atom-var n c)))
92259736 %face $(t body.t)
92269737 %fn |($(t sample.t) $(t product.t))
@@ -9364,6 +9875,7 @@
93649875++ infer-recursive-gate
93659876 |= [d=def env=ienv state=istate]
93669877 ^- iresult
9878+ ?^ defer.state [%| ["deferred recursive inference is unsupported" ~]]
93679879 =. gate-defs.state ~
93689880 ?. ?=(%value -.d) [%| ["recursive definition is not a gate" ~]]
93699881 ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d))
@@ -9588,6 +10100,7 @@
958810100++ infer-gate-group
958910101 |= [ds=(list def) env=ienv state=istate]
959010102 ^- ilocal-result
10103+ ?^ defer.state [%| ["deferred recursive inference is unsupported" ~]]
959110104 =/ names=(list term) (global-value-names ds)
959210105 ?. (levy names |=(n=term (unique-value-name n names)))
959310106 [%| ["recursive group contains duplicate names" ~]]
@@ -9629,36 +10142,9 @@
962910142++ add-supported-defs
963010143 |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition)]
963110144 ^- [env=ienv artifacts=(list iwidth-definition)]
9632− ?~ ds [env artifacts]
9633− =/ d=def i.ds
9634− ?: ?=(%mold -.d) $(ds t.ds)
9635− ?. (unique-value-name name.d globals) $(ds t.ds)
9636− ?^ (ienv-lookup name.d env) $(ds t.ds)
9637− =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
9638− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
9639− =. gate-defs.initial checked
9640− =. head-evidence.initial heads
9641− =. initial (reserve-def-caps val.d initial)
9642− =/ result=iresult (infer-fragment val.d env initial)
9643− =? result ?=(%| -.result) (infer-recursive-gate d env initial)
9644− ?: ?=(%| -.result) $(ds t.ds)
9645− =. state.p.result (promote-restricted-numbers state.p.result env)
9646− =. 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)))
9647− ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
9648− ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
9649− =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
9650− ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
9651− ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
9652− =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
9653− ?: (gth (lent vars) 26) $(ds t.ds)
9654− =/ finalized=(unit (list iwprojection))
9655− (width-finalize projections.state.p.result sub.state.p.result vars)
9656− ?~ finalized $(ds t.ds)
9657− =? artifacts ?=(^ u.finalized)
9658− [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
9659− =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
9660− $(ds t.ds, env [[name.d [typ vars]] env], checked checked)
10145+ (add-supported-defs-core ds all-defs checked heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts ~)
966110146::
10147+
966210148+$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
966310149+$ iadj (map term (list term))
966410150+$ ivisited (map term ?)
@@ -9772,6 +10258,57 @@
977210258++ resolve-groups
977310259 |= [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)]
977410260 ^- iresolved
10261+ (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
10262+::
10263+
10264++$ iadded-definition
10265+ [env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10266+++ add-supported-result
10267+ |= [d=def result=iresult initial=istate env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10268+ ^- (unit iadded-definition)
10269+ ?> ?=(%value -.d)
10270+ ?: ?=(%| -.result) ~
10271+ =. state.p.result (promote-restricted-numbers state.p.result env)
10272+ =. 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)))
10273+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) ~
10274+ ?: (constrained-capitals caps.state.p.result sub.state.p.result) ~
10275+ =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10276+ ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) ~
10277+ ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) ~
10278+ =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10279+ ?: (gth (lent vars) 26) ~
10280+ =/ finalized=(unit (list iwprojection))
10281+ (width-finalize projections.state.p.result sub.state.p.result vars)
10282+ ?~ finalized ~
10283+ =? artifacts ?=(^ u.finalized)
10284+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10285+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10286+ `[[[name.d [typ vars]] env] checked artifacts]
10287+++ add-supported-defs-core
10288+ |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10289+ ^- [env=ienv artifacts=(list iwidth-definition)]
10290+ ?~ ds [env artifacts]
10291+ =/ d=def i.ds
10292+ ?: ?=(%mold -.d) $(ds t.ds)
10293+ ?: (lien (program-recovery-names all-defs) |=(n=term =(n name.d))) $(ds t.ds)
10294+ ?. (unique-value-name name.d globals) $(ds t.ds)
10295+ ?^ (ienv-lookup name.d env) $(ds t.ds)
10296+ =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10297+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
10298+ =. grec-index.initial index
10299+ =. gate-defs.initial checked
10300+ =. head-evidence.initial heads
10301+ =. initial (reserve-def-caps val.d initial)
10302+ =/ result=iresult (infer-fragment val.d env initial)
10303+ =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10304+ =/ added=(unit iadded-definition)
10305+ (add-supported-result d result initial env checked artifacts)
10306+ ?~ added $(ds t.ds)
10307+ $(ds t.ds, env env.u.added, checked checked.u.added, artifacts artifacts.u.added)
10308+::
10309+++ resolve-groups-core
10310+ |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10311+ ^- iresolved
977510312 =/ env=ienv ~
977610313 =/ grouped=(list term) ~
977710314 =/ artifacts=(list iwidth-definition) ~
@@ -9783,8 +10320,9 @@
978310320 =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
978410321 |-
978510322 =/ next=[env=ienv artifacts=(list iwidth-definition)]
9786− (add-supported-defs ds ds (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts)
9787− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
10323+ (add-supported-defs-core ds ds (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts index)
10324+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
10325+ =. grec-index.initial index
978810326 =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
978910327 ?: =(env env.out) out
979010328 $(env env.out, grouped grouped.out, artifacts artifacts.out)
@@ -10033,6 +10571,257 @@
1003310571 %overlap
1003410572 %unknown
1003510573::
10574+:: A source-only fallback for literal-tagged cells and one-hop local
10575+:: generic applications. It screens all work before ordinary inference.
10576+++ union-simple-shape-budget
10577+ |= [s=shape fuel=@ud vars=(unit (list @t))]
10578+ ^- (unit @ud)
10579+ ?: =(0 fuel) ~
10580+ =. fuel (dec fuel)
10581+ ?- -.s
10582+ ?(%aura %noun %void %flag) `fuel
10583+ %tvar
10584+ ?~ vars `fuel
10585+ ?:((lien u.vars |=(n=@t =(n name.s))) `fuel ~)
10586+ %const
10587+ ?. |(=(%term form.lit.s) =(%null form.lit.s) =(%loobean form.lit.s)) ~
10588+ ?: &(=(%loobean form.lit.s) !|(=(0 val.lit.s) =(1 val.lit.s))) ~
10589+ `fuel
10590+ %cell (union-simple-fields-budget fields.s fuel vars)
10591+ %fn
10592+ =/ left=(unit @ud) $(s sample.s, fuel fuel)
10593+ ?~ left ~
10594+ $(s product.s, fuel u.left)
10595+ * ~
10596+ ==
10597+++ union-simple-fields-budget
10598+ |= [fields=(list field) fuel=@ud vars=(unit (list @t))]
10599+ ^- (unit @ud)
10600+ ?~ fields `fuel
10601+ ?: =(0 fuel) ~
10602+ =/ field-shape=shape
10603+ ?- -.i.fields
10604+ %bare shape.i.fields
10605+ %face shape.i.fields
10606+ %pun [%ref at.i.fields ~[name.i.fields]]
10607+ ==
10608+ =/ head=(unit @ud) (union-simple-shape-budget field-shape (dec fuel) vars)
10609+ ?~ head ~
10610+ $(fields t.fields, fuel u.head)
10611+++ union-source-find
10612+ |= [n=term molds=imolds fuel=@ud]
10613+ ^- (unit [body=shape left=@ud])
10614+ =/ found=(unit shape) ~
10615+ |-
10616+ ?~ molds
10617+ ?~ found ~
10618+ `[u.found fuel]
10619+ ?: =(0 fuel) ~
10620+ ?: =(n name.i.molds)
10621+ ?^ found ~
10622+ $(molds t.molds, fuel (dec fuel), found `body.i.molds)
10623+ $(molds t.molds, fuel (dec fuel))
10624+++ union-source-args-budget
10625+ |= [vars=(list @t) args=(list shape) fuel=@ud]
10626+ ^- (unit @ud)
10627+ =/ seen=(set @t) *(set @t)
10628+ |-
10629+ ?~ vars ?~(args `fuel ~)
10630+ ?~ args ~
10631+ ?: =(0 fuel) ~
10632+ ?: (~(has in:..zuse seen) i.vars) ~
10633+ =/ arg=(unit @ud) (union-simple-shape-budget i.args (dec fuel) ~)
10634+ ?~ arg ~
10635+ $(vars t.vars, args t.args, fuel u.arg, seen (~(put in:..zuse seen) i.vars))
10636+++ union-source-cell-tag
10637+ |= s=shape
10638+ ^- (unit @)
10639+ ?. ?=(%cell -.s) ~
10640+ ?~ fields.s ~
10641+ ?~ t.fields.s ~
10642+ ?. ?=(%bare -.i.fields.s) ~
10643+ =/ head=shape shape.i.fields.s
10644+ ?. ?=(%const -.head) ~
10645+ ?. |(=(%term form.lit.head) =(%null form.lit.head) =(%loobean form.lit.head)) ~
10646+ ?: &(=(%loobean form.lit.head) !|(=(0 val.lit.head) =(1 val.lit.head))) ~
10647+ `val.lit.head
10648+++ union-source-case-tag
10649+ |= [s=shape molds=imolds fuel=@ud]
10650+ ^- (unit [tag=@ left=@ud])
10651+ ?: ?=(%cell -.s)
10652+ =/ tag=(unit @) (union-source-cell-tag s)
10653+ ?~ tag ~
10654+ =/ left=(unit @ud) (union-simple-shape-budget s fuel ~)
10655+ ?~ left ~
10656+ `[u.tag u.left]
10657+ ?. ?=(%apply -.s) ~
10658+ ?. ?=([@ ~] ref.s) ~
10659+ ?: =(0 fuel) ~
10660+ =/ found=(unit [body=shape left=@ud]) (union-source-find i.ref.s molds (dec fuel))
10661+ ?~ found ~
10662+ ?. ?=(%generic -.body.u.found) ~
10663+ ?~ vars.body.u.found ~
10664+ =/ tag=(unit @) (union-source-cell-tag body.body.u.found)
10665+ ?~ tag ~
10666+ =/ args=(unit @ud) (union-source-args-budget vars.body.u.found args.s left.u.found)
10667+ ?~ args ~
10668+ =/ left=(unit @ud) (union-simple-shape-budget body.body.u.found u.args `vars.body.u.found)
10669+ ?~ left ~
10670+ `[u.tag u.left]
10671+++ union-source-distinct-tags
10672+ |= [cases=(list shape) molds=imolds fuel=@ud]
10673+ ^- ?
10674+ =/ seen=(set @) *(set @)
10675+ =/ has-application=? |
10676+ |-
10677+ ?~ cases has-application
10678+ ?: =(0 fuel) |
10679+ =/ item=(unit [tag=@ left=@ud]) (union-source-case-tag i.cases molds (dec fuel))
10680+ ?~ item |
10681+ ?: (~(has in:..zuse seen) tag.u.item) |
10682+ $(cases t.cases, fuel left.u.item, seen (~(put in:..zuse seen) tag.u.item), has-application |(has-application ?=(%apply -.i.cases)))
10683+::
10684+:: This inference-only screen bounds inherited work that the small source
10685+:: slice may consult. It does not authenticate a caller-created state.
10686+++ union-state-leaf
10687+ |= t=itype
10688+ ^- ?
10689+ ?=(?(%var %avar %rvar %nvar %rnvar %atom %any-atom %flag %noun %empty %const) -.t)
10690+++ union-state-params-budget
10691+ |= [params=iparams fuel=@ud]
10692+ ^- (unit @ud)
10693+ ?~ params `fuel
10694+ ?: =(0 fuel) ~
10695+ ?. (union-state-leaf typ.i.params) ~
10696+ $(params t.params, fuel (dec fuel))
10697+++ union-state-sub-budget
10698+ |= [sub=isub fuel=@ud]
10699+ ^- (unit @ud)
10700+ ?~ sub `fuel
10701+ ?: =(0 fuel) ~
10702+ ?. (union-state-leaf val.i.sub) ~
10703+ $(sub t.sub, fuel (dec fuel))
10704+++ union-state-caps-budget
10705+ |= [caps=icaps fuel=@ud]
10706+ ^- (unit @ud)
10707+ ?~ caps `fuel
10708+ ?: =(0 fuel) ~
10709+ $(caps t.caps, fuel (dec fuel))
10710+++ union-state-active-budget
10711+ |= [active=(list term) fuel=@ud]
10712+ ^- (unit @ud)
10713+ ?~ active `fuel
10714+ ?: =(0 fuel) ~
10715+ $(active t.active, fuel (dec fuel))
10716+++ union-state-tags-budget
10717+ |= [tags=(list ipending) fuel=@ud]
10718+ ^- (unit @ud)
10719+ ?~ tags `fuel
10720+ ?: =(0 fuel) ~
10721+ $(tags t.tags, fuel (dec fuel))
10722+++ union-source-state-safe
10723+ |= [state=istate fuel=@ud]
10724+ ^- ?
10725+ ?^ grec-index.state |
10726+ ?^ holes.state |
10727+ ?^ defer.state |
10728+ ?^ obligations.state |
10729+ =/ params=(unit @ud) (union-state-params-budget params.state fuel)
10730+ ?~ params |
10731+ =/ sub=(unit @ud) (union-state-sub-budget sub.state u.params)
10732+ ?~ sub |
10733+ =/ caps=(unit @ud) (union-state-caps-budget caps.state u.sub)
10734+ ?~ caps |
10735+ =/ active=(unit @ud) (union-state-active-budget active.state u.caps)
10736+ ?~ active |
10737+ ?=(^ (union-state-tags-budget tags.state u.active))
10738+::
10739+:: Positive overlap witnesses from parsed, one-hop local source only.
10740+:: Unknown or exhausted work returns no witness, never disjointness.
10741++$ uow-case [at=span head=@ payload=upat]
10742+++ union-overlap-primitive
10743+ |= s=shape
10744+ ^- (unit upat)
10745+ ?- -.s
10746+ %aura `[%atom ~]
10747+ %noun `[%all ~]
10748+ %void `[%empty ~]
10749+ %flag `[%flag ~]
10750+ %const
10751+ ?. |(=(%term form.lit.s) =(%null form.lit.s) =(%loobean form.lit.s)) ~
10752+ ?: &(=(%loobean form.lit.s) !|(=(0 val.lit.s) =(1 val.lit.s))) ~
10753+ `[%atom `val.lit.s]
10754+ * ~
10755+ ==
10756+++ union-overlap-case
10757+ |= [s=shape molds=imolds fuel=@ud]
10758+ ^- (unit [item=uow-case left=@ud])
10759+ ?: =(0 fuel) ~
10760+ =. fuel (dec fuel)
10761+ :: Each body has exactly two fields; an application has exactly one
10762+ :: parameter and one concrete primitive argument. The full mold table
10763+ :: is scanned to establish unique ownership.
10764+ =/ expanded=(unit [body=shape param=(unit [name=@t pat=upat]) left=@ud])
10765+ ?: ?=(%cell -.s) `[s ~ fuel]
10766+ ?. ?=(%apply -.s) ~
10767+ ?. ?=([@ ~] ref.s) ~
10768+ ?. ?=([* ~] args.s) ~
10769+ ?: =(0 fuel) ~
10770+ =/ found=(unit [body=shape left=@ud]) (union-source-find i.ref.s molds (dec fuel))
10771+ ?~ found ~
10772+ ?. ?=(%generic -.body.u.found) ~
10773+ ?. ?=([@ ~] vars.body.u.found) ~
10774+ ?: =(0 left.u.found) ~
10775+ =/ argument=(unit upat) (union-overlap-primitive i.args.s)
10776+ ?~ argument ~
10777+ `[body.body.u.found `[i.vars.body.u.found u.argument] (dec left.u.found)]
10778+ ?~ expanded ~
10779+ =/ body=shape body.u.expanded
10780+ ?. ?=(%cell -.body) ~
10781+ ?. ?=([* * ~] fields.body) ~
10782+ :: Charge the cell, two fields, and the head and payload nodes.
10783+ ?: (lth left.u.expanded 5) ~
10784+ =/ head=(unit @) (union-source-cell-tag body)
10785+ ?~ head ~
10786+ =/ field=field i.t.fields.body
10787+ =/ payload=shape
10788+ ?- -.field
10789+ %bare shape.field
10790+ %face shape.field
10791+ %pun [%ref at.field ~[name.field]]
10792+ ==
10793+ =/ pattern=(unit upat)
10794+ ?: ?=(%tvar -.payload)
10795+ ?~ param.u.expanded ~
10796+ ?. =(name.payload name.u.param.u.expanded) ~
10797+ `pat.u.param.u.expanded
10798+ (union-overlap-primitive payload)
10799+ ?~ pattern ~
10800+ `[[at.s u.head u.pattern] (sub left.u.expanded 5)]
10801+++ union-overlap-against
10802+ |= [first=uow-case rest=(list shape) molds=imolds fuel=@ud]
10803+ ^- (unit [witness=(unit upair) left=@ud])
10804+ ?~ rest `[~ fuel]
10805+ ?: =(0 fuel) ~
10806+ =/ other=(unit [item=uow-case left=@ud]) (union-overlap-case i.rest molds (dec fuel))
10807+ ?~ other ~
10808+ ?: &(=(head.first head.item.u.other) =(%overlap (union-relate payload.first payload.item.u.other)))
10809+ `[`[at.first at.item.u.other %overlap] left.u.other]
10810+ $(rest t.rest, fuel left.u.other)
10811+++ union-source-overlap
10812+ |= [cases=(list shape) molds=imolds fuel=@ud]
10813+ ^- (unit upair)
10814+ ?~ cases ~
10815+ ?~ t.cases ~
10816+ ?: =(0 fuel) ~
10817+ =/ first=(unit [item=uow-case left=@ud]) (union-overlap-case i.cases molds (dec fuel))
10818+ ?~ first ~
10819+ =/ found=(unit [witness=(unit upair) left=@ud])
10820+ (union-overlap-against item.u.first t.cases molds left.u.first)
10821+ ?~ found ~
10822+ ?^ witness.u.found witness.u.found
10823+ $(cases t.cases, fuel left.u.found)
10824+::
1003610825++ union-pairs
1003710826 |= [cases=(list shape) molds=imolds]
1003810827 ^- (list upair)
@@ -10186,6 +10975,11 @@
1018610975 ?. ?=(%union -.sh) (crip "+$ {(trip name.d)}: not checked")
1018710976 =/ pairs=(list upair) (union-pairs cases.sh molds)
1018810977 =/ overlapping=(list upair) (skim pairs |=(p=upair =(%overlap relation.p)))
10978+ =. overlapping
10979+ ?^ overlapping overlapping
10980+ ?. (lien pairs |=(p=upair =(%unknown relation.p))) ~
10981+ =/ witness=(unit upair) (union-source-overlap cases.sh molds 256)
10982+ ?~(witness ~ ~[u.witness])
1018910983 ?^ overlapping
1019010984 =/ p=upair i.overlapping
1019110985 =/ summary=@t (crip "+$ {(trip name.d)}: overlapping cases; mold not checked")
@@ -10193,7 +10987,9 @@
1019310987 =/ second=@t (show-error src [file line.beg.second.p col.beg.second.p "overlapping case"])
1019410988 (of-wain:format ~[summary first second])
1019510989 ?: (lien pairs |=(p=upair =(%unknown relation.p)))
10196− (crip "+$ {(trip name.d)}: case disjointness unresolved; mold not checked")
10990+ ?. (union-source-distinct-tags cases.sh molds 256)
10991+ (crip "+$ {(trip name.d)}: case disjointness unresolved; mold not checked")
10992+ (crip "+$ {(trip name.d)}: cases proven disjoint; mold not checked")
1019710993 (crip "+$ {(trip name.d)}: cases proven disjoint; mold not checked")
1019810994::
1019910995:: +show-inference-diagnostic: a partial report with both source sites
@@ -10250,7 +11046,14 @@
1025011046+$ jbundle (list jsource)
1025111047+$ jcache (list [at=path iface=ifile])
1025211048+$ jfile-result (each [iface=ifile cache=jcache] @t)
11049+:: Overlap evidence retains the exact source that supplied its spans.
11050+:: Ordinary Jibb imports preserve this evidence through the resolver.
11051++$ jfile-overlap [file=path source=@t name=term cases=upair]
11052++$ jfile-failure [message=@t overlap=(unit jfile-overlap)]
11053++$ jfile-detailed-result (each [iface=ifile cache=jcache] jfile-failure)
1025311054+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
11055+:: Preserve an imported overlap's original file and source across the graph.
11056++$ jimports-detailed-result (each [resolved=ijimports cache=jcache] jfile-failure)
1025411057::
1025511058:: Written record fields each have their own lexical record scope.
1025611059+$ written-fields (map term span)
@@ -10523,6 +11326,43 @@
1052311326 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
1052411327 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
1052511328::
11329+:: A detailed failure is attached only to the first mold that actually
11330+:: failed in this check, using that module's checked source mold table.
11331++$ imold-failure [message=@t overlap=(unit [name=term cases=upair])]
11332+:: Validate a generic wrapper without an unbounded duplicate-name pass.
11333+++ module-mold-params-valid
11334+ |= [vars=(list @t) seen=(set @t) fuel=@ud]
11335+ ^- ?
11336+ ?~ vars &
11337+ ?: =(0 fuel) |
11338+ ?: (~(has in:..zuse seen) i.vars) |
11339+ $(vars t.vars, seen (~(put in:..zuse seen) i.vars), fuel (dec fuel))
11340+++ module-mold-overlap
11341+ |= [m=[name=term body=shape] molds=imolds]
11342+ ^- (unit upair)
11343+ =/ sh=shape body.m
11344+ =/ valid=?
11345+ ?. ?=(%generic -.sh) &
11346+ ?~ vars.sh |
11347+ (module-mold-params-valid vars.sh *(set @t) 256)
11348+ ?. valid ~
11349+ =? sh ?=(%generic -.sh) body.sh
11350+ ?. ?=(%union -.sh) ~
11351+ (union-source-overlap cases.sh molds 256)
11352+++ module-mold-types-detail
11353+ |= [molds=imolds state=istate]
11354+ ^- (each imold-types imold-failure)
11355+ ?~ molds [%& ~]
11356+ =/ m=[name=term body=shape] i.molds
11357+ =/ t=(unit [template=ischeme state=istate])
11358+ (infer-mold-template body.m state(active [name.m active.state], in-mold &))
11359+ ?~ t
11360+ =/ overlap=(unit upair) (module-mold-overlap m molds.state)
11361+ [%| ['module mold needs unsupported inference' ?~(overlap ~ `[name.m u.overlap])]]
11362+ =. typ.template.u.t (label-direct-union typ.template.u.t body.m name.m state)
11363+ =/ rest=(each imold-types imold-failure) $(molds t.molds)
11364+ ?: ?=(%| -.rest) rest
11365+ [%& [[name.m template.u.t] p.rest]]
1052611366++ module-mold-types
1052711367 |= [molds=imolds state=istate]
1052811368 ^- (each imold-types @t)
@@ -10584,6 +11424,9 @@
1058411424 |= [typ=itype name=term vars=(list @ud)]
1058511425 ^- itype
1058611426 ?: ?=(%jrec -.typ) typ(label `name)
11427+ ?: ?=(%grec -.typ)
11428+ ?. (identity-union-parameters vars args.typ) typ(label ~)
11429+ typ(label `name)
1058711430 ?. ?=(%union -.typ) typ
1058811431 ?. (identity-union-parameters vars args.typ)
1058911432 ?~ origin.typ typ
@@ -10616,7 +11459,12 @@
1061611459 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
1061711460 =/ minus=ischeme [[%fn b b] ~[0]]
1061811461 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
10619− [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
11462+ =/ utf8=itype [%atom 'tD']
11463+ =/ tape=itype [%collection %list ~[utf8]]
11464+ =/ codepoints=itype [%collection %list ~[[%atom %c]]]
11465+ =/ text-trip=ischeme [[%fn [%atom %t] tape] ~]
11466+ =/ text-tuba=ischeme [[%fn tape codepoints] ~]
11467+ [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater] [%raw-trip text-trip] [%raw-tuba text-tuba]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
1062011468::
1062111469++ infer-private-internal
1062211470 |= [src=@t public-source=@t]
@@ -10657,7 +11505,7 @@
1065711505 =/ source-unit=(unit ischeme)
1065811506 ?~ unit-decl ~
1065911507 =/ unit-molds=imolds ~[[%unit u.unit-decl]]
10660− =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~ ~ ~]
11508+ =/ unit-state=istate [0 ~ ~ ~ unit-molds ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ | /lib/jibb/prelude/jibb ~[%unit] ~ ~ 256 ~ ~ ~ ~ ~ ~]
1066111509 =/ unit-types=imold-types (partial-prelude-molds unit-molds unit-state)
1066211510 =/ unit-iface=ifile [~ unit-types /lib/jibb/prelude/jibb ~ ~ ~ ~ ~]
1066311511 =/ found=(unit ischeme) (find-jibb-mold %unit unit-iface)
@@ -10672,7 +11520,7 @@
1067211520 =/ js=ijimports ~[[face.i.imports.mod primitive]]
1067311521 =/ reserved=(list term) ~[face.i.imports.mod]
1067411522 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
10675− =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~ ~ ~]
11523+ =/ state=istate [0 ~ ~ ~ molds globals ~ ~ ~ ~ js reserved ~ ~ ~ | at top ~ ~ 256 ~ ~ ~ ~ ~ ~]
1067611524 =/ mts=(each imold-types @t) (module-mold-types molds state)
1067711525 =/ usable=(unit imold-types)
1067811526 ?: ?=(%& -.mts) `p.mts
@@ -10728,7 +11576,7 @@
1072811576 =? env-molds declared
1072911577 (skim molds |=(m=[name=term body=shape] !=(%list name.m)))
1073011578 =/ reserved=(list term) ?:(declared ~[%list] ~)
10731− =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~ ~ ~]
11579+ =/ state=istate [0 ~ ~ ~ env-molds globals ~ ~ ~ ~ u.private reserved ~ ~ ~ | at names ~ ~ 256 ~ ~ ~ ~ ~ ~]
1073211580 :: Other prelude molds may use list only after its source has passed
1073311581 :: the standard-list check. The raw declaration remains removed.
1073411582 =/ declared-list=(unit shape) (find-simple-mold %list molds)
@@ -10832,6 +11680,25 @@
1083211680 =(externals.g externals)
1083311681 =(marks.g marks)
1083411682 ==
11683+++ request-graph-bounded
11684+ |= g=irequest-graph
11685+ ^- ?
11686+ =/ total=@ud (add (lent requests.g) (lent stores.g))
11687+ &((lte (lent ~(tap in:..zuse paths.g)) 256) (lte total 256))
11688+::
11689+++ store-graph-requests-add
11690+ |= [pending=(list istore-request-evidence) acc=(list istore-request-evidence) fuel=@ud]
11691+ ^- (unit (list istore-request-evidence))
11692+ ?~ pending `acc
11693+ ?: =(0 fuel) ~
11694+ =/ hit=(list istore-request-evidence)
11695+ (skim acc |=(x=istore-request-evidence =(store-at.x store-at.i.pending)))
11696+ ?^ hit
11697+ ?. ?=([* ~] hit) ~
11698+ ?. =(i.hit i.pending) ~
11699+ $(pending t.pending, fuel (dec fuel))
11700+ $(pending t.pending, acc [i.pending acc], fuel (dec fuel))
11701+::
1083511702++ request-graph-merge
1083611703 |= [imports=ijimports g=irequest-graph fuel=@ud]
1083711704 ^- (unit irequest-graph)
@@ -10852,8 +11719,13 @@
1085211719 =/ rs=(unit (list irequest-evidence))
1085311720 (request-graph-requests-add requests.cg requests.g (add 1 (lent requests.cg)))
1085411721 ?~ rs ~
10855− ?: &(?=(^ u.rs) |((gth (lent ~(tap in:..zuse merged)) 256) (gth (lent u.rs) 256))) ~
10856− $(imports t.imports, g g(paths merged, requests u.rs), fuel (dec fuel))
11722+ =/ ss=(unit (list istore-request-evidence))
11723+ (store-graph-requests-add stores.cg stores.g (add 1 (lent stores.cg)))
11724+ ?~ ss ~
11725+ =/ total=@ud (add (lent u.rs) (lent u.ss))
11726+ ?: &(?=(^ u.rs) |((gth (lent ~(tap in:..zuse merged)) 256) (gth total 256))) ~
11727+ ?: &(?=(^ u.ss) |((gth (lent ~(tap in:..zuse merged)) 256) (gth total 256))) ~
11728+ $(imports t.imports, g g(paths merged, requests u.rs, stores u.ss), fuel (dec fuel))
1085711729++ request-graph-reusable
1085811730 |= [f=ifile src=@t externals=iexternals marks=imark-externals modules=jbundle active=(list path) values=(list term) molds=(list term) prelude=(unit ifile)]
1085911731 ^- ?
@@ -10868,33 +11740,40 @@
1086811740++ resolve-jibb-imports
1086911741 |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
1087011742 ^- jimports-result
11743+ =/ result=jimports-detailed-result
11744+ (resolve-jibb-imports-detailed imports externals mark-externals modules active prelude-values prelude-molds cache prelude)
11745+ ?: ?=(%| -.result) [%| message.p.result]
11746+ [%& p.result]
11747+++ resolve-jibb-imports-detailed
11748+ |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
11749+ ^- jimports-detailed-result
1087111750 ?~ imports [%& [~ cache]]
1087211751 ?. ?=(%jibb -.i.imports) $(imports t.imports)
1087311752 =/ at=path (weld path.i.imports `path`~[%jibb])
1087411753 ?: =(at /lib/jibb/internal/jibb)
10875− [%| 'the prelude internal module is private']
11754+ [%| ['the prelude internal module is private' ~]]
1087611755 ?: =(at /lib/jibb/primitives/jibb)
10877− [%| 'the prelude primitive interface is private']
11756+ [%| ['the prelude primitive interface is private' ~]]
1087811757 ?: (lien active |=(p=path =(p at)))
10879− [%| (crip "import cycle at {(spud at)}")]
11758+ [%| [(crip "import cycle at {(spud at)}") ~]]
1088011759 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
10881− ?~ found [%| (crip "module source missing: {(spud at)}")]
10882− ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
11760+ ?~ found [%| [(crip "module source missing: {(spud at)}") ~]]
11761+ ?^ t.found [%| [(crip "duplicate module sources: {(spud at)}") ~]]
1088311762 =/ cached=(unit ifile) (find-jibb-cache at cache)
10884− =/ iface=jfile-result
11763+ =/ iface=jfile-detailed-result
1088511764 ?^ cached
10886− ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11765+ ?. =(at.u.cached at) [%| ['cached module identity needs unsupported inference' ~]]
1088711766 ?~ graph.u.cached
1088811767 :: A detached legacy interface has unknown evidence. Rebuild it
1088911768 :: against the current graph, without retaining any stale entry.
1089011769 =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
10891− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
11770+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
1089211771 ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
10893− [%| 'cached module evidence needs unsupported inference']
11772+ [%| ['cached module evidence needs unsupported inference' ~]]
1089411773 [%& [u.cached cache]]
10895− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
11774+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
1089611775 ?: ?=(%| -.iface) [%| p.iface]
10897− =/ rest=jimports-result $(imports t.imports, cache cache.p.iface)
11776+ =/ rest=jimports-detailed-result $(imports t.imports, cache cache.p.iface)
1089811777 ?: ?=(%| -.rest) rest
1089911778 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
1090011779::
@@ -11257,7 +12136,7 @@
1125712136 =/ surs=(list term) (collect-sur-imports imports.mod)
1125812137 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1125912138 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11260− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
12139+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1126112140 =/ mts=(each imold-types @t) (module-mold-types molds state)
1126212141 ?: ?=(%| -.mts) [%| p.mts]
1126312142 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
@@ -11291,7 +12170,7 @@
1129112170 =/ surs=(list term) (collect-sur-imports imports.mod)
1129212171 =/ reserved=(list term) (weld molds.prep (turn resolved.p.deps |=(j=[face=term interface=ifile] face.j)))
1129312172 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11294− =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
12173+ =/ state=istate [0 ~ ~ ~ molds globals externals surs marks declared resolved.p.deps reserved ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1129512174 =/ mts=(each imold-types @t) (module-mold-types molds state)
1129612175 ?: ?=(%| -.mts) [%| p.mts]
1129712176 =/ resolution=iresolved (resolve-groups ordinary molds globals externals surs marks declared resolved.p.deps reserved file prelude)
@@ -11304,6 +12183,28 @@
1130412183:: Value watchability remains unproved even for a watchable declaration.
1130512184+$ ione-request-interface
1130612185 [support=iapi-support-evidence parts=iapi-request-parts iface=ifile]
12186+++ store-compatible-poke
12187+ |= prelude=iprelude
12188+ ^- (unit ischeme)
12189+ =/ public=ifile iface.prelude
12190+ ?. =(at.public /lib/jibb/prelude/jibb) ~
12191+ =/ poke=(unit ischeme) (find-jibb-mold %poke public)
12192+ ?~ poke ~
12193+ ?. ?=(%union -.typ.u.poke) ~
12194+ ?^ vars.u.poke ~
12195+ ?. =(origin.typ.u.poke `[/lib/jibb/internal/jibb %poke]) ~
12196+ ?: (itype-has-tag typ.u.poke) ~
12197+ =/ private=(list iwidth-dependency)
12198+ (skim dependencies.public |=(d=iwidth-dependency =(at.d /lib/jibb/internal/jibb)))
12199+ ?. ?=([* ~] private) ~
12200+ ?~ source.i.private ~
12201+ =/ agent-case=itype
12202+ [%cell [%const [%term %tas %agent '%agent']] [%cell [%face %agent [%atom %tas]] [%cell [%face %mark [%atom %tas]] [%face %payload [%noun ~]]]]]
12203+ =/ store-case=itype
12204+ [%cell [%const [%term %tas %store '%store']] [%cell [%face %module [%atom %t]] [%cell [%face %action [%atom %tas]] [%face %payload [%noun ~]]]]]
12205+ ?. =(cases.typ.u.poke ~[agent-case store-case]) ~
12206+ poke
12207+::
1130712208++ request-compatible-ask
1130812209 |= prelude=iprelude
1130912210 ^- (unit ischeme)
@@ -11400,7 +12301,7 @@
1140012301 ?~ source.i.private [%| 'request internal source needs unsupported inference']
1140112302 =/ req=irequest-evidence
1140212303 [file name.path.p p src u.source.public u.source.i.private values.prelude molds.prelude externals marks]
11403− =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
12304+ =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] ~ modules `public values.prelude molds.prelude externals marks]]
1140412305 [%& [support u.parts interface]]
1140512306:: Graph-aware request artifact; resolver use remains type-only.
1140612307++ one-request-interface-graph
@@ -11454,7 +12355,7 @@
1145412355 ?~ source.i.private [%| 'request internal source needs unsupported inference']
1145512356 =/ req=irequest-evidence
1145612357 [file name.path.p p src u.source.public u.source.i.private values.prelude molds.prelude externals marks]
11457− =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] modules `public values.prelude molds.prelude externals marks]]
12358+ =/ interface=ifile [~[[name.path.p scheme]] exports file ~ ~ ~ `src `[(silt `(list path)`~[file]) ~[req] ~ modules `public values.prelude molds.prelude externals marks]]
1145812359 [%& [support u.parts interface]]
1145912360::
1146012361++ api-mark-exports
@@ -11623,25 +12524,1557 @@
1162312524 [%| 'API exported molds need unsupported inference']
1162412525 =/ env=ienv (weld values.u.gates (weld values.u.poke values.support))
1162512526 =/ graph=irequest-graph
11626− [(silt `(list path)`~[file]) requests.u.gates modules `public values.prep molds.prep externals marks]
12527+ [(silt `(list path)`~[file]) requests.u.gates ~ modules `public values.prep molds.prep externals marks]
1162712528 =/ iface=ifile
1162812529 [env exports file derived.u.poke elaborations.support ~ `src `graph]
1162912530 [%& [iface dependencies.ev]]
1163012531::
11631−++ infer-jibb-file
11632− |= [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)]
11633− ^- jfile-result
11634− =/ parsed (parse at src)
11635− ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
11636− =/ mod=module p.parsed
11637− =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
11638− ?^ duplicate [%| (show-duplicate-fields at src u.duplicate)]
11639− ?: ?=([%ui %api *] at)
12532+:: A checked program main is only the direct four-component source call.
12533+:: Grouping is transparent, but aliases, qualified wings and other module
12534+:: kinds remain outside this slice.
12535+++ program-main-def
12536+ |= ds=(list def)
12537+ ^- (unit def)
12538+ ?~ ds ~
12539+ ?: &(?=(%value -.i.ds) =(%main name.i.ds)) `i.ds
12540+ $(ds t.ds)
12541+::
12542+++ program-main-wing
12543+ |= e=expr
12544+ ^- (unit term)
12545+ ?: ?=(%group -.e) $(e inner.e)
12546+ ?. ?=(%wing -.e) ~
12547+ ?. ?=([@ ~] names.e) ~
12548+ `i.names.e
12549+::
12550+++ program-main-args
12551+ |= d=def
12552+ ^- (unit (list expr))
12553+ ?. ?=(%value -.d) ~
12554+ |-
12555+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12556+ ?. ?=(%call -.val.d) ~
12557+ =/ head=(unit term) (program-main-wing head.val.d)
12558+ ?~ head ~
12559+ ?. =(%program u.head) ~
12560+ ?. ?=([* * * * ~] args.val.d) ~
12561+ `args.val.d
12562+::
12563+++ program-main-parts
12564+ |= d=def
12565+ ^- (unit [init=term update=term view=term subs=term])
12566+ ?. ?=(%value -.d) ~
12567+ |-
12568+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12569+ ?. ?=(%call -.val.d) ~
12570+ =/ head=(unit term) (program-main-wing head.val.d)
12571+ ?~ head ~
12572+ ?. =(%program u.head) ~
12573+ ?. ?=([* * * * ~] args.val.d) ~
12574+ =/ args=(list expr) args.val.d
12575+ ?> ?=([* * * * ~] args)
12576+ =/ init=(unit term) (program-main-wing i.args)
12577+ =/ update=(unit term) (program-main-wing i.t.args)
12578+ =/ view=(unit term) (program-main-wing i.t.t.args)
12579+ =/ subs=(unit term) (program-main-wing i.t.t.t.args)
12580+ ?~ init ~
12581+ ?~ update ~
12582+ ?~ view ~
12583+ ?~ subs ~
12584+ `[u.init u.update u.view u.subs]
12585+::
12586+:: A data page is only the direct two-component source call. Grouping is
12587+:: transparent, but page aliases, qualified wings and other kinds are not.
12588+++ page-main-parts
12589+ |= d=def
12590+ ^- (unit [load=term view=term])
12591+ ?. ?=(%value -.d) ~
12592+ |-
12593+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12594+ ?. ?=(%call -.val.d) ~
12595+ =/ head=(unit term) (program-main-wing head.val.d)
12596+ ?~ head ~
12597+ ?. =(%page u.head) ~
12598+ ?. ?=([* * ~] args.val.d) ~
12599+ =/ args=(list expr) args.val.d
12600+ ?> ?=([* * ~] args)
12601+ =/ load=(unit term) (program-main-wing i.args)
12602+ =/ view=(unit term) (program-main-wing i.t.args)
12603+ ?~ load ~
12604+ ?~ view ~
12605+ `[u.load u.view]
12606+::
12607+:: A store main is only the direct two-wing source call. The poke declaration
12608+:: is checked here, then removed before every ordinary mold/value inference pass.
12609+++ store-main-parts
12610+ |= d=def
12611+ ^- (unit [init=term update=term])
12612+ ?. ?=(%value -.d) ~
12613+ |-
12614+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12615+ ?. ?=(%call -.val.d) ~
12616+ =/ head=(unit term) (program-main-wing head.val.d)
12617+ ?~ head ~
12618+ ?. =(%store u.head) ~
12619+ ?. ?=([* * ~] args.val.d) ~
12620+ =/ args=(list expr) args.val.d
12621+ ?> ?=([* * ~] args)
12622+ =/ init=(unit term) (program-main-wing i.args)
12623+ =/ update=(unit term) (program-main-wing i.t.args)
12624+ ?~ init ~
12625+ ?~ update ~
12626+ `[u.init u.update]
12627+::
12628++$ istore-declaration [action=term defs=(list def)]
12629+++ store-declaration
12630+ |= [mod=module prelude-values=(list term) prelude-molds=(list term)]
12631+ ^- (unit istore-declaration)
12632+ =/ ds=(list def) defs.mod
12633+ =/ pokes=(list def)
12634+ (skim ds |=(d=def &(?=(%mold -.d) =(%poke name.d))))
12635+ ?. ?=([* ~] pokes) ~
12636+ =/ states=(list def)
12637+ (skim ds |=(d=def &(?=(%mold -.d) =(%state name.d))))
12638+ ?. ?=([* ~] states) ~
12639+ =/ poke=def i.pokes
12640+ =/ state=def i.states
12641+ ?> &(?=(%mold -.poke) ?=(%mold -.state))
12642+ ?: ?=(%generic -.shape.state) ~
12643+ ?. ?=(%ref -.shape.poke) ~
12644+ ?. ?=([@ ~] names.shape.poke) ~
12645+ =/ action=term i.names.shape.poke
12646+ =/ actions=(list def)
12647+ (skim ds |=(d=def &(?=(%mold -.d) =(action name.d))))
12648+ ?. ?=([* ~] actions) ~
12649+ =/ action-def=def i.actions
12650+ ?> ?=(%mold -.action-def)
12651+ ?: ?=(%generic -.shape.action-def) ~
12652+ =/ ordinary=(list def)
12653+ (skim ds |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
12654+ ?. (module-scope-valid mod(defs ordinary) prelude-values prelude-molds) ~
12655+ =/ derived=(list term) ~[%state action]
12656+ ?: (lien derived |=(n=term =(n %proj))) ~
12657+ =/ outer=(list term)
12658+ (weld prelude-values (weld (global-value-names ordinary) (api-import-faces imports.mod)))
12659+ ?. (levy derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x)))))) ~
12660+ `[action ordinary]
12661+::
12662+++ program-empty-null
12663+ |= e=expr
12664+ ^- ?
12665+ ?- -.e
12666+ %lit =(%null form.lit.e)
12667+ %cast $(e val.e)
12668+ %group $(e inner.e)
12669+ %body ?~(defs.e $(e final.e) |)
12670+ * |
12671+ ==
12672+::
12673+++ program-subs-empty
12674+ |= d=def
12675+ ^- ?
12676+ ?. ?=(%value -.d) |
12677+ ?- -.val.d
12678+ %gate (program-empty-null body.val.d)
12679+ %gate-wide (program-empty-null body.val.d)
12680+ * |
12681+ ==
12682+::
12683+++ program-transparent
12684+ |= e=expr
12685+ ^- expr
12686+ ?- -.e
12687+ %group $(e inner.e)
12688+ %cast $(e val.e)
12689+ %body ?~(defs.e $(e final.e) e)
12690+ * e
12691+ ==
12692+++ program-init-tuple-null
12693+ |= d=def
12694+ ^- ?
12695+ ?. ?=(%value -.d) |
12696+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12697+ =/ body=expr
12698+ ?- -.val.d
12699+ %gate body.val.d
12700+ %gate-wide body.val.d
12701+ * !!
12702+ ==
12703+ =. body (program-transparent body)
12704+ ?. ?=(%tuple -.body) |
12705+ ?~ items.body |
12706+ (program-empty-null val:(rear items.body))
12707+::
12708+:: Recover only the update of an already recognized direct program main.
12709+:: Its written sample determines the message/model relationship; the canonical
12710+:: cmd, unit and update slot determine the result context. Publication is
12711+:: component-local so later subscription/view/initializer retries can accumulate.
12712+++ program-update-context
12713+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
12714+ ^- (unit iresolved)
12715+ =/ env=ienv env.resolution
12716+ ?^ (ienv-lookup %main env) ~
12717+ ?^ (ienv-lookup update.parts env) ~
12718+ =/ updates=(list def)
12719+ (skim ds |=(d=def &(?=(%value -.d) =(update.parts name.d))))
12720+ ?. ?=([* ~] updates) ~
12721+ =/ update-def=def i.updates
12722+ ?> ?=(%value -.update-def)
12723+ =/ written-update=(unit sample) (direct-gate-sample update-def)
12724+ ?~ written-update ~
12725+ ?. ?=(%cell -.u.written-update) ~
12726+ ?. ?=([* * ~] items.u.written-update) ~
12727+ ?~ prelude.initial ~
12728+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
12729+ ?~ program ~
12730+ =/ command=(unit ischeme) (find-jibb-mold %cmd u.prelude.initial)
12731+ =/ list-template=(unit ischeme) (find-jibb-mold %list u.prelude.initial)
12732+ ?~ command ~
12733+ ?~ list-template ~
12734+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
12735+ ?~ heads ~
12736+ =/ written=(unit def) (~(get by gates.u.heads) %program)
12737+ ?~ written ~
12738+ =/ written-sample=(unit sample) (direct-gate-sample u.written)
12739+ ?~ written-sample ~
12740+ ?. ?=(%cell -.u.written-sample) ~
12741+ ?. ?=([* * * * ~] items.u.written-sample) ~
12742+ =/ checked=(map term def)
12743+ (~(put by (direct-checked-gates ds env)) update.parts update-def)
12744+ =/ templates=ienv
12745+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
12746+ =/ scanned=(unit dgscan)
12747+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
12748+ ?~ scanned ~
12749+ =. next.initial (dg-next-id ids.u.scanned 0)
12750+ =/ update-state=istate (reserve-def-caps val.update-def initial)
12751+ =/ sam=isample-result (infer-sample u.written-update env update-state)
12752+ ?: ?=(%| -.sam) ~
12753+ =/ actual-sample=itype (itype-normalize typ.p.sam sub.state.p.sam)
12754+ ?. ?=(%cell -.actual-sample) ~
12755+ =/ message=(unit itype)
12756+ (direct-slot-body hed.actual-sample (direct-sample-name i.items.u.written-update))
12757+ =/ model=(unit itype)
12758+ (direct-slot-body tal.actual-sample (direct-sample-name i.t.items.u.written-update))
12759+ ?~ message ~
12760+ ?~ model ~
12761+ =/ cmd=(unit itype) (template-apply u.command ~[u.message])
12762+ ?~ cmd ~
12763+ =/ command-result=(unit itype) (template-apply u.list-template ~[u.cmd])
12764+ ?~ command-result ~
12765+ =/ product=itype [%cell u.model u.command-result]
12766+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program state.p.sam)
12767+ ?. ?=(%fn -.typ.instance) ~
12768+ ?. ?=(%cell -.sample.typ.instance) ~
12769+ ?. ?=(%cell -.tal.sample.typ.instance) ~
12770+ =/ expected-update=(unit itype)
12771+ (direct-slot-body hed.tal.sample.typ.instance (direct-sample-name i.t.items.u.written-sample))
12772+ ?~ expected-update ~
12773+ ?. ?=(%fn -.u.expected-update) ~
12774+ :: Sample binders are not value faces. Strip only those two slot faces
12775+ :: for the invariant canonical-gate proof; the source-faced gate is still
12776+ :: used by the complete positional call and final ordinary result cast.
12777+ =/ canonical-candidate=itype [%fn [%cell u.message u.model] product]
12778+ =/ gate-fit=ifit
12779+ (direct-invariant canonical-candidate u.expected-update sub.state.instance next.state.instance)
12780+ ?. ?=(%ok -.gate-fit) ~
12781+ =/ closed=itype
12782+ (itype-normalize [%fn typ.p.sam product] sub.gate-fit)
12783+ ?. ?=(%fn -.closed) ~
12784+ :: The closed product no longer needs the canonical slot substitutions.
12785+ :: Start the body at its ordinary sample state so existing branch retries
12786+ :: keep their substitution guards, but retain the shared fresh-ID high water.
12787+ =/ st=istate state.p.sam(next next.gate-fit, gate-defs checked, head-evidence heads)
12788+ =/ body=expr
12789+ ?- -.val.update-def
12790+ %gate body.val.update-def
12791+ %gate-wide body.val.update-def
12792+ * !!
12793+ ==
12794+ =/ inferred=iresult
12795+ (infer-call-context-arg body product.closed env.p.sam st (span-of body))
12796+ ?: ?=(%| -.inferred) ~
12797+ =/ product-fit=ifit
12798+ (itype-fit typ.p.inferred product.closed sub.state.p.inferred next.state.p.inferred)
12799+ ?. ?=(%ok -.product-fit) ~
12800+ =/ merged-product=itype
12801+ (itype-merge-faces typ.p.inferred product.closed sub.product-fit)
12802+ =/ actual-cast=itype [%fn typ.p.sam merged-product]
12803+ =/ cast=ifit
12804+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
12805+ ?. ?=(%ok -.cast) ~
12806+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
12807+ =/ adjusted=iresult
12808+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
12809+ =/ added=(unit iadded-definition)
12810+ (add-supported-result update-def adjusted update-state env checked artifacts.resolution)
12811+ ?~ added ~
12812+ =/ recovered=(unit ischeme) (ienv-lookup update.parts env.u.added)
12813+ ?~ recovered ~
12814+ ?. ?=(~ vars.u.recovered) ~
12815+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
12816+ `[env.u.added grouped.resolution artifacts.u.added]
12817+::
12818+++ program-inferred-slot
12819+ |= [typ=itype name=(unit term)]
12820+ ^- itype
12821+ ?~ name typ
12822+ ?: &(?=(%face -.typ) =(name.typ u.name)) body.typ
12823+ typ
12824+::
12825+++ program-inferred-sample
12826+ |= [typ=itype sam=sample]
12827+ ^- itype
12828+ (program-inferred-slot typ (direct-sample-name sam))
12829+::
12830+++ program-two-slot-names
12831+ |= sam=sample
12832+ ^- (unit [first=(unit term) second=(unit term)])
12833+ ?- -.sam
12834+ %cell
12835+ ?. ?=([* * ~] items.sam) ~
12836+ `[(direct-sample-name i.items.sam) (direct-sample-name i.t.items.sam)]
12837+ %face
12838+ ?. ?=(%cell -.shape.sam) ~
12839+ ?. ?=([* * ~] fields.shape.sam) ~
12840+ `[(direct-field-name i.fields.shape.sam) (direct-field-name i.t.fields.shape.sam)]
12841+ * ~
12842+ ==
12843+::
12844+:: Read message/model from the checked update and its written source layout.
12845+:: The source names strip only top-level sample binder faces; nested value
12846+:: faces remain part of the canonical message and model.
12847+++ program-update-relation
12848+ |= [name=term ds=(list def) env=ienv]
12849+ ^- (unit [message=itype model=itype])
12850+ =/ update=(unit ischeme) (ienv-lookup name env)
12851+ ?~ update ~
12852+ ?. ?=(~ vars.u.update) ~
12853+ ?. ?=(~ (itype-vars typ.u.update)) ~
12854+ ?. ?=(%fn -.typ.u.update) ~
12855+ ?. ?=(%cell -.sample.typ.u.update) ~
12856+ =/ defs=(list def)
12857+ (skim ds |=(d=def &(?=(%value -.d) =(name name.d))))
12858+ ?. ?=([* ~] defs) ~
12859+ =/ written=(unit sample) (direct-gate-sample i.defs)
12860+ ?~ written ~
12861+ ?. ?=(%cell -.u.written) ~
12862+ ?. ?=([* * ~] items.u.written) ~
12863+ =/ message=(unit itype)
12864+ (direct-slot-body hed.sample.typ.u.update (direct-sample-name i.items.u.written))
12865+ =/ model=(unit itype)
12866+ (direct-slot-body tal.sample.typ.u.update (direct-sample-name i.t.items.u.written))
12867+ ?~ message ~
12868+ ?~ model ~
12869+ `[u.message u.model]
12870+::
12871+:: Recover an unannotated direct subscription component from the checked
12872+:: update relation and canonical fourth program slot. This establishes only
12873+:: the value type; the final program watch proof remains separate.
12874+++ program-subs-context
12875+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
12876+ ^- (unit iresolved)
12877+ =/ env=ienv env.resolution
12878+ ?^ (ienv-lookup %main env) ~
12879+ ?^ (ienv-lookup subs.parts env) ~
12880+ =/ relation=(unit [message=itype model=itype])
12881+ (program-update-relation update.parts ds env)
12882+ ?~ relation ~
12883+ =/ subs=(list def)
12884+ (skim ds |=(d=def &(?=(%value -.d) =(subs.parts name.d))))
12885+ ?. ?=([* ~] subs) ~
12886+ =/ subs-def=def i.subs
12887+ ?> ?=(%value -.subs-def)
12888+ =/ written-subs=(unit sample) (direct-gate-sample subs-def)
12889+ ?~ written-subs ~
12890+ ?~ prelude.initial ~
12891+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
12892+ =/ sub=(unit ischeme) (find-jibb-mold %sub u.prelude.initial)
12893+ =/ list-template=(unit ischeme) (find-jibb-mold %list u.prelude.initial)
12894+ ?~ program ~
12895+ ?~ sub ~
12896+ ?~ list-template ~
12897+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
12898+ ?~ heads ~
12899+ =/ written=(unit def) (~(get by gates.u.heads) %program)
12900+ ?~ written ~
12901+ =/ written-sample=(unit sample) (direct-gate-sample u.written)
12902+ ?~ written-sample ~
12903+ ?. ?=(%cell -.u.written-sample) ~
12904+ ?. ?=([* * * * ~] items.u.written-sample) ~
12905+ =/ checked=(map term def) (direct-checked-gates ds env)
12906+ =/ templates=ienv
12907+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
12908+ =/ scanned=(unit dgscan)
12909+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
12910+ ?~ scanned ~
12911+ =. next.initial (dg-next-id ids.u.scanned 0)
12912+ =/ subs-state=istate (reserve-def-caps val.subs-def initial)
12913+ =/ sam=isample-result (infer-sample u.written-subs env subs-state)
12914+ ?: ?=(%| -.sam) ~
12915+ =/ actual-model=itype (program-inferred-sample typ.p.sam u.written-subs)
12916+ ?. ?=(~ (itype-vars actual-model)) ~
12917+ ?: (itype-has-tag actual-model) ~
12918+ =/ model-fit=ifit
12919+ (direct-invariant actual-model model.u.relation sub.state.p.sam next.state.p.sam)
12920+ ?. ?=(%ok -.model-fit) ~
12921+ =/ message-sub=(unit itype) (template-apply u.sub ~[message.u.relation])
12922+ ?~ message-sub ~
12923+ =/ product=(unit itype) (template-apply u.list-template ~[u.message-sub])
12924+ ?~ product ~
12925+ =/ instance=[typ=itype state=istate]
12926+ (instantiate-scheme u.program state.p.sam(sub sub.model-fit, next next.model-fit))
12927+ ?. ?=(%fn -.typ.instance) ~
12928+ ?. ?=(%cell -.sample.typ.instance) ~
12929+ ?. ?=(%cell -.tal.sample.typ.instance) ~
12930+ ?. ?=(%cell -.tal.tal.sample.typ.instance) ~
12931+ =/ expected-subs=(unit itype)
12932+ (direct-slot-body tal.tal.tal.sample.typ.instance (direct-sample-name i.t.t.t.items.u.written-sample))
12933+ ?~ expected-subs ~
12934+ ?. ?=(%fn -.u.expected-subs) ~
12935+ =/ canonical=itype [%fn model.u.relation u.product]
12936+ =/ gate-fit=ifit
12937+ (direct-invariant canonical u.expected-subs sub.state.instance next.state.instance)
12938+ ?. ?=(%ok -.gate-fit) ~
12939+ =/ closed=itype
12940+ (itype-normalize [%fn typ.p.sam u.product] sub.gate-fit)
12941+ ?. ?=(%fn -.closed) ~
12942+ =/ body=expr
12943+ ?- -.val.subs-def
12944+ %gate body.val.subs-def
12945+ %gate-wide body.val.subs-def
12946+ * !!
12947+ ==
12948+ =/ st=istate
12949+ state.p.sam(next next.gate-fit, gate-defs checked, head-evidence heads)
12950+ =/ inferred=iresult
12951+ (infer-call-context-arg body product.closed env.p.sam st (span-of body))
12952+ ?: ?=(%| -.inferred) ~
12953+ =/ product-fit=ifit
12954+ (itype-fit typ.p.inferred product.closed sub.state.p.inferred next.state.p.inferred)
12955+ ?. ?=(%ok -.product-fit) ~
12956+ =/ merged-product=itype
12957+ (itype-merge-faces typ.p.inferred product.closed sub.product-fit)
12958+ =/ actual-cast=itype [%fn typ.p.sam merged-product]
12959+ =/ cast=ifit
12960+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
12961+ ?. ?=(%ok -.cast) ~
12962+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
12963+ =/ adjusted=iresult
12964+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
12965+ =/ added=(unit iadded-definition)
12966+ (add-supported-result subs-def adjusted subs-state env checked artifacts.resolution)
12967+ ?~ added ~
12968+ =/ recovered=(unit ischeme) (ienv-lookup subs.parts env.u.added)
12969+ ?~ recovered ~
12970+ ?. ?=(~ vars.u.recovered) ~
12971+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
12972+ `[env.u.added grouped.resolution artifacts.u.added]
12973+::
12974++$ iview-site [xs=expr mapper=term]
12975+++ program-view-site
12976+ |= e=expr
12977+ ^- (unit iview-site)
12978+ =. e (program-transparent e)
12979+ ?. ?=(%call -.e) ~
12980+ ?. ?=([* ~] args.e) ~
12981+ =/ each=expr (program-transparent head.e)
12982+ ?. ?=(%wing -.each) ~
12983+ ?. ?=([%each ~] names.each) ~
12984+ =/ turned=expr (program-transparent i.args.e)
12985+ ?. ?=(%call -.turned) ~
12986+ ?. ?=([* * ~] args.turned) ~
12987+ =/ turn=expr (program-transparent head.turned)
12988+ ?. ?=(%wing -.turn) ~
12989+ ?. ?=([%turn ~] names.turn) ~
12990+ =/ xs=expr (program-transparent i.args.turned)
12991+ ?. ?=(%wing -.xs) ~
12992+ ?~ names.xs ~
12993+ =/ mapper=(unit term) (program-main-wing i.t.args.turned)
12994+ ?~ mapper ~
12995+ `[xs u.mapper]
12996+::
12997+++ program-recovery-names
12998+ |= ds=(list def)
12999+ ^- (list term)
13000+ =/ main=(unit def) (program-main-def ds)
13001+ ?~ main ~
13002+ =/ parts=(unit [init=term update=term view=term subs=term])
13003+ (program-main-parts u.main)
13004+ ?~ parts ~
13005+ =/ views=(list def)
13006+ (skim ds |=(d=def &(?=(%value -.d) =(view.u.parts name.d))))
13007+ ?. ?=([* ~] views) ~
13008+ =/ view-def=def i.views
13009+ ?> ?=(%value -.view-def)
13010+ =/ written=(unit sample) (direct-gate-sample view-def)
13011+ ?~ written ~
13012+ =/ body=expr
13013+ ?- -.val.view-def
13014+ %gate body.val.view-def
13015+ %gate-wide body.val.view-def
13016+ * !!
13017+ ==
13018+ =/ sites=(unit (list iview-site)) (program-view-sites body ~)
13019+ ?~ sites ~
13020+ ?. ?=([* ~] u.sites) ~
13021+ =/ mapper=term mapper.i.u.sites
13022+ =/ components=(list term)
13023+ :~ init.u.parts
13024+ update.u.parts
13025+ view.u.parts
13026+ subs.u.parts
13027+ ==
13028+ ?: (lien components |=(n=term =(n mapper))) ~
13029+ =/ mappers=(list def)
13030+ (skim ds |=(d=def &(?=(%value -.d) =(mapper name.d))))
13031+ ?. ?=([* ~] mappers) ~
13032+ :~ init.u.parts
13033+ update.u.parts
13034+ view.u.parts
13035+ subs.u.parts
13036+ mapper
13037+ ==
13038+::
13039+++ program-sample-binders
13040+ |= sam=sample
13041+ ^- (list term)
13042+ ?- -.sam
13043+ %bind ~[name.sam]
13044+ %face ~[name.sam]
13045+ %pun ~[name.sam]
13046+ %cell (zing (turn items.sam |=(s=sample (program-sample-binders s))))
13047+ * ~
13048+ ==
13049+::
13050+++ program-pattern-binders
13051+ |= pat=pattern
13052+ ^- (list term)
13053+ ?- -.pat
13054+ %bind ~[name.pat]
13055+ %cell (zing (turn items.pat |=(p=pattern (program-pattern-binders p))))
13056+ * ~
13057+ ==
13058+::
13059+++ program-view-sites-merge
13060+ |= [a=(unit (list iview-site)) b=(unit (list iview-site))]
13061+ ^- (unit (list iview-site))
13062+ ?~ a ~
13063+ ?~ b ~
13064+ `(weld u.a u.b)
13065+::
13066+++ program-view-sites-exprs
13067+ |= [xs=(list expr) locals=(list term)]
13068+ ^- (unit (list iview-site))
13069+ ?~ xs `~
13070+ (program-view-sites-merge (program-view-sites i.xs locals) $(xs t.xs))
13071+::
13072+++ program-view-sites-items
13073+ |= [xs=(list item) locals=(list term)]
13074+ ^- (unit (list iview-site))
13075+ ?~ xs `~
13076+ (program-view-sites-merge (program-view-sites val.i.xs locals) $(xs t.xs))
13077+::
13078+++ program-view-sites-pieces
13079+ |= [xs=(list piece) locals=(list term)]
13080+ ^- (unit (list iview-site))
13081+ ?~ xs `~
13082+ =/ here=(unit (list iview-site))
13083+ ?- -.i.xs
13084+ %expr (program-view-sites p.i.xs locals)
13085+ %text `~
13086+ ==
13087+ (program-view-sites-merge here $(xs t.xs))
13088+::
13089+++ program-view-sites-qsegs
13090+ |= [xs=(list qseg) locals=(list term)]
13091+ ^- (unit (list iview-site))
13092+ ?~ xs `~
13093+ =/ here=(unit (list iview-site))
13094+ ?- -.i.xs
13095+ %expr (program-view-sites p.i.xs locals)
13096+ %knot `~
13097+ ==
13098+ (program-view-sites-merge here $(xs t.xs))
13099+::
13100+++ program-view-sites-edits
13101+ |= [xs=(list edit) locals=(list term)]
13102+ ^- (unit (list iview-site))
13103+ ?~ xs `~
13104+ (program-view-sites-merge (program-view-sites val.i.xs locals) $(xs t.xs))
13105+::
13106+++ program-view-sites-defs
13107+ |= [xs=(list def) locals=(list term)]
13108+ ^- (unit (list iview-site))
13109+ ?~ xs `~
13110+ =/ here=(unit (list iview-site))
13111+ ?: ?=(%mold -.i.xs) `~
13112+ (program-view-sites val.i.xs locals)
13113+ (program-view-sites-merge here $(xs t.xs))
13114+::
13115+++ program-view-sites-arms
13116+ |= [xs=(list arm) locals=(list term)]
13117+ ^- (unit (list iview-site))
13118+ ?~ xs `~
13119+ =/ nested=(list term) (weld (program-pattern-binders pat.i.xs) locals)
13120+ (program-view-sites-merge (program-view-sites val.i.xs nested) $(xs t.xs))
13121+::
13122+++ program-view-sites
13123+ |= [e=expr locals=(list term)]
13124+ ^- (unit (list iview-site))
13125+ =/ site=(unit iview-site) (program-view-site e)
13126+ ?^ site
13127+ =/ names=(list term) ~[%each %turn mapper.u.site]
13128+ ?> ?=(%wing -.xs.u.site)
13129+ =/ root=term (rear names.xs.u.site)
13130+ ?: |((lien names |=(n=term (lien locals |=(x=term =(n x))))) (lien locals |=(x=term =(root x))))
13131+ ~
13132+ `~[u.site]
13133+ ?- -.e
13134+ %str (program-view-sites-pieces pieces.e locals)
13135+ %qath (program-view-sites-qsegs segs.e locals)
13136+ %change (program-view-sites-edits edits.e locals)
13137+ %pair (program-view-sites val.e locals)
13138+ %unit (program-view-sites val.e locals)
13139+ %group (program-view-sites inner.e locals)
13140+ %list (program-view-sites-exprs items.e locals)
13141+ %tuple (program-view-sites-items items.e locals)
13142+ %gate
13143+ (program-view-sites body.e (weld (program-sample-binders sample.e) locals))
13144+ %gate-wide
13145+ (program-view-sites body.e (weld (program-sample-binders sample.e) locals))
13146+ %call
13147+ (program-view-sites-merge (program-view-sites head.e locals) (program-view-sites-exprs args.e locals))
13148+ %cast (program-view-sites val.e locals)
13149+ %trace
13150+ (program-view-sites-merge (program-view-sites val.e locals) (program-view-sites then.e locals))
13151+ %branch
13152+ (program-view-sites-merge (program-view-sites subject.e locals) (program-view-sites-arms arms.e locals))
13153+ %body
13154+ =/ nested=(list term) (weld (global-value-names defs.e) locals)
13155+ (program-view-sites-merge (program-view-sites-defs defs.e nested) (program-view-sites final.e nested))
13156+ * `~
13157+ ==
13158+::
13159+++ program-union-tag-case
13160+ |= [expected=itype tag=@]
13161+ ^- (unit itype)
13162+ ?. ?=(%union -.expected) ~
13163+ =/ remaining=(list itype) cases.expected
13164+ =/ found=(unit itype) ~
13165+ =/ seen=(set @) *(set @)
13166+ |-
13167+ ?~ remaining found
13168+ =/ case=itype i.remaining
13169+ =/ head=(unit @)
13170+ ?: ?=(%const -.case) `val.literal.case
13171+ ?. ?=(%cell -.case) ~
13172+ ?. ?=(%const -.hed.case) ~
13173+ `val.literal.hed.case
13174+ ?~ head ~
13175+ ?: (~(has in:..zuse seen) u.head) ~
13176+ =. seen (~(put in:..zuse seen) u.head)
13177+ =? found =(tag u.head)
13178+ ?^(found ~ `case)
13179+ $(remaining t.remaining)
13180+::
13181+++ program-single-case-fit
13182+ |= [actual=itype expected=itype sub=isub next=@ud]
13183+ ^- ifit
13184+ =. actual (itype-normalize actual sub)
13185+ =. expected (itype-normalize expected sub)
13186+ ?. ?=(%union -.expected) [%unknown ~]
13187+ =/ found=(unit itype)
13188+ ?: ?=(%const -.actual) `actual
13189+ ?: ?=(%tag -.actual) `actual
13190+ ?: ?=(%cell -.actual) `actual
13191+ ?. ?=(%union -.actual) ~
13192+ ?. ?=([* ~] cases.actual) ~
13193+ `i.cases.actual
13194+ ?~ found [%unknown ~]
13195+ =/ case=itype u.found
13196+ =/ tag=(unit lit)
13197+ ?: ?=(%const -.case) `literal.case
13198+ ?: ?=(%tag -.case) `literal.case
13199+ ?. ?=(%cell -.case) ~
13200+ =/ head=itype (projection-field-target hed.case)
13201+ ?: ?=(%const -.head) `literal.head
13202+ ?: ?=(%tag -.head) `literal.head
13203+ ~
13204+ ?~ tag [%unknown ~]
13205+ =/ chosen=(unit itype) (program-union-tag-case expected val.u.tag)
13206+ ?~ chosen [%unknown ~]
13207+ ?: |(?=(%const -.case) ?=(%tag -.case))
13208+ ?. ?=(%const -.u.chosen) [%unknown ~]
13209+ (itype-fit case u.chosen sub next)
13210+ ?. ?=(%cell -.case) [%unknown ~]
13211+ ?. ?=(%cell -.u.chosen) [%unknown ~]
13212+ =/ head-fit=ifit (itype-fit hed.case hed.u.chosen sub next)
13213+ ?. ?=(%ok -.head-fit) head-fit
13214+ (itype-fit tal.case tal.u.chosen sub.head-fit next.head-fit)
13215+::
13216+++ program-single-generic-fit
13217+ |= [actual=itype expected=itype sub=isub next=@ud]
13218+ ^- ifit
13219+ =. actual (itype-normalize actual sub)
13220+ =. expected (itype-normalize expected sub)
13221+ ?. &(?=(%union -.actual) ?=(%union -.expected)) [%unknown ~]
13222+ ?~ origin.actual [%unknown ~]
13223+ ?. =(origin.actual origin.expected) [%unknown ~]
13224+ ?. ?=([* ~] args.actual) [%unknown ~]
13225+ ?. ?=([* ~] args.expected) [%unknown ~]
13226+ =/ argument-fit=ifit (direct-invariant i.args.actual i.args.expected sub next)
13227+ ?: ?=(%ok -.argument-fit) argument-fit
13228+ (program-single-case-fit i.args.actual i.args.expected sub next)
13229+::
13230+++ program-keyed-product-fit
13231+ |= [actual=itype expected=itype element=ischeme sub=isub next=@ud]
13232+ ^- ifit
13233+ =. actual (itype-normalize actual sub)
13234+ =. expected (itype-normalize expected sub)
13235+ ?. &(?=(%cell -.actual) ?=(%cell -.expected)) [%unknown ~]
13236+ =/ key-fit=ifit
13237+ (itype-fit (projection-field-target hed.actual) (projection-field-target hed.expected) sub next)
13238+ ?. ?=(%ok -.key-fit) key-fit
13239+ =/ actual-el=itype
13240+ (itype-normalize (projection-field-target tal.actual) sub.key-fit)
13241+ =/ expected-el=itype
13242+ (itype-normalize (projection-field-target tal.expected) sub.key-fit)
13243+ ?. &(?=(%union -.actual-el) ?=(%union -.expected-el)) [%unknown ~]
13244+ ?. =(origin.actual-el origin.expected-el) [%unknown ~]
13245+ ?. ?=([* ~] args.actual-el) [%unknown ~]
13246+ ?. ?=([* ~] args.expected-el) [%unknown ~]
13247+ =/ canonical-actual=(unit itype)
13248+ (template-apply element ~[i.args.actual-el])
13249+ =/ canonical-expected=(unit itype)
13250+ (template-apply element ~[i.args.expected-el])
13251+ ?~ canonical-actual [%unknown ~]
13252+ ?~ canonical-expected [%unknown ~]
13253+ =/ actual-check=ifit
13254+ (direct-invariant actual-el u.canonical-actual sub.key-fit next.key-fit)
13255+ ?. ?=(%ok -.actual-check) actual-check
13256+ =/ expected-check=ifit
13257+ (direct-invariant expected-el u.canonical-expected sub.actual-check next.actual-check)
13258+ ?. ?=(%ok -.expected-check) expected-check
13259+ =/ case-fit=ifit
13260+ (program-single-case-fit i.args.actual-el i.args.expected-el sub.expected-check next.expected-check)
13261+ case-fit
13262+::
13263+:: A direct view without a keyed each/turn site still needs the message type
13264+:: from the checked update. Recover only that closed component; final main
13265+:: checking remains the canonical program-kind boundary.
13266+++ program-plain-view-context
13267+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
13268+ ^- (unit iresolved)
13269+ =/ env=ienv env.resolution
13270+ ?^ (ienv-lookup %main env) ~
13271+ ?^ (ienv-lookup view.parts env) ~
13272+ =/ relation=(unit [message=itype model=itype])
13273+ (program-update-relation update.parts ds env)
13274+ ?~ relation ~
13275+ =/ views=(list def)
13276+ (skim ds |=(d=def &(?=(%value -.d) =(view.parts name.d))))
13277+ ?. ?=([* ~] views) ~
13278+ =/ view-def=def i.views
13279+ ?> ?=(%value -.view-def)
13280+ =/ written-view=(unit sample) (direct-gate-sample view-def)
13281+ ?~ written-view ~
13282+ =/ body=expr
13283+ ?- -.val.view-def
13284+ %gate body.val.view-def
13285+ %gate-wide body.val.view-def
13286+ * !!
13287+ ==
13288+ =/ sites=(unit (list iview-site)) (program-view-sites body ~)
13289+ ?~ sites ~
13290+ ?^ u.sites ~
13291+ ?~ prelude.initial ~
13292+ ?~ (ienv-lookup %program values.u.prelude.initial) ~
13293+ =/ element=(unit ischeme) (find-jibb-mold %element u.prelude.initial)
13294+ ?~ element ~
13295+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
13296+ ?~ heads ~
13297+ ?~ (~(get by gates.u.heads) %program) ~
13298+ =/ checked=(map term def) (direct-checked-gates ds env)
13299+ =/ templates=ienv
13300+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13301+ =/ scanned=(unit dgscan)
13302+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13303+ ?~ scanned ~
13304+ =. next.initial (dg-next-id ids.u.scanned 0)
13305+ =/ view-state=istate (reserve-def-caps val.view-def initial)
13306+ =/ sam=isample-result (infer-sample u.written-view env view-state)
13307+ ?: ?=(%| -.sam) ~
13308+ =/ actual-model=itype (program-inferred-sample typ.p.sam u.written-view)
13309+ ?. ?=(~ (itype-vars actual-model)) ~
13310+ ?: (itype-has-tag actual-model) ~
13311+ =/ model-fit=ifit
13312+ (direct-invariant actual-model model.u.relation sub.state.p.sam next.state.p.sam)
13313+ ?. ?=(%ok -.model-fit) ~
13314+ =/ product=(unit itype) (template-apply u.element ~[message.u.relation])
13315+ ?~ product ~
13316+ =/ st=istate
13317+ state.p.sam(sub sub.model-fit, next next.model-fit, gate-defs checked, head-evidence heads)
13318+ =/ inferred=iresult
13319+ (infer-call-context-arg body u.product env.p.sam st (span-of body))
13320+ ?: ?=(%| -.inferred) ~
13321+ =/ product-fit=ifit
13322+ (itype-fit typ.p.inferred u.product sub.state.p.inferred next.state.p.inferred)
13323+ ?. ?=(%ok -.product-fit) ~
13324+ =/ merged-product=itype
13325+ (itype-merge-faces typ.p.inferred u.product sub.product-fit)
13326+ =/ actual-cast=itype [%fn typ.p.sam merged-product]
13327+ =/ closed=itype [%fn typ.p.sam u.product]
13328+ =/ cast=ifit
13329+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
13330+ ?. ?=(%ok -.cast) ~
13331+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
13332+ =/ adjusted=iresult
13333+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
13334+ =/ added=(unit iadded-definition)
13335+ (add-supported-result view-def adjusted view-state env checked artifacts.resolution)
13336+ ?~ added ~
13337+ =/ recovered=(unit ischeme) (ienv-lookup view.parts env.u.added)
13338+ ?~ recovered ~
13339+ ?. ?=(~ vars.u.recovered) ~
13340+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
13341+ `[env.u.added grouped.resolution artifacts.u.added]
13342+::
13343+:: Recover exactly one direct keyed each/turn row mapper, then its view.
13344+:: The prelude's own each and turn schemes determine the mapper gate: the
13345+:: key is inferred from the mapper body, never selected by this recovery.
13346+++ program-view-context
13347+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
13348+ ^- (unit iresolved)
13349+ =/ env=ienv env.resolution
13350+ ?^ (ienv-lookup %main env) ~
13351+ ?^ (ienv-lookup view.parts env) ~
13352+ =/ relation=(unit [message=itype model=itype])
13353+ (program-update-relation update.parts ds env)
13354+ ?~ relation ~
13355+ =/ views=(list def)
13356+ (skim ds |=(d=def &(?=(%value -.d) =(view.parts name.d))))
13357+ ?. ?=([* ~] views) ~
13358+ =/ view-def=def i.views
13359+ ?> ?=(%value -.view-def)
13360+ =/ written-view=(unit sample) (direct-gate-sample view-def)
13361+ ?~ written-view ~
13362+ =/ view-body=expr
13363+ ?- -.val.view-def
13364+ %gate body.val.view-def
13365+ %gate-wide body.val.view-def
13366+ * !!
13367+ ==
13368+ =/ sites=(unit (list iview-site)) (program-view-sites view-body ~)
13369+ ?~ sites ~
13370+ ?. ?=([* ~] u.sites) ~
13371+ =/ site=iview-site i.u.sites
13372+ =/ component-names=(list term) ~[init.parts update.parts view.parts subs.parts]
13373+ ?: (lien component-names |=(n=term =(n mapper.site))) ~
13374+ ?^ (ienv-lookup mapper.site env) ~
13375+ =/ mappers=(list def)
13376+ (skim ds |=(d=def &(?=(%value -.d) =(mapper.site name.d))))
13377+ ?. ?=([* ~] mappers) ~
13378+ =/ mapper-def=def i.mappers
13379+ ?> ?=(%value -.mapper-def)
13380+ =/ written-mapper=(unit sample) (direct-gate-sample mapper-def)
13381+ ?~ written-mapper ~
13382+ ?~ prelude.initial ~
13383+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
13384+ =/ each-scheme=(unit ischeme) (ienv-lookup %each values.u.prelude.initial)
13385+ =/ turn-scheme=(unit ischeme) (ienv-lookup %turn values.u.prelude.initial)
13386+ =/ element=(unit ischeme) (find-jibb-mold %element u.prelude.initial)
13387+ =/ list-template=(unit ischeme) (find-jibb-mold %list u.prelude.initial)
13388+ ?~ program ~
13389+ ?~ each-scheme ~
13390+ ?~ turn-scheme ~
13391+ ?~ element ~
13392+ ?~ list-template ~
13393+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
13394+ ?~ heads ~
13395+ =/ written-program=(unit def) (~(get by gates.u.heads) %program)
13396+ =/ written-each=(unit def) (~(get by gates.u.heads) %each)
13397+ =/ written-turn=(unit def) (~(get by gates.u.heads) %turn)
13398+ ?~ written-program ~
13399+ ?~ written-each ~
13400+ ?~ written-turn ~
13401+ =/ program-sample=(unit sample) (direct-gate-sample u.written-program)
13402+ =/ each-sample=(unit sample) (direct-gate-sample u.written-each)
13403+ =/ turn-sample=(unit sample) (direct-gate-sample u.written-turn)
13404+ ?~ program-sample ~
13405+ ?~ each-sample ~
13406+ ?~ turn-sample ~
13407+ ?. ?=(%cell -.u.program-sample) ~
13408+ ?. ?=([* * * * ~] items.u.program-sample) ~
13409+ =/ turn-names=(unit [first=(unit term) second=(unit term)])
13410+ (program-two-slot-names u.turn-sample)
13411+ ?~ turn-names ~
13412+ =/ checked=(map term def) (direct-checked-gates ds env)
13413+ =/ templates=ienv
13414+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13415+ =/ scanned=(unit dgscan)
13416+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13417+ ?~ scanned ~
13418+ =. next.initial (dg-next-id ids.u.scanned 0)
13419+ =/ view-state=istate (reserve-def-caps val.view-def initial)
13420+ =/ sam=isample-result (infer-sample u.written-view env view-state)
13421+ ?: ?=(%| -.sam) ~
13422+ =/ actual-model=itype (program-inferred-sample typ.p.sam u.written-view)
13423+ =/ model-fit=ifit
13424+ (direct-invariant actual-model model.u.relation sub.state.p.sam next.state.p.sam)
13425+ ?. ?=(%ok -.model-fit) ~
13426+ =/ xs-result=iresult
13427+ (infer-fragment xs.site env.p.sam state.p.sam(sub sub.model-fit, next next.model-fit))
13428+ ?: ?=(%| -.xs-result) ~
13429+ =/ element-var=itype [%var next.state.p.xs-result]
13430+ =/ list-a=(unit itype) (template-apply u.list-template ~[element-var])
13431+ ?~ list-a ~
13432+ =/ xs-fit=ifit
13433+ (itype-fit typ.p.xs-result u.list-a sub.state.p.xs-result +(next.state.p.xs-result))
13434+ ?. ?=(%ok -.xs-fit) ~
13435+ =/ closed-xs=itype (itype-normalize u.list-a sub.xs-fit)
13436+ ?^ (itype-vars closed-xs) ~
13437+ ?: (itype-has-tag closed-xs) ~
13438+ =/ each-instance=[typ=itype state=istate]
13439+ (instantiate-scheme u.each-scheme state.p.xs-result(sub sub.xs-fit, next next.xs-fit))
13440+ ?. ?=(%fn -.typ.each-instance) ~
13441+ =/ turn-instance=[typ=itype state=istate]
13442+ (instantiate-scheme u.turn-scheme state.each-instance)
13443+ ?. ?=(%fn -.typ.turn-instance) ~
13444+ ?. ?=(%cell -.sample.typ.turn-instance) ~
13445+ =/ element-message=(unit itype)
13446+ (template-apply u.element ~[message.u.relation])
13447+ ?~ element-message ~
13448+ =/ each-fit=ifit
13449+ (itype-fit product.typ.each-instance u.element-message sub.state.turn-instance next.state.turn-instance)
13450+ ?. ?=(%ok -.each-fit) ~
13451+ =/ each-input=itype
13452+ (program-inferred-sample sample.typ.each-instance u.each-sample)
13453+ =/ turn-fit=ifit
13454+ (itype-fit product.typ.turn-instance each-input sub.each-fit next.each-fit)
13455+ ?. ?=(%ok -.turn-fit) ~
13456+ =/ turn-list=itype
13457+ (program-inferred-slot hed.sample.typ.turn-instance first.u.turn-names)
13458+ =/ list-fit=ifit
13459+ (itype-fit closed-xs turn-list sub.turn-fit next.turn-fit)
13460+ ?. ?=(%ok -.list-fit) ~
13461+ =/ mapper-type=itype
13462+ (program-inferred-slot tal.sample.typ.turn-instance second.u.turn-names)
13463+ =/ expected-mapper=itype (itype-normalize mapper-type sub.list-fit)
13464+ ?. ?=(%fn -.expected-mapper) ~
13465+ ?^ (itype-vars sample.expected-mapper) ~
13466+ ?: (itype-has-tag sample.expected-mapper) ~
13467+ :: These faces come from the source-backed each sample. Keeping them in
13468+ :: the expected mapper product lets ordinary tuple inference supply key/el.
13469+ ?. ?=(%cell -.product.expected-mapper) ~
13470+ ?. ?=(%face -.hed.product.expected-mapper) ~
13471+ ?. =(%key name.hed.product.expected-mapper) ~
13472+ ?. ?=(%face -.tal.product.expected-mapper) ~
13473+ ?. =(%el name.tal.product.expected-mapper) ~
13474+ =/ mapper-state=istate
13475+ (reserve-def-caps val.mapper-def initial(next next.list-fit))
13476+ =/ mapper-sam=isample-result (infer-sample u.written-mapper env mapper-state)
13477+ ?: ?=(%| -.mapper-sam) ~
13478+ =/ mapper-input=itype (program-inferred-sample typ.p.mapper-sam u.written-mapper)
13479+ =/ mapper-sample-fit=ifit
13480+ (direct-invariant mapper-input sample.expected-mapper sub.state.p.mapper-sam next.state.p.mapper-sam)
13481+ ?. ?=(%ok -.mapper-sample-fit) ~
13482+ =/ mapper-product=itype
13483+ (itype-normalize product.expected-mapper sub.mapper-sample-fit)
13484+ =/ mapper-body=expr
13485+ ?- -.val.mapper-def
13486+ %gate body.val.mapper-def
13487+ %gate-wide body.val.mapper-def
13488+ * !!
13489+ ==
13490+ =/ mapper-inferred=iresult
13491+ (infer-call-context-arg mapper-body mapper-product env.p.mapper-sam state.p.mapper-sam(sub sub.mapper-sample-fit, next next.mapper-sample-fit) (span-of mapper-body))
13492+ ?: ?=(%| -.mapper-inferred) ~
13493+ =/ ordinary-product-fit=ifit
13494+ (itype-fit typ.p.mapper-inferred mapper-product sub.state.p.mapper-inferred next.state.p.mapper-inferred)
13495+ =/ mapper-product-fit=ifit
13496+ ?: ?=(%ok -.ordinary-product-fit) ordinary-product-fit
13497+ (program-keyed-product-fit typ.p.mapper-inferred mapper-product u.element sub.state.p.mapper-inferred next.state.p.mapper-inferred)
13498+ ?. ?=(%ok -.mapper-product-fit) ~
13499+ =/ closed-mapper-product=itype
13500+ (itype-normalize mapper-product sub.mapper-product-fit)
13501+ ?^ (itype-vars closed-mapper-product) ~
13502+ ?: (itype-has-tag closed-mapper-product) ~
13503+ =/ merged-mapper-product=itype
13504+ (itype-merge-faces typ.p.mapper-inferred closed-mapper-product sub.mapper-product-fit)
13505+ =/ mapper-cast=itype [%fn typ.p.mapper-sam merged-mapper-product]
13506+ =/ closed-mapper=itype [%fn typ.p.mapper-sam closed-mapper-product]
13507+ =/ mapper-cast-fit=ifit
13508+ (itype-fit mapper-cast closed-mapper sub.mapper-product-fit next.mapper-product-fit)
13509+ ?. ?=(%ok -.mapper-cast-fit) ~
13510+ =/ merged-mapper=itype
13511+ (itype-merge-faces mapper-cast closed-mapper sub.mapper-cast-fit)
13512+ =/ mapper-adjusted=iresult
13513+ [%& merged-mapper state.p.mapper-inferred(sub sub.mapper-cast-fit, next next.mapper-cast-fit)]
13514+ =/ mapper-added=(unit iadded-definition)
13515+ (add-supported-result mapper-def mapper-adjusted mapper-state env checked artifacts.resolution)
13516+ ?~ mapper-added ~
13517+ =/ mapper-scheme=(unit ischeme) (ienv-lookup mapper.site env.u.mapper-added)
13518+ ?~ mapper-scheme ~
13519+ ?. ?=(~ vars.u.mapper-scheme) ~
13520+ ?. ?=(~ (itype-vars typ.u.mapper-scheme)) ~
13521+ =/ program-instance=[typ=itype state=istate]
13522+ (instantiate-scheme u.program state.p.sam(next next.mapper-cast-fit))
13523+ ?. ?=(%fn -.typ.program-instance) ~
13524+ ?. ?=(%cell -.sample.typ.program-instance) ~
13525+ ?. ?=(%cell -.tal.sample.typ.program-instance) ~
13526+ ?. ?=(%cell -.tal.tal.sample.typ.program-instance) ~
13527+ =/ expected-view=(unit itype)
13528+ (direct-slot-body hed.tal.tal.sample.typ.program-instance (direct-sample-name i.t.t.items.u.program-sample))
13529+ ?~ expected-view ~
13530+ ?. ?=(%fn -.u.expected-view) ~
13531+ =/ canonical-view=itype [%fn model.u.relation u.element-message]
13532+ =/ view-fit=ifit
13533+ (direct-invariant canonical-view u.expected-view sub.state.program-instance next.state.program-instance)
13534+ ?. ?=(%ok -.view-fit) ~
13535+ =/ closed-view=itype
13536+ (itype-normalize [%fn typ.p.sam u.element-message] sub.view-fit)
13537+ ?. ?=(%fn -.closed-view) ~
13538+ =/ view-env=ienv [[mapper.site u.mapper-scheme] env.p.sam]
13539+ =/ final-view-state=istate
13540+ (reserve-def-caps val.view-def state.p.sam(next next.view-fit, gate-defs checked.u.mapper-added, head-evidence heads))
13541+ =/ inferred=iresult
13542+ (infer-call-context-arg view-body product.closed-view view-env final-view-state (span-of view-body))
13543+ ?: ?=(%| -.inferred) ~
13544+ =/ product-fit=ifit
13545+ (itype-fit typ.p.inferred product.closed-view sub.state.p.inferred next.state.p.inferred)
13546+ ?. ?=(%ok -.product-fit) ~
13547+ =/ merged-product=itype
13548+ (itype-merge-faces typ.p.inferred product.closed-view sub.product-fit)
13549+ =/ actual-cast=itype [%fn typ.p.sam merged-product]
13550+ =/ cast=ifit
13551+ (itype-fit actual-cast closed-view sub.product-fit next.product-fit)
13552+ ?. ?=(%ok -.cast) ~
13553+ =/ merged=itype (itype-merge-faces actual-cast closed-view sub.cast)
13554+ =/ adjusted=iresult
13555+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
13556+ =/ added=(unit iadded-definition)
13557+ (add-supported-result view-def adjusted final-view-state env.u.mapper-added checked.u.mapper-added artifacts.u.mapper-added)
13558+ ?~ added ~
13559+ =/ recovered=(unit ischeme) (ienv-lookup view.parts env.u.added)
13560+ ?~ recovered ~
13561+ ?. ?=(~ vars.u.recovered) ~
13562+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
13563+ `[env.u.added grouped.resolution artifacts.u.added]
13564+::
13565+++ program-init-null-sample
13566+ |= d=def
13567+ ^- ?
13568+ =/ written=(unit sample) (direct-gate-sample d)
13569+ ?~ written |
13570+ ?. ?=(%bare -.u.written) |
13571+ =/ sh=shape shape.u.written
13572+ ?. ?=(%const -.sh) |
13573+ =(%null form.lit.sh)
13574+::
13575+:: The tuple-ending-null initializer retry above intentionally keeps its own
13576+:: boundary. A direct null-sample initializer can instead receive the closed
13577+:: model already established by update, view and subscriptions.
13578+++ program-plain-init-context
13579+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
13580+ ^- (unit iresolved)
13581+ =/ env=ienv env.resolution
13582+ ?^ (ienv-lookup %main env) ~
13583+ ?^ (ienv-lookup init.parts env) ~
13584+ ?~ (ienv-lookup update.parts env) ~
13585+ ?~ (ienv-lookup view.parts env) ~
13586+ ?~ (ienv-lookup subs.parts env) ~
13587+ =/ relation=(unit [message=itype model=itype])
13588+ (program-update-relation update.parts ds env)
13589+ ?~ relation ~
13590+ =/ inits=(list def)
13591+ (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
13592+ ?. ?=([* ~] inits) ~
13593+ =/ init-def=def i.inits
13594+ ?> ?=(%value -.init-def)
13595+ ?. (program-init-null-sample init-def) ~
13596+ =/ written=(unit sample) (direct-gate-sample init-def)
13597+ ?~ written ~
13598+ =/ body=expr
13599+ ?- -.val.init-def
13600+ %gate body.val.init-def
13601+ %gate-wide body.val.init-def
13602+ * !!
13603+ ==
13604+ ?~ prelude.initial ~
13605+ ?~ (ienv-lookup %program values.u.prelude.initial) ~
13606+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
13607+ ?~ heads ~
13608+ ?~ (~(get by gates.u.heads) %program) ~
13609+ =/ checked=(map term def) (direct-checked-gates ds env)
13610+ =/ templates=ienv
13611+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13612+ =/ scanned=(unit dgscan)
13613+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13614+ ?~ scanned ~
13615+ =. next.initial (dg-next-id ids.u.scanned 0)
13616+ =/ init-state=istate (reserve-def-caps val.init-def initial)
13617+ =/ sam=isample-result (infer-sample u.written env init-state)
13618+ ?: ?=(%| -.sam) ~
13619+ ?. ?=(~ (itype-vars typ.p.sam)) ~
13620+ ?: (itype-has-tag typ.p.sam) ~
13621+ =/ st=istate state.p.sam(gate-defs checked, head-evidence heads)
13622+ =/ inferred=iresult
13623+ (infer-call-context-arg body model.u.relation env.p.sam st (span-of body))
13624+ ?: ?=(%| -.inferred) ~
13625+ =/ product-fit=ifit
13626+ (itype-fit typ.p.inferred model.u.relation sub.state.p.inferred next.state.p.inferred)
13627+ ?. ?=(%ok -.product-fit) ~
13628+ =/ merged-product=itype
13629+ (itype-merge-faces typ.p.inferred model.u.relation sub.product-fit)
13630+ =/ actual-cast=itype [%fn typ.p.sam merged-product]
13631+ =/ closed=itype [%fn typ.p.sam model.u.relation]
13632+ =/ cast=ifit
13633+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
13634+ ?. ?=(%ok -.cast) ~
13635+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
13636+ =/ adjusted=iresult
13637+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
13638+ =/ added=(unit iadded-definition)
13639+ (add-supported-result init-def adjusted init-state env checked artifacts.resolution)
13640+ ?~ added ~
13641+ =/ recovered=(unit ischeme) (ienv-lookup init.parts env.u.added)
13642+ ?~ recovered ~
13643+ ?. ?=(~ vars.u.recovered) ~
13644+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
13645+ `[env.u.added grouped.resolution artifacts.u.added]
13646+::
13647+:: Recover only the initializer of an already recognized direct program main.
13648+:: The derived call is evidence for an ordinary init/main retry, never an
13649+:: interface to publish on its own. Any failure returns the original resolution.
13650+++ program-init-context
13651+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
13652+ ^- (unit iresolved)
13653+ =/ env=ienv env.resolution
13654+ ?^ (ienv-lookup %main env) ~
13655+ ?^ (ienv-lookup init.parts env) ~
13656+ =/ update=(unit ischeme) (ienv-lookup update.parts env)
13657+ =/ view=(unit ischeme) (ienv-lookup view.parts env)
13658+ =/ subs=(unit ischeme) (ienv-lookup subs.parts env)
13659+ ?~ update ~
13660+ ?~ view ~
13661+ ?~ subs ~
13662+ =/ inits=(list def)
13663+ (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
13664+ ?. ?=([* ~] inits) ~
13665+ =/ init-def=def i.inits
13666+ ?> ?=(%value -.init-def)
13667+ ?. (program-init-tuple-null init-def) ~
13668+ =/ args=(unit (list expr)) (program-main-args main)
13669+ ?~ args ~
13670+ ?~ prelude.initial ~
13671+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
13672+ ?~ program ~
13673+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
13674+ ?~ heads ~
13675+ =/ written=(unit def) (~(get by gates.u.heads) %program)
13676+ ?~ written ~
13677+ =/ written-sample=(unit sample) (direct-gate-sample u.written)
13678+ ?~ written-sample ~
13679+ ?. ?=(%cell -.u.written-sample) ~
13680+ ?~ items.u.written-sample ~
13681+ =/ checked=(map term def) (direct-checked-gates ds env)
13682+ =/ templates=ienv
13683+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13684+ =/ scanned=(unit dgscan)
13685+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13686+ ?~ scanned ~
13687+ =. next.initial (dg-next-id ids.u.scanned 0)
13688+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program initial)
13689+ ?. ?=(%fn -.typ.instance) ~
13690+ ?. ?=(%cell -.sample.typ.instance) ~
13691+ =/ expected-init=(unit itype)
13692+ (direct-slot-body hed.sample.typ.instance (direct-sample-name i.items.u.written-sample))
13693+ ?~ expected-init ~
13694+ ?. ?=(%fn -.u.expected-init) ~
13695+ ?. ?=(%var -.sample.u.expected-init) ~
13696+ =/ data=@ud id.sample.u.expected-init
13697+ =/ init-var=itype [%var next.state.instance]
13698+ =/ st=istate state.instance(next +(next.state.instance))
13699+ =/ up=[typ=itype state=istate] (instantiate-scheme u.update st)
13700+ =/ vw=[typ=itype state=istate] (instantiate-scheme u.view state.up)
13701+ =/ sb=[typ=itype state=istate] (instantiate-scheme u.subs state.vw)
13702+ =. st state.sb(gate-defs checked, head-evidence heads)
13703+ =/ actual=itype [%cell init-var [%cell typ.up [%cell typ.vw typ.sb]]]
13704+ =/ fit=ifit
13705+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.st next.st)
13706+ ?. ?=(%ok -.fit) ~
13707+ =/ actual-final=itype (itype-normalize actual sub.fit)
13708+ =/ expected-final=itype (itype-normalize sample.typ.instance sub.fit)
13709+ =/ open=(list @ud)
13710+ (unique-type-vars (weld (itype-vars actual-final) (itype-vars expected-final)))
13711+ ?. (levy open |=(n=@ud =(data n))) ~
13712+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
13713+ =/ replay=ifit
13714+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.fit next.fit)
13715+ ?. ?=(%ok -.replay) ~
13716+ ?. &(=(sub.fit sub.replay) =(next.fit next.replay)) ~
13717+ =/ expected=itype (itype-normalize u.expected-init sub.fit)
13718+ ?. ?=(%fn -.expected) ~
13719+ =. st st(sub sub.fit, next next.fit)
13720+ =/ init-state=istate (reserve-def-caps val.init-def st)
13721+ =/ inferred=iresult (infer-fragment val.init-def env init-state)
13722+ =? inferred ?=(%| -.inferred) (infer-recursive-gate init-def env init-state)
13723+ ?: ?=(%| -.inferred) ~
13724+ ?. ?=(%fn -.typ.p.inferred) ~
13725+ =/ data-fit=ifit
13726+ (itype-fit sample.typ.p.inferred sample.expected sub.state.p.inferred next.state.p.inferred)
13727+ ?. ?=(%ok -.data-fit) ~
13728+ =/ closed=itype (itype-normalize expected sub.data-fit)
13729+ ?. ?=(%fn -.closed) ~
13730+ :: Resolve the ordinary tuple cast first, then check the complete gate.
13731+ :: General function fit remains unchanged; only this recovered candidate
13732+ :: receives the derived result context before its whole-type cast fit.
13733+ =/ product-fit=ifit
13734+ (itype-fit product.typ.p.inferred product.closed sub.data-fit next.data-fit)
13735+ ?. ?=(%ok -.product-fit) ~
13736+ =/ product=itype
13737+ (itype-merge-faces product.typ.p.inferred product.closed sub.product-fit)
13738+ =/ actual-cast=itype [%fn sample.typ.p.inferred product]
13739+ =/ cast=ifit
13740+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
13741+ ?. ?=(%ok -.cast) ~
13742+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
13743+ =/ adjusted=iresult
13744+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
13745+ =/ added=(unit iadded-definition)
13746+ (add-supported-result init-def adjusted init-state env checked artifacts.resolution)
13747+ ?~ added ~
13748+ =/ recovered=(unit ischeme) (ienv-lookup init.parts env.u.added)
13749+ ?~ recovered ~
13750+ ?. ?=(~ vars.u.recovered) ~
13751+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
13752+ `[env.u.added grouped.resolution artifacts.u.added]
13753+::
13754+++ store-derived-schemes
13755+ |= [prelude=ifile values=(list term) molds=(list term) state=itype action=itype]
13756+ ^- (unit [state=ischeme action=ischeme])
13757+ =/ prep=iprelude [prelude values molds]
13758+ =/ ask=(unit ischeme) (request-compatible-ask prep)
13759+ ?~ ask ~
13760+ =/ poke=(unit ischeme) (store-compatible-poke prep)
13761+ ?~ poke ~
13762+ ?^ (itype-vars state) ~
13763+ ?^ (itype-vars action) ~
13764+ ?: |((itype-has-tag state) (itype-has-tag action)) ~
13765+ =/ result=(unit itype) (template-apply u.ask ~[[%var 0]])
13766+ ?~ result ~
13767+ =/ request=ischeme [[%fn [%fn state [%var 0]] u.result] ~[0]]
13768+ =/ constructor=ischeme [[%fn action typ.u.poke] ~]
13769+ `[request constructor]
13770+::
13771+++ program-subs-watch
13772+ |= [d=def imports=ijimports graph=irequest-graph prelude=ifile]
13773+ ^- ?
13774+ ?. ?=(%value -.d) |
13775+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
13776+ =/ body=expr
13777+ ?- -.val.d
13778+ %gate body.val.d
13779+ %gate-wide body.val.d
13780+ * val.d
13781+ ==
13782+ =. body (program-transparent body)
13783+ ?. ?=(%list -.body) |
13784+ ?. ?=([* ~] items.body) |
13785+ =/ watch=expr (program-transparent i.items.body)
13786+ ?. ?=(%tuple -.watch) |
13787+ ?. ?=([* * ~] items.watch) |
13788+ =/ tag=item i.items.watch
13789+ =/ payload=item i.t.items.watch
13790+ ?. &(?=(~ face.tag) ?=(~ face.payload)) |
13791+ =/ tag-expr=expr (program-transparent val.tag)
13792+ ?. ?=(%lit -.tag-expr) |
13793+ ?. &(?=(%term form.lit.tag-expr) =(%watch val.lit.tag-expr)) |
13794+ =/ request=expr (program-transparent val.payload)
13795+ ?. ?=(%call -.request) |
13796+ ?. ?=([* ~] args.request) |
13797+ =/ head=expr (program-transparent head.request)
13798+ ?. ?=(%wing -.head) |
13799+ ?. ?=([@ @ ~] names.head) |
13800+ =/ case=term i.names.head
13801+ =/ face=term i.t.names.head
13802+ =/ callback=expr (program-transparent i.args.request)
13803+ ?. ?=(%ctor -.callback) |
13804+ ?. ?=(%term form.tag.callback) |
13805+ ?| ?=(^ (derived-request-member case face imports graph prelude))
13806+ ?=(^ (derived-store-request-member case face imports graph prelude))
13807+ ==
13808+::
13809+:: Exact derived-member and request-evidence identity, shared by direct
13810+:: program watches and direct data-page loads. Only a plain request in the
13811+:: selected interface's own source-backed graph can establish this shape.
13812+++ derived-request-member
13813+ |= [case=term face=term imports=ijimports graph=irequest-graph prelude=ifile]
13814+ ^- (unit ischeme)
13815+ =/ selected=(list [face=term interface=ifile])
13816+ (skim imports |=(j=[face=term interface=ifile] =(face face.j)))
13817+ ?. ?=([* ~] selected) ~
13818+ =/ iface=ifile interface.i.selected
13819+ =/ member=(unit ischeme) (ienv-lookup case values.iface)
13820+ ?~ member ~
13821+ ?~ source.iface ~
13822+ =/ evidence=(list irequest-evidence)
13823+ (skim requests.graph |=(r=irequest-evidence &(=(api-at.r at.iface) =(name.r case))))
13824+ ?. ?=([* ~] evidence) ~
13825+ =/ request-evidence=irequest-evidence i.evidence
13826+ ?. =(u.source.iface api-source.request-evidence) ~
13827+ ?. =(name.path.path.request-evidence case) ~
13828+ ?~ graph.iface ~
13829+ ?. (lien requests.u.graph.iface |=(r=irequest-evidence =(r request-evidence))) ~
13830+ ?. ?=(~ scry.path.path.request-evidence) ~
13831+ ?. &(?=(~ diffs.path.request-evidence) ?=(~ diffs.path.path.request-evidence)) ~
13832+ ?: (lien segments.path.path.request-evidence |=(p=pseg !?=(%knot -.p))) ~
13833+ ?. ?=([@ ~] vars.u.member) ~
13834+ =/ message=@ud i.vars.u.member
13835+ ?. ?=(%fn -.typ.u.member) ~
13836+ ?. ?=(%fn -.sample.typ.u.member) ~
13837+ ?. =(sample.sample.typ.u.member full.path.request-evidence) ~
13838+ ?. =(product.sample.typ.u.member [%var message]) ~
13839+ =/ prep=iprelude [prelude prelude-values.graph prelude-molds.graph]
13840+ =/ ask=(unit ischeme) (request-compatible-ask prep)
13841+ ?~ ask ~
13842+ =/ result=(unit itype) (template-apply u.ask ~[[%var message]])
13843+ ?~ result ~
13844+ ?. =(product.typ.u.member u.result) ~
13845+ member
13846+::
13847+:: Store state is watchable by definition, but only the actual derived member
13848+:: of the uniquely selected source-bound store interface proves that fact.
13849+++ derived-store-request-member
13850+ |= [case=term face=term imports=ijimports graph=irequest-graph prelude=ifile]
13851+ ^- (unit ischeme)
13852+ ?. =(%state case) ~
13853+ =/ selected=(list [face=term interface=ifile])
13854+ (skim imports |=(j=[face=term interface=ifile] =(face face.j)))
13855+ ?. ?=([* ~] selected) ~
13856+ =/ iface=ifile interface.i.selected
13857+ =/ member=(unit ischeme) (ienv-lookup %state values.iface)
13858+ ?~ member ~
13859+ ?~ source.iface ~
13860+ =/ evidence=(list istore-request-evidence)
13861+ (skim stores.graph |=(r=istore-request-evidence =(store-at.r at.iface)))
13862+ ?. ?=([* ~] evidence) ~
13863+ =/ request=istore-request-evidence i.evidence
13864+ ?. =(u.source.iface source.request) ~
13865+ ?~ graph.iface ~
13866+ ?. (lien stores.u.graph.iface |=(r=istore-request-evidence =(r request))) ~
13867+ =/ derived=(unit [state=ischeme action=ischeme])
13868+ (store-derived-schemes prelude prelude-values.graph prelude-molds.graph state.request action.request)
13869+ ?~ derived ~
13870+ ?. =(u.member state.u.derived) ~
13871+ =/ constructor=(unit ischeme) (ienv-lookup action-name.request values.iface)
13872+ ?~ constructor ~
13873+ ?. =(u.constructor action.u.derived) ~
13874+ member
13875+::
13876+++ program-main-context
13877+ |= [main=def ds=(list def) resolution=iresolved initial=istate]
13878+ ^- iresolved
13879+ ?^ (ienv-lookup %main env.resolution) resolution
13880+ =/ heads=(unit igate-prelude-evidence)
13881+ (direct-prelude-evidence ds prelude.initial)
13882+ ?~ heads resolution
13883+ =/ checked=(map term def) (direct-checked-gates ds env.resolution)
13884+ =/ completed=[env=ienv artifacts=(list iwidth-definition)]
13885+ (add-supported-defs-core ~[main] ds checked heads env.resolution molds.initial globals.initial externals.initial surs.initial mark-externals.initial marks.initial jimports.initial reserved-molds.initial at.initial prelude.initial artifacts.resolution grec-index.initial)
13886+ [env.completed grouped.resolution artifacts.completed]
13887+::
13888+:: A static main may retain a generic element message in its ordinary
13889+:: scheme. Instantiate that scheme, specialize it to canonical element !!,
13890+:: and publish only the resulting closed scheme.
13891+++ static-main-specialized
13892+ |= [env=ienv prelude=(unit ifile)]
13893+ ^- (unit ischeme)
13894+ ?~ prelude ~
13895+ =/ element=(unit ischeme) (find-jibb-mold %element u.prelude)
13896+ ?~ element ~
13897+ =/ main=(unit ischeme) (ienv-lookup %main env)
13898+ ?~ main ~
13899+ =/ canonical=(unit itype) (template-apply u.element ~[[%empty ~]])
13900+ ?~ canonical ~
13901+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.main *istate)
13902+ =/ fit=ifit (itype-fit typ.instance u.canonical ~ next.state.instance)
13903+ ?. ?=(%ok -.fit) ~
13904+ =/ closed=itype (itype-normalize typ.instance sub.fit)
13905+ ?^ (itype-vars closed) ~
13906+ ?: (itype-has-tag closed) ~
13907+ ?. ?=(%union -.closed) ~
13908+ ?. ?=(%union -.u.canonical) ~
13909+ ?. &(=(origin.closed origin.u.canonical) =(args.closed args.u.canonical)) ~
13910+ =/ exact=ifit (direct-invariant closed u.canonical ~ next.fit)
13911+ ?. ?=(%ok -.exact) ~
13912+ `[u.canonical ~]
13913+::
13914+:: The load of a direct data page must itself be a direct gate whose
13915+:: transparent body is one plain derived request with a wing or ctor reply.
13916+++ page-load-derived
13917+ |= [name=term ds=(list def) imports=ijimports graph=irequest-graph prelude=ifile]
13918+ ^- ?
13919+ =/ loads=(list def)
13920+ (skim ds |=(d=def &(?=(%value -.d) =(name name.d))))
13921+ ?. ?=([* ~] loads) |
13922+ =/ load=def i.loads
13923+ ?> ?=(%value -.load)
13924+ ?. |(?=(%gate -.val.load) ?=(%gate-wide -.val.load)) |
13925+ =/ body=expr
13926+ ?- -.val.load
13927+ %gate body.val.load
13928+ %gate-wide body.val.load
13929+ * !!
13930+ ==
13931+ =. body (program-transparent body)
13932+ ?. ?=(%call -.body) |
13933+ ?. ?=([* ~] args.body) |
13934+ =/ head=expr (program-transparent head.body)
13935+ ?. ?=(%wing -.head) |
13936+ ?. ?=([@ @ ~] names.head) |
13937+ =/ reply=expr (program-transparent i.args.body)
13938+ ?. ?| &(?=(%wing -.reply) ?=([@ ~] names.reply))
13939+ &(?=(%ctor -.reply) ?=(%term form.tag.reply))
13940+ ==
13941+ |
13942+ ?=(^ (derived-request-member i.names.head i.t.names.head imports graph prelude))
13943+::
13944+++ page-main-closed
13945+ |= [parts=[load=term view=term] ds=(list def) env=ienv prelude=(unit ifile) imports=ijimports graph=irequest-graph]
13946+ ^- ?
13947+ ?~ prelude |
13948+ =/ page=(unit ischeme) (find-jibb-mold %page u.prelude)
13949+ ?~ page |
13950+ =/ main=(unit ischeme) (ienv-lookup %main env)
13951+ ?~ main |
13952+ ?. ?=(~ vars.u.main) |
13953+ ?. ?=(~ (itype-vars typ.u.main)) |
13954+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.page *istate)
13955+ =/ main-fit=ifit (direct-invariant typ.u.main typ.instance ~ next.state.instance)
13956+ ?. ?=(%ok -.main-fit) |
13957+ (page-load-derived load.parts ds imports graph u.prelude)
13958+::
13959+++ program-main-closed
13960+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) env=ienv prelude=(unit ifile) imports=ijimports graph=irequest-graph]
13961+ ^- ?
13962+ ?~ prelude |
13963+ ?~ (ienv-lookup %program values.u.prelude) |
13964+ =/ program=(unit ischeme) (find-jibb-mold %program u.prelude)
13965+ ?~ program |
13966+ =/ main=(unit ischeme) (ienv-lookup %main env)
13967+ ?~ main |
13968+ ?. ?=(~ vars.u.main) |
13969+ ?. ?=(~ (itype-vars typ.u.main)) |
13970+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program *istate)
13971+ =/ main-fit=ifit (direct-invariant typ.u.main typ.instance ~ next.state.instance)
13972+ ?. ?=(%ok -.main-fit) |
13973+ =/ init=(unit ischeme) (ienv-lookup init.parts env)
13974+ ?~ init |
13975+ ?. ?=(~ vars.u.init) |
13976+ ?. ?=(%fn -.typ.u.init) |
13977+ ?. ?=(~ (itype-vars sample.typ.u.init)) |
13978+ ?. ?=(~ (itype-vars product.typ.u.init)) |
13979+ =/ data=igate-free (gate-free-type sample.typ.u.init 256 ~)
13980+ ?. =(%yes verdict.data) |
13981+ =/ model=igate-free (gate-free-type product.typ.u.init left.data ~)
13982+ ?. =(%yes verdict.model) |
13983+ =/ subs=(list def)
13984+ (skim ds |=(d=def &(?=(%value -.d) =(subs.parts name.d))))
13985+ ?. ?=([* ~] subs) |
13986+ |((program-subs-empty i.subs) (program-subs-watch i.subs imports graph u.prelude))
13987+::
13988+:: The two outer sample faces are binder names, not part of the action/state
13989+:: relation. Leave every face inside either component untouched.
13990+++ store-update-unfaced
13991+ |= typ=itype
13992+ ^- itype
13993+ ?. ?=(%fn -.typ) typ
13994+ ?. ?=(%cell -.sample.typ) typ
13995+ =/ head=itype hed.sample.typ
13996+ =/ tail=itype tal.sample.typ
13997+ =? head ?=(%face -.head) body.head
13998+ =? tail ?=(%face -.tail) body.tail
13999+ typ(sample [%cell head tail])
14000+::
14001+:: The builder erases the action from main. Recover it only from the direct
14002+:: local poke declaration and check both ordinary components invariantly.
14003+++ store-main-closed
14004+ |= [parts=[init=term update=term] action=term env=ienv molds=imold-types prelude=(unit ifile)]
14005+ ^- (unit ischeme)
14006+ ?~ prelude ~
14007+ =/ builder=(unit ischeme) (ienv-lookup %store values.u.prelude)
14008+ ?~ builder ~
14009+ ?. ?=([@ @ ~] vars.u.builder) ~
14010+ =/ state-var=@ud i.vars.u.builder
14011+ =/ action-var=@ud i.t.vars.u.builder
14012+ ?: =(state-var action-var) ~
14013+ =/ builder-sample=itype
14014+ [%cell [%face %init [%var state-var]] [%face %update [%fn [%cell [%var action-var] [%var state-var]] [%var state-var]]]]
14015+ =/ builder-product=itype [%cell [%face %init [%var state-var]] [%face %update [%noun ~]]]
14016+ ?. =(typ.u.builder [%fn builder-sample builder-product]) ~
14017+ =/ store=(unit ischeme) (find-jibb-mold %store u.prelude)
14018+ ?~ store ~
14019+ ?. ?=([@ ~] vars.u.store) ~
14020+ ?. =(typ.u.store [%cell [%face %init [%var i.vars.u.store]] [%face %update [%noun ~]]]) ~
14021+ =/ state=(unit ischeme) (find-jibb-mold %state [~ molds /tmp ~ ~ ~ ~ ~])
14022+ ?~ state ~
14023+ =/ action-mold=(unit ischeme) (find-jibb-mold action [~ molds /tmp ~ ~ ~ ~ ~])
14024+ ?~ action-mold ~
14025+ ?. &(?=(~ vars.u.state) ?=(~ (itype-vars typ.u.state))) ~
14026+ ?. &(?=(~ vars.u.action-mold) ?=(~ (itype-vars typ.u.action-mold))) ~
14027+ =/ canonical=(unit itype) (template-apply u.store ~[typ.u.state])
14028+ ?~ canonical ~
14029+ =/ main=(unit ischeme) (ienv-lookup %main env)
14030+ =/ main-fit=(unit ifit)
14031+ ?~(main ~ `(direct-invariant typ.u.main u.canonical ~ 0))
14032+ =/ main-ok=?
14033+ ?~ main &
14034+ ?. ?=(~ vars.u.main) |
14035+ ?. ?=(~ (itype-vars typ.u.main)) |
14036+ ?~ main-fit |
14037+ ?=(%ok -.u.main-fit)
14038+ ?. main-ok ~
14039+ =/ init=(unit ischeme) (ienv-lookup init.parts env)
14040+ ?~ init ~
14041+ ?. ?=(~ vars.u.init) ~
14042+ ?. ?=(~ (itype-vars typ.u.init)) ~
14043+ =/ init-fit=ifit (direct-invariant typ.u.init typ.u.state ~ 0)
14044+ ?. ?=(%ok -.init-fit) ~
14045+ =/ update=(unit ischeme) (ienv-lookup update.parts env)
14046+ ?~ update ~
14047+ ?. ?=(~ vars.u.update) ~
14048+ ?. ?=(~ (itype-vars typ.u.update)) ~
14049+ =/ expected=itype [%fn [%cell typ.u.action-mold typ.u.state] typ.u.state]
14050+ =/ update-fit=ifit (direct-invariant (store-update-unfaced typ.u.update) expected ~ 0)
14051+ ?. ?=(%ok -.update-fit) ~
14052+ `[u.canonical ~]
14053+::
14054+++ infer-jibb-file
14055+ |= [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)]
14056+ ^- jfile-result
14057+ =/ out=jfile-detailed-result
14058+ (infer-jibb-file-detailed at src externals mark-externals modules active prelude-values prelude-molds cache prelude)
14059+ ?: ?=(%| -.out) [%| message.p.out]
14060+ [%& p.out]
14061+:: Returns structured root-source overlap evidence after the same full check.
14062+++ infer-jibb-file-detailed
14063+ |= [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)]
14064+ ^- jfile-detailed-result
14065+ =/ parsed (parse at src)
14066+ ?: ?=(%| -.parsed) [%| [(crip "module source does not parse: {(spud at)}") ~]]
14067+ =/ mod=module p.parsed
14068+ =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
14069+ ?^ duplicate [%| [(show-duplicate-fields at src u.duplicate) ~]]
14070+ ?: &(?=([%ui %api *] at) ?=(^ (program-main-def defs.mod)))
14071+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
14072+ ?: ?=([%ui %api *] at)
1164014073 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
1164114074 ?^ iface
11642− =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
14075+ =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ ~ modules prelude prelude-values prelude-molds externals mark-externals])
1164314076 [%& [checked [[at checked] cache]]]
11644− ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
14077+ ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1164514078 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
1164614079 =/ narrow=?
1164714080 ?. ?=([[%mark *] ~] imports.mod) |
@@ -11651,38 +14084,155 @@
1165114084 ?: narrow
1165214085 =/ request=(each ione-request-interface @t)
1165314086 (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
11654− ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
14087+ ?: ?=(%| -.request) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1165514088 =/ checked=ifile iface.p.request
1165614089 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
1165714090 =/ multi=(each [iface=ifile cache=jcache] @t)
1165814091 (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
11659− ?: ?=(%| -.multi) [%| (crip "API module needs unsupported inference: {(spud at)}")]
14092+ ?: ?=(%| -.multi) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1166014093 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
11661− ?. (module-scope-valid mod prelude-values prelude-molds)
14094+ =/ main=(unit def) (program-main-def defs.mod)
14095+ =/ main-parts=(unit [init=term update=term view=term subs=term])
14096+ ?~(main ~ (program-main-parts u.main))
14097+ =/ page-parts=(unit [load=term view=term])
14098+ ?~(main ~ (page-main-parts u.main))
14099+ =/ store-parts=(unit [init=term update=term])
14100+ ?~(main ~ (store-main-parts u.main))
14101+ =/ declared=(unit istore-declaration)
14102+ ?~(store-parts ~ (store-declaration mod prelude-values prelude-molds))
14103+ ?: &(?=(^ store-parts) ?=(~ declared))
14104+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
14105+ ?: &(?=([%ui %stores *] at) ?=(^ main) ?=(~ store-parts))
14106+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
14107+ =/ ds=(list def) ?~(declared defs.mod defs.u.declared)
14108+ =/ checking=module mod(defs ds)
14109+ ?. (module-scope-valid checking prelude-values prelude-molds)
1166214110 ?: (pending-declared-poke at mod prelude-values prelude-molds)
11663− [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
11664− [%| (crip "module has conflicting names: {(spud at)}")]
11665− =/ vals=(list term) (global-value-names defs.mod)
11666− ?: (lien vals |=(n=term =(n %main)))
11667− [%| (crip "module kind needs unsupported inference: {(spud at)}")]
11668− =/ js=jimports-result (resolve-jibb-imports imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
14111+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
14112+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
14113+ =/ vals=(list term) (global-value-names ds)
14114+ =/ js=jimports-detailed-result (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
1166914115 ?: ?=(%| -.js) [%| p.js]
11670− =/ molds=imolds (collect-simple-molds defs.mod)
14116+ =/ collected=grec-collected
14117+ ?^ imports.mod [(collect-simple-molds ds) *(map term shape)]
14118+ (grec-collect-molds ds)
14119+ =/ molds=imolds molds.collected
1167114120 =/ globals=(list term) (weld prelude-values (weld (import-binding-names imports.mod) vals))
1167214121 =/ surs=(list term) (collect-sur-imports imports.mod)
1167314122 =/ marks=(list term) (collect-mark-imports imports.mod)
1167414123 =/ reserved=(list term) (weld prelude-molds (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1167514124 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11676− =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~ ~ ~]
11677− =/ mts=(each imold-types @t) (module-mold-types molds state)
11678− ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
11679− =/ resolution=iresolved (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
14125+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks resolved.p.js reserved ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
14126+ :: Source and scope were checked above; preserve that exact root and prelude.
14127+ :: This first integration only indexes import-free library sources.
14128+ =/ index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])
14129+ ?^ imports.mod ~
14130+ ?~ prelude ~
14131+ =/ standard=(unit ischeme) (find-jibb-mold %list u.prelude)
14132+ ?~ standard ~
14133+ ?. =(u.standard [[%collection %list ~[[%var 0]]] ~[0]]) ~
14134+ =/ index=(map term shape) proofs.collected
14135+ ?. !=(index *(map term shape)) ~
14136+ ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
14137+ `[at src u.prelude index]
14138+ =. grec-index.state index
14139+ =/ mts=(each imold-types imold-failure) (module-mold-types-detail molds state)
14140+ ?: ?=(%| -.mts)
14141+ ?~ overlap.p.mts [%| [(crip "{(trip message.p.mts)}: {(spud at)}") ~]]
14142+ =/ witness=[name=term cases=upair] u.overlap.p.mts
14143+ =/ first=@t (show-error src [at line.beg.first.cases.witness col.beg.first.cases.witness "first union case"])
14144+ =/ second=@t (show-error src [at line.beg.second.cases.witness col.beg.second.cases.witness "overlapping case"])
14145+ =/ msg=@t (of-wain:format ~[(crip "module mold {(trip name.witness)} has overlapping cases") first second])
14146+ [%| [msg `[at src name.witness cases.witness]]]
14147+ =/ resolution=iresolved
14148+ ?~ index
14149+ (resolve-groups ds molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
14150+ (resolve-groups-core ds molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
1168014151 =/ env=ienv env.resolution
11681− ?. (module-values-complete defs.mod env)
11682− [%| (crip "module definitions need unsupported inference: {(spud at)}")]
11683− =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
14152+ =/ recovered=iresolved
14153+ ?~ main resolution
14154+ ?~ main-parts resolution
14155+ =/ updated=(unit iresolved)
14156+ (program-update-context u.main u.main-parts ds resolution state)
14157+ =/ with-update=iresolved ?~(updated resolution u.updated)
14158+ =/ subscribed=(unit iresolved)
14159+ (program-subs-context u.main-parts ds with-update state)
14160+ =/ with-subs=iresolved ?~(subscribed with-update u.subscribed)
14161+ =/ viewed=(unit iresolved)
14162+ (program-view-context u.main-parts ds with-subs state)
14163+ =/ with-keyed-view=iresolved ?~(viewed with-subs u.viewed)
14164+ =/ plain-view=(unit iresolved)
14165+ ?^(viewed ~ (program-plain-view-context u.main-parts ds with-keyed-view state))
14166+ =/ with-view=iresolved ?~(plain-view with-keyed-view u.plain-view)
14167+ =/ initialized=(unit iresolved)
14168+ (program-init-context u.main u.main-parts ds with-view state)
14169+ =/ with-initialized=iresolved ?~(initialized with-view u.initialized)
14170+ =/ plain-init=(unit iresolved)
14171+ ?^(initialized ~ (program-plain-init-context u.main-parts ds with-initialized state))
14172+ =/ components=iresolved ?~(plain-init with-initialized u.plain-init)
14173+ (program-main-context u.main ds components state)
14174+ =. env env.recovered
14175+ =. artifacts.resolution artifacts.recovered
14176+ =. env
14177+ ?: (module-values-complete ds env) env
14178+ ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env
14179+ ?: (gth (met 3 src) 65.536) env
14180+ ?: (gth (lent ds) 64) env
14181+ ?. (dg-source-candidate ds 64) env
14182+ =/ transaction=(unit dgcommit) (dg-root-source at src)
14183+ ?~ transaction env
14184+ ?: (dg-interface-safe env.u.transaction) env.u.transaction
14185+ env
14186+ =/ required=(list def)
14187+ ?~ store-parts ds
14188+ (skim ds |=(d=def !&(?=(%value -.d) =(%main name.d))))
14189+ ?. (module-values-complete required env)
14190+ [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
14191+ =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ ~ modules prelude prelude-values prelude-molds externals mark-externals]
1168414192 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
11685− ?~ graph [%| 'module request evidence needs unsupported inference']
14193+ ?~ graph [%| ['module request evidence needs unsupported inference' ~]]
14194+ =/ static-main=(unit ischeme)
14195+ ?~ main ~
14196+ ?^ main-parts ~
14197+ ?^ page-parts ~
14198+ ?^ store-parts ~
14199+ (static-main-specialized env prelude)
14200+ =? env ?=(^ static-main)
14201+ [[%main u.static-main] (skim env |=(entry=[name=term scheme=ischeme] !=(%main name.entry)))]
14202+ =/ store-main=(unit ischeme)
14203+ ?~ store-parts ~
14204+ ?~ declared ~
14205+ (store-main-closed u.store-parts action.u.declared env p.mts prelude)
14206+ =? env ?=(^ store-main)
14207+ [[%main u.store-main] (skim env |=(entry=[name=term scheme=ischeme] !=(%main name.entry)))]
14208+ =/ kind-ok=?
14209+ ?~ main &
14210+ ?^ main-parts (program-main-closed u.main-parts ds env prelude resolved.p.js u.graph)
14211+ ?^ page-parts (page-main-closed u.page-parts ds env prelude resolved.p.js u.graph)
14212+ ?^ store-parts ?=(^ store-main)
14213+ ?=(^ static-main)
14214+ ?. kind-ok
14215+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
14216+ =/ store-derived=(unit [values=ienv evidence=istore-request-evidence])
14217+ ?~ declared ~
14218+ ?~ prelude ~
14219+ =/ state=(unit ischeme) (find-jibb-mold %state [~ p.mts at ~ ~ ~ ~ ~])
14220+ ?~ state ~
14221+ =/ action-mold=(unit ischeme) (find-jibb-mold action.u.declared [~ p.mts at ~ ~ ~ ~ ~])
14222+ ?~ action-mold ~
14223+ =/ schemes=(unit [state=ischeme action=ischeme])
14224+ (store-derived-schemes u.prelude prelude-values prelude-molds typ.u.state typ.u.action-mold)
14225+ ?~ schemes ~
14226+ =/ evidence=istore-request-evidence
14227+ [at src typ.u.state action.u.declared typ.u.action-mold]
14228+ `[~[[%state state.u.schemes] [action.u.declared action.u.schemes]] evidence]
14229+ ?: &(?=(^ declared) ?=(~ store-derived))
14230+ [%| [(crip "store derived gates need unsupported inference: {(spud at)}") ~]]
14231+ =? env ?=(^ store-derived) (weld values.u.store-derived env)
14232+ =? graph ?=(^ store-derived)
14233+ `u.graph(stores [evidence.u.store-derived stores.u.graph])
14234+ ?. (request-graph-bounded u.graph)
14235+ [%| ['module request evidence needs unsupported inference' ~]]
1168614236 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
1168714237 [%& [iface [[at iface] cache.p.js]]]
1168814238::
@@ -11729,7 +14279,7 @@
1172914279 =/ declared=(list term) (collect-mark-imports imports.mod)
1173014280 =/ reserved=(list term) (weld molds.u.prepared (turn resolved.p.js |=(j=[face=term interface=ifile] face.j)))
1173114281 =/ top=(list term) (turn ms |=(m=[name=term body=shape] name.m))
11732− =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~ ~ ~]
14282+ =/ state=istate [0 ~ ~ ~ ms globals externals surs marks declared resolved.p.js reserved ~ ~ ~ | file top `public ~ 256 ~ ~ ~ ~ ~ ~]
1173314283 =/ inferred=(unit [template=ischeme state=istate])
1173414284 (infer-mold-template shape.i.selected state(active ~[name], in-mold &))
1173514285 ?~ inferred [%| 'selected mold needs unsupported inference']
@@ -11800,7 +14350,7 @@
1180014350 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
1180114351 =/ scope-values=(list term)
1180214352 (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
11803− (golden-types-in-context file src externals mark-externals resolved.p.js scope-values prelude-molds iface)
14353+ (golden-types-in-context-core file src externals mark-externals resolved.p.js scope-values prelude-molds iface prepared)
1180414354::
1180514355:: +golden-types-with-marks: supply declared mark types separately from /sur
1180614356:: entries, as [mark result] with the result from +read-mark:jibb-import.
@@ -11831,6 +14381,10 @@
1183114381++ golden-types-in-context
1183214382 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
1183314383 ^- @t
14384+ (golden-types-in-context-core file src externals mark-externals jimports prelude-values reserved-molds prelude ~)
14385+++ golden-types-in-context-core
14386+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile) prepared=(unit iprelude)]
14387+ ^- @t
1183414388 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
1183514389 =/ parsed (parse file src)
1183614390 ?: ?=(%| -.parsed) (show-error src p.parsed)
@@ -11846,6 +14400,39 @@
1184614400 =/ resolution=iresolved (resolve-groups ds molds globals externals surs mark-externals marks jimports reserved-molds file prelude)
1184714401 =/ cycles=(list icycle) (definite-value-cycles ds globals)
1184814402 =/ env=ienv env.resolution
14403+ =/ recovered=(list term) ~
14404+ =/ eligible=?
14405+ ?& ?=(~ imports.p.parsed)
14406+ ?=(~ jimports)
14407+ !?=([%ui %api *] file)
14408+ !?=([%ui %stores *] file)
14409+ !(lien (global-value-names ds) |=(n=term =(n %main)))
14410+ !(module-values-complete ds env)
14411+ (lte (met 3 src) 65.536)
14412+ (lte (lent ds) 64)
14413+ ?| &(?=(~ prepared) ?=(~ prelude) ?=(~ prelude-values) ?=(~ reserved-molds) (module-scope-valid p.parsed ~ ~) (dg-source-candidate ds 64))
14414+ ?& ?=(^ prepared)
14415+ ?=(^ prelude)
14416+ =(u.prelude iface.u.prepared)
14417+ =(prelude-values values.u.prepared)
14418+ =(reserved-molds molds.u.prepared)
14419+ (module-scope-valid p.parsed values.u.prepared molds.u.prepared)
14420+ (dg-prepared-candidate ds 64)
14421+ ==
14422+ ==
14423+ ==
14424+ =/ transaction=(unit dgcommit)
14425+ ?. eligible ~
14426+ ?~ prepared (dg-root-source file src)
14427+ (dg-root-prepared file src u.prepared)
14428+ =. recovered
14429+ ?~ transaction ~
14430+ ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
14431+ (turn (skim env.u.transaction |=(entry=[name=term scheme=ischeme] ?=(~ (ienv-lookup name.entry env)))) |=(entry=[name=term scheme=ischeme] name.entry))
14432+ =. env
14433+ ?~ transaction env
14434+ ?: &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) env.u.transaction
14435+ env
1184914436 =/ source-defs=(map term def) (direct-checked-gates ds env)
1185014437 =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
1185114438 =/ lines=(list @t) ~
@@ -11860,6 +14447,16 @@
1186014447 ?^ cycle
1186114448 =/ diag=idiag ["non-gate value depends on itself through a cycle" ~[[first.i.cycle "value in cycle"] [next.i.cycle "dependency in cycle"]]]
1186214449 $(ds t.ds, lines [(show-inference-diagnostic file src name.d diag) lines])
14450+ ?: (lien recovered |=(n=term =(n name.d)))
14451+ =/ found=(unit ischeme) (ienv-lookup name.d env)
14452+ ?~ found $(ds t.ds, lines [(crip "++ {(trip name.d)}: committed definition unavailable") lines])
14453+ ?: (itype-has-hidden-recursive typ.u.found)
14454+ $(ds t.ds, lines [(crip "++ {(trip name.d)}: recursive mold name is not available in this scope") lines])
14455+ ?: (itype-has-hidden-generic typ.u.found)
14456+ $(ds t.ds, lines [(crip "++ {(trip name.d)}: generic union name is not available in this scope") lines])
14457+ =/ typ=itype (canonical-itype typ.u.found vars.u.found)
14458+ =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
14459+ $(ds t.ds, lines [line lines])
1186314460 ?: (lien grouped.resolution |=(n=term =(n name.d)))
1186414461 =/ found=(unit ischeme) (ienv-lookup name.d env)
1186514462 ?~ found $(ds t.ds, lines [(crip "++ {(trip name.d)}: recursive group unavailable") lines])
@@ -11867,7 +14464,7 @@
1186714464 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype typ ~)}{(show-atom-constraint typ)}")
1186814465 $(ds t.ds, lines [line lines])
1186914466 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
11870− =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~ ~ ~]
14467+ =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | file top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1187114468 =. gate-defs.initial source-defs
1187214469 =. head-evidence.initial heads
1187314470 =. initial (reserve-def-caps val.d initial)
@@ -11909,4 +14506,667 @@
1190914506 =/ printable=itype (canonical-itype typ vars)
1191014507 =/ line=@t (crip "++ {(trip name.d)}: {(show-itype printable ~)}{(show-atom-constraint printable)}")
1191114508 $(ds t.ds, lines [line lines])
14509+:: Experimental module-owned pending-constraint generalization only.
14510+:: Inputs, IDs and substitution come from one checker-owned transaction.
14511++$ dgscan [ids=(list @ud) fuel=@ud]
14512+++ dg-scan
14513+ |= [todo=(list itype) sub=isub fuel=@ud ids=(list @ud)]
14514+ ^- (unit dgscan)
14515+ ?~ todo `[ids fuel]
14516+ ?: =(0 fuel) ~
14517+ =. fuel (dec fuel)
14518+ =/ t=itype i.todo
14519+ ?: ?=(?(%var %avar %rvar %nvar %rnvar %tag) -.t)
14520+ =/ node-id=@ud ?:(?=(%tag -.t) id.t +.t)
14521+ =/ found=(unit itype) (itype-lookup node-id sub)
14522+ ?~ found $(todo t.todo, ids [node-id ids])
14523+ ?: &(?=(?(%rvar %rnvar) -.u.found) =(node-id +.u.found))
14524+ $(todo t.todo, ids [node-id ids])
14525+ $(todo [u.found t.todo])
14526+ ?: ?=(%jrec -.t) $(todo t.todo)
14527+ ?+ -.t ~
14528+ %collection $(todo (weld args.t t.todo))
14529+ %union $(todo (weld args.t (weld cases.t t.todo)))
14530+ %face $(todo [body.t t.todo])
14531+ %fn $(todo [sample.t product.t t.todo])
14532+ %cell $(todo [hed.t tal.t t.todo])
14533+ %atom $(todo t.todo)
14534+ %any-atom $(todo t.todo)
14535+ %flag $(todo t.todo)
14536+ %noun $(todo t.todo)
14537+ %empty $(todo t.todo)
14538+ %const $(todo t.todo)
14539+ ==
14540+::
14541+++ dg-scan-ids
14542+ |= [ids=(list @ud) sub=isub fuel=@ud blocked=(list @ud)]
14543+ ^- (unit dgscan)
14544+ ?~ ids `[blocked fuel]
14545+ =/ one=(unit dgscan) (dg-scan ~[[%var i.ids]] sub fuel blocked)
14546+ ?~ one ~
14547+ $(ids t.ids, fuel fuel.u.one, blocked ids.u.one)
14548+::
14549+++ dg-env
14550+ |= [env=ienv sub=isub fuel=@ud blocked=(list @ud)]
14551+ ^- (unit dgscan)
14552+ ?~ env `[blocked fuel]
14553+ =/ sc=ischeme scheme.i.env
14554+ :: Quantifiers are local to the scheme: first find raw free IDs, then
14555+ :: follow those IDs in the module substitution without capturing them.
14556+ =/ raw=(unit dgscan) (dg-scan ~[typ.sc] ~ fuel ~)
14557+ ?~ raw ~
14558+ =/ free=(list @ud) (skim ids.u.raw |=(n=@ud !(lien vars.sc |=(q=@ud =(q n)))))
14559+ =/ resolved=(unit dgscan) (dg-scan-ids free sub fuel.u.raw blocked)
14560+ ?~ resolved ~
14561+ $(env t.env, fuel fuel.u.resolved, blocked ids.u.resolved)
14562+::
14563+++ dg-obligations
14564+ |= [pending=(list dgo) sub=isub fuel=@ud blocked=(list @ud)]
14565+ ^- (unit dgscan)
14566+ ?~ pending `[blocked fuel]
14567+ =/ found=(unit dgscan) (dg-scan ~[left.i.pending right.i.pending] sub fuel blocked)
14568+ ?~ found ~
14569+ $(pending t.pending, fuel fuel.u.found, blocked ids.u.found)
14570+::
14571+++ dg-tags
14572+ |= [tags=(list ipending) sub=isub fuel=@ud blocked=(list @ud)]
14573+ ^- (unit dgscan)
14574+ ?~ tags `[blocked fuel]
14575+ ?: =(0 fuel) ~
14576+ =/ found=(unit itype) (itype-lookup id.i.tags sub)
14577+ ?~ found $(tags t.tags, fuel (dec fuel), blocked [id.i.tags blocked])
14578+ :: Until this entry is explicitly discharged, retain variables reachable
14579+ :: through its binding; mere existence of a substitution is not proof.
14580+ =/ reached=(unit dgscan) (dg-scan ~[u.found] sub (dec fuel) blocked)
14581+ ?~ reached ~
14582+ $(tags t.tags, fuel fuel.u.reached, blocked ids.u.reached)
14583+::
14584+++ dg-generalize
14585+ |= [typ=itype env=ienv pending=(list dgo) tags=(list ipending) captured=(list @ud) state=istate fuel=@ud]
14586+ ^- (unit ischeme)
14587+ :: Bound the obligation list and all graph/substitution walks. The
14588+ :: substitution is assumed checker-owned and occurs-checked.
14589+ ?: (gth (lent pending) 64) ~
14590+ =/ capt=(unit dgscan) (dg-scan-ids captured sub.state fuel ~)
14591+ ?~ capt ~
14592+ =/ env-free=(unit dgscan) (dg-env env sub.state fuel.u.capt ids.u.capt)
14593+ ?~ env-free ~
14594+ =/ obligations=(unit dgscan) (dg-obligations pending sub.state fuel.u.env-free ids.u.env-free)
14595+ ?~ obligations ~
14596+ =/ tagged=(unit dgscan) (dg-tags tags sub.state fuel.u.obligations ids.u.obligations)
14597+ ?~ tagged ~
14598+ =/ bounded=(unit dgscan) (dg-scan ~[typ] sub.state fuel.u.tagged ~)
14599+ ?~ bounded ~
14600+ =/ normalized=itype (itype-normalize typ sub.state)
14601+ =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
14602+ =/ quantified=(list @ud) (skim vars |=(n=@ud !(lien ids.u.tagged |=(b=@ud =(b n)))))
14603+ `[[normalized quantified]]
14604+::
14605++$ dgcommit [env=ienv state=istate]
14606+:: A branch literal must not acquire a value face through replay.
14607+++ dg-literal-target-safe
14608+ |= target=itype
14609+ ^- ?
14610+ ?: ?=(%union -.target)
14611+ (levy cases.target |=(c=itype ?=(?(%const %cell) -.c)))
14612+ ?=(?(%const %atom %any-atom %flag %noun) -.target)
14613+::
14614+++ dg-replay-edges
14615+ |= [edges=(list dgo) state=istate fuel=@ud]
14616+ ^- (unit istate)
14617+ ?~ edges `state
14618+ ?: =(0 fuel) ~
14619+ =/ trial=ifit (itype-fit left.i.edges right.i.edges sub.state next.state)
14620+ ?. ?=(%ok -.trial) ~
14621+ =/ valid=?
14622+ ?: ?=(%tag -.left.i.edges)
14623+ ?. constructor.left.i.edges
14624+ =/ closed=(unit dgscan) (dg-scan ~[right.i.edges] sub.trial 512 ~)
14625+ ?~ closed |
14626+ ?^ ids.u.closed |
14627+ (dg-literal-target-safe (itype-normalize right.i.edges sub.trial))
14628+ =((itype-walk left.i.edges sub.trial) (itype-walk right.i.edges sub.trial))
14629+ =((itype-walk left.i.edges sub.trial) (itype-walk right.i.edges sub.trial))
14630+ ?. valid ~
14631+ $(edges t.edges, state state(sub sub.trial, next next.trial), fuel (dec fuel))
14632+::
14633+++ dg-close-env
14634+ |= [env=ienv sub=isub fuel=@ud]
14635+ ^- (unit ienv)
14636+ ?~ env `~
14637+ ?: =(0 fuel) ~
14638+ =/ s=ischeme scheme.i.env
14639+ :: Quantified IDs are scheme-local and cannot be rewritten on publication.
14640+ ?. (levy vars.s |=(n=@ud ?=(~ (itype-lookup n sub)))) ~
14641+ =/ bounded=(unit dgscan) (dg-scan ~[typ.s] sub (dec fuel) ~)
14642+ ?~ bounded ~
14643+ =/ normalized=itype (itype-normalize typ.s sub)
14644+ ?: (itype-has-tag normalized) ~
14645+ =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
14646+ ?. (levy vars |=(n=@ud (lien vars.s |=(v=@ud =(v n))))) ~
14647+ =/ rest=(unit ienv) (dg-close-env t.env sub fuel.u.bounded)
14648+ ?~ rest ~
14649+ `[[name.i.env [normalized vars.s]] u.rest]
14650+::
14651+:: A deferred boolean branch has exactly the two literal flag patterns.
14652+:: Arms are inferred in order. Equal types are retained; two direct pending
14653+:: literals may instead retain source-owned obligations for later context.
14654+++ dg-boolean-patterns
14655+ |= e=expr
14656+ ^- ?
14657+ ?. ?=(%branch -.e) |
14658+ ?~ arms.e |
14659+ ?~ t.arms.e |
14660+ ?^ t.t.arms.e |
14661+ =/ x=arm i.arms.e
14662+ =/ y=arm i.t.arms.e
14663+ ?. &(?=(%lit -.pat.x) ?=(%lit -.pat.y)) |
14664+ ?. &(=(%loobean form.lit.pat.x) =(%loobean form.lit.pat.y)) |
14665+ !=(val.lit.pat.x val.lit.pat.y)
14666+:: Only a direct source literal which created its own unbound pending tag
14667+:: may create a branch edge. The caller must retain the exact source and state.
14668+++ dg-owned-arm-literal
14669+ |= [e=expr t=itype tags=(list ipending) sub=isub initial=@ud]
14670+ ^- ?
14671+ ?. ?=(%lit -.e) |
14672+ ?. ?=(%tag -.t) |
14673+ ?: constructor.t |
14674+ ?. =(lit.e literal.t) |
14675+ ?: (lth id.t initial) |
14676+ ?^ (itype-lookup id.t sub) |
14677+ (lien tags |=(x=ipending &(=(id.x id.t) =(literal.x literal.t))))
14678+++ dg-boolean-branch
14679+ |= [e=expr env=ienv state=istate]
14680+ ^- iresult
14681+ ?. (dg-boolean-patterns e) [%| ["deferred branch patterns need unsupported inference" ~]]
14682+ ?> ?=(%branch -.e)
14683+ ?> ?=(^ arms.e)
14684+ ?> ?=(^ t.arms.e)
14685+ =/ x=arm i.arms.e
14686+ =/ y=arm i.t.arms.e
14687+ =/ subject=iresult (infer-fragment subject.e env state)
14688+ ?: ?=(%| -.subject) subject
14689+ =/ su=(unit isub) (itype-unify typ.p.subject [%flag ~] sub.state.p.subject)
14690+ ?~ su [%| ["deferred branch subject does not unify with ?" ~]]
14691+ =/ left=iresult (infer-fragment val.x env state.p.subject(sub u.su))
14692+ ?: ?=(%| -.left) left
14693+ =/ right=iresult (infer-fragment val.y env state.p.left)
14694+ ?: ?=(%| -.right) right
14695+ ?. (dg-stable-fit typ.p.left typ.p.right sub.state.p.right)
14696+ =/ st=istate state.p.right
14697+ ?. (dg-owned-arm-literal val.x typ.p.left tags.st sub.st next.state)
14698+ [%| ["deferred branch arm context needs unsupported inference" ~]]
14699+ ?. (dg-owned-arm-literal val.y typ.p.right tags.st sub.st next.state)
14700+ [%| ["deferred branch arm context needs unsupported inference" ~]]
14701+ ?> ?=(%tag -.typ.p.left)
14702+ ?> ?=(%tag -.typ.p.right)
14703+ ?: =(id.typ.p.left id.typ.p.right)
14704+ [%| ["deferred branch arm context needs unsupported inference" ~]]
14705+ ?: (gth (lent obligations.st) 62)
14706+ [%| ["deferred branch arm context needs unsupported inference" ~]]
14707+ =/ result=itype [%var next.st]
14708+ =/ ex=dgo [typ.p.left result (span-of val.x) (span-of e)]
14709+ =/ ey=dgo [typ.p.right result (span-of val.y) (span-of e)]
14710+ [%& result st(next +(next.st), obligations [ex ey obligations.st])]
14711+ [%& typ.p.left state.p.right]
14712+::
14713+:: A direct tuple literal may wait for a later exact result context.
14714+:: Each pending literal retains its source tag and its own fit obligation.
14715+++ dg-infer-tuple-items
14716+ |= [items=(list item) env=ienv state=istate]
14717+ ^- iresult
14718+ ?~ items [%| ["empty cell is not supported by partial inference" ~]]
14719+ =/ head=iresult (infer-fragment val.i.items env state)
14720+ ?: ?=(%| -.head) head
14721+ =/ typ=itype typ.p.head
14722+ =/ st=istate state.p.head
14723+ =/ adjusted=(unit [typ=itype state=istate])
14724+ ?. (dg-owned-arm-literal val.i.items typ tags.st sub.st next.state) `[typ st]
14725+ ?: (gth (lent obligations.st) 63) ~
14726+ =/ pending=itype [%var next.st]
14727+ =/ edge=dgo [typ pending (span-of val.i.items) at.i.items]
14728+ `[pending st(next +(next.st), obligations [edge obligations.st])]
14729+ ?~ adjusted [%| ["deferred tuple context needs unsupported inference" ~]]
14730+ =. typ typ.u.adjusted
14731+ =. st state.u.adjusted
14732+ =. typ ?~(face.i.items typ [%face u.face.i.items typ])
14733+ ?~ t.items [%& typ st]
14734+ =/ tail=iresult $(items t.items, state st)
14735+ ?: ?=(%| -.tail) tail
14736+ [%& [%cell typ typ.p.tail] state.p.tail]
14737+::
14738+:: Deferred inference uses only source forms whose successful fit sites are
14739+:: guarded below; a shared source-node budget bounds this screen.
14740+++ dg-safe-expressions
14741+ |= [todo=(list expr) fuel=@ud]
14742+ ^- (unit @ud)
14743+ ?~ todo `fuel
14744+ =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
14745+ ?~ first ~
14746+ $(todo t.todo, fuel u.first)
14747+++ dg-safe-items
14748+ |= [items=(list item) fuel=@ud]
14749+ ^- (unit @ud)
14750+ ?~ items `fuel
14751+ =/ first=(unit @ud) (dg-safe-expression val.i.items fuel)
14752+ ?~ first ~
14753+ $(items t.items, fuel u.first)
14754+++ dg-safe-expression
14755+ |= [e=expr fuel=@ud]
14756+ ^- (unit @ud)
14757+ ?: =(0 fuel) ~
14758+ =. fuel (dec fuel)
14759+ ?+ -.e ~
14760+ ?(%lit %ctor) `fuel
14761+ %wing ?:(?=([@ ~] names.e) `fuel ~)
14762+ %str
14763+ ?. (levy pieces.e |=(p=piece ?=(%text -.p))) ~
14764+ `fuel
14765+ %group $(e inner.e, fuel fuel)
14766+ %body
14767+ ?^ defs.e ~
14768+ $(e final.e, fuel fuel)
14769+ %gate $(e body.e, fuel fuel)
14770+ %gate-wide $(e body.e, fuel fuel)
14771+ %tuple (dg-safe-items items.e fuel)
14772+ %branch
14773+ ?. (dg-boolean-patterns e) ~
14774+ ?> ?=(^ arms.e)
14775+ ?> ?=(^ t.arms.e)
14776+ =/ subject=(unit @ud) $(e subject.e, fuel fuel)
14777+ ?~ subject ~
14778+ (dg-safe-expressions ~[val.i.arms.e val.i.t.arms.e] u.subject)
14779+ %cast $(e val.e, fuel fuel)
14780+ %call
14781+ =/ head=(unit @ud) $(e head.e, fuel fuel)
14782+ ?~ head ~
14783+ (dg-safe-expressions args.e u.head)
14784+ ==
14785+:: Exact normalized equality is preserved by all later substitutions.
14786+:: The bounded scan declines opaque types and oversized inputs.
14787+++ dg-stable-fit
14788+ |= [actual=itype expected=itype sub=isub]
14789+ ^- ?
14790+ ?~ (dg-scan ~[actual expected] sub 512 ~) |
14791+ =((itype-normalize actual sub) (itype-normalize expected sub))
14792+::
14793+:: A positional call peels sample-slot faces during its separate face check.
14794+:: Require its argument, sample and result closed so that check stays valid.
14795+++ dg-stable-call-fit
14796+ |= [actual=itype expected=itype product=itype sub=isub positional=?]
14797+ ^- ?
14798+ =/ checked=(unit dgscan) (dg-scan ~[actual expected product] sub 512 ~)
14799+ ?~ checked |
14800+ ?: &(positional ?=(^ ids.u.checked)) |
14801+ =((itype-normalize actual sub) (itype-normalize expected sub))
14802+::
14803+:: One definition attempt retains state only when inference succeeds.
14804++$ dg-step [env=ienv state=istate pending=(list dgo)]
14805+++ dg-stage-one
14806+ |= [d=def env=ienv state=istate]
14807+ ^- (unit dg-step)
14808+ ?> ?=(%value -.d)
14809+ ?~ (dg-safe-expression val.d 512) ~
14810+ =/ local=istate (reserve-def-caps val.d state)
14811+ :: This first slice declines all written capitals and holes/projections.
14812+ ?^ caps.local ~
14813+ =/ ordinary=iresult (infer-fragment val.d env local)
14814+ ?: ?=(%| -.ordinary) ~
14815+ =/ typ=itype typ.p.ordinary
14816+ =/ after=istate state.p.ordinary
14817+ =/ edges=(list dgo) obligations.after
14818+ ?. =(binders.after binders.state) ~
14819+ ?. =(molds.after molds.state) ~
14820+ ?. =(globals.after globals.state) ~
14821+ ?. =(externals.after externals.state) ~
14822+ ?. =(surs.after surs.state) ~
14823+ ?. =(mark-externals.after mark-externals.state) ~
14824+ ?. =(marks.after marks.state) ~
14825+ ?. =(jimports.after jimports.state) ~
14826+ ?. =(reserved-molds.after reserved-molds.state) ~
14827+ ?. =(params.after params.state) ~
14828+ ?. =(active.after active.state) ~
14829+ ?. =(in-mold.after in-mold.state) ~
14830+ ?. =(at.after at.state) ~
14831+ ?. =(top-molds.after top-molds.state) ~
14832+ ?. =(prelude.after prelude.state) ~
14833+ ?. =(gate-defs.after gate-defs.state) ~
14834+ ?. =(head-evidence.after head-evidence.state) ~
14835+ ?. =(grec-index.after grec-index.state) ~
14836+ ?. =(defer.after defer.state) ~
14837+ ?. =(holes.after holes.state) ~
14838+ ?. =(caps.after caps.state) ~
14839+ ?. =(projections.after projections.state) ~
14840+ ?: (unsupported-atom-vars (itype-normalize typ sub.after) caps.after binders.after sub.after) ~
14841+ ?: (itype-has-nvar (itype-normalize typ sub.after)) ~
14842+ =/ scheme=(unit ischeme) (dg-generalize typ env edges tags.after ~ after 32.768)
14843+ ?~ scheme ~
14844+ `[[[name.d u.scheme] env] after edges]
14845+:: Retry only definitions that did not infer. Successful definitions are
14846+:: committed into the local transaction, never published until all close.
14847+++ dg-stage
14848+ |= [ds=(list def) base=ienv env=ienv state=istate pending=(list dgo) fuel=@ud]
14849+ ^- (unit dgcommit)
14850+ ?: (gth fuel 64) ~
14851+ ?: (gth (lent ds) fuel) ~
14852+ =/ remaining=(list def) ds
14853+ =/ waiting=(list def) ~
14854+ =/ progress=? |
14855+ =/ attempts=@ud (mul fuel fuel)
14856+ |-
14857+ ?~ remaining
14858+ ?^ waiting
14859+ ?. progress ~
14860+ $(remaining (flop waiting), waiting ~, progress |)
14861+ =/ replayed=(unit istate) (dg-replay-edges pending state 64)
14862+ ?~ replayed ~
14863+ ?: (pending-tags tags.u.replayed sub.u.replayed) ~
14864+ =/ closed-edges=(unit dgscan) (dg-obligations pending sub.u.replayed 32.768 ~)
14865+ ?~ closed-edges ~
14866+ ?^ ids.u.closed-edges ~
14867+ =/ rechecked=(unit istate) (dg-replay-edges pending u.replayed 64)
14868+ ?~ rechecked ~
14869+ ?. =(sub.u.rechecked sub.u.replayed) ~
14870+ ?. =(next.u.rechecked next.u.replayed) ~
14871+ =/ closed=(unit ienv) (dg-close-env env sub.u.replayed 32.768)
14872+ ?~ closed ~
14873+ `[[u.closed u.replayed(defer ~, obligations ~)]]
14874+ ?: =(0 attempts) ~
14875+ =. attempts (dec attempts)
14876+ =/ d=def i.remaining
14877+ ?: ?=(%mold -.d) $(remaining t.remaining)
14878+ ?^ (ienv-lookup name.d base) $(remaining t.remaining)
14879+ ?^ (ienv-lookup name.d env) ~
14880+ =/ done=(unit dg-step) (dg-stage-one d env state)
14881+ ?~ done $(remaining t.remaining, waiting [d waiting])
14882+ $(remaining t.remaining, env env.u.done, state state.u.done, pending pending.u.done, progress &)
14883+::
14884+:: Cheap bounded eligibility check on the already parsed source. This
14885+:: deliberately covers only direct constructor calls beneath transparent
14886+:: groups, gates, casts and definition-free bodies. Other shapes decline
14887+:: this fallback without a second parse or resolution pass.
14888+++ dg-direct-source
14889+ |= [e=expr fuel=@ud]
14890+ ^- ?
14891+ ?: =(0 fuel) |
14892+ ?+ -.e |
14893+ %group $(e inner.e, fuel (dec fuel))
14894+ %gate $(e body.e, fuel (dec fuel))
14895+ %gate-wide $(e body.e, fuel (dec fuel))
14896+ %cast $(e val.e, fuel (dec fuel))
14897+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
14898+ %call
14899+ ?. ?=([* ~] args.e) |
14900+ ?=(%ctor -.i.args.e)
14901+ ==
14902+++ dg-source-candidate
14903+ |= [ds=(list def) fuel=@ud]
14904+ ^- ?
14905+ ?~ ds |
14906+ ?: =(0 fuel) |
14907+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
14908+ ?: (dg-direct-source val.i.ds 64) &
14909+ $(ds t.ds, fuel (dec fuel))
14910+::
14911+++ dg-prepared-source
14912+ |= [e=expr fuel=@ud]
14913+ ^- ?
14914+ ?: (dg-direct-source e fuel) &
14915+ ?: =(0 fuel) |
14916+ ?+ -.e |
14917+ %group $(e inner.e, fuel (dec fuel))
14918+ %gate $(e body.e, fuel (dec fuel))
14919+ %gate-wide $(e body.e, fuel (dec fuel))
14920+ %cast $(e val.e, fuel (dec fuel))
14921+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
14922+ %tuple &
14923+ ==
14924+++ dg-prepared-candidate
14925+ |= [ds=(list def) fuel=@ud]
14926+ ^- ?
14927+ ?~ ds |
14928+ ?: =(0 fuel) |
14929+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
14930+ ?: (dg-prepared-source val.i.ds 64) &
14931+ $(ds t.ds, fuel (dec fuel))
14932+::
14933+++ dg-interface-safe
14934+ |= [env=ienv]
14935+ ^- ?
14936+ ?~ env &
14937+ =/ sc=ischeme scheme.i.env
14938+ ?: |((itype-has-hidden-recursive typ.sc) (itype-has-hidden-generic typ.sc)) |
14939+ ?: (gth (lent vars.sc) 26) |
14940+ $(env t.env)
14941+:: Parse status and the transaction result come from the same source parse.
14942++$ dgparse [parsed=? result=(unit dgcommit)]
14943+++ dg-root-source
14944+ |= [at=path src=@t]
14945+ ^- (unit dgcommit)
14946+ result:(dg-root-detail at src)
14947+++ dg-root-detail
14948+ |= [at=path src=@t]
14949+ ^- dgparse
14950+ =/ parsed (parse at src)
14951+ ?: ?=(%| -.parsed) [| ~]
14952+ =/ transact
14953+ |.
14954+ ?^ imports.p.parsed ~
14955+ ?. (module-scope-valid p.parsed ~ ~) ~
14956+ ?^ (duplicate-defs defs.p.parsed) ~
14957+ =/ defs=(list def) defs.p.parsed
14958+ ?: (gth (lent defs) 64) ~
14959+ =/ molds=imolds (collect-simple-molds defs)
14960+ =/ globals=(list term) (global-value-names defs)
14961+ =/ resolution=iresolved (resolve-groups defs molds globals ~ ~ ~ ~ ~ ~ at ~)
14962+ ?^ grouped.resolution ~
14963+ ?^ artifacts.resolution ~
14964+ =/ base=ienv env.resolution
14965+ =/ free=(unit dgscan) (dg-env base ~ 32.768 ~)
14966+ ?~ free ~
14967+ ?^ ids.u.free ~
14968+ =/ all=(unit dgscan) (dg-all-env-ids base 32.768 ~)
14969+ ?~ all ~
14970+ =/ fresh=@ud (dg-next-id ids.u.all 0)
14971+ =/ st=istate *istate
14972+ =. st st(next fresh, defer `~, molds molds, globals globals, at at, top-molds (turn molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
14973+ =/ checked-molds=(each imold-types @t) (module-mold-types molds st)
14974+ ?: ?=(%| -.checked-molds) ~
14975+ (dg-stage defs base base st ~ 64)
14976+ ::
14977+ [& (transact)]
14978+:: The caller supplies the trusted prepared prelude. This transaction is
14979+:: only report evidence; the ordinary module resolver does not publish it.
14980+++ dg-root-prepared
14981+ |= [at=path src=@t prepared=iprelude]
14982+ ^- (unit dgcommit)
14983+ ?: ?=([%ui %api *] at) ~
14984+ ?: ?=([%ui %stores *] at) ~
14985+ ?: (gth (met 3 src) 65.536) ~
14986+ =/ parsed (parse at src)
14987+ ?: ?=(%| -.parsed) ~
14988+ ?^ imports.p.parsed ~
14989+ ?. (module-scope-valid p.parsed values.prepared molds.prepared) ~
14990+ ?^ (duplicate-defs defs.p.parsed) ~
14991+ =/ defs=(list def) defs.p.parsed
14992+ ?: (gth (lent defs) 64) ~
14993+ ?: (lien (global-value-names defs) |=(n=term =(n %main))) ~
14994+ ?. (dg-prepared-candidate defs 64) ~
14995+ =/ local-molds=imolds (collect-simple-molds defs)
14996+ =/ globals=(list term) (weld values.prepared (global-value-names defs))
14997+ =/ iface=ifile iface.prepared
14998+ =/ prelude=(unit ifile) `iface
14999+ =/ resolution=iresolved
15000+ (resolve-groups defs local-molds globals ~ ~ ~ ~ ~ molds.prepared at prelude)
15001+ ?^ grouped.resolution ~
15002+ ?^ artifacts.resolution ~
15003+ =/ base=ienv env.resolution
15004+ =/ templates=ienv
15005+ (turn molds.iface |=(x=[name=term template=ischeme] [name.x template.x]))
15006+ =/ all-env=ienv (weld base (weld values.iface templates))
15007+ =/ free=(unit dgscan) (dg-env all-env ~ 32.768 ~)
15008+ ?~ free ~
15009+ ?^ ids.u.free ~
15010+ =/ all=(unit dgscan) (dg-all-env-ids all-env 32.768 ~)
15011+ ?~ all ~
15012+ =/ fresh=@ud (dg-next-id ids.u.all 0)
15013+ =/ st=istate *istate
15014+ =. st st(next fresh, defer `~, molds local-molds, globals globals, at at, reserved-molds molds.prepared, prelude prelude, top-molds (turn local-molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
15015+ =/ checked-molds=(each imold-types @t) (module-mold-types local-molds st)
15016+ ?: ?=(%| -.checked-molds) ~
15017+ (dg-stage defs base base st ~ 64)
15018+::
15019+++ dg-all-env-ids
15020+ |= [env=ienv fuel=@ud ids=(list @ud)]
15021+ ^- (unit dgscan)
15022+ ?~ env `[ids fuel]
15023+ ?: =(0 fuel) ~
15024+ =/ sc=ischeme scheme.i.env
15025+ ?: (itype-has-tag typ.sc) ~
15026+ =/ raw=(unit dgscan) (dg-scan ~[typ.sc] ~ (dec fuel) ids)
15027+ ?~ raw ~
15028+ =/ quant=(unit dgscan) (dg-scan-ids vars.sc ~ fuel.u.raw ids.u.raw)
15029+ ?~ quant ~
15030+ $(env t.env, fuel fuel.u.quant, ids ids.u.quant)
15031+::
15032+++ dg-next-id
15033+ |= [ids=(list @ud) largest=@ud]
15034+ ^- @ud
15035+ ?~ ids +(largest)
15036+ $(ids t.ids, largest (max largest i.ids))
15037+::
15038+++ dg-eligible-ctor
15039+ |= [e=expr head=itype actual=itype expected=itype state=istate]
15040+ ^- (unit dgo)
15041+ ?. ?=(%call -.e) ~
15042+ ?. ?=([* ~] args.e) ~
15043+ ?. ?=(%ctor -.i.args.e) ~
15044+ ?. ?=(%fn -.head) ~
15045+ ?. ?=(%fn -.expected) ~
15046+ ?. ?=(%tag -.actual) ~
15047+ ?. constructor.actual ~
15048+ ?. ?=(%var -.product.expected) ~
15049+ ?^ (itype-lookup id.product.expected sub.state) ~
15050+ =/ bounded=(unit dgscan) (dg-scan ~[sample.expected] sub.state 256 ~)
15051+ ?~ bounded ~
15052+ ?^ ids.u.bounded ~
15053+ `[[actual expected (span-of i.args.e) (span-of head.e)]]
15054+::
15055+:: Experimental per-module, source-derived recursive tree index.
15056+:: The two tags and the exact children/list/self layout are fixed-shape
15057+:: checks, so ordinary definitions incur no type-tree or source scans.
15058+++ grec-tagged-fields
15059+ |= sh=shape
15060+ ^- (unit [tag=@ fields=(list field)])
15061+ ?. ?=(%cell -.sh) ~
15062+ ?~ fields.sh ~
15063+ =/ head=field i.fields.sh
15064+ ?. ?=(%bare -.head) ~
15065+ ?. ?=(%const -.shape.head) ~
15066+ ?. &(?=(%term form.lit.shape.head) =(%tas aura.lit.shape.head)) ~
15067+ `[val.lit.shape.head t.fields.sh]
15068+++ grec-tree-children
15069+ |= [fs=(list field) param=@t]
15070+ ^- (unit field)
15071+ ?~ fs ~
15072+ ?~ t.fs `i.fs
15073+ ?^ t.t.fs ~
15074+ =/ event=field i.fs
15075+ =/ kids=field i.t.fs
15076+ ?. &(?=(%face -.event) ?=(%face -.kids)) ~
15077+ ?. !=(name.event name.kids) ~
15078+ ?. ?=(%fn -.shape.event) ~
15079+ ?. ?=(%aura -.sample.shape.event) ~
15080+ ?. =(%t aura.sample.shape.event) ~
15081+ ?. ?=(%tvar -.product.shape.event) ~
15082+ ?. =(param name.product.shape.event) ~
15083+ `kids
15084+::
15085+++ grec-tree-proof
15086+ |= [name=term sh=shape]
15087+ ^- ?
15088+ ?. ?=(%generic -.sh) |
15089+ ?. ?=([@ ~] vars.sh) |
15090+ =/ param=@t i.vars.sh
15091+ ?. ?=(%union -.body.sh) |
15092+ ?. ?=([* [* ~]] cases.body.sh) |
15093+ =/ a=(unit [tag=@ fields=(list field)]) (grec-tagged-fields i.cases.body.sh)
15094+ =/ b=(unit [tag=@ fields=(list field)]) (grec-tagged-fields i.t.cases.body.sh)
15095+ ?~ a |
15096+ ?~ b |
15097+ ?. !=(tag.u.a tag.u.b) |
15098+ ?. ?=([* ~] fields.u.a) |
15099+ =/ value=field i.fields.u.a
15100+ ?. ?=(%face -.value) |
15101+ ?. ?=(%aura -.shape.value) |
15102+ ?. =(%t aura.shape.value) |
15103+ =/ selected=(unit field) (grec-tree-children fields.u.b param)
15104+ ?~ selected |
15105+ =/ kids=field u.selected
15106+ ?. ?=(%face -.kids) |
15107+ ?. ?=(%apply -.shape.kids) |
15108+ ?. =(ref.shape.kids ~[%list]) |
15109+ ?. ?=([* ~] args.shape.kids) |
15110+ =/ self=shape i.args.shape.kids
15111+ ?. ?=(%apply -.self) |
15112+ ?. =(ref.self ~[name]) |
15113+ ?. ?=([* ~] args.self) |
15114+ ?. ?=(%tvar -.i.args.self) |
15115+ =(name.i.args.self param)
15116++$ grec-collected [molds=imolds proofs=(map term shape)]
15117+:: Experimental one-layer analysis view, never an exported mold identity.
15118+++ grec-unfold-view
15119+ |= [typ=itype fuel=@ud]
15120+ ^- (unit [view=itype left=@ud])
15121+ ?. ?=(%grec -.typ) ~
15122+ ?: =(fuel 0) ~
15123+ ?. ?=([* ~] args.typ) ~
15124+ =/ sh=shape proof.typ
15125+ ?. (grec-tree-proof name.typ sh) ~
15126+ ?> ?=(%generic -.sh)
15127+ ?> ?=([@ ~] vars.sh)
15128+ ?> ?=(%union -.body.sh)
15129+ ?> ?=([* [* ~]] cases.body.sh)
15130+ =/ ca=shape i.cases.body.sh
15131+ =/ cb=shape i.t.cases.body.sh
15132+ ?> ?=(%cell -.ca)
15133+ ?> ?=(%cell -.cb)
15134+ ?> ?=([* [* ~]] fields.ca)
15135+ ?> ?=([* *] fields.cb)
15136+ =/ tag-a=field i.fields.ca
15137+ =/ tag-b=field i.fields.cb
15138+ ?> ?=(%bare -.tag-a)
15139+ ?> ?=(%bare -.tag-b)
15140+ ?> ?=(%const -.shape.tag-a)
15141+ ?> ?=(%const -.shape.tag-b)
15142+ =/ text-field=field i.t.fields.ca
15143+ ?> ?=(%face -.text-field)
15144+ =/ branch=(list field) t.fields.cb
15145+ =/ kids=(unit field) (grec-tree-children branch i.vars.sh)
15146+ ?~ kids ~
15147+ ?> ?=(%face -.u.kids)
15148+ =/ children=itype [%face name.u.kids [%collection %list ~[typ]]]
15149+ ?> ?=(^ branch)
15150+ =/ payload=itype
15151+ ?~ t.branch children
15152+ =/ event=field i.branch
15153+ ?> ?=(%face -.event)
15154+ [%cell [%face name.event [%fn [%atom %t] i.args.typ]] children]
15155+ =/ leaf=itype [%cell [%const lit.shape.tag-a] [%face name.text-field [%atom %t]]]
15156+ =/ node=itype [%cell [%const lit.shape.tag-b] payload]
15157+ `[[%union ~[leaf node] ~ ~ ~] (dec fuel)]
15158+::
15159+++ grec-collect-molds
15160+ |= ds=(list def)
15161+ ^- grec-collected
15162+ ?~ ds [~ *(map term shape)]
15163+ =/ rest=grec-collected $(ds t.ds)
15164+ ?. ?=(%mold -.i.ds) rest
15165+ =/ name=term name.i.ds
15166+ =/ body=shape shape.i.ds
15167+ =/ proofs=(map term shape) proofs.rest
15168+ =? proofs (grec-tree-proof name body) (~(put by proofs) name body)
15169+ [[[name body] molds.rest] proofs]
15170+::
15171+
1191215172--
jibb-dev/lib/jibb/internal.jibb+2
@@ -18,6 +18,8 @@
1818:: Private compiler primitive wrappers; execution is a later milestone.
1919++ add-atom |= args=[A A] (raw-add.core args)
2020++ dec-atom |= atom=A (raw-dec.core atom)
21+++ trip-text |= value=@t (raw-trip.core value)
22+++ tuba-text |= values (raw-tuba.core values)
2123
2224:: Transparent request data. Identity and path fields are writable and do not
2325:: prove a schema or watchability. A future executor must bind them to checked
jibb-dev/lib/jibb/prelude.jibb+169
@@ -350,3 +350,172 @@
350350 ?- xs
351351 ~ 0
352352 [item rest] (add 1 (lent rest))
353+
354+++ lth |= args=[A A]
355+ ?- args
356+ [x y] (gth y x)
357+
358+++ gte |= args=[A A]
359+ ?- args
360+ [x y] (not (gth y x))
361+
362+++ lte |= args=[A A]
363+ ?- args
364+ [x y] (not (gth x y))
365+
366+++ zing |= xss=(list (list A))
367+ ^- (list A)
368+ ?- xss
369+ ~ ~
370+ [xs rest] (weld xs (zing rest))
371+
372+++ lead |= first=A |= second=B [first second]
373+++ late |= second=B |= first=A [first second]
374+
375+++ succ |= x=A (add x 1)
376+
377+++ trip |= value=@t (trip-text.internal value)
378+++ tuba |= values=(list @tD) (tuba-text.internal values)
379+
380+:: UI values are source-level descriptions only. Nested element payloads are
381+:: erased in the nonrecursive union; the public constructors below retain the
382+:: typed composition boundaries. Raw-constructor encapsulation, rendering and
383+:: execution are not established by this slice.
384++$ length
385+ [%chars n=@ud]
386+ [%fill n=@ud]
387+ %shrink
388+
389++$ align
390+ %start
391+ %center
392+ %end
393+
394++$ role
395+ %body
396+ %caption
397+ %label
398+
399++$ tone
400+ %normal
401+ %muted
402+ %accent
403+ %danger
404+
405++$ attr
406+ [%pad %s0]
407+ [%pad %s1]
408+ [%pad %s2]
409+ [%pad %s3]
410+ [%gap %s0]
411+ [%gap %s1]
412+ [%gap %s2]
413+ [%gap %s3]
414+ [%width width=length]
415+ [%align align=align]
416+ [%role role=role]
417+ [%tone tone=tone]
418+
419++$ element |$ [M]
420+ [%row attrs=(list attr) kids=*]
421+ [%column attrs=(list attr) kids=*]
422+ [%wrap attrs=(list attr) kids=*]
423+ [%stack attrs=(list attr) kids=*]
424+ [%el attrs=(list attr) kid=*]
425+ [%para kids=*]
426+ [%text words=@t]
427+ [%heading level=@ud words=@t]
428+ [%each items=*]
429+ [%table columns=* rows=*]
430+ [%image source=qath description=@t]
431+ [%image-unsafe source=[url=@t width=@ud height=@ud] description=@t]
432+ [%link target=qath label=@t]
433+ [%link-unsafe target=@t label=@t]
434+ [%button label=@t message=M]
435+ [%toggle on=? label=@t message=M]
436+ [%field label=@t value=@t reply=$-(@t M)]
437+ [%form message=M kids=*]
438+ [%island payload=*]
439+
440+++ row |= [attrs=(list attr) kids=(list (element M))]
441+ ^- (element M) [%row attrs kids]
442+
443+++ column |= [attrs=(list attr) kids=(list (element M))]
444+ ^- (element M) [%column attrs kids]
445+
446+++ wrap |= [attrs=(list attr) kids=(list (element M))]
447+ ^- (element M) [%wrap attrs kids]
448+
449+++ stack |= [attrs=(list attr) kids=(list (element M))]
450+ ^- (element M) [%stack attrs kids]
451+
452+++ el |= [attrs=(list attr) kid=(element M)]
453+ ^- (element M) [%el attrs kid]
454+
455+++ para |= kids=(list (element M))
456+ ^- (element M) [%para kids]
457+
458+++ text |= words=@t
459+ ^- (element M) [%text words]
460+
461+++ heading |= [level=@ud words=@t]
462+ ^- (element M) [%heading level words]
463+
464+++ each |= items=(list [key=K el=(element M)])
465+ ^- (element M) [%each items]
466+
467+++ table |= [columns=(list [header=@t width=length align=align]) rows=(list [key=K cells=(list (element M))])]
468+ ^- (element M) [%table columns rows]
469+
470+++ image |= [source=qath description=@t]
471+ ^- (element M) [%image source description]
472+
473+++ image-unsafe |= [source=[url=@t width=@ud height=@ud] description=@t]
474+ ^- (element M) [%image-unsafe source description]
475+
476+++ link |= [target=qath label=@t]
477+ ^- (element M) [%link target label]
478+
479+++ link-unsafe |= [target=@t label=@t]
480+ ^- (element M) [%link-unsafe target label]
481+
482+++ button |= [label=@t message=M]
483+ ^- (element M) [%button label message]
484+
485+++ toggle |= [on=? label=@t message=M]
486+ ^- (element M) [%toggle on label message]
487+
488+++ field |= [label=@t value=@t reply=$-(@t M)]
489+ ^- (element M) [%field label value reply]
490+
491+++ form |= [message=M kids=(list (element M))]
492+ ^- (element M) [%form message kids]
493+
494++$ theme
495+ [ space=[s1=@t s2=@t s3=@t]
496+ tones=[normal=@t background=@t accent=@t danger=@t muted=@t]
497+ wide=@t
498+ lang=@t
499+ zone=@t
500+ font=(unit qath)
501+ dark=(unit [tones=[normal=@t background=@t accent=@t danger=@t muted=@t]])
502+
503++$ program |$ [D X M]
504+ [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
505+
506+++ program |= [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
507+ ^- (program D X M) [init update view subs]
508+
509+++ island |= [p=(program D X M) data=D]
510+ ^- (element !!) [%island [p data]]
511+
512++$ page |$ [R D]
513+ [load=$-(R (ask D)) view=$-(D (element !!))]
514+
515+++ page |= [load=$-(R (ask D)) view=$-(D (element !!))]
516+ ^- (page R D) [load view]
517+
518++$ store |$ [S] [init=S update=*]
519+
520+++ store |= [init=S update=$-([A S] S)]
521+ ^- (store S) [init update]
my-app/ui/theme.jibb+1−1
@@ -5,4 +5,4 @@
55 lang="en"
66 zone="UTC"
77 font=`%/static/fonts/inter.woff2
8− dark=[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
8+ dark=`[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
tests/golden/doc-overview-02-theme/source.jibb+1−1
@@ -5,4 +5,4 @@
55 lang="en"
66 zone="UTC"
77 font=`%/static/fonts/inter.woff2
8− dark=[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
8+ dark=`[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
tests/golden/doc-overview-02-theme/tokens.txt+24−23
@@ -62,27 +62,28 @@
62628:5 NEWLINE
63638:5 name dark
64648:9 tight glyph =
65−8:10 tight glyph [
66−8:11 tight name tones
67−8:16 tight glyph =
68−8:17 tight glyph [
69−8:18 tight name normal
70−8:24 tight glyph =
71−8:25 tight str "#eee"
72−8:32 name background
73−8:42 tight glyph =
74−8:43 tight str "#111"
75−8:50 name accent
76−8:56 tight glyph =
77−8:57 tight str "#4c9"
78−8:64 name danger
79−8:70 tight glyph =
80−8:71 tight str "#f28b82"
81−8:81 name muted
82−8:86 tight glyph =
83−8:87 tight str "#aaa"
84−8:93 tight glyph ]
65+8:10 tight glyph `
66+8:11 tight glyph [
67+8:12 tight name tones
68+8:17 tight glyph =
69+8:18 tight glyph [
70+8:19 tight name normal
71+8:25 tight glyph =
72+8:26 tight str "#eee"
73+8:33 name background
74+8:43 tight glyph =
75+8:44 tight str "#111"
76+8:51 name accent
77+8:57 tight glyph =
78+8:58 tight str "#4c9"
79+8:65 name danger
80+8:71 tight glyph =
81+8:72 tight str "#f28b82"
82+8:82 name muted
83+8:87 tight glyph =
84+8:88 tight str "#aaa"
85858:94 tight glyph ]
86−8:95 DEDENT
87−8:95 DEDENT
88−8:95 NEWLINE
86+8:95 tight glyph ]
87+8:96 DEDENT
88+8:96 DEDENT
89+8:96 NEWLINE
tests/golden/doc-overview-02-theme/tree.txt+9−8
@@ -22,11 +22,12 @@
2222 (face 7:5 font
2323 (unit 7:10 (qath 7:11 static fonts inter.woff2)))
2424 (face 8:5 dark
25− (tuple 8:10
26− (face 8:11 tones
27− (tuple 8:17
28− (face 8:18 normal (str 8:25 "#eee"))
29− (face 8:32 background (str 8:43 "#111"))
30− (face 8:50 accent (str 8:57 "#4c9"))
31− (face 8:64 danger (str 8:71 "#f28b82"))
32− (face 8:81 muted (str 8:87 "#aaa")))))))))))
25+ (unit 8:10
26+ (tuple 8:11
27+ (face 8:12 tones
28+ (tuple 8:18
29+ (face 8:19 normal (str 8:26 "#eee"))
30+ (face 8:33 background (str 8:44 "#111"))
31+ (face 8:51 accent (str 8:58 "#4c9"))
32+ (face 8:65 danger (str 8:72 "#f28b82"))
33+ (face 8:82 muted (str 8:88 "#aaa"))))))))))))
tests/golden/module-import-cycle/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= a /ui/a
2−++ text (identity.a "hi")
2+++ text-value (identity.a "hi")
tests/golden/module-import-cycle/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:11 tight knot a
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.a
12−2:21 str "hi"
13−2:25 tight glyph )
14−2:26 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.a
12+2:27 str "hi"
13+2:31 tight glyph )
14+2:32 NEWLINE
tests/golden/module-import-cycle/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 a /ui/a)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.a) (str 2:27 "hi")))))
tests/golden/module-import-identity/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= lib /ui/lib
2−++ text (identity.lib "hi")
2+++ text-value (identity.lib "hi")
33++ ship (identity.lib ~zod)
tests/golden/module-import-identity/tokens.txt+5−5
@@ -6,11 +6,11 @@
661:13 tight knot lib
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.lib
12−2:23 str "hi"
13−2:27 tight glyph )
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.lib
12+2:29 str "hi"
13+2:33 tight glyph )
14143:1 NEWLINE
15153:1 glyph ++
16163:4 name ship
tests/golden/module-import-identity/tree.txt+3−3
@@ -1,8 +1,8 @@
11(module
22 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.lib) (str 2:23 "hi"))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.lib) (str 2:29 "hi"))))
66 (value 3:1 ship
77 (group 3:9
88 (call 3:10 (wing 3:10 identity.lib) (lit 3:23 ~zod)))))
tests/golden/module-import-identity/types.txt+1−1
@@ -1,3 +1,3 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
33++ ship: @p
tests/golden/module-import-transitive/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= a /ui/a
2−++ text (identity.a "hi")
2+++ text-value (identity.a "hi")
tests/golden/module-import-transitive/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:11 tight knot a
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.a
12−2:21 str "hi"
13−2:25 tight glyph )
14−2:26 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.a
12+2:27 str "hi"
13+2:31 tight glyph )
14+2:32 NEWLINE
tests/golden/module-import-transitive/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 a /ui/a)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.a) (str 2:27 "hi")))))
tests/golden/module-import-transitive/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/module-import-unused-invalid/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= good /ui/good
2−++ text (identity.good "hi")
2+++ text-value (identity.good "hi")
tests/golden/module-import-unused-invalid/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:14 tight knot good
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.good
12−2:24 str "hi"
13−2:28 tight glyph )
14−2:29 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.good
12+2:30 str "hi"
13+2:34 tight glyph )
14+2:35 NEWLINE
tests/golden/module-import-unused-invalid/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 good /ui/good)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.good) (str 2:24 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.good) (str 2:30 "hi")))))
tests/golden/module-import-unused-invalid/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/types-arithmetic-module/source.jibb+1−1
@@ -1,7 +1,7 @@
11/= math /ui/math
22++ decimal ^- @ud (sum.math 1 2)
33++ hex ^- @ux (sum.math 0x1 0x2)
4−++ text ^- @t (alias.math "a" "b")
4+++ text-value ^- @t (alias.math "a" "b")
55++ ship ^- @p (down.math ~zod)
66++ reject-bool (sum.math %.y %.n)
77++ reject-down (down.math %.y)
tests/golden/types-arithmetic-module/tokens.txt+8−8
@@ -26,14 +26,14 @@
26263:32 tight glyph )
27274:1 NEWLINE
28284:1 glyph ++
29−4:4 name text
30−4:9 glyph ^-
31−4:12 aura @t
32−4:15 glyph (
33−4:16 tight wing alias.math
34−4:27 str "a"
35−4:31 str "b"
36−4:34 tight glyph )
29+4:4 name text-value
30+4:15 glyph ^-
31+4:18 aura @t
32+4:21 glyph (
33+4:22 tight wing alias.math
34+4:33 str "a"
35+4:37 str "b"
36+4:40 tight glyph )
37375:1 NEWLINE
38385:1 glyph ++
39395:4 name ship
tests/golden/types-arithmetic-module/tree.txt+5−5
@@ -10,11 +10,11 @@
1010 (aura 3:11 @ux)
1111 (group 3:15
1212 (call 3:16 (wing 3:16 sum.math) (lit 3:25 0x1) (lit 3:29 0x2)))))
13− (value 4:1 text
14− (cast 4:9
15− (aura 4:12 @t)
16− (group 4:15
17− (call 4:16 (wing 4:16 alias.math) (str 4:27 "a") (str 4:31 "b")))))
13+ (value 4:1 text-value
14+ (cast 4:15
15+ (aura 4:18 @t)
16+ (group 4:21
17+ (call 4:22 (wing 4:22 alias.math) (str 4:33 "a") (str 4:37 "b")))))
1818 (value 5:1 ship
1919 (cast 5:9
2020 (aura 5:12 @p)
tests/golden/types-arithmetic-module/types.txt+1−1
@@ -1,7 +1,7 @@
11partial inference; module not checked
22++ decimal: @ud
33++ hex: @ux
4−++ text: @t
4+++ text-value: @t
55++ ship: @p
66++ reject-bool: call's sample and argument types do not unify
77/tests/golden/types-arithmetic-module/source.jibb:6:17: called gate has type $-([a=A b=A] A) where A is an atom other than ?
tests/golden/types-cell-branch-context/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Branching and Molds — branch arms share the expected result type; unresolved tags need context; written record faces remain part of values.
2+tests: Closed cell result context flows into bounded loobean branches. The checker preserves previously inferred cases and faces, leaves wrong or inconsistent fields, unresolved tags, and open generic context unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-cell-branch-context/modules.txtnew file+1
@@ -0,0 +1 @@
1+# Use the actual source-backed prelude.
tests/golden/types-cell-branch-context/source.jibbnew file+37
@@ -0,0 +1,37 @@
1+++ choose |= flag=?
2+ ^- [@t (unit @t)] ?- flag
3+ %.y ["yes" ~]
4+ %.n ["no" ~]
5+++ bad |= flag=?
6+ ^- [@t (unit @t)] ?- flag
7+ %.y ["yes" ~]
8+ %.n [~zod ~]
9+++ pending |= flag=?
10+ ^- [@t (unit @t)] ?- flag
11+ %.y ["yes" ~]
12+ %.n [%waiting ~]
13+++ already |= flag=?
14+ ^- [@t @t] ?- flag
15+ %.y ["yes" "a"]
16+ %.n ["no" "b"]
17++$ rec [name=@t place=(unit @t)]
18+++ named |= flag=?
19+ ^- rec ?- flag
20+ %.y [name="yes" place=~]
21+ %.n [name="no" place=~]
22+++ wrong |= flag=?
23+ ^- rec ?- flag
24+ %.y [name="yes" place=~]
25+ %.n [other="no" place=~]
26+++ different |= flag=?
27+ ^- rec ?- flag
28+ %.y [name="yes" place=~]
29+ %.n ["no" ~]
30+++ open |= [flag=? value=A]
31+ ^- [A (unit A)] ?- flag
32+ %.y [value ~]
33+ %.n [value ~]
34+++ waiting |= flag=?
35+ ^- rec ?- flag
36+ %.y [name="yes" place=~]
37+ %.n [name=%waiting place=~]
tests/golden/types-cell-branch-context/tokens.txtnew file+308
@@ -0,0 +1,308 @@
1+1:1 glyph ++
2+1:4 name choose
3+1:11 glyph |=
4+1:14 name flag
5+1:18 tight glyph =
6+1:19 tight glyph ?
7+2:3 INDENT
8+2:3 glyph ^-
9+2:6 glyph [
10+2:7 tight aura @t
11+2:10 glyph (
12+2:11 tight name unit
13+2:16 aura @t
14+2:18 tight glyph )
15+2:19 tight glyph ]
16+2:21 glyph ?-
17+2:24 name flag
18+3:5 INDENT
19+3:5 lit %.y
20+3:9 glyph [
21+3:10 tight str "yes"
22+3:16 lit ~
23+3:17 tight glyph ]
24+4:5 NEWLINE
25+4:5 lit %.n
26+4:9 glyph [
27+4:10 tight str "no"
28+4:15 lit ~
29+4:16 tight glyph ]
30+5:1 DEDENT
31+5:1 DEDENT
32+5:1 NEWLINE
33+5:1 glyph ++
34+5:4 name bad
35+5:8 glyph |=
36+5:11 name flag
37+5:15 tight glyph =
38+5:16 tight glyph ?
39+6:3 INDENT
40+6:3 glyph ^-
41+6:6 glyph [
42+6:7 tight aura @t
43+6:10 glyph (
44+6:11 tight name unit
45+6:16 aura @t
46+6:18 tight glyph )
47+6:19 tight glyph ]
48+6:21 glyph ?-
49+6:24 name flag
50+7:5 INDENT
51+7:5 lit %.y
52+7:9 glyph [
53+7:10 tight str "yes"
54+7:16 lit ~
55+7:17 tight glyph ]
56+8:5 NEWLINE
57+8:5 lit %.n
58+8:9 glyph [
59+8:10 tight lit ~zod
60+8:15 lit ~
61+8:16 tight glyph ]
62+9:1 DEDENT
63+9:1 DEDENT
64+9:1 NEWLINE
65+9:1 glyph ++
66+9:4 name pending
67+9:12 glyph |=
68+9:15 name flag
69+9:19 tight glyph =
70+9:20 tight glyph ?
71+10:3 INDENT
72+10:3 glyph ^-
73+10:6 glyph [
74+10:7 tight aura @t
75+10:10 glyph (
76+10:11 tight name unit
77+10:16 aura @t
78+10:18 tight glyph )
79+10:19 tight glyph ]
80+10:21 glyph ?-
81+10:24 name flag
82+11:5 INDENT
83+11:5 lit %.y
84+11:9 glyph [
85+11:10 tight str "yes"
86+11:16 lit ~
87+11:17 tight glyph ]
88+12:5 NEWLINE
89+12:5 lit %.n
90+12:9 glyph [
91+12:10 tight lit %waiting
92+12:19 lit ~
93+12:20 tight glyph ]
94+13:1 DEDENT
95+13:1 DEDENT
96+13:1 NEWLINE
97+13:1 glyph ++
98+13:4 name already
99+13:12 glyph |=
100+13:15 name flag
101+13:19 tight glyph =
102+13:20 tight glyph ?
103+14:3 INDENT
104+14:3 glyph ^-
105+14:6 glyph [
106+14:7 tight aura @t
107+14:10 aura @t
108+14:12 tight glyph ]
109+14:14 glyph ?-
110+14:17 name flag
111+15:5 INDENT
112+15:5 lit %.y
113+15:9 glyph [
114+15:10 tight str "yes"
115+15:16 str "a"
116+15:19 tight glyph ]
117+16:5 NEWLINE
118+16:5 lit %.n
119+16:9 glyph [
120+16:10 tight str "no"
121+16:15 str "b"
122+16:18 tight glyph ]
123+17:1 DEDENT
124+17:1 DEDENT
125+17:1 NEWLINE
126+17:1 glyph +$
127+17:4 name rec
128+17:8 glyph [
129+17:9 tight name name
130+17:13 tight glyph =
131+17:14 tight aura @t
132+17:17 name place
133+17:22 tight glyph =
134+17:23 tight glyph (
135+17:24 tight name unit
136+17:29 aura @t
137+17:31 tight glyph )
138+17:32 tight glyph ]
139+18:1 NEWLINE
140+18:1 glyph ++
141+18:4 name named
142+18:10 glyph |=
143+18:13 name flag
144+18:17 tight glyph =
145+18:18 tight glyph ?
146+19:3 INDENT
147+19:3 glyph ^-
148+19:6 name rec
149+19:10 glyph ?-
150+19:13 name flag
151+20:5 INDENT
152+20:5 lit %.y
153+20:9 glyph [
154+20:10 tight name name
155+20:14 tight glyph =
156+20:15 tight str "yes"
157+20:21 name place
158+20:26 tight glyph =
159+20:27 tight lit ~
160+20:28 tight glyph ]
161+21:5 NEWLINE
162+21:5 lit %.n
163+21:9 glyph [
164+21:10 tight name name
165+21:14 tight glyph =
166+21:15 tight str "no"
167+21:20 name place
168+21:25 tight glyph =
169+21:26 tight lit ~
170+21:27 tight glyph ]
171+22:1 DEDENT
172+22:1 DEDENT
173+22:1 NEWLINE
174+22:1 glyph ++
175+22:4 name wrong
176+22:10 glyph |=
177+22:13 name flag
178+22:17 tight glyph =
179+22:18 tight glyph ?
180+23:3 INDENT
181+23:3 glyph ^-
182+23:6 name rec
183+23:10 glyph ?-
184+23:13 name flag
185+24:5 INDENT
186+24:5 lit %.y
187+24:9 glyph [
188+24:10 tight name name
189+24:14 tight glyph =
190+24:15 tight str "yes"
191+24:21 name place
192+24:26 tight glyph =
193+24:27 tight lit ~
194+24:28 tight glyph ]
195+25:5 NEWLINE
196+25:5 lit %.n
197+25:9 glyph [
198+25:10 tight name other
199+25:15 tight glyph =
200+25:16 tight str "no"
201+25:21 name place
202+25:26 tight glyph =
203+25:27 tight lit ~
204+25:28 tight glyph ]
205+26:1 DEDENT
206+26:1 DEDENT
207+26:1 NEWLINE
208+26:1 glyph ++
209+26:4 name different
210+26:14 glyph |=
211+26:17 name flag
212+26:21 tight glyph =
213+26:22 tight glyph ?
214+27:3 INDENT
215+27:3 glyph ^-
216+27:6 name rec
217+27:10 glyph ?-
218+27:13 name flag
219+28:5 INDENT
220+28:5 lit %.y
221+28:9 glyph [
222+28:10 tight name name
223+28:14 tight glyph =
224+28:15 tight str "yes"
225+28:21 name place
226+28:26 tight glyph =
227+28:27 tight lit ~
228+28:28 tight glyph ]
229+29:5 NEWLINE
230+29:5 lit %.n
231+29:9 glyph [
232+29:10 tight str "no"
233+29:15 lit ~
234+29:16 tight glyph ]
235+30:1 DEDENT
236+30:1 DEDENT
237+30:1 NEWLINE
238+30:1 glyph ++
239+30:4 name open
240+30:9 glyph |=
241+30:12 glyph [
242+30:13 tight name flag
243+30:17 tight glyph =
244+30:18 tight glyph ?
245+30:20 name value
246+30:25 tight glyph =
247+30:26 tight tvar A
248+30:27 tight glyph ]
249+31:3 INDENT
250+31:3 glyph ^-
251+31:6 glyph [
252+31:7 tight tvar A
253+31:9 glyph (
254+31:10 tight name unit
255+31:15 tvar A
256+31:16 tight glyph )
257+31:17 tight glyph ]
258+31:19 glyph ?-
259+31:22 name flag
260+32:5 INDENT
261+32:5 lit %.y
262+32:9 glyph [
263+32:10 tight name value
264+32:16 lit ~
265+32:17 tight glyph ]
266+33:5 NEWLINE
267+33:5 lit %.n
268+33:9 glyph [
269+33:10 tight name value
270+33:16 lit ~
271+33:17 tight glyph ]
272+34:1 DEDENT
273+34:1 DEDENT
274+34:1 NEWLINE
275+34:1 glyph ++
276+34:4 name waiting
277+34:12 glyph |=
278+34:15 name flag
279+34:19 tight glyph =
280+34:20 tight glyph ?
281+35:3 INDENT
282+35:3 glyph ^-
283+35:6 name rec
284+35:10 glyph ?-
285+35:13 name flag
286+36:5 INDENT
287+36:5 lit %.y
288+36:9 glyph [
289+36:10 tight name name
290+36:14 tight glyph =
291+36:15 tight str "yes"
292+36:21 name place
293+36:26 tight glyph =
294+36:27 tight lit ~
295+36:28 tight glyph ]
296+37:5 NEWLINE
297+37:5 lit %.n
298+37:9 glyph [
299+37:10 tight name name
300+37:14 tight glyph =
301+37:15 tight lit %waiting
302+37:24 name place
303+37:29 tight glyph =
304+37:30 tight lit ~
305+37:31 tight glyph ]
306+37:32 DEDENT
307+37:32 DEDENT
308+37:32 NEWLINE
tests/golden/types-cell-branch-context/tree.txtnew file+156
@@ -0,0 +1,156 @@
1+(module
2+ (value 1:1 choose
3+ (gate 1:11
4+ (face 1:14 flag (flag 1:19))
5+ (body 2:3
6+ (cast 2:3
7+ (cell 2:6
8+ (aura 2:7 @t)
9+ (apply 2:10 unit (aura 2:16 @t)))
10+ (branch 2:21
11+ (wing 2:24 flag)
12+ (arm 3:5
13+ (lit 3:5 %.y)
14+ (tuple 3:9 (str 3:10 "yes") (lit 3:16 ~)))
15+ (arm 4:5
16+ (lit 4:5 %.n)
17+ (tuple 4:9 (str 4:10 "no") (lit 4:15 ~))))))))
18+ (value 5:1 bad
19+ (gate 5:8
20+ (face 5:11 flag (flag 5:16))
21+ (body 6:3
22+ (cast 6:3
23+ (cell 6:6
24+ (aura 6:7 @t)
25+ (apply 6:10 unit (aura 6:16 @t)))
26+ (branch 6:21
27+ (wing 6:24 flag)
28+ (arm 7:5
29+ (lit 7:5 %.y)
30+ (tuple 7:9 (str 7:10 "yes") (lit 7:16 ~)))
31+ (arm 8:5
32+ (lit 8:5 %.n)
33+ (tuple 8:9 (lit 8:10 ~zod) (lit 8:15 ~))))))))
34+ (value 9:1 pending
35+ (gate 9:12
36+ (face 9:15 flag (flag 9:20))
37+ (body 10:3
38+ (cast 10:3
39+ (cell 10:6
40+ (aura 10:7 @t)
41+ (apply 10:10 unit (aura 10:16 @t)))
42+ (branch 10:21
43+ (wing 10:24 flag)
44+ (arm 11:5
45+ (lit 11:5 %.y)
46+ (tuple 11:9 (str 11:10 "yes") (lit 11:16 ~)))
47+ (arm 12:5
48+ (lit 12:5 %.n)
49+ (tuple 12:9 (lit 12:10 %waiting) (lit 12:19 ~))))))))
50+ (value 13:1 already
51+ (gate 13:12
52+ (face 13:15 flag (flag 13:20))
53+ (body 14:3
54+ (cast 14:3
55+ (cell 14:6 (aura 14:7 @t) (aura 14:10 @t))
56+ (branch 14:14
57+ (wing 14:17 flag)
58+ (arm 15:5
59+ (lit 15:5 %.y)
60+ (tuple 15:9 (str 15:10 "yes") (str 15:16 "a")))
61+ (arm 16:5
62+ (lit 16:5 %.n)
63+ (tuple 16:9 (str 16:10 "no") (str 16:15 "b"))))))))
64+ (mold 17:1 rec
65+ (cell 17:8
66+ (face 17:9 name (aura 17:14 @t))
67+ (face 17:17 place
68+ (apply 17:23 unit (aura 17:29 @t)))))
69+ (value 18:1 named
70+ (gate 18:10
71+ (face 18:13 flag (flag 18:18))
72+ (body 19:3
73+ (cast 19:3
74+ (ref 19:6 rec)
75+ (branch 19:10
76+ (wing 19:13 flag)
77+ (arm 20:5
78+ (lit 20:5 %.y)
79+ (tuple 20:9
80+ (face 20:10 name (str 20:15 "yes"))
81+ (face 20:21 place (lit 20:27 ~))))
82+ (arm 21:5
83+ (lit 21:5 %.n)
84+ (tuple 21:9
85+ (face 21:10 name (str 21:15 "no"))
86+ (face 21:20 place (lit 21:26 ~)))))))))
87+ (value 22:1 wrong
88+ (gate 22:10
89+ (face 22:13 flag (flag 22:18))
90+ (body 23:3
91+ (cast 23:3
92+ (ref 23:6 rec)
93+ (branch 23:10
94+ (wing 23:13 flag)
95+ (arm 24:5
96+ (lit 24:5 %.y)
97+ (tuple 24:9
98+ (face 24:10 name (str 24:15 "yes"))
99+ (face 24:21 place (lit 24:27 ~))))
100+ (arm 25:5
101+ (lit 25:5 %.n)
102+ (tuple 25:9
103+ (face 25:10 other (str 25:16 "no"))
104+ (face 25:21 place (lit 25:27 ~)))))))))
105+ (value 26:1 different
106+ (gate 26:14
107+ (face 26:17 flag (flag 26:22))
108+ (body 27:3
109+ (cast 27:3
110+ (ref 27:6 rec)
111+ (branch 27:10
112+ (wing 27:13 flag)
113+ (arm 28:5
114+ (lit 28:5 %.y)
115+ (tuple 28:9
116+ (face 28:10 name (str 28:15 "yes"))
117+ (face 28:21 place (lit 28:27 ~))))
118+ (arm 29:5
119+ (lit 29:5 %.n)
120+ (tuple 29:9 (str 29:10 "no") (lit 29:15 ~))))))))
121+ (value 30:1 open
122+ (gate 30:9
123+ (cell 30:12
124+ (face 30:13 flag (flag 30:18))
125+ (face 30:20 value (tvar 30:26 A)))
126+ (body 31:3
127+ (cast 31:3
128+ (cell 31:6
129+ (tvar 31:7 A)
130+ (apply 31:9 unit (tvar 31:15 A)))
131+ (branch 31:19
132+ (wing 31:22 flag)
133+ (arm 32:5
134+ (lit 32:5 %.y)
135+ (tuple 32:9 (wing 32:10 value) (lit 32:16 ~)))
136+ (arm 33:5
137+ (lit 33:5 %.n)
138+ (tuple 33:9 (wing 33:10 value) (lit 33:16 ~))))))))
139+ (value 34:1 waiting
140+ (gate 34:12
141+ (face 34:15 flag (flag 34:20))
142+ (body 35:3
143+ (cast 35:3
144+ (ref 35:6 rec)
145+ (branch 35:10
146+ (wing 35:13 flag)
147+ (arm 36:5
148+ (lit 36:5 %.y)
149+ (tuple 36:9
150+ (face 36:10 name (str 36:15 "yes"))
151+ (face 36:21 place (lit 36:27 ~))))
152+ (arm 37:5
153+ (lit 37:5 %.n)
154+ (tuple 37:9
155+ (face 37:10 name (lit 37:15 %waiting))
156+ (face 37:24 place (lit 37:30 ~))))))))))
tests/golden/types-cell-branch-context/types.txtnew file+11
@@ -0,0 +1,11 @@
1+partial inference; module not checked
2+++ choose: $-(? [@t (unit @t)])
3+++ bad: branch tag or union context is not supported by partial inference
4+++ pending: branch tag or union context is not supported by partial inference
5+++ already: $-(? [@t @t])
6++$ rec: not checked
7+++ named: $-(? [name=@t place=(unit @t)])
8+++ wrong: branch tag or union context is not supported by partial inference
9+++ different: branch tag or union context is not supported by partial inference
10+++ open: branch widening is not supported by partial inference
11+++ waiting: branch tag or union context is not supported by partial inference
tests/golden/types-cell-pattern-schemes/source.jibb+1−1
@@ -10,7 +10,7 @@
1010++ identity |= x
1111 ?- x
1212 [a b c] [a b c]
13−++ text (identity "hi" ~zod %.y)
13+++ text-value (identity "hi" ~zod %.y)
1414++ ship (identity ~zod "hi" %.n)
1515++ shared |= x=[A A A]
1616 ?- x
tests/golden/types-cell-pattern-schemes/tokens.txt+7−7
@@ -73,13 +73,13 @@
737313:1 DEDENT
747413:1 NEWLINE
757513:1 glyph ++
76−13:4 name text
77−13:9 glyph (
78−13:10 tight name identity
79−13:19 str "hi"
80−13:24 lit ~zod
81−13:29 lit %.y
82−13:32 tight glyph )
76+13:4 name text-value
77+13:15 glyph (
78+13:16 tight name identity
79+13:25 str "hi"
80+13:30 lit ~zod
81+13:35 lit %.y
82+13:38 tight glyph )
838314:1 NEWLINE
848414:1 glyph ++
858514:4 name ship
tests/golden/types-cell-pattern-schemes/tree.txt+3−3
@@ -31,9 +31,9 @@
3131 (arm 12:5
3232 (cell 12:5 (bind 12:6 a) (bind 12:8 b) (bind 12:10 c))
3333 (tuple 12:13 (wing 12:14 a) (wing 12:16 b) (wing 12:18 c)))))))
34− (value 13:1 text
35− (group 13:9
36− (call 13:10 (wing 13:10 identity) (str 13:19 "hi") (lit 13:24 ~zod) (lit 13:29 %.y))))
34+ (value 13:1 text-value
35+ (group 13:15
36+ (call 13:16 (wing 13:16 identity) (str 13:25 "hi") (lit 13:30 ~zod) (lit 13:35 %.y))))
3737 (value 14:1 ship
3838 (group 14:9
3939 (call 14:10 (wing 14:10 identity) (lit 14:19 ~zod) (str 14:24 "hi") (lit 14:29 %.n))))
tests/golden/types-cell-pattern-schemes/types.txt+1−1
@@ -3,7 +3,7 @@ partial inference; module not checked
33++ maybe-union: cell pattern subject is not supported by partial inference
44++ maybe-list: cell pattern subject is not supported by partial inference
55++ identity: $-([A [B C]] [A [B C]])
6−++ text: [@t [@p ?]]
6+++ text-value: [@t [@p ?]]
77++ ship: [@p [@t ?]]
88++ shared: $-([A [A A]] [A [A A]])
99++ wrong: call's sample and argument types do not unify
tests/golden/types-generic-result-context/source.jibb+9−9
@@ -10,15 +10,15 @@
1010+$ swap |$ [A B] (choice B A)
1111+$ repeated |$ [A] (choice A A)
1212+$ phantom |$ [A B] (choice A @p)
13−++ wrap |= x=A ^- (choice A @p) [%one x]
14−++ wrap-repeat |= x=A ^- (repeated A) [%one x]
15−++ use-msg ^- (choice msg @p) (wrap %idle)
16−++ use-alias ^- (swap @p msg) (wrap %idle)
17−++ use-repeated ^- (repeated msg) (wrap-repeat %idle)
18−++ use-distinct ^- (choice other @p) (wrap %idle)
13+++ wrap-value |= x=A ^- (choice A @p) [%one x]
14+++ wrap-value-repeat |= x=A ^- (repeated A) [%one x]
15+++ use-msg ^- (choice msg @p) (wrap-value %idle)
16+++ use-alias ^- (swap @p msg) (wrap-value %idle)
17+++ use-repeated ^- (repeated msg) (wrap-value-repeat %idle)
18+++ use-distinct ^- (choice other @p) (wrap-value %idle)
1919++ independent |= [m=msg n=other]
20− [(^- (choice msg @p) (wrap m)) (^- (choice other @p) (wrap n))]
20+ [(^- (choice msg @p) (wrap-value m)) (^- (choice other @p) (wrap-value n))]
2121++ pending
2222 ~& %orphan
23− ^- (choice msg @p) (wrap %idle)
24−++ wrong-case ^- (choice msg @p) (wrap %absent)
23+ ^- (choice msg @p) (wrap-value %idle)
24+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
tests/golden/types-generic-result-context/tokens.txt+65−65
@@ -76,37 +76,37 @@
767612:33 tight glyph )
777713:1 NEWLINE
787813:1 glyph ++
79−13:4 name wrap
80−13:9 glyph |=
81−13:12 name x
82−13:13 tight glyph =
83−13:14 tight tvar A
84−13:16 glyph ^-
85−13:19 glyph (
86−13:20 tight name choice
87−13:27 tvar A
88−13:29 aura @p
89−13:31 tight glyph )
90−13:33 glyph [
91−13:34 tight lit %one
92−13:39 name x
93−13:40 tight glyph ]
79+13:4 name wrap-value
80+13:15 glyph |=
81+13:18 name x
82+13:19 tight glyph =
83+13:20 tight tvar A
84+13:22 glyph ^-
85+13:25 glyph (
86+13:26 tight name choice
87+13:33 tvar A
88+13:35 aura @p
89+13:37 tight glyph )
90+13:39 glyph [
91+13:40 tight lit %one
92+13:45 name x
93+13:46 tight glyph ]
949414:1 NEWLINE
959514:1 glyph ++
96−14:4 name wrap-repeat
97−14:16 glyph |=
98−14:19 name x
99−14:20 tight glyph =
100−14:21 tight tvar A
101−14:23 glyph ^-
102−14:26 glyph (
103−14:27 tight name repeated
104−14:36 tvar A
105−14:37 tight glyph )
106−14:39 glyph [
107−14:40 tight lit %one
108−14:45 name x
109−14:46 tight glyph ]
96+14:4 name wrap-value-repeat
97+14:22 glyph |=
98+14:25 name x
99+14:26 tight glyph =
100+14:27 tight tvar A
101+14:29 glyph ^-
102+14:32 glyph (
103+14:33 tight name repeated
104+14:42 tvar A
105+14:43 tight glyph )
106+14:45 glyph [
107+14:46 tight lit %one
108+14:51 name x
109+14:52 tight glyph ]
11011015:1 NEWLINE
11111115:1 glyph ++
11211215:4 name use-msg
@@ -117,9 +117,9 @@
11711715:27 aura @p
11811815:29 tight glyph )
11911915:31 glyph (
120−15:32 tight name wrap
121−15:37 lit %idle
122−15:42 tight glyph )
120+15:32 tight name wrap-value
121+15:43 lit %idle
122+15:48 tight glyph )
12312316:1 NEWLINE
12412416:1 glyph ++
12512516:4 name use-alias
@@ -130,9 +130,9 @@
13013016:26 name msg
13113116:29 tight glyph )
13213216:31 glyph (
133−16:32 tight name wrap
134−16:37 lit %idle
135−16:42 tight glyph )
133+16:32 tight name wrap-value
134+16:43 lit %idle
135+16:48 tight glyph )
13613617:1 NEWLINE
13713717:1 glyph ++
13813817:4 name use-repeated
@@ -142,9 +142,9 @@
14214217:30 name msg
14314317:33 tight glyph )
14414417:35 glyph (
145−17:36 tight name wrap-repeat
146−17:48 lit %idle
147−17:53 tight glyph )
145+17:36 tight name wrap-value-repeat
146+17:54 lit %idle
147+17:59 tight glyph )
14814818:1 NEWLINE
14914918:1 glyph ++
15015018:4 name use-distinct
@@ -155,9 +155,9 @@
15515518:34 aura @p
15615618:36 tight glyph )
15715718:38 glyph (
158−18:39 tight name wrap
159−18:44 lit %idle
160−18:49 tight glyph )
158+18:39 tight name wrap-value
159+18:50 lit %idle
160+18:55 tight glyph )
16116119:1 NEWLINE
16216219:1 glyph ++
16316319:4 name independent
@@ -180,23 +180,23 @@
18018020:20 aura @p
18118120:22 tight glyph )
18218220:24 glyph (
183−20:25 tight name wrap
184−20:30 name m
185−20:31 tight glyph )
186−20:32 tight glyph )
187−20:34 glyph (
188−20:35 tight glyph ^-
189−20:38 glyph (
190−20:39 tight name choice
191−20:46 name other
192−20:52 aura @p
193−20:54 tight glyph )
194−20:56 glyph (
195−20:57 tight name wrap
196−20:62 name n
197−20:63 tight glyph )
198−20:64 tight glyph )
199−20:65 tight glyph ]
183+20:25 tight name wrap-value
184+20:36 name m
185+20:37 tight glyph )
186+20:38 tight glyph )
187+20:40 glyph (
188+20:41 tight glyph ^-
189+20:44 glyph (
190+20:45 tight name choice
191+20:52 name other
192+20:58 aura @p
193+20:60 tight glyph )
194+20:62 glyph (
195+20:63 tight name wrap-value
196+20:74 name n
197+20:75 tight glyph )
198+20:76 tight glyph )
199+20:77 tight glyph ]
20020021:1 DEDENT
20120121:1 NEWLINE
20220221:1 glyph ++
@@ -212,9 +212,9 @@
21221223:20 aura @p
21321323:22 tight glyph )
21421423:24 glyph (
215−23:25 tight name wrap
216−23:30 lit %idle
217−23:35 tight glyph )
215+23:25 tight name wrap-value
216+23:36 lit %idle
217+23:41 tight glyph )
21821824:1 DEDENT
21921924:1 DEDENT
22022024:1 NEWLINE
@@ -227,7 +227,7 @@
22722724:30 aura @p
22822824:32 tight glyph )
22922924:34 glyph (
230−24:35 tight name wrap
231−24:40 lit %absent
232−24:47 tight glyph )
233−24:48 NEWLINE
230+24:35 tight name wrap-value
231+24:46 lit %absent
232+24:53 tight glyph )
233+24:54 NEWLINE
tests/golden/types-generic-result-context/tree.txt+24−24
@@ -21,38 +21,38 @@
2121 (mold 12:1 phantom
2222 (generic 12:12 A B
2323 (apply 12:21 choice (tvar 12:29 A) (aura 12:31 @p))))
24− (value 13:1 wrap
25− (gate 13:9
26− (face 13:12 x (tvar 13:14 A))
27− (cast 13:16
28− (apply 13:19 choice (tvar 13:27 A) (aura 13:29 @p))
29− (tuple 13:33 (lit 13:34 %one) (wing 13:39 x)))))
30− (value 14:1 wrap-repeat
31− (gate 14:16
32− (face 14:19 x (tvar 14:21 A))
33− (cast 14:23
34− (apply 14:26 repeated (tvar 14:36 A))
35− (tuple 14:39 (lit 14:40 %one) (wing 14:45 x)))))
24+ (value 13:1 wrap-value
25+ (gate 13:15
26+ (face 13:18 x (tvar 13:20 A))
27+ (cast 13:22
28+ (apply 13:25 choice (tvar 13:33 A) (aura 13:35 @p))
29+ (tuple 13:39 (lit 13:40 %one) (wing 13:45 x)))))
30+ (value 14:1 wrap-value-repeat
31+ (gate 14:22
32+ (face 14:25 x (tvar 14:27 A))
33+ (cast 14:29
34+ (apply 14:32 repeated (tvar 14:42 A))
35+ (tuple 14:45 (lit 14:46 %one) (wing 14:51 x)))))
3636 (value 15:1 use-msg
3737 (cast 15:12
3838 (apply 15:15 choice (ref 15:23 msg) (aura 15:27 @p))
3939 (group 15:31
40− (call 15:32 (wing 15:32 wrap) (lit 15:37 %idle)))))
40+ (call 15:32 (wing 15:32 wrap-value) (lit 15:43 %idle)))))
4141 (value 16:1 use-alias
4242 (cast 16:14
4343 (apply 16:17 swap (aura 16:23 @p) (ref 16:26 msg))
4444 (group 16:31
45− (call 16:32 (wing 16:32 wrap) (lit 16:37 %idle)))))
45+ (call 16:32 (wing 16:32 wrap-value) (lit 16:43 %idle)))))
4646 (value 17:1 use-repeated
4747 (cast 17:17
4848 (apply 17:20 repeated (ref 17:30 msg))
4949 (group 17:35
50− (call 17:36 (wing 17:36 wrap-repeat) (lit 17:48 %idle)))))
50+ (call 17:36 (wing 17:36 wrap-value-repeat) (lit 17:54 %idle)))))
5151 (value 18:1 use-distinct
5252 (cast 18:17
5353 (apply 18:20 choice (ref 18:28 other) (aura 18:34 @p))
5454 (group 18:38
55− (call 18:39 (wing 18:39 wrap) (lit 18:44 %idle)))))
55+ (call 18:39 (wing 18:39 wrap-value) (lit 18:50 %idle)))))
5656 (value 19:1 independent
5757 (gate 19:16
5858 (cell 19:19
@@ -64,12 +64,12 @@
6464 (cast 20:5
6565 (apply 20:8 choice (ref 20:16 msg) (aura 20:20 @p))
6666 (group 20:24
67− (call 20:25 (wing 20:25 wrap) (wing 20:30 m)))))
68− (group 20:34
69− (cast 20:35
70− (apply 20:38 choice (ref 20:46 other) (aura 20:52 @p))
71− (group 20:56
72− (call 20:57 (wing 20:57 wrap) (wing 20:62 n)))))))))
67+ (call 20:25 (wing 20:25 wrap-value) (wing 20:36 m)))))
68+ (group 20:40
69+ (cast 20:41
70+ (apply 20:44 choice (ref 20:52 other) (aura 20:58 @p))
71+ (group 20:62
72+ (call 20:63 (wing 20:63 wrap-value) (wing 20:74 n)))))))))
7373 (value 21:1 pending
7474 (body 22:3
7575 (trace 22:3
@@ -78,9 +78,9 @@
7878 (cast 23:5
7979 (apply 23:8 choice (ref 23:16 msg) (aura 23:20 @p))
8080 (group 23:24
81− (call 23:25 (wing 23:25 wrap) (lit 23:30 %idle))))))))
81+ (call 23:25 (wing 23:25 wrap-value) (lit 23:36 %idle))))))))
8282 (value 24:1 wrong-case
8383 (cast 24:15
8484 (apply 24:18 choice (ref 24:26 msg) (aura 24:30 @p))
8585 (group 24:34
86− (call 24:35 (wing 24:35 wrap) (lit 24:40 %absent))))))
86+ (call 24:35 (wing 24:35 wrap-value) (lit 24:46 %absent))))))
tests/golden/types-generic-result-context/types.txt+6−6
@@ -5,8 +5,8 @@ partial inference; module not checked
55+$ swap: not checked
66+$ repeated: not checked
77+$ phantom: not checked
8−++ wrap: $-(A (choice A @p))
9−++ wrap-repeat: $-(A (choice A A))
8+++ wrap-value: $-(A (choice A @p))
9+++ wrap-value-repeat: $-(A (choice A A))
1010++ use-msg: (choice msg @p)
1111++ use-alias: (choice msg @p)
1212++ use-repeated: (choice msg msg)
@@ -15,8 +15,8 @@ partial inference; module not checked
1515++ pending: tag needs context in partial inference
1616++ wrong-case: msg has no case `%absent`
1717/tests/golden/types-generic-result-context/source.jibb:24:35: expected union
18−++ wrong-case ^- (choice msg @p) (wrap %absent)
18+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
1919 ^
20−/tests/golden/types-generic-result-context/source.jibb:24:40: tag
21−++ wrong-case ^- (choice msg @p) (wrap %absent)
22− ^
20+/tests/golden/types-generic-result-context/source.jibb:24:46: tag
21+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
22+ ^
tests/golden/types-generic-union-escaping/module-trees.txt+4−4
@@ -6,10 +6,10 @@
66/ui/mid.jibb
77(module
88 (jibb 1:1 base /ui/base)
9− (value 2:1 text
10− (cast 2:9
11− (apply 2:12 phantom.base (aura 2:26 @t))
12− (lit 2:30 %yes)))
9+ (value 2:1 text-value
10+ (cast 2:15
11+ (apply 2:18 phantom.base (aura 2:32 @t))
12+ (lit 2:36 %yes)))
1313 (value 3:1 ship
1414 (cast 3:9
1515 (apply 3:12 phantom.base (aura 3:26 @p))
tests/golden/types-generic-union-escaping/modules/ui/mid.jibb+1−1
@@ -1,3 +1,3 @@
11/= base /ui/base
2−++ text ^- (phantom.base @t) %yes
2+++ text-value ^- (phantom.base @t) %yes
33++ ship ^- (phantom.base @p) %yes
tests/golden/types-generic-union-escaping/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= mid /ui/mid
2−++ text-value text.mid
2+++ text-value text-value.mid
33++ ship-value ship.mid
tests/golden/types-generic-union-escaping/tokens.txt+1−1
@@ -7,7 +7,7 @@
772:1 NEWLINE
882:1 glyph ++
992:4 name text-value
10−2:15 wing text.mid
10+2:15 wing text-value.mid
11113:1 NEWLINE
12123:1 glyph ++
13133:4 name ship-value
tests/golden/types-generic-union-escaping/tree.txt+1−1
@@ -1,4 +1,4 @@
11(module
22 (jibb 1:1 mid /ui/mid)
3− (value 2:1 text-value (wing 2:15 text.mid))
3+ (value 2:1 text-value (wing 2:15 text-value.mid))
44 (value 3:1 ship-value (wing 3:15 ship.mid)))
tests/golden/types-list-patterns/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; "A name in a pattern always binds anew". Modules: no name may shadow an in-scope name.
2−tests: Both orders of an exhaustive list branch bind the head and tail with their respective types; unsupported subjects or patterns, conflicting binders, and unrelated unresolved tags fail closed.
2+tests: Both orders of an exhaustive list branch bind the head and tail with their respective types; unsupported subjects or patterns, conflicting binders, and unrelated unresolved tags fail closed; a nonempty arm of `(list !!)` is unreachable.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-list-patterns/types.txt+1−1
@@ -12,6 +12,6 @@ partial inference; module not checked
1212++ unresolved: list branch results need unsupported inference
1313++ duplicate-arm: branch is not supported by partial inference
1414++ unrelated: tag needs context in partial inference
15−++ empty-elements: sample mold is not supported by partial inference
15+++ empty-elements: list nonempty pattern is unreachable
1616+$ maybe: cases proven disjoint; mold not checked
1717++ unit-shape: unit branch pattern is not supported by partial inference
tests/golden/types-nested-shallow-preserve/source.jibb+15−15
@@ -1,25 +1,25 @@
1−+$ length
1++$ extent
22 [%fill n=@ud]
33 %shrink
4−+$ attr
5− [%width length]
4++$ attribute
5+ [%width extent]
66 [%gap @tas]
77++ number-id |= x=@ud x
8−++ plain ^- attr width+[%fill 1]
9−++ direct ^- attr [%width [%fill 1]]
10−++ list ^- (list attr) ~[width+[%fill 1]]
11−++ accept |= value=attr value
8+++ plain ^- attribute width+[%fill 1]
9+++ direct ^- attribute [%width [%fill 1]]
10+++ list ^- (list attribute) ~[width+[%fill 1]]
11+++ accept |= value=attribute value
1212++ call (accept width+[%fill 1])
13−++ simple-call ^- attr width+[%fill (number-id 1)]
14−++ grouped-call ^- attr width+[%fill ((number-id 1))]
15−++ cast-call ^- attr width+[%fill (^- @ud (number-id 1))]
16−++ nested-call ^- attr width+[%fill (number-id (number-id 1))]
17−++ bad-tag ^- attr width+[%missing 1]
18−++ bad-number ^- attr width+[%fill "bad"]
13+++ simple-call ^- attribute width+[%fill (number-id 1)]
14+++ grouped-call ^- attribute width+[%fill ((number-id 1))]
15+++ cast-call ^- attribute width+[%fill (^- @ud (number-id 1))]
16+++ nested-call ^- attribute width+[%fill (number-id (number-id 1))]
17+++ bad-tag ^- attribute width+[%missing 1]
18+++ bad-number ^- attribute width+[%fill "bad"]
1919++ pending
2020 ~& %unrelated
21− ^- attr width+[%fill (number-id 1)]
22−++ singleton ^- attr width+%shrink
21+ ^- attribute width+[%fill (number-id 1)]
22+++ singleton ^- attribute width+%shrink
2323+$ event
2424 [%got value=@t]
2525 %idle
tests/golden/types-nested-shallow-preserve/tokens.txt+107−107
@@ -1,5 +1,5 @@
111:1 glyph +$
2−1:4 name length
2+1:4 name extent
332:3 INDENT
442:3 glyph [
552:4 tight lit %fill
@@ -12,11 +12,11 @@
12124:1 DEDENT
13134:1 NEWLINE
14144:1 glyph +$
15−4:4 name attr
15+4:4 name attribute
16165:3 INDENT
17175:3 glyph [
18185:4 tight lit %width
19−5:11 name length
19+5:11 name extent
20205:17 tight glyph ]
21216:3 NEWLINE
22226:3 glyph [
@@ -36,49 +36,49 @@
36368:1 glyph ++
37378:4 name plain
38388:10 glyph ^-
39−8:13 name attr
40−8:18 name width
41−8:23 tight glyph +
42−8:24 tight glyph [
43−8:25 tight lit %fill
44−8:31 lit 1
45−8:32 tight glyph ]
39+8:13 name attribute
40+8:23 name width
41+8:28 tight glyph +
42+8:29 tight glyph [
43+8:30 tight lit %fill
44+8:36 lit 1
45+8:37 tight glyph ]
46469:1 NEWLINE
47479:1 glyph ++
48489:4 name direct
49499:11 glyph ^-
50−9:14 name attr
51−9:19 glyph [
52−9:20 tight lit %width
53−9:27 glyph [
54−9:28 tight lit %fill
55−9:34 lit 1
56−9:35 tight glyph ]
57−9:36 tight glyph ]
50+9:14 name attribute
51+9:24 glyph [
52+9:25 tight lit %width
53+9:32 glyph [
54+9:33 tight lit %fill
55+9:39 lit 1
56+9:40 tight glyph ]
57+9:41 tight glyph ]
585810:1 NEWLINE
595910:1 glyph ++
606010:4 name list
616110:9 glyph ^-
626210:12 glyph (
636310:13 tight name list
64−10:18 name attr
65−10:22 tight glyph )
66−10:24 glyph ~[
67−10:26 tight name width
68−10:31 tight glyph +
69−10:32 tight glyph [
70−10:33 tight lit %fill
71−10:39 lit 1
72−10:40 tight glyph ]
73−10:41 tight glyph ]
64+10:18 name attribute
65+10:27 tight glyph )
66+10:29 glyph ~[
67+10:31 tight name width
68+10:36 tight glyph +
69+10:37 tight glyph [
70+10:38 tight lit %fill
71+10:44 lit 1
72+10:45 tight glyph ]
73+10:46 tight glyph ]
747411:1 NEWLINE
757511:1 glyph ++
767611:4 name accept
777711:11 glyph |=
787811:14 name value
797911:19 tight glyph =
80−11:20 tight name attr
81−11:25 name value
80+11:20 tight name attribute
81+11:30 name value
828212:1 NEWLINE
838312:1 glyph ++
848412:4 name call
@@ -95,89 +95,89 @@
959513:1 glyph ++
969613:4 name simple-call
979713:16 glyph ^-
98−13:19 name attr
99−13:24 name width
100−13:29 tight glyph +
101−13:30 tight glyph [
102−13:31 tight lit %fill
103−13:37 glyph (
104−13:38 tight name number-id
105−13:48 lit 1
106−13:49 tight glyph )
107−13:50 tight glyph ]
98+13:19 name attribute
99+13:29 name width
100+13:34 tight glyph +
101+13:35 tight glyph [
102+13:36 tight lit %fill
103+13:42 glyph (
104+13:43 tight name number-id
105+13:53 lit 1
106+13:54 tight glyph )
107+13:55 tight glyph ]
10810814:1 NEWLINE
10910914:1 glyph ++
11011014:4 name grouped-call
11111114:17 glyph ^-
112−14:20 name attr
113−14:25 name width
114−14:30 tight glyph +
115−14:31 tight glyph [
116−14:32 tight lit %fill
117−14:38 glyph (
118−14:39 tight glyph (
119−14:40 tight name number-id
120−14:50 lit 1
121−14:51 tight glyph )
122−14:52 tight glyph )
123−14:53 tight glyph ]
112+14:20 name attribute
113+14:30 name width
114+14:35 tight glyph +
115+14:36 tight glyph [
116+14:37 tight lit %fill
117+14:43 glyph (
118+14:44 tight glyph (
119+14:45 tight name number-id
120+14:55 lit 1
121+14:56 tight glyph )
122+14:57 tight glyph )
123+14:58 tight glyph ]
12412415:1 NEWLINE
12512515:1 glyph ++
12612615:4 name cast-call
12712715:14 glyph ^-
128−15:17 name attr
129−15:22 name width
130−15:27 tight glyph +
131−15:28 tight glyph [
132−15:29 tight lit %fill
133−15:35 glyph (
134−15:36 tight glyph ^-
135−15:39 aura @ud
136−15:43 glyph (
137−15:44 tight name number-id
138−15:54 lit 1
139−15:55 tight glyph )
140−15:56 tight glyph )
141−15:57 tight glyph ]
128+15:17 name attribute
129+15:27 name width
130+15:32 tight glyph +
131+15:33 tight glyph [
132+15:34 tight lit %fill
133+15:40 glyph (
134+15:41 tight glyph ^-
135+15:44 aura @ud
136+15:48 glyph (
137+15:49 tight name number-id
138+15:59 lit 1
139+15:60 tight glyph )
140+15:61 tight glyph )
141+15:62 tight glyph ]
14214216:1 NEWLINE
14314316:1 glyph ++
14414416:4 name nested-call
14514516:16 glyph ^-
146−16:19 name attr
147−16:24 name width
148−16:29 tight glyph +
149−16:30 tight glyph [
150−16:31 tight lit %fill
151−16:37 glyph (
152−16:38 tight name number-id
153−16:48 glyph (
154−16:49 tight name number-id
155−16:59 lit 1
156−16:60 tight glyph )
157−16:61 tight glyph )
158−16:62 tight glyph ]
146+16:19 name attribute
147+16:29 name width
148+16:34 tight glyph +
149+16:35 tight glyph [
150+16:36 tight lit %fill
151+16:42 glyph (
152+16:43 tight name number-id
153+16:53 glyph (
154+16:54 tight name number-id
155+16:64 lit 1
156+16:65 tight glyph )
157+16:66 tight glyph )
158+16:67 tight glyph ]
15915917:1 NEWLINE
16016017:1 glyph ++
16116117:4 name bad-tag
16216217:12 glyph ^-
163−17:15 name attr
164−17:20 name width
165−17:25 tight glyph +
166−17:26 tight glyph [
167−17:27 tight lit %missing
168−17:36 lit 1
169−17:37 tight glyph ]
163+17:15 name attribute
164+17:25 name width
165+17:30 tight glyph +
166+17:31 tight glyph [
167+17:32 tight lit %missing
168+17:41 lit 1
169+17:42 tight glyph ]
17017018:1 NEWLINE
17117118:1 glyph ++
17217218:4 name bad-number
17317318:15 glyph ^-
174−18:18 name attr
175−18:23 name width
176−18:28 tight glyph +
177−18:29 tight glyph [
178−18:30 tight lit %fill
179−18:36 str "bad"
180−18:41 tight glyph ]
174+18:18 name attribute
175+18:28 name width
176+18:33 tight glyph +
177+18:34 tight glyph [
178+18:35 tight lit %fill
179+18:41 str "bad"
180+18:46 tight glyph ]
18118119:1 NEWLINE
18218219:1 glyph ++
18318319:4 name pending
@@ -186,26 +186,26 @@
18618620:6 lit %unrelated
18718721:5 INDENT
18818821:5 glyph ^-
189−21:8 name attr
190−21:13 name width
191−21:18 tight glyph +
192−21:19 tight glyph [
193−21:20 tight lit %fill
194−21:26 glyph (
195−21:27 tight name number-id
196−21:37 lit 1
197−21:38 tight glyph )
198−21:39 tight glyph ]
189+21:8 name attribute
190+21:18 name width
191+21:23 tight glyph +
192+21:24 tight glyph [
193+21:25 tight lit %fill
194+21:31 glyph (
195+21:32 tight name number-id
196+21:42 lit 1
197+21:43 tight glyph )
198+21:44 tight glyph ]
19919922:1 DEDENT
20020022:1 DEDENT
20120122:1 NEWLINE
20220222:1 glyph ++
20320322:4 name singleton
20420422:14 glyph ^-
205−22:17 name attr
206−22:22 name width
207−22:27 tight glyph +
208−22:28 tight lit %shrink
205+22:17 name attribute
206+22:27 name width
207+22:32 tight glyph +
208+22:33 tight lit %shrink
20920923:1 NEWLINE
21021023:1 glyph +$
21121123:4 name event
tests/golden/types-nested-shallow-preserve/tree.txt+61−61
@@ -1,13 +1,13 @@
11(module
2− (mold 1:1 length
2+ (mold 1:1 extent
33 (union 2:3
44 (cell 2:3
55 (const 2:4 %fill)
66 (face 2:10 n (aura 2:12 @ud)))
77 (const 3:3 %shrink)))
8− (mold 4:1 attr
8+ (mold 4:1 attribute
99 (union 5:3
10− (cell 5:3 (const 5:4 %width) (ref 5:11 length))
10+ (cell 5:3 (const 5:4 %width) (ref 5:11 extent))
1111 (cell 6:3 (const 6:4 %gap) (aura 6:9 @tas))))
1212 (value 7:1 number-id
1313 (gate 7:14
@@ -15,25 +15,25 @@
1515 (wing 7:23 x)))
1616 (value 8:1 plain
1717 (cast 8:10
18− (ref 8:13 attr)
19− (pair 8:18 width
20− (tuple 8:24 (lit 8:25 %fill) (lit 8:31 1)))))
18+ (ref 8:13 attribute)
19+ (pair 8:23 width
20+ (tuple 8:29 (lit 8:30 %fill) (lit 8:36 1)))))
2121 (value 9:1 direct
2222 (cast 9:11
23− (ref 9:14 attr)
24− (tuple 9:19
25− (lit 9:20 %width)
26− (tuple 9:27 (lit 9:28 %fill) (lit 9:34 1)))))
23+ (ref 9:14 attribute)
24+ (tuple 9:24
25+ (lit 9:25 %width)
26+ (tuple 9:32 (lit 9:33 %fill) (lit 9:39 1)))))
2727 (value 10:1 list
2828 (cast 10:9
29− (apply 10:12 list (ref 10:18 attr))
30− (list 10:24
31− (pair 10:26 width
32− (tuple 10:32 (lit 10:33 %fill) (lit 10:39 1))))))
29+ (apply 10:12 list (ref 10:18 attribute))
30+ (list 10:29
31+ (pair 10:31 width
32+ (tuple 10:37 (lit 10:38 %fill) (lit 10:44 1))))))
3333 (value 11:1 accept
3434 (gate 11:11
35− (face 11:14 value (ref 11:20 attr))
36− (wing 11:25 value)))
35+ (face 11:14 value (ref 11:20 attribute))
36+ (wing 11:30 value)))
3737 (value 12:1 call
3838 (group 12:9
3939 (call 12:10
@@ -42,69 +42,69 @@
4242 (tuple 12:23 (lit 12:24 %fill) (lit 12:30 1))))))
4343 (value 13:1 simple-call
4444 (cast 13:16
45− (ref 13:19 attr)
46− (pair 13:24 width
47− (tuple 13:30
48− (lit 13:31 %fill)
49− (group 13:37
50− (call 13:38 (wing 13:38 number-id) (lit 13:48 1)))))))
45+ (ref 13:19 attribute)
46+ (pair 13:29 width
47+ (tuple 13:35
48+ (lit 13:36 %fill)
49+ (group 13:42
50+ (call 13:43 (wing 13:43 number-id) (lit 13:53 1)))))))
5151 (value 14:1 grouped-call
5252 (cast 14:17
53− (ref 14:20 attr)
54− (pair 14:25 width
55− (tuple 14:31
56− (lit 14:32 %fill)
57− (group 14:38
58− (group 14:39
59− (call 14:40 (wing 14:40 number-id) (lit 14:50 1))))))))
53+ (ref 14:20 attribute)
54+ (pair 14:30 width
55+ (tuple 14:36
56+ (lit 14:37 %fill)
57+ (group 14:43
58+ (group 14:44
59+ (call 14:45 (wing 14:45 number-id) (lit 14:55 1))))))))
6060 (value 15:1 cast-call
6161 (cast 15:14
62− (ref 15:17 attr)
63− (pair 15:22 width
64− (tuple 15:28
65− (lit 15:29 %fill)
66− (group 15:35
67− (cast 15:36
68− (aura 15:39 @ud)
69− (group 15:43
70− (call 15:44 (wing 15:44 number-id) (lit 15:54 1)))))))))
62+ (ref 15:17 attribute)
63+ (pair 15:27 width
64+ (tuple 15:33
65+ (lit 15:34 %fill)
66+ (group 15:40
67+ (cast 15:41
68+ (aura 15:44 @ud)
69+ (group 15:48
70+ (call 15:49 (wing 15:49 number-id) (lit 15:59 1)))))))))
7171 (value 16:1 nested-call
7272 (cast 16:16
73− (ref 16:19 attr)
74− (pair 16:24 width
75− (tuple 16:30
76− (lit 16:31 %fill)
77− (group 16:37
78− (call 16:38
79− (wing 16:38 number-id)
80− (group 16:48
81− (call 16:49 (wing 16:49 number-id) (lit 16:59 1)))))))))
73+ (ref 16:19 attribute)
74+ (pair 16:29 width
75+ (tuple 16:35
76+ (lit 16:36 %fill)
77+ (group 16:42
78+ (call 16:43
79+ (wing 16:43 number-id)
80+ (group 16:53
81+ (call 16:54 (wing 16:54 number-id) (lit 16:64 1)))))))))
8282 (value 17:1 bad-tag
8383 (cast 17:12
84− (ref 17:15 attr)
85− (pair 17:20 width
86− (tuple 17:26 (lit 17:27 %missing) (lit 17:36 1)))))
84+ (ref 17:15 attribute)
85+ (pair 17:25 width
86+ (tuple 17:31 (lit 17:32 %missing) (lit 17:41 1)))))
8787 (value 18:1 bad-number
8888 (cast 18:15
89− (ref 18:18 attr)
90− (pair 18:23 width
91− (tuple 18:29 (lit 18:30 %fill) (str 18:36 "bad")))))
89+ (ref 18:18 attribute)
90+ (pair 18:28 width
91+ (tuple 18:34 (lit 18:35 %fill) (str 18:41 "bad")))))
9292 (value 19:1 pending
9393 (body 20:3
9494 (trace 20:3
9595 (lit 20:6 %unrelated)
9696 (body 21:5
9797 (cast 21:5
98− (ref 21:8 attr)
99− (pair 21:13 width
100− (tuple 21:19
101− (lit 21:20 %fill)
102− (group 21:26
103− (call 21:27 (wing 21:27 number-id) (lit 21:37 1))))))))))
98+ (ref 21:8 attribute)
99+ (pair 21:18 width
100+ (tuple 21:24
101+ (lit 21:25 %fill)
102+ (group 21:31
103+ (call 21:32 (wing 21:32 number-id) (lit 21:42 1))))))))))
104104 (value 22:1 singleton
105105 (cast 22:14
106− (ref 22:17 attr)
107− (pair 22:22 width (lit 22:28 %shrink))))
106+ (ref 22:17 attribute)
107+ (pair 22:27 width (lit 22:33 %shrink))))
108108 (mold 23:1 event
109109 (union 24:3
110110 (cell 24:3
tests/golden/types-nested-shallow-preserve/types.txt+20−20
@@ -1,32 +1,32 @@
11partial inference; module not checked
2−+$ length: cases proven disjoint; mold not checked
3−+$ attr: cases proven disjoint; mold not checked
2++$ extent: cases proven disjoint; mold not checked
3++$ attribute: cases proven disjoint; mold not checked
44++ number-id: $-(@ud @ud)
5−++ plain: attr
6−++ direct: attr
7−++ list: (list attr)
8−++ accept: $-(attr attr)
9−++ call: attr
10−++ simple-call: attr
11−++ grouped-call: attr
12−++ cast-call: attr
13−++ nested-call: attr
5+++ plain: attribute
6+++ direct: attribute
7+++ list: (list attribute)
8+++ accept: $-(attribute attribute)
9+++ call: attribute
10+++ simple-call: attribute
11+++ grouped-call: attribute
12+++ cast-call: attribute
13+++ nested-call: attribute
1414++ bad-tag: cast mold and expression type do not unify
1515/tests/golden/types-nested-shallow-preserve/source.jibb:17:15: cast mold
16−++ bad-tag ^- attr width+[%missing 1]
16+++ bad-tag ^- attribute width+[%missing 1]
1717 ^
18−/tests/golden/types-nested-shallow-preserve/source.jibb:17:20: expression
19−++ bad-tag ^- attr width+[%missing 1]
20− ^
18+/tests/golden/types-nested-shallow-preserve/source.jibb:17:25: expression
19+++ bad-tag ^- attribute width+[%missing 1]
20+ ^
2121++ bad-number: cast mold and expression type do not unify
2222/tests/golden/types-nested-shallow-preserve/source.jibb:18:18: cast mold
23−++ bad-number ^- attr width+[%fill "bad"]
23+++ bad-number ^- attribute width+[%fill "bad"]
2424 ^
25−/tests/golden/types-nested-shallow-preserve/source.jibb:18:23: expression
26−++ bad-number ^- attr width+[%fill "bad"]
27− ^
25+/tests/golden/types-nested-shallow-preserve/source.jibb:18:28: expression
26+++ bad-number ^- attribute width+[%fill "bad"]
27+ ^
2828++ pending: tag needs context in partial inference
29−++ singleton: attr
29+++ singleton: attribute
3030+$ event: cases proven disjoint; mold not checked
3131+$ envelope: cases proven disjoint; mold not checked
3232++ constructor: envelope
tests/golden/types-pair-context/source.jibb+14−14
@@ -3,30 +3,30 @@
33 %s1
44 %s2
55 %s3
6−+$ length
6++$ extent
77 [%fill n=@ud]
88 %shrink
9−+$ attr
9++$ attribute
1010 [%gap spacing]
1111 [%pad spacing]
12− [%width length]
13−+$ other-attr
12+ [%width extent]
13++$ other-attribute
1414 [%gap spacing]
1515 [%pad spacing]
16− [%width length]
17−++ one ^- attr gap+%s2
18−++ equiv ^- attr [%gap %s2]
19−++ attrs ^- (list attr) ~[gap+%s2 pad+%s3 width+[%fill 1]]
16+ [%width extent]
17+++ one ^- attribute gap+%s2
18+++ equiv ^- attribute [%gap %s2]
19+++ attributes ^- (list attribute) ~[gap+%s2 pad+%s3 width+[%fill 1]]
2020++ gap-structural ^- [@tas @tas] gap+%s2
21−++ nested ^- attr width+[%fill 1]
22−++ mismatch ^- attr gap+%shrink
23−++ missing ^- attr width+[%oops 1]
21+++ nested ^- attribute width+[%fill 1]
22+++ mismatch ^- attribute gap+%shrink
23+++ missing ^- attribute width+[%oops 1]
2424++ pending gap+%s2
25−++ cross-origin ^- attr ^- other-attr gap+%s2
25+++ cross-origin ^- attribute ^- other-attribute gap+%s2
2626++ noun-pair ^- [* *] gap+%s2
2727++ atom-pair ^- [@ta @tas] gap+%s2
2828++ wrong-head ^- [@ud @tas] gap+%s2
29−++ wrong-number ^- attr width+[%fill "hi"]
29+++ wrong-number ^- attribute width+[%fill "hi"]
3030++ unrelated
3131 ~& %dangling
32− ^- attr gap+%s2
32+ ^- attribute gap+%s2
tests/golden/types-pair-context/tokens.txt+71−71
@@ -11,7 +11,7 @@
11116:1 DEDENT
12126:1 NEWLINE
13136:1 glyph +$
14−6:4 name length
14+6:4 name extent
15157:3 INDENT
16167:3 glyph [
17177:4 tight lit %fill
@@ -24,7 +24,7 @@
24249:1 DEDENT
25259:1 NEWLINE
26269:1 glyph +$
27−9:4 name attr
27+9:4 name attribute
282810:3 INDENT
292910:3 glyph [
303010:4 tight lit %gap
@@ -38,12 +38,12 @@
383812:3 NEWLINE
393912:3 glyph [
404012:4 tight lit %width
41−12:11 name length
41+12:11 name extent
424212:17 tight glyph ]
434313:1 DEDENT
444413:1 NEWLINE
454513:1 glyph +$
46−13:4 name other-attr
46+13:4 name other-attribute
474714:3 INDENT
484814:3 glyph [
494914:4 tight lit %gap
@@ -57,48 +57,48 @@
575716:3 NEWLINE
585816:3 glyph [
595916:4 tight lit %width
60−16:11 name length
60+16:11 name extent
616116:17 tight glyph ]
626217:1 DEDENT
636317:1 NEWLINE
646417:1 glyph ++
656517:4 name one
666617:8 glyph ^-
67−17:11 name attr
68−17:16 name gap
69−17:19 tight glyph +
70−17:20 tight lit %s2
67+17:11 name attribute
68+17:21 name gap
69+17:24 tight glyph +
70+17:25 tight lit %s2
717118:1 NEWLINE
727218:1 glyph ++
737318:4 name equiv
747418:10 glyph ^-
75−18:13 name attr
76−18:18 glyph [
77−18:19 tight lit %gap
78−18:24 lit %s2
79−18:27 tight glyph ]
75+18:13 name attribute
76+18:23 glyph [
77+18:24 tight lit %gap
78+18:29 lit %s2
79+18:32 tight glyph ]
808019:1 NEWLINE
818119:1 glyph ++
82−19:4 name attrs
83−19:10 glyph ^-
84−19:13 glyph (
85−19:14 tight name list
86−19:19 name attr
87−19:23 tight glyph )
88−19:25 glyph ~[
89−19:27 tight name gap
90−19:30 tight glyph +
91−19:31 tight lit %s2
92−19:35 name pad
93−19:38 tight glyph +
94−19:39 tight lit %s3
95−19:43 name width
82+19:4 name attributes
83+19:15 glyph ^-
84+19:18 glyph (
85+19:19 tight name list
86+19:24 name attribute
87+19:33 tight glyph )
88+19:35 glyph ~[
89+19:37 tight name gap
90+19:40 tight glyph +
91+19:41 tight lit %s2
92+19:45 name pad
969319:48 tight glyph +
97−19:49 tight glyph [
98−19:50 tight lit %fill
99−19:56 lit 1
100−19:57 tight glyph ]
101−19:58 tight glyph ]
94+19:49 tight lit %s3
95+19:53 name width
96+19:58 tight glyph +
97+19:59 tight glyph [
98+19:60 tight lit %fill
99+19:66 lit 1
100+19:67 tight glyph ]
101+19:68 tight glyph ]
10210220:1 NEWLINE
10310320:1 glyph ++
10410420:4 name gap-structural
@@ -114,32 +114,32 @@
11411421:1 glyph ++
11511521:4 name nested
11611621:11 glyph ^-
117−21:14 name attr
118−21:19 name width
119−21:24 tight glyph +
120−21:25 tight glyph [
121−21:26 tight lit %fill
122−21:32 lit 1
123−21:33 tight glyph ]
117+21:14 name attribute
118+21:24 name width
119+21:29 tight glyph +
120+21:30 tight glyph [
121+21:31 tight lit %fill
122+21:37 lit 1
123+21:38 tight glyph ]
12412422:1 NEWLINE
12512522:1 glyph ++
12612622:4 name mismatch
12712722:13 glyph ^-
128−22:16 name attr
129−22:21 name gap
130−22:24 tight glyph +
131−22:25 tight lit %shrink
128+22:16 name attribute
129+22:26 name gap
130+22:29 tight glyph +
131+22:30 tight lit %shrink
13213223:1 NEWLINE
13313323:1 glyph ++
13413423:4 name missing
13513523:12 glyph ^-
136−23:15 name attr
137−23:20 name width
138−23:25 tight glyph +
139−23:26 tight glyph [
140−23:27 tight lit %oops
141−23:33 lit 1
142−23:34 tight glyph ]
136+23:15 name attribute
137+23:25 name width
138+23:30 tight glyph +
139+23:31 tight glyph [
140+23:32 tight lit %oops
141+23:38 lit 1
142+23:39 tight glyph ]
14314324:1 NEWLINE
14414424:1 glyph ++
14514524:4 name pending
@@ -150,12 +150,12 @@
15015025:1 glyph ++
15115125:4 name cross-origin
15215225:17 glyph ^-
153−25:20 name attr
154−25:25 glyph ^-
155−25:28 name other-attr
156−25:39 name gap
157−25:42 tight glyph +
158−25:43 tight lit %s2
153+25:20 name attribute
154+25:30 glyph ^-
155+25:33 name other-attribute
156+25:49 name gap
157+25:52 tight glyph +
158+25:53 tight lit %s2
15915926:1 NEWLINE
16016026:1 glyph ++
16116126:4 name noun-pair
@@ -193,13 +193,13 @@
19319329:1 glyph ++
19419429:4 name wrong-number
19519529:17 glyph ^-
196−29:20 name attr
197−29:25 name width
198−29:30 tight glyph +
199−29:31 tight glyph [
200−29:32 tight lit %fill
201−29:38 str "hi"
202−29:42 tight glyph ]
196+29:20 name attribute
197+29:30 name width
198+29:35 tight glyph +
199+29:36 tight glyph [
200+29:37 tight lit %fill
201+29:43 str "hi"
202+29:47 tight glyph ]
20320330:1 NEWLINE
20420430:1 glyph ++
20520530:4 name unrelated
@@ -208,10 +208,10 @@
20820831:6 lit %dangling
20920932:5 INDENT
21021032:5 glyph ^-
211−32:8 name attr
212−32:13 name gap
213−32:16 tight glyph +
214−32:17 tight lit %s2
215−32:20 DEDENT
216−32:20 DEDENT
217−32:20 NEWLINE
211+32:8 name attribute
212+32:18 name gap
213+32:21 tight glyph +
214+32:22 tight lit %s2
215+32:25 DEDENT
216+32:25 DEDENT
217+32:25 NEWLINE
tests/golden/types-pair-context/tree.txt+34−34
@@ -1,64 +1,64 @@
11(module
22 (mold 1:1 spacing
33 (union 2:3 (const 2:3 %s0) (const 3:3 %s1) (const 4:3 %s2) (const 5:3 %s3)))
4− (mold 6:1 length
4+ (mold 6:1 extent
55 (union 7:3
66 (cell 7:3
77 (const 7:4 %fill)
88 (face 7:10 n (aura 7:12 @ud)))
99 (const 8:3 %shrink)))
10− (mold 9:1 attr
10+ (mold 9:1 attribute
1111 (union 10:3
1212 (cell 10:3 (const 10:4 %gap) (ref 10:9 spacing))
1313 (cell 11:3 (const 11:4 %pad) (ref 11:9 spacing))
14− (cell 12:3 (const 12:4 %width) (ref 12:11 length))))
15− (mold 13:1 other-attr
14+ (cell 12:3 (const 12:4 %width) (ref 12:11 extent))))
15+ (mold 13:1 other-attribute
1616 (union 14:3
1717 (cell 14:3 (const 14:4 %gap) (ref 14:9 spacing))
1818 (cell 15:3 (const 15:4 %pad) (ref 15:9 spacing))
19− (cell 16:3 (const 16:4 %width) (ref 16:11 length))))
19+ (cell 16:3 (const 16:4 %width) (ref 16:11 extent))))
2020 (value 17:1 one
2121 (cast 17:8
22− (ref 17:11 attr)
23− (pair 17:16 gap (lit 17:20 %s2))))
22+ (ref 17:11 attribute)
23+ (pair 17:21 gap (lit 17:25 %s2))))
2424 (value 18:1 equiv
2525 (cast 18:10
26− (ref 18:13 attr)
27− (tuple 18:18 (lit 18:19 %gap) (lit 18:24 %s2))))
28− (value 19:1 attrs
29− (cast 19:10
30− (apply 19:13 list (ref 19:19 attr))
31− (list 19:25
32− (pair 19:27 gap (lit 19:31 %s2))
33− (pair 19:35 pad (lit 19:39 %s3))
34− (pair 19:43 width
35− (tuple 19:49 (lit 19:50 %fill) (lit 19:56 1))))))
26+ (ref 18:13 attribute)
27+ (tuple 18:23 (lit 18:24 %gap) (lit 18:29 %s2))))
28+ (value 19:1 attributes
29+ (cast 19:15
30+ (apply 19:18 list (ref 19:24 attribute))
31+ (list 19:35
32+ (pair 19:37 gap (lit 19:41 %s2))
33+ (pair 19:45 pad (lit 19:49 %s3))
34+ (pair 19:53 width
35+ (tuple 19:59 (lit 19:60 %fill) (lit 19:66 1))))))
3636 (value 20:1 gap-structural
3737 (cast 20:19
3838 (cell 20:22 (aura 20:23 @tas) (aura 20:28 @tas))
3939 (pair 20:34 gap (lit 20:38 %s2))))
4040 (value 21:1 nested
4141 (cast 21:11
42− (ref 21:14 attr)
43− (pair 21:19 width
44− (tuple 21:25 (lit 21:26 %fill) (lit 21:32 1)))))
42+ (ref 21:14 attribute)
43+ (pair 21:24 width
44+ (tuple 21:30 (lit 21:31 %fill) (lit 21:37 1)))))
4545 (value 22:1 mismatch
4646 (cast 22:13
47− (ref 22:16 attr)
48− (pair 22:21 gap (lit 22:25 %shrink))))
47+ (ref 22:16 attribute)
48+ (pair 22:26 gap (lit 22:30 %shrink))))
4949 (value 23:1 missing
5050 (cast 23:12
51− (ref 23:15 attr)
52− (pair 23:20 width
53− (tuple 23:26 (lit 23:27 %oops) (lit 23:33 1)))))
51+ (ref 23:15 attribute)
52+ (pair 23:25 width
53+ (tuple 23:31 (lit 23:32 %oops) (lit 23:38 1)))))
5454 (value 24:1 pending
5555 (pair 24:12 gap (lit 24:16 %s2)))
5656 (value 25:1 cross-origin
5757 (cast 25:17
58− (ref 25:20 attr)
59− (cast 25:25
60− (ref 25:28 other-attr)
61− (pair 25:39 gap (lit 25:43 %s2)))))
58+ (ref 25:20 attribute)
59+ (cast 25:30
60+ (ref 25:33 other-attribute)
61+ (pair 25:49 gap (lit 25:53 %s2)))))
6262 (value 26:1 noun-pair
6363 (cast 26:14
6464 (cell 26:17 (noun 26:18) (noun 26:20))
@@ -73,14 +73,14 @@
7373 (pair 28:29 gap (lit 28:33 %s2))))
7474 (value 29:1 wrong-number
7575 (cast 29:17
76− (ref 29:20 attr)
77− (pair 29:25 width
78− (tuple 29:31 (lit 29:32 %fill) (str 29:38 "hi")))))
76+ (ref 29:20 attribute)
77+ (pair 29:30 width
78+ (tuple 29:36 (lit 29:37 %fill) (str 29:43 "hi")))))
7979 (value 30:1 unrelated
8080 (body 31:3
8181 (trace 31:3
8282 (lit 31:6 %dangling)
8383 (body 32:5
8484 (cast 32:5
85− (ref 32:8 attr)
86− (pair 32:13 gap (lit 32:17 %s2))))))))
85+ (ref 32:8 attribute)
86+ (pair 32:18 gap (lit 32:22 %s2))))))))
tests/golden/types-pair-context/types.txt+19−19
@@ -1,27 +1,27 @@
11partial inference; module not checked
22+$ spacing: cases proven disjoint; mold not checked
3−+$ length: cases proven disjoint; mold not checked
4−+$ attr: cases proven disjoint; mold not checked
5−+$ other-attr: cases proven disjoint; mold not checked
6−++ one: attr
7−++ equiv: attr
8−++ attrs: (list attr)
3++$ extent: cases proven disjoint; mold not checked
4++$ attribute: cases proven disjoint; mold not checked
5++$ other-attribute: cases proven disjoint; mold not checked
6+++ one: attribute
7+++ equiv: attribute
8+++ attributes: (list attribute)
99++ gap-structural: [@tas @tas]
10−++ nested: attr
10+++ nested: attribute
1111++ mismatch: cast mold and expression type do not unify
1212/tests/golden/types-pair-context/source.jibb:22:16: cast mold
13−++ mismatch ^- attr gap+%shrink
13+++ mismatch ^- attribute gap+%shrink
1414 ^
15−/tests/golden/types-pair-context/source.jibb:22:21: expression
16−++ mismatch ^- attr gap+%shrink
17− ^
15+/tests/golden/types-pair-context/source.jibb:22:26: expression
16+++ mismatch ^- attribute gap+%shrink
17+ ^
1818++ missing: cast mold and expression type do not unify
1919/tests/golden/types-pair-context/source.jibb:23:15: cast mold
20−++ missing ^- attr width+[%oops 1]
20+++ missing ^- attribute width+[%oops 1]
2121 ^
22−/tests/golden/types-pair-context/source.jibb:23:20: expression
23−++ missing ^- attr width+[%oops 1]
24− ^
22+/tests/golden/types-pair-context/source.jibb:23:25: expression
23+++ missing ^- attribute width+[%oops 1]
24+ ^
2525++ pending: tag needs context in partial inference
2626++ cross-origin: cast constraint is not supported by partial inference
2727++ noun-pair: [* *]
@@ -35,9 +35,9 @@ partial inference; module not checked
3535 ^
3636++ wrong-number: cast mold and expression type do not unify
3737/tests/golden/types-pair-context/source.jibb:29:20: cast mold
38−++ wrong-number ^- attr width+[%fill "hi"]
38+++ wrong-number ^- attribute width+[%fill "hi"]
3939 ^
40−/tests/golden/types-pair-context/source.jibb:29:25: expression
41−++ wrong-number ^- attr width+[%fill "hi"]
42− ^
40+/tests/golden/types-pair-context/source.jibb:29:30: expression
41+++ wrong-number ^- attribute width+[%fill "hi"]
42+ ^
4343++ unrelated: tag needs context in partial inference
tests/golden/types-partial-aura-family/source.jibb+1−1
@@ -1,7 +1,7 @@
11++ decimal |= x=@ud ^- @u x
22++ hex ^- @u 0x1f
33++ base32 |= x=@uv ^- @u x
4−++ text |= x=@tD ^- @t x
4+++ text-value |= x=@tD ^- @t x
55++ narrow |= x=@t ^- @tD x
66++ siblings |= x=@ux ^- @ud x
77++ dup |= p=[A A] p
tests/golden/types-partial-aura-family/tokens.txt+8−8
@@ -25,14 +25,14 @@
25253:26 name x
26264:1 NEWLINE
27274:1 glyph ++
28−4:4 name text
29−4:9 glyph |=
30−4:12 name x
31−4:13 tight glyph =
32−4:14 tight aura @tD
33−4:18 glyph ^-
34−4:21 aura @t
35−4:24 name x
28+4:4 name text-value
29+4:15 glyph |=
30+4:18 name x
31+4:19 tight glyph =
32+4:20 tight aura @tD
33+4:24 glyph ^-
34+4:27 aura @t
35+4:30 name x
36365:1 NEWLINE
37375:1 glyph ++
38385:4 name narrow
tests/golden/types-partial-aura-family/tree.txt+4−4
@@ -9,10 +9,10 @@
99 (gate 3:11
1010 (face 3:14 x (aura 3:16 @uv))
1111 (cast 3:20 (aura 3:23 @u) (wing 3:26 x))))
12− (value 4:1 text
13− (gate 4:9
14− (face 4:12 x (aura 4:14 @tD))
15− (cast 4:18 (aura 4:21 @t) (wing 4:24 x))))
12+ (value 4:1 text-value
13+ (gate 4:15
14+ (face 4:18 x (aura 4:20 @tD))
15+ (cast 4:24 (aura 4:27 @t) (wing 4:30 x))))
1616 (value 5:1 narrow
1717 (gate 5:11
1818 (face 5:14 x (aura 5:16 @t))
tests/golden/types-partial-aura-family/types.txt+1−1
@@ -2,7 +2,7 @@ partial inference; module not checked
22++ decimal: $-(@ud @u)
33++ hex: @u
44++ base32: $-(@uv @u)
5−++ text: $-(@tD @t)
5+++ text-value: $-(@tD @t)
66++ narrow: cast mold and expression type do not unify
77/tests/golden/types-partial-aura-family/source.jibb:5:22: cast mold has type @tD
88++ narrow |= x=@t ^- @tD x
tests/golden/types-partial-locals/source.jibb+2−2
@@ -32,9 +32,9 @@
3232++ local-mold |= x
3333 +$ item @t
3434 x
35−++ wrap |= y |=(z y)
35+++ wrap-value |= y |=(z y)
3636++ through-global |= x
37− ++ local (wrap x)
37+ ++ local (wrap-value x)
3838 ~& ^- @t (local ~zod)
3939 ^- @p (local "hi")
4040++ nested-shadow |= x
tests/golden/types-partial-locals/tokens.txt+10−10
@@ -180,13 +180,13 @@
18018035:1 DEDENT
18118135:1 NEWLINE
18218235:1 glyph ++
183−35:4 name wrap
184−35:9 glyph |=
185−35:12 name y
186−35:14 glyph |=(
187−35:17 tight name z
188−35:19 name y
189−35:20 tight glyph )
183+35:4 name wrap-value
184+35:15 glyph |=
185+35:18 name y
186+35:20 glyph |=(
187+35:23 tight name z
188+35:25 name y
189+35:26 tight glyph )
19019036:1 NEWLINE
19119136:1 glyph ++
19219236:4 name through-global
@@ -196,9 +196,9 @@
19619637:3 glyph ++
19719737:6 name local
19819837:12 glyph (
199−37:13 tight name wrap
200−37:18 name x
201−37:19 tight glyph )
199+37:13 tight name wrap-value
200+37:24 name x
201+37:25 tight glyph )
20220238:3 NEWLINE
20320338:3 glyph ~&
20420438:6 glyph ^-
tests/golden/types-partial-locals/tree.txt+5−5
@@ -88,17 +88,17 @@
8888 (body 33:3
8989 (mold 33:3 item (aura 33:11 @t))
9090 (wing 34:3 x))))
91− (value 35:1 wrap
92− (gate 35:9
93− (bind 35:12 y)
94− (gate-wide 35:14 (bind 35:17 z) (wing 35:19 y))))
91+ (value 35:1 wrap-value
92+ (gate 35:15
93+ (bind 35:18 y)
94+ (gate-wide 35:20 (bind 35:23 z) (wing 35:25 y))))
9595 (value 36:1 through-global
9696 (gate 36:19
9797 (bind 36:22 x)
9898 (body 37:3
9999 (value 37:3 local
100100 (group 37:12
101− (call 37:13 (wing 37:13 wrap) (wing 37:18 x))))
101+ (call 37:13 (wing 37:13 wrap-value) (wing 37:24 x))))
102102 (trace 38:3
103103 (cast 38:6
104104 (aura 38:9 @t)
tests/golden/types-partial-locals/types.txt+1−1
@@ -21,7 +21,7 @@ partial inference; module not checked
2121 ^
2222++ unused-bad: local definitions need unsupported inference
2323++ local-mold: $-(A A)
24−++ wrap: $-(A $-(B A))
24+++ wrap-value: $-(A $-(B A))
2525++ through-global: cast mold and expression type do not unify
2626/tests/golden/types-partial-locals/source.jibb:39:8: cast mold has type @p
2727 ^- @p (local "hi")
tests/golden/types-prelude-ask/source.jibb+1−1
@@ -40,7 +40,7 @@
4040++ ordinary-path ^- path ~[~.items]
4141++ ask-from-ordinary (agent ordinary-path |=(v=[mark=@tas state=(unit *) fact=*] [state=0 message="ok"]))
4242++ ask-from-qath (agent %/items |=(v=[mark=@tas state=(unit *) fact=*] [state=0 message="ok"]))
43−++ store |= rec=$-([state=(unit *) fact=*] [state=* message=@t])
43+++ store-ask |= rec=$-([state=(unit *) fact=*] [state=* message=@t])
4444 ^- (ask @t) [%store module="/ui/store/cart" name=%state receive=rec]
4545++ wrong-store |= rec=$-([state=(unit *) fact=*] [state=* message=@p])
4646 ^- (ask @t) [%store module="/ui/store/cart" name=%state receive=rec]
tests/golden/types-prelude-ask/tokens.txt+25−25
@@ -639,31 +639,31 @@
63963942:95 tight glyph )
64064043:1 NEWLINE
64164143:1 glyph ++
642−43:4 name store
643−43:10 glyph |=
644−43:13 name rec
645−43:16 tight glyph =
646−43:17 tight glyph $-(
647−43:20 tight glyph [
648−43:21 tight name state
649−43:26 tight glyph =
650−43:27 tight glyph (
651−43:28 tight name unit
652−43:33 glyph *
653−43:34 tight glyph )
654−43:36 name fact
655−43:40 tight glyph =
656−43:41 tight glyph *
657−43:42 tight glyph ]
658−43:44 glyph [
659−43:45 tight name state
660−43:50 tight glyph =
661−43:51 tight glyph *
662−43:53 name message
663−43:60 tight glyph =
664−43:61 tight aura @t
665−43:63 tight glyph ]
666−43:64 tight glyph )
642+43:4 name store-ask
643+43:14 glyph |=
644+43:17 name rec
645+43:20 tight glyph =
646+43:21 tight glyph $-(
647+43:24 tight glyph [
648+43:25 tight name state
649+43:30 tight glyph =
650+43:31 tight glyph (
651+43:32 tight name unit
652+43:37 glyph *
653+43:38 tight glyph )
654+43:40 name fact
655+43:44 tight glyph =
656+43:45 tight glyph *
657+43:46 tight glyph ]
658+43:48 glyph [
659+43:49 tight name state
660+43:54 tight glyph =
661+43:55 tight glyph *
662+43:57 name message
663+43:64 tight glyph =
664+43:65 tight aura @t
665+43:67 tight glyph ]
666+43:68 tight glyph )
66766744:3 INDENT
66866844:3 glyph ^-
66966944:6 glyph (
tests/golden/types-prelude-ask/tree.txt+11−11
@@ -266,17 +266,17 @@
266266 (tuple 42:72
267267 (face 42:73 state (lit 42:79 0))
268268 (face 42:81 message (str 42:89 "ok")))))))
269− (value 43:1 store
270− (gate 43:10
271− (face 43:13 rec
272− (fn 43:17
273− (cell 43:20
274− (face 43:21 state
275− (apply 43:27 unit (noun 43:33)))
276− (face 43:36 fact (noun 43:41)))
277− (cell 43:44
278− (face 43:45 state (noun 43:51))
279− (face 43:53 message (aura 43:61 @t)))))
269+ (value 43:1 store-ask
270+ (gate 43:14
271+ (face 43:17 rec
272+ (fn 43:21
273+ (cell 43:24
274+ (face 43:25 state
275+ (apply 43:31 unit (noun 43:37)))
276+ (face 43:40 fact (noun 43:45)))
277+ (cell 43:48
278+ (face 43:49 state (noun 43:55))
279+ (face 43:57 message (aura 43:65 @t)))))
280280 (body 44:3
281281 (cast 44:3
282282 (apply 44:6 ask (aura 44:11 @t))
tests/golden/types-prelude-ask/types.txt+1−1
@@ -35,7 +35,7 @@ partial inference; module not checked
3535++ ordinary-path: (list @ta)
3636++ ask-from-ordinary: call constraint is not supported by partial inference
3737++ ask-from-qath: call constraint is not supported by partial inference
38−++ store: $-($-([state=(unit *) fact=*] [state=* message=@t]) (ask @t))
38+++ store-ask: $-($-([state=(unit *) fact=*] [state=* message=@t]) (ask @t))
3939++ wrong-store: cast constraint is not supported by partial inference
4040++ incomplete: missing union case [%store [module=@t [name=@tas receive=$-([state=(unit *) fact=*] [state=* message=@t])]]]
4141++ complete: $-((ask @t) @t)
tests/golden/types-prelude-bond/source.jibb+1−1
@@ -1,6 +1,6 @@
11++ choose (bond |=(~ "default"))
22++ missing (choose ~)
33++ present (choose `"found")
4−++ wrap |= fallback=$-(~ A) (bond fallback)
4+++ wrap-value |= fallback=$-(~ A) (bond fallback)
55++ choose-ship (bond |=(~ ~zod))
66++ present-ship (choose-ship `~zod)
tests/golden/types-prelude-bond/tokens.txt+12−12
@@ -24,18 +24,18 @@
24243:28 tight glyph )
25254:1 NEWLINE
26264:1 glyph ++
27−4:4 name wrap
28−4:9 glyph |=
29−4:12 name fallback
30−4:20 tight glyph =
31−4:21 tight glyph $-(
32−4:24 tight lit ~
33−4:26 tvar A
34−4:27 tight glyph )
35−4:29 glyph (
36−4:30 tight name bond
37−4:35 name fallback
38−4:43 tight glyph )
27+4:4 name wrap-value
28+4:15 glyph |=
29+4:18 name fallback
30+4:26 tight glyph =
31+4:27 tight glyph $-(
32+4:30 tight lit ~
33+4:32 tvar A
34+4:33 tight glyph )
35+4:35 glyph (
36+4:36 tight name bond
37+4:41 name fallback
38+4:49 tight glyph )
39395:1 NEWLINE
40405:1 glyph ++
41415:4 name choose-ship
tests/golden/types-prelude-bond/tree.txt+6−6
@@ -12,12 +12,12 @@
1212 (call 3:13
1313 (wing 3:13 choose)
1414 (unit 3:20 (str 3:21 "found")))))
15− (value 4:1 wrap
16− (gate 4:9
17− (face 4:12 fallback
18− (fn 4:21 (const 4:24 ~) (tvar 4:26 A)))
19− (group 4:29
20− (call 4:30 (wing 4:30 bond) (wing 4:35 fallback)))))
15+ (value 4:1 wrap-value
16+ (gate 4:15
17+ (face 4:18 fallback
18+ (fn 4:27 (const 4:30 ~) (tvar 4:32 A)))
19+ (group 4:35
20+ (call 4:36 (wing 4:36 bond) (wing 4:41 fallback)))))
2121 (value 5:1 choose-ship
2222 (group 5:16
2323 (call 5:17
tests/golden/types-prelude-bond/types.txt+1−1
@@ -2,6 +2,6 @@ partial inference; module not checked
22++ choose: $-((unit @t) @t)
33++ missing: @t
44++ present: @t
5−++ wrap: $-($-(~ A) $-((unit A) A))
5+++ wrap-value: $-($-(~ A) $-((unit A) A))
66++ choose-ship: $-((unit @p) @p)
77++ present-ship: @p
tests/golden/types-prelude-cmd/source.jibb+4−4
@@ -8,9 +8,9 @@
88++ wait ^- (cmd @t) [%wait ~s30 "done"]
99++ who ^- (cmd @t) [%who |=(p=@p "done")]
1010++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
11−++ wrap |= x=A ^- (cmd A) [%wait ~s30 x]
12−++ wrap-text (wrap "hello")
13−++ wrap-ship (wrap ~zod)
11+++ wrap-value |= x=A ^- (cmd A) [%wait ~s30 x]
12+++ wrap-value-text (wrap-value "hello")
13+++ wrap-value-ship (wrap-value ~zod)
1414++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
1515++ commands ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 "done"]]
1616++ commands-bad ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 ~zod]]
@@ -18,4 +18,4 @@
1818 ^- (cmd @t) [%poke p |=(r=@p "done")]
1919++ wrong-case ^- (cmd @t) %oops
2020++ use-text |= x=(cmd @t) x
21−++ cross (use-text (wrap ~zod))
21+++ cross (use-text (wrap-value ~zod))
tests/golden/types-prelude-cmd/tokens.txt+30−30
@@ -138,35 +138,35 @@
13813810:46 tight glyph ]
13913911:1 NEWLINE
14014011:1 glyph ++
141−11:4 name wrap
142−11:9 glyph |=
143−11:12 name x
144−11:13 tight glyph =
145−11:14 tight tvar A
146−11:16 glyph ^-
147−11:19 glyph (
148−11:20 tight name cmd
149−11:24 tvar A
150−11:25 tight glyph )
151−11:27 glyph [
152−11:28 tight lit %wait
153−11:34 lit ~s30
154−11:39 name x
155−11:40 tight glyph ]
141+11:4 name wrap-value
142+11:15 glyph |=
143+11:18 name x
144+11:19 tight glyph =
145+11:20 tight tvar A
146+11:22 glyph ^-
147+11:25 glyph (
148+11:26 tight name cmd
149+11:30 tvar A
150+11:31 tight glyph )
151+11:33 glyph [
152+11:34 tight lit %wait
153+11:40 lit ~s30
154+11:45 name x
155+11:46 tight glyph ]
15615612:1 NEWLINE
15715712:1 glyph ++
158−12:4 name wrap-text
159−12:14 glyph (
160−12:15 tight name wrap
161−12:20 str "hello"
162−12:27 tight glyph )
158+12:4 name wrap-value-text
159+12:20 glyph (
160+12:21 tight name wrap-value
161+12:32 str "hello"
162+12:39 tight glyph )
16316313:1 NEWLINE
16416413:1 glyph ++
165−13:4 name wrap-ship
166−13:14 glyph (
167−13:15 tight name wrap
168−13:20 lit ~zod
169−13:24 tight glyph )
165+13:4 name wrap-value-ship
166+13:20 glyph (
167+13:21 tight name wrap-value
168+13:32 lit ~zod
169+13:36 tight glyph )
17017014:1 NEWLINE
17117114:1 glyph ++
17217214:4 name wrong-reply
@@ -278,8 +278,8 @@
27827821:10 glyph (
27927921:11 tight name use-text
28028021:20 glyph (
281−21:21 tight name wrap
282−21:26 lit ~zod
283−21:30 tight glyph )
284−21:31 tight glyph )
285−21:32 NEWLINE
281+21:21 tight name wrap-value
282+21:32 lit ~zod
283+21:36 tight glyph )
284+21:37 tight glyph )
285+21:38 NEWLINE
tests/golden/types-prelude-cmd/tree.txt+13−13
@@ -59,18 +59,18 @@
5959 (cast 10:18
6060 (apply 10:21 cmd (aura 10:26 @t))
6161 (tuple 10:30 (lit 10:31 %wait) (lit 10:37 ~s30) (lit 10:42 ~zod))))
62− (value 11:1 wrap
63− (gate 11:9
64− (face 11:12 x (tvar 11:14 A))
65− (cast 11:16
66− (apply 11:19 cmd (tvar 11:24 A))
67− (tuple 11:27 (lit 11:28 %wait) (lit 11:34 ~s30) (wing 11:39 x)))))
68− (value 12:1 wrap-text
69− (group 12:14
70− (call 12:15 (wing 12:15 wrap) (str 12:20 "hello"))))
71− (value 13:1 wrap-ship
72− (group 13:14
73− (call 13:15 (wing 13:15 wrap) (lit 13:20 ~zod))))
62+ (value 11:1 wrap-value
63+ (gate 11:15
64+ (face 11:18 x (tvar 11:20 A))
65+ (cast 11:22
66+ (apply 11:25 cmd (tvar 11:30 A))
67+ (tuple 11:33 (lit 11:34 %wait) (lit 11:40 ~s30) (wing 11:45 x)))))
68+ (value 12:1 wrap-value-text
69+ (group 12:20
70+ (call 12:21 (wing 12:21 wrap-value) (str 12:32 "hello"))))
71+ (value 13:1 wrap-value-ship
72+ (group 13:20
73+ (call 13:21 (wing 13:21 wrap-value) (lit 13:32 ~zod))))
7474 (value 14:1 wrong-reply
7575 (cast 14:16
7676 (apply 14:19 cmd (aura 14:24 @t))
@@ -119,4 +119,4 @@
119119 (call 21:11
120120 (wing 21:11 use-text)
121121 (group 21:20
122− (call 21:21 (wing 21:21 wrap) (lit 21:26 ~zod)))))))
122+ (call 21:21 (wing 21:21 wrap-value) (lit 21:32 ~zod)))))))
tests/golden/types-prelude-cmd/types.txt+7−7
@@ -20,9 +20,9 @@ partial inference; module not checked
2020/tests/golden/types-prelude-cmd/source.jibb:10:30: expression
2121++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
2222 ^
23−++ wrap: $-(A (cmd A))
24−++ wrap-text: (cmd @t)
25−++ wrap-ship: (cmd @p)
23+++ wrap-value: $-(A (cmd A))
24+++ wrap-value-text: (cmd @t)
25+++ wrap-value-ship: (cmd @p)
2626++ wrong-reply: cast mold and expression type do not unify
2727/tests/golden/types-prelude-cmd/source.jibb:14:19: cast mold
2828++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
@@ -49,8 +49,8 @@ partial inference; module not checked
4949++ use-text: $-((cmd @t) (cmd @t))
5050++ cross: call's sample and argument types do not unify
5151/tests/golden/types-prelude-cmd/source.jibb:21:21: called gate
52−++ cross (use-text (wrap ~zod))
52+++ cross (use-text (wrap-value ~zod))
5353 ^
54−/tests/golden/types-prelude-cmd/source.jibb:21:26: argument has type @p
55−++ cross (use-text (wrap ~zod))
56− ^
54+/tests/golden/types-prelude-cmd/source.jibb:21:32: argument has type @p
55+++ cross (use-text (wrap-value ~zod))
56+ ^
tests/golden/types-prelude-comparison/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/grammar.md, Molds, Atoms: "Comparison may take loobeans and returns `?`." The prelude inventory includes `lth`, `gte`, and `lte`.
2+tests: Source-backed comparisons infer for less, greater and equal ordered operands, both loobean orders, a shared generic atom type and matching hex auras. Distinct explicit auras fail closed. The report is partial; backend lowering, execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-comparison/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-comparison/source.jibbnew file+18
@@ -0,0 +1,18 @@
1+++ less (lth 1 2)
2+++ greater (lth 2 1)
3+++ equal (lth 1 1)
4+++ gte-less (gte 1 2)
5+++ gte-greater (gte 2 1)
6+++ gte-equal (gte 1 1)
7+++ lte-less (lte 1 2)
8+++ lte-greater (lte 2 1)
9+++ lte-equal (lte 1 1)
10+++ flags-forward (gte %.y %.n)
11+++ flags-reverse (lte %.n %.y)
12+++ flags-equal (lth %.y %.y)
13+++ hex (lth 0x1 0x2)
14+++ generic-lth |= [a=A b=A] (lth a b)
15+++ generic-gte |= [a=A b=A] (gte a b)
16+++ generic-lte |= [a=A b=A] (lte a b)
17+++ bad-aura (lth 0x1 (^- @ud 1))
18+++ bad-kind (gte ~zod "text")
tests/golden/types-prelude-comparison/tokens.txtnew file+175
@@ -0,0 +1,175 @@
1+1:1 glyph ++
2+1:4 name less
3+1:9 glyph (
4+1:10 tight name lth
5+1:14 lit 1
6+1:16 lit 2
7+1:17 tight glyph )
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name greater
11+2:12 glyph (
12+2:13 tight name lth
13+2:17 lit 2
14+2:19 lit 1
15+2:20 tight glyph )
16+3:1 NEWLINE
17+3:1 glyph ++
18+3:4 name equal
19+3:10 glyph (
20+3:11 tight name lth
21+3:15 lit 1
22+3:17 lit 1
23+3:18 tight glyph )
24+4:1 NEWLINE
25+4:1 glyph ++
26+4:4 name gte-less
27+4:13 glyph (
28+4:14 tight name gte
29+4:18 lit 1
30+4:20 lit 2
31+4:21 tight glyph )
32+5:1 NEWLINE
33+5:1 glyph ++
34+5:4 name gte-greater
35+5:16 glyph (
36+5:17 tight name gte
37+5:21 lit 2
38+5:23 lit 1
39+5:24 tight glyph )
40+6:1 NEWLINE
41+6:1 glyph ++
42+6:4 name gte-equal
43+6:14 glyph (
44+6:15 tight name gte
45+6:19 lit 1
46+6:21 lit 1
47+6:22 tight glyph )
48+7:1 NEWLINE
49+7:1 glyph ++
50+7:4 name lte-less
51+7:13 glyph (
52+7:14 tight name lte
53+7:18 lit 1
54+7:20 lit 2
55+7:21 tight glyph )
56+8:1 NEWLINE
57+8:1 glyph ++
58+8:4 name lte-greater
59+8:16 glyph (
60+8:17 tight name lte
61+8:21 lit 2
62+8:23 lit 1
63+8:24 tight glyph )
64+9:1 NEWLINE
65+9:1 glyph ++
66+9:4 name lte-equal
67+9:14 glyph (
68+9:15 tight name lte
69+9:19 lit 1
70+9:21 lit 1
71+9:22 tight glyph )
72+10:1 NEWLINE
73+10:1 glyph ++
74+10:4 name flags-forward
75+10:18 glyph (
76+10:19 tight name gte
77+10:23 lit %.y
78+10:27 lit %.n
79+10:30 tight glyph )
80+11:1 NEWLINE
81+11:1 glyph ++
82+11:4 name flags-reverse
83+11:18 glyph (
84+11:19 tight name lte
85+11:23 lit %.n
86+11:27 lit %.y
87+11:30 tight glyph )
88+12:1 NEWLINE
89+12:1 glyph ++
90+12:4 name flags-equal
91+12:16 glyph (
92+12:17 tight name lth
93+12:21 lit %.y
94+12:25 lit %.y
95+12:28 tight glyph )
96+13:1 NEWLINE
97+13:1 glyph ++
98+13:4 name hex
99+13:8 glyph (
100+13:9 tight name lth
101+13:13 lit 0x1
102+13:17 lit 0x2
103+13:20 tight glyph )
104+14:1 NEWLINE
105+14:1 glyph ++
106+14:4 name generic-lth
107+14:16 glyph |=
108+14:19 glyph [
109+14:20 tight name a
110+14:21 tight glyph =
111+14:22 tight tvar A
112+14:24 name b
113+14:25 tight glyph =
114+14:26 tight tvar A
115+14:27 tight glyph ]
116+14:29 glyph (
117+14:30 tight name lth
118+14:34 name a
119+14:36 name b
120+14:37 tight glyph )
121+15:1 NEWLINE
122+15:1 glyph ++
123+15:4 name generic-gte
124+15:16 glyph |=
125+15:19 glyph [
126+15:20 tight name a
127+15:21 tight glyph =
128+15:22 tight tvar A
129+15:24 name b
130+15:25 tight glyph =
131+15:26 tight tvar A
132+15:27 tight glyph ]
133+15:29 glyph (
134+15:30 tight name gte
135+15:34 name a
136+15:36 name b
137+15:37 tight glyph )
138+16:1 NEWLINE
139+16:1 glyph ++
140+16:4 name generic-lte
141+16:16 glyph |=
142+16:19 glyph [
143+16:20 tight name a
144+16:21 tight glyph =
145+16:22 tight tvar A
146+16:24 name b
147+16:25 tight glyph =
148+16:26 tight tvar A
149+16:27 tight glyph ]
150+16:29 glyph (
151+16:30 tight name lte
152+16:34 name a
153+16:36 name b
154+16:37 tight glyph )
155+17:1 NEWLINE
156+17:1 glyph ++
157+17:4 name bad-aura
158+17:13 glyph (
159+17:14 tight name lth
160+17:18 lit 0x1
161+17:22 glyph (
162+17:23 tight glyph ^-
163+17:26 aura @ud
164+17:30 lit 1
165+17:31 tight glyph )
166+17:32 tight glyph )
167+18:1 NEWLINE
168+18:1 glyph ++
169+18:4 name bad-kind
170+18:13 glyph (
171+18:14 tight name gte
172+18:18 lit ~zod
173+18:23 str "text"
174+18:29 tight glyph )
175+18:30 NEWLINE
tests/golden/types-prelude-comparison/tree.txtnew file+71
@@ -0,0 +1,71 @@
1+(module
2+ (value 1:1 less
3+ (group 1:9
4+ (call 1:10 (wing 1:10 lth) (lit 1:14 1) (lit 1:16 2))))
5+ (value 2:1 greater
6+ (group 2:12
7+ (call 2:13 (wing 2:13 lth) (lit 2:17 2) (lit 2:19 1))))
8+ (value 3:1 equal
9+ (group 3:10
10+ (call 3:11 (wing 3:11 lth) (lit 3:15 1) (lit 3:17 1))))
11+ (value 4:1 gte-less
12+ (group 4:13
13+ (call 4:14 (wing 4:14 gte) (lit 4:18 1) (lit 4:20 2))))
14+ (value 5:1 gte-greater
15+ (group 5:16
16+ (call 5:17 (wing 5:17 gte) (lit 5:21 2) (lit 5:23 1))))
17+ (value 6:1 gte-equal
18+ (group 6:14
19+ (call 6:15 (wing 6:15 gte) (lit 6:19 1) (lit 6:21 1))))
20+ (value 7:1 lte-less
21+ (group 7:13
22+ (call 7:14 (wing 7:14 lte) (lit 7:18 1) (lit 7:20 2))))
23+ (value 8:1 lte-greater
24+ (group 8:16
25+ (call 8:17 (wing 8:17 lte) (lit 8:21 2) (lit 8:23 1))))
26+ (value 9:1 lte-equal
27+ (group 9:14
28+ (call 9:15 (wing 9:15 lte) (lit 9:19 1) (lit 9:21 1))))
29+ (value 10:1 flags-forward
30+ (group 10:18
31+ (call 10:19 (wing 10:19 gte) (lit 10:23 %.y) (lit 10:27 %.n))))
32+ (value 11:1 flags-reverse
33+ (group 11:18
34+ (call 11:19 (wing 11:19 lte) (lit 11:23 %.n) (lit 11:27 %.y))))
35+ (value 12:1 flags-equal
36+ (group 12:16
37+ (call 12:17 (wing 12:17 lth) (lit 12:21 %.y) (lit 12:25 %.y))))
38+ (value 13:1 hex
39+ (group 13:8
40+ (call 13:9 (wing 13:9 lth) (lit 13:13 0x1) (lit 13:17 0x2))))
41+ (value 14:1 generic-lth
42+ (gate 14:16
43+ (cell 14:19
44+ (face 14:20 a (tvar 14:22 A))
45+ (face 14:24 b (tvar 14:26 A)))
46+ (group 14:29
47+ (call 14:30 (wing 14:30 lth) (wing 14:34 a) (wing 14:36 b)))))
48+ (value 15:1 generic-gte
49+ (gate 15:16
50+ (cell 15:19
51+ (face 15:20 a (tvar 15:22 A))
52+ (face 15:24 b (tvar 15:26 A)))
53+ (group 15:29
54+ (call 15:30 (wing 15:30 gte) (wing 15:34 a) (wing 15:36 b)))))
55+ (value 16:1 generic-lte
56+ (gate 16:16
57+ (cell 16:19
58+ (face 16:20 a (tvar 16:22 A))
59+ (face 16:24 b (tvar 16:26 A)))
60+ (group 16:29
61+ (call 16:30 (wing 16:30 lte) (wing 16:34 a) (wing 16:36 b)))))
62+ (value 17:1 bad-aura
63+ (group 17:13
64+ (call 17:14
65+ (wing 17:14 lth)
66+ (lit 17:18 0x1)
67+ (group 17:22
68+ (cast 17:23 (aura 17:26 @ud) (lit 17:30 1))))))
69+ (value 18:1 bad-kind
70+ (group 18:13
71+ (call 18:14 (wing 18:14 gte) (lit 18:18 ~zod) (str 18:23 "text")))))
tests/golden/types-prelude-comparison/types.txtnew file+31
@@ -0,0 +1,31 @@
1+partial inference; module not checked
2+++ less: ?
3+++ greater: ?
4+++ equal: ?
5+++ gte-less: ?
6+++ gte-greater: ?
7+++ gte-equal: ?
8+++ lte-less: ?
9+++ lte-greater: ?
10+++ lte-equal: ?
11+++ flags-forward: ?
12+++ flags-reverse: ?
13+++ flags-equal: ?
14+++ hex: ?
15+++ generic-lth: $-([a=A b=A] ?) where A is an atom
16+++ generic-gte: $-([a=A b=A] ?) where A is an atom
17+++ generic-lte: $-([a=A b=A] ?) where A is an atom
18+++ bad-aura: call's sample and argument types do not unify
19+/tests/golden/types-prelude-comparison/source.jibb:17:14: called gate has type $-([A A] ?) where A is an atom
20+++ bad-aura (lth 0x1 (^- @ud 1))
21+ ^
22+/tests/golden/types-prelude-comparison/source.jibb:17:18: argument has type [@ux @ud]
23+++ bad-aura (lth 0x1 (^- @ud 1))
24+ ^
25+++ bad-kind: call's sample and argument types do not unify
26+/tests/golden/types-prelude-comparison/source.jibb:18:14: called gate has type $-([A A] ?) where A is an atom
27+++ bad-kind (gte ~zod "text")
28+ ^
29+/tests/golden/types-prelude-comparison/source.jibb:18:18: argument has type [@p @t]
30+++ bad-kind (gte ~zod "text")
31+ ^
tests/golden/types-prelude-lead-late/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Hoon's standard library regrouped, written in Jibb"; Function helpers include section 2n.
2+tests: Source-backed curried lead and late infer independent argument types, reverse output positions correctly, and preserve generic gates as ordinary values. Explicit context accepts a null unit; an uncontextualized null remains unsupported and an incompatible annotated result reports its sites. This is a partial inference report; Jibb lowering, execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-lead-late/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-lead-late/source.jibbnew file+10
@@ -0,0 +1,10 @@
1+++ text-ship ((lead "hi") ~zod)
2+++ ship-text ((late "hi") ~zod)
3+++ first-fn (lead "hi")
4+++ generic-lead |= [x=A y=B] ((lead x) y)
5+++ generic-late |= [x=A y=B] ((late x) y)
6+++ generic-gate |= [f=$-(A B) x=C] ((lead f) x)
7+++ reversed-gate |= [f=$-(A B) x=C] ((late f) x)
8+++ null-lead ((lead (^- (unit @t) ~)) "tail")
9+++ unresolved ((lead ~) "tail")
10+++ bad ^- [@p @t] ((lead "hi") ~zod)
tests/golden/types-prelude-lead-late/tokens.txtnew file+151
@@ -0,0 +1,151 @@
1+1:1 glyph ++
2+1:4 name text-ship
3+1:14 glyph (
4+1:15 tight glyph (
5+1:16 tight name lead
6+1:21 str "hi"
7+1:25 tight glyph )
8+1:27 lit ~zod
9+1:31 tight glyph )
10+2:1 NEWLINE
11+2:1 glyph ++
12+2:4 name ship-text
13+2:14 glyph (
14+2:15 tight glyph (
15+2:16 tight name late
16+2:21 str "hi"
17+2:25 tight glyph )
18+2:27 lit ~zod
19+2:31 tight glyph )
20+3:1 NEWLINE
21+3:1 glyph ++
22+3:4 name first-fn
23+3:13 glyph (
24+3:14 tight name lead
25+3:19 str "hi"
26+3:23 tight glyph )
27+4:1 NEWLINE
28+4:1 glyph ++
29+4:4 name generic-lead
30+4:17 glyph |=
31+4:20 glyph [
32+4:21 tight name x
33+4:22 tight glyph =
34+4:23 tight tvar A
35+4:25 name y
36+4:26 tight glyph =
37+4:27 tight tvar B
38+4:28 tight glyph ]
39+4:30 glyph (
40+4:31 tight glyph (
41+4:32 tight name lead
42+4:37 name x
43+4:38 tight glyph )
44+4:40 name y
45+4:41 tight glyph )
46+5:1 NEWLINE
47+5:1 glyph ++
48+5:4 name generic-late
49+5:17 glyph |=
50+5:20 glyph [
51+5:21 tight name x
52+5:22 tight glyph =
53+5:23 tight tvar A
54+5:25 name y
55+5:26 tight glyph =
56+5:27 tight tvar B
57+5:28 tight glyph ]
58+5:30 glyph (
59+5:31 tight glyph (
60+5:32 tight name late
61+5:37 name x
62+5:38 tight glyph )
63+5:40 name y
64+5:41 tight glyph )
65+6:1 NEWLINE
66+6:1 glyph ++
67+6:4 name generic-gate
68+6:17 glyph |=
69+6:20 glyph [
70+6:21 tight name f
71+6:22 tight glyph =
72+6:23 tight glyph $-(
73+6:26 tight tvar A
74+6:28 tvar B
75+6:29 tight glyph )
76+6:31 name x
77+6:32 tight glyph =
78+6:33 tight tvar C
79+6:34 tight glyph ]
80+6:36 glyph (
81+6:37 tight glyph (
82+6:38 tight name lead
83+6:43 name f
84+6:44 tight glyph )
85+6:46 name x
86+6:47 tight glyph )
87+7:1 NEWLINE
88+7:1 glyph ++
89+7:4 name reversed-gate
90+7:18 glyph |=
91+7:21 glyph [
92+7:22 tight name f
93+7:23 tight glyph =
94+7:24 tight glyph $-(
95+7:27 tight tvar A
96+7:29 tvar B
97+7:30 tight glyph )
98+7:32 name x
99+7:33 tight glyph =
100+7:34 tight tvar C
101+7:35 tight glyph ]
102+7:37 glyph (
103+7:38 tight glyph (
104+7:39 tight name late
105+7:44 name f
106+7:45 tight glyph )
107+7:47 name x
108+7:48 tight glyph )
109+8:1 NEWLINE
110+8:1 glyph ++
111+8:4 name null-lead
112+8:14 glyph (
113+8:15 tight glyph (
114+8:16 tight name lead
115+8:21 glyph (
116+8:22 tight glyph ^-
117+8:25 glyph (
118+8:26 tight name unit
119+8:31 aura @t
120+8:33 tight glyph )
121+8:35 lit ~
122+8:36 tight glyph )
123+8:37 tight glyph )
124+8:39 str "tail"
125+8:45 tight glyph )
126+9:1 NEWLINE
127+9:1 glyph ++
128+9:4 name unresolved
129+9:15 glyph (
130+9:16 tight glyph (
131+9:17 tight name lead
132+9:22 lit ~
133+9:23 tight glyph )
134+9:25 str "tail"
135+9:31 tight glyph )
136+10:1 NEWLINE
137+10:1 glyph ++
138+10:4 name bad
139+10:8 glyph ^-
140+10:11 glyph [
141+10:12 tight aura @p
142+10:15 aura @t
143+10:17 tight glyph ]
144+10:19 glyph (
145+10:20 tight glyph (
146+10:21 tight name lead
147+10:26 str "hi"
148+10:30 tight glyph )
149+10:32 lit ~zod
150+10:36 tight glyph )
151+10:37 NEWLINE
tests/golden/types-prelude-lead-late/tree.txtnew file+83
@@ -0,0 +1,83 @@
1+(module
2+ (value 1:1 text-ship
3+ (group 1:14
4+ (call 1:15
5+ (group 1:15
6+ (call 1:16 (wing 1:16 lead) (str 1:21 "hi")))
7+ (lit 1:27 ~zod))))
8+ (value 2:1 ship-text
9+ (group 2:14
10+ (call 2:15
11+ (group 2:15
12+ (call 2:16 (wing 2:16 late) (str 2:21 "hi")))
13+ (lit 2:27 ~zod))))
14+ (value 3:1 first-fn
15+ (group 3:13
16+ (call 3:14 (wing 3:14 lead) (str 3:19 "hi"))))
17+ (value 4:1 generic-lead
18+ (gate 4:17
19+ (cell 4:20
20+ (face 4:21 x (tvar 4:23 A))
21+ (face 4:25 y (tvar 4:27 B)))
22+ (group 4:30
23+ (call 4:31
24+ (group 4:31
25+ (call 4:32 (wing 4:32 lead) (wing 4:37 x)))
26+ (wing 4:40 y)))))
27+ (value 5:1 generic-late
28+ (gate 5:17
29+ (cell 5:20
30+ (face 5:21 x (tvar 5:23 A))
31+ (face 5:25 y (tvar 5:27 B)))
32+ (group 5:30
33+ (call 5:31
34+ (group 5:31
35+ (call 5:32 (wing 5:32 late) (wing 5:37 x)))
36+ (wing 5:40 y)))))
37+ (value 6:1 generic-gate
38+ (gate 6:17
39+ (cell 6:20
40+ (face 6:21 f
41+ (fn 6:23 (tvar 6:26 A) (tvar 6:28 B)))
42+ (face 6:31 x (tvar 6:33 C)))
43+ (group 6:36
44+ (call 6:37
45+ (group 6:37
46+ (call 6:38 (wing 6:38 lead) (wing 6:43 f)))
47+ (wing 6:46 x)))))
48+ (value 7:1 reversed-gate
49+ (gate 7:18
50+ (cell 7:21
51+ (face 7:22 f
52+ (fn 7:24 (tvar 7:27 A) (tvar 7:29 B)))
53+ (face 7:32 x (tvar 7:34 C)))
54+ (group 7:37
55+ (call 7:38
56+ (group 7:38
57+ (call 7:39 (wing 7:39 late) (wing 7:44 f)))
58+ (wing 7:47 x)))))
59+ (value 8:1 null-lead
60+ (group 8:14
61+ (call 8:15
62+ (group 8:15
63+ (call 8:16
64+ (wing 8:16 lead)
65+ (group 8:21
66+ (cast 8:22
67+ (apply 8:25 unit (aura 8:31 @t))
68+ (lit 8:35 ~)))))
69+ (str 8:39 "tail"))))
70+ (value 9:1 unresolved
71+ (group 9:15
72+ (call 9:16
73+ (group 9:16
74+ (call 9:17 (wing 9:17 lead) (lit 9:22 ~)))
75+ (str 9:25 "tail"))))
76+ (value 10:1 bad
77+ (cast 10:8
78+ (cell 10:11 (aura 10:12 @p) (aura 10:15 @t))
79+ (group 10:19
80+ (call 10:20
81+ (group 10:20
82+ (call 10:21 (wing 10:21 lead) (str 10:26 "hi")))
83+ (lit 10:32 ~zod))))))
tests/golden/types-prelude-lead-late/types.txtnew file+17
@@ -0,0 +1,17 @@
1+partial inference; module not checked
2+++ text-ship: [@t @p]
3+++ ship-text: [@p @t]
4+++ first-fn: $-(A [@t A])
5+++ generic-lead: $-([x=A y=B] [A B])
6+++ generic-late: $-([x=A y=B] [B A])
7+++ generic-gate: $-([f=$-(A B) x=C] [$-(A B) C])
8+++ reversed-gate: $-([f=$-(A B) x=C] [C $-(A B)])
9+++ null-lead: [(unit @t) @t]
10+++ unresolved: `~` needs context in partial inference
11+++ bad: cast mold and expression type do not unify
12+/tests/golden/types-prelude-lead-late/source.jibb:10:11: cast mold has type [@p @t]
13+++ bad ^- [@p @t] ((lead "hi") ~zod)
14+ ^
15+/tests/golden/types-prelude-lead-late/source.jibb:10:19: expression has type [@t @p]
16+++ bad ^- [@p @t] ((lead "hi") ~zod)
17+ ^
tests/golden/types-prelude-list-alias/source.jibb+1−1
@@ -2,6 +2,6 @@
22++ path-id |= x=path x
33++ tape-id |= x=tape x
44++ spot-id |= x=spot x
5−++ text |= x=(bag @t) x
5+++ text-value |= x=(bag @t) x
66++ ship |= x=(bag @p) x
77++ wrong ^- (bag @t) ~[~zod]
tests/golden/types-prelude-list-alias/tokens.txt+9−9
@@ -34,15 +34,15 @@
34344:22 name x
35355:1 NEWLINE
36365:1 glyph ++
37−5:4 name text
38−5:9 glyph |=
39−5:12 name x
40−5:13 tight glyph =
41−5:14 tight glyph (
42−5:15 tight name bag
43−5:19 aura @t
44−5:21 tight glyph )
45−5:23 name x
37+5:4 name text-value
38+5:15 glyph |=
39+5:18 name x
40+5:19 tight glyph =
41+5:20 tight glyph (
42+5:21 tight name bag
43+5:25 aura @t
44+5:27 tight glyph )
45+5:29 name x
46466:1 NEWLINE
47476:1 glyph ++
48486:4 name ship
tests/golden/types-prelude-list-alias/tree.txt+5−5
@@ -14,11 +14,11 @@
1414 (gate 4:12
1515 (face 4:15 x (ref 4:17 spot))
1616 (wing 4:22 x)))
17− (value 5:1 text
18− (gate 5:9
19− (face 5:12 x
20− (apply 5:14 bag (aura 5:19 @t)))
21− (wing 5:23 x)))
17+ (value 5:1 text-value
18+ (gate 5:15
19+ (face 5:18 x
20+ (apply 5:20 bag (aura 5:25 @t)))
21+ (wing 5:29 x)))
2222 (value 6:1 ship
2323 (gate 6:9
2424 (face 6:12 x
tests/golden/types-prelude-list-alias/types.txt+1−1
@@ -3,7 +3,7 @@ partial inference; module not checked
33++ path-id: $-((list @ta) (list @ta))
44++ tape-id: $-((list @tD) (list @tD))
55++ spot-id: $-([p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]] [p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]])
6−++ text: $-((list @t) (list @t))
6+++ text-value: $-((list @t) (list @t))
77++ ship: $-((list @p) (list @p))
88++ wrong: list item does not fit its expected type
99/tests/golden/types-prelude-list-alias/source.jibb:7:13: expected item has type @t
tests/golden/types-prelude-succ/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Overview, Prelude: “Hoon's standard library regrouped, written in Jibb”; Decisions, Loobean arithmetic: “Arithmetic rejects loobean operands”.
2+tests: The source-backed successor preserves a shared atom aura, accepts decimal and hexadecimal atoms, infers a generic arithmetic constraint and rejects a loobean. This is a partial inference report; Jibb execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-succ/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-succ/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+++ n (succ 1)
2+++ hx (succ 0x1f)
3+++ generic |= x=A (succ x)
4+++ bad (succ %.y)
tests/golden/types-prelude-succ/tokens.txtnew file+32
@@ -0,0 +1,32 @@
1+1:1 glyph ++
2+1:4 name n
3+1:6 glyph (
4+1:7 tight name succ
5+1:12 lit 1
6+1:13 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name hx
10+2:7 glyph (
11+2:8 tight name succ
12+2:13 lit 0x1f
13+2:17 tight glyph )
14+3:1 NEWLINE
15+3:1 glyph ++
16+3:4 name generic
17+3:12 glyph |=
18+3:15 name x
19+3:16 tight glyph =
20+3:17 tight tvar A
21+3:19 glyph (
22+3:20 tight name succ
23+3:25 name x
24+3:26 tight glyph )
25+4:1 NEWLINE
26+4:1 glyph ++
27+4:4 name bad
28+4:8 glyph (
29+4:9 tight name succ
30+4:14 lit %.y
31+4:17 tight glyph )
32+4:18 NEWLINE
tests/golden/types-prelude-succ/tree.txtnew file+15
@@ -0,0 +1,15 @@
1+(module
2+ (value 1:1 n
3+ (group 1:6
4+ (call 1:7 (wing 1:7 succ) (lit 1:12 1))))
5+ (value 2:1 hx
6+ (group 2:7
7+ (call 2:8 (wing 2:8 succ) (lit 2:13 0x1f))))
8+ (value 3:1 generic
9+ (gate 3:12
10+ (face 3:15 x (tvar 3:17 A))
11+ (group 3:19
12+ (call 3:20 (wing 3:20 succ) (wing 3:25 x)))))
13+ (value 4:1 bad
14+ (group 4:8
15+ (call 4:9 (wing 4:9 succ) (lit 4:14 %.y)))))
tests/golden/types-prelude-succ/types.txtnew file+11
@@ -0,0 +1,11 @@
1+partial inference; module not checked
2+++ n: @ud
3+++ hx: @ux
4+++ generic: $-(A A) where A is an atom other than ?
5+++ bad: call's sample and argument types do not unify
6+/tests/golden/types-prelude-succ/source.jibb:4:9: called gate has type $-(A A) where A is an atom other than ?
7+++ bad (succ %.y)
8+ ^
9+/tests/golden/types-prelude-succ/source.jibb:4:14: argument has type ?
10+++ bad (succ %.y)
11+ ^
tests/golden/types-prelude-text/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Text ... crip, trip, cass, cuss, trim, tufa, tuba"; the target ship's Hoon 135 definitions give trip and tuba their tape and UTF-32 types.
2+tests: Source-backed trip and tuba wrappers preserve cord, tape and UTF-32 list types through composition and generic list length. Empty input infers; non-cord and non-tape arguments fail. Primitive lowering and execution remain unfinished. The module report is partial.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-text/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-text/source.jibbnew file+8
@@ -0,0 +1,8 @@
1+++ to-tape (trip "abc")
2+++ to-codepoints (tuba (trip "abc"))
3+++ empty-codepoints (tuba ~)
4+++ count-codepoints |= value=@t
5+ (lent (tuba (trip value)))
6+++ bad-trip (trip ~zod)
7+++ bad-tuba (tuba "abc")
8+++ bad-tuba-items (tuba ~[~zod])
tests/golden/types-prelude-text/tokens.txtnew file+66
@@ -0,0 +1,66 @@
1+1:1 glyph ++
2+1:4 name to-tape
3+1:12 glyph (
4+1:13 tight name trip
5+1:18 str "abc"
6+1:23 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name to-codepoints
10+2:18 glyph (
11+2:19 tight name tuba
12+2:24 glyph (
13+2:25 tight name trip
14+2:30 str "abc"
15+2:35 tight glyph )
16+2:36 tight glyph )
17+3:1 NEWLINE
18+3:1 glyph ++
19+3:4 name empty-codepoints
20+3:21 glyph (
21+3:22 tight name tuba
22+3:27 lit ~
23+3:28 tight glyph )
24+4:1 NEWLINE
25+4:1 glyph ++
26+4:4 name count-codepoints
27+4:21 glyph |=
28+4:24 name value
29+4:29 tight glyph =
30+4:30 tight aura @t
31+5:3 INDENT
32+5:3 glyph (
33+5:4 tight name lent
34+5:9 glyph (
35+5:10 tight name tuba
36+5:15 glyph (
37+5:16 tight name trip
38+5:21 name value
39+5:26 tight glyph )
40+5:27 tight glyph )
41+5:28 tight glyph )
42+6:1 DEDENT
43+6:1 NEWLINE
44+6:1 glyph ++
45+6:4 name bad-trip
46+6:13 glyph (
47+6:14 tight name trip
48+6:19 lit ~zod
49+6:23 tight glyph )
50+7:1 NEWLINE
51+7:1 glyph ++
52+7:4 name bad-tuba
53+7:13 glyph (
54+7:14 tight name tuba
55+7:19 str "abc"
56+7:24 tight glyph )
57+8:1 NEWLINE
58+8:1 glyph ++
59+8:4 name bad-tuba-items
60+8:19 glyph (
61+8:20 tight name tuba
62+8:25 glyph ~[
63+8:27 tight lit ~zod
64+8:31 tight glyph ]
65+8:32 tight glyph )
66+8:33 NEWLINE
tests/golden/types-prelude-text/tree.txtnew file+36
@@ -0,0 +1,36 @@
1+(module
2+ (value 1:1 to-tape
3+ (group 1:12
4+ (call 1:13 (wing 1:13 trip) (str 1:18 "abc"))))
5+ (value 2:1 to-codepoints
6+ (group 2:18
7+ (call 2:19
8+ (wing 2:19 tuba)
9+ (group 2:24
10+ (call 2:25 (wing 2:25 trip) (str 2:30 "abc"))))))
11+ (value 3:1 empty-codepoints
12+ (group 3:21
13+ (call 3:22 (wing 3:22 tuba) (lit 3:27 ~))))
14+ (value 4:1 count-codepoints
15+ (gate 4:21
16+ (face 4:24 value (aura 4:30 @t))
17+ (body 5:3
18+ (group 5:3
19+ (call 5:4
20+ (wing 5:4 lent)
21+ (group 5:9
22+ (call 5:10
23+ (wing 5:10 tuba)
24+ (group 5:15
25+ (call 5:16 (wing 5:16 trip) (wing 5:21 value))))))))))
26+ (value 6:1 bad-trip
27+ (group 6:13
28+ (call 6:14 (wing 6:14 trip) (lit 6:19 ~zod))))
29+ (value 7:1 bad-tuba
30+ (group 7:13
31+ (call 7:14 (wing 7:14 tuba) (str 7:19 "abc"))))
32+ (value 8:1 bad-tuba-items
33+ (group 8:19
34+ (call 8:20
35+ (wing 8:20 tuba)
36+ (list 8:25 (lit 8:27 ~zod))))))
tests/golden/types-prelude-text/types.txtnew file+26
@@ -0,0 +1,26 @@
1+partial inference; module not checked
2+++ to-tape: (list @tD)
3+++ to-codepoints: (list @c)
4+++ empty-codepoints: (list @c)
5+++ count-codepoints: $-(@t @ud)
6+++ bad-trip: call's sample and argument types do not unify
7+/tests/golden/types-prelude-text/source.jibb:6:14: called gate has type $-(@t (list @tD))
8+++ bad-trip (trip ~zod)
9+ ^
10+/tests/golden/types-prelude-text/source.jibb:6:19: argument has type @p
11+++ bad-trip (trip ~zod)
12+ ^
13+++ bad-tuba: call's sample and argument types do not unify
14+/tests/golden/types-prelude-text/source.jibb:7:14: called gate has type $-((list @tD) (list @c))
15+++ bad-tuba (tuba "abc")
16+ ^
17+/tests/golden/types-prelude-text/source.jibb:7:19: argument has type @t
18+++ bad-tuba (tuba "abc")
19+ ^
20+++ bad-tuba-items: list item does not fit its expected type
21+/tests/golden/types-prelude-text/source.jibb:8:20: expected item has type @tD
22+++ bad-tuba-items (tuba ~[~zod])
23+ ^
24+/tests/golden/types-prelude-text/source.jibb:8:27: list item has type @p
25+++ bad-tuba-items (tuba ~[~zod])
26+ ^
tests/golden/types-prelude-ui/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude, The Elm architecture on Urbit, and Layout and styling.
2+tests: Exact source-backed UI/program/page constructor schemes; static and message-bearing composition; concrete islands and pages; invalid attributes, malformed keyed/table inputs, child-message mismatch, mismatched island data, and ordinary inference of a concrete raw element constructor. Nested element payloads are erased only in the nonrecursive runtime mold, not in public constructor signatures.
3+expect: parses
4+expect-types: supported declarations infer exact types and invalid compositions report errors; the child-message mismatch fails closed as an unsupported constraint. No raw-constructor encapsulation, duplicate-attribute check, rendering, navigation, storage, or execution is claimed.
tests/golden/types-prelude-ui/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-ui/source.jibbnew file+78
@@ -0,0 +1,78 @@
1++$ msg
2+ %save
3+ %toggle
4+ [%edited value=@t]
5++$ model [count=@ud]
6+
7+++ row-scheme row
8+++ column-scheme column
9+++ wrap-scheme wrap
10+++ stack-scheme stack
11+++ el-scheme el
12+++ para-scheme para
13+++ text-scheme text
14+++ heading-scheme heading
15+++ each-scheme each
16+++ table-scheme table
17+++ image-scheme image
18+++ image-unsafe-scheme image-unsafe
19+++ link-scheme link
20+++ link-unsafe-scheme link-unsafe
21+++ button-scheme button
22+++ toggle-scheme toggle
23+++ field-scheme field
24+++ form-scheme form
25+++ island-scheme island
26+++ program-scheme program
27+++ page-scheme page
28+
29+++ static-text ^- (element !!) (text "hello")
30+++ raw-text ^- (element !!) (row ~ ~[[%text "raw"]])
31+++ static-ui ^- (element !!)
32+ column ~[pad+%s1 gap+%s2 width+[%fill 1] align+%center role+%body tone+%muted] ~[
33+ text "one"
34+ para ~[(text "two")]
35+ heading 2 "heading"
36+++ static-media ^- (element !!)
37+ stack ~[width+[%chars 20]] ~[
38+ image %/images/logo.png "Logo"
39+ link %/home "Home"
40+++ unsafe-media ^- (element !!)
41+ wrap ~[width+%shrink role+%caption tone+%accent] ~[
42+ image-unsafe [url="https://example.com/a.png" width=20 height=10] "Remote"
43+ link-unsafe "/elsewhere" "Elsewhere"
44+++ save-message ^- msg %save
45+++ toggle-message ^- msg %toggle
46+++ save-button ^- (element msg) (button "Save" save-message)
47+++ enabled-toggle ^- (element msg) (toggle %.y "Enabled" toggle-message)
48+++ edit-message |= value=@t ^- msg [%edited value]
49+++ name-field ^- (element msg) (field "Name" "value" edit-message)
50+++ controls ^- (element msg)
51+ (form save-message ~[save-button enabled-toggle name-field])
52+++ keyed |= items=(list [key=@t el=(element msg)])
53+ ^- (element msg) (each items)
54+++ tabular |= rows=(list [key=@ud cells=(list (element msg))])
55+ ^- (element msg)
56+ (table ~[[header="Name" width=[%fill 1] align=%start]] rows)
57+
58+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
59+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
60+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
61+++ malformed-table ^- (element msg)
62+ (table ~[[header="Name" width=%shrink]] ~)
63+++ ship-control ^- (element @p) (button "Ship" ~zod)
64+++ text-row |= kids=(list (element @t)) ^- (element @t) (row ~ kids)
65+++ bad-child (text-row ~[ship-control])
66+
67+++ init |= input=@t ^- model [count=0]
68+++ update |= [message=msg state=model]
69+ ^- [model (list (cmd msg))] [state ~]
70+++ view |= state=model ^- (element msg) (controls)
71+++ subs |= state=model ^- (list (sub msg)) ~
72+++ concrete-program ^- (program @t model msg) (program init update view subs)
73+++ embedded ^- (element !!) (island concrete-program "seed")
74+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
75+
76+++ load |= route=@t ^- (ask model) (pure [count=0])
77+++ page-view |= data=model ^- (element !!) (text "page")
78+++ static-page ^- (page @t model) (page load page-view)
tests/golden/types-prelude-ui/tokens.txtnew file+728
@@ -0,0 +1,728 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %save
5+3:3 NEWLINE
6+3:3 lit %toggle
7+4:3 NEWLINE
8+4:3 glyph [
9+4:4 tight lit %edited
10+4:12 name value
11+4:17 tight glyph =
12+4:18 tight aura @t
13+4:20 tight glyph ]
14+5:1 DEDENT
15+5:1 NEWLINE
16+5:1 glyph +$
17+5:4 name model
18+5:10 glyph [
19+5:11 tight name count
20+5:16 tight glyph =
21+5:17 tight aura @ud
22+5:20 tight glyph ]
23+7:1 NEWLINE
24+7:1 glyph ++
25+7:4 name row-scheme
26+7:15 name row
27+8:1 NEWLINE
28+8:1 glyph ++
29+8:4 name column-scheme
30+8:18 name column
31+9:1 NEWLINE
32+9:1 glyph ++
33+9:4 name wrap-scheme
34+9:16 name wrap
35+10:1 NEWLINE
36+10:1 glyph ++
37+10:4 name stack-scheme
38+10:17 name stack
39+11:1 NEWLINE
40+11:1 glyph ++
41+11:4 name el-scheme
42+11:14 name el
43+12:1 NEWLINE
44+12:1 glyph ++
45+12:4 name para-scheme
46+12:16 name para
47+13:1 NEWLINE
48+13:1 glyph ++
49+13:4 name text-scheme
50+13:16 name text
51+14:1 NEWLINE
52+14:1 glyph ++
53+14:4 name heading-scheme
54+14:19 name heading
55+15:1 NEWLINE
56+15:1 glyph ++
57+15:4 name each-scheme
58+15:16 name each
59+16:1 NEWLINE
60+16:1 glyph ++
61+16:4 name table-scheme
62+16:17 name table
63+17:1 NEWLINE
64+17:1 glyph ++
65+17:4 name image-scheme
66+17:17 name image
67+18:1 NEWLINE
68+18:1 glyph ++
69+18:4 name image-unsafe-scheme
70+18:24 name image-unsafe
71+19:1 NEWLINE
72+19:1 glyph ++
73+19:4 name link-scheme
74+19:16 name link
75+20:1 NEWLINE
76+20:1 glyph ++
77+20:4 name link-unsafe-scheme
78+20:23 name link-unsafe
79+21:1 NEWLINE
80+21:1 glyph ++
81+21:4 name button-scheme
82+21:18 name button
83+22:1 NEWLINE
84+22:1 glyph ++
85+22:4 name toggle-scheme
86+22:18 name toggle
87+23:1 NEWLINE
88+23:1 glyph ++
89+23:4 name field-scheme
90+23:17 name field
91+24:1 NEWLINE
92+24:1 glyph ++
93+24:4 name form-scheme
94+24:16 name form
95+25:1 NEWLINE
96+25:1 glyph ++
97+25:4 name island-scheme
98+25:18 name island
99+26:1 NEWLINE
100+26:1 glyph ++
101+26:4 name program-scheme
102+26:19 name program
103+27:1 NEWLINE
104+27:1 glyph ++
105+27:4 name page-scheme
106+27:16 name page
107+29:1 NEWLINE
108+29:1 glyph ++
109+29:4 name static-text
110+29:16 glyph ^-
111+29:19 glyph (
112+29:20 tight name element
113+29:28 glyph !!
114+29:30 tight glyph )
115+29:32 glyph (
116+29:33 tight name text
117+29:38 str "hello"
118+29:45 tight glyph )
119+30:1 NEWLINE
120+30:1 glyph ++
121+30:4 name raw-text
122+30:13 glyph ^-
123+30:16 glyph (
124+30:17 tight name element
125+30:25 glyph !!
126+30:27 tight glyph )
127+30:29 glyph (
128+30:30 tight name row
129+30:34 lit ~
130+30:36 glyph ~[
131+30:38 tight glyph [
132+30:39 tight lit %text
133+30:45 str "raw"
134+30:50 tight glyph ]
135+30:51 tight glyph ]
136+30:52 tight glyph )
137+31:1 NEWLINE
138+31:1 glyph ++
139+31:4 name static-ui
140+31:14 glyph ^-
141+31:17 glyph (
142+31:18 tight name element
143+31:26 glyph !!
144+31:28 tight glyph )
145+32:3 INDENT
146+32:3 name column
147+32:10 glyph ~[
148+32:12 tight name pad
149+32:15 tight glyph +
150+32:16 tight lit %s1
151+32:20 name gap
152+32:23 tight glyph +
153+32:24 tight lit %s2
154+32:28 name width
155+32:33 tight glyph +
156+32:34 tight glyph [
157+32:35 tight lit %fill
158+32:41 lit 1
159+32:42 tight glyph ]
160+32:44 name align
161+32:49 tight glyph +
162+32:50 tight lit %center
163+32:58 name role
164+32:62 tight glyph +
165+32:63 tight lit %body
166+32:69 name tone
167+32:73 tight glyph +
168+32:74 tight lit %muted
169+32:80 tight glyph ]
170+32:82 glyph ~[
171+33:5 INDENT
172+33:5 name text
173+33:10 str "one"
174+34:5 NEWLINE
175+34:5 name para
176+34:10 glyph ~[
177+34:12 tight glyph (
178+34:13 tight name text
179+34:18 str "two"
180+34:23 tight glyph )
181+34:24 tight glyph ]
182+35:5 NEWLINE
183+35:5 name heading
184+35:13 lit 2
185+35:15 str "heading"
186+36:1 DEDENT
187+36:1 DEDENT
188+36:1 NEWLINE
189+36:1 glyph ++
190+36:4 name static-media
191+36:17 glyph ^-
192+36:20 glyph (
193+36:21 tight name element
194+36:29 glyph !!
195+36:31 tight glyph )
196+37:3 INDENT
197+37:3 name stack
198+37:9 glyph ~[
199+37:11 tight name width
200+37:16 tight glyph +
201+37:17 tight glyph [
202+37:18 tight lit %chars
203+37:25 lit 20
204+37:27 tight glyph ]
205+37:28 tight glyph ]
206+37:30 glyph ~[
207+38:5 INDENT
208+38:5 name image
209+38:11 glyph %/
210+38:13 tight knot images
211+38:19 tight glyph /
212+38:20 tight knot logo.png
213+38:29 str "Logo"
214+39:5 NEWLINE
215+39:5 name link
216+39:10 glyph %/
217+39:12 tight knot home
218+39:17 str "Home"
219+40:1 DEDENT
220+40:1 DEDENT
221+40:1 NEWLINE
222+40:1 glyph ++
223+40:4 name unsafe-media
224+40:17 glyph ^-
225+40:20 glyph (
226+40:21 tight name element
227+40:29 glyph !!
228+40:31 tight glyph )
229+41:3 INDENT
230+41:3 name wrap
231+41:8 glyph ~[
232+41:10 tight name width
233+41:15 tight glyph +
234+41:16 tight lit %shrink
235+41:24 name role
236+41:28 tight glyph +
237+41:29 tight lit %caption
238+41:38 name tone
239+41:42 tight glyph +
240+41:43 tight lit %accent
241+41:50 tight glyph ]
242+41:52 glyph ~[
243+42:5 INDENT
244+42:5 name image-unsafe
245+42:18 glyph [
246+42:19 tight name url
247+42:22 tight glyph =
248+42:23 tight str "https://example.com/a.png"
249+42:51 name width
250+42:56 tight glyph =
251+42:57 tight lit 20
252+42:60 name height
253+42:66 tight glyph =
254+42:67 tight lit 10
255+42:69 tight glyph ]
256+42:71 str "Remote"
257+43:5 NEWLINE
258+43:5 name link-unsafe
259+43:17 str "/elsewhere"
260+43:30 str "Elsewhere"
261+44:1 DEDENT
262+44:1 DEDENT
263+44:1 NEWLINE
264+44:1 glyph ++
265+44:4 name save-message
266+44:17 glyph ^-
267+44:20 name msg
268+44:24 lit %save
269+45:1 NEWLINE
270+45:1 glyph ++
271+45:4 name toggle-message
272+45:19 glyph ^-
273+45:22 name msg
274+45:26 lit %toggle
275+46:1 NEWLINE
276+46:1 glyph ++
277+46:4 name save-button
278+46:16 glyph ^-
279+46:19 glyph (
280+46:20 tight name element
281+46:28 name msg
282+46:31 tight glyph )
283+46:33 glyph (
284+46:34 tight name button
285+46:41 str "Save"
286+46:48 name save-message
287+46:60 tight glyph )
288+47:1 NEWLINE
289+47:1 glyph ++
290+47:4 name enabled-toggle
291+47:19 glyph ^-
292+47:22 glyph (
293+47:23 tight name element
294+47:31 name msg
295+47:34 tight glyph )
296+47:36 glyph (
297+47:37 tight name toggle
298+47:44 lit %.y
299+47:48 str "Enabled"
300+47:58 name toggle-message
301+47:72 tight glyph )
302+48:1 NEWLINE
303+48:1 glyph ++
304+48:4 name edit-message
305+48:17 glyph |=
306+48:20 name value
307+48:25 tight glyph =
308+48:26 tight aura @t
309+48:29 glyph ^-
310+48:32 name msg
311+48:36 glyph [
312+48:37 tight lit %edited
313+48:45 name value
314+48:50 tight glyph ]
315+49:1 NEWLINE
316+49:1 glyph ++
317+49:4 name name-field
318+49:15 glyph ^-
319+49:18 glyph (
320+49:19 tight name element
321+49:27 name msg
322+49:30 tight glyph )
323+49:32 glyph (
324+49:33 tight name field
325+49:39 str "Name"
326+49:46 str "value"
327+49:54 name edit-message
328+49:66 tight glyph )
329+50:1 NEWLINE
330+50:1 glyph ++
331+50:4 name controls
332+50:13 glyph ^-
333+50:16 glyph (
334+50:17 tight name element
335+50:25 name msg
336+50:28 tight glyph )
337+51:3 INDENT
338+51:3 glyph (
339+51:4 tight name form
340+51:9 name save-message
341+51:22 glyph ~[
342+51:24 tight name save-button
343+51:36 name enabled-toggle
344+51:51 name name-field
345+51:61 tight glyph ]
346+51:62 tight glyph )
347+52:1 DEDENT
348+52:1 NEWLINE
349+52:1 glyph ++
350+52:4 name keyed
351+52:10 glyph |=
352+52:13 name items
353+52:18 tight glyph =
354+52:19 tight glyph (
355+52:20 tight name list
356+52:25 glyph [
357+52:26 tight name key
358+52:29 tight glyph =
359+52:30 tight aura @t
360+52:33 name el
361+52:35 tight glyph =
362+52:36 tight glyph (
363+52:37 tight name element
364+52:45 name msg
365+52:48 tight glyph )
366+52:49 tight glyph ]
367+52:50 tight glyph )
368+53:3 INDENT
369+53:3 glyph ^-
370+53:6 glyph (
371+53:7 tight name element
372+53:15 name msg
373+53:18 tight glyph )
374+53:20 glyph (
375+53:21 tight name each
376+53:26 name items
377+53:31 tight glyph )
378+54:1 DEDENT
379+54:1 NEWLINE
380+54:1 glyph ++
381+54:4 name tabular
382+54:12 glyph |=
383+54:15 name rows
384+54:19 tight glyph =
385+54:20 tight glyph (
386+54:21 tight name list
387+54:26 glyph [
388+54:27 tight name key
389+54:30 tight glyph =
390+54:31 tight aura @ud
391+54:35 name cells
392+54:40 tight glyph =
393+54:41 tight glyph (
394+54:42 tight name list
395+54:47 glyph (
396+54:48 tight name element
397+54:56 name msg
398+54:59 tight glyph )
399+54:60 tight glyph )
400+54:61 tight glyph ]
401+54:62 tight glyph )
402+55:3 INDENT
403+55:3 glyph ^-
404+55:6 glyph (
405+55:7 tight name element
406+55:15 name msg
407+55:18 tight glyph )
408+56:5 INDENT
409+56:5 glyph (
410+56:6 tight name table
411+56:12 glyph ~[
412+56:14 tight glyph [
413+56:15 tight name header
414+56:21 tight glyph =
415+56:22 tight str "Name"
416+56:29 name width
417+56:34 tight glyph =
418+56:35 tight glyph [
419+56:36 tight lit %fill
420+56:42 lit 1
421+56:43 tight glyph ]
422+56:45 name align
423+56:50 tight glyph =
424+56:51 tight lit %start
425+56:57 tight glyph ]
426+56:58 tight glyph ]
427+56:60 name rows
428+56:64 tight glyph )
429+58:1 DEDENT
430+58:1 DEDENT
431+58:1 NEWLINE
432+58:1 glyph ++
433+58:4 name bad-pad
434+58:12 glyph ^-
435+58:15 glyph (
436+58:16 tight name element
437+58:24 glyph !!
438+58:26 tight glyph )
439+58:28 glyph (
440+58:29 tight name row
441+58:33 glyph ~[
442+58:35 tight name pad
443+58:38 tight glyph +
444+58:39 tight lit %s4
445+58:42 tight glyph ]
446+58:44 lit ~
447+58:45 tight glyph )
448+59:1 NEWLINE
449+59:1 glyph ++
450+59:4 name bad-width
451+59:14 glyph ^-
452+59:17 glyph (
453+59:18 tight name element
454+59:26 glyph !!
455+59:28 tight glyph )
456+59:30 glyph (
457+59:31 tight name row
458+59:35 glyph ~[
459+59:37 tight name width
460+59:42 tight glyph +
461+59:43 tight glyph [
462+59:44 tight lit %chars
463+59:51 str "wide"
464+59:57 tight glyph ]
465+59:58 tight glyph ]
466+59:60 lit ~
467+59:61 tight glyph )
468+60:1 NEWLINE
469+60:1 glyph ++
470+60:4 name malformed-each
471+60:19 glyph ^-
472+60:22 glyph (
473+60:23 tight name element
474+60:31 name msg
475+60:34 tight glyph )
476+60:36 glyph (
477+60:37 tight name each
478+60:42 glyph ~[
479+60:44 tight glyph [
480+60:45 tight name key
481+60:48 tight glyph =
482+60:49 tight str "row"
483+60:55 name kid
484+60:58 tight glyph =
485+60:59 tight glyph (
486+60:60 tight name text
487+60:65 str "child"
488+60:72 tight glyph )
489+60:73 tight glyph ]
490+60:74 tight glyph ]
491+60:75 tight glyph )
492+61:1 NEWLINE
493+61:1 glyph ++
494+61:4 name malformed-table
495+61:20 glyph ^-
496+61:23 glyph (
497+61:24 tight name element
498+61:32 name msg
499+61:35 tight glyph )
500+62:3 INDENT
501+62:3 glyph (
502+62:4 tight name table
503+62:10 glyph ~[
504+62:12 tight glyph [
505+62:13 tight name header
506+62:19 tight glyph =
507+62:20 tight str "Name"
508+62:27 name width
509+62:32 tight glyph =
510+62:33 tight lit %shrink
511+62:40 tight glyph ]
512+62:41 tight glyph ]
513+62:43 lit ~
514+62:44 tight glyph )
515+63:1 DEDENT
516+63:1 NEWLINE
517+63:1 glyph ++
518+63:4 name ship-control
519+63:17 glyph ^-
520+63:20 glyph (
521+63:21 tight name element
522+63:29 aura @p
523+63:31 tight glyph )
524+63:33 glyph (
525+63:34 tight name button
526+63:41 str "Ship"
527+63:48 lit ~zod
528+63:52 tight glyph )
529+64:1 NEWLINE
530+64:1 glyph ++
531+64:4 name text-row
532+64:13 glyph |=
533+64:16 name kids
534+64:20 tight glyph =
535+64:21 tight glyph (
536+64:22 tight name list
537+64:27 glyph (
538+64:28 tight name element
539+64:36 aura @t
540+64:38 tight glyph )
541+64:39 tight glyph )
542+64:41 glyph ^-
543+64:44 glyph (
544+64:45 tight name element
545+64:53 aura @t
546+64:55 tight glyph )
547+64:57 glyph (
548+64:58 tight name row
549+64:62 lit ~
550+64:64 name kids
551+64:68 tight glyph )
552+65:1 NEWLINE
553+65:1 glyph ++
554+65:4 name bad-child
555+65:14 glyph (
556+65:15 tight name text-row
557+65:24 glyph ~[
558+65:26 tight name ship-control
559+65:38 tight glyph ]
560+65:39 tight glyph )
561+67:1 NEWLINE
562+67:1 glyph ++
563+67:4 name init
564+67:9 glyph |=
565+67:12 name input
566+67:17 tight glyph =
567+67:18 tight aura @t
568+67:21 glyph ^-
569+67:24 name model
570+67:30 glyph [
571+67:31 tight name count
572+67:36 tight glyph =
573+67:37 tight lit 0
574+67:38 tight glyph ]
575+68:1 NEWLINE
576+68:1 glyph ++
577+68:4 name update
578+68:11 glyph |=
579+68:14 glyph [
580+68:15 tight name message
581+68:22 tight glyph =
582+68:23 tight name msg
583+68:27 name state
584+68:32 tight glyph =
585+68:33 tight name model
586+68:38 tight glyph ]
587+69:3 INDENT
588+69:3 glyph ^-
589+69:6 glyph [
590+69:7 tight name model
591+69:13 glyph (
592+69:14 tight name list
593+69:19 glyph (
594+69:20 tight name cmd
595+69:24 name msg
596+69:27 tight glyph )
597+69:28 tight glyph )
598+69:29 tight glyph ]
599+69:31 glyph [
600+69:32 tight name state
601+69:38 lit ~
602+69:39 tight glyph ]
603+70:1 DEDENT
604+70:1 NEWLINE
605+70:1 glyph ++
606+70:4 name view
607+70:9 glyph |=
608+70:12 name state
609+70:17 tight glyph =
610+70:18 tight name model
611+70:24 glyph ^-
612+70:27 glyph (
613+70:28 tight name element
614+70:36 name msg
615+70:39 tight glyph )
616+70:41 glyph (
617+70:42 tight name controls
618+70:50 tight glyph )
619+71:1 NEWLINE
620+71:1 glyph ++
621+71:4 name subs
622+71:9 glyph |=
623+71:12 name state
624+71:17 tight glyph =
625+71:18 tight name model
626+71:24 glyph ^-
627+71:27 glyph (
628+71:28 tight name list
629+71:33 glyph (
630+71:34 tight name sub
631+71:38 name msg
632+71:41 tight glyph )
633+71:42 tight glyph )
634+71:44 lit ~
635+72:1 NEWLINE
636+72:1 glyph ++
637+72:4 name concrete-program
638+72:21 glyph ^-
639+72:24 glyph (
640+72:25 tight name program
641+72:33 aura @t
642+72:36 name model
643+72:42 name msg
644+72:45 tight glyph )
645+72:47 glyph (
646+72:48 tight name program
647+72:56 name init
648+72:61 name update
649+72:68 name view
650+72:73 name subs
651+72:77 tight glyph )
652+73:1 NEWLINE
653+73:1 glyph ++
654+73:4 name embedded
655+73:13 glyph ^-
656+73:16 glyph (
657+73:17 tight name element
658+73:25 glyph !!
659+73:27 tight glyph )
660+73:29 glyph (
661+73:30 tight name island
662+73:37 name concrete-program
663+73:54 str "seed"
664+73:60 tight glyph )
665+74:1 NEWLINE
666+74:1 glyph ++
667+74:4 name mismatched-island-data
668+74:27 glyph ^-
669+74:30 glyph (
670+74:31 tight name element
671+74:39 glyph !!
672+74:41 tight glyph )
673+74:43 glyph (
674+74:44 tight name island
675+74:51 name concrete-program
676+74:68 lit ~zod
677+74:72 tight glyph )
678+76:1 NEWLINE
679+76:1 glyph ++
680+76:4 name load
681+76:9 glyph |=
682+76:12 name route
683+76:17 tight glyph =
684+76:18 tight aura @t
685+76:21 glyph ^-
686+76:24 glyph (
687+76:25 tight name ask
688+76:29 name model
689+76:34 tight glyph )
690+76:36 glyph (
691+76:37 tight name pure
692+76:42 glyph [
693+76:43 tight name count
694+76:48 tight glyph =
695+76:49 tight lit 0
696+76:50 tight glyph ]
697+76:51 tight glyph )
698+77:1 NEWLINE
699+77:1 glyph ++
700+77:4 name page-view
701+77:14 glyph |=
702+77:17 name data
703+77:21 tight glyph =
704+77:22 tight name model
705+77:28 glyph ^-
706+77:31 glyph (
707+77:32 tight name element
708+77:40 glyph !!
709+77:42 tight glyph )
710+77:44 glyph (
711+77:45 tight name text
712+77:50 str "page"
713+77:56 tight glyph )
714+78:1 NEWLINE
715+78:1 glyph ++
716+78:4 name static-page
717+78:16 glyph ^-
718+78:19 glyph (
719+78:20 tight name page
720+78:25 aura @t
721+78:28 name model
722+78:33 tight glyph )
723+78:35 glyph (
724+78:36 tight name page
725+78:41 name load
726+78:46 name page-view
727+78:55 tight glyph )
728+78:56 NEWLINE
tests/golden/types-prelude-ui/tree.txtnew file+300
@@ -0,0 +1,300 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (const 2:3 %save)
5+ (const 3:3 %toggle)
6+ (cell 4:3
7+ (const 4:4 %edited)
8+ (face 4:12 value (aura 4:18 @t)))))
9+ (mold 5:1 model
10+ (cell 5:10
11+ (face 5:11 count (aura 5:17 @ud))))
12+ (value 7:1 row-scheme (wing 7:15 row))
13+ (value 8:1 column-scheme (wing 8:18 column))
14+ (value 9:1 wrap-scheme (wing 9:16 wrap))
15+ (value 10:1 stack-scheme (wing 10:17 stack))
16+ (value 11:1 el-scheme (wing 11:14 el))
17+ (value 12:1 para-scheme (wing 12:16 para))
18+ (value 13:1 text-scheme (wing 13:16 text))
19+ (value 14:1 heading-scheme (wing 14:19 heading))
20+ (value 15:1 each-scheme (wing 15:16 each))
21+ (value 16:1 table-scheme (wing 16:17 table))
22+ (value 17:1 image-scheme (wing 17:17 image))
23+ (value 18:1 image-unsafe-scheme (wing 18:24 image-unsafe))
24+ (value 19:1 link-scheme (wing 19:16 link))
25+ (value 20:1 link-unsafe-scheme (wing 20:23 link-unsafe))
26+ (value 21:1 button-scheme (wing 21:18 button))
27+ (value 22:1 toggle-scheme (wing 22:18 toggle))
28+ (value 23:1 field-scheme (wing 23:17 field))
29+ (value 24:1 form-scheme (wing 24:16 form))
30+ (value 25:1 island-scheme (wing 25:18 island))
31+ (value 26:1 program-scheme (wing 26:19 program))
32+ (value 27:1 page-scheme (wing 27:16 page))
33+ (value 29:1 static-text
34+ (cast 29:16
35+ (apply 29:19 element (void 29:28))
36+ (group 29:32
37+ (call 29:33 (wing 29:33 text) (str 29:38 "hello")))))
38+ (value 30:1 raw-text
39+ (cast 30:13
40+ (apply 30:16 element (void 30:25))
41+ (group 30:29
42+ (call 30:30
43+ (wing 30:30 row)
44+ (lit 30:34 ~)
45+ (list 30:36
46+ (tuple 30:38 (lit 30:39 %text) (str 30:45 "raw")))))))
47+ (value 31:1 static-ui
48+ (cast 31:14
49+ (apply 31:17 element (void 31:26))
50+ (body 32:3
51+ (call 32:3
52+ (wing 32:3 column)
53+ (list 32:10
54+ (pair 32:12 pad (lit 32:16 %s1))
55+ (pair 32:20 gap (lit 32:24 %s2))
56+ (pair 32:28 width
57+ (tuple 32:34 (lit 32:35 %fill) (lit 32:41 1)))
58+ (pair 32:44 align (lit 32:50 %center))
59+ (pair 32:58 role (lit 32:63 %body))
60+ (pair 32:69 tone (lit 32:74 %muted)))
61+ (list 32:82
62+ (call 33:5 (wing 33:5 text) (str 33:10 "one"))
63+ (call 34:5
64+ (wing 34:5 para)
65+ (list 34:10
66+ (group 34:12
67+ (call 34:13 (wing 34:13 text) (str 34:18 "two")))))
68+ (call 35:5 (wing 35:5 heading) (lit 35:13 2) (str 35:15 "heading")))))))
69+ (value 36:1 static-media
70+ (cast 36:17
71+ (apply 36:20 element (void 36:29))
72+ (body 37:3
73+ (call 37:3
74+ (wing 37:3 stack)
75+ (list 37:9
76+ (pair 37:11 width
77+ (tuple 37:17 (lit 37:18 %chars) (lit 37:25 20))))
78+ (list 37:30
79+ (call 38:5 (wing 38:5 image) (qath 38:11 images logo.png) (str 38:29 "Logo"))
80+ (call 39:5 (wing 39:5 link) (qath 39:10 home) (str 39:17 "Home")))))))
81+ (value 40:1 unsafe-media
82+ (cast 40:17
83+ (apply 40:20 element (void 40:29))
84+ (body 41:3
85+ (call 41:3
86+ (wing 41:3 wrap)
87+ (list 41:8
88+ (pair 41:10 width (lit 41:16 %shrink))
89+ (pair 41:24 role (lit 41:29 %caption))
90+ (pair 41:38 tone (lit 41:43 %accent)))
91+ (list 41:52
92+ (call 42:5
93+ (wing 42:5 image-unsafe)
94+ (tuple 42:18
95+ (face 42:19 url (str 42:23 "https://example.com/a.png"))
96+ (face 42:51 width (lit 42:57 20))
97+ (face 42:60 height (lit 42:67 10)))
98+ (str 42:71 "Remote"))
99+ (call 43:5 (wing 43:5 link-unsafe) (str 43:17 "/elsewhere") (str 43:30 "Elsewhere")))))))
100+ (value 44:1 save-message
101+ (cast 44:17 (ref 44:20 msg) (lit 44:24 %save)))
102+ (value 45:1 toggle-message
103+ (cast 45:19 (ref 45:22 msg) (lit 45:26 %toggle)))
104+ (value 46:1 save-button
105+ (cast 46:16
106+ (apply 46:19 element (ref 46:28 msg))
107+ (group 46:33
108+ (call 46:34 (wing 46:34 button) (str 46:41 "Save") (wing 46:48 save-message)))))
109+ (value 47:1 enabled-toggle
110+ (cast 47:19
111+ (apply 47:22 element (ref 47:31 msg))
112+ (group 47:36
113+ (call 47:37 (wing 47:37 toggle) (lit 47:44 %.y) (str 47:48 "Enabled") (wing 47:58 toggle-message)))))
114+ (value 48:1 edit-message
115+ (gate 48:17
116+ (face 48:20 value (aura 48:26 @t))
117+ (cast 48:29
118+ (ref 48:32 msg)
119+ (tuple 48:36 (lit 48:37 %edited) (wing 48:45 value)))))
120+ (value 49:1 name-field
121+ (cast 49:15
122+ (apply 49:18 element (ref 49:27 msg))
123+ (group 49:32
124+ (call 49:33 (wing 49:33 field) (str 49:39 "Name") (str 49:46 "value") (wing 49:54 edit-message)))))
125+ (value 50:1 controls
126+ (cast 50:13
127+ (apply 50:16 element (ref 50:25 msg))
128+ (body 51:3
129+ (group 51:3
130+ (call 51:4
131+ (wing 51:4 form)
132+ (wing 51:9 save-message)
133+ (list 51:22 (wing 51:24 save-button) (wing 51:36 enabled-toggle) (wing 51:51 name-field)))))))
134+ (value 52:1 keyed
135+ (gate 52:10
136+ (face 52:13 items
137+ (apply 52:19 list
138+ (cell 52:25
139+ (face 52:26 key (aura 52:30 @t))
140+ (face 52:33 el
141+ (apply 52:36 element (ref 52:45 msg))))))
142+ (body 53:3
143+ (cast 53:3
144+ (apply 53:6 element (ref 53:15 msg))
145+ (group 53:20
146+ (call 53:21 (wing 53:21 each) (wing 53:26 items)))))))
147+ (value 54:1 tabular
148+ (gate 54:12
149+ (face 54:15 rows
150+ (apply 54:20 list
151+ (cell 54:26
152+ (face 54:27 key (aura 54:31 @ud))
153+ (face 54:35 cells
154+ (apply 54:41 list
155+ (apply 54:47 element (ref 54:56 msg)))))))
156+ (body 55:3
157+ (cast 55:3
158+ (apply 55:6 element (ref 55:15 msg))
159+ (body 56:5
160+ (group 56:5
161+ (call 56:6
162+ (wing 56:6 table)
163+ (list 56:12
164+ (tuple 56:14
165+ (face 56:15 header (str 56:22 "Name"))
166+ (face 56:29 width
167+ (tuple 56:35 (lit 56:36 %fill) (lit 56:42 1)))
168+ (face 56:45 align (lit 56:51 %start))))
169+ (wing 56:60 rows))))))))
170+ (value 58:1 bad-pad
171+ (cast 58:12
172+ (apply 58:15 element (void 58:24))
173+ (group 58:28
174+ (call 58:29
175+ (wing 58:29 row)
176+ (list 58:33
177+ (pair 58:35 pad (lit 58:39 %s4)))
178+ (lit 58:44 ~)))))
179+ (value 59:1 bad-width
180+ (cast 59:14
181+ (apply 59:17 element (void 59:26))
182+ (group 59:30
183+ (call 59:31
184+ (wing 59:31 row)
185+ (list 59:35
186+ (pair 59:37 width
187+ (tuple 59:43 (lit 59:44 %chars) (str 59:51 "wide"))))
188+ (lit 59:60 ~)))))
189+ (value 60:1 malformed-each
190+ (cast 60:19
191+ (apply 60:22 element (ref 60:31 msg))
192+ (group 60:36
193+ (call 60:37
194+ (wing 60:37 each)
195+ (list 60:42
196+ (tuple 60:44
197+ (face 60:45 key (str 60:49 "row"))
198+ (face 60:55 kid
199+ (group 60:59
200+ (call 60:60 (wing 60:60 text) (str 60:65 "child"))))))))))
201+ (value 61:1 malformed-table
202+ (cast 61:20
203+ (apply 61:23 element (ref 61:32 msg))
204+ (body 62:3
205+ (group 62:3
206+ (call 62:4
207+ (wing 62:4 table)
208+ (list 62:10
209+ (tuple 62:12
210+ (face 62:13 header (str 62:20 "Name"))
211+ (face 62:27 width (lit 62:33 %shrink))))
212+ (lit 62:43 ~))))))
213+ (value 63:1 ship-control
214+ (cast 63:17
215+ (apply 63:20 element (aura 63:29 @p))
216+ (group 63:33
217+ (call 63:34 (wing 63:34 button) (str 63:41 "Ship") (lit 63:48 ~zod)))))
218+ (value 64:1 text-row
219+ (gate 64:13
220+ (face 64:16 kids
221+ (apply 64:21 list
222+ (apply 64:27 element (aura 64:36 @t))))
223+ (cast 64:41
224+ (apply 64:44 element (aura 64:53 @t))
225+ (group 64:57
226+ (call 64:58 (wing 64:58 row) (lit 64:62 ~) (wing 64:64 kids))))))
227+ (value 65:1 bad-child
228+ (group 65:14
229+ (call 65:15
230+ (wing 65:15 text-row)
231+ (list 65:24 (wing 65:26 ship-control)))))
232+ (value 67:1 init
233+ (gate 67:9
234+ (face 67:12 input (aura 67:18 @t))
235+ (cast 67:21
236+ (ref 67:24 model)
237+ (tuple 67:30
238+ (face 67:31 count (lit 67:37 0))))))
239+ (value 68:1 update
240+ (gate 68:11
241+ (cell 68:14
242+ (face 68:15 message (ref 68:23 msg))
243+ (face 68:27 state (ref 68:33 model)))
244+ (body 69:3
245+ (cast 69:3
246+ (cell 69:6
247+ (ref 69:7 model)
248+ (apply 69:13 list
249+ (apply 69:19 cmd (ref 69:24 msg))))
250+ (tuple 69:31 (wing 69:32 state) (lit 69:38 ~))))))
251+ (value 70:1 view
252+ (gate 70:9
253+ (face 70:12 state (ref 70:18 model))
254+ (cast 70:24
255+ (apply 70:27 element (ref 70:36 msg))
256+ (group 70:41 (wing 70:42 controls)))))
257+ (value 71:1 subs
258+ (gate 71:9
259+ (face 71:12 state (ref 71:18 model))
260+ (cast 71:24
261+ (apply 71:27 list
262+ (apply 71:33 sub (ref 71:38 msg)))
263+ (lit 71:44 ~))))
264+ (value 72:1 concrete-program
265+ (cast 72:21
266+ (apply 72:24 program (aura 72:33 @t) (ref 72:36 model) (ref 72:42 msg))
267+ (group 72:47
268+ (call 72:48 (wing 72:48 program) (wing 72:56 init) (wing 72:61 update) (wing 72:68 view) (wing 72:73 subs)))))
269+ (value 73:1 embedded
270+ (cast 73:13
271+ (apply 73:16 element (void 73:25))
272+ (group 73:29
273+ (call 73:30 (wing 73:30 island) (wing 73:37 concrete-program) (str 73:54 "seed")))))
274+ (value 74:1 mismatched-island-data
275+ (cast 74:27
276+ (apply 74:30 element (void 74:39))
277+ (group 74:43
278+ (call 74:44 (wing 74:44 island) (wing 74:51 concrete-program) (lit 74:68 ~zod)))))
279+ (value 76:1 load
280+ (gate 76:9
281+ (face 76:12 route (aura 76:18 @t))
282+ (cast 76:21
283+ (apply 76:24 ask (ref 76:29 model))
284+ (group 76:36
285+ (call 76:37
286+ (wing 76:37 pure)
287+ (tuple 76:42
288+ (face 76:43 count (lit 76:49 0))))))))
289+ (value 77:1 page-view
290+ (gate 77:14
291+ (face 77:17 data (ref 77:22 model))
292+ (cast 77:28
293+ (apply 77:31 element (void 77:40))
294+ (group 77:44
295+ (call 77:45 (wing 77:45 text) (str 77:50 "page"))))))
296+ (value 78:1 static-page
297+ (cast 78:16
298+ (apply 78:19 page (aura 78:25 @t) (ref 78:28 model))
299+ (group 78:35
300+ (call 78:36 (wing 78:36 page) (wing 78:41 load) (wing 78:46 page-view))))))
tests/golden/types-prelude-ui/types.txtnew file+85
@@ -0,0 +1,85 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ model: not checked
4+++ row-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
5+++ column-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
6+++ wrap-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
7+++ stack-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
8+++ el-scheme: $-([attrs=(list attr) kid=(element A)] (element A))
9+++ para-scheme: $-((list (element A)) (element A))
10+++ text-scheme: $-(@t (element A))
11+++ heading-scheme: $-([level=@ud words=@t] (element A))
12+++ each-scheme: $-((list [key=A el=(element B)]) (element B))
13+++ table-scheme: $-([columns=(list [header=@t [width=length align=align]]) rows=(list [key=A cells=(list (element B))])] (element B))
14+++ image-scheme: $-([source=qath description=@t] (element A))
15+++ image-unsafe-scheme: $-([source=[url=@t [width=@ud height=@ud]] description=@t] (element A))
16+++ link-scheme: $-([target=qath label=@t] (element A))
17+++ link-unsafe-scheme: $-([target=@t label=@t] (element A))
18+++ button-scheme: $-([label=@t message=A] (element A))
19+++ toggle-scheme: $-([on=? [label=@t message=A]] (element A))
20+++ field-scheme: $-([label=@t [value=@t reply=$-(@t A)]] (element A))
21+++ form-scheme: $-([message=A kids=(list (element A))] (element A))
22+++ island-scheme: $-([p=[init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] data=A] (element !!))
23+++ program-scheme: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
24+++ page-scheme: $-([load=$-(A (ask B)) view=$-(B (element !!))] [load=$-(A (ask B)) view=$-(B (element !!))])
25+++ static-text: (element !!)
26+++ raw-text: (element !!)
27+++ static-ui: (element !!)
28+++ static-media: (element !!)
29+++ unsafe-media: (element !!)
30+++ save-message: msg
31+++ toggle-message: msg
32+++ save-button: (element msg)
33+++ enabled-toggle: (element msg)
34+++ edit-message: $-(@t msg)
35+++ name-field: (element msg)
36+++ controls: (element msg)
37+++ keyed: $-((list [key=@t el=(element msg)]) (element msg))
38+++ tabular: $-((list [key=@ud cells=(list (element msg))]) (element msg))
39+++ bad-pad: list item does not fit its expected type
40+/tests/golden/types-prelude-ui/source.jibb:58:29: expected item
41+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
42+ ^
43+/tests/golden/types-prelude-ui/source.jibb:58:35: list item
44+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
45+ ^
46+++ bad-width: list item does not fit its expected type
47+/tests/golden/types-prelude-ui/source.jibb:59:31: expected item
48+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
49+ ^
50+/tests/golden/types-prelude-ui/source.jibb:59:37: list item
51+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
52+ ^
53+++ malformed-each: list item does not fit its expected type
54+/tests/golden/types-prelude-ui/source.jibb:60:37: expected item
55+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
56+ ^
57+/tests/golden/types-prelude-ui/source.jibb:60:44: list item
58+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
59+ ^
60+++ malformed-table: list item does not fit its expected type
61+/tests/golden/types-prelude-ui/source.jibb:62:4: expected item
62+ (table ~[[header="Name" width=%shrink]] ~)
63+ ^
64+/tests/golden/types-prelude-ui/source.jibb:62:12: list item
65+ (table ~[[header="Name" width=%shrink]] ~)
66+ ^
67+++ ship-control: (element @p)
68+++ text-row: $-((list (element @t)) (element @t))
69+++ bad-child: list item constraint is not supported by partial inference
70+++ init: $-(@t [count=@ud])
71+++ update: $-([message=msg state=[count=@ud]] [count=@ud (list (cmd msg))])
72+++ view: $-([count=@ud] (element msg))
73+++ subs: $-([count=@ud] (list (sub msg)))
74+++ concrete-program: [init=$-(@t [count=@ud]) [update=$-([msg count=@ud] [count=@ud (list (cmd msg))]) [view=$-([count=@ud] (element msg)) subs=$-([count=@ud] (list (sub msg)))]]]
75+++ embedded: (element !!)
76+++ mismatched-island-data: call's sample and argument types do not unify
77+/tests/golden/types-prelude-ui/source.jibb:74:44: called gate
78+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
79+ ^
80+/tests/golden/types-prelude-ui/source.jibb:74:51: argument
81+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
82+ ^
83+++ load: $-(@t (ask [count=@ud]))
84+++ page-view: $-([count=@ud] (element !!))
85+++ static-page: [load=$-(@t (ask.internal [count=@ud])) view=$-([count=@ud] (element !!))]
tests/golden/types-prelude-zing/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Hoon's standard library regrouped, written in Jibb"; the Lists row includes section 2b.
2+tests: Source-backed zing infers empty and nested text lists, ship elements, independently generic element types and gate elements, and reports both sites for a non-list. The Jibb type is homogeneous (list (list A)) to (list A); Hoon's raw heterogeneous noun-list behavior is outside this type. This checks partial inference only; backend execution and jet recognition remain unverified.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-zing/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-zing/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ empty (zing (^- (list (list @t)) ~))
2+++ nested (zing ~[~["a" "b"] ~[] ~["c"]])
3+++ ships (zing ~[~[~zod] ~[~nec]])
4+++ generic |= xss=(list (list A)) (zing xss)
5+++ gates |= xss=(list (list $-(A B))) (zing xss)
6+++ bad (zing "not a list of lists")
tests/golden/types-prelude-zing/tokens.txtnew file+92
@@ -0,0 +1,92 @@
1+1:1 glyph ++
2+1:4 name empty
3+1:10 glyph (
4+1:11 tight name zing
5+1:16 glyph (
6+1:17 tight glyph ^-
7+1:20 glyph (
8+1:21 tight name list
9+1:26 glyph (
10+1:27 tight name list
11+1:32 aura @t
12+1:34 tight glyph )
13+1:35 tight glyph )
14+1:37 lit ~
15+1:38 tight glyph )
16+1:39 tight glyph )
17+2:1 NEWLINE
18+2:1 glyph ++
19+2:4 name nested
20+2:11 glyph (
21+2:12 tight name zing
22+2:17 glyph ~[
23+2:19 tight glyph ~[
24+2:21 tight str "a"
25+2:25 str "b"
26+2:28 tight glyph ]
27+2:30 glyph ~[
28+2:32 tight glyph ]
29+2:34 glyph ~[
30+2:36 tight str "c"
31+2:39 tight glyph ]
32+2:40 tight glyph ]
33+2:41 tight glyph )
34+3:1 NEWLINE
35+3:1 glyph ++
36+3:4 name ships
37+3:10 glyph (
38+3:11 tight name zing
39+3:16 glyph ~[
40+3:18 tight glyph ~[
41+3:20 tight lit ~zod
42+3:24 tight glyph ]
43+3:26 glyph ~[
44+3:28 tight lit ~nec
45+3:32 tight glyph ]
46+3:33 tight glyph ]
47+3:34 tight glyph )
48+4:1 NEWLINE
49+4:1 glyph ++
50+4:4 name generic
51+4:12 glyph |=
52+4:15 name xss
53+4:18 tight glyph =
54+4:19 tight glyph (
55+4:20 tight name list
56+4:25 glyph (
57+4:26 tight name list
58+4:31 tvar A
59+4:32 tight glyph )
60+4:33 tight glyph )
61+4:35 glyph (
62+4:36 tight name zing
63+4:41 name xss
64+4:44 tight glyph )
65+5:1 NEWLINE
66+5:1 glyph ++
67+5:4 name gates
68+5:10 glyph |=
69+5:13 name xss
70+5:16 tight glyph =
71+5:17 tight glyph (
72+5:18 tight name list
73+5:23 glyph (
74+5:24 tight name list
75+5:29 glyph $-(
76+5:32 tight tvar A
77+5:34 tvar B
78+5:35 tight glyph )
79+5:36 tight glyph )
80+5:37 tight glyph )
81+5:39 glyph (
82+5:40 tight name zing
83+5:45 name xss
84+5:48 tight glyph )
85+6:1 NEWLINE
86+6:1 glyph ++
87+6:4 name bad
88+6:8 glyph (
89+6:9 tight name zing
90+6:14 str "not a list of lists"
91+6:35 tight glyph )
92+6:36 NEWLINE
tests/golden/types-prelude-zing/tree.txtnew file+43
@@ -0,0 +1,43 @@
1+(module
2+ (value 1:1 empty
3+ (group 1:10
4+ (call 1:11
5+ (wing 1:11 zing)
6+ (group 1:16
7+ (cast 1:17
8+ (apply 1:20 list
9+ (apply 1:26 list (aura 1:32 @t)))
10+ (lit 1:37 ~))))))
11+ (value 2:1 nested
12+ (group 2:11
13+ (call 2:12
14+ (wing 2:12 zing)
15+ (list 2:17
16+ (list 2:19 (str 2:21 "a") (str 2:25 "b"))
17+ (list 2:30)
18+ (list 2:34 (str 2:36 "c"))))))
19+ (value 3:1 ships
20+ (group 3:10
21+ (call 3:11
22+ (wing 3:11 zing)
23+ (list 3:16
24+ (list 3:18 (lit 3:20 ~zod))
25+ (list 3:26 (lit 3:28 ~nec))))))
26+ (value 4:1 generic
27+ (gate 4:12
28+ (face 4:15 xss
29+ (apply 4:19 list
30+ (apply 4:25 list (tvar 4:31 A))))
31+ (group 4:35
32+ (call 4:36 (wing 4:36 zing) (wing 4:41 xss)))))
33+ (value 5:1 gates
34+ (gate 5:10
35+ (face 5:13 xss
36+ (apply 5:17 list
37+ (apply 5:23 list
38+ (fn 5:29 (tvar 5:32 A) (tvar 5:34 B)))))
39+ (group 5:39
40+ (call 5:40 (wing 5:40 zing) (wing 5:45 xss)))))
41+ (value 6:1 bad
42+ (group 6:8
43+ (call 6:9 (wing 6:9 zing) (str 6:14 "not a list of lists")))))
tests/golden/types-prelude-zing/types.txtnew file+13
@@ -0,0 +1,13 @@
1+partial inference; module not checked
2+++ empty: (list @t)
3+++ nested: (list @t)
4+++ ships: (list @p)
5+++ generic: $-((list (list A)) (list A))
6+++ gates: $-((list (list $-(A B))) (list $-(A B)))
7+++ bad: call's sample and argument types do not unify
8+/tests/golden/types-prelude-zing/source.jibb:6:9: called gate has type $-((list (list A)) (list A))
9+++ bad (zing "not a list of lists")
10+ ^
11+/tests/golden/types-prelude-zing/source.jibb:6:14: argument has type @t
12+++ bad (zing "not a list of lists")
13+ ^
tests/golden/types-recursion-scc-import/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= lib /ui/lib
2−++ text ^- @t (left.lib "hello")
2+++ text-value ^- @t (left.lib "hello")
33++ ship ^- @p (right.lib "hello")
tests/golden/types-recursion-scc-import/tokens.txt+7−7
@@ -6,13 +6,13 @@
661:12 tight knot lib
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph ^-
11−2:12 aura @t
12−2:15 glyph (
13−2:16 tight wing left.lib
14−2:25 str "hello"
15−2:32 tight glyph )
9+2:4 name text-value
10+2:15 glyph ^-
11+2:18 aura @t
12+2:21 glyph (
13+2:22 tight wing left.lib
14+2:31 str "hello"
15+2:38 tight glyph )
16163:1 NEWLINE
17173:1 glyph ++
18183:4 name ship
tests/golden/types-recursion-scc-import/tree.txt+5−5
@@ -1,10 +1,10 @@
11(module
22 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
4− (cast 2:9
5− (aura 2:12 @t)
6− (group 2:15
7− (call 2:16 (wing 2:16 left.lib) (str 2:25 "hello")))))
3+ (value 2:1 text-value
4+ (cast 2:15
5+ (aura 2:18 @t)
6+ (group 2:21
7+ (call 2:22 (wing 2:22 left.lib) (str 2:31 "hello")))))
88 (value 3:1 ship
99 (cast 3:9
1010 (aura 3:12 @p)
tests/golden/types-recursion-scc-import/types.txt+1−1
@@ -1,3 +1,3 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
33++ ship: @p
tests/golden/types-union-finite-context/source.jibb+1−1
@@ -35,7 +35,7 @@
3535 * %stay
3636++ binder |= x=input ^- ?
3737 ?- x
38− [%p flag text] flag
38+ [%p flag words] flag
3939 %other %.n
4040++ unresolved |= x=input ^- (list @t)
4141 ~& %pending
tests/golden/types-union-finite-context/tokens.txt+3−3
@@ -244,9 +244,9 @@
24424438:5 glyph [
24524538:6 tight lit %p
24624638:9 name flag
247−38:14 name text
248−38:18 tight glyph ]
249−38:20 name flag
247+38:14 name words
248+38:19 tight glyph ]
249+38:21 name flag
25025039:5 NEWLINE
25125139:5 lit %other
25225239:12 lit %.n
tests/golden/types-union-finite-context/tree.txt+2−2
@@ -111,8 +111,8 @@
111111 (branch 37:3
112112 (wing 37:6 x)
113113 (arm 38:5
114− (cell 38:5 (lit 38:6 %p) (bind 38:9 flag) (bind 38:14 text))
115− (wing 38:20 flag))
114+ (cell 38:5 (lit 38:6 %p) (bind 38:9 flag) (bind 38:14 words))
115+ (wing 38:21 flag))
116116 (arm 39:5 (lit 39:5 %other) (lit 39:12 %.n)))))))
117117 (value 40:1 unresolved
118118 (gate 40:15
tests/golden/types-union-finite-limit/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; Molds: the empty mold `!!` has no values.
2−tests: Whole-case matching remains available without expanding many booleans. Partial matching succeeds below the implementation's 64-alternative limit and fails closed above it; empty union cases remain unsupported rather than falsely checked.
2+tests: Whole-case matching remains available without expanding many booleans. Partial matching succeeds below the implementation's 64-alternative limit and fails closed above it; a proven empty case is excluded from coverage, allowing the only inhabited case to be matched.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-finite-limit/types.txt+1−1
@@ -7,4 +7,4 @@ partial inference; module not checked
77+$ over: cases proven disjoint; mold not checked
88++ capped: union pattern expansion needs unsupported inference
99+$ empty-msg: cases proven disjoint; mold not checked
10−++ one: sample mold is not supported by partial inference
10+++ one: $-(empty-msg @t)
tests/golden/types-union-nonwing-subject/source.jibb+13−13
@@ -8,24 +8,24 @@
88++ passthrough |= x=input x
99++ grouped |= x=input ^- (list @t)
1010 ?- (x)
11− [%item flag text] ~[text]
11+ [%item flag words] ~[words]
1212 %none ~
1313++ call |= x=input ^- (list @t)
1414 ?- (local-id x)
15− [%item flag text] ~[text]
15+ [%item flag words] ~[words]
1616 %none ~
1717++ nested |= x=input ^- result
1818 ?- (local-id (passthrough x))
19− [%item flag text] %good
19+ [%item flag words] %good
2020 %none %empty
2121++ finite |= x=input ^- (list @t)
2222 ?- (local-id x)
23− [%item %.y text] ~[text]
24− [%item %.n text] ~[]
23+ [%item %.y words] ~[words]
24+ [%item %.n words] ~[]
2525 %none ~
2626++ wrong |= x=input ^- result
2727 ?- (local-id x)
28− [%item flag text] %missing
28+ [%item flag words] %missing
2929 %none %empty
3030++ missing |= x=input ^- (list @t)
3131 ?- (local-id x)
@@ -34,7 +34,7 @@
3434 ?- (local-id x)
3535 %none ~
3636 %none ~
37− [%item flag text] ~[text]
37+ [%item flag words] ~[words]
3838++ shadow |= x=input ^- result
3939 ?- (local-id x)
4040 [%item flag same] %good
@@ -42,19 +42,19 @@
4242++ pending |= x=input ^- result
4343 ~& %dangling
4444 ?- (local-id x)
45− [%item flag text] %good
45+ [%item flag words] %good
4646 %none %empty
4747++ unknown |= x ^- (list @t)
4848 ?- (local-id x)
49− [%item flag text] ~[text]
49+ [%item flag words] ~[words]
5050 %none ~
5151++ nonunion |= x=@t ^- (list @t)
5252 ?- (local-id x)
53− [%item flag text] ~[text]
53+ [%item flag words] ~[words]
5454 %none ~
5555++ explicit |= [x=input y=A] ^- (list A)
5656 ?- (local-id x)
57− [%item flag text] ~["text"]
57+ [%item flag words] ~["text"]
5858 %none ~
5959+$ payload |$ [A]
6060 [%present value=A]
@@ -65,12 +65,12 @@
6565 %none ~
6666++ bad-subject |= x=input ^- result
6767 ?- (passthrough "wrong")
68− [%item flag text] %missing
68+ [%item flag words] %missing
6969 %none %empty
7070++ first-of |= [a b] a
7171++ pending-subject |= x=input ^- result
7272 ?- (first-of x %dangling)
73− [%item flag text] %good
73+ [%item flag words] %good
7474 %none %empty
7575++ duplicate-flag-subject |= x=@t ^- (list @t)
7676 ?- (passthrough x)
tests/golden/types-union-nonwing-subject/tokens.txt+54−54
@@ -56,11 +56,11 @@
565611:5 glyph [
575711:6 tight lit %item
585811:12 name flag
59−11:17 name text
60−11:21 tight glyph ]
61−11:23 glyph ~[
62−11:25 tight name text
63−11:29 tight glyph ]
59+11:17 name words
60+11:22 tight glyph ]
61+11:24 glyph ~[
62+11:26 tight name words
63+11:31 tight glyph ]
646412:5 NEWLINE
656512:5 lit %none
666612:11 lit ~
@@ -88,11 +88,11 @@
888815:5 glyph [
898915:6 tight lit %item
909015:12 name flag
91−15:17 name text
92−15:21 tight glyph ]
93−15:23 glyph ~[
94−15:25 tight name text
95−15:29 tight glyph ]
91+15:17 name words
92+15:22 tight glyph ]
93+15:24 glyph ~[
94+15:26 tight name words
95+15:31 tight glyph ]
969616:5 NEWLINE
979716:5 lit %none
989816:11 lit ~
@@ -120,9 +120,9 @@
12012019:5 glyph [
12112119:6 tight lit %item
12212219:12 name flag
123−19:17 name text
124−19:21 tight glyph ]
125−19:23 lit %good
123+19:17 name words
124+19:22 tight glyph ]
125+19:24 lit %good
12612620:5 NEWLINE
12712720:5 lit %none
12812820:11 lit %empty
@@ -150,19 +150,19 @@
15015023:5 glyph [
15115123:6 tight lit %item
15215223:12 lit %.y
153−23:16 name text
154−23:20 tight glyph ]
155−23:22 glyph ~[
156−23:24 tight name text
157−23:28 tight glyph ]
153+23:16 name words
154+23:21 tight glyph ]
155+23:23 glyph ~[
156+23:25 tight name words
157+23:30 tight glyph ]
15815824:5 NEWLINE
15915924:5 glyph [
16016024:6 tight lit %item
16116124:12 lit %.n
162−24:16 name text
163−24:20 tight glyph ]
164−24:22 glyph ~[
165−24:24 tight glyph ]
162+24:16 name words
163+24:21 tight glyph ]
164+24:23 glyph ~[
165+24:25 tight glyph ]
16616625:5 NEWLINE
16716725:5 lit %none
16816825:11 lit ~
@@ -187,9 +187,9 @@
18718728:5 glyph [
18818828:6 tight lit %item
18918928:12 name flag
190−28:17 name text
191−28:21 tight glyph ]
192−28:23 lit %missing
190+28:17 name words
191+28:22 tight glyph ]
192+28:24 lit %missing
19319329:5 NEWLINE
19419429:5 lit %none
19519529:11 lit %empty
@@ -246,11 +246,11 @@
24624637:5 glyph [
24724737:6 tight lit %item
24824837:12 name flag
249−37:17 name text
250−37:21 tight glyph ]
251−37:23 glyph ~[
252−37:25 tight name text
253−37:29 tight glyph ]
249+37:17 name words
250+37:22 tight glyph ]
251+37:24 glyph ~[
252+37:26 tight name words
253+37:31 tight glyph ]
25425438:1 DEDENT
25525538:1 DEDENT
25625638:1 NEWLINE
@@ -302,9 +302,9 @@
30230245:7 glyph [
30330345:8 tight lit %item
30430445:14 name flag
305−45:19 name text
306−45:23 tight glyph ]
307−45:25 lit %good
305+45:19 name words
306+45:24 tight glyph ]
307+45:26 lit %good
30830846:7 NEWLINE
30930946:7 lit %none
31031046:13 lit %empty
@@ -331,11 +331,11 @@
33133149:5 glyph [
33233249:6 tight lit %item
33333349:12 name flag
334−49:17 name text
335−49:21 tight glyph ]
336−49:23 glyph ~[
337−49:25 tight name text
338−49:29 tight glyph ]
334+49:17 name words
335+49:22 tight glyph ]
336+49:24 glyph ~[
337+49:26 tight name words
338+49:31 tight glyph ]
33933950:5 NEWLINE
34034050:5 lit %none
34134150:11 lit ~
@@ -363,11 +363,11 @@
36336353:5 glyph [
36436453:6 tight lit %item
36536553:12 name flag
366−53:17 name text
367−53:21 tight glyph ]
368−53:23 glyph ~[
369−53:25 tight name text
370−53:29 tight glyph ]
366+53:17 name words
367+53:22 tight glyph ]
368+53:24 glyph ~[
369+53:26 tight name words
370+53:31 tight glyph ]
37137154:5 NEWLINE
37237254:5 lit %none
37337354:11 lit ~
@@ -400,11 +400,11 @@
40040057:5 glyph [
40140157:6 tight lit %item
40240257:12 name flag
403−57:17 name text
404−57:21 tight glyph ]
405−57:23 glyph ~[
406−57:25 tight str "text"
407−57:31 tight glyph ]
403+57:17 name words
404+57:22 tight glyph ]
405+57:24 glyph ~[
406+57:26 tight str "text"
407+57:32 tight glyph ]
40840858:5 NEWLINE
40940958:5 lit %none
41041058:11 lit ~
@@ -486,9 +486,9 @@
48648668:5 glyph [
48748768:6 tight lit %item
48848868:12 name flag
489−68:17 name text
490−68:21 tight glyph ]
491−68:23 lit %missing
489+68:17 name words
490+68:22 tight glyph ]
491+68:24 lit %missing
49249269:5 NEWLINE
49349369:5 lit %none
49449469:11 lit %empty
@@ -523,9 +523,9 @@
52352373:5 glyph [
52452473:6 tight lit %item
52552573:12 name flag
526−73:17 name text
527−73:21 tight glyph ]
528−73:23 lit %good
526+73:17 name words
527+73:22 tight glyph ]
528+73:24 lit %good
52952974:5 NEWLINE
53053074:5 lit %none
53153174:11 lit %empty
tests/golden/types-union-nonwing-subject/tree.txt+26−26
@@ -23,8 +23,8 @@
2323 (branch 10:3
2424 (group 10:6 (wing 10:7 x))
2525 (arm 11:5
26− (cell 11:5 (lit 11:6 %item) (bind 11:12 flag) (bind 11:17 text))
27− (list 11:23 (wing 11:25 text)))
26+ (cell 11:5 (lit 11:6 %item) (bind 11:12 flag) (bind 11:17 words))
27+ (list 11:24 (wing 11:26 words)))
2828 (arm 12:5 (lit 12:5 %none) (lit 12:11 ~)))))))
2929 (value 13:1 call
3030 (gate 13:9
@@ -36,8 +36,8 @@
3636 (group 14:6
3737 (call 14:7 (wing 14:7 local-id) (wing 14:16 x)))
3838 (arm 15:5
39− (cell 15:5 (lit 15:6 %item) (bind 15:12 flag) (bind 15:17 text))
40− (list 15:23 (wing 15:25 text)))
39+ (cell 15:5 (lit 15:6 %item) (bind 15:12 flag) (bind 15:17 words))
40+ (list 15:24 (wing 15:26 words)))
4141 (arm 16:5 (lit 16:5 %none) (lit 16:11 ~)))))))
4242 (value 17:1 nested
4343 (gate 17:11
@@ -52,8 +52,8 @@
5252 (group 18:16
5353 (call 18:17 (wing 18:17 passthrough) (wing 18:29 x)))))
5454 (arm 19:5
55− (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 text))
56− (lit 19:23 %good))
55+ (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 words))
56+ (lit 19:24 %good))
5757 (arm 20:5 (lit 20:5 %none) (lit 20:11 %empty)))))))
5858 (value 21:1 finite
5959 (gate 21:11
@@ -65,11 +65,11 @@
6565 (group 22:6
6666 (call 22:7 (wing 22:7 local-id) (wing 22:16 x)))
6767 (arm 23:5
68− (cell 23:5 (lit 23:6 %item) (lit 23:12 %.y) (bind 23:16 text))
69− (list 23:22 (wing 23:24 text)))
68+ (cell 23:5 (lit 23:6 %item) (lit 23:12 %.y) (bind 23:16 words))
69+ (list 23:23 (wing 23:25 words)))
7070 (arm 24:5
71− (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 text))
72− (list 24:22))
71+ (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 words))
72+ (list 24:23))
7373 (arm 25:5 (lit 25:5 %none) (lit 25:11 ~)))))))
7474 (value 26:1 wrong
7575 (gate 26:10
@@ -81,8 +81,8 @@
8181 (group 27:6
8282 (call 27:7 (wing 27:7 local-id) (wing 27:16 x)))
8383 (arm 28:5
84− (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 text))
85− (lit 28:23 %missing))
84+ (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 words))
85+ (lit 28:24 %missing))
8686 (arm 29:5 (lit 29:5 %none) (lit 29:11 %empty)))))))
8787 (value 30:1 missing
8888 (gate 30:12
@@ -106,8 +106,8 @@
106106 (arm 35:5 (lit 35:5 %none) (lit 35:11 ~))
107107 (arm 36:5 (lit 36:5 %none) (lit 36:11 ~))
108108 (arm 37:5
109− (cell 37:5 (lit 37:6 %item) (bind 37:12 flag) (bind 37:17 text))
110− (list 37:23 (wing 37:25 text))))))))
109+ (cell 37:5 (lit 37:6 %item) (bind 37:12 flag) (bind 37:17 words))
110+ (list 37:24 (wing 37:26 words))))))))
111111 (value 38:1 shadow
112112 (gate 38:11
113113 (face 38:14 x (ref 38:16 input))
@@ -134,8 +134,8 @@
134134 (group 44:8
135135 (call 44:9 (wing 44:9 local-id) (wing 44:18 x)))
136136 (arm 45:7
137− (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 text))
138− (lit 45:25 %good))
137+ (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 words))
138+ (lit 45:26 %good))
139139 (arm 46:7 (lit 46:7 %none) (lit 46:13 %empty)))))))))
140140 (value 47:1 unknown
141141 (gate 47:12
@@ -147,8 +147,8 @@
147147 (group 48:6
148148 (call 48:7 (wing 48:7 local-id) (wing 48:16 x)))
149149 (arm 49:5
150− (cell 49:5 (lit 49:6 %item) (bind 49:12 flag) (bind 49:17 text))
151− (list 49:23 (wing 49:25 text)))
150+ (cell 49:5 (lit 49:6 %item) (bind 49:12 flag) (bind 49:17 words))
151+ (list 49:24 (wing 49:26 words)))
152152 (arm 50:5 (lit 50:5 %none) (lit 50:11 ~)))))))
153153 (value 51:1 nonunion
154154 (gate 51:13
@@ -160,8 +160,8 @@
160160 (group 52:6
161161 (call 52:7 (wing 52:7 local-id) (wing 52:16 x)))
162162 (arm 53:5
163− (cell 53:5 (lit 53:6 %item) (bind 53:12 flag) (bind 53:17 text))
164− (list 53:23 (wing 53:25 text)))
163+ (cell 53:5 (lit 53:6 %item) (bind 53:12 flag) (bind 53:17 words))
164+ (list 53:24 (wing 53:26 words)))
165165 (arm 54:5 (lit 54:5 %none) (lit 54:11 ~)))))))
166166 (value 55:1 explicit
167167 (gate 55:13
@@ -175,8 +175,8 @@
175175 (group 56:6
176176 (call 56:7 (wing 56:7 local-id) (wing 56:16 x)))
177177 (arm 57:5
178− (cell 57:5 (lit 57:6 %item) (bind 57:12 flag) (bind 57:17 text))
179− (list 57:23 (str 57:25 "text")))
178+ (cell 57:5 (lit 57:6 %item) (bind 57:12 flag) (bind 57:17 words))
179+ (list 57:24 (str 57:26 "text")))
180180 (arm 58:5 (lit 58:5 %none) (lit 58:11 ~)))))))
181181 (mold 59:1 payload
182182 (generic 59:12 A
@@ -211,8 +211,8 @@
211211 (group 67:6
212212 (call 67:7 (wing 67:7 passthrough) (str 67:19 "wrong")))
213213 (arm 68:5
214− (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 text))
215− (lit 68:23 %missing))
214+ (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 words))
215+ (lit 68:24 %missing))
216216 (arm 69:5 (lit 69:5 %none) (lit 69:11 %empty)))))))
217217 (value 70:1 first-of
218218 (gate 70:13
@@ -228,8 +228,8 @@
228228 (group 72:6
229229 (call 72:7 (wing 72:7 first-of) (wing 72:16 x) (lit 72:18 %dangling)))
230230 (arm 73:5
231− (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 text))
232− (lit 73:23 %good))
231+ (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 words))
232+ (lit 73:24 %good))
233233 (arm 74:5 (lit 74:5 %none) (lit 74:11 %empty)))))))
234234 (value 75:1 duplicate-flag-subject
235235 (gate 75:27
tests/golden/types-union-nonwing-subject/types.txt+3−3
@@ -11,9 +11,9 @@ partial inference; module not checked
1111/tests/golden/types-union-nonwing-subject/source.jibb:26:24: expected union
1212++ wrong |= x=input ^- result
1313 ^
14−/tests/golden/types-union-nonwing-subject/source.jibb:28:23: tag
15− [%item flag text] %missing
16− ^
14+/tests/golden/types-union-nonwing-subject/source.jibb:28:24: tag
15+ [%item flag words] %missing
16+ ^
1717++ missing: missing union case [%item [flag=? text=@t]]
1818++ dead: branch arm is covered by earlier arms
1919/tests/golden/types-union-nonwing-subject/source.jibb:36:5: covered arm
tests/golden/types-union-runtime-equality/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Molds: union cases differ as nouns; `?` is the two loobean atoms, and `!!` is empty.
2+tests: Nested equal zero nouns with different auras overlap; a loobean case contains `%.n`; ancestor and descendant atom auras overlap. An empty nested field makes a case disjoint. Different outer tags remain disjoint even when their nested zero nouns are equal.
3+expect-types: partial mold analysis with both sites of definite overlaps; `keep` infers for the distinct-tag mold. The report does not establish that the other molds or the module are checked.
tests/golden/types-union-runtime-equality/source.jibbnew file+16
@@ -0,0 +1,16 @@
1++$ mixed-zero
2+ [%tag [%.y @t]]
3+ [%tag [%$ @p]]
4++$ flag-one
5+ [%tag ?]
6+ [%tag %.n]
7++$ aura-family
8+ [%tag @ta]
9+ [%tag @t]
10++$ empty-field
11+ [%tag [!! @t]]
12+ [%tag [* @p]]
13++$ distinct-tags
14+ [%left [%.y @t]]
15+ [%right [%$ @p]]
16+++ keep |= x=distinct-tags x
tests/golden/types-union-runtime-equality/tokens.txtnew file+96
@@ -0,0 +1,96 @@
1+1:1 glyph +$
2+1:4 name mixed-zero
3+2:3 INDENT
4+2:3 glyph [
5+2:4 tight lit %tag
6+2:9 glyph [
7+2:10 tight lit %.y
8+2:14 aura @t
9+2:16 tight glyph ]
10+2:17 tight glyph ]
11+3:3 NEWLINE
12+3:3 glyph [
13+3:4 tight lit %tag
14+3:9 glyph [
15+3:10 tight lit %$
16+3:13 aura @p
17+3:15 tight glyph ]
18+3:16 tight glyph ]
19+4:1 DEDENT
20+4:1 NEWLINE
21+4:1 glyph +$
22+4:4 name flag-one
23+5:3 INDENT
24+5:3 glyph [
25+5:4 tight lit %tag
26+5:9 glyph ?
27+5:10 tight glyph ]
28+6:3 NEWLINE
29+6:3 glyph [
30+6:4 tight lit %tag
31+6:9 lit %.n
32+6:12 tight glyph ]
33+7:1 DEDENT
34+7:1 NEWLINE
35+7:1 glyph +$
36+7:4 name aura-family
37+8:3 INDENT
38+8:3 glyph [
39+8:4 tight lit %tag
40+8:9 aura @ta
41+8:12 tight glyph ]
42+9:3 NEWLINE
43+9:3 glyph [
44+9:4 tight lit %tag
45+9:9 aura @t
46+9:11 tight glyph ]
47+10:1 DEDENT
48+10:1 NEWLINE
49+10:1 glyph +$
50+10:4 name empty-field
51+11:3 INDENT
52+11:3 glyph [
53+11:4 tight lit %tag
54+11:9 glyph [
55+11:10 tight glyph !!
56+11:13 aura @t
57+11:15 tight glyph ]
58+11:16 tight glyph ]
59+12:3 NEWLINE
60+12:3 glyph [
61+12:4 tight lit %tag
62+12:9 glyph [
63+12:10 tight glyph *
64+12:12 aura @p
65+12:14 tight glyph ]
66+12:15 tight glyph ]
67+13:1 DEDENT
68+13:1 NEWLINE
69+13:1 glyph +$
70+13:4 name distinct-tags
71+14:3 INDENT
72+14:3 glyph [
73+14:4 tight lit %left
74+14:10 glyph [
75+14:11 tight lit %.y
76+14:15 aura @t
77+14:17 tight glyph ]
78+14:18 tight glyph ]
79+15:3 NEWLINE
80+15:3 glyph [
81+15:4 tight lit %right
82+15:11 glyph [
83+15:12 tight lit %$
84+15:15 aura @p
85+15:17 tight glyph ]
86+15:18 tight glyph ]
87+16:1 DEDENT
88+16:1 NEWLINE
89+16:1 glyph ++
90+16:4 name keep
91+16:9 glyph |=
92+16:12 name x
93+16:13 tight glyph =
94+16:14 tight name distinct-tags
95+16:28 name x
96+16:29 NEWLINE
tests/golden/types-union-runtime-equality/tree.txtnew file+37
@@ -0,0 +1,37 @@
1+(module
2+ (mold 1:1 mixed-zero
3+ (union 2:3
4+ (cell 2:3
5+ (const 2:4 %tag)
6+ (cell 2:9 (const 2:10 %.y) (aura 2:14 @t)))
7+ (cell 3:3
8+ (const 3:4 %tag)
9+ (cell 3:9 (const 3:10 %$) (aura 3:13 @p)))))
10+ (mold 4:1 flag-one
11+ (union 5:3
12+ (cell 5:3 (const 5:4 %tag) (flag 5:9))
13+ (cell 6:3 (const 6:4 %tag) (const 6:9 %.n))))
14+ (mold 7:1 aura-family
15+ (union 8:3
16+ (cell 8:3 (const 8:4 %tag) (aura 8:9 @ta))
17+ (cell 9:3 (const 9:4 %tag) (aura 9:9 @t))))
18+ (mold 10:1 empty-field
19+ (union 11:3
20+ (cell 11:3
21+ (const 11:4 %tag)
22+ (cell 11:9 (void 11:10) (aura 11:13 @t)))
23+ (cell 12:3
24+ (const 12:4 %tag)
25+ (cell 12:9 (noun 12:10) (aura 12:12 @p)))))
26+ (mold 13:1 distinct-tags
27+ (union 14:3
28+ (cell 14:3
29+ (const 14:4 %left)
30+ (cell 14:10 (const 14:11 %.y) (aura 14:15 @t)))
31+ (cell 15:3
32+ (const 15:4 %right)
33+ (cell 15:11 (const 15:12 %$) (aura 15:15 @p)))))
34+ (value 16:1 keep
35+ (gate 16:9
36+ (face 16:12 x (ref 16:14 distinct-tags))
37+ (wing 16:28 x))))
tests/golden/types-union-runtime-equality/types.txtnew file+25
@@ -0,0 +1,25 @@
1+partial inference; module not checked
2++$ mixed-zero: overlapping cases; mold not checked
3+/tests/golden/types-union-runtime-equality/source.jibb:2:3: first union case
4+ [%tag [%.y @t]]
5+ ^
6+/tests/golden/types-union-runtime-equality/source.jibb:3:3: overlapping case
7+ [%tag [%$ @p]]
8+ ^
9++$ flag-one: overlapping cases; mold not checked
10+/tests/golden/types-union-runtime-equality/source.jibb:5:3: first union case
11+ [%tag ?]
12+ ^
13+/tests/golden/types-union-runtime-equality/source.jibb:6:3: overlapping case
14+ [%tag %.n]
15+ ^
16++$ aura-family: overlapping cases; mold not checked
17+/tests/golden/types-union-runtime-equality/source.jibb:8:3: first union case
18+ [%tag @ta]
19+ ^
20+/tests/golden/types-union-runtime-equality/source.jibb:9:3: overlapping case
21+ [%tag @t]
22+ ^
23++$ empty-field: cases proven disjoint; mold not checked
24++$ distinct-tags: cases proven disjoint; mold not checked
25+++ keep: $-(distinct-tags distinct-tags)
tests/golden/types-union-source-alias/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Unions: "Cases must differ as nouns"; Grammar, Generic molds.
2+tests: A one-hop local generic alias with a literal head is proven disjoint from a different head, including with outer generic parameters. Same-head and equal-noun zero spellings with overlapping payloads report both case sites; this partial report does not claim the full module is checked.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-union-source-alias/source.jibbnew file+18
@@ -0,0 +1,18 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
5+++ id |= x=choice x
6++$ poly |$ [A B]
7+ (tagged A)
8+ [%second B]
9+++ typed |= x=(poly @t @p) x
10++$ same
11+ (tagged @t)
12+ [%wrapped @p]
13+++ collide |= x=same x
14++$ zero |$ [A] [%.y A]
15++$ same-zero
16+ (zero @t)
17+ [%$ @p]
18+++ collide-zero |= x=same-zero x
tests/golden/types-union-source-alias/tokens.txtnew file+119
@@ -0,0 +1,119 @@
1+1:1 glyph +$
2+1:4 name tagged
3+1:11 glyph |$
4+1:14 glyph [
5+1:15 tight tvar A
6+1:16 tight glyph ]
7+1:18 glyph [
8+1:19 tight lit %wrapped
9+1:28 tvar A
10+1:29 tight glyph ]
11+2:1 NEWLINE
12+2:1 glyph +$
13+2:4 name choice
14+3:3 INDENT
15+3:3 glyph (
16+3:4 tight name tagged
17+3:11 aura @t
18+3:13 tight glyph )
19+4:3 NEWLINE
20+4:3 glyph [
21+4:4 tight lit %other
22+4:11 aura @p
23+4:13 tight glyph ]
24+5:1 DEDENT
25+5:1 NEWLINE
26+5:1 glyph ++
27+5:4 name id
28+5:7 glyph |=
29+5:10 name x
30+5:11 tight glyph =
31+5:12 tight name choice
32+5:19 name x
33+6:1 NEWLINE
34+6:1 glyph +$
35+6:4 name poly
36+6:9 glyph |$
37+6:12 glyph [
38+6:13 tight tvar A
39+6:15 tvar B
40+6:16 tight glyph ]
41+7:3 INDENT
42+7:3 glyph (
43+7:4 tight name tagged
44+7:11 tvar A
45+7:12 tight glyph )
46+8:3 NEWLINE
47+8:3 glyph [
48+8:4 tight lit %second
49+8:12 tvar B
50+8:13 tight glyph ]
51+9:1 DEDENT
52+9:1 NEWLINE
53+9:1 glyph ++
54+9:4 name typed
55+9:10 glyph |=
56+9:13 name x
57+9:14 tight glyph =
58+9:15 tight glyph (
59+9:16 tight name poly
60+9:21 aura @t
61+9:24 aura @p
62+9:26 tight glyph )
63+9:28 name x
64+10:1 NEWLINE
65+10:1 glyph +$
66+10:4 name same
67+11:3 INDENT
68+11:3 glyph (
69+11:4 tight name tagged
70+11:11 aura @t
71+11:13 tight glyph )
72+12:3 NEWLINE
73+12:3 glyph [
74+12:4 tight lit %wrapped
75+12:13 aura @p
76+12:15 tight glyph ]
77+13:1 DEDENT
78+13:1 NEWLINE
79+13:1 glyph ++
80+13:4 name collide
81+13:12 glyph |=
82+13:15 name x
83+13:16 tight glyph =
84+13:17 tight name same
85+13:22 name x
86+14:1 NEWLINE
87+14:1 glyph +$
88+14:4 name zero
89+14:9 glyph |$
90+14:12 glyph [
91+14:13 tight tvar A
92+14:14 tight glyph ]
93+14:16 glyph [
94+14:17 tight lit %.y
95+14:21 tvar A
96+14:22 tight glyph ]
97+15:1 NEWLINE
98+15:1 glyph +$
99+15:4 name same-zero
100+16:3 INDENT
101+16:3 glyph (
102+16:4 tight name zero
103+16:9 aura @t
104+16:11 tight glyph )
105+17:3 NEWLINE
106+17:3 glyph [
107+17:4 tight lit %$
108+17:7 aura @p
109+17:9 tight glyph ]
110+18:1 DEDENT
111+18:1 NEWLINE
112+18:1 glyph ++
113+18:4 name collide-zero
114+18:17 glyph |=
115+18:20 name x
116+18:21 tight glyph =
117+18:22 tight name same-zero
118+18:32 name x
119+18:33 NEWLINE
tests/golden/types-union-source-alias/tree.txtnew file+41
@@ -0,0 +1,41 @@
1+(module
2+ (mold 1:1 tagged
3+ (generic 1:11 A
4+ (cell 1:18 (const 1:19 %wrapped) (tvar 1:28 A))))
5+ (mold 2:1 choice
6+ (union 3:3
7+ (apply 3:3 tagged (aura 3:11 @t))
8+ (cell 4:3 (const 4:4 %other) (aura 4:11 @p))))
9+ (value 5:1 id
10+ (gate 5:7
11+ (face 5:10 x (ref 5:12 choice))
12+ (wing 5:19 x)))
13+ (mold 6:1 poly
14+ (generic 6:9 A B
15+ (union 7:3
16+ (apply 7:3 tagged (tvar 7:11 A))
17+ (cell 8:3 (const 8:4 %second) (tvar 8:12 B)))))
18+ (value 9:1 typed
19+ (gate 9:10
20+ (face 9:13 x
21+ (apply 9:15 poly (aura 9:21 @t) (aura 9:24 @p)))
22+ (wing 9:28 x)))
23+ (mold 10:1 same
24+ (union 11:3
25+ (apply 11:3 tagged (aura 11:11 @t))
26+ (cell 12:3 (const 12:4 %wrapped) (aura 12:13 @p))))
27+ (value 13:1 collide
28+ (gate 13:12
29+ (face 13:15 x (ref 13:17 same))
30+ (wing 13:22 x)))
31+ (mold 14:1 zero
32+ (generic 14:9 A
33+ (cell 14:16 (const 14:17 %.y) (tvar 14:21 A))))
34+ (mold 15:1 same-zero
35+ (union 16:3
36+ (apply 16:3 zero (aura 16:9 @t))
37+ (cell 17:3 (const 17:4 %$) (aura 17:7 @p))))
38+ (value 18:1 collide-zero
39+ (gate 18:17
40+ (face 18:20 x (ref 18:22 same-zero))
41+ (wing 18:32 x))))
tests/golden/types-union-source-alias/types.txtnew file+23
@@ -0,0 +1,23 @@
1+partial inference; module not checked
2++$ tagged: not checked
3++$ choice: cases proven disjoint; mold not checked
4+++ id: $-(choice choice)
5++$ poly: cases proven disjoint; mold not checked
6+++ typed: $-((poly @t @p) (poly @t @p))
7++$ same: overlapping cases; mold not checked
8+/tests/golden/types-union-source-alias/source.jibb:11:3: first union case
9+ (tagged @t)
10+ ^
11+/tests/golden/types-union-source-alias/source.jibb:12:3: overlapping case
12+ [%wrapped @p]
13+ ^
14+++ collide: sample mold is not supported by partial inference
15++$ zero: not checked
16++$ same-zero: overlapping cases; mold not checked
17+/tests/golden/types-union-source-alias/source.jibb:16:3: first union case
18+ (zero @t)
19+ ^
20+/tests/golden/types-union-source-alias/source.jibb:17:3: overlapping case
21+ [%$ @p]
22+ ^
23+++ collide-zero: sample mold is not supported by partial inference
tests/golden/types-unit-context/source.jibb+3−3
@@ -16,8 +16,8 @@
1616++ accept |= x=(unit msg) x
1717++ call (accept `%stay)
1818++ bad-call (accept `%bad)
19−++ field ^- record [`%go ~[`"hi"]]
20−++ field-bad ^- record [`%bad ~[`"hi"]]
19+++ field-value ^- record [`%go ~[`"hi"]]
20+++ field-value-bad ^- record [`%bad ~[`"hi"]]
2121++ mimic-mismatch ^- (mimic @t) `"hi"
2222++ without-context `%go
2323++ pending
@@ -31,7 +31,7 @@
3131+$ alt
3232 %go
3333 %stay
34−++ field-wrong-payload ^- record [`%go ~[`~zod]]
34+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
3535++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
3636++ wrong-union |= x=alt ^- record [`x ~[`"hi"]]
3737++ no-field-context |= x=A ^- [a=A] [wrong=x]
tests/golden/types-unit-context/tokens.txt+33−33
@@ -169,30 +169,30 @@
16916918:26 tight glyph )
17017019:1 NEWLINE
17117119:1 glyph ++
172−19:4 name field
173−19:10 glyph ^-
174−19:13 name record
175−19:20 glyph [
176−19:21 tight glyph `
177−19:22 tight lit %go
178−19:26 glyph ~[
179−19:28 tight glyph `
180−19:29 tight str "hi"
181−19:33 tight glyph ]
182−19:34 tight glyph ]
172+19:4 name field-value
173+19:16 glyph ^-
174+19:19 name record
175+19:26 glyph [
176+19:27 tight glyph `
177+19:28 tight lit %go
178+19:32 glyph ~[
179+19:34 tight glyph `
180+19:35 tight str "hi"
181+19:39 tight glyph ]
182+19:40 tight glyph ]
18318320:1 NEWLINE
18418420:1 glyph ++
185−20:4 name field-bad
186−20:14 glyph ^-
187−20:17 name record
188−20:24 glyph [
189−20:25 tight glyph `
190−20:26 tight lit %bad
191−20:31 glyph ~[
192−20:33 tight glyph `
193−20:34 tight str "hi"
194−20:38 tight glyph ]
195−20:39 tight glyph ]
185+20:4 name field-value-bad
186+20:20 glyph ^-
187+20:23 name record
188+20:30 glyph [
189+20:31 tight glyph `
190+20:32 tight lit %bad
191+20:37 glyph ~[
192+20:39 tight glyph `
193+20:40 tight str "hi"
194+20:44 tight glyph ]
195+20:45 tight glyph ]
19619621:1 NEWLINE
19719721:1 glyph ++
19819821:4 name mimic-mismatch
@@ -278,17 +278,17 @@
27827834:1 DEDENT
27927934:1 NEWLINE
28028034:1 glyph ++
281−34:4 name field-wrong-payload
282−34:24 glyph ^-
283−34:27 name record
284−34:34 glyph [
285−34:35 tight glyph `
286−34:36 tight lit %go
287−34:40 glyph ~[
288−34:42 tight glyph `
289−34:43 tight lit ~zod
290−34:47 tight glyph ]
291−34:48 tight glyph ]
281+34:4 name field-value-wrong-payload
282+34:30 glyph ^-
283+34:33 name record
284+34:40 glyph [
285+34:41 tight glyph `
286+34:42 tight lit %go
287+34:46 glyph ~[
288+34:48 tight glyph `
289+34:49 tight lit ~zod
290+34:53 tight glyph ]
291+34:54 tight glyph ]
29229235:1 NEWLINE
29329335:1 glyph ++
29429435:4 name wrong-name
tests/golden/types-unit-context/tree.txt+21−21
@@ -70,20 +70,20 @@
7070 (call 18:14
7171 (wing 18:14 accept)
7272 (unit 18:21 (lit 18:22 %bad)))))
73− (value 19:1 field
74− (cast 19:10
75− (ref 19:13 record)
76− (tuple 19:20
77− (unit 19:21 (lit 19:22 %go))
78− (list 19:26
79− (unit 19:28 (str 19:29 "hi"))))))
80− (value 20:1 field-bad
81− (cast 20:14
82− (ref 20:17 record)
83− (tuple 20:24
84− (unit 20:25 (lit 20:26 %bad))
85− (list 20:31
86− (unit 20:33 (str 20:34 "hi"))))))
73+ (value 19:1 field-value
74+ (cast 19:16
75+ (ref 19:19 record)
76+ (tuple 19:26
77+ (unit 19:27 (lit 19:28 %go))
78+ (list 19:32
79+ (unit 19:34 (str 19:35 "hi"))))))
80+ (value 20:1 field-value-bad
81+ (cast 20:20
82+ (ref 20:23 record)
83+ (tuple 20:30
84+ (unit 20:31 (lit 20:32 %bad))
85+ (list 20:37
86+ (unit 20:39 (str 20:40 "hi"))))))
8787 (value 21:1 mimic-mismatch
8888 (cast 21:19
8989 (apply 21:22 mimic (aura 21:29 @t))
@@ -120,13 +120,13 @@
120120 (unit 30:29 (str 30:30 "hi")))))
121121 (mold 31:1 alt
122122 (union 32:3 (const 32:3 %go) (const 33:3 %stay)))
123− (value 34:1 field-wrong-payload
124− (cast 34:24
125− (ref 34:27 record)
126− (tuple 34:34
127− (unit 34:35 (lit 34:36 %go))
128− (list 34:40
129− (unit 34:42 (lit 34:43 ~zod))))))
123+ (value 34:1 field-value-wrong-payload
124+ (cast 34:30
125+ (ref 34:33 record)
126+ (tuple 34:40
127+ (unit 34:41 (lit 34:42 %go))
128+ (list 34:46
129+ (unit 34:48 (lit 34:49 ~zod))))))
130130 (value 35:1 wrong-name
131131 (cast 35:15
132132 (ref 35:18 record)
tests/golden/types-unit-context/types.txt+15−15
@@ -43,14 +43,14 @@ partial inference; module not checked
4343/tests/golden/types-unit-context/source.jibb:18:22: tag
4444++ bad-call (accept `%bad)
4545 ^
46−++ field: [u=(unit msg) xs=(list (unit @t))]
47−++ field-bad: msg has no case `%bad`
48−/tests/golden/types-unit-context/source.jibb:20:17: expected union
49−++ field-bad ^- record [`%bad ~[`"hi"]]
50− ^
51−/tests/golden/types-unit-context/source.jibb:20:26: tag
52−++ field-bad ^- record [`%bad ~[`"hi"]]
53− ^
46+++ field-value: [u=(unit msg) xs=(list (unit @t))]
47+++ field-value-bad: msg has no case `%bad`
48+/tests/golden/types-unit-context/source.jibb:20:23: expected union
49+++ field-value-bad ^- record [`%bad ~[`"hi"]]
50+ ^
51+/tests/golden/types-unit-context/source.jibb:20:32: tag
52+++ field-value-bad ^- record [`%bad ~[`"hi"]]
53+ ^
5454++ mimic-mismatch: cast constraint is not supported by partial inference
5555++ without-context: tag needs context in partial inference
5656++ pending: tag needs context in partial inference
@@ -58,13 +58,13 @@ partial inference; module not checked
5858++ preserve: $-(A (unit A))
5959++ force: explicit capital constraints are not supported by partial inference
6060+$ alt: cases proven disjoint; mold not checked
61−++ field-wrong-payload: unit payload does not fit its expected type
62−/tests/golden/types-unit-context/source.jibb:34:27: expected unit payload has type @t
63−++ field-wrong-payload ^- record [`%go ~[`~zod]]
64− ^
65−/tests/golden/types-unit-context/source.jibb:34:43: payload has type @p
66−++ field-wrong-payload ^- record [`%go ~[`~zod]]
67− ^
61+++ field-value-wrong-payload: unit payload does not fit its expected type
62+/tests/golden/types-unit-context/source.jibb:34:33: expected unit payload has type @t
63+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
64+ ^
65+/tests/golden/types-unit-context/source.jibb:34:49: payload has type @p
66+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
67+ ^
6868++ wrong-name: cast mold and expression type do not unify
6969/tests/golden/types-unit-context/source.jibb:35:18: cast mold
7070++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
tests/importer/about.txt+3−1
@@ -9,7 +9,9 @@ explicit union argument when the exact call wrapper and collection provenance
99are validated and all union cases are static and pairwise disjoint. Cases
1010cover overlap, collapsed branches, multiple or nested unions, dependent
1111branches, forged subject, sample and tail wrappers, and a shadowed
12−collection. Tagged source cases exercise bare null payloads, overlapping tags and hidden
12+collection. `explicit-unknown` has distinct outer tags and a local `word` alias
13+for `@t`, so its source cases can be proved disjoint. `explicit-wut-overlap` and `explicit-collapsed`
14+now have positive overlap witnesses from the original source cases. Tagged source cases exercise bare null payloads, overlapping tags and hidden
1315invalid dependencies, named payload dependencies, valid and collapsed enums,
1416direct and transitively aliased overlaps, nested collections, shadowed jar and
1517jug dependencies, Ford-name collisions, zuse local-name precedence and the
tests/importer/tree.txt+3−3
@@ -74,11 +74,11 @@ explicit-graph: error: Hoon union disjointness could not be verified
7474explicit-graph-unsupported: error: signed and float auras cannot be imported
7575explicit-wut-safe: (union [ok @ud] [err @t])
7676explicit-percent-overlap: error: Hoon union disjointness could not be verified
77−explicit-wut-overlap: error: Hoon union disjointness could not be verified
78−explicit-collapsed: error: Hoon union disjointness could not be verified
77+explicit-wut-overlap: error: Hoon union cases overlap
78+explicit-collapsed: error: Hoon union cases overlap
7979explicit-subsumed: error: Hoon union disjointness could not be verified
8080explicit-three: (union [a @ud] [b @t] [c @p])
81−explicit-unknown: error: a Hoon union needs a source-level disjointness check
81+explicit-unknown: (union [x @t] [y @t])
8282explicit-nested: error: Hoon union disjointness could not be verified
8383collection-union-wrapper: valid; forged subject, sample and tail rejected
8484collection-union-list: (list (union [x @ud] [y @t]))
tests/lib/jibb-bridge.hoon+5−2
@@ -136,6 +136,9 @@
136136 [%fixture %raw-rec [%& [%ref %fixture %chain]]]
137137 [%fixture %bad-arity [%& [%apply %list ~[[%atom %t ~] [%atom %ud ~]]]]]
138138 [%fixture %bad-argument [%& [%apply %list ~[[%fork ~[[%atom %tas [~ %a]] [%atom %tas [~ %a]]]]]]]]
139+ [%fixture %mixed-zero (read-named-diagnostic:jibb-import %fixture %mixed-zero cor)]
140+ [%fixture %separate-tags (read %separate-tags)]
141+ [%fixture %separate-terms (read %separate-terms)]
139142 [%fixture %nested-choice (read %nested-choice)]
140143 [%fixture %collapsed (read %collapsed)]
141144 [%fixture %dollar (read %dollar)]
@@ -150,7 +153,7 @@
150153 [%fixture %duplicate [%& [%atom %ud ~]]]
151154 [%missing %title [%& [%atom %t ~]]]
152155 ==
153− =/ report=@t (golden-types-imports:jibb /test/jibb src external)
156+ =/ report=@t (golden-types-with-reader-diagnostics:jibb /test/jibb src external ~)
154157 =/ dep=@t (crip "/- fixture\0a++ chain-id |= x=chain.fixture x\0a")
155158 =/ root=@t (crip "/= helper /ui/helper\0a++ use chain-id.helper\0a")
156159 =/ prelude=@t (crip "++ prelude-id |= x x\0a")
@@ -161,5 +164,5 @@
161164 (crip "/- fixture\0a++ canonical ^- (unit @t) `\"hi\"\0a++ lookalike ^- zero-lookalike.fixture `\"hi\"\0a")
162165 =/ unit-report=@t
163166 (golden-types-with-prelude:jibb /ui/unit-client/jibb unit-client external ~ ~ unit-prelude)
164− (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' (cat 3 recursive-list-synthetic (cat 3 '\0a' named-recursive-synthetic))))))))))
167+ (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0areader-mixed-zero: {(show-result:jibb-import (read %mixed-zero))}\0areader-separate-tags: {(show-result:jibb-import (read %separate-tags))}\0areader-separate-terms: {(show-result:jibb-import (read %separate-terms))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' (cat 3 recursive-list-synthetic (cat 3 '\0a' named-recursive-synthetic))))))))))
165168--
tests/lib/jibb-cell-branch.hoonnew file+53
@@ -0,0 +1,53 @@
1+:: Bounded closed-cell branch context; no runtime or island claim.
2+/+ jibb
3+/* public %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-cell-branch/good/txt
6+/* bad %txt /tests/type-cell-branch/bad/txt
7+|%
8+++ text
9+ |= lines=wain
10+ ^- @t
11+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
12+++ test-cell-branch
13+ ^- tang
14+ ?~ good ~[leaf+"cell branch good source missing"]
15+ ?~ bad ~[leaf+"cell branch bad source missing"]
16+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
17+ ?~ prep ~[leaf+"cell branch prelude unavailable"]
18+ =/ a (parse:jibb /tests/branch/jibb (text good))
19+ =/ b (parse:jibb /tests/branch/jibb (text bad))
20+ ?: |(?=(%| -.a) ?=(%| -.b)) ~[leaf+"cell branch source parse failed"]
21+ =/ ad=(list def:jibb) defs.p.a
22+ =/ bd=(list def:jibb) defs.p.b
23+ ?. &(?=([* ~] ad) ?=([* ~] bd) ?=(%value -.i.ad) ?=(%value -.i.bd))
24+ ~[leaf+"cell branch declarations unavailable"]
25+ =/ unit-scheme=(unit ischeme:jibb) (find-jibb-mold:jibb %unit iface.u.prep)
26+ ?~ unit-scheme ~[leaf+"cell branch unit unavailable"]
27+ =/ computed=(unit itype:jibb) (template-apply:jibb u.unit-scheme ~[[%atom %t]])
28+ ?~ computed ~[leaf+"cell branch unit instantiation failed"]
29+ =/ expected=itype:jibb [%cell [%atom %t] u.computed]
30+ =/ env=ienv:jibb ~[[%flag [[%flag ~] ~]]]
31+ =/ state=istate:jibb *istate:jibb
32+ =. state state(prelude `iface.u.prep, jrec-fuel 256)
33+ =/ original=iresult:jibb (infer-fragment:jibb val.i.bd env state)
34+ =/ failed=iresult:jibb (infer-closed-cell-branch:jibb val.i.bd expected env state (span-of:jibb val.i.bd))
35+ =/ success=iresult:jibb (infer-closed-cell-branch:jibb val.i.ad expected env state (span-of:jibb val.i.ad))
36+ =/ hidden=isub:jibb ~[[55 [%face %x [%atom %t]]]]
37+ ?. (closed-cell-branch-eligible:jibb val.i.bd expected ~) ~[leaf+"negative branch is not eligible"]
38+ ?. ?=(%| -.original) ~[leaf+"original negative branch unexpectedly inferred"]
39+ ?. =(original failed) ~[leaf+"failed retry changed the original result"]
40+ ?. ?=(%& -.success) ~[leaf+"valid closed branch did not infer"]
41+ ?: (closed-cell-branch-eligible:jibb val.i.ad expected hidden) ~[leaf+"structural substitution accepted"]
42+ =/ atom=expr:jibb *expr:jibb
43+ =/ nodes=(list expr:jibb) (reap 512 atom)
44+ ?. (closed-cell-retry-safe:jibb nodes 512) ~[leaf+"exact source budget rejected"]
45+ ?: (closed-cell-retry-safe:jibb [atom nodes] 512) ~[leaf+"source budget exceeded"]
46+ =/ binding=ibinding:jibb [55 [%atom %t]]
47+ =/ subs=isub:jibb (reap 512 binding)
48+ ?. (closed-cell-sub-safe:jibb subs 512) ~[leaf+"exact substitution budget rejected"]
49+ ?: (closed-cell-sub-safe:jibb [binding subs] 512) ~[leaf+"substitution budget exceeded"]
50+ =/ nested=expr:jibb [%branch *span:jibb atom ~]
51+ ?: (closed-cell-retry-safe:jibb ~[nested] 512) ~[leaf+"recursive retry was not excluded"]
52+ ~
53+--
tests/lib/jibb-deferred-context.hoonnew file+83
@@ -0,0 +1,83 @@
1+/+ jibb
2+/* rich %txt /tests/type-deferred-context/rich/txt
3+/* plain %txt /tests/type-deferred-context/plain/txt
4+/* simple %txt /tests/type-deferred-context/simple/txt
5+/* missing %txt /tests/type-deferred-context/missing/txt
6+/* wrong %txt /tests/type-deferred-context/wrong/txt
7+/* duplicate %txt /tests/type-deferred-context/duplicate/txt
8+/* dangling %txt /tests/type-deferred-context/dangling/txt
9+/* collision-early %txt /tests/type-deferred-context/collision-early/txt
10+/* collision-late %txt /tests/type-deferred-context/collision-late/txt
11+/* expected %txt /tests/type-deferred-context/report/txt
12+|%
13+++ text
14+ |= lines=wain
15+ ^- @t
16+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
17+++ test-context
18+ ^- tang
19+ =/ at=path /ui/context/jibb
20+ =/ good=(list wain) ~[rich plain simple]
21+ =/ bad=(list wain) ~[missing wrong duplicate dangling collision-early collision-late]
22+ ?. (levy (weld good bad) |=(src=wain ?=(^ src))) ~[leaf+"source missing"]
23+ =/ source=@t (text rich)
24+ =/ parsed (parse:jibb at source)
25+ ?: ?=(%| -.parsed) ~[leaf+"positive source does not parse"]
26+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
27+ ?: ?=(%| -.result) ~[leaf+"positive library did not publish"]
28+ =/ values=ienv:jibb values.iface.p.result
29+ =/ built=(unit ischeme:jibb) (ienv-lookup:jibb %built values)
30+ ?~ built ~[leaf+"built missing"]
31+ ?~ vars.u.built ~[leaf+"principal polymorphism lost"]
32+ ?^ t.vars.u.built ~[leaf+"unexpected additional quantifiers"]
33+ =/ built-type=itype:jibb typ.u.built
34+ ?. ?=(%fn -.built-type) ~[leaf+"built is not a gate"]
35+ ?. ?=(%var -.sample.built-type) ~[leaf+"built sample is not generic"]
36+ ?. =(sample.built-type product.built-type) ~[leaf+"built input and result differ"]
37+ ?. =(id.sample.built-type i.vars.u.built) ~[leaf+"built quantified identity differs"]
38+ =/ reveal=(unit ischeme:jibb) (ienv-lookup:jibb %reveal values)
39+ =/ reveal-ship=(unit ischeme:jibb) (ienv-lookup:jibb %reveal-ship values)
40+ ?~ reveal ~[leaf+"text result missing"]
41+ ?~ reveal-ship ~[leaf+"ship result missing"]
42+ ?. ?=([%atom %t] typ.u.reveal) ~[leaf+"text result changed"]
43+ ?. ?=([%atom %p] typ.u.reveal-ship) ~[leaf+"ship result changed"]
44+ =/ report=@t (golden-types-with-marks:jibb at source ~ ~)
45+ ?. =((to-wain:format (cat 3 report '\0a')) expected) ~[leaf+"report differs from committed types"]
46+ =/ rest-good=(list wain) ~[plain simple]
47+ =/ checked=?
48+ %+ levy rest-good
49+ |= src=wain
50+ =/ source=@t (text src)
51+ =/ parsed (parse:jibb at source)
52+ ?: ?=(%| -.parsed) |
53+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
54+ ?=(%& -.result)
55+ ?. checked ~[leaf+"simple positive declined or did not parse"]
56+ =. checked
57+ %+ levy bad
58+ |= src=wain
59+ =/ source=@t (text src)
60+ =/ parsed (parse:jibb at source)
61+ ?: ?=(%| -.parsed) |
62+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
63+ ?=(%| -.result)
64+ ?. checked ~[leaf+"negative source published or did not parse"]
65+ =/ literal=lit:jibb [%term %tas %none '%none']
66+ =/ actual=itype:jibb [%tag 10 literal |]
67+ =/ st=istate:jibb *istate:jibb
68+ =. st st(next 20)
69+ ?^ (dg-stage:jibb ~ ~ ~ st ~ 65) ~[leaf+"oversized retry fuel accepted"]
70+ ?^ (dg-stage:jibb defs.p.parsed ~ ~ st ~ 0) ~[leaf+"source beyond retry fuel accepted"]
71+ =/ atom=itype:jibb [%const literal]
72+ =/ faced=itype:jibb [%face %named atom]
73+ =/ union=itype:jibb [%union ~[atom [%cell [%const [%term %tas %some '%some']] [%face %value [%atom %t]]]] ~ ~ ~]
74+ =/ faced-case=itype:jibb [%union ~[faced] ~ ~ ~]
75+ =/ fit
76+ |= target=itype:jibb
77+ ^- ?
78+ =/ edge=dgo:jibb [actual target *span:jibb *span:jibb]
79+ ?=(^ (dg-replay-edges:jibb ~[edge] st 64))
80+ ?. &((fit atom) (fit union)) ~[leaf+"plain literal replay declined"]
81+ ?: |((fit faced) (fit faced-case)) ~[leaf+"faced literal replay accepted"]
82+ ~
83+--
tests/lib/jibb-deferred-prepared.hoonnew file+114
@@ -0,0 +1,114 @@
1+:: Prepared-prelude initializer recovery remains a partial report only.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-deferred-prepared/good/txt
6+/* tuple-only %txt /tests/type-deferred-prepared/tuple-only/txt
7+/* wrong-unit %txt /tests/type-deferred-prepared/wrong-unit/txt
8+/* wrong-draft %txt /tests/type-deferred-prepared/wrong-draft/txt
9+/* unrelated-tag %txt /tests/type-deferred-prepared/unrelated-tag/txt
10+/* mold-collision %txt /tests/type-deferred-prepared/mold-collision/txt
11+/* no-final-cast %txt /tests/type-deferred-prepared/no-final-cast/txt
12+/* no-prelude %txt /tests/type-deferred-prepared/no-prelude/txt
13+/* main-source %txt /tests/type-deferred-prepared/main/txt
14+/* imported %txt /tests/type-deferred-prepared/imported/txt
15+/* expected %txt /tests/type-deferred-prepared/expected/txt
16+/* expected-control %txt /tests/type-deferred-prepared/expected-control/txt
17+/* expected-tuple-only %txt /tests/type-deferred-prepared/expected-tuple-only/txt
18+|%
19+++ text
20+ |= lines=wain
21+ ^- @t
22+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
23+++ check-prepared
24+ |= [where=path source=wain valid=?]
25+ ^- tang
26+ ?~ source ~[leaf+"source fixture missing"]
27+ =/ src=@t (text source)
28+ =/ parsed (parse:jibb where src)
29+ ?: ?=(%| -.parsed) ~[leaf+"source does not parse"]
30+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
31+ ?~ prepared ~[leaf+"prelude unavailable"]
32+ =/ recovered=? ?=(^ (dg-root-prepared:jibb where src u.prepared))
33+ ?. =(valid recovered) ~[leaf+"prepared initializer transaction result changed"]
34+ ~
35+++ check-no-prelude
36+ ^- tang
37+ =/ at=path /ui/prepared/jibb
38+ =/ src=@t (text no-prelude)
39+ ?: ?=(^ (dg-root-source:jibb at src))
40+ ~[leaf+"no-prelude source transaction recovered tuple initializer"]
41+ =/ legacy=jfile-result:jibb
42+ (infer-jibb-file:jibb at src ~ ~ ~ ~[at] ~ ~ ~ ~)
43+ ?: ?=(%& -.legacy) ~[leaf+"no-prelude resolver published recovered tuple initializer"]
44+ ~
45+++ check-ordinary
46+ ^- tang
47+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
48+ ?~ prepared ~[leaf+"prelude unavailable"]
49+ =/ at=path /ui/prepared/jibb
50+ =/ ordinary=jfile-result:jibb
51+ (infer-jibb-file:jibb at (text good) ~ ~ ~ ~[at] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
52+ ?: ?=(%& -.ordinary) ~[leaf+"ordinary full-module path published recovered initializer"]
53+ ~
54+++ check-report
55+ |= [source=wain wanted=wain]
56+ ^- tang
57+ ?~ source ~[leaf+"report source fixture missing"]
58+ ?~ wanted ~[leaf+"expected report fixture missing"]
59+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
60+ ?~ prepared ~[leaf+"prelude unavailable"]
61+ =/ report=@t (golden-types-with-prepared-prelude:jibb /ui/prepared/jibb (text source) ~ ~ ~ prepared)
62+ =/ report-lines=wain (to-wain:format (cat 3 report '\0a'))
63+ ?~ report-lines ~[leaf+"prepared report is empty"]
64+ ?. =('partial inference; module not checked' i.report-lines)
65+ ~[leaf+"partial disclaimer changed"]
66+ ?. =(report-lines wanted) ~[leaf+"prepared report differs from exact recovered types"]
67+ ~
68+++ check-prepared-binding
69+ ^- tang
70+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb prelude internal)
71+ ?~ prepared ~[leaf+"prelude unavailable"]
72+ =/ at=path /ui/prepared/jibb
73+ =/ src=@t (text good)
74+ =/ pre=(unit ifile:jibb) `iface.u.prepared
75+ =/ report
76+ |= [vals=(list term) ms=(list term) p=(unit ifile:jibb) prep=(unit iprelude:jibb)]
77+ ^- @t
78+ (golden-types-in-context-core:jibb at src ~ ~ ~ vals ms p prep)
79+ =/ vals=(list term) values.u.prepared
80+ =/ ms=(list term) molds.u.prepared
81+ ?: =((report vals ms pre prepared) (report vals ms pre ~))
82+ ~[leaf+"exact prepared binding did not recover the initializer"]
83+ ?. =((report ~ ms pre prepared) (report ~ ms pre ~))
84+ ~[leaf+"mismatched value inventory reached prepared recovery"]
85+ ?. =((report vals ~ pre prepared) (report vals ~ pre ~))
86+ ~[leaf+"mismatched mold inventory reached prepared recovery"]
87+ ?. =((report vals ms ~ prepared) (report vals ms ~ ~))
88+ ~[leaf+"mismatched prelude interface reached prepared recovery"]
89+ ~
90+++ test-prepared
91+ ^- tang
92+ =/ at=path /ui/prepared/jibb
93+ =/ checks=(list tang)
94+ :~ (check-prepared at good &)
95+ (check-prepared at tuple-only &)
96+ (check-prepared at no-prelude &)
97+ (check-prepared at wrong-unit |)
98+ (check-prepared at wrong-draft |)
99+ (check-prepared at unrelated-tag |)
100+ (check-prepared at mold-collision |)
101+ (check-prepared at no-final-cast |)
102+ (check-prepared at main-source |)
103+ (check-prepared at imported |)
104+ (check-prepared /ui/api/prepared/jibb good |)
105+ (check-prepared /ui/stores/prepared/jibb good |)
106+ check-no-prelude
107+ check-ordinary
108+ check-prepared-binding
109+ (check-report good expected)
110+ (check-report tuple-only expected-tuple-only)
111+ (check-report no-final-cast expected-control)
112+ ==
113+ (zing checks)
114+--
tests/lib/jibb-deferred-resolver.hoonnew file+113
@@ -0,0 +1,113 @@
1+:: Source-level normal resolver and report integration; no island claim.
2+/+ jibb
3+/* good %txt /tests/type-deferred-resolver/good/txt
4+/* conflict %txt /tests/type-deferred-resolver/conflict/txt
5+/* missing %txt /tests/type-deferred-resolver/missing/txt
6+/* hole %txt /tests/type-deferred-resolver/hole/txt
7+/* duplicate %txt /tests/type-deferred-resolver/duplicate/txt
8+/* face %txt /tests/type-deferred-resolver/face/txt
9+/* store %txt /tests/type-deferred-resolver/store/txt
10+/* stability-early %txt /tests/type-deferred-resolver/stability-early/txt
11+/* stability-late %txt /tests/type-deferred-resolver/stability-late/txt
12+/* stability-simple-early %txt /tests/type-deferred-resolver/stability-simple-early/txt
13+/* stability-simple-late %txt /tests/type-deferred-resolver/stability-simple-late/txt
14+/* stability-output-early %txt /tests/type-deferred-resolver/stability-output-early/txt
15+/* stability-output-late %txt /tests/type-deferred-resolver/stability-output-late/txt
16+/* stability-slot-early %txt /tests/type-deferred-resolver/stability-slot-early/txt
17+/* stability-slot-late %txt /tests/type-deferred-resolver/stability-slot-late/txt
18+/* public %jibb /lib/jibb/prelude/jibb
19+/* internal %jibb /lib/jibb/internal/jibb
20+/* expected %txt /tests/type-deferred-resolver/expected/txt
21+|%
22+++ text
23+ |= lines=wain
24+ ^- @t
25+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
26+++ case-no-fallback
27+ |= [source=@t public=@t internal=@t]
28+ ^- @t
29+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
30+ ?~ prep 'BAD prelude'
31+ =/ plain=(each module:jibb error:jibb) (parse:jibb /ui/test/jibb source)
32+ ?: ?=(%| -.plain) 'BAD source parse:jibb'
33+ ?. (module-scope-valid:jibb p.plain values.u.prep molds.u.prep) 'BAD prelude scope'
34+ =/ prelude-result=jfile-result:jibb (infer-jibb-file:jibb /ui/test/jibb source ~ ~ ~ ~[/ui/test/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35+ ?: ?=(%& -.prelude-result) 'BAD prepared prelude fallback'
36+ =/ imported-source=@t (cat 3 '/= dep /ui/dep\0a' source)
37+ =/ dependencies=jbundle:jibb ~[[/ui/dep/jibb '++ value 1']]
38+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /ui/test/jibb imported-source)
39+ ?: ?=(%| -.parsed) 'BAD import source parse:jibb'
40+ =/ deps=jimports-result:jibb (resolve-jibb-imports:jibb imports.p.parsed ~ ~ dependencies ~[/ui/test/jibb] ~ ~ ~ ~)
41+ ?: ?=(%| -.deps) 'BAD dependency resolution'
42+ =/ imported-result=jfile-result:jibb (infer-jibb-file:jibb /ui/test/jibb imported-source ~ ~ dependencies ~[/ui/test/jibb] ~ ~ ~ ~)
43+ ?: ?=(%& -.imported-result) 'BAD imported fallback'
44+ 'prelude and import fallback declined'
45+++ resolver-report
46+ |= [good=@t conflict=@t missing=@t hole=@t duplicate=@t face=@t store=@t public=@t internal=@t]
47+ ^- @t
48+ =/ lines=(list @t)
49+ =/ at=path /ui/obligation/jibb
50+ =/ expect-reject
51+ |= [label=@t source=@t]
52+ ^- @t
53+ =/ parsed (parse:jibb at source)
54+ ?: ?=(%| -.parsed) (crip "BAD-{(trip label)}-parse")
55+ =/ got=jfile-result:jibb (infer-jibb-file:jibb at source ~ ~ ~ ~[at] ~ ~ ~ ~)
56+ ?:(?=(%| -.got) (crip "{(trip label)} rejected without interface") (crip "BAD-{(trip label)}-published"))
57+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at good ~ ~ ~ ~[at] ~ ~ ~ ~)
58+ ?: ?=(%| -.result) ~[(crip "BAD-valid: {(trip p.result)}")]
59+ =/ iface=ifile:jibb iface.p.result
60+ =/ built=(unit ischeme:jibb) (ienv-lookup:jibb %built values.iface)
61+ ?~ built ~['BAD-missing-built']
62+ =/ text=(unit ischeme:jibb) (ienv-lookup:jibb %reveal values.iface)
63+ =/ ship=(unit ischeme:jibb) (ienv-lookup:jibb %reveal-ship values.iface)
64+ ?~ text ~['BAD-missing-text']
65+ ?~ ship ~['BAD-missing-ship']
66+ =/ report=@t (golden-types-with-marks:jibb at good ~ ~)
67+ =/ store-at=path /ui/stores/test/jibb
68+ =/ store-parsed (parse:jibb store-at store)
69+ ?: ?=(%| -.store-parsed) ~['BAD-store-parse']
70+ =/ store-result=jfile-result:jibb (infer-jibb-file:jibb store-at store ~ ~ ~ ~[store-at] ~ ~ ~ ~)
71+ =/ shown=itype:jibb (canonical-itype:jibb typ.u.built vars.u.built)
72+ :~ ?:(?=(^ vars.u.built) 'interface retains independent polymorphism' 'BAD-principal')
73+ ?:(?=([%atom %t] typ.u.text) 'text use inferred' 'BAD-text')
74+ ?:(?=([%atom %p] typ.u.ship) 'ship use inferred' 'BAD-ship')
75+ (crip "stored built: {(show-itype:jibb shown ~)}")
76+ report
77+ (expect-reject 'conflict' conflict)
78+ (expect-reject 'missing' missing)
79+ (expect-reject 'hole' hole)
80+ (expect-reject 'duplicate' duplicate)
81+ (expect-reject 'face' face)
82+ ?:(?=(%| -.store-result) 'store declined without interface' 'BAD-store-published')
83+ 'conflict report:'
84+ (golden-types-with-marks:jibb at conflict ~ ~)
85+ 'store report:'
86+ (golden-types-with-marks:jibb store-at store ~ ~)
87+ ==
88+ =. lines (snoc lines (case-no-fallback good public internal))
89+ (of-wain:format lines)
90+++ test-deferred-resolver
91+ ^- tang
92+ =/ result=@t (resolver-report (text good) (text conflict) (text missing) (text hole) (text duplicate) (text face) (text store) public internal)
93+ ?. =((to-wain:format (cat 3 result '\0a')) expected) ~[leaf+"deferred resolver report differs"]
94+ =/ closed=itype:jibb [%cell [%face %foo [%atom %t]] [%atom %t]]
95+ =/ open=itype:jibb [%cell [%face %foo [%var 500]] [%atom %t]]
96+ =/ tag=itype:jibb [%tag 501 *lit:jibb |]
97+ ?. (dg-stable-call-fit:jibb closed closed [%atom %t] ~ &) ~[leaf+"closed positional fit declined"]
98+ ?: (dg-stable-call-fit:jibb open open [%atom %t] ~ &) ~[leaf+"open positional face accepted"]
99+ ?: (dg-stable-call-fit:jibb closed closed tag ~ &) ~[leaf+"pending positional result accepted"]
100+ ?. (dg-stable-call-fit:jibb open open [%atom %t] ~ |) ~[leaf+"equal single argument declined"]
101+ =/ samples=(list wain)
102+ ~[stability-early stability-late stability-simple-early stability-simple-late stability-output-early stability-output-late stability-slot-early stability-slot-late]
103+ |-
104+ ?~ samples ~
105+ ?~ i.samples ~[leaf+"deferred stability source missing"]
106+ =/ at=path /ui/stability/jibb
107+ =/ src=@t (text i.samples)
108+ =/ parsed (parse:jibb at src)
109+ ?: ?=(%| -.parsed) ~[leaf+"deferred stability source does not parse"]
110+ =/ result=jfile-result:jibb (infer-jibb-file:jibb at src ~ ~ ~ ~[at] ~ ~ ~ ~)
111+ ?: ?=(%& -.result) ~[leaf+"unstable deferred fit published an interface"]
112+ $(samples t.samples)
113+--
tests/lib/jibb-deferred.hoonnew file+244
@@ -0,0 +1,244 @@
1+:: Partial source-owned deferred type transaction; not module or island validation.
2+/+ jibb
3+/* nested-src %txt /tests/type-deferred/nested-src/txt
4+/* principal-src %txt /tests/type-deferred/principal-src/txt
5+/* missing-src %txt /tests/type-deferred/missing-src/txt
6+/* conflict-src %txt /tests/type-deferred/conflict-src/txt
7+/* duplicate-src %txt /tests/type-deferred/duplicate-src/txt
8+/* hole-src %txt /tests/type-deferred/hole-src/txt
9+/* local-src %txt /tests/type-deferred/local-src/txt
10+/* mutual-src %txt /tests/type-deferred/mutual-src/txt
11+/* mold-hole-src %txt /tests/type-deferred/mold-hole-src/txt
12+/* face-good-src %txt /tests/type-deferred/face-good-src/txt
13+/* face-bad-src %txt /tests/type-deferred/face-bad-src/txt
14+/* expected %txt /tests/type-deferred/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ case-nested
21+ |= source=@t
22+ ^- (list @t)
23+ =/ result=(unit dgcommit:jibb) (checked-source /ui/obligation/jibb source)
24+ ?~ result ~['BAD-nested-transaction']
25+ =/ nested=(unit ischeme:jibb) (ienv-lookup:jibb %nested env.u.result)
26+ =/ alias=(unit ischeme:jibb) (ienv-lookup:jibb %alias env.u.result)
27+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main env.u.result)
28+ ?~ nested ~['BAD-nested']
29+ ?~ alias ~['BAD-alias']
30+ ?~ main ~['BAD-main']
31+ :~ ?:(=(typ.u.nested typ.u.alias) 'nested lexical gate and alias agree' 'BAD-alias-type')
32+ ?:(=(typ.u.nested typ.u.main) 'later source context closes nested constructor' 'BAD-main-type')
33+ ?:(!(pending-tags:jibb tags.state.u.result sub.state.u.result) 'nested obligation discharged' 'BAD-pending')
34+ ==
35+++ case-principal
36+ |= source=@t
37+ ^- (list @t)
38+ =/ result=(unit dgcommit:jibb) (checked-source /ui/obligation/jibb source)
39+ ?~ result ~['BAD-root-transaction']
40+ =/ built=(unit ischeme:jibb) (ienv-lookup:jibb %built env.u.result)
41+ =/ text=(unit ischeme:jibb) (ienv-lookup:jibb %reveal env.u.result)
42+ =/ ship=(unit ischeme:jibb) (ienv-lookup:jibb %reveal-ship env.u.result)
43+ ?~ built ~['BAD-built']
44+ ?~ text ~['BAD-text']
45+ ?~ ship ~['BAD-ship']
46+ :~ ?:(?=(^ vars.u.built) 'independent built result stays polymorphic' 'BAD-principal')
47+ ?:(?=([%atom %t] typ.u.text) 'text use inferred' 'BAD-text-type')
48+ ?:(?=([%atom %p] typ.u.ship) 'ship use inferred independently' 'BAD-ship-type')
49+ ==
50+++ case-negative
51+ |= [missing=@t conflict=@t duplicate=@t hole=@t]
52+ ^- (list @t)
53+ :~ ?:(?=(~ (checked-source /ui/obligation/jibb missing)) 'missing constructor leaves no result' 'BAD-missing')
54+ ?:(?=(~ (checked-source /ui/obligation/jibb conflict)) 'conflicting context leaves no result' 'BAD-conflict')
55+ ?:(?=(~ (checked-source /ui/obligation/jibb duplicate)) 'duplicate source binding declined' 'BAD-duplicate')
56+ ?:(?=(~ (checked-source /ui/obligation/jibb hole)) 'definition hole does not escape' 'BAD-hole')
57+ ==
58+++ case-groups
59+ |= [local=@t mutual=@t]
60+ ^- (list @t)
61+ :~ ?:(?=(~ (checked-source /ui/obligation/jibb local)) 'local deferred definition declined' 'BAD-local')
62+ ?:(?=(~ (checked-source /ui/obligation/jibb mutual)) 'recursive deferred group declined' 'BAD-group')
63+ ==
64+++ case-mold-hole
65+ |= hole=@t
66+ ^- (list @t)
67+ :~ ?:(?=(~ (checked-source /ui/a/jibb hole)) 'unused mold hole declined' 'unused mold hole committed')
68+ ==
69+++ case-fresh
70+ ^- (list @t)
71+ =/ env=ienv:jibb ~[[%x [[%fn [%var 1.000.007] [%var 1.000.007]] ~[1.000.007 2.000.001]]]]
72+ =/ scanned=(unit dgscan:jibb) (dg-all-env-ids:jibb env 200 ~)
73+ =/ small=(unit dgscan:jibb) (dg-all-env-ids:jibb env 1 ~)
74+ ?~ scanned ~['BAD-scan']
75+ :~ ?:(=(2.000.002 (dg-next-id:jibb ids.u.scanned 0)) 'fresh ID exceeds raw and quantified IDs' 'BAD-fresh')
76+ ?:(?=(~ small) 'fresh ID scan respects budget' 'BAD-fuel')
77+ ==
78+++ case-safety
79+ ^- (list @t)
80+ =/ actual=itype:jibb [%cell [%atom %ud] [%cell [%face %wrong [%atom %t]] [%atom %p]]]
81+ =/ expected=itype:jibb [%cell [%atom %ud] [%var 0]]
82+ =/ correct=itype:jibb [%cell [%face %right [%atom %t]] [%atom %p]]
83+ =/ bound=isub:jibb ~[[0 correct]]
84+ =/ with-binding=ifit:jibb (itype-fit:jibb actual expected bound 1)
85+ =/ dropped=ifit:jibb (itype-fit:jibb actual expected ~ 1)
86+ =/ open-edges=(list dgo:jibb) ~[[[%var 20] [%var 21] *span:jibb *span:jibb]]
87+ =/ st=istate:jibb *istate:jibb
88+ =. st st(next 2.000.002)
89+ =/ partial=(unit istate:jibb) (dg-replay-edges:jibb open-edges st 64)
90+ ?~ partial ~['BAD-partial-replay']
91+ =/ still-open=(unit dgscan:jibb) (dg-obligations:jibb open-edges sub.u.partial 100 ~)
92+ ?~ still-open ~['BAD-open-scan']
93+ =/ tag-literal=lit:jibb [%term %tas %got '%got']
94+ =/ target=itype:jibb [%fn [%atom %t] [%union ~[[%cell [%const tag-literal] [%face %value [%atom %t]]]] ~ ~ ~]]
95+ =/ edge=dgo:jibb [[%tag 10 tag-literal &] target *span:jibb *span:jibb]
96+ =/ complete=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] st 64)
97+ ?~ complete ~['BAD-complete-replay']
98+ =/ closed=(unit dgscan:jibb) (dg-obligations:jibb ~[edge] sub.u.complete 100 ~)
99+ ?~ closed ~['BAD-closed-scan']
100+ =/ repeated=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] u.complete 64)
101+ ?~ repeated ~['BAD-final-replay']
102+ =/ open-env=ienv:jibb ~[[%x [[%var 55] ~]]]
103+ =/ raw-atom=itype:jibb [%var 900]
104+ =/ atom-sub=isub:jibb ~[[900 [%avar 901]]]
105+ =/ normalized-atom=itype:jibb (itype-normalize:jibb raw-atom atom-sub)
106+ =/ capture-state=istate:jibb st(sub ~[[500 [%var 42]]])
107+ =/ capture-env=ienv:jibb ~[[%polymorphic [[%fn [%var 42] [%var 500]] ~[42]]]]
108+ =/ capture-check=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 42] [%var 43]] capture-env ~ ~ ~ capture-state 300)
109+ ?~ capture-check ~['BAD-capture-scan']
110+ =/ explicit-capture=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 80] [%var 81]] ~ ~ ~ ~[80] st 300)
111+ ?~ explicit-capture ~['BAD-explicit-capture-scan']
112+ =/ tag-lit=lit:jibb [%term %tas %watch '%watch']
113+ =/ bound-tag-state=istate:jibb st(sub ~[[720 [%var 721]]])
114+ =/ tag-check=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 721] [%var 722]] ~ ~ ~[[720 tag-lit]] ~ bound-tag-state 300)
115+ ?~ tag-check ~['BAD-tag-scan']
116+ =/ cycle=(list dgo:jibb) ~[[[%var 710] [%var 711] *span:jibb *span:jibb] [[%var 711] [%var 712] *span:jibb *span:jibb] [[%var 712] [%var 710] *span:jibb *span:jibb]]
117+ =/ cyc=(unit ischeme:jibb) (dg-generalize:jibb [%fn [%var 710] [%fn [%var 712] [%var 713]]] ~ cycle ~ ~ st 300)
118+ ?~ cyc ~['BAD-cycle-scan']
119+ :~ ?:(!?=(%ok -.with-binding) 'original structural binding rejects wrong face' 'BAD-wrong-face')
120+ ?:(?=(%ok -.dropped) 'dropping binding would accept wrong face' 'BAD-counterexample')
121+ ?:(?=(^ ids.u.still-open) 'unresolved edge remains open after fit' 'BAD-open-edge')
122+ ?:(?=(~ ids.u.closed) 'closed constructor edge has no free IDs' 'BAD-closed-edge')
123+ ?:(&(=(sub.u.repeated sub.u.complete) =(next.u.repeated next.u.complete)) 'final replay is unchanged' 'BAD-final-state')
124+ ?:(?=(~ (dg-close-env:jibb open-env ~ 100)) 'open interface stays unpublished' 'BAD-open-interface')
125+ ?:(!(unsupported-atom-vars:jibb raw-atom ~ ~ atom-sub) 'raw bound variable hides atom constraint' 'BAD-raw-atom')
126+ ?:((unsupported-atom-vars:jibb normalized-atom ~ ~ atom-sub) 'normalized unsupported atom constraint rejected' 'BAD-normalized-atom')
127+ ?:(=(vars.u.capture-check ~[43]) 'scheme-local quantifier cannot hide captured ID' 'BAD-capture')
128+ ?:(=(vars.u.explicit-capture ~[81]) 'captured outer variable remains monomorphic' 'BAD-explicit-capture')
129+ ?:(=(vars.u.tag-check ~[722]) 'pending tag binding keeps reachable variable monomorphic' 'BAD-tag-binding')
130+ ?:(=(vars.u.cyc ~[713]) 'recursive obligation component stays monomorphic' 'BAD-cycle')
131+ ==
132+++ case-face-source
133+ |= [good-src=@t bad-src=@t]
134+ ^- (list @t)
135+ =/ good=(unit dgcommit:jibb) (checked-source /ui/test/jibb good-src)
136+ =/ bad=(unit dgcommit:jibb) (checked-source /ui/test/jibb bad-src)
137+ :~ ?:(?=(^ good) 'faced callback source accepted' 'BAD-faced-source')
138+ ?:(?=(~ bad) 'wrong nested callback face rejected' 'BAD-wrong-face-source')
139+ ==
140+++ case-face-replay
141+ ^- (list @t)
142+ =/ tag=lit:jibb [%term %tas %got '%got']
143+ =/ cases=(list itype:jibb) ~[[%cell [%const tag] [%face %value [%atom %t]]]]
144+ =/ callback=itype:jibb [%fn [%face %value [%atom %t]] [%union cases ~ ~ ~]]
145+ =/ edge=dgo:jibb [[%tag 10 tag &] callback *span:jibb *span:jibb]
146+ =/ st=istate:jibb *istate:jibb
147+ =. st st(next 20)
148+ =/ solved=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] st 64)
149+ ?~ solved ~['BAD-faced-replay']
150+ =/ after-left=itype:jibb (itype-walk:jibb left.edge sub.u.solved)
151+ =/ after-right=itype:jibb (itype-walk:jibb right.edge sub.u.solved)
152+ =/ record-output=itype:jibb [%cell [%face %answer [%atom %t]] [%atom %p]]
153+ =/ wrong=itype:jibb [%fn [%face %different [%atom %t]] [%union cases ~ ~ ~]]
154+ =/ hostile=istate:jibb st(sub ~[[10 wrong]])
155+ =/ rejected=(unit istate:jibb) (dg-replay-edges:jibb ~[edge] hostile 64)
156+ :~ ?:(=(after-left after-right) 'constructor resolves to exact callback' 'BAD-not-exact')
157+ ?:((itype-has-face:jibb left.edge sub.u.solved) 'callback retains its face' 'BAD-face-lost')
158+ ?:(!(itype-face-asym:jibb left.edge right.edge sub.u.solved) 'post-fit face asymmetry is absent' 'BAD-face-asymmetry')
159+ ?:((itype-output-may-be-cell:jibb record-output sub.u.solved) 'record output stays cell-capable' 'BAD-output')
160+ ?:(?=(~ rejected) 'prebound incompatible callback is rejected' 'BAD-incompatible')
161+ ==
162+++ checked-source
163+ |= [at=path source=@t]
164+ ^- (unit dgcommit:jibb)
165+ =/ detail=dgparse:jibb (dg-root-detail:jibb at source)
166+ ?> parsed.detail
167+ result.detail
168+++ case-grec-scan
169+ ^- (list @t)
170+ =/ tree=itype:jibb [%grec /ui/test/jibb %tree ~ *shape:jibb ~[[%var 7]]]
171+ =/ bounded=(unit dgscan:jibb) (dg-scan:jibb ~[tree] ~ 256 ~)
172+ =/ env=ienv:jibb ~[[%t [tree ~[7]]]]
173+ =/ all=(unit dgscan:jibb) (dg-all-env-ids:jibb env 256 ~)
174+ :~ ?:(?=(~ bounded) 'grec constraint scan declines' 'BAD-grec-scan')
175+ ?:(?=(~ all) 'grec fresh-id scan declines' 'BAD-grec-freshness')
176+ ==
177+++ case-default-behavior
178+ ^- @t
179+ =/ parsed (parse:jibb /ui/test/jibb '++ example (send |=%got)')
180+ ?: ?=(%| -.parsed) 'BAD parse'
181+ ?~ defs.p.parsed 'BAD missing definition'
182+ =/ d=def:jibb i.defs.p.parsed
183+ ?. ?=(%value -.d) 'BAD not value'
184+ =/ callback=itype:jibb [%fn [%atom %t] [%var 100]]
185+ =/ head=itype:jibb [%fn callback callback]
186+ =/ env=ienv:jibb ~[[%send [head ~[100]]]]
187+ =/ state=istate:jibb *istate:jibb
188+ =/ ordinary=iresult:jibb (infer-fragment:jibb val.d env state)
189+ ?: ?=(%& -.ordinary) 'BAD default deferred inference accepted'
190+ =/ enabled=iresult:jibb (infer-fragment:jibb val.d env state(defer `~))
191+ ?: ?=(%| -.enabled) 'BAD explicit capability failed'
192+ ?~ obligations.state.p.enabled 'BAD missing obligation'
193+ 'default inference declines; explicit capability creates obligation'
194+++ case-screen-bounds
195+ ^- @t
196+ =/ parsed (parse:jibb /ui/test/jibb '++ example (send |=%got)\0a++ other 1\0a')
197+ ?: ?=(%| -.parsed) 'BAD parse'
198+ =/ ds=(list def:jibb) defs.p.parsed
199+ ?. ?=([* [* ~]] ds) 'BAD definitions'
200+ =/ good=def:jibb i.ds
201+ =/ other=def:jibb i.t.ds
202+ ?. &(?=(%value -.good) ?=(%value -.other)) 'BAD value types'
203+ =/ raw=expr:jibb val.good
204+ ?. ?=(%group -.raw) 'BAD group'
205+ =/ call=expr:jibb inner.raw
206+ ?. ?=(%call -.call) 'BAD call'
207+ =/ wrap
208+ |= [n=@ud e=expr:jibb]
209+ ^- expr:jibb
210+ |-
211+ ?~ n e
212+ $(n (dec n), e [%group (span-of:jibb e) e])
213+ =/ w63=expr:jibb (wrap 63 call)
214+ =/ w64=expr:jibb (wrap 64 call)
215+ ?. (dg-direct-source:jibb w63 64) 'BAD 63 wrappers rejected'
216+ ?: (dg-direct-source:jibb w64 64) 'BAD 64 wrappers accepted'
217+ =/ exact=(list def:jibb) (weld (reap 63 other) ~[good])
218+ =/ over=(list def:jibb) [other exact]
219+ ?. (dg-source-candidate:jibb exact 64) 'BAD exact definitions rejected'
220+ ?: (dg-source-candidate:jibb over 64) 'BAD excessive definitions accepted'
221+ =/ unsupported=expr:jibb [%trace (span-of:jibb call) call call]
222+ ?: (dg-direct-source:jibb unsupported 64) 'BAD unsupported wrapper accepted'
223+ 'candidate screen boundaries passed'
224+++ deferred-report
225+ |= [nested-src=@t principal-src=@t missing-src=@t conflict-src=@t duplicate-src=@t hole-src=@t local-src=@t mutual-src=@t mold-hole-src=@t face-good-src=@t face-bad-src=@t]
226+ ^- @t
227+ =/ lines=(list @t) (case-nested nested-src)
228+ =. lines (weld lines (case-principal principal-src))
229+ =. lines (weld lines (case-negative missing-src conflict-src duplicate-src hole-src))
230+ =. lines (weld lines (case-groups local-src mutual-src))
231+ =. lines (weld lines (case-mold-hole mold-hole-src))
232+ =. lines (weld lines case-fresh)
233+ =. lines (weld lines case-safety)
234+ =. lines (weld lines (case-face-source face-good-src face-bad-src))
235+ =. lines (weld lines case-face-replay)
236+ =. lines (weld lines case-grec-scan)
237+ =. lines (weld lines ~[case-default-behavior case-screen-bounds])
238+ (of-wain:format lines)
239+++ test-deferred
240+ ^- tang
241+ =/ result=@t (deferred-report (text nested-src) (text principal-src) (text missing-src) (text conflict-src) (text duplicate-src) (text hole-src) (text local-src) (text mutual-src) (text mold-hole-src) (text face-good-src) (text face-bad-src))
242+ ?. =((to-wain:format (cat 3 result '\0a')) expected) ~[leaf+"deferred partial transaction report differs"]
243+ ~
244+--
tests/lib/jibb-direct-gate-source.hoon+3−3
@@ -12,8 +12,8 @@
1212++ direct-gate-prepared
1313 |= [prelude=@t internal=@t]
1414 ^- (unit iprelude:jibb)
15− :: This element is test-only; it does not prescribe a runtime shape.
16− =/ extra=@t '\0a+$ element |$ [M] [%node item=M]\0a+$ program |$ [D X M]\0a [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]\0a++ program |= [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]\0a ^- (program D X M) [init update view subs]\0a++ choose-layout |= [f=$-([A B] C) value=[A B]] (f value)\0a++ higher |= [f=$-([@t [x=@t y=@p]] @t) marker=?] f\0a++ higher-generic |= [f=$-([@t X] X) state=X] state\0a'
15+ :: Program and element come from the real prelude; only layout helpers are synthetic.
16+ =/ extra=@t '\0a++ choose-layout |= [f=$-([A B] C) value=[A B]] (f value)\0a++ higher |= [f=$-([@t [x=@t y=@p]] @t) marker=?] f\0a++ higher-generic |= [f=$-([@t X] X) state=X] state\0a'
1717 (prepare-prelude-with-internal:jibb (cat 3 prelude extra) internal)
1818++ direct-gate-source-output
1919 |= [src=@t prepared=(unit iprelude:jibb)]
@@ -23,7 +23,7 @@
2323 |= prepared=(unit iprelude:jibb)
2424 ^- (list tape)
2525 ?~ prepared ~["synthetic prelude did not prepare"]
26− =/ src=@t '+$ message\0a %start\0a %stop\0a+$ record [count=@ud label=@t]\0a++ init-record |= input=@t ^- record [count=0 label=input]\0a++ view-record |= state=record ^- (element message) [%node %start]\0a++ subs-record |= state=record ^- (list (sub message)) ~\0a++ update-proj-good |= [msg=message state=record]\0a ^- [record (list (cmd message))]\0a [(proj [count=0 label="projected" extra=%.y]) ~]\0a++ program-projection (program init-record update-proj-good view-record subs-record)\0a'
26+ =/ src=@t '+$ message\0a %start\0a %stop\0a+$ record [count=@ud label=@t]\0a++ init-record |= input=@t ^- record [count=0 label=input]\0a++ view-record |= state=record ^- (element message) (text "view")\0a++ subs-record |= state=record ^- (list (sub message)) ~\0a++ update-proj-good |= [msg=message state=record]\0a ^- [record (list (cmd message))]\0a [(proj [count=0 label="projected" extra=%.y]) ~]\0a++ program-projection (program init-record update-proj-good view-record subs-record)\0a'
2727 =/ out=jfile-result:jibb (infer-jibb-file:jibb /tests/direct/client/jibb src ~ ~ ~ ~[/tests/direct/client/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
2828 ?: ?=(%| -.out) ~["projection-bearing module did not infer"]
2929 =/ defs=(list iwidth-definition:jibb) (skim elaborations.iface.p.out |=(d=iwidth-definition:jibb =(%update-proj-good name.d)))
tests/lib/jibb-empty.hoonnew file+174
@@ -0,0 +1,174 @@
1+:: Source-backed empty-mold checks; no backend/runtime claim.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-empty/good/txt
6+/* overlap %txt /tests/type-empty/overlap/txt
7+/* dead %txt /tests/type-empty/dead/txt
8+/* missing %txt /tests/type-empty/missing/txt
9+/* standard-good %txt /tests/type-empty/standard-good/txt
10+/* list-dead %txt /tests/type-empty/list-dead/txt
11+/* unit-dead %txt /tests/type-empty/unit-dead/txt
12+/* late-cap %txt /tests/type-empty/late-cap/txt
13+/* list-live %txt /tests/type-empty/list-live/txt
14+/* list-open %txt /tests/type-empty/list-open/txt
15+/* face-source %txt /tests/type-empty/face-source/txt
16+/* expected %txt /tests/type-empty/expected/txt
17+|%
18+++ text
19+ |= lines=wain
20+ ^- @t
21+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
22+++ line
23+ |= [label=@t ok=?]
24+ ^- @t
25+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
26+++ face-retained
27+ |= [source=@t prelude=ifile:jibb]
28+ ^- ?
29+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb source)
30+ ?: ?=(%| -.parsed) |
31+ =/ ds=(list def:jibb) defs.p.parsed
32+ ?. ?=([* ~] ds) |
33+ =/ d=def:jibb i.ds
34+ ?. ?=(%value -.d) |
35+ =/ typ=itype:jibb [%collection %list ~[[%empty ~]]]
36+ =/ env=ienv:jibb ~[[%xs [typ ~]]]
37+ =/ state=istate:jibb *istate:jibb
38+ =. state state(prelude `prelude, jrec-fuel 256)
39+ =/ expected=itype:jibb [%cell [%atom %t] [%atom %t]]
40+ =/ result=(unit iresult:jibb)
41+ (empty-list-null-branch:jibb val.d env state `[expected (span-of:jibb val.d)])
42+ ?~ result |
43+ ?: ?=(%| -.u.result) |
44+ (itype-has-face:jibb typ.p.u.result sub.state.p.u.result)
45+++ empty-output
46+ |= [pre=@t internal=@t good=@t overlap=@t dead=@t missing=@t standard-good=@t list-dead=@t unit-dead=@t late-cap=@t list-live=@t list-open=@t face-source=@t]
47+ ^- @t
48+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
49+ ?~ prep 'BAD prelude preparation'
50+ =/ f=path /tests/empty/jibb
51+ =/ valid=jfile-result:jibb (infer-jibb-file:jibb f good ~ ~ ~ ~[f] ~ ~ ~ ~)
52+ ?: ?=(%| -.valid) 'BAD checked empty source'
53+ =/ never=(unit ischeme:jibb) (find-jibb-mold:jibb %never iface.p.valid)
54+ ?~ never 'BAD never export'
55+ =/ select=(unit ischeme:jibb) (ienv-lookup:jibb %select values.iface.p.valid)
56+ ?~ select 'BAD select export'
57+ =/ split=(unit ischeme:jibb) (find-jibb-mold:jibb %split iface.p.valid)
58+ ?~ split 'BAD split export'
59+ ?. ?=(%fn -.typ.u.select) 'BAD select gate'
60+ =/ selected=itype:jibb sample.typ.u.select
61+ =? selected ?=(%face -.selected) body.selected
62+ =/ parsed-overlap=(each module:jibb error:jibb) (parse:jibb f overlap)
63+ =/ parsed-dead=(each module:jibb error:jibb) (parse:jibb f dead)
64+ =/ parsed-missing=(each module:jibb error:jibb) (parse:jibb f missing)
65+ =/ parsed-list=(each module:jibb error:jibb) (parse:jibb f list-dead)
66+ =/ parsed-unit=(each module:jibb error:jibb) (parse:jibb f unit-dead)
67+ =/ invalid=jfile-result:jibb (infer-jibb-file:jibb f overlap ~ ~ ~ ~[f] ~ ~ ~ ~)
68+ =/ dead-result=jfile-result:jibb (infer-jibb-file:jibb f dead ~ ~ ~ ~[f] ~ ~ ~ ~)
69+ =/ missing-result=jfile-result:jibb (infer-jibb-file:jibb f missing ~ ~ ~ ~[f] ~ ~ ~ ~)
70+ =/ standard=jfile-result:jibb (infer-jibb-file:jibb f standard-good ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
71+ =/ only=(unit ischeme:jibb)
72+ ?- -.standard
73+ %& (ienv-lookup:jibb %list-only values.iface.p.standard)
74+ %| ~
75+ ==
76+ =/ only-context=(unit ischeme:jibb)
77+ ?- -.standard
78+ %& (ienv-lookup:jibb %list-only-context values.iface.p.standard)
79+ %| ~
80+ ==
81+ =/ only-good=?
82+ ?~ only |
83+ ?. ?=(%fn -.typ.u.only) |
84+ =/ sample=itype:jibb sample.typ.u.only
85+ =? sample ?=(%face -.sample) body.sample
86+ &(=(sample [%collection %list ~[[%empty ~]]]) =(product.typ.u.only [%atom %t]))
87+ =/ parsed-live=(each module:jibb error:jibb) (parse:jibb f list-live)
88+ =/ parsed-open=(each module:jibb error:jibb) (parse:jibb f list-open)
89+ =/ live-result=jfile-result:jibb (infer-jibb-file:jibb f list-live ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
90+ =/ open-result=jfile-result:jibb (infer-jibb-file:jibb f list-open ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
91+ =/ bad-list=jfile-result:jibb (infer-jibb-file:jibb f list-dead ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
92+ =/ bad-unit=jfile-result:jibb (infer-jibb-file:jibb f unit-dead ~ ~ ~ ~[f] values.u.prep molds.u.prep ~ `iface.u.prep)
93+ =/ atom=itype:jibb [%atom %t]
94+ =/ void=itype:jibb [%empty ~]
95+ =/ fn=itype:jibb [%fn atom atom]
96+ =/ impossible=itype:jibb [%cell fn [%face %field void]]
97+ =/ singleton=itype:jibb [%collection %list ~[void]]
98+ =/ proof=(unit [empty=? left=@ud]) (itype-empty-proof:jibb impossible ~ 4)
99+ =/ list-proof=(unit [empty=? left=@ud]) (itype-empty-proof:jibb singleton ~ 4)
100+ =/ fn-proof=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%fn void void] ~ 4)
101+ =/ unknown=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%var 23] ~ 4)
102+ =/ too-short=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%face %field void] ~ 1)
103+ =/ enough=(unit [empty=? left=@ud]) (itype-empty-proof:jibb [%face %field void] ~ 2)
104+ =/ empty-fit=ifit:jibb (itype-fit:jibb void atom ~ 17)
105+ =/ nested-fit=ifit:jibb (itype-fit:jibb impossible atom ~ 17)
106+ =/ atom-fit=ifit:jibb (itype-fit:jibb atom void ~ 17)
107+ =/ cap=icaps:jibb ~[['A' 23 *span:jibb]]
108+ =/ open-live=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb [%var 23] ~ ~ 4)
109+ =/ capital-live=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb [%var 23] ~ cap 4)
110+ =/ bound-empty=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb [%var 23] ~[[23 void]] cap 4)
111+ =/ opaque=itype:jibb [%recursive %opaque %mold ~]
112+ =/ opaque-live=(unit [result=?(%yes %no %unknown) left=@ud]) (itype-inhabited-proof:jibb opaque ~ ~ 4)
113+ =/ rejected-cases=(unit (list itype:jibb)) (itype-live-cases:jibb ~[opaque] ~ ~ 4)
114+ =/ no-gates=igate-free:jibb (gate-free-type:jibb impossible 8 ~)
115+ =/ list-gates=igate-free:jibb (gate-free-type:jibb singleton 8 ~)
116+ =/ checks=(list [label=@t ok=?])
117+ :~ ['empty mold exported' =([%empty ~] typ.u.never)]
118+ ['live union selector preserves type' &(=(typ.u.split selected) =([%atom %t] product.typ.u.select))]
119+ ['overlap parses and is rejected' &(?=(%& -.parsed-overlap) ?=(%| -.invalid))]
120+ ['dead empty case parses and is rejected' &(?=(%& -.parsed-dead) ?=(%| -.dead-result))]
121+ ['missing live case parses and is rejected' &(?=(%& -.parsed-missing) ?=(%| -.missing-result))]
122+ ['standard list and unit identities checked' ?=(%& -.standard)]
123+ ['single null list gate keeps its exact sample and result' only-good]
124+ ['contextual single null list gate checks' ?=(^ only-context)]
125+ ['contextual single null list arm retains faces' (face-retained face-source iface.u.prep)]
126+ ['one null arm on inhabited list declines' &(?=(%& -.parsed-live) ?=(%| -.live-result))]
127+ ['one null arm on generic list declines' &(?=(%& -.parsed-open) ?=(%| -.open-result))]
128+ ['empty list nonempty arm parses and is rejected' &(?=(%& -.parsed-list) ?=(%| -.bad-list))]
129+ ['empty unit present arm parses and is rejected' &(?=(%& -.parsed-unit) ?=(%| -.bad-unit))]
130+ ['nested empty proof' ?:(?=(~ proof) | empty.u.proof)]
131+ ['list of empty is inhabited' ?:(?=(~ list-proof) | !empty.u.list-proof)]
132+ ['gate returning empty is not empty' ?:(?=(~ fn-proof) | !empty.u.fn-proof)]
133+ ['unbound type not proved empty' ?:(?=(~ unknown) | !empty.u.unknown)]
134+ ['unbound inference type reachability unknown' ?:(?=(~ open-live) | =(%unknown result.u.open-live))]
135+ ['written capital can have a value' ?:(?=(~ capital-live) | =(%yes result.u.capital-live))]
136+ ['bound empty capital is unreachable' ?:(?=(~ bound-empty) | =(%no result.u.bound-empty))]
137+ ['opaque recursion reachability unknown' ?:(?=(~ opaque-live) | =(%unknown result.u.opaque-live))]
138+ ['opaque union case declines coverage proof' ?=(~ rejected-cases)]
139+ ['one proof node exhausted' ?=(~ too-short)]
140+ ['two proof nodes succeed' ?:(?=(~ enough) | &(empty.u.enough =(0 left.u.enough)))]
141+ ['empty fits a concrete type' ?=(%ok -.empty-fit)]
142+ ['empty cell fits a concrete type' ?=(%ok -.nested-fit)]
143+ ['inhabited atom does not fit empty' ?=(%bad -.atom-fit)]
144+ ['empty gate-bearing cell is gate-free' &(=(%yes verdict.no-gates) !inhabited.no-gates)]
145+ ['list of empty is gate-free and inhabited' &(=(%yes verdict.list-gates) inhabited.list-gates)]
146+ ==
147+ =/ report=@t (golden-types-in-context:jibb f good ~ ~ ~ ~ ~ ~)
148+ =/ overlap-report=@t (golden-types-in-context:jibb f overlap ~ ~ ~ ~ ~ ~)
149+ =/ dead-report=@t (golden-types-in-context:jibb f dead ~ ~ ~ ~ ~ ~)
150+ =/ missing-report=@t (golden-types-in-context:jibb f missing ~ ~ ~ ~ ~ ~)
151+ =/ list-report=@t (golden-types-with-prepared-prelude:jibb f list-dead ~ ~ ~ prep)
152+ =/ unit-report=@t (golden-types-with-prepared-prelude:jibb f unit-dead ~ ~ ~ prep)
153+ =/ late-report=@t (golden-types-with-prepared-prelude:jibb f late-cap ~ ~ ~ prep)
154+ (rap 3 ~[(of-wain:format (turn checks line)) '\0a' report '\0a' overlap-report '\0a' dead-report '\0a' missing-report '\0a' list-report '\0a' unit-report '\0a' late-report])
155+++ test-empty
156+ ^- tang
157+ ?~ good ~[leaf+"empty source missing"]
158+ ?~ overlap ~[leaf+"overlap source missing"]
159+ ?~ dead ~[leaf+"dead case source missing"]
160+ ?~ missing ~[leaf+"missing case source missing"]
161+ ?~ standard-good ~[leaf+"standard type source missing"]
162+ ?~ list-dead ~[leaf+"empty list source missing"]
163+ ?~ unit-dead ~[leaf+"empty unit source missing"]
164+ ?~ late-cap ~[leaf+"late capital source missing"]
165+ ?~ list-live ~[leaf+"inhabited list source missing"]
166+ ?~ list-open ~[leaf+"generic list source missing"]
167+ ?~ face-source ~[leaf+"face source missing"]
168+ ?~ expected ~[leaf+"expected output missing"]
169+ =/ actual=@t
170+ (empty-output real-prelude real-internal (text good) (text overlap) (text dead) (text missing) (text standard-good) (text list-dead) (text unit-dead) (text late-cap) (text list-live) (text list-open) (text face-source))
171+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
172+ ~[leaf+"empty mold output differs from expected"]
173+ ~
174+--
tests/lib/jibb-full-overlap-basic.hoonnew file+143
@@ -0,0 +1,143 @@
1+:: Source-bound full-module overlap diagnostics.
2+/+ jibb
3+/* same %txt /tests/type-full-overlap/same/txt
4+/* zero %txt /tests/type-full-overlap/zero/txt
5+/* unsupported %txt /tests/type-full-overlap/unsupported/txt
6+/* precedence %txt /tests/type-full-overlap/precedence/txt
7+/* duplicate %txt /tests/type-full-overlap/duplicate/txt
8+/* invalid %txt /tests/type-full-overlap/invalid/txt
9+/* distinct %txt /tests/type-full-overlap/distinct/txt
10+/* parent %txt /tests/type-full-overlap/parent/txt
11+/* child %txt /tests/type-full-overlap/child/txt
12+/* generic %txt /tests/type-full-overlap/generic/txt
13+/* duplicate-generic %txt /tests/type-full-overlap/duplicate-generic/txt
14+/* expected %txt /tests/type-full-overlap/expected-basic/txt
15+|%
16++$ overlap-evidence [file=path source=@t name=term cases=upair:jibb]
17++$ detailed-result
18+ (each [iface=ifile:jibb cache=jcache:jibb] [message=@t overlap=(unit overlap-evidence)])
19+++ source-pair
20+ |= [file=path source=@t name=term]
21+ ^- (unit upair:jibb)
22+ =/ parsed (parse:jibb file source)
23+ ?: ?=(%| -.parsed) ~
24+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
25+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
26+ ?~ found ~
27+ =/ sh=shape:jibb u.found
28+ =? sh ?=(%generic -.sh) body.sh
29+ ?. ?=(%union -.sh) ~
30+ ?~ cases.sh ~
31+ ?~ t.cases.sh ~
32+ `[at.i.cases.sh at.i.t.cases.sh %overlap]
33+++ source-witness
34+ |= [file=path source=@t name=term]
35+ ^- ?
36+ =/ parsed (parse:jibb file source)
37+ ?: ?=(%| -.parsed) |
38+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
39+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
40+ ?~ found |
41+ =/ sh=shape:jibb u.found
42+ =? sh ?=(%generic -.sh) body.sh
43+ ?. ?=(%union -.sh) |
44+ ?=(^ (union-source-overlap:jibb cases.sh molds 256))
45+++ detailed
46+ |= [file=path source=@t modules=jbundle:jibb]
47+ ^- detailed-result
48+ (infer-jibb-file-detailed:jibb file source ~ ~ modules ~[file] ~ ~ ~ ~)
49+++ expected-overlap
50+ |= [file=path source=@t name=term]
51+ ^- ?
52+ =/ expected=(unit upair:jibb) (source-pair file source name)
53+ ?~ expected |
54+ =/ result=detailed-result (detailed file source ~)
55+ ?: ?=(%& -.result) |
56+ ?~ overlap.p.result |
57+ =/ ev=overlap-evidence u.overlap.p.result
58+ ?& !=(0 message.p.result)
59+ =(file.ev file)
60+ =(source.ev source)
61+ =(name.ev name)
62+ =(cases.ev u.expected)
63+ =(%overlap relation.cases.ev)
64+ =(3 line.beg.first.cases.ev)
65+ =(3 col.beg.first.cases.ev)
66+ =(4 line.beg.second.cases.ev)
67+ =(3 col.beg.second.cases.ev)
68+ ==
69+++ plain-failure
70+ |= [file=path source=@t]
71+ ^- ?
72+ =/ parsed (parse:jibb file source)
73+ ?: ?=(%| -.parsed) |
74+ =/ result=detailed-result (detailed file source ~)
75+ ?: ?=(%& -.result) |
76+ &(!=(0 message.p.result) ?=(~ overlap.p.result))
77+++ run
78+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
79+ ^- (list [@t ?])
80+ =/ root=path /ui/root/jibb
81+ =/ names256=(list @t) (turn (gulf 0 255) |=(n=@ud (scot %ud n)))
82+ =/ names257=(list @t) (turn (gulf 0 256) |=(n=@ud (scot %ud n)))
83+ =/ child-file=path /ui/child/jibb
84+ =/ good-parsed (parse:jibb root distinct)
85+ =/ good-result=detailed-result (detailed root distinct ~)
86+ =/ bad-parsed (parse:jibb root invalid)
87+ =/ bad-result=detailed-result (detailed root invalid ~)
88+ =/ invalid-clean=?
89+ ?: ?=(%& -.bad-parsed) |
90+ ?: ?=(%& -.bad-result) |
91+ &(!=(0 message.p.bad-result) ?=(~ overlap.p.bad-result))
92+ =/ legacy=jfile-result:jibb (infer-jibb-file:jibb root same ~ ~ ~ ~[root] ~ ~ ~ ~)
93+ =/ legacy-excerpts=?
94+ ?: ?=(%& -.legacy) |
95+ =/ lines=wain (to-wain:format p.legacy)
96+ &((lien lines |=(line=@t =(line '/ui/root.jibb:3:3: first union case'))) (lien lines |=(line=@t =(line '/ui/root.jibb:4:3: overlapping case'))))
97+ =/ imported=detailed-result (detailed root parent ~[[child-file child]])
98+ =/ child-pair=(unit upair:jibb) (source-pair child-file child %child-bad)
99+ =/ import-valid=?
100+ ?: ?=(%& -.imported) |
101+ ?: =(0 message.p.imported) |
102+ ?~ overlap.p.imported |
103+ ?~ child-pair |
104+ =/ ev=overlap-evidence u.overlap.p.imported
105+ ?& =(file.ev child-file)
106+ =(source.ev child)
107+ =(name.ev %child-bad)
108+ =(cases.ev u.child-pair)
109+ ==
110+ :~ ['256 generic parameters accepted by scan' (module-mold-params-valid:jibb names256 *(set @t) 256)]
111+ ['257 generic parameters exhaust scan' !(module-mold-params-valid:jibb names257 *(set @t) 256)]
112+ ['duplicate generic parameters fail scan' !(module-mold-params-valid:jibb ~['A' 'A'] *(set @t) 256)]
113+ ['same head has source-bound overlap' (expected-overlap root same %bad)]
114+ ['zero spelling has source-bound overlap' (expected-overlap root zero %bad)]
115+ ['generic wrapper has source-bound overlap' (expected-overlap root generic %bad)]
116+ ['duplicate generic parameters remain unstructured' (plain-failure root duplicate-generic)]
117+ ['unsupported remains unstructured' (plain-failure root unsupported)]
118+ ['later overlap exists in precedence source' (source-witness root precedence %bad)]
119+ ['earlier unsupported mold takes precedence' (plain-failure root precedence)]
120+ ['duplicate source parsed but rejects without overlap' (plain-failure root duplicate)]
121+ ['invalid source rejects without overlap' invalid-clean]
122+ ['distinct alias source parses and checks' &(?=(%& -.good-parsed) ?=(%& -.good-result))]
123+ ['parent itself has different positive overlap' (source-witness root parent %parent-bad)]
124+ ['legacy full-module error contains both excerpts' legacy-excerpts]
125+ ['import overlap retains exact child source' import-valid]
126+ ==
127+++ text
128+ |= lines=wain
129+ ^- @t
130+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
131+++ output
132+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
133+ ^- @t
134+ =/ result=(list [@t ?]) (run same zero unsupported precedence duplicate invalid distinct parent child generic duplicate-generic)
135+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
136+++ test-full-overlap-basic
137+ ^- tang
138+ ?~ expected ~[leaf+"expected output missing"]
139+ =/ actual=@t (output (text same) (text zero) (text unsupported) (text precedence) (text duplicate) (text invalid) (text distinct) (text parent) (text child) (text generic) (text duplicate-generic))
140+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
141+ ~[leaf+"full-module overlap output differs"]
142+ ~
143+--
tests/lib/jibb-full-overlap-graph.hoonnew file+126
@@ -0,0 +1,126 @@
1+:: Source-bound full-module overlap diagnostics.
2+/+ jibb
3+/* parent %txt /tests/type-full-overlap/parent/txt
4+/* child %txt /tests/type-full-overlap/child/txt
5+/* distinct %txt /tests/type-full-overlap/distinct/txt
6+/* expected %txt /tests/type-full-overlap/expected-graph/txt
7+|%
8++$ overlap-evidence [file=path source=@t name=term cases=upair:jibb]
9++$ detailed-result
10+ (each [iface=ifile:jibb cache=jcache:jibb] [message=@t overlap=(unit overlap-evidence)])
11+++ detailed
12+ |= [file=path source=@t modules=jbundle:jibb]
13+ ^- detailed-result
14+ (infer-jibb-file-detailed:jibb file source ~ ~ modules ~[file] ~ ~ ~ ~)
15+++ source-pair
16+ |= [file=path source=@t]
17+ ^- (unit upair:jibb)
18+ =/ parsed (parse:jibb file source)
19+ ?: ?=(%| -.parsed) ~
20+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
21+ =/ found=(unit shape:jibb) (find-simple-mold:jibb %child-bad molds)
22+ ?~ found ~
23+ ?. ?=(%union -.u.found) ~
24+ ?~ cases.u.found ~
25+ ?~ t.cases.u.found ~
26+ `[at.i.cases.u.found at.i.t.cases.u.found %overlap]
27+++ failure-message
28+ |= [r=detailed-result expected-message=@t]
29+ ^- ?
30+ ?: ?=(%& -.r) |
31+ &(=(message.p.r expected-message) ?=(~ overlap.p.r))
32+++ run
33+ |= [parent=@t child=@t distinct=@t]
34+ ^- (list [@t ?])
35+ =/ root=path /ui/root/jibb
36+ =/ child-file=path /ui/child/jibb
37+ =/ good-parsed (parse:jibb child-file distinct)
38+ =/ parent-parsed (parse:jibb root parent)
39+ =/ child-parsed (parse:jibb child-file child)
40+ ?: ?=(%| -.good-parsed) ~[['BAD valid child parse' |]]
41+ ?: ?=(%| -.parent-parsed) ~[['BAD parent parse' |]]
42+ ?: ?=(%| -.child-parsed) ~[['BAD child parse' |]]
43+ =/ child-pair=(unit upair:jibb) (source-pair child-file child)
44+ ?~ child-pair ~[['BAD child pair' |]]
45+ =/ old=detailed-result (detailed child-file distinct ~)
46+ =/ cache-controls=[rebuilt=? stale=? source-bound=?]
47+ ?: ?=(%| -.old) [| | |]
48+ =/ previous=ifile:jibb iface.p.old
49+ =/ source-bound=?
50+ ?~ source.previous |
51+ ?~ graph.previous |
52+ ?& =(at.previous child-file)
53+ =(u.source.previous distinct)
54+ (request-graph-reusable:jibb previous distinct ~ ~ ~ ~ ~ ~ ~)
55+ !(request-graph-reusable:jibb previous child ~ ~ ~ ~ ~ ~ ~)
56+ ==
57+ =/ detached=ifile:jibb previous(graph ~)
58+ =/ rebuilt=detailed-result
59+ (infer-jibb-file-detailed:jibb root parent ~ ~ ~[[child-file child]] ~[root] ~ ~ ~[[child-file detached]] ~)
60+ =/ stale=detailed-result
61+ (infer-jibb-file-detailed:jibb root parent ~ ~ ~[[child-file child]] ~[root] ~ ~ ~[[child-file previous]] ~)
62+ =/ rebuilt-ok=?
63+ ?: ?=(%& -.rebuilt) |
64+ ?~ overlap.p.rebuilt |
65+ ?& =(file.u.overlap.p.rebuilt child-file)
66+ =(source.u.overlap.p.rebuilt child)
67+ =(name.u.overlap.p.rebuilt %child-bad)
68+ =(cases.u.overlap.p.rebuilt u.child-pair)
69+ ==
70+ =/ stale-ok=?
71+ ?: ?=(%& -.stale) |
72+ &(=(message.p.stale 'cached module evidence needs unsupported inference') ?=(~ overlap.p.stale))
73+ [rebuilt-ok stale-ok source-bound]
74+ =/ middle=@t (of-wain:format ~['/= leaf /ui/leaf' '+$ okay @t'])
75+ =/ leaf-file=path /ui/leaf/jibb
76+ =/ middle-parsed (parse:jibb child-file middle)
77+ =/ transitive=detailed-result
78+ (infer-jibb-file-detailed:jibb root parent ~ ~ ~[[child-file middle] [leaf-file child]] ~[root] ~ ~ ~ ~)
79+ =/ transitive-ok=?
80+ ?: ?=(%| -.middle-parsed) |
81+ ?: ?=(%& -.transitive) |
82+ ?~ overlap.p.transitive |
83+ ?& =(file.u.overlap.p.transitive leaf-file)
84+ =(source.u.overlap.p.transitive child)
85+ =(name.u.overlap.p.transitive %child-bad)
86+ =(cases.u.overlap.p.transitive u.child-pair)
87+ ==
88+ =/ clean-failure
89+ |= r=detailed-result
90+ ^- ?
91+ ?: ?=(%& -.r) |
92+ &(!=(0 message.p.r) ?=(~ overlap.p.r))
93+ =/ private-src=@t (of-wain:format ~['/= secret /lib/jibb/internal' '+$ good @t'])
94+ =/ cycle-src=@t (of-wain:format ~['/= mine /ui/root' '+$ good @t'])
95+ =/ private-parsed (parse:jibb root private-src)
96+ =/ cycle-parsed (parse:jibb root cycle-src)
97+ =/ private-result=detailed-result (detailed root private-src ~)
98+ =/ cycle-result=detailed-result (detailed root cycle-src ~)
99+ =/ duplicate-result=detailed-result (detailed root parent ~[[child-file child] [child-file child]])
100+ =/ missing-result=detailed-result (detailed root parent ~)
101+ :~ ['detached cache rebuild preserves child evidence' rebuilt.cache-controls]
102+ ['mismatched graph cache declines without evidence' stale.cache-controls]
103+ ['verified cache source binding' source-bound.cache-controls]
104+ ['private import declines before source proof' &(?=(%& -.private-parsed) (failure-message private-result 'the prelude internal module is private'))]
105+ ['active cycle declines before source proof' &(?=(%& -.cycle-parsed) (failure-message cycle-result (crip "import cycle at {(spud root)}")))]
106+ ['duplicate child sources decline without evidence' (clean-failure duplicate-result)]
107+ ['missing child source declines without evidence' (clean-failure missing-result)]
108+ ['transitive import retains leaf source' transitive-ok]
109+ ==
110+++ text
111+ |= lines=wain
112+ ^- @t
113+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
114+++ output
115+ |= [parent=@t child=@t distinct=@t]
116+ ^- @t
117+ =/ result=(list [@t ?]) (run parent child distinct)
118+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
119+++ test-full-overlap-graph
120+ ^- tang
121+ ?~ expected ~[leaf+"expected output missing"]
122+ =/ actual=@t (output (text parent) (text child) (text distinct))
123+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
124+ ~[leaf+"full-module overlap output differs"]
125+ ~
126+--
tests/lib/jibb-generic-construction.hoonnew file+141
@@ -0,0 +1,141 @@
1+:: Source-proven generic tree construction; not a backend/runtime test.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* tree %txt /tests/type-generic-construction/tree/txt
6+/* alias %txt /tests/type-generic-construction/alias/txt
7+/* client %txt /tests/type-generic-construction/client/txt
8+/* alias-client %txt /tests/type-generic-construction/alias-client/txt
9+/* tree-no-event %txt /tests/type-generic-construction/tree-no-event/txt
10+/* no-event-client %txt /tests/type-generic-construction/no-event-client/txt
11+/* owner-positive %txt /tests/type-generic-construction/owner-positive/txt
12+/* owner-negative %txt /tests/type-generic-construction/owner-negative/txt
13+/* sibling-values %txt /tests/type-generic-construction/sibling-values/txt
14+/* expected %txt /tests/type-generic-construction/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ line
21+ |= [label=@t ok=?]
22+ ^- @t
23+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
24+++ construction-output
25+ |= [pre=@t internal=@t tree=@t alias=@t client=@t alias-client=@t tree-no-event=@t no-event-client=@t owner-positive=@t owner-negative=@t sibling-values=@t]
26+ ^- @t
27+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
28+ ?~ prep 'BAD prelude preparation'
29+ :: Complete owner is checked by the real source interface, not this unit state.
30+ =/ owner=jfile-result:jibb
31+ (infer-jibb-file:jibb /ui/tree/jibb owner-positive ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
32+ ?: ?=(%| -.owner) 'BAD valid owner'
33+ =/ bad-owner=jfile-result:jibb
34+ (infer-jibb-file:jibb /ui/tree/jibb owner-negative ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35+ =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-negative)
36+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.owner)
37+ ?~ mold 'BAD owner mold'
38+ ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
39+ =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
40+ =/ target=itype:jibb typ.u.mold(args ~[[%atom %t]])
41+ ?> ?=(%grec -.generic)
42+ ?> ?=(%grec -.target)
43+ =/ owner-leaf=(unit ischeme:jibb) (ienv-lookup:jibb %made-leaf values.iface.p.owner)
44+ =/ owner-node=(unit ischeme:jibb) (ienv-lookup:jibb %made-node values.iface.p.owner)
45+ =/ leaf-ok=? ?~(owner-leaf | &(?=(~ vars.u.owner-leaf) =(target typ.u.owner-leaf)))
46+ =/ node-ok=? ?~(owner-node | &(?=(~ vars.u.owner-node) =(target typ.u.owner-node)))
47+ =/ foreign=itype:jibb target(at /ui/foreign/jibb)
48+ =/ view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb generic 2)
49+ ?~ view 'BAD generic view'
50+ =/ target-view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb target 2)
51+ ?~ target-view 'BAD target view'
52+ =/ expected-leaf=itype:jibb [%cell [%const [%term %tas %text '%text']] [%face %value [%atom %t]]]
53+ =/ expected-node=itype:jibb [%cell [%const [%term %tas %node '%node']] [%cell [%face %event [%fn [%atom %t] [%var 42]]] [%face %children [%collection %list ~[generic]]]]]
54+ =/ expected-view=itype:jibb [%union ~[expected-leaf expected-node] ~ ~ ~]
55+ =/ wrong-view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb foreign 2)
56+ =/ malformed=shape:jibb *shape:jibb
57+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/tree/values/jibb sibling-values)
58+ ?: ?=(%| -.parsed) 'BAD values parse'
59+ =/ ds=(list def:jibb) defs.p.parsed
60+ ?. ?=([* [* [* [* ~]]]] ds) 'BAD values count'
61+ =/ a=def:jibb i.ds
62+ =/ b=def:jibb i.t.ds
63+ =/ c=def:jibb i.t.t.ds
64+ =/ d=def:jibb i.t.t.t.ds
65+ ?. &(?=(%value -.a) ?=(%value -.b) ?=(%value -.c) ?=(%value -.d)) 'BAD value declarations'
66+ =/ env=ienv:jibb ~[[%text-event [[%fn [%atom %t] [%atom %t]] ~]]]
67+ =/ tag=ipending:jibb [100 [%term %tas %unrelated '%unrelated']]
68+ =/ projection=iwprojection:jibb *iwprojection:jibb
69+ =/ st=istate:jibb *istate:jibb
70+ =. st st(next 201, prelude `iface.u.prep, tags ~[tag], holes ~[[99 (span-of:jibb val.a)]], projections ~[projection])
71+ =/ r0=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 0) (span-of:jibb val.a))
72+ =/ r1=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 1) (span-of:jibb val.a))
73+ =/ rnode=iresult:jibb (infer-call-context-arg:jibb val.b target env st(jrec-fuel 1) (span-of:jibb val.b))
74+ =/ short=iresult:jibb (infer-call-context-arg:jibb val.c target env st(jrec-fuel 1) (span-of:jibb val.c))
75+ =/ nested=iresult:jibb (infer-call-context-arg:jibb val.c target env st(jrec-fuel 2) (span-of:jibb val.c))
76+ =/ sibling-short=iresult:jibb (infer-call-context-arg:jibb val.d target env st(jrec-fuel 2) (span-of:jibb val.d))
77+ =/ siblings=iresult:jibb (infer-call-context-arg:jibb val.d target env st(jrec-fuel 3) (span-of:jibb val.d))
78+ =/ retry=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 1) (span-of:jibb val.a))
79+ =/ failed-retry=iresult:jibb (infer-call-context-arg:jibb val.a target env st(jrec-fuel 0) (span-of:jibb val.a))
80+ =/ rvar=iresult:jibb (infer-call-context-arg:jibb val.b generic env st(jrec-fuel 1) (span-of:jibb val.b))
81+ =/ hidden=istate:jibb st(sub ~[[200 target]], jrec-fuel 2)
82+ =/ rhidden=iresult:jibb (infer-call-context-arg:jibb val.a [%var 200] env hidden (span-of:jibb val.a))
83+ =/ hidden-safe=?
84+ ?: ?=(%| -.rhidden) &
85+ =/ fit=ifit:jibb (itype-fit:jibb typ.p.rhidden [%var 200] sub.state.p.rhidden next.state.p.rhidden)
86+ ?=(%unknown -.fit)
87+ =/ exact=isub:jibb (turn (gulf 1 4.096) |=(n=@ud [(add 1.000 n) [%atom %t]]))
88+ =/ over=isub:jibb [[9.999 [%atom %t]] exact]
89+ =/ face-exact=isub:jibb (turn (gulf 1 4.095) |=(n=@ud [(add 1.000 n) [%atom %t]]))
90+ =/ checks=(list [label=@t ok=?])
91+ :~ ['complete owner' ?=(%& -.owner)]
92+ ['owner exports constructed nominal values' &(leaf-ok node-ok)]
93+ ['invalid owner declined' &(?=(%& -.bad-parse) ?=(%| -.bad-owner))]
94+ ['view spends one step' =(1 left.u.view)]
95+ ['view retains argument and child identity' =(expected-view view.u.view)]
96+ ['zero view fuel declined' ?=(~ (grec-unfold-view:jibb generic 0))]
97+ ['malformed proof declined' ?=(~ (grec-unfold-view:jibb generic(proof malformed) 2))]
98+ ['foreign recursive tail retained' ?:(?=(~ wrong-view) | !=(view.u.wrong-view view.u.target-view))]
99+ ['zero inference fuel declined' ?=(%| -.r0)]
100+ ['one-step leaf retains nominal identity' ?:(?=(%& -.r1) &(=(target typ.p.r1) =(0 jrec-fuel.state.p.r1)) |)]
101+ ['one-step node succeeds' ?:(?=(%& -.rnode) &(=(target typ.p.rnode) =(0 jrec-fuel.state.p.rnode)) |)]
102+ ['nested one-step declined' ?=(%| -.short)]
103+ ['nested two-step succeeds' ?:(?=(%& -.nested) &(=(target typ.p.nested) =(0 jrec-fuel.state.p.nested)) |)]
104+ ['siblings share fuel' &(?=(%| -.sibling-short) ?:(?=(%& -.siblings) =(0 jrec-fuel.state.p.siblings) |))]
105+ ['same-state retry agrees' =(r1 retry)]
106+ ['failed retry agrees' =(r0 failed-retry)]
107+ ['argument binding retains source identity' ?:(?=(%& -.rvar) =(target (itype-normalize:jibb typ.p.rvar sub.state.p.rvar)) |)]
108+ ['pending tag retained' ?:(?=(%& -.r1) (lien tags.state.p.r1 |=(entry=ipending:jibb =(entry tag))) |)]
109+ ['pending hole retained' ?:(?=(%& -.r1) =(holes.st holes.state.p.r1) |)]
110+ ['projection evidence retained' ?:(?=(%& -.r1) =(projections.st projections.state.p.r1) |)]
111+ ['hidden variable declined' hidden-safe]
112+ ['scan exact limit' (grec-direct-context:jibb target exact)]
113+ ['scan over limit declined' !(grec-direct-context:jibb target over)]
114+ ['faced scan exact limit' (grec-direct-context:jibb [%face %field target] face-exact)]
115+ ['faced scan over limit declined' !(grec-direct-context:jibb [%face %field target] exact)]
116+ ['structural substitution declined' !(grec-direct-context:jibb target ~[[9 [%cell [%atom %t] [%atom %t]]]])]
117+ ==
118+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
119+ =/ small=jbundle:jibb ~[[/ui/tree/jibb tree-no-event] [/ui/tree-two/jibb tree-no-event]]
120+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
121+ =/ aliases=@t (golden-types-with-prepared-prelude:jibb /tests/tree/alias-client/jibb alias-client ~ ~ modules prep)
122+ =/ no-event=@t (golden-types-with-prepared-prelude:jibb /tests/tree/no-event-client/jibb no-event-client ~ ~ small prep)
123+ (cat 3 (of-wain:format (turn checks line)) (cat 3 '\0a' (cat 3 report (cat 3 '\0a' (cat 3 aliases (cat 3 '\0a' no-event))))))
124+++ test-generic-construction
125+ ^- tang
126+ ?~ tree ~[leaf+"tree source missing"]
127+ ?~ alias ~[leaf+"alias source missing"]
128+ ?~ client ~[leaf+"client source missing"]
129+ ?~ alias-client ~[leaf+"alias client missing"]
130+ ?~ tree-no-event ~[leaf+"tree without event missing"]
131+ ?~ no-event-client ~[leaf+"no-event client missing"]
132+ ?~ owner-positive ~[leaf+"owner source missing"]
133+ ?~ owner-negative ~[leaf+"invalid owner source missing"]
134+ ?~ sibling-values ~[leaf+"sibling source missing"]
135+ ?~ expected ~[leaf+"expected output missing"]
136+ =/ actual=@t
137+ (construction-output real-prelude real-internal (text tree) (text alias) (text client) (text alias-client) (text tree-no-event) (text no-event-client) (text owner-positive) (text owner-negative) (text sibling-values))
138+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
139+ ~[leaf+"generic construction output differs from expected"]
140+ ~
141+--
tests/lib/jibb-generic-pattern.hoonnew file+165
@@ -0,0 +1,165 @@
1+:: Source-proven generic recursive patterns; no backend/runtime claim.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* tree %txt /tests/type-generic-construction/tree/txt
6+/* alias %txt /tests/type-generic-construction/alias/txt
7+/* tree-no-event %txt /tests/type-generic-construction/tree-no-event/txt
8+/* client %txt /tests/type-generic-pattern/client/txt
9+/* no-event %txt /tests/type-generic-pattern/no-event/txt
10+/* values %txt /tests/type-generic-pattern/values/txt
11+/* poly-values %txt /tests/type-generic-pattern/poly-values/txt
12+/* owner %txt /tests/type-generic-pattern/owner/txt
13+/* owner-bad %txt /tests/type-generic-pattern/owner-bad/txt
14+/* expected %txt /tests/type-generic-pattern/expected/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+++ line
21+ |= [label=@t ok=?]
22+ ^- @t
23+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
24+++ pattern-output
25+ |= [pre=@t internal=@t tree=@t alias=@t tree-no-event=@t client=@t no-event=@t values=@t poly-values=@t owner=@t owner-bad=@t]
26+ ^- @t
27+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
28+ ?~ prep 'BAD prelude preparation'
29+ =/ checked=jfile-result:jibb
30+ (infer-jibb-file:jibb /ui/tree/jibb owner ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
31+ ?: ?=(%| -.checked) 'BAD valid owner'
32+ =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-bad)
33+ =/ bad=jfile-result:jibb
34+ (infer-jibb-file:jibb /ui/tree/jibb owner-bad ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.checked)
36+ ?~ mold 'BAD owner mold'
37+ ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
38+ =/ target=itype:jibb typ.u.mold(args ~[[%atom %t]])
39+ =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
40+ ?> ?=(%grec -.target)
41+ ?> ?=(%grec -.generic)
42+ =/ desc=(unit ischeme:jibb) (ienv-lookup:jibb %describe values.iface.p.checked)
43+ =/ children=(unit ischeme:jibb) (ienv-lookup:jibb %children values.iface.p.checked)
44+ =/ rebuild=(unit ischeme:jibb) (ienv-lookup:jibb %rebuild values.iface.p.checked)
45+ ?~ desc 'BAD owner describe missing'
46+ ?~ children 'BAD owner children missing'
47+ ?~ rebuild 'BAD owner rebuild missing'
48+ ?. &(?=(%fn -.typ.u.desc) ?=(%fn -.typ.u.children) ?=(%fn -.typ.u.rebuild)) 'BAD owner gate types'
49+ ?. ?=([@ ~] vars.u.children) 'BAD owner children quantification'
50+ =/ desc-sample=itype:jibb sample.typ.u.desc
51+ =/ children-sample=itype:jibb sample.typ.u.children
52+ =/ rebuild-sample=itype:jibb sample.typ.u.rebuild
53+ =? desc-sample ?=(%face -.desc-sample) body.desc-sample
54+ =? children-sample ?=(%face -.children-sample) body.children-sample
55+ =? rebuild-sample ?=(%face -.rebuild-sample) body.rebuild-sample
56+ =/ quantified=itype:jibb typ.u.mold(args ~[[%var i.vars.u.children]])
57+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/tree/values/jibb values)
58+ ?: ?=(%| -.parsed) 'BAD values parse'
59+ =/ ds=(list def:jibb) defs.p.parsed
60+ ?. ?=([* [* [* [* [* ~]]]]] ds) 'BAD value count'
61+ =/ a=def:jibb i.ds
62+ =/ b=def:jibb i.t.ds
63+ ?. &(?=(%value -.a) ?=(%value -.b)) 'BAD value declarations'
64+ =/ c=def:jibb i.t.t.ds
65+ =/ d=def:jibb i.t.t.t.ds
66+ =/ e=def:jibb i.t.t.t.t.ds
67+ ?. &(?=(%value -.c) ?=(%value -.d) ?=(%value -.e)) 'BAD extra value declarations'
68+ ?. &(?=(%branch -.val.c) ?=(%branch -.val.d) ?=(%branch -.val.e)) 'BAD extra branches'
69+ ?. ?=([* *] arms.val.c) 'BAD fallback arms'
70+ =/ sample-arm=arm:jibb i.arms.val.c
71+ =/ parsed-poly=(each module:jibb error:jibb) (parse:jibb /tests/tree/poly/jibb poly-values)
72+ ?: ?=(%| -.parsed-poly) 'BAD polymorphic values parse'
73+ =/ ps=(list def:jibb) defs.p.parsed-poly
74+ ?. ?=([* ~] ps) 'BAD polymorphic value count'
75+ =/ p=def:jibb i.ps
76+ ?. ?=(%value -.p) 'BAD polymorphic value'
77+ ?. ?=(%branch -.val.p) 'BAD polymorphic branch'
78+ =/ env=ienv:jibb ~[[%x [target ~]]]
79+ =/ poly=ienv:jibb ~[[%x [generic ~[42]]]]
80+ =/ tag=ipending:jibb [100 [%term %tas %unrelated '%unrelated']]
81+ =/ projection=iwprojection:jibb *iwprojection:jibb
82+ =/ st=istate:jibb *istate:jibb
83+ =. st st(next 201, prelude `iface.u.prep, tags ~[tag], holes ~[[99 (span-of:jibb val.a)]], projections ~[projection])
84+ =/ zero=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 0))
85+ =/ one=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 1))
86+ =/ short=iresult:jibb (infer-fragment:jibb val.b env st(jrec-fuel 1))
87+ =/ nested=iresult:jibb (infer-fragment:jibb val.b env st(jrec-fuel 2))
88+ =/ retry=iresult:jibb (infer-fragment:jibb val.a env st(jrec-fuel 1))
89+ =/ hidden=ienv:jibb ~[[%x [[%var 200] ~]]]
90+ =/ hidden-result=iresult:jibb (infer-fragment:jibb val.a hidden st(sub ~[[200 target]], jrec-fuel 2))
91+ =/ first=(unit iresult:jibb) (grec-single-wing-subject:jibb subject.val.p poly st(jrec-fuel 4))
92+ =/ second=(unit iresult:jibb) (grec-single-wing-subject:jibb subject.val.p poly st(next 202, jrec-fuel 4))
93+ ?~ first 'BAD first scheme lookup'
94+ ?~ second 'BAD second scheme lookup'
95+ ?. &(?=(%& -.u.first) ?=(%& -.u.second)) 'BAD scheme inference'
96+ =/ ft=itype:jibb typ.p.u.first
97+ =/ stype=itype:jibb typ.p.u.second
98+ ?. &(?=(%grec -.ft) ?=(%grec -.stype)) 'BAD scheme nominal identity'
99+ ?. &(?=([* ~] args.ft) ?=([* ~] args.stype)) 'BAD scheme argument count'
100+ =/ pmissing=iresult:jibb (infer-fragment:jibb val.p poly st(jrec-fuel 4))
101+ =/ view=(unit [view=itype:jibb left=@ud]) (grec-unfold-view:jibb target 1)
102+ ?~ view 'BAD recursive view'
103+ =/ many=(list arm:jibb)
104+ =/ n=@ud 128
105+ =/ out=(list arm:jibb) ~
106+ |-
107+ ?: =(0 n) out
108+ $(n (dec n), out [sample-arm out])
109+ =/ in-view=iresult:jibb [%& target st(jrec-fuel 1)]
110+ =/ exact=expr:jibb val.c(arms many)
111+ =/ over=expr:jibb val.c(arms [sample-arm many])
112+ =/ rexact=iresult:jibb (grec-match-view:jibb exact in-view)
113+ =/ rover=iresult:jibb (grec-match-view:jibb over in-view)
114+ =/ hidden-view=iresult:jibb [%& [%var 200] st(sub ~[[200 target]], jrec-fuel 1)]
115+ =/ rhidden-view=iresult:jibb (grec-match-view:jibb exact hidden-view)
116+ =/ fallback=iresult:jibb (infer-fragment:jibb val.c env st(jrec-fuel 1))
117+ =/ checks=(list [label=@t ok=?])
118+ :~ ['owner describe has nominal sample and text result' &(=(target desc-sample) =([%atom %t] product.typ.u.desc))]
119+ ['owner rebuild preserves nominal identity' &(=(target rebuild-sample) =(target product.typ.u.rebuild))]
120+ ['owner children preserves quantified recursive identity' &(=(quantified children-sample) =([%collection %list ~[quantified]] product.typ.u.children))]
121+ ['invalid owner parses and is rejected' &(?=(%& -.bad-parse) ?=(%| -.bad))]
122+ ['zero fuel declined' ?=(%| -.zero)]
123+ ['one-step match' ?:(?=(%& -.one) &(=([%atom %t] typ.p.one) =(0 jrec-fuel.state.p.one)) |)]
124+ ['nested match requires two steps' &(?=(%| -.short) ?:(?=(%& -.nested) =(0 jrec-fuel.state.p.nested) |))]
125+ ['same-state retry agrees' =(one retry)]
126+ ['pending tag retained' ?:(?=(%& -.one) (lien tags.state.p.one |=(entry=ipending:jibb =(entry tag))) |)]
127+ ['pending hole retained' ?:(?=(%& -.one) =(holes.st holes.state.p.one) |)]
128+ ['projection evidence retained' ?:(?=(%& -.one) =(projections.st projections.state.p.one) |)]
129+ ['raw bound variable declined' ?=(%| -.hidden-result)]
130+ ['polymorphic scheme gets fresh identities' &(=([%var 201] i.args.ft) =([%var 202] i.args.stype) =(at.ft at.stype) =(name.ft name.stype) =(proof.ft proof.stype))]
131+ ['polymorphic missing arm declined' ?=(%| -.pmissing)]
132+ ['catch-all eligible' (grec-patterns-eligible:jibb arms.val.c view.u.view 128)]
133+ ['whole binder stays unsupported' !(grec-patterns-eligible:jibb arms.val.d view.u.view 128)]
134+ ['whole structural tail stays unsupported' !(grec-patterns-eligible:jibb arms.val.e view.u.view 128)]
135+ ['128 arms eligible' (grec-patterns-eligible:jibb many view.u.view 128)]
136+ ['129 arms declined' !(grec-patterns-eligible:jibb [sample-arm many] view.u.view 128)]
137+ ['zero arm budget declined' !(grec-patterns-eligible:jibb ~[sample-arm] view.u.view 0)]
138+ ['128-arm view consumes one step' ?:(?=(%& -.rexact) &(?=(%union -.typ.p.rexact) =(0 jrec-fuel.state.p.rexact)) |)]
139+ ['129-arm view rolls back' =(in-view rover)]
140+ ['hidden view stays nominally unknown' =(hidden-view rhidden-view)]
141+ ['catch-all keeps fuel and pending state' ?:(?=(%& -.fallback) &(=(0 jrec-fuel.state.p.fallback) =(holes.st holes.state.p.fallback) =(projections.st projections.state.p.fallback) (lien tags.state.p.fallback |=(entry=ipending:jibb =(entry tag)))) |)]
142+ ==
143+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
144+ =/ small=jbundle:jibb ~[[/ui/tree/jibb tree-no-event]]
145+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
146+ =/ noreport=@t (golden-types-with-prepared-prelude:jibb /tests/tree/no-event/jibb no-event ~ ~ small prep)
147+ (cat 3 (of-wain:format (turn checks line)) (cat 3 '\0a' (cat 3 report (cat 3 '\0a' noreport))))
148+++ test-generic-pattern
149+ ^- tang
150+ ?~ tree ~[leaf+"tree source missing"]
151+ ?~ alias ~[leaf+"alias source missing"]
152+ ?~ tree-no-event ~[leaf+"tree without event missing"]
153+ ?~ client ~[leaf+"client source missing"]
154+ ?~ no-event ~[leaf+"no-event client missing"]
155+ ?~ values ~[leaf+"values source missing"]
156+ ?~ poly-values ~[leaf+"polymorphic values source missing"]
157+ ?~ owner ~[leaf+"owner source missing"]
158+ ?~ owner-bad ~[leaf+"invalid owner source missing"]
159+ ?~ expected ~[leaf+"expected output missing"]
160+ =/ actual=@t
161+ (pattern-output real-prelude real-internal (text tree) (text alias) (text tree-no-event) (text client) (text no-event) (text values) (text poly-values) (text owner) (text owner-bad))
162+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
163+ ~[leaf+"generic pattern output differs from expected"]
164+ ~
165+--
tests/lib/jibb-generic-recursion.hoonnew file+170
@@ -0,0 +1,170 @@
1+:: Source-backed recursive identities; this is not the runtime UI element model.
2+/+ jibb
3+/* real-prelude %jibb /lib/jibb/prelude/jibb
4+/* real-internal %jibb /lib/jibb/internal/jibb
5+/* tree %txt /tests/type-generic-recursion/tree/txt
6+/* changed %txt /tests/type-generic-recursion/tree-changed/txt
7+/* alias %txt /tests/type-generic-recursion/alias/txt
8+/* client %txt /tests/type-generic-recursion/client/txt
9+/* bad-mold %txt /tests/type-generic-recursion/bad-mold/txt
10+/* bad-constructor %txt /tests/type-generic-recursion/bad-constructor/txt
11+/* bad-parameter %txt /tests/type-generic-recursion/bad-parameter/txt
12+/* local-shadow %txt /tests/type-generic-recursion/local-shadow/txt
13+/* local-distinct %txt /tests/type-generic-recursion/local-distinct/txt
14+/* local-only %txt /tests/type-generic-recursion/local-only/txt
15+/* list-shadow %txt /tests/type-generic-recursion/list-shadow/txt
16+/* chain %txt /tests/type-generic-recursion/chain/txt
17+/* bad-match %txt /tests/type-generic-recursion/bad-match/txt
18+/* expected %txt /tests/type-generic-recursion/expected/txt
19+|%
20+++ text
21+ |= lines=wain
22+ ^- @t
23+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
24+++ altered-list-source
25+ |= pre=@t
26+ ^- (unit @t)
27+ =/ lines=wain (to-wain:format pre)
28+ =/ old=@t ' [i=A t=(list A)]'
29+ =/ matches=(list @t) (skim lines |=(line=@t =(line old)))
30+ ?. =(1 (lent matches)) ~
31+ =/ changed=wain (turn lines |=(line=@t ?:(=(line old) ' [i=@t t=(list A)]' line)))
32+ `(text changed)
33+++ result-line
34+ |= [label=@t ok=?]
35+ ^- @t
36+ (crip "{(trip label)}: {?:(ok "ok" "BAD")}")
37+++ generic-output
38+ |= [pre=@t internal=@t tree=@t changed=@t alias=@t client=@t invalid=(list [label=@t src=@t]) shadow=@t chain=@t]
39+ ^- @t
40+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb pre internal)
41+ ?~ prep 'BAD prelude preparation'
42+ =/ module=jfile-result:jibb
43+ (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
44+ ?: ?=(%| -.module) (cat 3 'BAD recursive module: ' p.module)
45+ =/ scheme=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.module)
46+ ?~ scheme 'BAD missing recursive mold'
47+ ?. ?=(%grec -.typ.u.scheme) 'BAD missing recursive identity'
48+ =/ typ=itype:jibb typ.u.scheme
49+ ?> ?=(%grec -.typ)
50+ =/ t=itype:jibb typ(args ~[[%atom %t]])
51+ ?> ?=(%grec -.t)
52+ =/ p=itype:jibb typ(args ~[[%atom %p]])
53+ =/ variable=itype:jibb typ(args ~[[%var 91]])
54+ =/ other=itype:jibb t(at /ui/other/jibb)
55+ =/ numeric=itype:jibb [%cell t [%nvar 99]]
56+ =/ chain-parsed=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb chain)
57+ ?: ?=(%| -.chain-parsed) 'BAD chain source parse'
58+ =/ chain-molds=imolds:jibb (collect-simple-molds:jibb defs.p.chain-parsed)
59+ =/ chain-shape=(unit shape:jibb) (find-simple-mold:jibb %chain chain-molds)
60+ ?~ chain-shape 'BAD chain source mold'
61+ =/ no-index=istate:jibb *istate:jibb
62+ =. no-index no-index(at /ui/tree/jibb, molds chain-molds, top-molds ~[%chain], prelude `iface.u.prep)
63+ =/ checks=(list [label=@t ok=?])
64+ :~ ['source module complete' ?=([%& *] module)]
65+ ['generic mold quantified' =(1 (lent vars.u.scheme))]
66+ ['distinct arguments decline' ?=(~ (itype-unify:jibb t p ~))]
67+ ['distinct origins decline' ?=(~ (itype-unify:jibb t other ~))]
68+ ['occurs check' ?=(~ (itype-unify:jibb [%var 91] variable ~))]
69+ ['cell construction stays opaque' =(%unknown -:(itype-fit:jibb [%cell [%atom %tas] [%atom %t]] t ~ 0))]
70+ ['noun construction stays opaque' =(%unknown -:(itype-fit:jibb [%noun ~] t ~ 0))]
71+ ['unindexed recursion declined' ?=(~ (simple-source-generic-recursive:jibb %chain u.chain-shape ~[[%atom %t]] no-index))]
72+ ['alteration rejects missing line' ?=(~ (altered-list-source 'absent'))]
73+ ['alteration rejects repeated line' ?=(~ (altered-list-source (text ~[' [i=A t=(list A)]' ' [i=A t=(list A)]'])))]
74+ ['gate freedom unknown' =(%unknown verdict:(gate-free-type:jibb t 64 ~))]
75+ ['gate defaulting conservative' &((itype-has-gate:jibb t) =(numeric (default-decimals:jibb numeric)))]
76+ ==
77+ =/ invalid-lines=(list @t)
78+ %+ turn invalid
79+ |= c=[label=@t src=@t]
80+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb src.c)
81+ =/ r=jfile-result:jibb
82+ (infer-jibb-file:jibb /ui/tree/jibb src.c ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
83+ (result-line label.c &(?=(%& -.parsed) ?=(%| -.r)))
84+ =/ shadow-result=jfile-result:jibb
85+ (infer-jibb-file:jibb /ui/tree/jibb shadow ~ ~ ~ ~[/ui/tree/jibb] values.u.prep ~ ~ `iface.u.prep)
86+ =/ altered-source=(unit @t) (altered-list-source pre)
87+ ?~ altered-source 'BAD canonical list source was missing or repeated'
88+ =/ altered=@t u.altered-source
89+ =/ altered-prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb altered internal)
90+ =/ altered-result=jfile-result:jibb
91+ ?~ altered-prep [%| 'altered prelude unavailable']
92+ (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.altered-prep molds.u.altered-prep ~ `iface.u.altered-prep)
93+ =/ parsed=(each module:jibb error:jibb) (parse:jibb /tests/tree/client/jibb client)
94+ ?: ?=(%| -.parsed) 'BAD client parse'
95+ =/ modules=jbundle:jibb ~[[/ui/tree/jibb tree] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
96+ =/ first=jimports-result:jibb
97+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
98+ ?: ?=(%| -.first) 'BAD import resolution'
99+ =/ reuse=jimports-result:jibb
100+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
101+ =/ changed-modules=jbundle:jibb ~[[/ui/tree/jibb changed] [/ui/tree-two/jibb tree] [/ui/tree-alias/jibb alias]]
102+ =/ stale=jimports-result:jibb
103+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ changed-modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
104+ =/ fresh=jimports-result:jibb
105+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ changed-modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
106+ =/ duplicate-modules=jbundle:jibb [[/ui/tree/jibb tree] modules]
107+ =/ duplicate=jimports-result:jibb
108+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ duplicate-modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
109+ =/ cycle=jimports-result:jibb
110+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/ui/tree/jibb] values.u.prep molds.u.prep cache.p.first `iface.u.prep)
111+ =/ prelude-other=ifile:jibb iface.u.prep(source ~)
112+ =/ mismatch=jimports-result:jibb
113+ (resolve-jibb-imports:jibb imports.p.parsed ~ ~ modules ~[/tests/tree/client/jibb] values.u.prep molds.u.prep cache.p.first `prelude-other)
114+ =/ old=(unit ifile:jibb) (find-jibb-interface:jibb %first resolved.p.first)
115+ =/ new=(unit ifile:jibb) ?:(?=(%& -.fresh) (find-jibb-interface:jibb %first resolved.p.fresh) ~)
116+ =/ shape-changed=?
117+ ?~ old |
118+ ?~ new |
119+ =/ a=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree u.old)
120+ =/ b=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree u.new)
121+ ?~ a |
122+ ?~ b |
123+ ?. &(?=(%grec -.typ.u.a) ?=(%grec -.typ.u.b)) |
124+ !=(proof.typ.u.a proof.typ.u.b)
125+ =/ reuse-ok=? ?:(?=(%| -.reuse) | =(resolved.p.first resolved.p.reuse))
126+ =/ shadow-parsed=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb shadow)
127+ =/ altered-parsed=(each module:jibb error:jibb) (parse:jibb /lib/jibb/prelude/jibb altered)
128+ =/ more=(list [label=@t ok=?])
129+ :~ ['unreserved local list shadow declined' &(?=(%& -.shadow-parsed) ?=(%| -.shadow-result))]
130+ ['altered prelude list declined' &(?=(%& -.altered-parsed) ?=(%| -.altered-result))]
131+ ['cached source reuse' reuse-ok]
132+ ['changed source invalidates cache' ?=(%| -.stale)]
133+ ['changed source fresh proof' &(?=(%& -.fresh) shape-changed)]
134+ ['duplicate source declined' ?=(%| -.duplicate)]
135+ ['active import cycle declined' ?=(%| -.cycle)]
136+ ['changed prelude invalidates cache' ?=(%| -.mismatch)]
137+ ==
138+ =/ lines=(list @t) (weld (turn checks result-line) (weld invalid-lines (turn more result-line)))
139+ =/ report=@t (golden-types-with-prepared-prelude:jibb /tests/tree/client/jibb client ~ ~ modules prep)
140+ (cat 3 (of-wain:format lines) (cat 3 '\0a' report))
141+++ test-generic-recursion
142+ ^- tang
143+ ?~ tree ~[leaf+"recursive source is missing"]
144+ ?~ changed ~[leaf+"changed recursive source is missing"]
145+ ?~ alias ~[leaf+"recursive alias is missing"]
146+ ?~ client ~[leaf+"recursive client is missing"]
147+ ?~ bad-mold ~[leaf+"invalid mold fixture is missing"]
148+ ?~ bad-constructor ~[leaf+"constructor fixture is missing"]
149+ ?~ bad-match ~[leaf+"match fixture is missing"]
150+ ?~ bad-parameter ~[leaf+"parameter fixture is missing"]
151+ ?~ local-shadow ~[leaf+"local shadow fixture is missing"]
152+ ?~ local-distinct ~[leaf+"distinct local shadow fixture is missing"]
153+ ?~ local-only ~[leaf+"local recursion fixture is missing"]
154+ ?~ list-shadow ~[leaf+"list shadow fixture is missing"]
155+ ?~ chain ~[leaf+"unindexed chain fixture is missing"]
156+ ?~ expected ~[leaf+"recursive expected output is missing"]
157+ =/ invalid=(list [label=@t src=@t])
158+ :~ ['unused mold hole declined' (text bad-mold)]
159+ ['invalid constructor declined' (text bad-constructor)]
160+ ['invalid matching declined' (text bad-match)]
161+ ['nonuniform recursion declined' (text bad-parameter)]
162+ ['identical local shadow declined' (text local-shadow)]
163+ ['different local shadow declined' (text local-distinct)]
164+ ['local recursion declined' (text local-only)]
165+ ==
166+ =/ actual=@t (generic-output real-prelude real-internal (text tree) (text changed) (text alias) (text client) invalid (text list-shadow) (text chain))
167+ ?. =((to-wain:format (cat 3 actual '\0a')) expected)
168+ ~[leaf+"generic recursion output differs from expected"]
169+ ~
170+--
tests/lib/jibb-import-overlap.hoonnew file+80
@@ -0,0 +1,80 @@
1+/+ jibb, jibb-import
2+/* sur %txt /tests/type-import-overlap/sur/txt
3+/* source %txt /tests/type-import-overlap/source/txt
4+/* expected %txt /tests/type-import-overlap/expected/txt
5+|%
6+++ text
7+ |= lines=wain
8+ ^- @t
9+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
10+++ test-import-overlap
11+ ^- tang
12+ ?~ sur ~[leaf+"overlap fixture source is missing"]
13+ ?~ source ~[leaf+"overlap fixture client is missing"]
14+ ?~ expected ~[leaf+"overlap fixture expected output is missing"]
15+ =/ got (overlap-output (text sur) (text source))
16+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
17+ ~[leaf+"overlap output differs from expected"]
18+ ~
19+++ bounded-screen-status
20+^- @t
21+?. ?=(~ (bounded-no-spec-unions:jibb-import [1 2] 2)) 'three-node noun exceeded limit'
22+=/ exact (bounded-no-spec-unions:jibb-import [1 2] 3)
23+?. =(exact `0) 'three-node exact budget failed'
24+?. ?=(~ (bounded-no-spec-unions:jibb-import [[[[1 2] 3] 4] 5] 8)) 'deep noun exceeded limit'
25+?. =((bounded-no-spec-unions:jibb-import [[[[1 2] 3] 4] 5] 9) `0) 'deep exact budget failed'
26+?. ?=(~ (bounded-no-spec-unions:jibb-import [1 2 3 4 5] 8)) 'wide noun exceeded limit'
27+?. =((bounded-no-spec-unions:jibb-import [1 2 3 4 5] 9) `0) 'wide exact budget failed'
28+?. ?=(~ (bounded-no-spec-unions:jibb-import [%bcwt [[1 2] [[3 4] 0]]] 100)) 'nested $? accepted'
29+?. ?=(~ (bounded-no-spec-unions:jibb-import [%bccn [[1 2] [[3 4] 0]]] 100)) 'nested $% accepted'
30+?. ?=(~ (bounded-no-spec-unions:jibb-import [%bckt [1 2] [3 4]] 100)) 'nested $^ accepted'
31+=/ very-deep=*
32+ =/ n=@ud 1.000
33+ =/ node=* 0
34+ |-
35+ ?: =(n 0) node
36+ $(n (dec n), node [node n])
37+?. =((bounded-no-spec-unions:jibb-import very-deep 2.001) `0) 'deep 2,001-node exact budget failed'
38+?. ?=(~ (bounded-no-spec-unions:jibb-import very-deep 2.000)) 'deep 2,001-node limit exceeded'
39+=/ xs=(list spec)
40+ (turn (gulf 1 128) |=(n=@ud `spec`[%bccl ~[[%leaf %tas n] [%base [%atom %t]]]]))
41+?~ xs 'generated source cases missing'
42+=/ first=(unit @ud) (bounded-no-spec-unions:jibb-import i.xs 1.000)
43+?~ first 'simple source case unavailable'
44+=/ total=@ud (mul 128 (sub 1.000 u.first))
45+=/ at=(unit (list tagged-case:jibb-import)) (tagged-bounded-cases:jibb-import xs ~ total 128)
46+?~ at '128 exact cases rejected'
47+?. =((lent u.at) 128) 'a source case was omitted'
48+?. ?=(~ (tagged-bounded-cases:jibb-import xs ~ (dec total) 128)) 'source node limit exceeded'
49+=/ over=(list spec) (weld xs ~[`spec`[%bccl ~[[%leaf %tas 129] [%base [%atom %t]]]]])
50+?. ?=(~ (tagged-bounded-cases:jibb-import over ~ 100.000 128)) '129 cases exceeded limit'
51+=/ nested=spec [%bccl ~[[%leaf %tas %x] [%bcwt ~[[%leaf %tas %a] [%leaf %tas %b]]]]]
52+?. ?=(~ (tagged-bounded-cases:jibb-import ~[nested] ~ 1.000 128)) 'nested union case accepted'
53+=/ unknown=spec [%base [%atom %t]]
54+?. ?=(~ (tagged-bounded-cases:jibb-import ~[unknown] ~ 1.000 128)) 'non-tagged source accepted'
55+'bounded source screen controls passed'
56+
57+++ overlap-output
58+ |= [sur-text=@t src=@t]
59+ ^- @t
60+ =/ cor=type -:(ride -:!>(..zuse) sur-text)
61+ =/ names=(list term)
62+ ~[%mixed-zero %nonzero %unequal-singletons %swapped %separate-tags %separate-terms %different-value %different-tail %unknown-middle %unsupported-gate %dollar-percent %identical %cross-zero %boolean-tail %empty-tail]
63+ =/ cases=wall
64+ %+ turn names
65+ |= n=term
66+ "{(trip n)}: {(show-import-diagnostic:jibb-import (read-named-diagnostic:jibb-import %fixture n cor))}"
67+ =/ other=type (~(play ut cor) (ream '*separate-tags'))
68+ =/ provenance=wall
69+ :~ "mismatched-selected: {(show-result:jibb-import (read-mold-in:jibb-import %fixture %mixed-zero other cor))}"
70+ "missing: {(show-result:jibb-import (read-named:jibb-import %fixture %missing cor))}"
71+ "bare-zuse: {(show-result:jibb-import (read-named:jibb-import %fixture %mixed-zero -:!>(..zuse)))}"
72+ ==
73+ =/ external=(list [module=term name=term result=*])
74+ :~ [%fixture %mixed-zero (read-named-diagnostic:jibb-import %fixture %mixed-zero cor)]
75+ [%fixture %separate-tags (read-named-diagnostic:jibb-import %fixture %separate-tags cor)]
76+ [%fixture %unknown-middle (read-named-diagnostic:jibb-import %fixture %unknown-middle cor)]
77+ ==
78+ =/ report=@t (golden-types-with-reader-diagnostics:jibb /ui/test/jibb src external ~)
79+ (cat 3 (of-wain:format (turn (weld cases (weld ~[(trip bounded-screen-status)] provenance)) |=(line=tape (crip line)))) (cat 3 '\0a' report))
80+--
tests/lib/jibb-import-structural.hoonnew file+82
@@ -0,0 +1,82 @@
1+/+ jibb, jibb-import
2+/* sur %txt /tests/type-import-structural/sur/txt
3+/* source %txt /tests/type-import-structural/source/txt
4+/* expected %txt /tests/type-import-structural/expected/txt
5+|%
6+++ text
7+ |= lines=wain
8+ ^- @t
9+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
10+++ test-import-structural
11+ ^- tang
12+ ?~ sur ~[leaf+"structural overlap /sur is missing"]
13+ ?~ source ~[leaf+"structural overlap client is missing"]
14+ ?~ expected ~[leaf+"structural overlap expected is missing"]
15+ =/ got (structural-output (text sur) (text source))
16+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
17+ ~[leaf+"structural overlap output differs from expected"]
18+ ~
19+++ structural-output
20+ |= [sur-text=@t src=@t]
21+ ^- @t
22+ =/ cor=type -:(ride -:!>(..zuse) sur-text)
23+ =/ names=(list term)
24+ ~[%same-alias %separate-alias %deep-match %deep-distinct %tail-distinct %later-overlap %many-safe %open-atoms %different-aura]
25+ =/ cases=wall
26+ %+ turn names
27+ |= n=term
28+ "{(trip n)}: {(show-import-diagnostic:jibb-import (read-named-diagnostic:jibb-import %fixture n cor))}"
29+ =/ ext=(list [module=term name=term result=*])
30+ :~ [%fixture %deep-match (read-named-diagnostic:jibb-import %fixture %deep-match cor)]
31+ [%fixture %separate-alias (read-named-diagnostic:jibb-import %fixture %separate-alias cor)]
32+ [%fixture %different-aura (read-named-diagnostic:jibb-import %fixture %different-aura cor)]
33+ [%fixture %later-overlap (read-named-diagnostic:jibb-import %fixture %later-overlap cor)]
34+ ==
35+ =/ report=@t (golden-types-with-reader-diagnostics:jibb /ui/structural/jibb src ext ~)
36+ =/ zero=imported:jibb-import [%atom %tas `0]
37+ =/ one=imported:jibb-import [%atom %tas `1]
38+ =/ two=imported:jibb-import [%atom %tas `2]
39+ =/ txt=imported:jibb-import [%atom %t ~]
40+ =/ ship=imported:jibb-import [%atom %p ~]
41+ =/ flag=imported:jibb-import [%atom %f ~]
42+ =/ opaque=imported:jibb-import [%ref %m %x]
43+ =/ named=imported:jibb-import [%named %m %x zero]
44+ =/ arm (local-arm-source:jibb-import cor %later-overlap)
45+ ?~ arm !!
46+ =/ shape (local-mold-spec:jibb-import u.arm %later-overlap)
47+ ?~ shape !!
48+ =/ body (tagged-default-union:jibb-import u.shape 4)
49+ ?~ body !!
50+ ?> ?=([%bcwt *] u.body)
51+ =/ specs=(list spec) p.u.body
52+ ?~ specs !!
53+ =/ checks=(list [label=@t ok=?])
54+ :~ ['same literal' ?=([~ [%.y *]] (overlap-pair:jibb-import zero zero 20))]
55+ ['different literals' ?=([~ [%.n *]] (overlap-pair:jibb-import one two 20))]
56+ ['named expands' ?=([~ [%.y *]] (overlap-pair:jibb-import named zero 20))]
57+ ['opaque declines' ?=([~ [%.n *]] (overlap-pair:jibb-import opaque opaque 20))]
58+ ['opaque versus noun' ?=([~ [%.n *]] (overlap-pair:jibb-import opaque [%noun ~] 20))]
59+ ['unknown aura' ?=([~ [%.n *]] (overlap-pair:jibb-import ship txt 20))]
60+ ['open admits zero' ?=([~ [%.y *]] (overlap-pair:jibb-import flag zero 20))]
61+ ['different tail' ?=([~ [%.n *]] (overlap-pair:jibb-import [%cell zero one] [%cell zero two] 20))]
62+ ['nested face' ?=([~ [%.y *]] (overlap-pair:jibb-import [%face %a [%cell named one]] [%face %b [%cell zero one]] 20))]
63+ ['fork later case' ?=([~ [%.y *]] (overlap-pair:jibb-import [%fork ~[one zero]] zero 20))]
64+ ['empty fuel' ?=(~ (overlap-pair:jibb-import zero zero 0))]
65+ ['cell needs both' ?=(~ (overlap-pair:jibb-import [%cell zero one] [%cell zero one] 2))]
66+ ['later pair' ?=([~ [%.y *]] (overlap-case-pairs:jibb-import ~[one two zero zero] 100))]
67+ ['pair fuel' ?=(~ (overlap-case-pairs:jibb-import ~[one two zero zero] 2))]
68+ ['void' ?=([~ [%.n *]] (overlap-pair:jibb-import [%void ~] [%noun ~] 20))]
69+ ['void position' ?=([~ [%.n *]] (overlap-pair:jibb-import [%cell zero [%void ~]] [%cell zero [%noun ~]] 20))]
70+ ['opaque apply' ?=([~ [%.n *]] (overlap-pair:jibb-import [%apply %list ~[txt]] [%noun ~] 20))]
71+ ['source node fuel' ?=(~ (overlap-source-cases:jibb-import specs 1 128))]
72+ ['source case cap' ?=(~ (overlap-source-cases:jibb-import specs 4.096 3))]
73+ ['wrong projected head' !(overlap-projections-match:jibb-import ~[[%a i.specs]] ~[[%cell [%atom %tas `%b] txt]])]
74+ ['wrong case count' !(overlap-projections-match:jibb-import ~[[%a i.specs]] ~)]
75+ ==
76+ =/ results=wall
77+ %+ turn checks
78+ |= c=[label=@t ok=?]
79+ "{(trip label.c)}: {?:(ok.c "ok" "BAD")}"
80+ =/ lines=(list @t) (turn (weld cases results) |=(line=tape (crip line)))
81+ (cat 3 (of-wain:format lines) (cat 3 '\0a' report))
82+--
tests/lib/jibb-list-alias-guards.hoon+1−1
@@ -4,7 +4,7 @@
44|%
55++ list-alias-output
66 ^- @t
7− =/ src=@t (crip "++ text |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
7+ =/ src=@t (crip "++ text-value |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
88 =/ canonical=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
99 =/ altered=@t (crip "+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
1010 =/ omitted=@t (crip "+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
tests/lib/jibb-page-main.hoonnew file+168
@@ -0,0 +1,168 @@
1+:: Static and direct data-page kind checks, without rendering or execution.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* todo-api %txt /tests/type-page-main/todo-api/txt
11+/* todo-island %txt /tests/type-page-main/todo-island/txt
12+/* blog-sur %txt /tests/type-page-main/blog-sur/txt
13+/* posts %txt /tests/type-page-main/posts-mark/txt
14+/* blog-api %txt /tests/type-page-main/blog-api/txt
15+/* card %txt /tests/type-page-main/card/txt
16+/* about %txt /tests/type-page-main/static/txt
17+/* blog-index %txt /tests/type-page-main/blog-index/txt
18+/* index %txt /tests/type-page-main/index/txt
19+/* ctor-page %txt /tests/type-page-main/ctor-page/txt
20+/* wrong-static %txt /tests/type-page-main/wrong-static/txt
21+/* arbitrary-main %txt /tests/type-page-main/arbitrary-main/txt
22+/* page-alias %txt /tests/type-page-main/page-alias/txt
23+/* indirect-load %txt /tests/type-page-main/indirect-load/txt
24+/* pure-load %txt /tests/type-page-main/pure-load/txt
25+/* hand-built-load %txt /tests/type-page-main/hand-built-load/txt
26+/* typed-load %txt /tests/type-page-main/typed-load/txt
27+/* diff-load %txt /tests/type-page-main/diff-load/txt
28+|%
29+++ text
30+ |= lines=wain
31+ ^- @t
32+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
33+::
34+++ page-main-detailed
35+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
36+ ^- jfile-detailed-result:jibb
37+ (infer-jibb-file-detailed:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
38+::
39+++ page-main-reader-inputs
40+ |= [sur=@t action=@t todos=@t update=@t item=@t blog-sur=@t posts=@t]
41+ ^- [marks=imark-externals:jibb externals=iexternals:jibb]
42+ =/ todo=type -:(ride -:!>(..zuse) sur)
43+ =/ todo-subject=type [%cell [%face %todo todo] -:!>(..zuse)]
44+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride todo-subject action))
45+ =/ mt=* (read-mark:jibb-import %todos -:(ride todo-subject todos))
46+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride todo-subject update))
47+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride todo-subject item))
48+ =/ blog=type -:(ride -:!>(..zuse) blog-sur)
49+ =/ blog-subject=type [%cell [%face %blog blog] -:!>(..zuse)]
50+ =/ mp=* (read-mark:jibb-import %posts -:(ride blog-subject posts))
51+ =/ item-input=* (read-named:jibb-import %todo %item todo)
52+ =/ post-input=* (read-named:jibb-import %blog %post blog)
53+ :_ ~[[%todo %item item-input] [%blog %post post-input]]
54+ ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi] [%posts mp]]
55+::
56+++ page-main-positive
57+ |= [label=tape at=path src=@t expected=@t consumer-at=path consumer=@t face=term externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
58+ ^- (list tape)
59+ =/ detailed=jfile-detailed-result:jibb
60+ (page-main-detailed at src externals marks modules prepared)
61+ ?: ?=(%| -.detailed)
62+ ~[(weld label (weld ": rejected: " (trip message.p.detailed)))]
63+ =/ checked=ifile:jibb iface.p.detailed
64+ ?~ graph.checked ~[(weld label ": request graph is missing")]
65+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
66+ ?~ main ~[(weld label ": main is missing")]
67+ ?. &(?=(~ vars.u.main) ?=(~ (itype-vars:jibb typ.u.main)))
68+ ~[(weld label ": main is not closed")]
69+ =/ actual=@t (crip (show-itype:jibb typ.u.main ~))
70+ ?. =(actual expected)
71+ ~[(weld label (weld ": main type was " (trip actual)))]
72+ =/ imported=jfile-detailed-result:jibb
73+ (page-main-detailed consumer-at consumer externals marks modules prepared)
74+ ?: ?=(%| -.imported)
75+ ~[(weld label (weld ": downstream import rejected: " (trip message.p.imported)))]
76+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
77+ ?~ use ~[(weld label ": downstream main is missing")]
78+ =/ expected-import=itype:jibb
79+ (itype-in-import:jibb typ.u.main checked face `iface.prepared)
80+ ?. &(?=(~ vars.u.use) =(typ.u.use expected-import))
81+ ~[(weld label ": downstream main type differs")]
82+ ~
83+::
84+++ page-main-negative
85+ |= [label=@t at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
86+ ^- (list tape)
87+ =/ bad=jfile-detailed-result:jibb
88+ (page-main-detailed at src externals marks modules prepared)
89+ ?: ?=(%& -.bad) ~[(weld (trip label) ": accepted")]
90+ ~
91+::
92+++ page-main-errors
93+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t todo-api=@t todo-island=@t blog-sur=@t posts=@t blog-api=@t card=@t about=@t blog-index=@t index=@t ctor-page=@t negatives=(list [label=@t src=@t])]
94+ ^- (list tape)
95+ =/ prepared=(unit iprelude:jibb)
96+ (prepare-prelude-with-internal:jibb public private)
97+ ?~ prepared ~["page prelude did not prepare"]
98+ =/ inputs=[marks=imark-externals:jibb externals=iexternals:jibb]
99+ (page-main-reader-inputs sur action todos update item blog-sur posts)
100+ =/ modules=jbundle:jibb
101+ :~ [/ui/api/todo/jibb todo-api]
102+ [/ui/todo-list/jibb todo-island]
103+ [/ui/api/blog/jibb blog-api]
104+ [/ui/components/card/jibb card]
105+ [/ui/about/jibb about]
106+ [/ui/blog/index/jibb blog-index]
107+ [/ui/index/jibb index]
108+ [/tests/page-main/ctor/jibb ctor-page]
109+ ==
110+ =/ about-consumer=@t '/= about-page /ui/about\0a++ imported main.about-page\0a'
111+ =/ blog-consumer=@t '/= blog-page /ui/blog/index\0a++ imported main.blog-page\0a'
112+ =/ index-consumer=@t '/= index-page /ui/index\0a++ imported main.index-page\0a'
113+ =/ ctor-consumer=@t '/= ctor-page /tests/page-main/ctor\0a++ imported main.ctor-page\0a'
114+ =/ positives=(list (list tape))
115+ :~ (page-main-positive "about" /ui/about/jibb about '(element !!)' /tests/page-main/about-consumer/jibb about-consumer %about-page externals.inputs marks.inputs modules u.prepared)
116+ (page-main-positive "blog index" /ui/blog/index/jibb blog-index '[load=$-(~ (ask (list [title=@t slug=@ta]))) view=$-((list [title=@t slug=@ta]) (element !!))]' /tests/page-main/blog-consumer/jibb blog-consumer %blog-page externals.inputs marks.inputs modules u.prepared)
117+ (page-main-positive "index" /ui/index/jibb index '[load=$-(~ (ask (list [id=@ud [done=? text=@t]]))) view=$-((list [id=@ud [done=? text=@t]]) (element !!))]' /tests/page-main/index-consumer/jibb index-consumer %index-page externals.inputs marks.inputs modules u.prepared)
118+ (page-main-positive "constructor reply" /tests/page-main/ctor/jibb ctor-page '[load=$-(~ (ask [%got todos=(list [id=@ud [done=? text=@t]])])) view=$-([%got todos=(list [id=@ud [done=? text=@t]])] (element !!))]' /tests/page-main/ctor-consumer/jibb ctor-consumer %ctor-page externals.inputs marks.inputs modules u.prepared)
119+ ==
120+ =/ failures=(list tape) (zing positives)
121+ ?^ failures failures
122+ =/ at=path /ui/index/jibb
123+ =/ checked-result=jfile-detailed-result:jibb
124+ (page-main-detailed at index externals.inputs marks.inputs modules u.prepared)
125+ ?: ?=(%| -.checked-result) ~["index disappeared before evidence controls"]
126+ =/ checked=ifile:jibb iface.p.checked-result
127+ ?~ graph.checked ~["index graph disappeared before evidence controls"]
128+ =/ parsed (parse:jibb at index)
129+ ?: ?=(%| -.parsed) ~["index source no longer parses"]
130+ =/ main=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
131+ ?~ main ~["index main definition is missing"]
132+ =/ parts=(unit [load=term view=term]) (page-main-parts:jibb u.main)
133+ ?~ parts ~["index page parts are missing"]
134+ =/ others=(list irequest-evidence:jibb)
135+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb !&(=(api-at.r /ui/api/todo/jibb) =(%todos name.r))))
136+ =/ missing=irequest-graph:jibb u.graph.checked(requests others)
137+ =/ resolved=ijimports:jibb
138+ =/ found=(unit ifile:jibb)
139+ =/ api=jfile-detailed-result:jibb
140+ (page-main-detailed /ui/api/todo/jibb todo-api externals.inputs marks.inputs modules u.prepared)
141+ ?: ?=(%| -.api) ~
142+ `iface.p.api
143+ ?~ found ~
144+ ~[[%todo u.found]]
145+ ?. ?=([* ~] resolved) ~["todo API evidence control did not check"]
146+ ?: (page-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared resolved missing)
147+ ~["unknown request evidence passed data-page checking"]
148+ =/ store=(list tape)
149+ (page-main-negative 'store path' /ui/stores/about/jibb about externals.inputs marks.inputs modules u.prepared)
150+ ?^ store store
151+ (zing (turn negatives |=(c=[label=@t src=@t] (page-main-negative label.c /ui/index/jibb src.c externals.inputs marks.inputs modules u.prepared))))
152+::
153+++ test-page-main
154+ ^- tang
155+ =/ negatives=(list [label=@t src=@t])
156+ :~ ['wrong static message' (text wrong-static)]
157+ ['arbitrary main' (text arbitrary-main)]
158+ ['page alias' (text page-alias)]
159+ ['indirect load' (text indirect-load)]
160+ ['pure load' (text pure-load)]
161+ ['hand-built load' (text hand-built-load)]
162+ ['typed load' (text typed-load)]
163+ ['diff load' (text diff-load)]
164+ ==
165+ =/ failures=(list tape)
166+ (page-main-errors prelude internal (text sur) (text action) (text todos) (text update) (text item) (text todo-api) (text todo-island) (text blog-sur) (text posts) (text blog-api) (text card) (text about) (text blog-index) (text index) (text ctor-page) negatives)
167+ (turn failures |=(reason=tape leaf+reason))
168+--
tests/lib/jibb-program-init.hoonnew file+134
@@ -0,0 +1,134 @@
1+:: Transactional direct-program initializer context, without UI execution.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* initializer %txt /tests/type-program-main/initializer/txt
6+/* initializer-consumer %txt /tests/type-program-main/initializer-consumer/txt
7+/* initializer-unfaced %txt /tests/type-program-main/initializer-unfaced/txt
8+/* initializer-error %txt /tests/type-program-main/initializer-error/txt
9+/* initializer-earlier %txt /tests/type-program-main/initializer-earlier/txt
10+/* initializer-model %txt /tests/type-program-main/initializer-model/txt
11+/* initializer-message %txt /tests/type-program-main/initializer-message/txt
12+/* initializer-generic %txt /tests/type-program-main/initializer-generic/txt
13+/* initializer-missing %txt /tests/type-program-main/initializer-missing/txt
14+/* initializer-tag %txt /tests/type-program-main/initializer-tag/txt
15+/* initializer-no-main %txt /tests/type-program-main/initializer-no-main/txt
16+/* initializer-subs %txt /tests/type-program-main/initializer-subs/txt
17+|%
18+++ text
19+ |= lines=wain
20+ ^- @t
21+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
22+::
23+++ program-init-prepared
24+ |= [public=@t private=@t]
25+ ^- (unit iprelude:jibb)
26+ (prepare-prelude-with-internal:jibb public private)
27+::
28+++ program-init-detailed
29+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
30+ ^- jfile-detailed-result:jibb
31+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
32+::
33+++ program-init-legacy
34+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
35+ ^- jfile-result:jibb
36+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
37+::
38+++ program-init-positive
39+ |= [at=path src=@t downstream=(unit @t) prepared=iprelude:jibb]
40+ ^- (list tape)
41+ =/ detailed=jfile-detailed-result:jibb (program-init-detailed at src ~ prepared)
42+ ?: ?=(%| -.detailed) ~["contextual direct program init was rejected"]
43+ =/ checked=ifile:jibb iface.p.detailed
44+ =/ legacy=jfile-result:jibb (program-init-legacy at src ~ prepared)
45+ ?: ?=(%| -.legacy) ~["legacy adapter rejected contextual init"]
46+ ?. =(values.checked values.iface.p.legacy) ~["contextual structured and legacy values differ"]
47+ =/ init=(unit ischeme:jibb) (ienv-lookup:jibb %init values.checked)
48+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
49+ ?~ init ~["contextual init interface is missing"]
50+ ?~ main ~["contextual main interface is missing"]
51+ ?. ?=(~ vars.u.init) ~["contextual init interface is not closed"]
52+ =/ expected=tape "$-((list @t) [xs=(list @t) [draft=@t error=(unit @t)]])"
53+ ?. =((show-itype:jibb typ.u.init ~) expected) ~["contextual init interface type differs"]
54+ ?. ?=(~ vars.u.main) ~["contextual main interface is not closed"]
55+ =/ fields=(list itype:jibb) (record-fields-named:jibb %init typ.u.main ~)
56+ ?. =(fields ~[typ.u.init]) ~["contextual main initializer field differs"]
57+ ?~ source.checked ~["contextual program source evidence is missing"]
58+ ?. =(u.source.checked src) ~["contextual program source evidence differs"]
59+ ?~ graph.checked ~["contextual program request graph is missing"]
60+ ?~ downstream ~
61+ =/ consumer-at=path /tests/program-main/initializer-consumer/jibb
62+ =/ imported=jfile-detailed-result:jibb
63+ (program-init-detailed consumer-at u.downstream ~[[at src]] prepared)
64+ ?: ?=(%| -.imported) ~[(weld "downstream contextual initializer import was rejected: " (trip message.p.imported))]
65+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
66+ ?~ use ~["downstream contextual initializer is missing"]
67+ ?. =((show-itype:jibb typ.u.use ~) expected) ~["downstream contextual initializer type differs"]
68+ ?. =(u.use u.init) ~["downstream contextual initializer scheme differs"]
69+ ~
70+::
71+++ program-init-negative
72+ |= [label=@t at=path src=@t boundary=@t prepared=iprelude:jibb]
73+ ^- (list tape)
74+ =/ detailed=jfile-detailed-result:jibb (program-init-detailed at src ~ prepared)
75+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
76+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
77+ ?. =(message.p.detailed boundary) ~[(weld (trip label) ": rejected at the wrong boundary")]
78+ =/ legacy=jfile-result:jibb (program-init-legacy at src ~ prepared)
79+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
80+ ?. =(p.legacy boundary) ~[(weld (trip label) ": legacy boundary differs")]
81+ ~
82+::
83+++ program-init-negative-cases
84+ |= [cases=(list [label=@t at=path src=@t boundary=@t]) prepared=iprelude:jibb]
85+ ^- (list tape)
86+ ?~ cases ~
87+ %+ weld
88+ (program-init-negative label.i.cases at.i.cases src.i.cases boundary.i.cases prepared)
89+ $(cases t.cases)
90+::
91+++ program-init-errors
92+ |= [public=@t private=@t island=@t downstream=@t unfaced=@t negatives=(list @t)]
93+ ^- (list tape)
94+ =/ prepared=(unit iprelude:jibb) (program-init-prepared public private)
95+ ?~ prepared ~["synthetic program prelude did not prepare for contextual init"]
96+ =/ at=path /tests/program-main/initializer/jibb
97+ =/ positives=(list tape)
98+ %+ weld
99+ (program-init-positive at island `downstream u.prepared)
100+ (program-init-positive /tests/program-main/initializer-unfaced/jibb unfaced ~ u.prepared)
101+ ?. =(9 (lent negatives)) ~["contextual negative fixture count differs"]
102+ =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}")
103+ =/ cases=(list [label=@t at=path src=@t boundary=@t])
104+ :~ ['incompatible error field' at (snag 0 negatives) definitions]
105+ ['earlier tuple mismatch' at (snag 1 negatives) definitions]
106+ ['inconsistent model' at (snag 2 negatives) definitions]
107+ ['inconsistent message' at (snag 3 negatives) definitions]
108+ ['missing/generic data sample' at (snag 4 negatives) definitions]
109+ ['missing initializer' at (snag 5 negatives) definitions]
110+ ['unrelated pending tag' at (snag 6 negatives) definitions]
111+ ['non-main same source' at (snag 7 negatives) definitions]
112+ ['init and subs unresolved' at (snag 8 negatives) definitions]
113+ :- 'API path'
114+ [/ui/api/program-main/jibb island 'module kind needs unsupported inference: /ui/api/program-main/jibb']
115+ :- 'store path'
116+ [/ui/stores/program-main/jibb island 'module kind needs unsupported inference: /ui/stores/program-main/jibb']
117+ ==
118+ (weld positives (program-init-negative-cases cases u.prepared))
119+::
120+++ test-program-init
121+ ^- tang
122+ =/ negatives=(list @t)
123+ :~ (text initializer-error)
124+ (text initializer-earlier)
125+ (text initializer-model)
126+ (text initializer-message)
127+ (text initializer-generic)
128+ (text initializer-missing)
129+ (text initializer-tag)
130+ (text initializer-no-main)
131+ (text initializer-subs)
132+ ==
133+ (turn (program-init-errors prelude internal (text initializer) (text initializer-consumer) (text initializer-unfaced) negatives) |=(reason=tape leaf+reason))
134+--
tests/lib/jibb-program-main.hoonnew file+141
@@ -0,0 +1,141 @@
1+:: Narrow closed program-main checking, without execution or watchability claims.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* source %txt /tests/type-program-main/source/txt
6+/* consumer %txt /tests/type-program-main/consumer/txt
7+/* gate-model %txt /tests/type-program-main/gate-model/txt
8+/* gate-data %txt /tests/type-program-main/gate-data/txt
9+/* nonempty-subs %txt /tests/type-program-main/nonempty-subs/txt
10+/* mismatched-model %txt /tests/type-program-main/mismatched-model/txt
11+/* arbitrary-main %txt /tests/type-program-main/arbitrary-main/txt
12+/* alias-main %txt /tests/type-program-main/alias-main/txt
13+/* open-message %txt /tests/type-program-main/open-message/txt
14+|%
15+++ text
16+ |= lines=wain
17+ ^- @t
18+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
19+::
20+++ program-prepared
21+ |= [public=@t private=@t]
22+ ^- (unit iprelude:jibb)
23+ (prepare-prelude-with-internal:jibb public private)
24+::
25+++ program-main-detailed
26+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
27+ ^- jfile-detailed-result:jibb
28+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
29+::
30+++ program-main-legacy
31+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
32+ ^- jfile-result:jibb
33+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
34+::
35+++ program-main-negative-errors
36+ |= [label=@t at=path src=@t prepared=iprelude:jibb]
37+ ^- (list tape)
38+ =/ detailed=jfile-detailed-result:jibb (program-main-detailed at src ~ prepared)
39+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
40+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
41+ =/ legacy=jfile-result:jibb (program-main-legacy at src ~ prepared)
42+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
43+ ?. =(p.legacy message.p.detailed) ~[(weld (trip label) ": adapter messages differ")]
44+ ~
45+::
46+++ program-main-errors
47+ |= [public=@t private=@t island=@t downstream=@t negatives=(list @t)]
48+ ^- (list tape)
49+ =/ prepared=(unit iprelude:jibb)
50+ (program-prepared public private)
51+ ?~ prepared ~["synthetic program prelude did not prepare"]
52+ =/ at=path /tests/program-main/island/jibb
53+ =/ detailed=jfile-detailed-result:jibb (program-main-detailed at island ~ u.prepared)
54+ ?: ?=(%| -.detailed) ~["direct closed program main was rejected"]
55+ =/ checked=ifile:jibb iface.p.detailed
56+ ?~ graph.checked ~["program request graph evidence is missing"]
57+ =/ legacy=jfile-result:jibb (program-main-legacy at island ~ u.prepared)
58+ ?: ?=(%| -.legacy) ~["legacy adapter rejected a closed program main"]
59+ ?. =(values.checked values.iface.p.legacy) ~["structured and legacy interface values differ"]
60+ =/ init=(unit ischeme:jibb) (ienv-lookup:jibb %init values.checked)
61+ =/ update=(unit ischeme:jibb) (ienv-lookup:jibb %update values.checked)
62+ =/ view=(unit ischeme:jibb) (ienv-lookup:jibb %view values.checked)
63+ =/ subs=(unit ischeme:jibb) (ienv-lookup:jibb %subs values.checked)
64+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
65+ ?~ init ~["init interface is missing"]
66+ ?~ update ~["update interface is missing"]
67+ ?~ view ~["view interface is missing"]
68+ ?~ subs ~["subs interface is missing"]
69+ ?~ main ~["main interface is missing"]
70+ =/ parsed (parse:jibb at island)
71+ ?: ?=(%| -.parsed) ~["program source no longer parses"]
72+ =/ main-def=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
73+ ?~ main-def ~["program main definition is missing"]
74+ =/ parts (program-main-parts:jibb u.main-def)
75+ ?~ parts ~["program main parts are missing"]
76+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked ~ ~ u.graph.checked)
77+ ~["program kind was accepted without its source-backed prelude"]
78+ =/ program-scheme=(unit ischeme:jibb) (ienv-lookup:jibb %program values.iface.u.prepared)
79+ ?~ program-scheme ~["synthetic program scheme is missing"]
80+ ?. ?=(%fn -.typ.u.program-scheme) ~["synthetic program value is not a gate"]
81+ =/ broken-values=ienv:jibb
82+ (skim values.iface.u.prepared |=(entry=[name=term scheme=ischeme:jibb] !=(%program name.entry)))
83+ =/ broken=ifile:jibb
84+ iface.u.prepared(values [[%program [[%fn sample.typ.u.program-scheme [%atom %ud]] vars.u.program-scheme]] broken-values])
85+ =/ malformed=jfile-detailed-result:jibb
86+ (infer-jibb-file-detailed:jibb at island ~ ~ ~ ~[at] values.u.prepared molds.u.prepared ~ `broken)
87+ ?: ?=(%& -.malformed) ~["program result was not checked against the program mold"]
88+ =/ kind-error=@t (crip "module kind needs unsupported inference: {(spud at)}")
89+ ?. =(message.p.malformed kind-error) ~["malformed program failed before the kind check"]
90+ =/ open=jfile-detailed-result:jibb
91+ (program-main-detailed at (snag 6 negatives) ~ u.prepared)
92+ ?: ?=(%& -.open) ~["open program message was accepted"]
93+ =/ other-values=ienv:jibb
94+ (skim values.checked |=(entry=[name=term scheme=ischeme:jibb] !=(%main name.entry)))
95+ =/ open-values=ienv:jibb [[%main u.main(vars ~[0])] other-values]
96+ ?: (program-main-closed:jibb u.parts defs.p.parsed open-values `iface.u.prepared ~ u.graph.checked)
97+ ~["generic main scheme passed the closure check"]
98+ =/ model=itype:jibb [%face %count [%atom %ud]]
99+ ?. =(u.init [[%fn [%atom %t] model] ~]) ~["init interface type differs"]
100+ ?. ?=(~ vars.u.main) ~["main interface is not closed"]
101+ =/ init-fields=(list itype:jibb) (record-fields-named:jibb %init typ.u.main ~)
102+ =/ update-fields=(list itype:jibb) (record-fields-named:jibb %update typ.u.main ~)
103+ =/ view-fields=(list itype:jibb) (record-fields-named:jibb %view typ.u.main ~)
104+ =/ subs-fields=(list itype:jibb) (record-fields-named:jibb %subs typ.u.main ~)
105+ ?. =(init-fields ~[typ.u.init]) ~["main initializer field differs"]
106+ ?. &(=(1 (lent update-fields)) =(1 (lent view-fields)) =(1 (lent subs-fields)))
107+ ~["main component fields differ"]
108+ ?~ source.checked ~["program source evidence is missing"]
109+ ?. =(u.source.checked island) ~["program source evidence differs"]
110+ =/ consumer-at=path /tests/program-main/consumer/jibb
111+ =/ imported=jfile-detailed-result:jibb
112+ (program-main-detailed consumer-at downstream ~[[at island]] u.prepared)
113+ ?: ?=(%| -.imported) ~[(weld "ordinary downstream program import was rejected: " (trip message.p.imported))]
114+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
115+ ?~ use ~["downstream imported initializer is missing"]
116+ ?. =(u.use u.init) ~["downstream imported initializer type differs"]
117+ ?. =(7 (lent negatives)) ~["focused negative fixture count differs"]
118+ =/ cases=(list [label=@t at=path src=@t])
119+ :~ ['gate in model' at (snag 0 negatives)]
120+ ['gate in data' at (snag 1 negatives)]
121+ ['nonempty subs' at (snag 2 negatives)]
122+ ['mismatched model' at (snag 3 negatives)]
123+ ['arbitrary main' at (snag 4 negatives)]
124+ ['store path' /ui/stores/program-main/jibb island]
125+ ['program alias' at (snag 5 negatives)]
126+ ==
127+ (zing (turn cases |=(c=[label=@t at=path src=@t] (program-main-negative-errors label.c at.c src.c u.prepared))))
128+::
129+++ test-program-main
130+ ^- tang
131+ =/ negatives=(list @t)
132+ :~ (text gate-model)
133+ (text gate-data)
134+ (text nonempty-subs)
135+ (text mismatched-model)
136+ (text arbitrary-main)
137+ (text alias-main)
138+ (text open-message)
139+ ==
140+ (turn (program-main-errors prelude internal (text source) (text consumer) negatives) |=(reason=tape leaf+reason))
141+--
tests/lib/jibb-program-update.hoonnew file+139
@@ -0,0 +1,139 @@
1+:: Transactional direct-program update result context, without UI execution.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* source %txt /tests/type-program-update/source/txt
6+/* consumer %txt /tests/type-program-update/consumer/txt
7+/* wrong-result %txt /tests/type-program-update/wrong-result/txt
8+/* wrong-model %txt /tests/type-program-update/wrong-model/txt
9+/* wrong-message %txt /tests/type-program-update/wrong-message/txt
10+/* malformed-sample %txt /tests/type-program-update/malformed-sample/txt
11+/* three-slot-sample %txt /tests/type-program-update/three-slot-sample/txt
12+/* non-main %txt /tests/type-program-update/non-main/txt
13+/* unrelated-tag %txt /tests/type-program-update/unrelated-tag/txt
14+/* missing-list %txt /tests/type-program-update/missing-list/txt
15+|%
16+++ text
17+ |= lines=wain
18+ ^- @t
19+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
20+::
21+++ program-update-prepared
22+ |= [public=@t private=@t]
23+ ^- (unit iprelude:jibb)
24+ (prepare-prelude-with-internal:jibb public private)
25+::
26+++ program-update-detailed
27+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
28+ ^- jfile-detailed-result:jibb
29+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
30+::
31+++ program-update-legacy
32+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
33+ ^- jfile-result:jibb
34+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
35+::
36+++ program-update-positive
37+ |= [at=path src=@t downstream=@t prepared=iprelude:jibb]
38+ ^- (list tape)
39+ =/ detailed=jfile-detailed-result:jibb (program-update-detailed at src ~ prepared)
40+ ?: ?=(%| -.detailed) ~["contextual direct program update was rejected"]
41+ =/ checked=ifile:jibb iface.p.detailed
42+ =/ legacy=jfile-result:jibb (program-update-legacy at src ~ prepared)
43+ ?: ?=(%| -.legacy) ~["legacy adapter rejected contextual update"]
44+ ?. =(values.checked values.iface.p.legacy) ~["contextual structured and legacy values differ"]
45+ =/ update=(unit ischeme:jibb) (ienv-lookup:jibb %update values.checked)
46+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
47+ ?~ update ~["contextual update interface is missing"]
48+ ?~ main ~["contextual main interface is missing"]
49+ ?. ?=(~ vars.u.update) ~["contextual update interface is not closed"]
50+ =/ expected=tape "$-([event=message current=[count=@ud]] [count=@ud (list (cmd message))])"
51+ ?. =((show-itype:jibb typ.u.update ~) expected) ~["contextual update interface type differs"]
52+ ?. ?=(~ vars.u.main) ~["contextual main interface is not closed"]
53+ =/ fields=(list itype:jibb) (record-fields-named:jibb %update typ.u.main ~)
54+ ?. ?=([* ~] fields) ~["contextual main update field is missing"]
55+ =/ main-expected=tape "$-([message count=@ud] [count=@ud (list (cmd message))])"
56+ ?. =((show-itype:jibb i.fields ~) main-expected) ~["contextual main update field differs"]
57+ ?~ source.checked ~["contextual program source evidence is missing"]
58+ ?. =(u.source.checked src) ~["contextual program source evidence differs"]
59+ ?~ graph.checked ~["contextual program request graph is missing"]
60+ =/ consumer-at=path /tests/program-update/consumer/jibb
61+ =/ imported=jfile-detailed-result:jibb
62+ (program-update-detailed consumer-at downstream ~[[at src]] prepared)
63+ ?: ?=(%| -.imported) ~[(weld "downstream contextual update import was rejected: " (trip message.p.imported))]
64+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
65+ ?~ use ~["downstream contextual update is missing"]
66+ =/ imported-expected=tape "$-([message.island-prog count=@ud] [count=@ud (list (cmd message.island-prog))])"
67+ ?. =((show-itype:jibb typ.u.use ~) imported-expected) ~["downstream contextual update type differs"]
68+ ?. ?=(~ vars.u.use) ~["downstream contextual update is not closed"]
69+ ~
70+::
71+++ program-update-negative
72+ |= [label=@t at=path src=@t boundary=@t prepared=iprelude:jibb]
73+ ^- (list tape)
74+ =/ detailed=jfile-detailed-result:jibb (program-update-detailed at src ~ prepared)
75+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
76+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
77+ ?. =(message.p.detailed boundary) ~[(weld (trip label) ": rejected at the wrong boundary")]
78+ =/ legacy=jfile-result:jibb (program-update-legacy at src ~ prepared)
79+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
80+ ?. =(p.legacy boundary) ~[(weld (trip label) ": legacy boundary differs")]
81+ ~
82+::
83+++ program-update-negative-cases
84+ |= [cases=(list [label=@t at=path src=@t boundary=@t prepared=iprelude:jibb])]
85+ ^- (list tape)
86+ ?~ cases ~
87+ %+ weld
88+ (program-update-negative label.i.cases at.i.cases src.i.cases boundary.i.cases prepared.i.cases)
89+ $(cases t.cases)
90+::
91+++ program-update-errors
92+ |= [public=@t private=@t island=@t downstream=@t negatives=(list @t)]
93+ ^- (list tape)
94+ =/ prepared=(unit iprelude:jibb) (program-update-prepared public private)
95+ ?~ prepared ~["synthetic program prelude did not prepare for contextual update"]
96+ ?. =(8 (lent negatives)) ~["contextual update negative fixture count differs"]
97+ =/ at=path /tests/program-update/island/jibb
98+ =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}")
99+ =/ without-cmd=iprelude:jibb
100+ =/ kept=imold-types:jibb
101+ (skim molds.iface.u.prepared |=(m=[name=term template=ischeme:jibb] !=(%cmd name.m)))
102+ [iface.u.prepared(molds kept) values.u.prepared molds.u.prepared]
103+ =/ without-list=iprelude:jibb
104+ =/ kept=imold-types:jibb
105+ (skim molds.iface.u.prepared |=(m=[name=term template=ischeme:jibb] !=(%list name.m)))
106+ [iface.u.prepared(molds kept) values.u.prepared molds.u.prepared]
107+ =/ cases=(list [label=@t at=path src=@t boundary=@t prepared=iprelude:jibb])
108+ :~ ['wrong result constructor' at (snag 0 negatives) definitions u.prepared]
109+ ['inconsistent model' at (snag 1 negatives) definitions u.prepared]
110+ ['inconsistent message' at (snag 2 negatives) definitions u.prepared]
111+ ['malformed sample' at (snag 3 negatives) definitions u.prepared]
112+ ['non-two-slot sample' at (snag 4 negatives) definitions u.prepared]
113+ ['non-main same source' at (snag 5 negatives) definitions u.prepared]
114+ ['unrelated pending tag' at (snag 6 negatives) definitions u.prepared]
115+ ['missing canonical cmd' at island definitions without-cmd]
116+ ['missing canonical list' at (snag 7 negatives) definitions without-list]
117+ :- 'API path'
118+ [/ui/api/program-update/jibb island 'module kind needs unsupported inference: /ui/api/program-update/jibb' u.prepared]
119+ :- 'store path'
120+ [/ui/stores/program-update/jibb island 'module kind needs unsupported inference: /ui/stores/program-update/jibb' u.prepared]
121+ ==
122+ %+ weld
123+ (program-update-positive at island downstream u.prepared)
124+ (program-update-negative-cases cases)
125+::
126+++ test-program-update
127+ ^- tang
128+ =/ negatives=(list @t)
129+ :~ (text wrong-result)
130+ (text wrong-model)
131+ (text wrong-message)
132+ (text malformed-sample)
133+ (text three-slot-sample)
134+ (text non-main)
135+ (text unrelated-tag)
136+ (text missing-list)
137+ ==
138+ (turn (program-update-errors prelude internal (text source) (text consumer) negatives) |=(reason=tape leaf+reason))
139+--
tests/lib/jibb-program-watch.hoonnew file+209
@@ -0,0 +1,209 @@
1+:: Direct request-value watchability for a synthetic program over the real todo API.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+|%
12+++ text
13+ |= lines=wain
14+ ^- @t
15+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
16+::
17+++ program-watch-prepared
18+ |= [public=@t private=@t]
19+ ^- (unit iprelude:jibb)
20+ (prepare-prelude-with-internal:jibb public private)
21+::
22+++ program-watch-detailed
23+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
24+ ^- jfile-detailed-result:jibb
25+ (infer-jibb-file-detailed:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
26+::
27+++ program-watch-source
28+ |= [extra=@t subscriptions=@t]
29+ ^- @t
30+ %+ rap 3
31+ :~ '/= api /ui/api/todo\0a'
32+ '+$ model [count=@ud]\0a'
33+ '+$ msg\0a [%got todos=(list item.api)]\0a [%one item=todo-item.api]\0a %other\0a'
34+ extra
35+ '++ main (program init update view subs)\0a'
36+ '++ init |= input=@t ^- model [count=0]\0a'
37+ '++ update |= [m=msg state=model]\0a ^- [model (list (cmd msg))] [state ~]\0a'
38+ '++ view |= state=model ^- (element msg) (text "view")\0a'
39+ subscriptions
40+ ==
41+::
42+++ program-watch-agent-source
43+ ^- @t
44+ %+ rap 3
45+ :~ '/= api /ui/api/todo\0a'
46+ '+$ model [count=@ud]\0a'
47+ '++ receive |= input=[mark=@tas state=(unit *) fact=*]\0a ^- [state=* message=@t] [state=0 message="ok"]\0a'
48+ '++ request-path ^- path ~[%todos]\0a'
49+ '++ request ^- (ask @t)\0a [%agent api="/ui/api/todo" case=%todos agent=%todo path=request-path scry=~ receive=receive]\0a'
50+ '++ main (program init update view subs)\0a'
51+ '++ init |= input=@t ^- model [count=0]\0a'
52+ '++ update |= [m=@t state=model]\0a ^- [model (list (cmd @t))] [state ~]\0a'
53+ '++ view |= state=model ^- (element @t) (text "ok")\0a'
54+ '++ subs |= state=model\0a ^- (list (sub @t))\0a ~[[%watch request]]\0a'
55+ ==
56+::
57+++ program-watch-errors
58+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t]
59+ ^- (list tape)
60+ =/ prepared=(unit iprelude:jibb) (program-watch-prepared public private)
61+ ?~ prepared ~["synthetic program prelude did not prepare"]
62+ =/ todo=type -:(ride -:!>(..zuse) sur)
63+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
64+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action))
65+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos))
66+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update))
67+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item))
68+ =/ marks=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
69+ =/ item-input=* (read-named:jibb-import %todo %item todo)
70+ =/ externals=iexternals:jibb ~[[%todo %item item-input]]
71+ =/ api-at=path /ui/api/todo/jibb
72+ =/ api-result=jfile-detailed-result:jibb
73+ (program-watch-detailed api-at api externals marks ~ u.prepared)
74+ ?: ?=(%| -.api-result) ~["real todo API did not check"]
75+ =/ api-iface=ifile:jibb iface.p.api-result
76+ ?~ graph.api-iface ~["real todo API evidence is missing"]
77+ =/ direct-subs=@t '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (todos.api |=%got)]]\0a'
78+ =/ island=@t (program-watch-source '' direct-subs)
79+ =/ at=path /tests/program-watch/island/jibb
80+ =/ modules=jbundle:jibb ~[[api-at api]]
81+ =/ detailed=jfile-detailed-result:jibb
82+ (program-watch-detailed at island externals marks modules u.prepared)
83+ ?: ?=(%| -.detailed) ~[(weld "direct request watch was rejected: " (trip message.p.detailed))]
84+ =/ checked=ifile:jibb iface.p.detailed
85+ ?~ graph.checked ~["program request graph evidence is missing"]
86+ =/ legacy=jfile-result:jibb
87+ (infer-jibb-file:jibb at island externals marks modules ~[at] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
88+ ?: ?=(%| -.legacy) ~["legacy adapter rejected a direct request watch"]
89+ ?. =(values.checked values.iface.p.legacy) ~["structured and legacy interface values differ"]
90+ =/ subs=(unit ischeme:jibb) (ienv-lookup:jibb %subs values.checked)
91+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
92+ ?~ subs ~["subs interface is missing"]
93+ ?~ main ~["main interface is missing"]
94+ ?. &(?=(~ vars.u.subs) ?=(~ (itype-vars:jibb typ.u.subs))) ~["subs interface is not closed"]
95+ =/ subs-fields=(list itype:jibb) (record-fields-named:jibb %subs typ.u.main ~)
96+ ?. ?=([* ~] subs-fields) ~["closed program does not have one subs field"]
97+ =/ model=(unit ischeme:jibb) (find-jibb-mold:jibb %model checked)
98+ =/ msg=(unit ischeme:jibb) (find-jibb-mold:jibb %msg checked)
99+ =/ list-template=(unit ischeme:jibb) (find-jibb-mold:jibb %list iface.u.prepared)
100+ =/ sub=(unit ischeme:jibb) (find-jibb-mold:jibb %sub iface.u.prepared)
101+ ?~ model ~["model mold is missing"]
102+ ?~ msg ~["message mold is missing"]
103+ ?~ list-template ~["list mold is missing"]
104+ ?~ sub ~["sub mold is missing"]
105+ =/ message-sub=(unit itype:jibb) (template-apply:jibb u.sub ~[typ.u.msg])
106+ ?~ message-sub ~["message subscription type did not instantiate"]
107+ =/ subs-result=(unit itype:jibb) (template-apply:jibb u.list-template ~[u.message-sub])
108+ ?~ subs-result ~["subscription list type did not instantiate"]
109+ =/ expected-subs=itype:jibb [%fn typ.u.model u.subs-result]
110+ ?. =(typ.u.subs expected-subs) ~["subs interface has the wrong exact type"]
111+ ?. =((lent requests.u.graph.checked) (lent requests.u.graph.api-iface)) ~["merged API evidence count differs"]
112+ ?. (levy requests.u.graph.checked |=(r=irequest-evidence:jibb (lien requests.u.graph.api-iface |=(a=irequest-evidence:jibb =(r a))))) ~["merged API evidence differs"]
113+ =/ matching=(list irequest-evidence:jibb)
114+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb &(=(api-at.r api-at) =(%todos name.r))))
115+ ?. ?=([* ~] matching) ~["direct todos evidence is not unique"]
116+ =/ evidence=irequest-evidence:jibb i.matching
117+ ?. =(api-source.evidence api) ~["request evidence does not retain the exact API source"]
118+ ?. &(?=(~ scry.path.path.evidence) ?=(~ diffs.path.evidence) ?=(~ diffs.path.path.evidence))
119+ ~["plain todos evidence acquired scry or diffs"]
120+ ?: (lien segments.path.path.evidence |=(p=pseg:jibb !?=(%knot -.p))) ~["plain todos evidence acquired parameters"]
121+ =/ consumer-at=path /tests/program-watch/consumer/jibb
122+ =/ consumer=@t '/= island-prog /tests/program-watch/island\0a++ imported subs.island-prog\0a'
123+ =/ imported=jfile-detailed-result:jibb
124+ (program-watch-detailed consumer-at consumer externals marks [[at island] modules] u.prepared)
125+ ?: ?=(%| -.imported) ~["downstream program import was rejected"]
126+ =/ imported-subs=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
127+ ?~ imported-subs ~["downstream imported subs is missing"]
128+ =/ expected-import=itype:jibb (itype-in-import:jibb typ.u.subs checked %island-prog `iface.u.prepared)
129+ ?. &(?=(~ vars.u.imported-subs) =(typ.u.imported-subs expected-import)) ~["downstream imported subs type differs"]
130+ =/ parsed (parse:jibb at island)
131+ ?: ?=(%| -.parsed) ~["program source no longer parses"]
132+ =/ main-def=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
133+ ?~ main-def ~["program main definition is missing"]
134+ =/ parts (program-main-parts:jibb u.main-def)
135+ ?~ parts ~["program main parts are missing"]
136+ =/ resolved=ijimports:jibb ~[[%api api-iface]]
137+ =/ others=(list irequest-evidence:jibb)
138+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb !&(=(api-at.r api-at) =(%todos name.r))))
139+ =/ missing=irequest-graph:jibb u.graph.checked(requests others)
140+ =/ mismatch=irequest-graph:jibb u.graph.checked(requests [evidence(api-source 'mismatched') others])
141+ =/ scry=irequest-graph:jibb u.graph.checked(requests [evidence(scry.path.path `~[[%knot ~.peek]]) others])
142+ =/ ambiguous=irequest-graph:jibb u.graph.checked(requests [evidence requests.u.graph.checked])
143+ =/ evidence-cases=(list [label=tape graph=irequest-graph:jibb])
144+ :~ ["missing evidence" missing]
145+ ["API-source mismatch" mismatch]
146+ ["scry declaration evidence" scry]
147+ ["ambiguous evidence" ambiguous]
148+ ==
149+ =/ evidence-failures=(list tape)
150+ %+ murn evidence-cases
151+ |= c=[label=tape graph=irequest-graph:jibb]
152+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared resolved graph.c)
153+ `label.c
154+ ~
155+ ?^ evidence-failures ~[(weld "bad evidence passed watchability: " i.evidence-failures)]
156+ =/ ordinary-values=ienv:jibb
157+ (skim values.api-iface |=(entry=[name=term scheme=ischeme:jibb] !=(%todos name.entry)))
158+ =/ forged=ifile:jibb
159+ api-iface(values [[%todos [[%fn [%atom %t] [%atom %t]] ~]] ordinary-values])
160+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api forged]] u.graph.checked)
161+ ~["same-named non-derived member passed watchability"]
162+ =/ detached=ifile:jibb api-iface(graph `u.graph.api-iface(requests ~))
163+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api detached]] u.graph.checked)
164+ ~["evidence outside the selected interface passed watchability"]
165+ =/ incoherent=irequest-evidence:jibb evidence(name.path.path %other)
166+ =/ api-others=(list irequest-evidence:jibb)
167+ (skim requests.u.graph.api-iface |=(r=irequest-evidence:jibb !&(=(api-at.r api-at) =(%todos name.r))))
168+ =/ incoherent-api=ifile:jibb api-iface(graph `u.graph.api-iface(requests [incoherent api-others]))
169+ =/ incoherent-graph=irequest-graph:jibb u.graph.checked(requests [incoherent others])
170+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api incoherent-api]] incoherent-graph)
171+ ~["inconsistent request case names passed watchability"]
172+ =/ kind-error=@t (crip "module kind needs unsupported inference: {(spud at)}")
173+ =/ negatives=(list [label=tape src=@t])
174+ :~ :- "pure watch"
175+ (program-watch-source '' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (pure %other)]]\0a')
176+ :- "correctly typed hand-built agent"
177+ program-watch-agent-source
178+ :- "request helper"
179+ (program-watch-source '++ request ^- (ask msg) (todos.api |=%got)\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch request]]\0a')
180+ :- "request alias"
181+ (program-watch-source '++ request todos.api\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (request |=%got)]]\0a')
182+ :- "parameterized todo-by-id"
183+ (program-watch-source '' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (todo-by-id.api 1 |=%one)]]\0a')
184+ :- "diff changes"
185+ (program-watch-source '++ fold |= [d=[%todo-update todo-update.api] s=todos.api] s\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (changes.api |=%got fold)]]\0a')
186+ :- "multi-item subscriptions"
187+ (program-watch-source '++ first ^- (sub msg) [%watch (todos.api |=%got)]\0a++ second ^- (sub msg) [%watch (pure %other)]\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[first second]\0a')
188+ ==
189+ %+ weld (turn evidence-failures |=(reason=tape reason))
190+ %+ murn negatives
191+ |= c=[label=tape src=@t]
192+ =/ bad=jfile-detailed-result:jibb
193+ (program-watch-detailed at src.c externals marks modules u.prepared)
194+ ?: ?=(%& -.bad) `[(weld label.c ": accepted")]
195+ ?. =(message.p.bad kind-error) `[(weld label.c ": did not reach watchability")]
196+ ~
197+::
198+++ test-program-watch
199+ ^- tang
200+ ?~ sur ~[leaf+"program-watch fixture sur is missing"]
201+ ?~ action ~[leaf+"program-watch fixture action is missing"]
202+ ?~ todos ~[leaf+"program-watch fixture todos is missing"]
203+ ?~ update ~[leaf+"program-watch fixture update is missing"]
204+ ?~ item ~[leaf+"program-watch fixture item is missing"]
205+ ?~ api ~[leaf+"program-watch fixture api is missing"]
206+ =/ failures=(list tape)
207+ (program-watch-errors prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api))
208+ (turn failures |=(reason=tape leaf+reason))
209+--
tests/lib/jibb-request-guards.hoon+2−2
@@ -127,8 +127,8 @@
127127 =/ bad-cache=jcache:jibb ~[[helper-at mismatched]]
128128 =/ wrong (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep bad-cache pre)
129129 ?: ?=(%& -.wrong) 'cache key and interface path mismatch accepted'
130− =/ old-client=@t '++ text "safe"\0a'
131− =/ dep=@t '/= c /lib/client\0a++ value text.c\0a'
130+ =/ old-client=@t '++ text-value "safe"\0a'
131+ =/ dep=@t '/= c /lib/client\0a++ value text-value.c\0a'
132132 =/ root=@t '/= h /lib/helper\0a++ x value.h\0a'
133133 =/ cycle-bundle=jbundle:jibb ~[[client old-client] [helper-at dep]]
134134 =/ cycle-legacy=ifile:jibb legacy(source `dep)
tests/lib/jibb-store.hoonnew file+261
@@ -0,0 +1,261 @@
1+:: Unchanged cart store and basket, derived requests, and rejection guards.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* cart %txt /tests/type-store/cart/txt
6+/* basket %txt /tests/type-store/basket/txt
7+|%
8+++ text
9+ |= lines=wain
10+ ^- @t
11+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
12+::
13+++ store-detailed
14+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
15+ ^- jfile-detailed-result:jibb
16+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
17+::
18+++ store-legacy
19+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
20+ ^- jfile-result:jibb
21+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
22+::
23+++ store-cart-source
24+ |= [poke=@t main=@t init=@t update=@t extra=@t]
25+ ^- @t
26+ %+ rap 3
27+ :~ '+$ state [items=(list @t) open=?]\0a'
28+ '+$ cart-action\0a [%add item=@t]\0a %toggle\0a'
29+ poke main init update extra
30+ ==
31+::
32+++ store-basket-source
33+ |= [update=@t subs=@t extra=@t]
34+ ^- @t
35+ %+ rap 3
36+ :~ '/= cart /ui/stores/cart\0a'
37+ '++ main (program init update view subs)\0a'
38+ '+$ model [cart=state.cart note=@t]\0a'
39+ '+$ msg\0a [%noted text=@t]\0a %add\0a %toggle\0a [%got cart=state.cart]\0a [%acked err=(unit @t)]\0a'
40+ '++ init |= ~\0a [[~ %.n] ""]\0a'
41+ update subs
42+ '++ view |= m=model\0a column ~[gap+%s1] ~[\0a (text "{(lent items.cart.m)} items")\0a field "Item" note.m |=%noted\0a button "Add" %add\0a'
43+ extra
44+ ==
45+::
46+++ store-consumer-source
47+ ^- @t
48+ %+ rap 3
49+ :~ '/= cart /ui/stores/cart\0a'
50+ '+$ local-state state.cart\0a'
51+ '+$ local-action cart-action.cart\0a'
52+ '++ imported-main main.cart\0a'
53+ '++ imported-request |= reply=$-(local-state M) (state.cart reply)\0a'
54+ '++ imported-poke |= action=local-action (cart-action.cart action)\0a'
55+ ==
56+::
57+++ store-rejections
58+ |= [cases=(list [label=tape at=path src=@t modules=jbundle:jibb]) prepared=iprelude:jibb]
59+ ^- (list tape)
60+ %+ murn cases
61+ |= c=[label=tape at=path src=@t modules=jbundle:jibb]
62+ =/ result=jfile-detailed-result:jibb
63+ (store-detailed at.c src.c modules.c prepared)
64+ ?: ?=(%| -.result) ~
65+ `(weld label.c ": accepted")
66+::
67+++ store-evidence-failures
68+ |= [cart=ifile:jibb basket=ifile:jibb src=@t prelude=ifile:jibb]
69+ ^- (list tape)
70+ ?~ graph.cart ~["cart evidence is missing"]
71+ ?~ graph.basket ~["basket evidence is missing"]
72+ =/ parsed (parse:jibb /ui/basket/jibb src)
73+ ?: ?=(%| -.parsed) ~["basket evidence source does not parse"]
74+ =/ main=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
75+ ?~ main ~["basket evidence main is missing"]
76+ =/ parts=(unit [init=term update=term view=term subs=term])
77+ (program-main-parts:jibb u.main)
78+ ?~ parts ~["basket evidence main parts are missing"]
79+ ?. ?=([* ~] stores.u.graph.cart) ~["cart store evidence is not unique"]
80+ =/ evidence=istore-request-evidence:jibb i.stores.u.graph.cart
81+ =/ imports=ijimports:jibb ~[[%cart cart]]
82+ =/ missing=irequest-graph:jibb u.graph.basket(stores ~)
83+ =/ mismatch=irequest-graph:jibb
84+ u.graph.basket(stores ~[evidence(source 'mismatched')])
85+ =/ ambiguous=irequest-graph:jibb
86+ u.graph.basket(stores ~[evidence evidence])
87+ =/ many=(list istore-request-evidence:jibb)
88+ %+ turn (gulf 0 255)
89+ |= n=@ud
90+ evidence(store-at (stab (crip "/ui/stores/{(a-co:co n)}/jibb")))
91+ =/ oversized=irequest-graph:jibb u.graph.basket(stores [evidence many])
92+ ?: (request-graph-bounded:jibb oversized) ~["oversized request graph was accepted"]
93+ =/ detached=ifile:jibb cart(graph `u.graph.cart(stores ~))
94+ =/ ordinary=ienv:jibb
95+ (skim values.cart |=(entry=[name=term scheme=ischeme:jibb] !=(%state name.entry)))
96+ =/ forged=ifile:jibb
97+ cart(values [[%state [[%fn [%atom %t] [%atom %t]] ~]] ordinary])
98+ =/ without-action=ienv:jibb
99+ (skim values.cart |=(entry=[name=term scheme=ischeme:jibb] !=(%cart-action name.entry)))
100+ =/ forged-action=ifile:jibb
101+ cart(values [[%cart-action [[%fn [%atom %t] [%atom %t]] ~]] without-action])
102+ =/ graphs=(list [label=tape graph=irequest-graph:jibb])
103+ :~ ["missing store evidence" missing]
104+ ["store source mismatch" mismatch]
105+ ["ambiguous store evidence" ambiguous]
106+ ==
107+ =/ failures=(list tape)
108+ %+ murn graphs
109+ |= c=[label=tape graph=irequest-graph:jibb]
110+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.basket `prelude imports graph.c)
111+ `label.c
112+ ~
113+ =? failures (program-main-closed:jibb u.parts defs.p.parsed values.basket `prelude ~[[%cart detached]] u.graph.basket)
114+ ["evidence outside the store interface" failures]
115+ =? failures (program-main-closed:jibb u.parts defs.p.parsed values.basket `prelude ~[[%cart forged]] u.graph.basket)
116+ ["forged state member" failures]
117+ =? failures (program-main-closed:jibb u.parts defs.p.parsed values.basket `prelude ~[[%cart forged-action]] u.graph.basket)
118+ ["forged action constructor" failures]
119+ failures
120+::
121+++ store-errors
122+ |= [public=@t private=@t cart-source=@t basket-source=@t]
123+ ^- (list tape)
124+ =/ prepared=(unit iprelude:jibb)
125+ (prepare-prelude-with-internal:jibb public private)
126+ ?~ prepared ~["store prelude did not prepare"]
127+ =/ store-value=(unit ischeme:jibb) (ienv-lookup:jibb %store values.iface.u.prepared)
128+ =/ store-mold=(unit ischeme:jibb) (find-jibb-mold:jibb %store iface.u.prepared)
129+ ?~ store-value ~["store builder is missing"]
130+ ?~ store-mold ~["store mold is missing"]
131+ =/ expected-builder=itype:jibb
132+ [%fn [%cell [%face %init [%var 0]] [%face %update [%fn [%cell [%var 1] [%var 0]] [%var 0]]]] [%cell [%face %init [%var 0]] [%face %update [%noun ~]]]]
133+ ?. &(?=([@ @ ~] vars.u.store-value) =(typ.u.store-value expected-builder)) ~["store builder scheme differs"]
134+ =/ expected-mold=itype:jibb [%cell [%face %init [%var 0]] [%face %update [%noun ~]]]
135+ ?. &(?=([@ ~] vars.u.store-mold) =(typ.u.store-mold expected-mold)) ~["store mold scheme differs"]
136+ =/ cart-at=path /ui/stores/cart/jibb
137+ =/ modules=jbundle:jibb ~[[cart-at cart-source]]
138+ =/ detailed=jfile-detailed-result:jibb
139+ (store-detailed cart-at cart-source ~ u.prepared)
140+ ?: ?=(%| -.detailed) ~[(weld "cart was rejected: " (trip message.p.detailed))]
141+ =/ cart=ifile:jibb iface.p.detailed
142+ =/ legacy=jfile-result:jibb (store-legacy cart-at cart-source ~ u.prepared)
143+ ?: ?=(%| -.legacy) ~["legacy cart was rejected"]
144+ ?. =(values.cart values.iface.p.legacy) ~["detailed and legacy cart values differ"]
145+ ?. =(molds.cart molds.iface.p.legacy) ~["detailed and legacy cart molds differ"]
146+ =/ cart-main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.cart)
147+ ?~ cart-main ~["cart main is missing"]
148+ =/ actual-main=@t (crip (show-itype:jibb typ.u.cart-main ~))
149+ ?. =(actual-main '[init=[items=(list @t) open=?] update=*]') ~["cart main type differs"]
150+ ?. &(?=(~ vars.u.cart-main) ?=(~ (itype-vars:jibb typ.u.cart-main))) ~["cart main is open"]
151+ =/ state=(unit ischeme:jibb) (find-jibb-mold:jibb %state cart)
152+ =/ action=(unit ischeme:jibb) (find-jibb-mold:jibb %cart-action cart)
153+ ?~ state ~["state mold is missing"]
154+ ?~ action ~["cart-action mold is missing"]
155+ ?^ (find-jibb-mold:jibb %poke cart) ~["poke declaration leaked as an exported mold"]
156+ =/ ask=(unit ischeme:jibb) (request-compatible-ask:jibb u.prepared)
157+ =/ poke=(unit ischeme:jibb) (store-compatible-poke:jibb u.prepared)
158+ ?~ ask ~["canonical ask is unavailable"]
159+ ?~ poke ~["canonical poke is unavailable"]
160+ =/ ask-result=(unit itype:jibb) (template-apply:jibb u.ask ~[[%var 0]])
161+ ?~ ask-result ~["canonical ask did not instantiate"]
162+ =/ expected-state=ischeme:jibb [[%fn [%fn typ.u.state [%var 0]] u.ask-result] ~[0]]
163+ =/ expected-action=ischeme:jibb [[%fn typ.u.action typ.u.poke] ~]
164+ =/ state-values=(list [name=term scheme=ischeme:jibb])
165+ (skim values.cart |=(entry=[name=term scheme=ischeme:jibb] =(%state name.entry)))
166+ =/ action-values=(list [name=term scheme=ischeme:jibb])
167+ (skim values.cart |=(entry=[name=term scheme=ischeme:jibb] =(%cart-action name.entry)))
168+ ?. ?=([* ~] state-values) ~["derived state member is not unique"]
169+ ?. =(scheme.i.state-values expected-state) ~["derived state scheme differs"]
170+ ?. ?=([* ~] action-values) ~["derived cart-action member is not unique"]
171+ ?. =(scheme.i.action-values expected-action) ~["derived cart-action scheme differs"]
172+ ?~ graph.cart ~["cart request graph is missing"]
173+ ?. ?=([* ~] stores.u.graph.cart) ~["cart store evidence is not unique"]
174+ =/ evidence=istore-request-evidence:jibb i.stores.u.graph.cart
175+ ?. &(=(store-at.evidence cart-at) =(source.evidence cart-source)) ~["store evidence does not retain exact path/source"]
176+ ?. &(=(state.evidence typ.u.state) =(action.evidence typ.u.action) =(%cart-action action-name.evidence)) ~["store evidence types differ"]
177+ =/ basket-result=jfile-detailed-result:jibb
178+ (store-detailed /ui/basket/jibb basket-source modules u.prepared)
179+ ?: ?=(%| -.basket-result) ~[(weld "basket was rejected: " (trip message.p.basket-result))]
180+ =/ basket=ifile:jibb iface.p.basket-result
181+ =/ basket-legacy=jfile-result:jibb
182+ (store-legacy /ui/basket/jibb basket-source modules u.prepared)
183+ ?: ?=(%| -.basket-legacy) ~["legacy basket was rejected"]
184+ ?. =(values.basket values.iface.p.basket-legacy) ~["detailed and legacy basket values differ"]
185+ =/ basket-main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.basket)
186+ ?~ basket-main ~["basket main is missing"]
187+ =/ expected-basket=@t '[init=$-(~ [cart=[items=(list @t) open=?] note=@t]) [update=$-([msg [cart=[items=(list @t) open=?] note=@t]] [[cart=[items=(list @t) open=?] note=@t] (list (cmd msg))]) [view=$-([cart=[items=(list @t) open=?] note=@t] (element msg)) subs=$-([cart=[items=(list @t) open=?] note=@t] (list (sub msg)))]]]'
188+ =/ actual-basket=@t (crip (show-itype:jibb typ.u.basket-main ~))
189+ ?. =(actual-basket expected-basket) ~["basket main type differs"]
190+ ?~ graph.basket ~["basket request graph is missing"]
191+ ?. (lien stores.u.graph.basket |=(r=istore-request-evidence:jibb =(r evidence))) ~["basket did not merge exact store evidence"]
192+ =/ consumer-result=jfile-detailed-result:jibb
193+ (store-detailed /tests/store/consumer/jibb store-consumer-source modules u.prepared)
194+ ?: ?=(%| -.consumer-result) ~["downstream store import was rejected"]
195+ =/ consumer=ifile:jibb iface.p.consumer-result
196+ =/ imported-main=(unit ischeme:jibb) (ienv-lookup:jibb %imported-main values.consumer)
197+ ?~ imported-main ~["downstream main is missing"]
198+ =/ expected-import=itype:jibb (itype-in-import:jibb typ.u.cart-main cart %cart `iface.u.prepared)
199+ ?. =(typ.u.imported-main expected-import) ~["downstream main type differs"]
200+ =/ local-state=(unit ischeme:jibb) (find-jibb-mold:jibb %local-state consumer)
201+ =/ local-action=(unit ischeme:jibb) (find-jibb-mold:jibb %local-action consumer)
202+ ?~ local-state ~["downstream state mold is missing"]
203+ ?~ local-action ~["downstream action mold is missing"]
204+ =/ imported-state=itype:jibb (itype-in-import:jibb typ.u.state cart %cart `iface.u.prepared)
205+ =/ imported-action=itype:jibb (itype-in-import:jibb typ.u.action cart %cart `iface.u.prepared)
206+ ?. &(=(typ.u.local-state imported-state) =(typ.u.local-action imported-action)) ~["downstream molds differ"]
207+ ?~ (ienv-lookup:jibb %imported-request values.consumer) ~["downstream state request is missing"]
208+ ?~ (ienv-lookup:jibb %imported-poke values.consumer) ~["downstream action constructor is missing"]
209+ =/ direct=jfile-detailed-result:jibb
210+ (store-detailed /tests/direct/cart/jibb cart-source ~ u.prepared)
211+ ?: ?=(%| -.direct) ~["direct store outside /ui/stores was rejected"]
212+ =/ grouped=@t (store-cart-source '+$ poke cart-action\0a' '++ main (store (init) (update))\0a' '++ init ^- state [~ %.n]\0a' '++ update |= [a=cart-action s=state]\0a ?- a\0a [%add item] s(items=[item items.s])\0a %toggle s(open=(not open.s))\0a' '')
213+ =/ grouped-result=jfile-detailed-result:jibb
214+ (store-detailed /tests/direct/grouped/jibb grouped ~ u.prepared)
215+ ?: ?=(%| -.grouped-result) ~[(weld "grouped direct store main was rejected: " (trip message.p.grouped-result))]
216+ =/ gate-state=@t '+$ state [callback=$-(@t @t)]\0a+$ action %set\0a+$ poke action\0a++ main (store init update)\0a++ init ^- state [callback=same]\0a++ update |= [a=action s=state] s\0a'
217+ =/ gate-result=jfile-detailed-result:jibb
218+ (store-detailed /tests/direct/gate-state/jibb gate-state ~ u.prepared)
219+ ?: ?=(%| -.gate-result) ~["gate-bearing store state was rejected"]
220+ =/ evidence-failures=(list tape) (store-evidence-failures cart basket basket-source iface.u.prepared)
221+ ?^ evidence-failures evidence-failures
222+ =/ normal-poke=@t '+$ poke cart-action\0a'
223+ =/ normal-main=@t '++ main (store init update)\0a'
224+ =/ normal-init=@t '++ init ^- state [~ %.n]\0a'
225+ =/ normal-update=@t '++ update |= [a=cart-action s=state]\0a ?- a\0a [%add item] s(items=[item items.s])\0a %toggle s(open=(not open.s))\0a'
226+ =/ cart-cases=(list [label=tape at=path src=@t modules=jbundle:jibb])
227+ :~ ["wrong init" /tests/store/wrong-init/jibb (store-cart-source normal-poke normal-main '++ init ^- state [~ "bad"]\0a' normal-update '') ~]
228+ ["wrong action" /tests/store/wrong-action/jibb (store-cart-source normal-poke normal-main normal-init '++ update |= [a=@t s=state] s\0a' '') ~]
229+ ["wrong result" /tests/store/wrong-result/jibb (store-cart-source normal-poke normal-main normal-init '++ update |= [a=cart-action s=state] "bad"\0a' '') ~]
230+ ["unknown poke" /tests/store/unknown-poke/jibb (store-cart-source '+$ poke missing\0a' normal-main normal-init normal-update '') ~]
231+ ["qualified poke" /tests/store/qualified-poke/jibb (store-cart-source '+$ poke cart-action.cart\0a' normal-main normal-init normal-update '') ~]
232+ ["duplicate poke" /tests/store/duplicate-poke/jibb (store-cart-source '+$ poke cart-action\0a+$ poke cart-action\0a' normal-main normal-init normal-update '') ~]
233+ ["duplicate state" /tests/store/duplicate-state/jibb (store-cart-source normal-poke normal-main normal-init normal-update '+$ state @t\0a') ~]
234+ ["state derived collision" /tests/store/state-collision/jibb (store-cart-source normal-poke normal-main normal-init normal-update '++ state 0\0a') ~]
235+ ["action derived collision" /tests/store/action-collision/jibb (store-cart-source normal-poke normal-main normal-init normal-update '++ cart-action 0\0a') ~]
236+ ["import derived collision" /tests/store/import-collision/jibb (cat 3 '/= state /ui/stores/other\0a' (store-cart-source normal-poke normal-main normal-init normal-update '')) ~]
237+ ["alias main" /tests/store/alias-main/jibb (store-cart-source normal-poke '++ main (build init update)\0a' normal-init normal-update '++ build store\0a') ~]
238+ ["hand-built main" /tests/store/hand-main/jibb (store-cart-source normal-poke '++ main [init update]\0a' normal-init normal-update '') ~]
239+ ==
240+ =/ normal-basket-update=@t '++ update |= [=msg m=model]\0a ?- msg\0a [%noted t] [m(note=t) ~]\0a %add [m(note="") ~[[%poke (cart-action.cart [%add note.m]) |=%acked]]]\0a %toggle [m ~[[%poke (cart-action.cart %toggle) |=%acked]]]\0a [%got c] [m(cart=c) ~]\0a [%acked err] [m ~]\0a'
241+ =/ normal-subs=@t '++ subs |= m=model\0a ~[[%watch (state.cart |=%got)]]\0a'
242+ =/ wrong-payload=@t '++ update |= [=msg m=model]\0a ?- msg\0a [%noted t] [m(note=t) ~]\0a %add [m(note="") ~[[%poke (cart-action.cart [%add ~zod]) |=%acked]]]\0a %toggle [m ~[[%poke (cart-action.cart %toggle) |=%acked]]]\0a [%got c] [m(cart=c) ~]\0a [%acked err] [m ~]\0a'
243+ =/ basket-cases=(list [label=tape at=path src=@t modules=jbundle:jibb])
244+ :~ ["wrong poke payload" /ui/basket/jibb (store-basket-source wrong-payload normal-subs '') modules]
245+ ["wrong state reply" /ui/basket/jibb (store-basket-source normal-basket-update '++ subs |= m=model\0a ~[[%watch (state.cart |=%acked)]]\0a' '') modules]
246+ ["helper state request" /ui/basket/jibb (store-basket-source normal-basket-update '++ subs |= m=model\0a ~[[%watch request]]\0a' '++ request ^- (ask msg) (state.cart |=%got)\0a') modules]
247+ ["program under store path" /ui/stores/basket/jibb basket-source modules]
248+ ==
249+ =/ page=@t '/= cart /ui/stores/cart\0a++ main (page load view)\0a++ load |= ~ (state.cart same)\0a++ view |= s=state.cart ^- (element !!) (text "page")\0a'
250+ =/ page-case=[label=tape at=path src=@t modules=jbundle:jibb]
251+ ["store state as page load" /tests/store/page/jibb page modules]
252+ =/ failures=(list tape) (store-rejections (weld cart-cases (weld basket-cases ~[page-case])) u.prepared)
253+ ?^ failures failures
254+ ~
255+::
256+++ test-store
257+ ^- tang
258+ =/ failures=(list tape)
259+ (store-errors prelude internal (text cart) (text basket))
260+ (turn failures |=(reason=tape leaf+reason))
261+--
tests/lib/jibb-theme.hoonnew file+86
@@ -0,0 +1,86 @@
1+:: Full checking for the documented theme mold and real app theme only.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* source %txt /tests/type-theme/source/txt
6+/* dark-absent %txt /tests/type-theme/dark-absent/txt
7+/* wrong-nested-aura %txt /tests/type-theme/wrong-nested-aura/txt
8+/* missing-field %txt /tests/type-theme/missing-field/txt
9+/* wrong-font %txt /tests/type-theme/wrong-font/txt
10+/* wrong-dark %txt /tests/type-theme/wrong-dark/txt
11+|%
12+++ text
13+ |= lines=wain
14+ ^- @t
15+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
16+::
17+++ theme-detailed
18+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
19+ ^- jfile-detailed-result:jibb
20+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
21+::
22+++ theme-positive
23+ |= [label=tape src=@t expected=tape prepared=iprelude:jibb]
24+ ^- (list tape)
25+ =/ at=path /ui/theme/jibb
26+ =/ detailed=jfile-detailed-result:jibb
27+ (theme-detailed at src ~ prepared)
28+ ?: ?=(%| -.detailed)
29+ ~[(weld label (weld ": rejected: " (trip message.p.detailed)))]
30+ =/ checked=ifile:jibb iface.p.detailed
31+ =/ theme=(unit ischeme:jibb) (ienv-lookup:jibb %theme values.checked)
32+ ?~ theme ~[(weld label ": theme is missing")]
33+ ?. &(?=(~ vars.u.theme) ?=(~ (itype-vars:jibb typ.u.theme)))
34+ ~[(weld label ": theme is not closed")]
35+ =/ actual=tape (show-itype:jibb typ.u.theme ~)
36+ ?. =(actual expected)
37+ ~[(weld label (weld ": theme type was " actual))]
38+ =/ consumer-at=path /tests/theme/consumer/jibb
39+ =/ consumer=@t '/= app-theme /ui/theme\0a++ imported theme.app-theme\0a'
40+ =/ imported=jfile-detailed-result:jibb
41+ (theme-detailed consumer-at consumer ~[[at src]] prepared)
42+ ?: ?=(%| -.imported)
43+ ~[(weld label (weld ": downstream import rejected: " (trip message.p.imported)))]
44+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
45+ ?~ use ~[(weld label ": downstream theme is missing")]
46+ =/ expected-import=itype:jibb
47+ (itype-in-import:jibb typ.u.theme checked %app-theme `iface.prepared)
48+ ?. &(?=(~ vars.u.use) =(typ.u.use expected-import))
49+ ~[(weld label ": downstream theme type differs")]
50+ ~
51+::
52+++ theme-negative
53+ |= [label=tape src=@t prepared=iprelude:jibb]
54+ ^- (list tape)
55+ =/ bad=jfile-detailed-result:jibb
56+ (theme-detailed /ui/theme/jibb src ~ prepared)
57+ ?: ?=(%& -.bad) ~[(weld label ": accepted")]
58+ ~
59+::
60+++ theme-errors
61+ |= [public=@t private=@t source=@t dark-absent=@t wrong-nested-aura=@t missing-field=@t wrong-font=@t wrong-dark=@t]
62+ ^- (list tape)
63+ =/ prepared=(unit iprelude:jibb)
64+ (prepare-prelude-with-internal:jibb public private)
65+ ?~ prepared ~["theme prelude did not prepare"]
66+ =/ expected=tape "[space=[s1=@t [s2=@t s3=@t]] [tones=[normal=@t [background=@t [accent=@t [danger=@t muted=@t]]]] [wide=@t [lang=@t [zone=@t [font=(unit qath.internal) dark=(unit [tones=[normal=@t [background=@t [accent=@t [danger=@t muted=@t]]]]])]]]]]]"
67+ =/ negatives=(list [label=tape src=@t])
68+ :~ ["wrong nested aura" wrong-nested-aura]
69+ ["missing required field" missing-field]
70+ ["wrong font type" wrong-font]
71+ ["wrong dark type" wrong-dark]
72+ ==
73+ =/ positives=(list (list tape))
74+ :~ (theme-positive "dark present" source expected u.prepared)
75+ (theme-positive "dark absent" dark-absent expected u.prepared)
76+ ==
77+ =/ failures=(list tape) (zing positives)
78+ ?^ failures failures
79+ (zing (turn negatives |=(c=[label=tape src=@t] (theme-negative label.c src.c u.prepared))))
80+::
81+++ test-theme
82+ ^- tang
83+ =/ failures=(list tape)
84+ (theme-errors prelude internal (text source) (text dark-absent) (text wrong-nested-aura) (text missing-field) (text wrong-font) (text wrong-dark))
85+ (turn failures |=(reason=tape leaf+reason))
86+--
tests/lib/jibb-todo-full.hoonnew file+157
@@ -0,0 +1,157 @@
1+:: Full unchanged todo island through real readers, without UI execution.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+/* source %txt /tests/type-gate-free/todo/txt
12+/* wrong-model %txt /tests/type-todo-full/wrong-model/txt
13+/* wrong-message %txt /tests/type-todo-full/wrong-message/txt
14+/* wrong-result %txt /tests/type-todo-full/wrong-result/txt
15+/* ambiguous-mapper %txt /tests/type-todo-full/ambiguous-mapper/txt
16+/* open-key %txt /tests/type-todo-full/open-key/txt
17+/* alias %txt /tests/type-todo-full/alias/txt
18+/* wrong-watch %txt /tests/type-todo-full/wrong-watch/txt
19+/* non-gate-view %txt /tests/type-todo-full/non-gate-view/txt
20+/* expected %txt /tests/type-todo-full/expected/txt
21+|%
22+++ text
23+ |= lines=wain
24+ ^- @t
25+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
26+::
27+++ todo-full-detailed
28+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
29+ ^- jfile-detailed-result:jibb
30+ (infer-jibb-file-detailed:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
31+::
32+++ todo-full-reader-inputs
33+ |= [sur=@t action=@t todos=@t update=@t item=@t]
34+ ^- [marks=imark-externals:jibb externals=iexternals:jibb]
35+ =/ todo=type -:(ride -:!>(..zuse) sur)
36+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
37+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action))
38+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos))
39+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update))
40+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item))
41+ =/ marks=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
42+ =/ item-input=* (read-named:jibb-import %todo %item todo)
43+ [marks ~[[%todo %item item-input]]]
44+::
45+++ todo-full-report
46+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t src=@t]
47+ ^- @t
48+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
49+ ?~ prepared 'prelude unavailable'
50+ =/ inputs=[marks=imark-externals:jibb externals=iexternals:jibb]
51+ (todo-full-reader-inputs sur action todos update item)
52+ =/ marks=imark-externals:jibb marks.inputs
53+ =/ externals=iexternals:jibb externals.inputs
54+ =/ api-at=path /ui/api/todo/jibb
55+ =/ at=path /ui/todo-list/jibb
56+ =/ modules=jbundle:jibb ~[[api-at api]]
57+ =/ detailed=jfile-detailed-result:jibb
58+ (todo-full-detailed at src externals marks modules u.prepared)
59+ ?: ?=(%| -.detailed) (cat 3 'full todo rejected: ' message.p.detailed)
60+ =/ checked=ifile:jibb iface.p.detailed
61+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
62+ ?~ main 'full todo main missing'
63+ (cat 3 'full todo accepted\0a' (crip (show-itype:jibb typ.u.main ~)))
64+::
65+++ todo-full-legacy-report
66+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t src=@t]
67+ ^- @t
68+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
69+ ?~ prepared 'prelude unavailable'
70+ =/ inputs=[marks=imark-externals:jibb externals=iexternals:jibb]
71+ (todo-full-reader-inputs sur action todos update item)
72+ =/ marks=imark-externals:jibb marks.inputs
73+ =/ externals=iexternals:jibb externals.inputs
74+ =/ api-at=path /ui/api/todo/jibb
75+ =/ at=path /ui/todo-list/jibb
76+ =/ modules=jbundle:jibb ~[[api-at api]]
77+ =/ legacy=jfile-result:jibb
78+ (infer-jibb-file:jibb at src externals marks modules ~[at] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
79+ ?: ?=(%| -.legacy) (cat 3 'legacy full todo rejected: ' p.legacy)
80+ =/ checked=ifile:jibb iface.p.legacy
81+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
82+ ?~ main 'legacy full todo main missing'
83+ (cat 3 'full todo accepted\0a' (crip (show-itype:jibb typ.u.main ~)))
84+::
85+++ todo-full-import-report
86+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t src=@t]
87+ ^- @t
88+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
89+ ?~ prepared 'prelude unavailable'
90+ =/ inputs=[marks=imark-externals:jibb externals=iexternals:jibb]
91+ (todo-full-reader-inputs sur action todos update item)
92+ =/ at=path /ui/todo-list/jibb
93+ =/ root=jfile-detailed-result:jibb
94+ (todo-full-detailed at src externals.inputs marks.inputs ~[[/ui/api/todo/jibb api]] u.prepared)
95+ ?: ?=(%| -.root) (cat 3 'full todo root rejected: ' message.p.root)
96+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.iface.p.root)
97+ ?~ main 'full todo root main missing'
98+ =/ consumer-at=path /tests/todo-full/consumer/jibb
99+ =/ consumer=@t '/= island-prog /ui/todo-list\0a++ imported main.island-prog\0a'
100+ =/ imported=jfile-detailed-result:jibb
101+ (todo-full-detailed consumer-at consumer externals.inputs marks.inputs ~[[at src] [/ui/api/todo/jibb api]] u.prepared)
102+ ?: ?=(%| -.imported) (cat 3 'downstream full todo import rejected: ' message.p.imported)
103+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
104+ ?~ use 'downstream imported main missing'
105+ =/ expected-import=itype:jibb
106+ (itype-in-import:jibb typ.u.main iface.p.root %island-prog `iface.u.prepared)
107+ ?. &(?=(~ vars.u.use) =(typ.u.use expected-import)) 'downstream main type differs'
108+ 'downstream import accepted'
109+::
110+++ todo-full-negative-report
111+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t label=@t src=@t]
112+ ^- @t
113+ =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public private)
114+ ?~ prepared 'prelude unavailable'
115+ =/ inputs=[marks=imark-externals:jibb externals=iexternals:jibb]
116+ (todo-full-reader-inputs sur action todos update item)
117+ =/ at=path /ui/todo-list/jibb
118+ =/ structured=jfile-detailed-result:jibb
119+ (todo-full-detailed at src externals.inputs marks.inputs ~[[/ui/api/todo/jibb api]] u.prepared)
120+ ?: ?=(%& -.structured) (cat 3 label ': BAD accepted')
121+ (cat 3 label ': rejected')
122+::
123+++ test-todo-full
124+ ^- tang
125+ =/ report=@t
126+ (todo-full-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source))
127+ ?. =((to-wain:format (cat 3 report '\0a')) expected)
128+ ~[leaf+"full todo report differs"]
129+ =/ legacy=@t
130+ (todo-full-legacy-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source))
131+ ?. =((to-wain:format (cat 3 legacy '\0a')) expected)
132+ ~[leaf+"legacy full todo report differs"]
133+ =/ imported=@t
134+ (todo-full-import-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source))
135+ ?. =(imported 'downstream import accepted')
136+ ~[leaf+"downstream full todo import differs"]
137+ =/ negatives=(list [label=@t src=@t])
138+ :~ ['wrong model' (text wrong-model)]
139+ ['wrong message' (text wrong-message)]
140+ ['wrong result' (text wrong-result)]
141+ ['ambiguous mapper' (text ambiguous-mapper)]
142+ ['open key' (text open-key)]
143+ ['mapper alias' (text alias)]
144+ ['wrong watch' (text wrong-watch)]
145+ ['non-gate view' (text non-gate-view)]
146+ ==
147+ =/ bad=(list @t)
148+ %+ murn negatives
149+ |= c=[label=@t src=@t]
150+ =/ expected=@t (cat 3 label.c ': rejected')
151+ =/ actual=@t
152+ (todo-full-negative-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) label.c src.c)
153+ ?. =(expected actual) `actual
154+ ~
155+ ?^ bad (turn bad |=(reason=@t leaf+(trip reason)))
156+ ~
157+--
tests/lib/jibb-union-alias-overlap.hoonnew file+107
@@ -0,0 +1,107 @@
1+:: Source-backed alias overlap diagnostics, without a full module claim.
2+/+ jibb
3+/* positive %txt /tests/type-union-alias-overlap/positive/txt
4+/* negative %txt /tests/type-union-alias-overlap/negative/txt
5+/* nonzero %txt /tests/type-union-alias-overlap/nonzero/txt
6+/* multi %txt /tests/type-union-alias-overlap/multi/txt
7+/* opaque %txt /tests/type-union-alias-overlap/opaque/txt
8+/* wrong %txt /tests/type-union-alias-overlap/wrong/txt
9+/* duplicate %txt /tests/type-union-alias-overlap/duplicate/txt
10+/* qualified %txt /tests/type-union-alias-overlap/qualified/txt
11+/* flag-source %txt /tests/type-union-alias-overlap/flag-source/txt
12+/* expected %txt /tests/type-union-alias-overlap/expected/txt
13+|%
14+++ checks
15+ |= [positive=@t negative=@t nonzero=@t multi=@t opaque=@t wrong=@t duplicate=@t qualified=@t flag-source=@t]
16+ ^- (list [@t ?])
17+ =/ project
18+ |= [source=@t name=term]
19+ ^- (unit [cases=(list shape:jibb) molds=imolds:jibb])
20+ =/ parsed (parse:jibb /tests/overlap/jibb source)
21+ ?: ?=(%| -.parsed) ~
22+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
23+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
24+ ?~ found ~
25+ =/ sh=shape:jibb u.found
26+ =? sh ?=(%generic -.sh) body.sh
27+ ?. ?=(%union -.sh) ~
28+ `[cases.sh molds]
29+ =/ a (project positive %same)
30+ =/ z (project positive %same-zero)
31+ =/ d (project negative %distinct-head)
32+ =/ c (project negative %distinct-constant)
33+ =/ e (project negative %empty-payload)
34+ =/ g (project negative %generic)
35+ =/ x (project negative %unknown-name)
36+ =/ nz (project nonzero %same)
37+ =/ m (project multi %choice)
38+ =/ o (project opaque %choice)
39+ =/ w (project wrong %bad)
40+ =/ dup (project duplicate %choice)
41+ =/ q (project qualified %choice)
42+ =/ fz (project flag-source %flag-zero)
43+ =/ fn (project flag-source %flag-nonzero)
44+ ?~ a ~[['BAD same parse' |]]
45+ ?~ z ~[['BAD zero parse' |]]
46+ ?~ d ~[['BAD distinct parse' |]]
47+ ?~ c ~[['BAD constants parse' |]]
48+ ?~ e ~[['BAD empty parse' |]]
49+ ?~ g ~[['BAD generic parse' |]]
50+ ?~ x ~[['BAD reference parse' |]]
51+ ?~ nz ~[['BAD nonzero parse' |]]
52+ ?~ m ~[['BAD multi parse' |]]
53+ ?~ o ~[['BAD opaque parse' |]]
54+ ?~ w ~[['BAD wrong arity parse' |]]
55+ ?~ dup ~[['BAD duplicate parse' |]]
56+ ?~ q ~[['BAD qualified parse' |]]
57+ ?~ fz ~[['BAD flag-zero parse' |]]
58+ ?~ fn ~[['BAD flag-nonzero parse' |]]
59+ ?~ cases.u.a ~[['BAD same cases' |]]
60+ ?~ t.cases.u.a ~[['BAD second same case' |]]
61+ =/ same=(unit upair:jibb) (union-source-overlap:jibb cases.u.a molds.u.a 256)
62+ =/ zero=(unit upair:jibb) (union-source-overlap:jibb cases.u.z molds.u.z 256)
63+ =/ report=wain (to-wain:format (golden-types-in-context:jibb /tests/overlap/jibb positive ~ ~ ~ ~ ~ ~))
64+ =/ failed=jfile-result:jibb (infer-jibb-file:jibb /tests/overlap/jibb positive ~ ~ ~ ~[/tests/overlap/jibb] ~ ~ ~ ~)
65+ =/ nonzero-report=wain (to-wain:format (golden-types-in-context:jibb /tests/overlap/jibb nonzero ~ ~ ~ ~ ~ ~))
66+ :~ ['same head and inhabited payload overlap' ?=(^ same)]
67+ ['zero spelling overlap' ?=(^ zero)]
68+ ['original same-case spans retained' ?~(same | &(=(first.u.same at.i.cases.u.a) =(second.u.same at.i.t.cases.u.a)))]
69+ ['partial report displays same overlap' (lien report |=(line=@t =(line '+$ same: overlapping cases; mold not checked')))]
70+ ['partial report displays zero overlap' (lien report |=(line=@t =(line '+$ same-zero: overlapping cases; mold not checked')))]
71+ ['distinct heads do not overlap' ?=(~ (union-source-overlap:jibb cases.u.d molds.u.d 256))]
72+ ['distinct singleton payloads do not overlap' ?=(~ (union-source-overlap:jibb cases.u.c molds.u.c 256))]
73+ ['empty payload has no witness' ?=(~ (union-source-overlap:jibb cases.u.e molds.u.e 256))]
74+ ['outer variable has no witness' ?=(~ (union-source-overlap:jibb cases.u.g molds.u.g 256))]
75+ ['unresolved reference has no witness' ?=(~ (union-source-overlap:jibb cases.u.x molds.u.x 256))]
76+ ['equal nonzero singleton payload overlaps' ?=(^ (union-source-overlap:jibb cases.u.nz molds.u.nz 256))]
77+ ['nonzero overlap reported' (lien nonzero-report |=(line=@t =(line '+$ same: overlapping cases; mold not checked')))]
78+ ['late pair in three cases overlaps' ?=(^ (union-source-overlap:jibb cases.u.m molds.u.m 256))]
79+ ['opaque gate payload declines' ?=(~ (union-source-overlap:jibb cases.u.o molds.u.o 256))]
80+ ['wrong alias arity declines' ?=(~ (union-source-overlap:jibb cases.u.w molds.u.w 256))]
81+ ['full module remains rejected' ?=(%| -.failed)]
82+ ['first source excerpt retained' (lien report |=(line=@t =(line '/tests/overlap.jibb:3:3: first union case')))]
83+ ['second source excerpt retained' (lien report |=(line=@t =(line '/tests/overlap.jibb:4:3: overlapping case')))]
84+ ['flag and zero payload overlap' ?=(^ (union-source-overlap:jibb cases.u.fz molds.u.fz 256))]
85+ ['flag and nonzero payload decline' ?=(~ (union-source-overlap:jibb cases.u.fn molds.u.fn 256))]
86+ ['duplicate owner declines' ?=(~ (union-source-overlap:jibb cases.u.dup molds.u.dup 256))]
87+ ['qualified owner declines' ?=(~ (union-source-overlap:jibb cases.u.q molds.u.q 256))]
88+ ['20 proof fuel succeeds' ?=(^ (union-source-overlap:jibb cases.u.a molds.u.a 20))]
89+ ['19 proof fuel declines' ?=(~ (union-source-overlap:jibb cases.u.a molds.u.a 19))]
90+ ['zero proof fuel declines' ?=(~ (union-source-overlap:jibb cases.u.a molds.u.a 0))]
91+ ==
92+++ overlap-output
93+ |= [positive=@t negative=@t nonzero=@t multi=@t opaque=@t wrong=@t duplicate=@t qualified=@t flag-source=@t]
94+ ^- @t
95+ =/ result=(list [@t ?]) (checks positive negative nonzero multi opaque wrong duplicate qualified flag-source)
96+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
97+++ text
98+ |= lines=wain
99+ ^- @t
100+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
101+++ test-union-alias-overlap
102+ ^- tang
103+ ?~ expected ~[leaf+"expected output missing"]
104+ =/ actual=@t (overlap-output (text positive) (text negative) (text nonzero) (text multi) (text opaque) (text wrong) (text duplicate) (text qualified) (text flag-source))
105+ ?. =((to-wain:format (cat 3 actual '\0a')) expected) ~[leaf+"generic union overlap output differs"]
106+ ~
107+--
tests/lib/jibb-union-source.hoonnew file+152
@@ -0,0 +1,152 @@
1+:: Bounded source-backed generic-union proof checks; no runtime claim.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* good %txt /tests/type-union-source/good/txt
6+/* same %txt /tests/type-union-source/same/txt
7+/* zero %txt /tests/type-union-source/zero/txt
8+/* nested %txt /tests/type-union-source/nested/txt
9+/* duplicate %txt /tests/type-union-source/duplicate/txt
10+/* wrong %txt /tests/type-union-source/wrong/txt
11+/* duplicate-params %txt /tests/type-union-source/duplicate-params/txt
12+/* hidden-ref %txt /tests/type-union-source/hidden-ref/txt
13+/* qualified %txt /tests/type-union-source/qualified/txt
14+/* direct-source %txt /tests/type-union-source/direct-source/txt
15+/* wide-source %txt /tests/type-union-source/wide-source/txt
16+/* free-source %txt /tests/type-union-source/free-source/txt
17+/* late-source %txt /tests/type-union-source/late-source/txt
18+/* shadow-source %txt /tests/type-union-source/shadow-source/txt
19+/* mixed-source %txt /tests/type-union-source/mixed-source/txt
20+/* expected %txt /tests/type-union-source/expected/txt
21+|%
22+++ checks
23+ |= [public=@t internal=@t good=@t same=@t zero=@t nested=@t duplicate=@t wrong=@t duplicate-params=@t hidden-ref=@t qualified=@t direct-source=@t wide-source=@t free-source=@t late-source=@t shadow-source=@t mixed-source=@t]
24+ ^- (list [@t ?])
25+ =/ module-choice
26+ |= [source=@t name=term]
27+ ^- (unit [cases=(list shape:jibb) molds=imolds:jibb])
28+ =/ parsed (parse:jibb /tests/empty/jibb source)
29+ ?: ?=(%| -.parsed) ~
30+ =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
31+ =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
32+ ?~ found ~
33+ ?. ?=(%union -.u.found) ~
34+ `[cases.u.found molds]
35+ =/ g=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice good %choice)
36+ =/ s=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice same %bad)
37+ =/ z=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice zero %bad)
38+ =/ n=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice nested %choice)
39+ =/ d=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice duplicate %choice)
40+ =/ w=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice wrong %bad)
41+ =/ dp=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice duplicate-params %choice)
42+ =/ hr=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice hidden-ref %choice)
43+ =/ q=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice qualified %choice)
44+ =/ direct=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice direct-source %choice)
45+ =/ wide=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice wide-source %choice)
46+ =/ free=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice free-source %choice)
47+ =/ late=(unit [cases=(list shape:jibb) molds=imolds:jibb]) (module-choice late-source %choice)
48+ ?~ g ~[['BAD good parse' |]]
49+ ?~ s ~[['BAD same parse' |]]
50+ ?~ z ~[['BAD zero parse' |]]
51+ ?~ n ~[['BAD nested parse' |]]
52+ ?~ d ~[['BAD duplicate parse' |]]
53+ ?~ w ~[['BAD arity parse' |]]
54+ ?~ dp ~[['BAD duplicate params parse' |]]
55+ ?~ hr ~[['BAD hidden ref parse' |]]
56+ ?~ q ~[['BAD qualified parse' |]]
57+ ?~ direct ~[['BAD direct parse' |]]
58+ ?~ wide ~[['BAD wide parse' |]]
59+ ?~ free ~[['BAD free parse' |]]
60+ ?~ late ~[['BAD late parse' |]]
61+ ?~ cases.u.late ~[['BAD late cases' |]]
62+ =/ chosen=(unit shape:jibb) (find-simple-mold:jibb %choice molds.u.g)
63+ ?~ chosen ~[['BAD chosen source' |]]
64+ =/ late-shape=(unit shape:jibb) (find-simple-mold:jibb %choice molds.u.late)
65+ ?~ late-shape ~[['BAD late source' |]]
66+ =/ mixed-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb mixed-source)
67+ ?: ?=(%| -.mixed-parsed) ~[['BAD mixed parse' |]]
68+ =/ mixed-collected=grec-collected:jibb (grec-collect-molds:jibb defs.p.mixed-parsed)
69+ =/ mixed-tree=(unit shape:jibb) (~(get by proofs.mixed-collected) %node-tree)
70+ =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
71+ ?~ prep ~[['BAD prepared prelude' |]]
72+ =/ mixed-result=jfile-result:jibb
73+ (infer-jibb-file:jibb /tests/empty/jibb mixed-source ~ ~ ~ ~[/tests/empty/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
74+ =/ mixed-report=wain (to-wain:format (golden-types-with-prepared-prelude:jibb /tests/empty/jibb mixed-source ~ ~ ~ prep))
75+ =/ good-report=wain (to-wain:format (golden-types-in-context:jibb /tests/empty/jibb good ~ ~ ~ ~ ~ ~))
76+ =/ shadow-report=wain (to-wain:format (golden-types-in-context:jibb /tests/empty/jibb shadow-source ~ ~ ~ ~ ~ ~))
77+ =/ good-checked=jfile-result:jibb
78+ (infer-jibb-file:jibb /tests/empty/jibb good ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
79+ =/ collision-checked=jfile-result:jibb
80+ (infer-jibb-file:jibb /tests/empty/jibb same ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
81+ =/ zero-checked=jfile-result:jibb
82+ (infer-jibb-file:jibb /tests/empty/jibb zero ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
83+ =/ arity-checked=jfile-result:jibb
84+ (infer-jibb-file:jibb /tests/empty/jibb wrong ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
85+ =/ shadow-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb shadow-source)
86+ =/ shadow-checked=jfile-result:jibb
87+ (infer-jibb-file:jibb /tests/empty/jibb shadow-source ~ ~ ~ ~[/tests/empty/jibb] ~ ~ ~ ~)
88+ =/ state=istate:jibb *istate:jibb
89+ =/ idx=[at=path source=@t prelude=ifile:jibb shapes=(map term shape:jibb)] [/tests/empty/jibb '' *ifile:jibb *(map term shape:jibb)]
90+ =/ cap256=icaps:jibb (turn (gulf 0 255) |=(n=@ud ['A' n *span:jibb]))
91+ =/ cap257=icaps:jibb (turn (gulf 0 256) |=(n=@ud ['A' n *span:jibb]))
92+ =/ initial=istate:jibb
93+ state(molds molds.u.g, at /tests/empty/jibb, active ~[%outer], caps ~[['Q' 17 *span:jibb]], tags ~[[42 [%term %tas %pending '%pending']]], sub ~[[71 [%atom %t]]], next 100)
94+ =/ preserved=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb u.chosen initial)
95+ =/ structured=istate:jibb initial(params ~[['A' [%cell [%atom %t] [%atom %t]]]])
96+ =/ rejected=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb u.chosen structured)
97+ =/ delayed=istate:jibb initial(molds molds.u.late, in-mold &, params ~[['A' [%var 3]]])
98+ =/ first=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb i.cases.u.late delayed)
99+ =/ incomplete=(unit [typ=itype:jibb state=istate:jibb]) (infer-simple-shape:jibb u.late-shape delayed)
100+ :~ ['source generic distinct' (union-source-distinct-tags:jibb cases.u.g molds.u.g 256)]
101+ ['actual inference preserves pending and scoped state' ?:(?=(~ preserved) | =(state.u.preserved initial))]
102+ ['actual inference rejects structural state' ?=(~ rejected)]
103+ ['later source failure returns no partial state' &(?=(^ first) ?=(~ incomplete))]
104+ ['actual local owner shadow rejected' &(?=(%& -.shadow-parsed) ?=(%| -.shadow-checked))]
105+ ['full generic-alias module checks' ?=(%& -.good-checked)]
106+ ['same-head module is not published' ?=(%| -.collision-checked)]
107+ ['mixed-zero module is not published' ?=(%| -.zero-checked)]
108+ ['wrong-arity module is not published' ?=(%| -.arity-checked)]
109+ ['partial report uses source proof' (lien good-report |=(line=@t =(line '+$ choice: cases proven disjoint; mold not checked')))]
110+ ['partial report preserves shadow diagnostic' (lien shadow-report |=(line=@t =(line '++ bad: local molds shadow a name')))]
111+ ['recognized recursive tree causes conservative decline' &(?=(^ mixed-tree) ?=(%| -.mixed-result))]
112+ ['mixed partial report remains source-only' (lien mixed-report |=(line=@t =(line '+$ choice: cases proven disjoint; mold not checked')))]
113+ ['source exact fuel 18' (union-source-distinct-tags:jibb cases.u.g molds.u.g 18)]
114+ ['source 17 fuel declines' !(union-source-distinct-tags:jibb cases.u.g molds.u.g 17)]
115+ ['same head declines' !(union-source-distinct-tags:jibb cases.u.s molds.u.s 256)]
116+ ['equal noun cross spelling declines' !(union-source-distinct-tags:jibb cases.u.z molds.u.z 256)]
117+ ['nested application declines' !(union-source-distinct-tags:jibb cases.u.n molds.u.n 256)]
118+ ['duplicate owner declines' !(union-source-distinct-tags:jibb cases.u.d molds.u.d 256)]
119+ ['wrong arity declines' !(union-source-distinct-tags:jibb cases.u.w molds.u.w 256)]
120+ ['duplicate parameters decline' !(union-source-distinct-tags:jibb cases.u.dp molds.u.dp 256)]
121+ ['hidden body reference declines' !(union-source-distinct-tags:jibb cases.u.hr molds.u.hr 256)]
122+ ['qualified import declines' !(union-source-distinct-tags:jibb cases.u.q molds.u.q 256)]
123+ ['direct cases use existing proof' !(union-source-distinct-tags:jibb cases.u.direct molds.u.direct 256)]
124+ ['wide alias body declines' !(union-source-distinct-tags:jibb cases.u.wide molds.u.wide 256)]
125+ ['undeclared body parameter declines' !(union-source-distinct-tags:jibb cases.u.free molds.u.free 256)]
126+ ['empty state accepted' (union-source-state-safe:jibb state 256)]
127+ ['simple outer generic accepted' (union-source-state-safe:jibb state(params ~[['A' [%var 3]]], sub ~[[3 [%var 5]]]) 256)]
128+ ['structured outer argument declined' !(union-source-state-safe:jibb state(params ~[['A' [%cell [%atom %t] [%atom %t]]]]) 256)]
129+ ['structured substitution declined' !(union-source-state-safe:jibb state(sub ~[[3 [%cell [%atom %t] [%atom %t]]]]) 256)]
130+ ['pending hole declined' !(union-source-state-safe:jibb state(holes ~[[3 *span:jibb]]) 256)]
131+ ['recursive index declined' !(union-source-state-safe:jibb state(grec-index `idx) 256)]
132+ ['deferred transaction declined' !(union-source-state-safe:jibb state(defer `~) 256)]
133+ ['pending obligation declined' !(union-source-state-safe:jibb state(obligations ~[[[%var 1] [%var 2] *span:jibb *span:jibb]]) 256)]
134+ ['256 state entries accepted' (union-source-state-safe:jibb state(caps cap256) 256)]
135+ ['257 state entries declined' !(union-source-state-safe:jibb state(caps cap257) 256)]
136+ ==
137+++ source-output
138+ |= [public=@t internal=@t good=@t same=@t zero=@t nested=@t duplicate=@t wrong=@t duplicate-params=@t hidden-ref=@t qualified=@t direct-source=@t wide-source=@t free-source=@t late-source=@t shadow-source=@t mixed-source=@t]
139+ ^- @t
140+ =/ result=(list [@t ?]) (checks public internal good same zero nested duplicate wrong duplicate-params hidden-ref qualified direct-source wide-source free-source late-source shadow-source mixed-source)
141+ (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
142+++ text
143+ |= lines=wain
144+ ^- @t
145+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
146+++ test-union-source
147+ ^- tang
148+ ?~ expected ~[leaf+"expected output missing"]
149+ =/ actual=@t (source-output prelude internal (text good) (text same) (text zero) (text nested) (text duplicate) (text wrong) (text duplicate-params) (text hidden-ref) (text qualified) (text direct-source) (text wide-source) (text free-source) (text late-source) (text shadow-source) (text mixed-source))
150+ ?. =((to-wain:format (cat 3 actual '\0a')) expected) ~[leaf+"generic union source output differs"]
151+ ~
152+--
tests/lib/jibb.hoon+1350−1296
@@ -1362,1066 +1362,1102 @@
13621362/* tok-415 %txt /tests/golden/types-capital-distinct/tokens/txt
13631363/* tre-415 %txt /tests/golden/types-capital-distinct/tree/txt
13641364/* typ-415 %txt /tests/golden/types-capital-distinct/types/txt
1365−/* src-416 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1366−/* tok-416 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1367−/* tre-416 %txt /tests/golden/types-cell-pattern-many/tree/txt
1368−/* typ-416 %txt /tests/golden/types-cell-pattern-many/types/txt
1369−/* src-417 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1370−/* tok-417 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1371−/* tre-417 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1372−/* typ-417 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1373−/* src-418 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1374−/* tok-418 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1375−/* tre-418 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1376−/* typ-418 %txt /tests/golden/types-cell-pattern-tail/types/txt
1377−/* src-419 %jibb /tests/golden/types-constructor-context/source/jibb
1378−/* tok-419 %txt /tests/golden/types-constructor-context/tokens/txt
1379−/* tre-419 %txt /tests/golden/types-constructor-context/tree/txt
1380−/* typ-419 %txt /tests/golden/types-constructor-context/types/txt
1381−/* src-420 %jibb /tests/golden/types-deferred-call-context/source/jibb
1382−/* tok-420 %txt /tests/golden/types-deferred-call-context/tokens/txt
1383−/* tre-420 %txt /tests/golden/types-deferred-call-context/tree/txt
1384−/* typ-420 %txt /tests/golden/types-deferred-call-context/types/txt
1385−/* src-421 %jibb /tests/golden/types-equal-head-disjoint/source/jibb
1386−/* tok-421 %txt /tests/golden/types-equal-head-disjoint/tokens/txt
1387−/* tre-421 %txt /tests/golden/types-equal-head-disjoint/tree/txt
1388−/* typ-421 %txt /tests/golden/types-equal-head-disjoint/types/txt
1389−/* src-422 %jibb /tests/golden/types-flag-branch-context/source/jibb
1390−/* tok-422 %txt /tests/golden/types-flag-branch-context/tokens/txt
1391−/* tre-422 %txt /tests/golden/types-flag-branch-context/tree/txt
1392−/* typ-422 %txt /tests/golden/types-flag-branch-context/types/txt
1393−/* src-423 %jibb /tests/golden/types-generic-arity/source/jibb
1394−/* tok-423 %txt /tests/golden/types-generic-arity/tokens/txt
1395−/* tre-423 %txt /tests/golden/types-generic-arity/tree/txt
1396−/* typ-423 %txt /tests/golden/types-generic-arity/types/txt
1397−/* src-424 %jibb /tests/golden/types-generic-face-inference/source/jibb
1398−/* tok-424 %txt /tests/golden/types-generic-face-inference/tokens/txt
1399−/* tre-424 %txt /tests/golden/types-generic-face-inference/tree/txt
1400−/* typ-424 %txt /tests/golden/types-generic-face-inference/types/txt
1401−/* src-425 %jibb /tests/golden/types-generic-gates/source/jibb
1402−/* tok-425 %txt /tests/golden/types-generic-gates/tokens/txt
1403−/* tre-425 %txt /tests/golden/types-generic-gates/tree/txt
1404−/* typ-425 %txt /tests/golden/types-generic-gates/types/txt
1405−/* src-426 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1406−/* tok-426 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1407−/* tre-426 %txt /tests/golden/types-generic-import-reverse/tree/txt
1408−/* mod-426-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1409−/* typ-426 %txt /tests/golden/types-generic-import-reverse/types/txt
1410−/* mtre-426 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1411−/* src-427 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1412−/* tok-427 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1413−/* tre-427 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1414−/* typ-427 %txt /tests/golden/types-generic-lexical-alias/types/txt
1415−/* src-428 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1416−/* tok-428 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1417−/* tre-428 %txt /tests/golden/types-generic-local-parameter/tree/txt
1418−/* typ-428 %txt /tests/golden/types-generic-local-parameter/types/txt
1419−/* src-429 %jibb /tests/golden/types-generic-local-scope/source/jibb
1420−/* tok-429 %txt /tests/golden/types-generic-local-scope/tokens/txt
1421−/* tre-429 %txt /tests/golden/types-generic-local-scope/tree/txt
1422−/* typ-429 %txt /tests/golden/types-generic-local-scope/types/txt
1423−/* src-430 %jibb /tests/golden/types-generic-module/source/jibb
1424−/* tok-430 %txt /tests/golden/types-generic-module/tokens/txt
1425−/* tre-430 %txt /tests/golden/types-generic-module/tree/txt
1426−/* mod-430-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1427−/* typ-430 %txt /tests/golden/types-generic-module/types/txt
1428−/* mtre-430 %txt /tests/golden/types-generic-module/module-trees/txt
1429−/* src-431 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1430−/* tok-431 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1431−/* tre-431 %txt /tests/golden/types-generic-nested-scope/tree/txt
1432−/* typ-431 %txt /tests/golden/types-generic-nested-scope/types/txt
1433−/* src-432 %jibb /tests/golden/types-generic-parameters/source/jibb
1434−/* tok-432 %txt /tests/golden/types-generic-parameters/tokens/txt
1435−/* tre-432 %txt /tests/golden/types-generic-parameters/tree/txt
1436−/* typ-432 %txt /tests/golden/types-generic-parameters/types/txt
1437−/* src-433 %jibb /tests/golden/types-generic-record/source/jibb
1438−/* tok-433 %txt /tests/golden/types-generic-record/tokens/txt
1439−/* tre-433 %txt /tests/golden/types-generic-record/tree/txt
1440−/* typ-433 %txt /tests/golden/types-generic-record/types/txt
1441−/* src-434 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1442−/* tok-434 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1443−/* tre-434 %txt /tests/golden/types-generic-recursive-union/tree/txt
1444−/* typ-434 %txt /tests/golden/types-generic-recursive-union/types/txt
1445−/* src-435 %jibb /tests/golden/types-generic-repeated/source/jibb
1446−/* tok-435 %txt /tests/golden/types-generic-repeated/tokens/txt
1447−/* tre-435 %txt /tests/golden/types-generic-repeated/tree/txt
1448−/* typ-435 %txt /tests/golden/types-generic-repeated/types/txt
1449−/* src-436 %jibb /tests/golden/types-generic-result-context/source/jibb
1450−/* tok-436 %txt /tests/golden/types-generic-result-context/tokens/txt
1451−/* tre-436 %txt /tests/golden/types-generic-result-context/tree/txt
1452−/* typ-436 %txt /tests/golden/types-generic-result-context/types/txt
1453−/* src-437 %jibb /tests/golden/types-generic-union-alias/source/jibb
1454−/* tok-437 %txt /tests/golden/types-generic-union-alias/tokens/txt
1455−/* tre-437 %txt /tests/golden/types-generic-union-alias/tree/txt
1456−/* typ-437 %txt /tests/golden/types-generic-union-alias/types/txt
1457−/* src-438 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1458−/* tok-438 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1459−/* tre-438 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1460−/* mod-438-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1461−/* typ-438 %txt /tests/golden/types-generic-union-alias-face/types/txt
1462−/* mtre-438 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1463−/* src-439 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1464−/* tok-439 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1465−/* tre-439 %txt /tests/golden/types-generic-union-capitals/tree/txt
1466−/* typ-439 %txt /tests/golden/types-generic-union-capitals/types/txt
1467−/* src-440 %jibb /tests/golden/types-generic-union-errors/source/jibb
1468−/* tok-440 %txt /tests/golden/types-generic-union-errors/tokens/txt
1469−/* tre-440 %txt /tests/golden/types-generic-union-errors/tree/txt
1470−/* typ-440 %txt /tests/golden/types-generic-union-errors/types/txt
1471−/* src-441 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1472−/* tok-441 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1473−/* tre-441 %txt /tests/golden/types-generic-union-escaping/tree/txt
1474−/* mod-441-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1475−/* mod-441-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1476−/* typ-441 %txt /tests/golden/types-generic-union-escaping/types/txt
1477−/* mtre-441 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1478−/* src-442 %jibb /tests/golden/types-generic-union-import/source/jibb
1479−/* tok-442 %txt /tests/golden/types-generic-union-import/tokens/txt
1480−/* tre-442 %txt /tests/golden/types-generic-union-import/tree/txt
1481−/* mod-442-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1482−/* mod-442-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1483−/* typ-442 %txt /tests/golden/types-generic-union-import/types/txt
1484−/* mtre-442 %txt /tests/golden/types-generic-union-import/module-trees/txt
1485−/* src-443 %jibb /tests/golden/types-generic-union-local/source/jibb
1486−/* tok-443 %txt /tests/golden/types-generic-union-local/tokens/txt
1487−/* tre-443 %txt /tests/golden/types-generic-union-local/tree/txt
1488−/* typ-443 %txt /tests/golden/types-generic-union-local/types/txt
1489−/* src-444 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1490−/* tok-444 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1491−/* tre-444 %txt /tests/golden/types-generic-union-transitive/tree/txt
1492−/* mod-444-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1493−/* mod-444-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1494−/* typ-444 %txt /tests/golden/types-generic-union-transitive/types/txt
1495−/* mtre-444 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1496−/* src-445 %jibb /tests/golden/types-hole-concrete/source/jibb
1497−/* tok-445 %txt /tests/golden/types-hole-concrete/tokens/txt
1498−/* tre-445 %txt /tests/golden/types-hole-concrete/tree/txt
1499−/* typ-445 %txt /tests/golden/types-hole-concrete/types/txt
1500−/* src-446 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1501−/* tok-446 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1502−/* tre-446 %txt /tests/golden/types-hole-generic-mold/tree/txt
1503−/* typ-446 %txt /tests/golden/types-hole-generic-mold/types/txt
1504−/* src-447 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1505−/* tok-447 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1506−/* tre-447 %txt /tests/golden/types-hole-local-boundary/tree/txt
1507−/* typ-447 %txt /tests/golden/types-hole-local-boundary/types/txt
1508−/* src-448 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1509−/* tok-448 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1510−/* tre-448 %txt /tests/golden/types-hole-module-boundary/tree/txt
1511−/* mod-448-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1512−/* typ-448 %txt /tests/golden/types-hole-module-boundary/types/txt
1513−/* mtre-448 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1514−/* src-449 %jibb /tests/golden/types-hole-named-complex/source/jibb
1515−/* tok-449 %txt /tests/golden/types-hole-named-complex/tokens/txt
1516−/* tre-449 %txt /tests/golden/types-hole-named-complex/tree/txt
1517−/* typ-449 %txt /tests/golden/types-hole-named-complex/types/txt
1518−/* src-450 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1519−/* tok-450 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1520−/* tre-450 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1521−/* typ-450 %txt /tests/golden/types-hole-numeric-capture/types/txt
1522−/* src-451 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1523−/* tok-451 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1524−/* tre-451 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1525−/* typ-451 %txt /tests/golden/types-hole-unbound-mold/types/txt
1526−/* src-452 %jibb /tests/golden/types-hole-unsupported/source/jibb
1527−/* tok-452 %txt /tests/golden/types-hole-unsupported/tokens/txt
1528−/* tre-452 %txt /tests/golden/types-hole-unsupported/tree/txt
1529−/* typ-452 %txt /tests/golden/types-hole-unsupported/types/txt
1530−/* src-453 %jibb /tests/golden/types-hole-user-generic/source/jibb
1531−/* tok-453 %txt /tests/golden/types-hole-user-generic/tokens/txt
1532−/* tre-453 %txt /tests/golden/types-hole-user-generic/tree/txt
1533−/* typ-453 %txt /tests/golden/types-hole-user-generic/types/txt
1534−/* src-454 %jibb /tests/golden/types-hole-user-named/source/jibb
1535−/* tok-454 %txt /tests/golden/types-hole-user-named/tokens/txt
1536−/* tre-454 %txt /tests/golden/types-hole-user-named/tree/txt
1537−/* typ-454 %txt /tests/golden/types-hole-user-named/types/txt
1538−/* src-455 %jibb /tests/golden/types-hole-user-value/source/jibb
1539−/* tok-455 %txt /tests/golden/types-hole-user-value/tokens/txt
1540−/* tre-455 %txt /tests/golden/types-hole-user-value/tree/txt
1541−/* typ-455 %txt /tests/golden/types-hole-user-value/types/txt
1542−/* src-456 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1543−/* tok-456 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1544−/* tre-456 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1545−/* typ-456 %txt /tests/golden/types-import-duplicate-mark/types/txt
1546−/* mark-456-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1547−/* src-457 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1548−/* tok-457 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1549−/* tre-457 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1550−/* typ-457 %txt /tests/golden/types-import-duplicate-sur/types/txt
1551−/* imp-457-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1552−/* imp-457-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1553−/* imp-457-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1554−/* src-458 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1555−/* tok-458 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1556−/* tre-458 %txt /tests/golden/types-import-hoon-flags/tree/txt
1557−/* typ-458 %txt /tests/golden/types-import-hoon-flags/types/txt
1558−/* imp-458-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1559−/* imp-458-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1560−/* imp-458-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1561−/* imp-458-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1562−/* src-459 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1563−/* tok-459 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1564−/* tre-459 %txt /tests/golden/types-import-hoon-noun/tree/txt
1565−/* typ-459 %txt /tests/golden/types-import-hoon-noun/types/txt
1566−/* imp-459-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1567−/* imp-459-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1568−/* imp-459-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1569−/* imp-459-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1570−/* src-460 %jibb /tests/golden/types-import-mark/source/jibb
1571−/* tok-460 %txt /tests/golden/types-import-mark/tokens/txt
1572−/* tre-460 %txt /tests/golden/types-import-mark/tree/txt
1573−/* typ-460 %txt /tests/golden/types-import-mark/types/txt
1574−/* imp-460-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1575−/* mark-460-1 %txt /tests/golden/types-import-mark/mar/label/txt
1576−/* src-461 %jibb /tests/golden/types-import-mark-record/source/jibb
1577−/* tok-461 %txt /tests/golden/types-import-mark-record/tokens/txt
1578−/* tre-461 %txt /tests/golden/types-import-mark-record/tree/txt
1579−/* typ-461 %txt /tests/golden/types-import-mark-record/types/txt
1580−/* mark-461-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1581−/* mark-461-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1582−/* src-462 %jibb /tests/golden/types-import-missing-mold/source/jibb
1583−/* tok-462 %txt /tests/golden/types-import-missing-mold/tokens/txt
1584−/* tre-462 %txt /tests/golden/types-import-missing-mold/tree/txt
1585−/* typ-462 %txt /tests/golden/types-import-missing-mold/types/txt
1586−/* imp-462-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1587−/* src-463 %jibb /tests/golden/types-import-sur/source/jibb
1588−/* tok-463 %txt /tests/golden/types-import-sur/tokens/txt
1589−/* tre-463 %txt /tests/golden/types-import-sur/tree/txt
1590−/* typ-463 %txt /tests/golden/types-import-sur/types/txt
1591−/* imp-463-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1592−/* imp-463-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1593−/* src-464 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1594−/* tok-464 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1595−/* tre-464 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1596−/* mod-464-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1597−/* typ-464 %txt /tests/golden/types-import-sur-record-graph/types/txt
1598−/* imp-464-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1599−/* mtre-464 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1600−/* src-465 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1601−/* tok-465 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1602−/* tre-465 %txt /tests/golden/types-import-tlon-notes/tree/txt
1603−/* typ-465 %txt /tests/golden/types-import-tlon-notes/types/txt
1604−/* imp-465-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1605−/* imp-465-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1606−/* imp-465-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1607−/* imp-465-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1608−/* imp-465-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1609−/* imp-465-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1610−/* imp-465-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1611−/* src-466 %jibb /tests/golden/types-list-branch/source/jibb
1612−/* tok-466 %txt /tests/golden/types-list-branch/tokens/txt
1613−/* tre-466 %txt /tests/golden/types-list-branch/tree/txt
1614−/* typ-466 %txt /tests/golden/types-list-branch/types/txt
1615−/* src-467 %jibb /tests/golden/types-list-cons/source/jibb
1616−/* tok-467 %txt /tests/golden/types-list-cons/tokens/txt
1617−/* tre-467 %txt /tests/golden/types-list-cons/tree/txt
1618−/* typ-467 %txt /tests/golden/types-list-cons/types/txt
1619−/* src-468 %jibb /tests/golden/types-list-context/source/jibb
1620−/* tok-468 %txt /tests/golden/types-list-context/tokens/txt
1621−/* tre-468 %txt /tests/golden/types-list-context/tree/txt
1622−/* typ-468 %txt /tests/golden/types-list-context/types/txt
1623−/* src-469 %jibb /tests/golden/types-list-imported/source/jibb
1624−/* tok-469 %txt /tests/golden/types-list-imported/tokens/txt
1625−/* tre-469 %txt /tests/golden/types-list-imported/tree/txt
1626−/* typ-469 %txt /tests/golden/types-list-imported/types/txt
1627−/* imp-469-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1628−/* imp-469-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1629−/* src-470 %jibb /tests/golden/types-list-open/source/jibb
1630−/* tok-470 %txt /tests/golden/types-list-open/tokens/txt
1631−/* tre-470 %txt /tests/golden/types-list-open/tree/txt
1632−/* typ-470 %txt /tests/golden/types-list-open/types/txt
1633−/* src-471 %jibb /tests/golden/types-list-open-constraints/source/jibb
1634−/* tok-471 %txt /tests/golden/types-list-open-constraints/tokens/txt
1635−/* tre-471 %txt /tests/golden/types-list-open-constraints/tree/txt
1636−/* typ-471 %txt /tests/golden/types-list-open-constraints/types/txt
1637−/* src-472 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1638−/* tok-472 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1639−/* tre-472 %txt /tests/golden/types-list-pattern-imported/tree/txt
1640−/* typ-472 %txt /tests/golden/types-list-pattern-imported/types/txt
1641−/* imp-472-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1642−/* imp-472-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1643−/* src-473 %jibb /tests/golden/types-list-patterns/source/jibb
1644−/* tok-473 %txt /tests/golden/types-list-patterns/tokens/txt
1645−/* tre-473 %txt /tests/golden/types-list-patterns/tree/txt
1646−/* typ-473 %txt /tests/golden/types-list-patterns/types/txt
1647−/* src-474 %jibb /tests/golden/types-list-zero-fit/source/jibb
1648−/* tok-474 %txt /tests/golden/types-list-zero-fit/tokens/txt
1649−/* tre-474 %txt /tests/golden/types-list-zero-fit/tree/txt
1650−/* typ-474 %txt /tests/golden/types-list-zero-fit/types/txt
1651−/* src-475 %jibb /tests/golden/types-literal-constructor-nouns/source/jibb
1652−/* tok-475 %txt /tests/golden/types-literal-constructor-nouns/tokens/txt
1653−/* tre-475 %txt /tests/golden/types-literal-constructor-nouns/tree/txt
1654−/* typ-475 %txt /tests/golden/types-literal-constructor-nouns/types/txt
1655−/* src-476 %jibb /tests/golden/types-local-capitals/source/jibb
1656−/* tok-476 %txt /tests/golden/types-local-capitals/tokens/txt
1657−/* tre-476 %txt /tests/golden/types-local-capitals/tree/txt
1658−/* typ-476 %txt /tests/golden/types-local-capitals/types/txt
1659−/* src-477 %jibb /tests/golden/types-local-recursive/source/jibb
1660−/* tok-477 %txt /tests/golden/types-local-recursive/tokens/txt
1661−/* tre-477 %txt /tests/golden/types-local-recursive/tree/txt
1662−/* typ-477 %txt /tests/golden/types-local-recursive/types/txt
1663−/* src-478 %jibb /tests/golden/types-local-scc/source/jibb
1664−/* tok-478 %txt /tests/golden/types-local-scc/tokens/txt
1665−/* tre-478 %txt /tests/golden/types-local-scc/tree/txt
1666−/* typ-478 %txt /tests/golden/types-local-scc/types/txt
1667−/* src-479 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1668−/* tok-479 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1669−/* tre-479 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1670−/* typ-479 %txt /tests/golden/types-local-scc-adversarial/types/txt
1671−/* src-480 %jibb /tests/golden/types-loobean-singleton-source/source/jibb
1672−/* tok-480 %txt /tests/golden/types-loobean-singleton-source/tokens/txt
1673−/* tre-480 %txt /tests/golden/types-loobean-singleton-source/tree/txt
1674−/* typ-480 %txt /tests/golden/types-loobean-singleton-source/types/txt
1675−/* src-481 %jibb /tests/golden/types-loobean-union-context/source/jibb
1676−/* tok-481 %txt /tests/golden/types-loobean-union-context/tokens/txt
1677−/* tre-481 %txt /tests/golden/types-loobean-union-context/tree/txt
1678−/* typ-481 %txt /tests/golden/types-loobean-union-context/types/txt
1679−/* src-482 %jibb /tests/golden/types-missing-tag-context/source/jibb
1680−/* tok-482 %txt /tests/golden/types-missing-tag-context/tokens/txt
1681−/* tre-482 %txt /tests/golden/types-missing-tag-context/tree/txt
1682−/* typ-482 %txt /tests/golden/types-missing-tag-context/types/txt
1683−/* src-483 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1684−/* tok-483 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1685−/* tre-483 %txt /tests/golden/types-missing-tag-imported/tree/txt
1686−/* typ-483 %txt /tests/golden/types-missing-tag-imported/types/txt
1687−/* imp-483-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1688−/* imp-483-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1689−/* src-484 %jibb /tests/golden/types-missing-tag-named/source/jibb
1690−/* tok-484 %txt /tests/golden/types-missing-tag-named/tokens/txt
1691−/* tre-484 %txt /tests/golden/types-missing-tag-named/tree/txt
1692−/* typ-484 %txt /tests/golden/types-missing-tag-named/types/txt
1693−/* src-485 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1694−/* tok-485 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1695−/* tre-485 %txt /tests/golden/types-module-field-duplicate/tree/txt
1696−/* mod-485-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1697−/* typ-485 %txt /tests/golden/types-module-field-duplicate/types/txt
1698−/* mtre-485 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1699−/* src-486 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1700−/* tok-486 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1701−/* tre-486 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1702−/* mod-486-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1703−/* typ-486 %txt /tests/golden/types-module-field-nonrecord/types/txt
1704−/* mtre-486 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1705−/* src-487 %jibb /tests/golden/types-module-field-path/source/jibb
1706−/* tok-487 %txt /tests/golden/types-module-field-path/tokens/txt
1707−/* tre-487 %txt /tests/golden/types-module-field-path/tree/txt
1708−/* mod-487-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1709−/* typ-487 %txt /tests/golden/types-module-field-path/types/txt
1710−/* mtre-487 %txt /tests/golden/types-module-field-path/module-trees/txt
1711−/* src-488 %jibb /tests/golden/types-module-field-shadow/source/jibb
1712−/* tok-488 %txt /tests/golden/types-module-field-shadow/tokens/txt
1713−/* tre-488 %txt /tests/golden/types-module-field-shadow/tree/txt
1714−/* mod-488-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1715−/* typ-488 %txt /tests/golden/types-module-field-shadow/types/txt
1716−/* mtre-488 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1717−/* src-489 %jibb /tests/golden/types-module-fixtures/source/jibb
1718−/* tok-489 %txt /tests/golden/types-module-fixtures/tokens/txt
1719−/* tre-489 %txt /tests/golden/types-module-fixtures/tree/txt
1720−/* mod-489-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1721−/* mod-489-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1722−/* typ-489 %txt /tests/golden/types-module-fixtures/types/txt
1723−/* mtre-489 %txt /tests/golden/types-module-fixtures/module-trees/txt
1724−/* src-490 %jibb /tests/golden/types-module-mixed/source/jibb
1725−/* tok-490 %txt /tests/golden/types-module-mixed/tokens/txt
1726−/* tre-490 %txt /tests/golden/types-module-mixed/tree/txt
1727−/* mod-490-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1728−/* typ-490 %txt /tests/golden/types-module-mixed/types/txt
1729−/* imp-490-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1730−/* mark-490-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1731−/* mtre-490 %txt /tests/golden/types-module-mixed/module-trees/txt
1732−/* src-491 %jibb /tests/golden/types-multi-call/source/jibb
1733−/* tok-491 %txt /tests/golden/types-multi-call/tokens/txt
1734−/* tre-491 %txt /tests/golden/types-multi-call/tree/txt
1735−/* typ-491 %txt /tests/golden/types-multi-call/types/txt
1736−/* src-492 %jibb /tests/golden/types-multi-import/source/jibb
1737−/* tok-492 %txt /tests/golden/types-multi-import/tokens/txt
1738−/* tre-492 %txt /tests/golden/types-multi-import/tree/txt
1739−/* mod-492-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1740−/* typ-492 %txt /tests/golden/types-multi-import/types/txt
1741−/* mtre-492 %txt /tests/golden/types-multi-import/module-trees/txt
1742−/* src-493 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1743−/* tok-493 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1744−/* tre-493 %txt /tests/golden/types-nested-missing-tag/tree/txt
1745−/* typ-493 %txt /tests/golden/types-nested-missing-tag/types/txt
1746−/* src-494 %jibb /tests/golden/types-nested-noun-context/source/jibb
1747−/* tok-494 %txt /tests/golden/types-nested-noun-context/tokens/txt
1748−/* tre-494 %txt /tests/golden/types-nested-noun-context/tree/txt
1749−/* typ-494 %txt /tests/golden/types-nested-noun-context/types/txt
1750−/* src-495 %jibb /tests/golden/types-nested-shallow-preserve/source/jibb
1751−/* tok-495 %txt /tests/golden/types-nested-shallow-preserve/tokens/txt
1752−/* tre-495 %txt /tests/golden/types-nested-shallow-preserve/tree/txt
1753−/* typ-495 %txt /tests/golden/types-nested-shallow-preserve/types/txt
1754−/* src-496 %jibb /tests/golden/types-nested-union-context/source/jibb
1755−/* tok-496 %txt /tests/golden/types-nested-union-context/tokens/txt
1756−/* tre-496 %txt /tests/golden/types-nested-union-context/tree/txt
1757−/* typ-496 %txt /tests/golden/types-nested-union-context/types/txt
1758−/* src-497 %jibb /tests/golden/types-null-context/source/jibb
1759−/* tok-497 %txt /tests/golden/types-null-context/tokens/txt
1760−/* tre-497 %txt /tests/golden/types-null-context/tree/txt
1761−/* typ-497 %txt /tests/golden/types-null-context/types/txt
1762−/* src-498 %jibb /tests/golden/types-null-overlap/source/jibb
1763−/* tok-498 %txt /tests/golden/types-null-overlap/tokens/txt
1764−/* tre-498 %txt /tests/golden/types-null-overlap/tree/txt
1765−/* typ-498 %txt /tests/golden/types-null-overlap/types/txt
1766−/* src-499 %jibb /tests/golden/types-null-unresolved/source/jibb
1767−/* tok-499 %txt /tests/golden/types-null-unresolved/tokens/txt
1768−/* tre-499 %txt /tests/golden/types-null-unresolved/tree/txt
1769−/* typ-499 %txt /tests/golden/types-null-unresolved/types/txt
1770−/* src-500 %jibb /tests/golden/types-pair-context/source/jibb
1771−/* tok-500 %txt /tests/golden/types-pair-context/tokens/txt
1772−/* tre-500 %txt /tests/golden/types-pair-context/tree/txt
1773−/* typ-500 %txt /tests/golden/types-pair-context/types/txt
1774−/* src-501 %jibb /tests/golden/types-partial-apply/source/jibb
1775−/* tok-501 %txt /tests/golden/types-partial-apply/tokens/txt
1776−/* tre-501 %txt /tests/golden/types-partial-apply/tree/txt
1777−/* typ-501 %txt /tests/golden/types-partial-apply/types/txt
1778−/* src-502 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1779−/* tok-502 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1780−/* tre-502 %txt /tests/golden/types-partial-atom-alias/tree/txt
1781−/* typ-502 %txt /tests/golden/types-partial-atom-alias/types/txt
1782−/* src-503 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1783−/* tok-503 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1784−/* tre-503 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1785−/* typ-503 %txt /tests/golden/types-partial-atom-constraint/types/txt
1786−/* src-504 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1787−/* tok-504 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1788−/* tre-504 %txt /tests/golden/types-partial-atom-widening/tree/txt
1789−/* typ-504 %txt /tests/golden/types-partial-atom-widening/types/txt
1790−/* src-505 %jibb /tests/golden/types-partial-aura/source/jibb
1791−/* tok-505 %txt /tests/golden/types-partial-aura/tokens/txt
1792−/* tre-505 %txt /tests/golden/types-partial-aura/tree/txt
1793−/* typ-505 %txt /tests/golden/types-partial-aura/types/txt
1794−/* src-506 %jibb /tests/golden/types-partial-aura-family/source/jibb
1795−/* tok-506 %txt /tests/golden/types-partial-aura-family/tokens/txt
1796−/* tre-506 %txt /tests/golden/types-partial-aura-family/tree/txt
1797−/* typ-506 %txt /tests/golden/types-partial-aura-family/types/txt
1798−/* src-507 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1799−/* tok-507 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1800−/* tre-507 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1801−/* typ-507 %txt /tests/golden/types-partial-aura-generalization/types/txt
1802−/* src-508 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1803−/* tok-508 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1804−/* tre-508 %txt /tests/golden/types-partial-bare-atom/tree/txt
1805−/* typ-508 %txt /tests/golden/types-partial-bare-atom/types/txt
1806−/* src-509 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1807−/* tok-509 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1808−/* tre-509 %txt /tests/golden/types-partial-branch-widening/tree/txt
1809−/* typ-509 %txt /tests/golden/types-partial-branch-widening/types/txt
1810−/* src-510 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1811−/* tok-510 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1812−/* tre-510 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1813−/* typ-510 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1814−/* src-511 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1815−/* tok-511 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1816−/* tre-511 %txt /tests/golden/types-partial-decimal-default/tree/txt
1817−/* typ-511 %txt /tests/golden/types-partial-decimal-default/types/txt
1818−/* src-512 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1819−/* tok-512 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1820−/* tre-512 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1821−/* typ-512 %txt /tests/golden/types-partial-dependency-chain/types/txt
1822−/* src-513 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1823−/* tok-513 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1824−/* tre-513 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1825−/* typ-513 %txt /tests/golden/types-partial-explicit-capital/types/txt
1826−/* src-514 %jibb /tests/golden/types-partial-forward/source/jibb
1827−/* tok-514 %txt /tests/golden/types-partial-forward/tokens/txt
1828−/* tre-514 %txt /tests/golden/types-partial-forward/tree/txt
1829−/* typ-514 %txt /tests/golden/types-partial-forward/types/txt
1830−/* src-515 %jibb /tests/golden/types-partial-generalization/source/jibb
1831−/* tok-515 %txt /tests/golden/types-partial-generalization/tokens/txt
1832−/* tre-515 %txt /tests/golden/types-partial-generalization/tree/txt
1833−/* typ-515 %txt /tests/golden/types-partial-generalization/types/txt
1834−/* src-516 %jibb /tests/golden/types-partial-identity/source/jibb
1835−/* tok-516 %txt /tests/golden/types-partial-identity/tokens/txt
1836−/* tre-516 %txt /tests/golden/types-partial-identity/tree/txt
1837−/* typ-516 %txt /tests/golden/types-partial-identity/types/txt
1838−/* src-517 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1839−/* tok-517 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1840−/* tre-517 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1841−/* typ-517 %txt /tests/golden/types-partial-independent-atoms/types/txt
1842−/* src-518 %jibb /tests/golden/types-partial-local-molds/source/jibb
1843−/* tok-518 %txt /tests/golden/types-partial-local-molds/tokens/txt
1844−/* tre-518 %txt /tests/golden/types-partial-local-molds/tree/txt
1845−/* typ-518 %txt /tests/golden/types-partial-local-molds/types/txt
1846−/* src-519 %jibb /tests/golden/types-partial-locals/source/jibb
1847−/* tok-519 %txt /tests/golden/types-partial-locals/tokens/txt
1848−/* tre-519 %txt /tests/golden/types-partial-locals/tree/txt
1849−/* typ-519 %txt /tests/golden/types-partial-locals/types/txt
1850−/* src-520 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1851−/* tok-520 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1852−/* tre-520 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1853−/* typ-520 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1854−/* src-521 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1855−/* tok-521 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1856−/* tre-521 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1857−/* typ-521 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1858−/* src-522 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1859−/* tok-522 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1860−/* tre-522 %txt /tests/golden/types-partial-mold-composite/tree/txt
1861−/* typ-522 %txt /tests/golden/types-partial-mold-composite/types/txt
1862−/* src-523 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1863−/* tok-523 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1864−/* tre-523 %txt /tests/golden/types-partial-mold-forward/tree/txt
1865−/* typ-523 %txt /tests/golden/types-partial-mold-forward/types/txt
1866−/* src-524 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1867−/* tok-524 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1868−/* tre-524 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1869−/* typ-524 %txt /tests/golden/types-partial-mold-recursive/types/txt
1870−/* src-525 %jibb /tests/golden/types-partial-occurs/source/jibb
1871−/* tok-525 %txt /tests/golden/types-partial-occurs/tokens/txt
1872−/* tre-525 %txt /tests/golden/types-partial-occurs/tree/txt
1873−/* typ-525 %txt /tests/golden/types-partial-occurs/types/txt
1874−/* src-526 %jibb /tests/golden/types-partial-projection/source/jibb
1875−/* tok-526 %txt /tests/golden/types-partial-projection/tokens/txt
1876−/* tre-526 %txt /tests/golden/types-partial-projection/tree/txt
1877−/* typ-526 %txt /tests/golden/types-partial-projection/types/txt
1878−/* src-527 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1879−/* tok-527 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1880−/* tre-527 %txt /tests/golden/types-partial-shadow-global/tree/txt
1881−/* typ-527 %txt /tests/golden/types-partial-shadow-global/types/txt
1882−/* src-528 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1883−/* tok-528 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1884−/* tre-528 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1885−/* typ-528 %txt /tests/golden/types-partial-shared-tvar/types/txt
1886−/* src-529 %jibb /tests/golden/types-partial-union-cases/source/jibb
1887−/* tok-529 %txt /tests/golden/types-partial-union-cases/tokens/txt
1888−/* tre-529 %txt /tests/golden/types-partial-union-cases/tree/txt
1889−/* typ-529 %txt /tests/golden/types-partial-union-cases/types/txt
1890−/* src-530 %jibb /tests/golden/types-partial-union-edges/source/jibb
1891−/* tok-530 %txt /tests/golden/types-partial-union-edges/tokens/txt
1892−/* tre-530 %txt /tests/golden/types-partial-union-edges/tree/txt
1893−/* typ-530 %txt /tests/golden/types-partial-union-edges/types/txt
1894−/* src-531 %jibb /tests/golden/types-partial-union-nested-nouns/source/jibb
1895−/* tok-531 %txt /tests/golden/types-partial-union-nested-nouns/tokens/txt
1896−/* tre-531 %txt /tests/golden/types-partial-union-nested-nouns/tree/txt
1897−/* typ-531 %txt /tests/golden/types-partial-union-nested-nouns/types/txt
1898−/* src-532 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1899−/* tok-532 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1900−/* tre-532 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1901−/* typ-532 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1902−/* src-533 %jibb /tests/golden/types-positional-faces/source/jibb
1903−/* tok-533 %txt /tests/golden/types-positional-faces/tokens/txt
1904−/* tre-533 %txt /tests/golden/types-positional-faces/tree/txt
1905−/* typ-533 %txt /tests/golden/types-positional-faces/types/txt
1906−/* src-534 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1907−/* tok-534 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1908−/* tre-534 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1909−/* typ-534 %txt /tests/golden/types-prelude-arithmetic/types/txt
1910−/* src-535 %jibb /tests/golden/types-prelude-ask/source/jibb
1911−/* tok-535 %txt /tests/golden/types-prelude-ask/tokens/txt
1912−/* tre-535 %txt /tests/golden/types-prelude-ask/tree/txt
1913−/* typ-535 %txt /tests/golden/types-prelude-ask/types/txt
1914−/* src-536 %jibb /tests/golden/types-prelude-bond/source/jibb
1915−/* tok-536 %txt /tests/golden/types-prelude-bond/tokens/txt
1916−/* tre-536 %txt /tests/golden/types-prelude-bond/tree/txt
1917−/* typ-536 %txt /tests/golden/types-prelude-bond/types/txt
1918−/* src-537 %jibb /tests/golden/types-prelude-cmd/source/jibb
1919−/* tok-537 %txt /tests/golden/types-prelude-cmd/tokens/txt
1920−/* tre-537 %txt /tests/golden/types-prelude-cmd/tree/txt
1921−/* typ-537 %txt /tests/golden/types-prelude-cmd/types/txt
1922−/* src-538 %jibb /tests/golden/types-prelude-direct/source/jibb
1923−/* tok-538 %txt /tests/golden/types-prelude-direct/tokens/txt
1924−/* tre-538 %txt /tests/golden/types-prelude-direct/tree/txt
1925−/* typ-538 %txt /tests/golden/types-prelude-direct/types/txt
1926−/* src-539 %jibb /tests/golden/types-prelude-functional/source/jibb
1927−/* tok-539 %txt /tests/golden/types-prelude-functional/tokens/txt
1928−/* tre-539 %txt /tests/golden/types-prelude-functional/tree/txt
1929−/* typ-539 %txt /tests/golden/types-prelude-functional/types/txt
1930−/* src-540 %jibb /tests/golden/types-prelude-generic-alias/source/jibb
1931−/* tok-540 %txt /tests/golden/types-prelude-generic-alias/tokens/txt
1932−/* tre-540 %txt /tests/golden/types-prelude-generic-alias/tree/txt
1933−/* mod-540-1 %jibb /tests/golden/types-prelude-generic-alias/modules/ui/alias-helper/jibb
1934−/* typ-540 %txt /tests/golden/types-prelude-generic-alias/types/txt
1935−/* mtre-540 %txt /tests/golden/types-prelude-generic-alias/module-trees/txt
1936−/* src-541 %jibb /tests/golden/types-prelude-interface/source/jibb
1937−/* tok-541 %txt /tests/golden/types-prelude-interface/tokens/txt
1938−/* tre-541 %txt /tests/golden/types-prelude-interface/tree/txt
1939−/* mod-541-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1940−/* mod-541-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1941−/* typ-541 %txt /tests/golden/types-prelude-interface/types/txt
1942−/* mtre-541 %txt /tests/golden/types-prelude-interface/module-trees/txt
1943−/* src-542 %jibb /tests/golden/types-prelude-lent/source/jibb
1944−/* tok-542 %txt /tests/golden/types-prelude-lent/tokens/txt
1945−/* tre-542 %txt /tests/golden/types-prelude-lent/tree/txt
1946−/* typ-542 %txt /tests/golden/types-prelude-lent/types/txt
1947−/* src-543 %jibb /tests/golden/types-prelude-like/source/jibb
1948−/* tok-543 %txt /tests/golden/types-prelude-like/tokens/txt
1949−/* tre-543 %txt /tests/golden/types-prelude-like/tree/txt
1950−/* typ-543 %txt /tests/golden/types-prelude-like/types/txt
1951−/* src-544 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1952−/* tok-544 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1953−/* tre-544 %txt /tests/golden/types-prelude-list-alias/tree/txt
1954−/* typ-544 %txt /tests/golden/types-prelude-list-alias/types/txt
1955−/* src-545 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1956−/* tok-545 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1957−/* tre-545 %txt /tests/golden/types-prelude-list-functions/tree/txt
1958−/* mod-545-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1959−/* typ-545 %txt /tests/golden/types-prelude-list-functions/types/txt
1960−/* mtre-545 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1961−/* src-546 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1962−/* tok-546 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1963−/* tre-546 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1964−/* typ-546 %txt /tests/golden/types-prelude-list-helpers/types/txt
1965−/* src-547 %jibb /tests/golden/types-prelude-predicates/source/jibb
1966−/* tok-547 %txt /tests/golden/types-prelude-predicates/tokens/txt
1967−/* tre-547 %txt /tests/golden/types-prelude-predicates/tree/txt
1968−/* typ-547 %txt /tests/golden/types-prelude-predicates/types/txt
1969−/* src-548 %jibb /tests/golden/types-prelude-sub/source/jibb
1970−/* tok-548 %txt /tests/golden/types-prelude-sub/tokens/txt
1971−/* tre-548 %txt /tests/golden/types-prelude-sub/tree/txt
1972−/* typ-548 %txt /tests/golden/types-prelude-sub/types/txt
1973−/* src-549 %jibb /tests/golden/types-prelude-sub-nested/source/jibb
1974−/* tok-549 %txt /tests/golden/types-prelude-sub-nested/tokens/txt
1975−/* tre-549 %txt /tests/golden/types-prelude-sub-nested/tree/txt
1976−/* typ-549 %txt /tests/golden/types-prelude-sub-nested/types/txt
1977−/* src-550 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1978−/* tok-550 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1979−/* tre-550 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1980−/* typ-550 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1981−/* src-551 %jibb /tests/golden/types-proj-explicit-context/source/jibb
1982−/* tok-551 %txt /tests/golden/types-proj-explicit-context/tokens/txt
1983−/* tre-551 %txt /tests/golden/types-proj-explicit-context/tree/txt
1984−/* typ-551 %txt /tests/golden/types-proj-explicit-context/types/txt
1985−/* src-552 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
1986−/* tok-552 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
1987−/* tre-552 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
1988−/* typ-552 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
1989−/* src-553 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
1990−/* tok-553 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
1991−/* tre-553 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
1992−/* mod-553-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
1993−/* typ-553 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
1994−/* mtre-553 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
1995−/* src-554 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
1996−/* tok-554 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
1997−/* tre-554 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
1998−/* mod-554-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
1999−/* typ-554 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2000−/* mtre-554 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2001−/* src-555 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2002−/* tok-555 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2003−/* tre-555 %txt /tests/golden/types-proj-reserved-local/tree/txt
2004−/* typ-555 %txt /tests/golden/types-proj-reserved-local/types/txt
2005−/* src-556 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2006−/* tok-556 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2007−/* tre-556 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2008−/* typ-556 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2009−/* src-557 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2010−/* tok-557 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2011−/* tre-557 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2012−/* typ-557 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2013−/* src-558 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2014−/* tok-558 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2015−/* tre-558 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2016−/* typ-558 %txt /tests/golden/types-proj-reserved-mold/types/txt
2017−/* src-559 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2018−/* tok-559 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2019−/* tre-559 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2020−/* typ-559 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2021−/* src-560 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2022−/* tok-560 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2023−/* tre-560 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2024−/* typ-560 %txt /tests/golden/types-proj-reserved-positive/types/txt
2025−/* src-561 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2026−/* tok-561 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2027−/* tre-561 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2028−/* typ-561 %txt /tests/golden/types-proj-reserved-sample/types/txt
2029−/* src-562 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2030−/* tok-562 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2031−/* tre-562 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2032−/* typ-562 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2033−/* src-563 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2034−/* tok-563 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2035−/* tre-563 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2036−/* typ-563 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2037−/* src-564 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2038−/* tok-564 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2039−/* tre-564 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2040−/* typ-564 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2041−/* src-565 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2042−/* tok-565 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2043−/* tre-565 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2044−/* typ-565 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2045−/* src-566 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2046−/* tok-566 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2047−/* tre-566 %txt /tests/golden/types-proj-reserved-value/tree/txt
2048−/* typ-566 %txt /tests/golden/types-proj-reserved-value/types/txt
2049−/* src-567 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2050−/* tok-567 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2051−/* tre-567 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2052−/* typ-567 %txt /tests/golden/types-proj-single-duplicate/types/txt
2053−/* src-568 %jibb /tests/golden/types-proj-single-field/source/jibb
2054−/* tok-568 %txt /tests/golden/types-proj-single-field/tokens/txt
2055−/* tre-568 %txt /tests/golden/types-proj-single-field/tree/txt
2056−/* typ-568 %txt /tests/golden/types-proj-single-field/types/txt
2057−/* src-569 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2058−/* tok-569 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2059−/* tre-569 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2060−/* typ-569 %txt /tests/golden/types-proj-single-sample-face/types/txt
2061−/* src-570 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2062−/* tok-570 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2063−/* tre-570 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2064−/* typ-570 %txt /tests/golden/types-proj-single-wrapped/types/txt
2065−/* src-571 %jibb /tests/golden/types-qath-faces/source/jibb
2066−/* tok-571 %txt /tests/golden/types-qath-faces/tokens/txt
2067−/* tre-571 %txt /tests/golden/types-qath-faces/tree/txt
2068−/* typ-571 %txt /tests/golden/types-qath-faces/types/txt
2069−/* src-572 %jibb /tests/golden/types-qath-holes/source/jibb
2070−/* tok-572 %txt /tests/golden/types-qath-holes/tokens/txt
2071−/* tre-572 %txt /tests/golden/types-qath-holes/tree/txt
2072−/* typ-572 %txt /tests/golden/types-qath-holes/types/txt
2073−/* src-573 %jibb /tests/golden/types-qath-module-identity/source/jibb
2074−/* tok-573 %txt /tests/golden/types-qath-module-identity/tokens/txt
2075−/* tre-573 %txt /tests/golden/types-qath-module-identity/tree/txt
2076−/* mod-573-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2077−/* mod-573-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2078−/* mod-573-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2079−/* typ-573 %txt /tests/golden/types-qath-module-identity/types/txt
2080−/* mtre-573 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2081−/* src-574 %jibb /tests/golden/types-qath-recursive/source/jibb
2082−/* tok-574 %txt /tests/golden/types-qath-recursive/tokens/txt
2083−/* tre-574 %txt /tests/golden/types-qath-recursive/tree/txt
2084−/* typ-574 %txt /tests/golden/types-qath-recursive/types/txt
2085−/* src-575 %jibb /tests/golden/types-record-bound-variable/source/jibb
2086−/* tok-575 %txt /tests/golden/types-record-bound-variable/tokens/txt
2087−/* tre-575 %txt /tests/golden/types-record-bound-variable/tree/txt
2088−/* typ-575 %txt /tests/golden/types-record-bound-variable/types/txt
2089−/* src-576 %jibb /tests/golden/types-record-cast-context/source/jibb
2090−/* tok-576 %txt /tests/golden/types-record-cast-context/tokens/txt
2091−/* tre-576 %txt /tests/golden/types-record-cast-context/tree/txt
2092−/* typ-576 %txt /tests/golden/types-record-cast-context/types/txt
2093−/* src-577 %jibb /tests/golden/types-record-change/source/jibb
2094−/* tok-577 %txt /tests/golden/types-record-change/tokens/txt
2095−/* tre-577 %txt /tests/golden/types-record-change/tree/txt
2096−/* typ-577 %txt /tests/golden/types-record-change/types/txt
2097−/* src-578 %jibb /tests/golden/types-record-change-generic/source/jibb
2098−/* tok-578 %txt /tests/golden/types-record-change-generic/tokens/txt
2099−/* tre-578 %txt /tests/golden/types-record-change-generic/tree/txt
2100−/* typ-578 %txt /tests/golden/types-record-change-generic/types/txt
2101−/* src-579 %jibb /tests/golden/types-record-faces/source/jibb
2102−/* tok-579 %txt /tests/golden/types-record-faces/tokens/txt
2103−/* tre-579 %txt /tests/golden/types-record-faces/tree/txt
2104−/* typ-579 %txt /tests/golden/types-record-faces/types/txt
2105−/* src-580 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2106−/* tok-580 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2107−/* tre-580 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2108−/* typ-580 %txt /tests/golden/types-record-field-edit-separate/types/txt
2109−/* src-581 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2110−/* tok-581 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2111−/* tre-581 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2112−/* typ-581 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2113−/* src-582 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2114−/* tok-582 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2115−/* tre-582 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2116−/* typ-582 %txt /tests/golden/types-record-field-expr-separate/types/txt
2117−/* src-583 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2118−/* tok-583 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2119−/* tre-583 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2120−/* mod-583-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2121−/* typ-583 %txt /tests/golden/types-record-field-module-reachable/types/txt
2122−/* mtre-583 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2123−/* src-584 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2124−/* tok-584 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2125−/* tre-584 %txt /tests/golden/types-record-field-module-unused/tree/txt
2126−/* mod-584-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2127−/* mod-584-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2128−/* typ-584 %txt /tests/golden/types-record-field-module-unused/types/txt
2129−/* mtre-584 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2130−/* src-585 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2131−/* tok-585 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2132−/* tre-585 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2133−/* typ-585 %txt /tests/golden/types-record-field-nested-mold/types/txt
2134−/* src-586 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2135−/* tok-586 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2136−/* tre-586 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2137−/* typ-586 %txt /tests/golden/types-record-field-outer-inner/types/txt
2138−/* src-587 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2139−/* tok-587 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2140−/* tre-587 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2141−/* typ-587 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2142−/* src-588 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2143−/* tok-588 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2144−/* tre-588 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2145−/* typ-588 %txt /tests/golden/types-record-field-separate-molds/types/txt
2146−/* src-589 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2147−/* tok-589 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2148−/* tre-589 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2149−/* typ-589 %txt /tests/golden/types-record-field-unused-mold/types/txt
2150−/* src-590 %jibb /tests/golden/types-record-import/source/jibb
2151−/* tok-590 %txt /tests/golden/types-record-import/tokens/txt
2152−/* tre-590 %txt /tests/golden/types-record-import/tree/txt
2153−/* mod-590-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2154−/* typ-590 %txt /tests/golden/types-record-import/types/txt
2155−/* mtre-590 %txt /tests/golden/types-record-import/module-trees/txt
2156−/* src-591 %jibb /tests/golden/types-record-local-scheme/source/jibb
2157−/* tok-591 %txt /tests/golden/types-record-local-scheme/tokens/txt
2158−/* tre-591 %txt /tests/golden/types-record-local-scheme/tree/txt
2159−/* typ-591 %txt /tests/golden/types-record-local-scheme/types/txt
2160−/* src-592 %jibb /tests/golden/types-record-nested/source/jibb
2161−/* tok-592 %txt /tests/golden/types-record-nested/tokens/txt
2162−/* tre-592 %txt /tests/golden/types-record-nested/tree/txt
2163−/* typ-592 %txt /tests/golden/types-record-nested/types/txt
2164−/* src-593 %jibb /tests/golden/types-record-to-tuple/source/jibb
2165−/* tok-593 %txt /tests/golden/types-record-to-tuple/tokens/txt
2166−/* tre-593 %txt /tests/golden/types-record-to-tuple/tree/txt
2167−/* typ-593 %txt /tests/golden/types-record-to-tuple/types/txt
2168−/* src-594 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2169−/* tok-594 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2170−/* tre-594 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2171−/* typ-594 %txt /tests/golden/types-recursion-scc-failures/types/txt
2172−/* src-595 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2173−/* tok-595 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2174−/* tre-595 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2175−/* typ-595 %txt /tests/golden/types-recursion-scc-groups/types/txt
2176−/* src-596 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2177−/* tok-596 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2178−/* tre-596 %txt /tests/golden/types-recursion-scc-import/tree/txt
2179−/* mod-596-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2180−/* typ-596 %txt /tests/golden/types-recursion-scc-import/types/txt
2181−/* mtre-596 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2182−/* src-597 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2183−/* tok-597 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2184−/* tre-597 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2185−/* mod-597-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2186−/* typ-597 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2187−/* mtre-597 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2188−/* src-598 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2189−/* tok-598 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2190−/* tre-598 %txt /tests/golden/types-recursion-scc-local/tree/txt
2191−/* typ-598 %txt /tests/golden/types-recursion-scc-local/types/txt
2192−/* src-599 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2193−/* tok-599 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2194−/* tre-599 %txt /tests/golden/types-recursion-scc-order/tree/txt
2195−/* typ-599 %txt /tests/golden/types-recursion-scc-order/types/txt
2196−/* src-600 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2197−/* tok-600 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2198−/* tre-600 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2199−/* typ-600 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2200−/* src-601 %jibb /tests/golden/types-recursive-branch/source/jibb
2201−/* tok-601 %txt /tests/golden/types-recursive-branch/tokens/txt
2202−/* tre-601 %txt /tests/golden/types-recursive-branch/tree/txt
2203−/* typ-601 %txt /tests/golden/types-recursive-branch/types/txt
2204−/* src-602 %jibb /tests/golden/types-recursive-gate/source/jibb
2205−/* tok-602 %txt /tests/golden/types-recursive-gate/tokens/txt
2206−/* tre-602 %txt /tests/golden/types-recursive-gate/tree/txt
2207−/* typ-602 %txt /tests/golden/types-recursive-gate/types/txt
2208−/* src-603 %jibb /tests/golden/types-recursive-sample/source/jibb
2209−/* tok-603 %txt /tests/golden/types-recursive-sample/tokens/txt
2210−/* tre-603 %txt /tests/golden/types-recursive-sample/tree/txt
2211−/* typ-603 %txt /tests/golden/types-recursive-sample/types/txt
2212−/* src-604 %jibb /tests/golden/types-request-normal/source/jibb
2213−/* tok-604 %txt /tests/golden/types-request-normal/tokens/txt
2214−/* tre-604 %txt /tests/golden/types-request-normal/tree/txt
2215−/* mod-604-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2216−/* typ-604 %txt /tests/golden/types-request-normal/types/txt
2217−/* mark-604-1 %txt /tests/golden/types-request-normal/mar/full/txt
2218−/* mtre-604 %txt /tests/golden/types-request-normal/module-trees/txt
2219−/* src-605 %jibb /tests/golden/types-scope-library-poke/source/jibb
2220−/* tok-605 %txt /tests/golden/types-scope-library-poke/tokens/txt
2221−/* tre-605 %txt /tests/golden/types-scope-library-poke/tree/txt
2222−/* typ-605 %txt /tests/golden/types-scope-library-poke/types/txt
2223−/* src-606 %jibb /tests/golden/types-scope-root-api/source/jibb
2224−/* tok-606 %txt /tests/golden/types-scope-root-api/tokens/txt
2225−/* tre-606 %txt /tests/golden/types-scope-root-api/tree/txt
2226−/* typ-606 %txt /tests/golden/types-scope-root-api/types/txt
2227−/* src-607 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2228−/* tok-607 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2229−/* tre-607 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2230−/* typ-607 %txt /tests/golden/types-scope-store-duplicate/types/txt
2231−/* src-608 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2232−/* tok-608 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2233−/* tre-608 %txt /tests/golden/types-scope-store-shadow/tree/txt
2234−/* typ-608 %txt /tests/golden/types-scope-store-shadow/types/txt
2235−/* src-609 %jibb /tests/golden/types-single-case-pattern/source/jibb
2236−/* tok-609 %txt /tests/golden/types-single-case-pattern/tokens/txt
2237−/* tre-609 %txt /tests/golden/types-single-case-pattern/tree/txt
2238−/* typ-609 %txt /tests/golden/types-single-case-pattern/types/txt
2239−/* src-610 %jibb /tests/golden/types-string-interpolation/source/jibb
2240−/* tok-610 %txt /tests/golden/types-string-interpolation/tokens/txt
2241−/* tre-610 %txt /tests/golden/types-string-interpolation/tree/txt
2242−/* typ-610 %txt /tests/golden/types-string-interpolation/types/txt
2243−/* src-611 %jibb /tests/golden/types-tuple-context/source/jibb
2244−/* tok-611 %txt /tests/golden/types-tuple-context/tokens/txt
2245−/* tre-611 %txt /tests/golden/types-tuple-context/tree/txt
2246−/* typ-611 %txt /tests/golden/types-tuple-context/types/txt
2247−/* src-612 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2248−/* tok-612 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2249−/* tre-612 %txt /tests/golden/types-tuple-context-nested/tree/txt
2250−/* typ-612 %txt /tests/golden/types-tuple-context-nested/types/txt
2251−/* src-613 %jibb /tests/golden/types-union-alias/source/jibb
2252−/* tok-613 %txt /tests/golden/types-union-alias/tokens/txt
2253−/* tre-613 %txt /tests/golden/types-union-alias/tree/txt
2254−/* typ-613 %txt /tests/golden/types-union-alias/types/txt
2255−/* src-614 %jibb /tests/golden/types-union-branch-context/source/jibb
2256−/* tok-614 %txt /tests/golden/types-union-branch-context/tokens/txt
2257−/* tre-614 %txt /tests/golden/types-union-branch-context/tree/txt
2258−/* typ-614 %txt /tests/golden/types-union-branch-context/types/txt
2259−/* src-615 %jibb /tests/golden/types-union-branch-pending/source/jibb
2260−/* tok-615 %txt /tests/golden/types-union-branch-pending/tokens/txt
2261−/* tre-615 %txt /tests/golden/types-union-branch-pending/tree/txt
2262−/* typ-615 %txt /tests/golden/types-union-branch-pending/types/txt
2263−/* src-616 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2264−/* tok-616 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2265−/* tre-616 %txt /tests/golden/types-union-constructor-shape/tree/txt
2266−/* typ-616 %txt /tests/golden/types-union-constructor-shape/types/txt
2267−/* src-617 %jibb /tests/golden/types-union-context-flow/source/jibb
2268−/* tok-617 %txt /tests/golden/types-union-context-flow/tokens/txt
2269−/* tre-617 %txt /tests/golden/types-union-context-flow/tree/txt
2270−/* typ-617 %txt /tests/golden/types-union-context-flow/types/txt
2271−/* src-618 %jibb /tests/golden/types-union-finite/source/jibb
2272−/* tok-618 %txt /tests/golden/types-union-finite/tokens/txt
2273−/* tre-618 %txt /tests/golden/types-union-finite/tree/txt
2274−/* typ-618 %txt /tests/golden/types-union-finite/types/txt
2275−/* src-619 %jibb /tests/golden/types-union-finite-context/source/jibb
2276−/* tok-619 %txt /tests/golden/types-union-finite-context/tokens/txt
2277−/* tre-619 %txt /tests/golden/types-union-finite-context/tree/txt
2278−/* typ-619 %txt /tests/golden/types-union-finite-context/types/txt
2279−/* src-620 %jibb /tests/golden/types-union-finite-generic/source/jibb
2280−/* tok-620 %txt /tests/golden/types-union-finite-generic/tokens/txt
2281−/* tre-620 %txt /tests/golden/types-union-finite-generic/tree/txt
2282−/* typ-620 %txt /tests/golden/types-union-finite-generic/types/txt
2283−/* src-621 %jibb /tests/golden/types-union-finite-limit/source/jibb
2284−/* tok-621 %txt /tests/golden/types-union-finite-limit/tokens/txt
2285−/* tre-621 %txt /tests/golden/types-union-finite-limit/tree/txt
2286−/* typ-621 %txt /tests/golden/types-union-finite-limit/types/txt
2287−/* src-622 %jibb /tests/golden/types-union-import/source/jibb
2288−/* tok-622 %txt /tests/golden/types-union-import/tokens/txt
2289−/* tre-622 %txt /tests/golden/types-union-import/tree/txt
2290−/* mod-622-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2291−/* typ-622 %txt /tests/golden/types-union-import/types/txt
2292−/* mtre-622 %txt /tests/golden/types-union-import/module-trees/txt
2293−/* src-623 %jibb /tests/golden/types-union-local-pending/source/jibb
2294−/* tok-623 %txt /tests/golden/types-union-local-pending/tokens/txt
2295−/* tre-623 %txt /tests/golden/types-union-local-pending/tree/txt
2296−/* typ-623 %txt /tests/golden/types-union-local-pending/types/txt
2297−/* src-624 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2298−/* tok-624 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2299−/* tre-624 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2300−/* typ-624 %txt /tests/golden/types-union-nonwing-subject/types/txt
2301−/* src-625 %jibb /tests/golden/types-union-overlap/source/jibb
2302−/* tok-625 %txt /tests/golden/types-union-overlap/tokens/txt
2303−/* tre-625 %txt /tests/golden/types-union-overlap/tree/txt
2304−/* typ-625 %txt /tests/golden/types-union-overlap/types/txt
2305−/* src-626 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2306−/* tok-626 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2307−/* tre-626 %txt /tests/golden/types-union-overlap-nested/tree/txt
2308−/* typ-626 %txt /tests/golden/types-union-overlap-nested/types/txt
2309−/* src-627 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2310−/* tok-627 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2311−/* tre-627 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2312−/* typ-627 %txt /tests/golden/types-union-pattern-result-context/types/txt
2313−/* src-628 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2314−/* tok-628 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2315−/* tre-628 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2316−/* typ-628 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2317−/* src-629 %jibb /tests/golden/types-union-patterns/source/jibb
2318−/* tok-629 %txt /tests/golden/types-union-patterns/tokens/txt
2319−/* tre-629 %txt /tests/golden/types-union-patterns/tree/txt
2320−/* typ-629 %txt /tests/golden/types-union-patterns/types/txt
2321−/* src-630 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2322−/* tok-630 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2323−/* tre-630 %txt /tests/golden/types-union-patterns-generic/tree/txt
2324−/* typ-630 %txt /tests/golden/types-union-patterns-generic/types/txt
2325−/* src-631 %jibb /tests/golden/types-union-patterns-import/source/jibb
2326−/* tok-631 %txt /tests/golden/types-union-patterns-import/tokens/txt
2327−/* tre-631 %txt /tests/golden/types-union-patterns-import/tree/txt
2328−/* mod-631-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2329−/* typ-631 %txt /tests/golden/types-union-patterns-import/types/txt
2330−/* mtre-631 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2331−/* src-632 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2332−/* tok-632 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2333−/* tre-632 %txt /tests/golden/types-union-phantom-generic/tree/txt
2334−/* typ-632 %txt /tests/golden/types-union-phantom-generic/types/txt
2335−/* src-633 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2336−/* tok-633 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2337−/* tre-633 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2338−/* mod-633-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2339−/* mod-633-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2340−/* typ-633 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2341−/* mtre-633 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2342−/* src-634 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2343−/* tok-634 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2344−/* tre-634 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2345−/* mod-634-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2346−/* typ-634 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2347−/* mtre-634 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2348−/* src-635 %jibb /tests/golden/types-union-print-distinct/source/jibb
2349−/* tok-635 %txt /tests/golden/types-union-print-distinct/tokens/txt
2350−/* tre-635 %txt /tests/golden/types-union-print-distinct/tree/txt
2351−/* mod-635-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2352−/* mod-635-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2353−/* mod-635-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2354−/* typ-635 %txt /tests/golden/types-union-print-distinct/types/txt
2355−/* mtre-635 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2356−/* src-636 %jibb /tests/golden/types-union-print-escape/source/jibb
2357−/* tok-636 %txt /tests/golden/types-union-print-escape/tokens/txt
2358−/* tre-636 %txt /tests/golden/types-union-print-escape/tree/txt
2359−/* typ-636 %txt /tests/golden/types-union-print-escape/types/txt
2360−/* src-637 %jibb /tests/golden/types-union-print-local/source/jibb
2361−/* tok-637 %txt /tests/golden/types-union-print-local/tokens/txt
2362−/* tre-637 %txt /tests/golden/types-union-print-local/tree/txt
2363−/* typ-637 %txt /tests/golden/types-union-print-local/types/txt
2364−/* src-638 %jibb /tests/golden/types-union-print-nested/source/jibb
2365−/* tok-638 %txt /tests/golden/types-union-print-nested/tokens/txt
2366−/* tre-638 %txt /tests/golden/types-union-print-nested/tree/txt
2367−/* typ-638 %txt /tests/golden/types-union-print-nested/types/txt
2368−/* src-639 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2369−/* tok-639 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2370−/* tre-639 %txt /tests/golden/types-union-print-same-origin/tree/txt
2371−/* mod-639-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2372−/* typ-639 %txt /tests/golden/types-union-print-same-origin/types/txt
2373−/* mtre-639 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2374−/* src-640 %jibb /tests/golden/types-union-print-transitive/source/jibb
2375−/* tok-640 %txt /tests/golden/types-union-print-transitive/tokens/txt
2376−/* tre-640 %txt /tests/golden/types-union-print-transitive/tree/txt
2377−/* mod-640-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2378−/* mod-640-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2379−/* typ-640 %txt /tests/golden/types-union-print-transitive/types/txt
2380−/* mtre-640 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2381−/* src-641 %jibb /tests/golden/types-union-singleton/source/jibb
2382−/* tok-641 %txt /tests/golden/types-union-singleton/tokens/txt
2383−/* tre-641 %txt /tests/golden/types-union-singleton/tree/txt
2384−/* typ-641 %txt /tests/golden/types-union-singleton/types/txt
2385−/* src-642 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2386−/* tok-642 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2387−/* tre-642 %txt /tests/golden/types-union-tag-atoms/tree/txt
2388−/* typ-642 %txt /tests/golden/types-union-tag-atoms/types/txt
2389−/* src-643 %jibb /tests/golden/types-union-tags/source/jibb
2390−/* tok-643 %txt /tests/golden/types-union-tags/tokens/txt
2391−/* tre-643 %txt /tests/golden/types-union-tags/tree/txt
2392−/* typ-643 %txt /tests/golden/types-union-tags/types/txt
2393−/* src-644 %jibb /tests/golden/types-union-unresolved/source/jibb
2394−/* tok-644 %txt /tests/golden/types-union-unresolved/tokens/txt
2395−/* tre-644 %txt /tests/golden/types-union-unresolved/tree/txt
2396−/* typ-644 %txt /tests/golden/types-union-unresolved/types/txt
2397−/* src-645 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2398−/* tok-645 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2399−/* tre-645 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2400−/* typ-645 %txt /tests/golden/types-union-unresolved-flow/types/txt
2401−/* src-646 %jibb /tests/golden/types-unit-construction/source/jibb
2402−/* tok-646 %txt /tests/golden/types-unit-construction/tokens/txt
2403−/* tre-646 %txt /tests/golden/types-unit-construction/tree/txt
2404−/* typ-646 %txt /tests/golden/types-unit-construction/types/txt
2405−/* src-647 %jibb /tests/golden/types-unit-context/source/jibb
2406−/* tok-647 %txt /tests/golden/types-unit-context/tokens/txt
2407−/* tre-647 %txt /tests/golden/types-unit-context/tree/txt
2408−/* typ-647 %txt /tests/golden/types-unit-context/types/txt
2409−/* src-648 %jibb /tests/golden/types-unit-patterns/source/jibb
2410−/* tok-648 %txt /tests/golden/types-unit-patterns/tokens/txt
2411−/* tre-648 %txt /tests/golden/types-unit-patterns/tree/txt
2412−/* typ-648 %txt /tests/golden/types-unit-patterns/types/txt
2413−/* src-649 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2414−/* tok-649 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2415−/* tre-649 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2416−/* typ-649 %txt /tests/golden/types-value-cycle-shadow/types/txt
2417−/* src-650 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2418−/* tok-650 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2419−/* tre-650 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2420−/* typ-650 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2421−/* src-651 %jibb /tests/golden/types-value-cycles/source/jibb
2422−/* tok-651 %txt /tests/golden/types-value-cycles/tokens/txt
2423−/* tre-651 %txt /tests/golden/types-value-cycles/tree/txt
2424−/* typ-651 %txt /tests/golden/types-value-cycles/types/txt
1365+/* src-416 %jibb /tests/golden/types-cell-branch-context/source/jibb
1366+/* tok-416 %txt /tests/golden/types-cell-branch-context/tokens/txt
1367+/* tre-416 %txt /tests/golden/types-cell-branch-context/tree/txt
1368+/* typ-416 %txt /tests/golden/types-cell-branch-context/types/txt
1369+/* src-417 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1370+/* tok-417 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1371+/* tre-417 %txt /tests/golden/types-cell-pattern-many/tree/txt
1372+/* typ-417 %txt /tests/golden/types-cell-pattern-many/types/txt
1373+/* src-418 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1374+/* tok-418 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1375+/* tre-418 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1376+/* typ-418 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1377+/* src-419 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1378+/* tok-419 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1379+/* tre-419 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1380+/* typ-419 %txt /tests/golden/types-cell-pattern-tail/types/txt
1381+/* src-420 %jibb /tests/golden/types-constructor-context/source/jibb
1382+/* tok-420 %txt /tests/golden/types-constructor-context/tokens/txt
1383+/* tre-420 %txt /tests/golden/types-constructor-context/tree/txt
1384+/* typ-420 %txt /tests/golden/types-constructor-context/types/txt
1385+/* src-421 %jibb /tests/golden/types-deferred-call-context/source/jibb
1386+/* tok-421 %txt /tests/golden/types-deferred-call-context/tokens/txt
1387+/* tre-421 %txt /tests/golden/types-deferred-call-context/tree/txt
1388+/* typ-421 %txt /tests/golden/types-deferred-call-context/types/txt
1389+/* src-422 %jibb /tests/golden/types-equal-head-disjoint/source/jibb
1390+/* tok-422 %txt /tests/golden/types-equal-head-disjoint/tokens/txt
1391+/* tre-422 %txt /tests/golden/types-equal-head-disjoint/tree/txt
1392+/* typ-422 %txt /tests/golden/types-equal-head-disjoint/types/txt
1393+/* src-423 %jibb /tests/golden/types-flag-branch-context/source/jibb
1394+/* tok-423 %txt /tests/golden/types-flag-branch-context/tokens/txt
1395+/* tre-423 %txt /tests/golden/types-flag-branch-context/tree/txt
1396+/* typ-423 %txt /tests/golden/types-flag-branch-context/types/txt
1397+/* src-424 %jibb /tests/golden/types-generic-arity/source/jibb
1398+/* tok-424 %txt /tests/golden/types-generic-arity/tokens/txt
1399+/* tre-424 %txt /tests/golden/types-generic-arity/tree/txt
1400+/* typ-424 %txt /tests/golden/types-generic-arity/types/txt
1401+/* src-425 %jibb /tests/golden/types-generic-face-inference/source/jibb
1402+/* tok-425 %txt /tests/golden/types-generic-face-inference/tokens/txt
1403+/* tre-425 %txt /tests/golden/types-generic-face-inference/tree/txt
1404+/* typ-425 %txt /tests/golden/types-generic-face-inference/types/txt
1405+/* src-426 %jibb /tests/golden/types-generic-gates/source/jibb
1406+/* tok-426 %txt /tests/golden/types-generic-gates/tokens/txt
1407+/* tre-426 %txt /tests/golden/types-generic-gates/tree/txt
1408+/* typ-426 %txt /tests/golden/types-generic-gates/types/txt
1409+/* src-427 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1410+/* tok-427 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1411+/* tre-427 %txt /tests/golden/types-generic-import-reverse/tree/txt
1412+/* mod-427-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1413+/* typ-427 %txt /tests/golden/types-generic-import-reverse/types/txt
1414+/* mtre-427 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1415+/* src-428 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1416+/* tok-428 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1417+/* tre-428 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1418+/* typ-428 %txt /tests/golden/types-generic-lexical-alias/types/txt
1419+/* src-429 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1420+/* tok-429 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1421+/* tre-429 %txt /tests/golden/types-generic-local-parameter/tree/txt
1422+/* typ-429 %txt /tests/golden/types-generic-local-parameter/types/txt
1423+/* src-430 %jibb /tests/golden/types-generic-local-scope/source/jibb
1424+/* tok-430 %txt /tests/golden/types-generic-local-scope/tokens/txt
1425+/* tre-430 %txt /tests/golden/types-generic-local-scope/tree/txt
1426+/* typ-430 %txt /tests/golden/types-generic-local-scope/types/txt
1427+/* src-431 %jibb /tests/golden/types-generic-module/source/jibb
1428+/* tok-431 %txt /tests/golden/types-generic-module/tokens/txt
1429+/* tre-431 %txt /tests/golden/types-generic-module/tree/txt
1430+/* mod-431-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1431+/* typ-431 %txt /tests/golden/types-generic-module/types/txt
1432+/* mtre-431 %txt /tests/golden/types-generic-module/module-trees/txt
1433+/* src-432 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1434+/* tok-432 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1435+/* tre-432 %txt /tests/golden/types-generic-nested-scope/tree/txt
1436+/* typ-432 %txt /tests/golden/types-generic-nested-scope/types/txt
1437+/* src-433 %jibb /tests/golden/types-generic-parameters/source/jibb
1438+/* tok-433 %txt /tests/golden/types-generic-parameters/tokens/txt
1439+/* tre-433 %txt /tests/golden/types-generic-parameters/tree/txt
1440+/* typ-433 %txt /tests/golden/types-generic-parameters/types/txt
1441+/* src-434 %jibb /tests/golden/types-generic-record/source/jibb
1442+/* tok-434 %txt /tests/golden/types-generic-record/tokens/txt
1443+/* tre-434 %txt /tests/golden/types-generic-record/tree/txt
1444+/* typ-434 %txt /tests/golden/types-generic-record/types/txt
1445+/* src-435 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1446+/* tok-435 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1447+/* tre-435 %txt /tests/golden/types-generic-recursive-union/tree/txt
1448+/* typ-435 %txt /tests/golden/types-generic-recursive-union/types/txt
1449+/* src-436 %jibb /tests/golden/types-generic-repeated/source/jibb
1450+/* tok-436 %txt /tests/golden/types-generic-repeated/tokens/txt
1451+/* tre-436 %txt /tests/golden/types-generic-repeated/tree/txt
1452+/* typ-436 %txt /tests/golden/types-generic-repeated/types/txt
1453+/* src-437 %jibb /tests/golden/types-generic-result-context/source/jibb
1454+/* tok-437 %txt /tests/golden/types-generic-result-context/tokens/txt
1455+/* tre-437 %txt /tests/golden/types-generic-result-context/tree/txt
1456+/* typ-437 %txt /tests/golden/types-generic-result-context/types/txt
1457+/* src-438 %jibb /tests/golden/types-generic-union-alias/source/jibb
1458+/* tok-438 %txt /tests/golden/types-generic-union-alias/tokens/txt
1459+/* tre-438 %txt /tests/golden/types-generic-union-alias/tree/txt
1460+/* typ-438 %txt /tests/golden/types-generic-union-alias/types/txt
1461+/* src-439 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1462+/* tok-439 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1463+/* tre-439 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1464+/* mod-439-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1465+/* typ-439 %txt /tests/golden/types-generic-union-alias-face/types/txt
1466+/* mtre-439 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1467+/* src-440 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1468+/* tok-440 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1469+/* tre-440 %txt /tests/golden/types-generic-union-capitals/tree/txt
1470+/* typ-440 %txt /tests/golden/types-generic-union-capitals/types/txt
1471+/* src-441 %jibb /tests/golden/types-generic-union-errors/source/jibb
1472+/* tok-441 %txt /tests/golden/types-generic-union-errors/tokens/txt
1473+/* tre-441 %txt /tests/golden/types-generic-union-errors/tree/txt
1474+/* typ-441 %txt /tests/golden/types-generic-union-errors/types/txt
1475+/* src-442 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1476+/* tok-442 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1477+/* tre-442 %txt /tests/golden/types-generic-union-escaping/tree/txt
1478+/* mod-442-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1479+/* mod-442-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1480+/* typ-442 %txt /tests/golden/types-generic-union-escaping/types/txt
1481+/* mtre-442 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1482+/* src-443 %jibb /tests/golden/types-generic-union-import/source/jibb
1483+/* tok-443 %txt /tests/golden/types-generic-union-import/tokens/txt
1484+/* tre-443 %txt /tests/golden/types-generic-union-import/tree/txt
1485+/* mod-443-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1486+/* mod-443-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1487+/* typ-443 %txt /tests/golden/types-generic-union-import/types/txt
1488+/* mtre-443 %txt /tests/golden/types-generic-union-import/module-trees/txt
1489+/* src-444 %jibb /tests/golden/types-generic-union-local/source/jibb
1490+/* tok-444 %txt /tests/golden/types-generic-union-local/tokens/txt
1491+/* tre-444 %txt /tests/golden/types-generic-union-local/tree/txt
1492+/* typ-444 %txt /tests/golden/types-generic-union-local/types/txt
1493+/* src-445 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1494+/* tok-445 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1495+/* tre-445 %txt /tests/golden/types-generic-union-transitive/tree/txt
1496+/* mod-445-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1497+/* mod-445-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1498+/* typ-445 %txt /tests/golden/types-generic-union-transitive/types/txt
1499+/* mtre-445 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1500+/* src-446 %jibb /tests/golden/types-hole-concrete/source/jibb
1501+/* tok-446 %txt /tests/golden/types-hole-concrete/tokens/txt
1502+/* tre-446 %txt /tests/golden/types-hole-concrete/tree/txt
1503+/* typ-446 %txt /tests/golden/types-hole-concrete/types/txt
1504+/* src-447 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1505+/* tok-447 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1506+/* tre-447 %txt /tests/golden/types-hole-generic-mold/tree/txt
1507+/* typ-447 %txt /tests/golden/types-hole-generic-mold/types/txt
1508+/* src-448 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1509+/* tok-448 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1510+/* tre-448 %txt /tests/golden/types-hole-local-boundary/tree/txt
1511+/* typ-448 %txt /tests/golden/types-hole-local-boundary/types/txt
1512+/* src-449 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1513+/* tok-449 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1514+/* tre-449 %txt /tests/golden/types-hole-module-boundary/tree/txt
1515+/* mod-449-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1516+/* typ-449 %txt /tests/golden/types-hole-module-boundary/types/txt
1517+/* mtre-449 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1518+/* src-450 %jibb /tests/golden/types-hole-named-complex/source/jibb
1519+/* tok-450 %txt /tests/golden/types-hole-named-complex/tokens/txt
1520+/* tre-450 %txt /tests/golden/types-hole-named-complex/tree/txt
1521+/* typ-450 %txt /tests/golden/types-hole-named-complex/types/txt
1522+/* src-451 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1523+/* tok-451 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1524+/* tre-451 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1525+/* typ-451 %txt /tests/golden/types-hole-numeric-capture/types/txt
1526+/* src-452 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1527+/* tok-452 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1528+/* tre-452 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1529+/* typ-452 %txt /tests/golden/types-hole-unbound-mold/types/txt
1530+/* src-453 %jibb /tests/golden/types-hole-unsupported/source/jibb
1531+/* tok-453 %txt /tests/golden/types-hole-unsupported/tokens/txt
1532+/* tre-453 %txt /tests/golden/types-hole-unsupported/tree/txt
1533+/* typ-453 %txt /tests/golden/types-hole-unsupported/types/txt
1534+/* src-454 %jibb /tests/golden/types-hole-user-generic/source/jibb
1535+/* tok-454 %txt /tests/golden/types-hole-user-generic/tokens/txt
1536+/* tre-454 %txt /tests/golden/types-hole-user-generic/tree/txt
1537+/* typ-454 %txt /tests/golden/types-hole-user-generic/types/txt
1538+/* src-455 %jibb /tests/golden/types-hole-user-named/source/jibb
1539+/* tok-455 %txt /tests/golden/types-hole-user-named/tokens/txt
1540+/* tre-455 %txt /tests/golden/types-hole-user-named/tree/txt
1541+/* typ-455 %txt /tests/golden/types-hole-user-named/types/txt
1542+/* src-456 %jibb /tests/golden/types-hole-user-value/source/jibb
1543+/* tok-456 %txt /tests/golden/types-hole-user-value/tokens/txt
1544+/* tre-456 %txt /tests/golden/types-hole-user-value/tree/txt
1545+/* typ-456 %txt /tests/golden/types-hole-user-value/types/txt
1546+/* src-457 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1547+/* tok-457 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1548+/* tre-457 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1549+/* typ-457 %txt /tests/golden/types-import-duplicate-mark/types/txt
1550+/* mark-457-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1551+/* src-458 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1552+/* tok-458 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1553+/* tre-458 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1554+/* typ-458 %txt /tests/golden/types-import-duplicate-sur/types/txt
1555+/* imp-458-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1556+/* imp-458-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1557+/* imp-458-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1558+/* src-459 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1559+/* tok-459 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1560+/* tre-459 %txt /tests/golden/types-import-hoon-flags/tree/txt
1561+/* typ-459 %txt /tests/golden/types-import-hoon-flags/types/txt
1562+/* imp-459-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1563+/* imp-459-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1564+/* imp-459-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1565+/* imp-459-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1566+/* src-460 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1567+/* tok-460 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1568+/* tre-460 %txt /tests/golden/types-import-hoon-noun/tree/txt
1569+/* typ-460 %txt /tests/golden/types-import-hoon-noun/types/txt
1570+/* imp-460-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1571+/* imp-460-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1572+/* imp-460-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1573+/* imp-460-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1574+/* src-461 %jibb /tests/golden/types-import-mark/source/jibb
1575+/* tok-461 %txt /tests/golden/types-import-mark/tokens/txt
1576+/* tre-461 %txt /tests/golden/types-import-mark/tree/txt
1577+/* typ-461 %txt /tests/golden/types-import-mark/types/txt
1578+/* imp-461-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1579+/* mark-461-1 %txt /tests/golden/types-import-mark/mar/label/txt
1580+/* src-462 %jibb /tests/golden/types-import-mark-record/source/jibb
1581+/* tok-462 %txt /tests/golden/types-import-mark-record/tokens/txt
1582+/* tre-462 %txt /tests/golden/types-import-mark-record/tree/txt
1583+/* typ-462 %txt /tests/golden/types-import-mark-record/types/txt
1584+/* mark-462-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1585+/* mark-462-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1586+/* src-463 %jibb /tests/golden/types-import-missing-mold/source/jibb
1587+/* tok-463 %txt /tests/golden/types-import-missing-mold/tokens/txt
1588+/* tre-463 %txt /tests/golden/types-import-missing-mold/tree/txt
1589+/* typ-463 %txt /tests/golden/types-import-missing-mold/types/txt
1590+/* imp-463-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1591+/* src-464 %jibb /tests/golden/types-import-sur/source/jibb
1592+/* tok-464 %txt /tests/golden/types-import-sur/tokens/txt
1593+/* tre-464 %txt /tests/golden/types-import-sur/tree/txt
1594+/* typ-464 %txt /tests/golden/types-import-sur/types/txt
1595+/* imp-464-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1596+/* imp-464-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1597+/* src-465 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1598+/* tok-465 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1599+/* tre-465 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1600+/* mod-465-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1601+/* typ-465 %txt /tests/golden/types-import-sur-record-graph/types/txt
1602+/* imp-465-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1603+/* mtre-465 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1604+/* src-466 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1605+/* tok-466 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1606+/* tre-466 %txt /tests/golden/types-import-tlon-notes/tree/txt
1607+/* typ-466 %txt /tests/golden/types-import-tlon-notes/types/txt
1608+/* imp-466-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1609+/* imp-466-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1610+/* imp-466-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1611+/* imp-466-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1612+/* imp-466-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1613+/* imp-466-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1614+/* imp-466-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1615+/* src-467 %jibb /tests/golden/types-list-branch/source/jibb
1616+/* tok-467 %txt /tests/golden/types-list-branch/tokens/txt
1617+/* tre-467 %txt /tests/golden/types-list-branch/tree/txt
1618+/* typ-467 %txt /tests/golden/types-list-branch/types/txt
1619+/* src-468 %jibb /tests/golden/types-list-cons/source/jibb
1620+/* tok-468 %txt /tests/golden/types-list-cons/tokens/txt
1621+/* tre-468 %txt /tests/golden/types-list-cons/tree/txt
1622+/* typ-468 %txt /tests/golden/types-list-cons/types/txt
1623+/* src-469 %jibb /tests/golden/types-list-context/source/jibb
1624+/* tok-469 %txt /tests/golden/types-list-context/tokens/txt
1625+/* tre-469 %txt /tests/golden/types-list-context/tree/txt
1626+/* typ-469 %txt /tests/golden/types-list-context/types/txt
1627+/* src-470 %jibb /tests/golden/types-list-imported/source/jibb
1628+/* tok-470 %txt /tests/golden/types-list-imported/tokens/txt
1629+/* tre-470 %txt /tests/golden/types-list-imported/tree/txt
1630+/* typ-470 %txt /tests/golden/types-list-imported/types/txt
1631+/* imp-470-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1632+/* imp-470-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1633+/* src-471 %jibb /tests/golden/types-list-open/source/jibb
1634+/* tok-471 %txt /tests/golden/types-list-open/tokens/txt
1635+/* tre-471 %txt /tests/golden/types-list-open/tree/txt
1636+/* typ-471 %txt /tests/golden/types-list-open/types/txt
1637+/* src-472 %jibb /tests/golden/types-list-open-constraints/source/jibb
1638+/* tok-472 %txt /tests/golden/types-list-open-constraints/tokens/txt
1639+/* tre-472 %txt /tests/golden/types-list-open-constraints/tree/txt
1640+/* typ-472 %txt /tests/golden/types-list-open-constraints/types/txt
1641+/* src-473 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1642+/* tok-473 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1643+/* tre-473 %txt /tests/golden/types-list-pattern-imported/tree/txt
1644+/* typ-473 %txt /tests/golden/types-list-pattern-imported/types/txt
1645+/* imp-473-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1646+/* imp-473-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1647+/* src-474 %jibb /tests/golden/types-list-patterns/source/jibb
1648+/* tok-474 %txt /tests/golden/types-list-patterns/tokens/txt
1649+/* tre-474 %txt /tests/golden/types-list-patterns/tree/txt
1650+/* typ-474 %txt /tests/golden/types-list-patterns/types/txt
1651+/* src-475 %jibb /tests/golden/types-list-zero-fit/source/jibb
1652+/* tok-475 %txt /tests/golden/types-list-zero-fit/tokens/txt
1653+/* tre-475 %txt /tests/golden/types-list-zero-fit/tree/txt
1654+/* typ-475 %txt /tests/golden/types-list-zero-fit/types/txt
1655+/* src-476 %jibb /tests/golden/types-literal-constructor-nouns/source/jibb
1656+/* tok-476 %txt /tests/golden/types-literal-constructor-nouns/tokens/txt
1657+/* tre-476 %txt /tests/golden/types-literal-constructor-nouns/tree/txt
1658+/* typ-476 %txt /tests/golden/types-literal-constructor-nouns/types/txt
1659+/* src-477 %jibb /tests/golden/types-local-capitals/source/jibb
1660+/* tok-477 %txt /tests/golden/types-local-capitals/tokens/txt
1661+/* tre-477 %txt /tests/golden/types-local-capitals/tree/txt
1662+/* typ-477 %txt /tests/golden/types-local-capitals/types/txt
1663+/* src-478 %jibb /tests/golden/types-local-recursive/source/jibb
1664+/* tok-478 %txt /tests/golden/types-local-recursive/tokens/txt
1665+/* tre-478 %txt /tests/golden/types-local-recursive/tree/txt
1666+/* typ-478 %txt /tests/golden/types-local-recursive/types/txt
1667+/* src-479 %jibb /tests/golden/types-local-scc/source/jibb
1668+/* tok-479 %txt /tests/golden/types-local-scc/tokens/txt
1669+/* tre-479 %txt /tests/golden/types-local-scc/tree/txt
1670+/* typ-479 %txt /tests/golden/types-local-scc/types/txt
1671+/* src-480 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1672+/* tok-480 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1673+/* tre-480 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1674+/* typ-480 %txt /tests/golden/types-local-scc-adversarial/types/txt
1675+/* src-481 %jibb /tests/golden/types-loobean-singleton-source/source/jibb
1676+/* tok-481 %txt /tests/golden/types-loobean-singleton-source/tokens/txt
1677+/* tre-481 %txt /tests/golden/types-loobean-singleton-source/tree/txt
1678+/* typ-481 %txt /tests/golden/types-loobean-singleton-source/types/txt
1679+/* src-482 %jibb /tests/golden/types-loobean-union-context/source/jibb
1680+/* tok-482 %txt /tests/golden/types-loobean-union-context/tokens/txt
1681+/* tre-482 %txt /tests/golden/types-loobean-union-context/tree/txt
1682+/* typ-482 %txt /tests/golden/types-loobean-union-context/types/txt
1683+/* src-483 %jibb /tests/golden/types-missing-tag-context/source/jibb
1684+/* tok-483 %txt /tests/golden/types-missing-tag-context/tokens/txt
1685+/* tre-483 %txt /tests/golden/types-missing-tag-context/tree/txt
1686+/* typ-483 %txt /tests/golden/types-missing-tag-context/types/txt
1687+/* src-484 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1688+/* tok-484 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1689+/* tre-484 %txt /tests/golden/types-missing-tag-imported/tree/txt
1690+/* typ-484 %txt /tests/golden/types-missing-tag-imported/types/txt
1691+/* imp-484-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1692+/* imp-484-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1693+/* src-485 %jibb /tests/golden/types-missing-tag-named/source/jibb
1694+/* tok-485 %txt /tests/golden/types-missing-tag-named/tokens/txt
1695+/* tre-485 %txt /tests/golden/types-missing-tag-named/tree/txt
1696+/* typ-485 %txt /tests/golden/types-missing-tag-named/types/txt
1697+/* src-486 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1698+/* tok-486 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1699+/* tre-486 %txt /tests/golden/types-module-field-duplicate/tree/txt
1700+/* mod-486-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1701+/* typ-486 %txt /tests/golden/types-module-field-duplicate/types/txt
1702+/* mtre-486 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1703+/* src-487 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1704+/* tok-487 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1705+/* tre-487 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1706+/* mod-487-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1707+/* typ-487 %txt /tests/golden/types-module-field-nonrecord/types/txt
1708+/* mtre-487 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1709+/* src-488 %jibb /tests/golden/types-module-field-path/source/jibb
1710+/* tok-488 %txt /tests/golden/types-module-field-path/tokens/txt
1711+/* tre-488 %txt /tests/golden/types-module-field-path/tree/txt
1712+/* mod-488-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1713+/* typ-488 %txt /tests/golden/types-module-field-path/types/txt
1714+/* mtre-488 %txt /tests/golden/types-module-field-path/module-trees/txt
1715+/* src-489 %jibb /tests/golden/types-module-field-shadow/source/jibb
1716+/* tok-489 %txt /tests/golden/types-module-field-shadow/tokens/txt
1717+/* tre-489 %txt /tests/golden/types-module-field-shadow/tree/txt
1718+/* mod-489-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1719+/* typ-489 %txt /tests/golden/types-module-field-shadow/types/txt
1720+/* mtre-489 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1721+/* src-490 %jibb /tests/golden/types-module-fixtures/source/jibb
1722+/* tok-490 %txt /tests/golden/types-module-fixtures/tokens/txt
1723+/* tre-490 %txt /tests/golden/types-module-fixtures/tree/txt
1724+/* mod-490-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1725+/* mod-490-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1726+/* typ-490 %txt /tests/golden/types-module-fixtures/types/txt
1727+/* mtre-490 %txt /tests/golden/types-module-fixtures/module-trees/txt
1728+/* src-491 %jibb /tests/golden/types-module-mixed/source/jibb
1729+/* tok-491 %txt /tests/golden/types-module-mixed/tokens/txt
1730+/* tre-491 %txt /tests/golden/types-module-mixed/tree/txt
1731+/* mod-491-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1732+/* typ-491 %txt /tests/golden/types-module-mixed/types/txt
1733+/* imp-491-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1734+/* mark-491-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1735+/* mtre-491 %txt /tests/golden/types-module-mixed/module-trees/txt
1736+/* src-492 %jibb /tests/golden/types-multi-call/source/jibb
1737+/* tok-492 %txt /tests/golden/types-multi-call/tokens/txt
1738+/* tre-492 %txt /tests/golden/types-multi-call/tree/txt
1739+/* typ-492 %txt /tests/golden/types-multi-call/types/txt
1740+/* src-493 %jibb /tests/golden/types-multi-import/source/jibb
1741+/* tok-493 %txt /tests/golden/types-multi-import/tokens/txt
1742+/* tre-493 %txt /tests/golden/types-multi-import/tree/txt
1743+/* mod-493-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1744+/* typ-493 %txt /tests/golden/types-multi-import/types/txt
1745+/* mtre-493 %txt /tests/golden/types-multi-import/module-trees/txt
1746+/* src-494 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1747+/* tok-494 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1748+/* tre-494 %txt /tests/golden/types-nested-missing-tag/tree/txt
1749+/* typ-494 %txt /tests/golden/types-nested-missing-tag/types/txt
1750+/* src-495 %jibb /tests/golden/types-nested-noun-context/source/jibb
1751+/* tok-495 %txt /tests/golden/types-nested-noun-context/tokens/txt
1752+/* tre-495 %txt /tests/golden/types-nested-noun-context/tree/txt
1753+/* typ-495 %txt /tests/golden/types-nested-noun-context/types/txt
1754+/* src-496 %jibb /tests/golden/types-nested-shallow-preserve/source/jibb
1755+/* tok-496 %txt /tests/golden/types-nested-shallow-preserve/tokens/txt
1756+/* tre-496 %txt /tests/golden/types-nested-shallow-preserve/tree/txt
1757+/* typ-496 %txt /tests/golden/types-nested-shallow-preserve/types/txt
1758+/* src-497 %jibb /tests/golden/types-nested-union-context/source/jibb
1759+/* tok-497 %txt /tests/golden/types-nested-union-context/tokens/txt
1760+/* tre-497 %txt /tests/golden/types-nested-union-context/tree/txt
1761+/* typ-497 %txt /tests/golden/types-nested-union-context/types/txt
1762+/* src-498 %jibb /tests/golden/types-null-context/source/jibb
1763+/* tok-498 %txt /tests/golden/types-null-context/tokens/txt
1764+/* tre-498 %txt /tests/golden/types-null-context/tree/txt
1765+/* typ-498 %txt /tests/golden/types-null-context/types/txt
1766+/* src-499 %jibb /tests/golden/types-null-overlap/source/jibb
1767+/* tok-499 %txt /tests/golden/types-null-overlap/tokens/txt
1768+/* tre-499 %txt /tests/golden/types-null-overlap/tree/txt
1769+/* typ-499 %txt /tests/golden/types-null-overlap/types/txt
1770+/* src-500 %jibb /tests/golden/types-null-unresolved/source/jibb
1771+/* tok-500 %txt /tests/golden/types-null-unresolved/tokens/txt
1772+/* tre-500 %txt /tests/golden/types-null-unresolved/tree/txt
1773+/* typ-500 %txt /tests/golden/types-null-unresolved/types/txt
1774+/* src-501 %jibb /tests/golden/types-pair-context/source/jibb
1775+/* tok-501 %txt /tests/golden/types-pair-context/tokens/txt
1776+/* tre-501 %txt /tests/golden/types-pair-context/tree/txt
1777+/* typ-501 %txt /tests/golden/types-pair-context/types/txt
1778+/* src-502 %jibb /tests/golden/types-partial-apply/source/jibb
1779+/* tok-502 %txt /tests/golden/types-partial-apply/tokens/txt
1780+/* tre-502 %txt /tests/golden/types-partial-apply/tree/txt
1781+/* typ-502 %txt /tests/golden/types-partial-apply/types/txt
1782+/* src-503 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1783+/* tok-503 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1784+/* tre-503 %txt /tests/golden/types-partial-atom-alias/tree/txt
1785+/* typ-503 %txt /tests/golden/types-partial-atom-alias/types/txt
1786+/* src-504 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1787+/* tok-504 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1788+/* tre-504 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1789+/* typ-504 %txt /tests/golden/types-partial-atom-constraint/types/txt
1790+/* src-505 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1791+/* tok-505 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1792+/* tre-505 %txt /tests/golden/types-partial-atom-widening/tree/txt
1793+/* typ-505 %txt /tests/golden/types-partial-atom-widening/types/txt
1794+/* src-506 %jibb /tests/golden/types-partial-aura/source/jibb
1795+/* tok-506 %txt /tests/golden/types-partial-aura/tokens/txt
1796+/* tre-506 %txt /tests/golden/types-partial-aura/tree/txt
1797+/* typ-506 %txt /tests/golden/types-partial-aura/types/txt
1798+/* src-507 %jibb /tests/golden/types-partial-aura-family/source/jibb
1799+/* tok-507 %txt /tests/golden/types-partial-aura-family/tokens/txt
1800+/* tre-507 %txt /tests/golden/types-partial-aura-family/tree/txt
1801+/* typ-507 %txt /tests/golden/types-partial-aura-family/types/txt
1802+/* src-508 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1803+/* tok-508 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1804+/* tre-508 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1805+/* typ-508 %txt /tests/golden/types-partial-aura-generalization/types/txt
1806+/* src-509 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1807+/* tok-509 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1808+/* tre-509 %txt /tests/golden/types-partial-bare-atom/tree/txt
1809+/* typ-509 %txt /tests/golden/types-partial-bare-atom/types/txt
1810+/* src-510 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1811+/* tok-510 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1812+/* tre-510 %txt /tests/golden/types-partial-branch-widening/tree/txt
1813+/* typ-510 %txt /tests/golden/types-partial-branch-widening/types/txt
1814+/* src-511 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1815+/* tok-511 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1816+/* tre-511 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1817+/* typ-511 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1818+/* src-512 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1819+/* tok-512 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1820+/* tre-512 %txt /tests/golden/types-partial-decimal-default/tree/txt
1821+/* typ-512 %txt /tests/golden/types-partial-decimal-default/types/txt
1822+/* src-513 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1823+/* tok-513 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1824+/* tre-513 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1825+/* typ-513 %txt /tests/golden/types-partial-dependency-chain/types/txt
1826+/* src-514 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1827+/* tok-514 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1828+/* tre-514 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1829+/* typ-514 %txt /tests/golden/types-partial-explicit-capital/types/txt
1830+/* src-515 %jibb /tests/golden/types-partial-forward/source/jibb
1831+/* tok-515 %txt /tests/golden/types-partial-forward/tokens/txt
1832+/* tre-515 %txt /tests/golden/types-partial-forward/tree/txt
1833+/* typ-515 %txt /tests/golden/types-partial-forward/types/txt
1834+/* src-516 %jibb /tests/golden/types-partial-generalization/source/jibb
1835+/* tok-516 %txt /tests/golden/types-partial-generalization/tokens/txt
1836+/* tre-516 %txt /tests/golden/types-partial-generalization/tree/txt
1837+/* typ-516 %txt /tests/golden/types-partial-generalization/types/txt
1838+/* src-517 %jibb /tests/golden/types-partial-identity/source/jibb
1839+/* tok-517 %txt /tests/golden/types-partial-identity/tokens/txt
1840+/* tre-517 %txt /tests/golden/types-partial-identity/tree/txt
1841+/* typ-517 %txt /tests/golden/types-partial-identity/types/txt
1842+/* src-518 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1843+/* tok-518 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1844+/* tre-518 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1845+/* typ-518 %txt /tests/golden/types-partial-independent-atoms/types/txt
1846+/* src-519 %jibb /tests/golden/types-partial-local-molds/source/jibb
1847+/* tok-519 %txt /tests/golden/types-partial-local-molds/tokens/txt
1848+/* tre-519 %txt /tests/golden/types-partial-local-molds/tree/txt
1849+/* typ-519 %txt /tests/golden/types-partial-local-molds/types/txt
1850+/* src-520 %jibb /tests/golden/types-partial-locals/source/jibb
1851+/* tok-520 %txt /tests/golden/types-partial-locals/tokens/txt
1852+/* tre-520 %txt /tests/golden/types-partial-locals/tree/txt
1853+/* typ-520 %txt /tests/golden/types-partial-locals/types/txt
1854+/* src-521 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1855+/* tok-521 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1856+/* tre-521 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1857+/* typ-521 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1858+/* src-522 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1859+/* tok-522 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1860+/* tre-522 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1861+/* typ-522 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1862+/* src-523 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1863+/* tok-523 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1864+/* tre-523 %txt /tests/golden/types-partial-mold-composite/tree/txt
1865+/* typ-523 %txt /tests/golden/types-partial-mold-composite/types/txt
1866+/* src-524 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1867+/* tok-524 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1868+/* tre-524 %txt /tests/golden/types-partial-mold-forward/tree/txt
1869+/* typ-524 %txt /tests/golden/types-partial-mold-forward/types/txt
1870+/* src-525 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1871+/* tok-525 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1872+/* tre-525 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1873+/* typ-525 %txt /tests/golden/types-partial-mold-recursive/types/txt
1874+/* src-526 %jibb /tests/golden/types-partial-occurs/source/jibb
1875+/* tok-526 %txt /tests/golden/types-partial-occurs/tokens/txt
1876+/* tre-526 %txt /tests/golden/types-partial-occurs/tree/txt
1877+/* typ-526 %txt /tests/golden/types-partial-occurs/types/txt
1878+/* src-527 %jibb /tests/golden/types-partial-projection/source/jibb
1879+/* tok-527 %txt /tests/golden/types-partial-projection/tokens/txt
1880+/* tre-527 %txt /tests/golden/types-partial-projection/tree/txt
1881+/* typ-527 %txt /tests/golden/types-partial-projection/types/txt
1882+/* src-528 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1883+/* tok-528 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1884+/* tre-528 %txt /tests/golden/types-partial-shadow-global/tree/txt
1885+/* typ-528 %txt /tests/golden/types-partial-shadow-global/types/txt
1886+/* src-529 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1887+/* tok-529 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1888+/* tre-529 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1889+/* typ-529 %txt /tests/golden/types-partial-shared-tvar/types/txt
1890+/* src-530 %jibb /tests/golden/types-partial-union-cases/source/jibb
1891+/* tok-530 %txt /tests/golden/types-partial-union-cases/tokens/txt
1892+/* tre-530 %txt /tests/golden/types-partial-union-cases/tree/txt
1893+/* typ-530 %txt /tests/golden/types-partial-union-cases/types/txt
1894+/* src-531 %jibb /tests/golden/types-partial-union-edges/source/jibb
1895+/* tok-531 %txt /tests/golden/types-partial-union-edges/tokens/txt
1896+/* tre-531 %txt /tests/golden/types-partial-union-edges/tree/txt
1897+/* typ-531 %txt /tests/golden/types-partial-union-edges/types/txt
1898+/* src-532 %jibb /tests/golden/types-partial-union-nested-nouns/source/jibb
1899+/* tok-532 %txt /tests/golden/types-partial-union-nested-nouns/tokens/txt
1900+/* tre-532 %txt /tests/golden/types-partial-union-nested-nouns/tree/txt
1901+/* typ-532 %txt /tests/golden/types-partial-union-nested-nouns/types/txt
1902+/* src-533 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1903+/* tok-533 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1904+/* tre-533 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1905+/* typ-533 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1906+/* src-534 %jibb /tests/golden/types-positional-faces/source/jibb
1907+/* tok-534 %txt /tests/golden/types-positional-faces/tokens/txt
1908+/* tre-534 %txt /tests/golden/types-positional-faces/tree/txt
1909+/* typ-534 %txt /tests/golden/types-positional-faces/types/txt
1910+/* src-535 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1911+/* tok-535 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1912+/* tre-535 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1913+/* typ-535 %txt /tests/golden/types-prelude-arithmetic/types/txt
1914+/* src-536 %jibb /tests/golden/types-prelude-ask/source/jibb
1915+/* tok-536 %txt /tests/golden/types-prelude-ask/tokens/txt
1916+/* tre-536 %txt /tests/golden/types-prelude-ask/tree/txt
1917+/* typ-536 %txt /tests/golden/types-prelude-ask/types/txt
1918+/* src-537 %jibb /tests/golden/types-prelude-bond/source/jibb
1919+/* tok-537 %txt /tests/golden/types-prelude-bond/tokens/txt
1920+/* tre-537 %txt /tests/golden/types-prelude-bond/tree/txt
1921+/* typ-537 %txt /tests/golden/types-prelude-bond/types/txt
1922+/* src-538 %jibb /tests/golden/types-prelude-cmd/source/jibb
1923+/* tok-538 %txt /tests/golden/types-prelude-cmd/tokens/txt
1924+/* tre-538 %txt /tests/golden/types-prelude-cmd/tree/txt
1925+/* typ-538 %txt /tests/golden/types-prelude-cmd/types/txt
1926+/* src-539 %jibb /tests/golden/types-prelude-comparison/source/jibb
1927+/* tok-539 %txt /tests/golden/types-prelude-comparison/tokens/txt
1928+/* tre-539 %txt /tests/golden/types-prelude-comparison/tree/txt
1929+/* typ-539 %txt /tests/golden/types-prelude-comparison/types/txt
1930+/* src-540 %jibb /tests/golden/types-prelude-direct/source/jibb
1931+/* tok-540 %txt /tests/golden/types-prelude-direct/tokens/txt
1932+/* tre-540 %txt /tests/golden/types-prelude-direct/tree/txt
1933+/* typ-540 %txt /tests/golden/types-prelude-direct/types/txt
1934+/* src-541 %jibb /tests/golden/types-prelude-functional/source/jibb
1935+/* tok-541 %txt /tests/golden/types-prelude-functional/tokens/txt
1936+/* tre-541 %txt /tests/golden/types-prelude-functional/tree/txt
1937+/* typ-541 %txt /tests/golden/types-prelude-functional/types/txt
1938+/* src-542 %jibb /tests/golden/types-prelude-generic-alias/source/jibb
1939+/* tok-542 %txt /tests/golden/types-prelude-generic-alias/tokens/txt
1940+/* tre-542 %txt /tests/golden/types-prelude-generic-alias/tree/txt
1941+/* mod-542-1 %jibb /tests/golden/types-prelude-generic-alias/modules/ui/alias-helper/jibb
1942+/* typ-542 %txt /tests/golden/types-prelude-generic-alias/types/txt
1943+/* mtre-542 %txt /tests/golden/types-prelude-generic-alias/module-trees/txt
1944+/* src-543 %jibb /tests/golden/types-prelude-interface/source/jibb
1945+/* tok-543 %txt /tests/golden/types-prelude-interface/tokens/txt
1946+/* tre-543 %txt /tests/golden/types-prelude-interface/tree/txt
1947+/* mod-543-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1948+/* mod-543-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1949+/* typ-543 %txt /tests/golden/types-prelude-interface/types/txt
1950+/* mtre-543 %txt /tests/golden/types-prelude-interface/module-trees/txt
1951+/* src-544 %jibb /tests/golden/types-prelude-lead-late/source/jibb
1952+/* tok-544 %txt /tests/golden/types-prelude-lead-late/tokens/txt
1953+/* tre-544 %txt /tests/golden/types-prelude-lead-late/tree/txt
1954+/* typ-544 %txt /tests/golden/types-prelude-lead-late/types/txt
1955+/* src-545 %jibb /tests/golden/types-prelude-lent/source/jibb
1956+/* tok-545 %txt /tests/golden/types-prelude-lent/tokens/txt
1957+/* tre-545 %txt /tests/golden/types-prelude-lent/tree/txt
1958+/* typ-545 %txt /tests/golden/types-prelude-lent/types/txt
1959+/* src-546 %jibb /tests/golden/types-prelude-like/source/jibb
1960+/* tok-546 %txt /tests/golden/types-prelude-like/tokens/txt
1961+/* tre-546 %txt /tests/golden/types-prelude-like/tree/txt
1962+/* typ-546 %txt /tests/golden/types-prelude-like/types/txt
1963+/* src-547 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1964+/* tok-547 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1965+/* tre-547 %txt /tests/golden/types-prelude-list-alias/tree/txt
1966+/* typ-547 %txt /tests/golden/types-prelude-list-alias/types/txt
1967+/* src-548 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1968+/* tok-548 %txt /tests/golden/types-prelude-list-functions/tokens/txt
1969+/* tre-548 %txt /tests/golden/types-prelude-list-functions/tree/txt
1970+/* mod-548-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
1971+/* typ-548 %txt /tests/golden/types-prelude-list-functions/types/txt
1972+/* mtre-548 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
1973+/* src-549 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
1974+/* tok-549 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
1975+/* tre-549 %txt /tests/golden/types-prelude-list-helpers/tree/txt
1976+/* typ-549 %txt /tests/golden/types-prelude-list-helpers/types/txt
1977+/* src-550 %jibb /tests/golden/types-prelude-predicates/source/jibb
1978+/* tok-550 %txt /tests/golden/types-prelude-predicates/tokens/txt
1979+/* tre-550 %txt /tests/golden/types-prelude-predicates/tree/txt
1980+/* typ-550 %txt /tests/golden/types-prelude-predicates/types/txt
1981+/* src-551 %jibb /tests/golden/types-prelude-sub/source/jibb
1982+/* tok-551 %txt /tests/golden/types-prelude-sub/tokens/txt
1983+/* tre-551 %txt /tests/golden/types-prelude-sub/tree/txt
1984+/* typ-551 %txt /tests/golden/types-prelude-sub/types/txt
1985+/* src-552 %jibb /tests/golden/types-prelude-sub-nested/source/jibb
1986+/* tok-552 %txt /tests/golden/types-prelude-sub-nested/tokens/txt
1987+/* tre-552 %txt /tests/golden/types-prelude-sub-nested/tree/txt
1988+/* typ-552 %txt /tests/golden/types-prelude-sub-nested/types/txt
1989+/* src-553 %jibb /tests/golden/types-prelude-succ/source/jibb
1990+/* tok-553 %txt /tests/golden/types-prelude-succ/tokens/txt
1991+/* tre-553 %txt /tests/golden/types-prelude-succ/tree/txt
1992+/* typ-553 %txt /tests/golden/types-prelude-succ/types/txt
1993+/* src-554 %jibb /tests/golden/types-prelude-text/source/jibb
1994+/* tok-554 %txt /tests/golden/types-prelude-text/tokens/txt
1995+/* tre-554 %txt /tests/golden/types-prelude-text/tree/txt
1996+/* typ-554 %txt /tests/golden/types-prelude-text/types/txt
1997+/* src-555 %jibb /tests/golden/types-prelude-ui/source/jibb
1998+/* tok-555 %txt /tests/golden/types-prelude-ui/tokens/txt
1999+/* tre-555 %txt /tests/golden/types-prelude-ui/tree/txt
2000+/* typ-555 %txt /tests/golden/types-prelude-ui/types/txt
2001+/* src-556 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
2002+/* tok-556 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
2003+/* tre-556 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
2004+/* typ-556 %txt /tests/golden/types-prelude-unit-helpers/types/txt
2005+/* src-557 %jibb /tests/golden/types-prelude-zing/source/jibb
2006+/* tok-557 %txt /tests/golden/types-prelude-zing/tokens/txt
2007+/* tre-557 %txt /tests/golden/types-prelude-zing/tree/txt
2008+/* typ-557 %txt /tests/golden/types-prelude-zing/types/txt
2009+/* src-558 %jibb /tests/golden/types-proj-explicit-context/source/jibb
2010+/* tok-558 %txt /tests/golden/types-proj-explicit-context/tokens/txt
2011+/* tre-558 %txt /tests/golden/types-proj-explicit-context/tree/txt
2012+/* typ-558 %txt /tests/golden/types-proj-explicit-context/types/txt
2013+/* src-559 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
2014+/* tok-559 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
2015+/* tre-559 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
2016+/* typ-559 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
2017+/* src-560 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
2018+/* tok-560 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
2019+/* tre-560 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2020+/* mod-560-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2021+/* typ-560 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2022+/* mtre-560 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2023+/* src-561 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2024+/* tok-561 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2025+/* tre-561 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2026+/* mod-561-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2027+/* typ-561 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2028+/* mtre-561 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2029+/* src-562 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2030+/* tok-562 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2031+/* tre-562 %txt /tests/golden/types-proj-reserved-local/tree/txt
2032+/* typ-562 %txt /tests/golden/types-proj-reserved-local/types/txt
2033+/* src-563 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2034+/* tok-563 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2035+/* tre-563 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2036+/* typ-563 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2037+/* src-564 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2038+/* tok-564 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2039+/* tre-564 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2040+/* typ-564 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2041+/* src-565 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2042+/* tok-565 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2043+/* tre-565 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2044+/* typ-565 %txt /tests/golden/types-proj-reserved-mold/types/txt
2045+/* src-566 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2046+/* tok-566 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2047+/* tre-566 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2048+/* typ-566 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2049+/* src-567 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2050+/* tok-567 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2051+/* tre-567 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2052+/* typ-567 %txt /tests/golden/types-proj-reserved-positive/types/txt
2053+/* src-568 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2054+/* tok-568 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2055+/* tre-568 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2056+/* typ-568 %txt /tests/golden/types-proj-reserved-sample/types/txt
2057+/* src-569 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2058+/* tok-569 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2059+/* tre-569 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2060+/* typ-569 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2061+/* src-570 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2062+/* tok-570 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2063+/* tre-570 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2064+/* typ-570 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2065+/* src-571 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2066+/* tok-571 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2067+/* tre-571 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2068+/* typ-571 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2069+/* src-572 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2070+/* tok-572 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2071+/* tre-572 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2072+/* typ-572 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2073+/* src-573 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2074+/* tok-573 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2075+/* tre-573 %txt /tests/golden/types-proj-reserved-value/tree/txt
2076+/* typ-573 %txt /tests/golden/types-proj-reserved-value/types/txt
2077+/* src-574 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2078+/* tok-574 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2079+/* tre-574 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2080+/* typ-574 %txt /tests/golden/types-proj-single-duplicate/types/txt
2081+/* src-575 %jibb /tests/golden/types-proj-single-field/source/jibb
2082+/* tok-575 %txt /tests/golden/types-proj-single-field/tokens/txt
2083+/* tre-575 %txt /tests/golden/types-proj-single-field/tree/txt
2084+/* typ-575 %txt /tests/golden/types-proj-single-field/types/txt
2085+/* src-576 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2086+/* tok-576 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2087+/* tre-576 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2088+/* typ-576 %txt /tests/golden/types-proj-single-sample-face/types/txt
2089+/* src-577 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2090+/* tok-577 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2091+/* tre-577 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2092+/* typ-577 %txt /tests/golden/types-proj-single-wrapped/types/txt
2093+/* src-578 %jibb /tests/golden/types-qath-faces/source/jibb
2094+/* tok-578 %txt /tests/golden/types-qath-faces/tokens/txt
2095+/* tre-578 %txt /tests/golden/types-qath-faces/tree/txt
2096+/* typ-578 %txt /tests/golden/types-qath-faces/types/txt
2097+/* src-579 %jibb /tests/golden/types-qath-holes/source/jibb
2098+/* tok-579 %txt /tests/golden/types-qath-holes/tokens/txt
2099+/* tre-579 %txt /tests/golden/types-qath-holes/tree/txt
2100+/* typ-579 %txt /tests/golden/types-qath-holes/types/txt
2101+/* src-580 %jibb /tests/golden/types-qath-module-identity/source/jibb
2102+/* tok-580 %txt /tests/golden/types-qath-module-identity/tokens/txt
2103+/* tre-580 %txt /tests/golden/types-qath-module-identity/tree/txt
2104+/* mod-580-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2105+/* mod-580-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2106+/* mod-580-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2107+/* typ-580 %txt /tests/golden/types-qath-module-identity/types/txt
2108+/* mtre-580 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2109+/* src-581 %jibb /tests/golden/types-qath-recursive/source/jibb
2110+/* tok-581 %txt /tests/golden/types-qath-recursive/tokens/txt
2111+/* tre-581 %txt /tests/golden/types-qath-recursive/tree/txt
2112+/* typ-581 %txt /tests/golden/types-qath-recursive/types/txt
2113+/* src-582 %jibb /tests/golden/types-record-bound-variable/source/jibb
2114+/* tok-582 %txt /tests/golden/types-record-bound-variable/tokens/txt
2115+/* tre-582 %txt /tests/golden/types-record-bound-variable/tree/txt
2116+/* typ-582 %txt /tests/golden/types-record-bound-variable/types/txt
2117+/* src-583 %jibb /tests/golden/types-record-cast-context/source/jibb
2118+/* tok-583 %txt /tests/golden/types-record-cast-context/tokens/txt
2119+/* tre-583 %txt /tests/golden/types-record-cast-context/tree/txt
2120+/* typ-583 %txt /tests/golden/types-record-cast-context/types/txt
2121+/* src-584 %jibb /tests/golden/types-record-change/source/jibb
2122+/* tok-584 %txt /tests/golden/types-record-change/tokens/txt
2123+/* tre-584 %txt /tests/golden/types-record-change/tree/txt
2124+/* typ-584 %txt /tests/golden/types-record-change/types/txt
2125+/* src-585 %jibb /tests/golden/types-record-change-generic/source/jibb
2126+/* tok-585 %txt /tests/golden/types-record-change-generic/tokens/txt
2127+/* tre-585 %txt /tests/golden/types-record-change-generic/tree/txt
2128+/* typ-585 %txt /tests/golden/types-record-change-generic/types/txt
2129+/* src-586 %jibb /tests/golden/types-record-faces/source/jibb
2130+/* tok-586 %txt /tests/golden/types-record-faces/tokens/txt
2131+/* tre-586 %txt /tests/golden/types-record-faces/tree/txt
2132+/* typ-586 %txt /tests/golden/types-record-faces/types/txt
2133+/* src-587 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2134+/* tok-587 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2135+/* tre-587 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2136+/* typ-587 %txt /tests/golden/types-record-field-edit-separate/types/txt
2137+/* src-588 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2138+/* tok-588 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2139+/* tre-588 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2140+/* typ-588 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2141+/* src-589 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2142+/* tok-589 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2143+/* tre-589 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2144+/* typ-589 %txt /tests/golden/types-record-field-expr-separate/types/txt
2145+/* src-590 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2146+/* tok-590 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2147+/* tre-590 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2148+/* mod-590-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2149+/* typ-590 %txt /tests/golden/types-record-field-module-reachable/types/txt
2150+/* mtre-590 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2151+/* src-591 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2152+/* tok-591 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2153+/* tre-591 %txt /tests/golden/types-record-field-module-unused/tree/txt
2154+/* mod-591-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2155+/* mod-591-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2156+/* typ-591 %txt /tests/golden/types-record-field-module-unused/types/txt
2157+/* mtre-591 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2158+/* src-592 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2159+/* tok-592 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2160+/* tre-592 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2161+/* typ-592 %txt /tests/golden/types-record-field-nested-mold/types/txt
2162+/* src-593 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2163+/* tok-593 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2164+/* tre-593 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2165+/* typ-593 %txt /tests/golden/types-record-field-outer-inner/types/txt
2166+/* src-594 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2167+/* tok-594 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2168+/* tre-594 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2169+/* typ-594 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2170+/* src-595 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2171+/* tok-595 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2172+/* tre-595 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2173+/* typ-595 %txt /tests/golden/types-record-field-separate-molds/types/txt
2174+/* src-596 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2175+/* tok-596 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2176+/* tre-596 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2177+/* typ-596 %txt /tests/golden/types-record-field-unused-mold/types/txt
2178+/* src-597 %jibb /tests/golden/types-record-import/source/jibb
2179+/* tok-597 %txt /tests/golden/types-record-import/tokens/txt
2180+/* tre-597 %txt /tests/golden/types-record-import/tree/txt
2181+/* mod-597-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2182+/* typ-597 %txt /tests/golden/types-record-import/types/txt
2183+/* mtre-597 %txt /tests/golden/types-record-import/module-trees/txt
2184+/* src-598 %jibb /tests/golden/types-record-local-scheme/source/jibb
2185+/* tok-598 %txt /tests/golden/types-record-local-scheme/tokens/txt
2186+/* tre-598 %txt /tests/golden/types-record-local-scheme/tree/txt
2187+/* typ-598 %txt /tests/golden/types-record-local-scheme/types/txt
2188+/* src-599 %jibb /tests/golden/types-record-nested/source/jibb
2189+/* tok-599 %txt /tests/golden/types-record-nested/tokens/txt
2190+/* tre-599 %txt /tests/golden/types-record-nested/tree/txt
2191+/* typ-599 %txt /tests/golden/types-record-nested/types/txt
2192+/* src-600 %jibb /tests/golden/types-record-to-tuple/source/jibb
2193+/* tok-600 %txt /tests/golden/types-record-to-tuple/tokens/txt
2194+/* tre-600 %txt /tests/golden/types-record-to-tuple/tree/txt
2195+/* typ-600 %txt /tests/golden/types-record-to-tuple/types/txt
2196+/* src-601 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2197+/* tok-601 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2198+/* tre-601 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2199+/* typ-601 %txt /tests/golden/types-recursion-scc-failures/types/txt
2200+/* src-602 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2201+/* tok-602 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2202+/* tre-602 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2203+/* typ-602 %txt /tests/golden/types-recursion-scc-groups/types/txt
2204+/* src-603 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2205+/* tok-603 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2206+/* tre-603 %txt /tests/golden/types-recursion-scc-import/tree/txt
2207+/* mod-603-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2208+/* typ-603 %txt /tests/golden/types-recursion-scc-import/types/txt
2209+/* mtre-603 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2210+/* src-604 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2211+/* tok-604 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2212+/* tre-604 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2213+/* mod-604-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2214+/* typ-604 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2215+/* mtre-604 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2216+/* src-605 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2217+/* tok-605 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2218+/* tre-605 %txt /tests/golden/types-recursion-scc-local/tree/txt
2219+/* typ-605 %txt /tests/golden/types-recursion-scc-local/types/txt
2220+/* src-606 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2221+/* tok-606 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2222+/* tre-606 %txt /tests/golden/types-recursion-scc-order/tree/txt
2223+/* typ-606 %txt /tests/golden/types-recursion-scc-order/types/txt
2224+/* src-607 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2225+/* tok-607 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2226+/* tre-607 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2227+/* typ-607 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2228+/* src-608 %jibb /tests/golden/types-recursive-branch/source/jibb
2229+/* tok-608 %txt /tests/golden/types-recursive-branch/tokens/txt
2230+/* tre-608 %txt /tests/golden/types-recursive-branch/tree/txt
2231+/* typ-608 %txt /tests/golden/types-recursive-branch/types/txt
2232+/* src-609 %jibb /tests/golden/types-recursive-gate/source/jibb
2233+/* tok-609 %txt /tests/golden/types-recursive-gate/tokens/txt
2234+/* tre-609 %txt /tests/golden/types-recursive-gate/tree/txt
2235+/* typ-609 %txt /tests/golden/types-recursive-gate/types/txt
2236+/* src-610 %jibb /tests/golden/types-recursive-sample/source/jibb
2237+/* tok-610 %txt /tests/golden/types-recursive-sample/tokens/txt
2238+/* tre-610 %txt /tests/golden/types-recursive-sample/tree/txt
2239+/* typ-610 %txt /tests/golden/types-recursive-sample/types/txt
2240+/* src-611 %jibb /tests/golden/types-request-normal/source/jibb
2241+/* tok-611 %txt /tests/golden/types-request-normal/tokens/txt
2242+/* tre-611 %txt /tests/golden/types-request-normal/tree/txt
2243+/* mod-611-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2244+/* typ-611 %txt /tests/golden/types-request-normal/types/txt
2245+/* mark-611-1 %txt /tests/golden/types-request-normal/mar/full/txt
2246+/* mtre-611 %txt /tests/golden/types-request-normal/module-trees/txt
2247+/* src-612 %jibb /tests/golden/types-scope-library-poke/source/jibb
2248+/* tok-612 %txt /tests/golden/types-scope-library-poke/tokens/txt
2249+/* tre-612 %txt /tests/golden/types-scope-library-poke/tree/txt
2250+/* typ-612 %txt /tests/golden/types-scope-library-poke/types/txt
2251+/* src-613 %jibb /tests/golden/types-scope-root-api/source/jibb
2252+/* tok-613 %txt /tests/golden/types-scope-root-api/tokens/txt
2253+/* tre-613 %txt /tests/golden/types-scope-root-api/tree/txt
2254+/* typ-613 %txt /tests/golden/types-scope-root-api/types/txt
2255+/* src-614 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2256+/* tok-614 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2257+/* tre-614 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2258+/* typ-614 %txt /tests/golden/types-scope-store-duplicate/types/txt
2259+/* src-615 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2260+/* tok-615 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2261+/* tre-615 %txt /tests/golden/types-scope-store-shadow/tree/txt
2262+/* typ-615 %txt /tests/golden/types-scope-store-shadow/types/txt
2263+/* src-616 %jibb /tests/golden/types-single-case-pattern/source/jibb
2264+/* tok-616 %txt /tests/golden/types-single-case-pattern/tokens/txt
2265+/* tre-616 %txt /tests/golden/types-single-case-pattern/tree/txt
2266+/* typ-616 %txt /tests/golden/types-single-case-pattern/types/txt
2267+/* src-617 %jibb /tests/golden/types-string-interpolation/source/jibb
2268+/* tok-617 %txt /tests/golden/types-string-interpolation/tokens/txt
2269+/* tre-617 %txt /tests/golden/types-string-interpolation/tree/txt
2270+/* typ-617 %txt /tests/golden/types-string-interpolation/types/txt
2271+/* src-618 %jibb /tests/golden/types-tuple-context/source/jibb
2272+/* tok-618 %txt /tests/golden/types-tuple-context/tokens/txt
2273+/* tre-618 %txt /tests/golden/types-tuple-context/tree/txt
2274+/* typ-618 %txt /tests/golden/types-tuple-context/types/txt
2275+/* src-619 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2276+/* tok-619 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2277+/* tre-619 %txt /tests/golden/types-tuple-context-nested/tree/txt
2278+/* typ-619 %txt /tests/golden/types-tuple-context-nested/types/txt
2279+/* src-620 %jibb /tests/golden/types-union-alias/source/jibb
2280+/* tok-620 %txt /tests/golden/types-union-alias/tokens/txt
2281+/* tre-620 %txt /tests/golden/types-union-alias/tree/txt
2282+/* typ-620 %txt /tests/golden/types-union-alias/types/txt
2283+/* src-621 %jibb /tests/golden/types-union-branch-context/source/jibb
2284+/* tok-621 %txt /tests/golden/types-union-branch-context/tokens/txt
2285+/* tre-621 %txt /tests/golden/types-union-branch-context/tree/txt
2286+/* typ-621 %txt /tests/golden/types-union-branch-context/types/txt
2287+/* src-622 %jibb /tests/golden/types-union-branch-pending/source/jibb
2288+/* tok-622 %txt /tests/golden/types-union-branch-pending/tokens/txt
2289+/* tre-622 %txt /tests/golden/types-union-branch-pending/tree/txt
2290+/* typ-622 %txt /tests/golden/types-union-branch-pending/types/txt
2291+/* src-623 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2292+/* tok-623 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2293+/* tre-623 %txt /tests/golden/types-union-constructor-shape/tree/txt
2294+/* typ-623 %txt /tests/golden/types-union-constructor-shape/types/txt
2295+/* src-624 %jibb /tests/golden/types-union-context-flow/source/jibb
2296+/* tok-624 %txt /tests/golden/types-union-context-flow/tokens/txt
2297+/* tre-624 %txt /tests/golden/types-union-context-flow/tree/txt
2298+/* typ-624 %txt /tests/golden/types-union-context-flow/types/txt
2299+/* src-625 %jibb /tests/golden/types-union-finite/source/jibb
2300+/* tok-625 %txt /tests/golden/types-union-finite/tokens/txt
2301+/* tre-625 %txt /tests/golden/types-union-finite/tree/txt
2302+/* typ-625 %txt /tests/golden/types-union-finite/types/txt
2303+/* src-626 %jibb /tests/golden/types-union-finite-context/source/jibb
2304+/* tok-626 %txt /tests/golden/types-union-finite-context/tokens/txt
2305+/* tre-626 %txt /tests/golden/types-union-finite-context/tree/txt
2306+/* typ-626 %txt /tests/golden/types-union-finite-context/types/txt
2307+/* src-627 %jibb /tests/golden/types-union-finite-generic/source/jibb
2308+/* tok-627 %txt /tests/golden/types-union-finite-generic/tokens/txt
2309+/* tre-627 %txt /tests/golden/types-union-finite-generic/tree/txt
2310+/* typ-627 %txt /tests/golden/types-union-finite-generic/types/txt
2311+/* src-628 %jibb /tests/golden/types-union-finite-limit/source/jibb
2312+/* tok-628 %txt /tests/golden/types-union-finite-limit/tokens/txt
2313+/* tre-628 %txt /tests/golden/types-union-finite-limit/tree/txt
2314+/* typ-628 %txt /tests/golden/types-union-finite-limit/types/txt
2315+/* src-629 %jibb /tests/golden/types-union-import/source/jibb
2316+/* tok-629 %txt /tests/golden/types-union-import/tokens/txt
2317+/* tre-629 %txt /tests/golden/types-union-import/tree/txt
2318+/* mod-629-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2319+/* typ-629 %txt /tests/golden/types-union-import/types/txt
2320+/* mtre-629 %txt /tests/golden/types-union-import/module-trees/txt
2321+/* src-630 %jibb /tests/golden/types-union-local-pending/source/jibb
2322+/* tok-630 %txt /tests/golden/types-union-local-pending/tokens/txt
2323+/* tre-630 %txt /tests/golden/types-union-local-pending/tree/txt
2324+/* typ-630 %txt /tests/golden/types-union-local-pending/types/txt
2325+/* src-631 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2326+/* tok-631 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2327+/* tre-631 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2328+/* typ-631 %txt /tests/golden/types-union-nonwing-subject/types/txt
2329+/* src-632 %jibb /tests/golden/types-union-overlap/source/jibb
2330+/* tok-632 %txt /tests/golden/types-union-overlap/tokens/txt
2331+/* tre-632 %txt /tests/golden/types-union-overlap/tree/txt
2332+/* typ-632 %txt /tests/golden/types-union-overlap/types/txt
2333+/* src-633 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2334+/* tok-633 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2335+/* tre-633 %txt /tests/golden/types-union-overlap-nested/tree/txt
2336+/* typ-633 %txt /tests/golden/types-union-overlap-nested/types/txt
2337+/* src-634 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2338+/* tok-634 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2339+/* tre-634 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2340+/* typ-634 %txt /tests/golden/types-union-pattern-result-context/types/txt
2341+/* src-635 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2342+/* tok-635 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2343+/* tre-635 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2344+/* typ-635 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2345+/* src-636 %jibb /tests/golden/types-union-patterns/source/jibb
2346+/* tok-636 %txt /tests/golden/types-union-patterns/tokens/txt
2347+/* tre-636 %txt /tests/golden/types-union-patterns/tree/txt
2348+/* typ-636 %txt /tests/golden/types-union-patterns/types/txt
2349+/* src-637 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2350+/* tok-637 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2351+/* tre-637 %txt /tests/golden/types-union-patterns-generic/tree/txt
2352+/* typ-637 %txt /tests/golden/types-union-patterns-generic/types/txt
2353+/* src-638 %jibb /tests/golden/types-union-patterns-import/source/jibb
2354+/* tok-638 %txt /tests/golden/types-union-patterns-import/tokens/txt
2355+/* tre-638 %txt /tests/golden/types-union-patterns-import/tree/txt
2356+/* mod-638-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2357+/* typ-638 %txt /tests/golden/types-union-patterns-import/types/txt
2358+/* mtre-638 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2359+/* src-639 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2360+/* tok-639 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2361+/* tre-639 %txt /tests/golden/types-union-phantom-generic/tree/txt
2362+/* typ-639 %txt /tests/golden/types-union-phantom-generic/types/txt
2363+/* src-640 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2364+/* tok-640 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2365+/* tre-640 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2366+/* mod-640-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2367+/* mod-640-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2368+/* typ-640 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2369+/* mtre-640 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2370+/* src-641 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2371+/* tok-641 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2372+/* tre-641 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2373+/* mod-641-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2374+/* typ-641 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2375+/* mtre-641 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2376+/* src-642 %jibb /tests/golden/types-union-print-distinct/source/jibb
2377+/* tok-642 %txt /tests/golden/types-union-print-distinct/tokens/txt
2378+/* tre-642 %txt /tests/golden/types-union-print-distinct/tree/txt
2379+/* mod-642-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2380+/* mod-642-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2381+/* mod-642-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2382+/* typ-642 %txt /tests/golden/types-union-print-distinct/types/txt
2383+/* mtre-642 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2384+/* src-643 %jibb /tests/golden/types-union-print-escape/source/jibb
2385+/* tok-643 %txt /tests/golden/types-union-print-escape/tokens/txt
2386+/* tre-643 %txt /tests/golden/types-union-print-escape/tree/txt
2387+/* typ-643 %txt /tests/golden/types-union-print-escape/types/txt
2388+/* src-644 %jibb /tests/golden/types-union-print-local/source/jibb
2389+/* tok-644 %txt /tests/golden/types-union-print-local/tokens/txt
2390+/* tre-644 %txt /tests/golden/types-union-print-local/tree/txt
2391+/* typ-644 %txt /tests/golden/types-union-print-local/types/txt
2392+/* src-645 %jibb /tests/golden/types-union-print-nested/source/jibb
2393+/* tok-645 %txt /tests/golden/types-union-print-nested/tokens/txt
2394+/* tre-645 %txt /tests/golden/types-union-print-nested/tree/txt
2395+/* typ-645 %txt /tests/golden/types-union-print-nested/types/txt
2396+/* src-646 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2397+/* tok-646 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2398+/* tre-646 %txt /tests/golden/types-union-print-same-origin/tree/txt
2399+/* mod-646-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2400+/* typ-646 %txt /tests/golden/types-union-print-same-origin/types/txt
2401+/* mtre-646 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2402+/* src-647 %jibb /tests/golden/types-union-print-transitive/source/jibb
2403+/* tok-647 %txt /tests/golden/types-union-print-transitive/tokens/txt
2404+/* tre-647 %txt /tests/golden/types-union-print-transitive/tree/txt
2405+/* mod-647-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2406+/* mod-647-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2407+/* typ-647 %txt /tests/golden/types-union-print-transitive/types/txt
2408+/* mtre-647 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2409+/* src-648 %jibb /tests/golden/types-union-runtime-equality/source/jibb
2410+/* tok-648 %txt /tests/golden/types-union-runtime-equality/tokens/txt
2411+/* tre-648 %txt /tests/golden/types-union-runtime-equality/tree/txt
2412+/* typ-648 %txt /tests/golden/types-union-runtime-equality/types/txt
2413+/* src-649 %jibb /tests/golden/types-union-singleton/source/jibb
2414+/* tok-649 %txt /tests/golden/types-union-singleton/tokens/txt
2415+/* tre-649 %txt /tests/golden/types-union-singleton/tree/txt
2416+/* typ-649 %txt /tests/golden/types-union-singleton/types/txt
2417+/* src-650 %jibb /tests/golden/types-union-source-alias/source/jibb
2418+/* tok-650 %txt /tests/golden/types-union-source-alias/tokens/txt
2419+/* tre-650 %txt /tests/golden/types-union-source-alias/tree/txt
2420+/* typ-650 %txt /tests/golden/types-union-source-alias/types/txt
2421+/* src-651 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2422+/* tok-651 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2423+/* tre-651 %txt /tests/golden/types-union-tag-atoms/tree/txt
2424+/* typ-651 %txt /tests/golden/types-union-tag-atoms/types/txt
2425+/* src-652 %jibb /tests/golden/types-union-tags/source/jibb
2426+/* tok-652 %txt /tests/golden/types-union-tags/tokens/txt
2427+/* tre-652 %txt /tests/golden/types-union-tags/tree/txt
2428+/* typ-652 %txt /tests/golden/types-union-tags/types/txt
2429+/* src-653 %jibb /tests/golden/types-union-unresolved/source/jibb
2430+/* tok-653 %txt /tests/golden/types-union-unresolved/tokens/txt
2431+/* tre-653 %txt /tests/golden/types-union-unresolved/tree/txt
2432+/* typ-653 %txt /tests/golden/types-union-unresolved/types/txt
2433+/* src-654 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2434+/* tok-654 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2435+/* tre-654 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2436+/* typ-654 %txt /tests/golden/types-union-unresolved-flow/types/txt
2437+/* src-655 %jibb /tests/golden/types-unit-construction/source/jibb
2438+/* tok-655 %txt /tests/golden/types-unit-construction/tokens/txt
2439+/* tre-655 %txt /tests/golden/types-unit-construction/tree/txt
2440+/* typ-655 %txt /tests/golden/types-unit-construction/types/txt
2441+/* src-656 %jibb /tests/golden/types-unit-context/source/jibb
2442+/* tok-656 %txt /tests/golden/types-unit-context/tokens/txt
2443+/* tre-656 %txt /tests/golden/types-unit-context/tree/txt
2444+/* typ-656 %txt /tests/golden/types-unit-context/types/txt
2445+/* src-657 %jibb /tests/golden/types-unit-patterns/source/jibb
2446+/* tok-657 %txt /tests/golden/types-unit-patterns/tokens/txt
2447+/* tre-657 %txt /tests/golden/types-unit-patterns/tree/txt
2448+/* typ-657 %txt /tests/golden/types-unit-patterns/types/txt
2449+/* src-658 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2450+/* tok-658 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2451+/* tre-658 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2452+/* typ-658 %txt /tests/golden/types-value-cycle-shadow/types/txt
2453+/* src-659 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2454+/* tok-659 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2455+/* tre-659 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2456+/* typ-659 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2457+/* src-660 %jibb /tests/golden/types-value-cycles/source/jibb
2458+/* tok-660 %txt /tests/golden/types-value-cycles/tokens/txt
2459+/* tre-660 %txt /tests/golden/types-value-cycles/tree/txt
2460+/* typ-660 %txt /tests/golden/types-value-cycles/types/txt
24252461=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
24262462|%
24272463:: one arm per case
@@ -3256,478 +3292,496 @@
32563292 (weld (check ~.types-arithmetic-scopes src-414 `tok-414 `tre-414) (check-module-types ~.types-arithmetic-scopes ~[%tests %golden ~.types-arithmetic-scopes %source %jibb] src-414 `typ-414 ~ ~ ~))
32573293++ test-types-capital-distinct
32583294 (weld (check ~.types-capital-distinct src-415 `tok-415 `tre-415) (check-types ~.types-capital-distinct ~[%tests %golden ~.types-capital-distinct %source %jibb] src-415 `typ-415))
3295+++ test-types-cell-branch-context
3296+ (weld (check ~.types-cell-branch-context src-416 `tok-416 `tre-416) (check-module-types ~.types-cell-branch-context ~[%tests %golden ~.types-cell-branch-context %source %jibb] src-416 `typ-416 ~ ~ ~))
32593297++ test-types-cell-pattern-many
3260− (weld (check ~.types-cell-pattern-many src-416 `tok-416 `tre-416) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-416 `typ-416 ~ ~ ~))
3298+ (weld (check ~.types-cell-pattern-many src-417 `tok-417 `tre-417) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-417 `typ-417 ~ ~ ~))
32613299++ test-types-cell-pattern-schemes
3262− (weld (check ~.types-cell-pattern-schemes src-417 `tok-417 `tre-417) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-417 `typ-417 ~ ~ ~))
3300+ (weld (check ~.types-cell-pattern-schemes src-418 `tok-418 `tre-418) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-418 `typ-418 ~ ~ ~))
32633301++ test-types-cell-pattern-tail
3264− (weld (check ~.types-cell-pattern-tail src-418 `tok-418 `tre-418) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-418 `typ-418 ~ ~ ~))
3302+ (weld (check ~.types-cell-pattern-tail src-419 `tok-419 `tre-419) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-419 `typ-419 ~ ~ ~))
32653303++ test-types-constructor-context
3266− (weld (check ~.types-constructor-context src-419 `tok-419 `tre-419) (check-types ~.types-constructor-context ~[%tests %golden ~.types-constructor-context %source %jibb] src-419 `typ-419))
3304+ (weld (check ~.types-constructor-context src-420 `tok-420 `tre-420) (check-types ~.types-constructor-context ~[%tests %golden ~.types-constructor-context %source %jibb] src-420 `typ-420))
32673305++ test-types-deferred-call-context
3268− (weld (check ~.types-deferred-call-context src-420 `tok-420 `tre-420) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-420 `typ-420 ~ ~ ~))
3306+ (weld (check ~.types-deferred-call-context src-421 `tok-421 `tre-421) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-421 `typ-421 ~ ~ ~))
32693307++ test-types-equal-head-disjoint
3270− (weld (check ~.types-equal-head-disjoint src-421 `tok-421 `tre-421) (check-types ~.types-equal-head-disjoint ~[%tests %golden ~.types-equal-head-disjoint %source %jibb] src-421 `typ-421))
3308+ (weld (check ~.types-equal-head-disjoint src-422 `tok-422 `tre-422) (check-types ~.types-equal-head-disjoint ~[%tests %golden ~.types-equal-head-disjoint %source %jibb] src-422 `typ-422))
32713309++ test-types-flag-branch-context
3272− (weld (check ~.types-flag-branch-context src-422 `tok-422 `tre-422) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-422 `typ-422 ~ ~ ~))
3310+ (weld (check ~.types-flag-branch-context src-423 `tok-423 `tre-423) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-423 `typ-423 ~ ~ ~))
32733311++ test-types-generic-arity
3274− (weld (check ~.types-generic-arity src-423 `tok-423 `tre-423) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-423 `typ-423))
3312+ (weld (check ~.types-generic-arity src-424 `tok-424 `tre-424) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-424 `typ-424))
32753313++ test-types-generic-face-inference
3276− (weld (check ~.types-generic-face-inference src-424 `tok-424 `tre-424) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-424 `typ-424))
3314+ (weld (check ~.types-generic-face-inference src-425 `tok-425 `tre-425) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-425 `typ-425))
32773315++ test-types-generic-gates
3278− (weld (check ~.types-generic-gates src-425 `tok-425 `tre-425) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-425 `typ-425))
3316+ (weld (check ~.types-generic-gates src-426 `tok-426 `tre-426) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-426 `typ-426))
32793317++ test-types-generic-import-reverse
3280− (weld (weld (check ~.types-generic-import-reverse src-426 `tok-426 `tre-426) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-426 `typ-426 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-426-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-426 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-426-1]]))
3318+ (weld (weld (check ~.types-generic-import-reverse src-427 `tok-427 `tre-427) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-427 `typ-427 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-427-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-427 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-427-1]]))
32813319++ test-types-generic-lexical-alias
3282− (weld (check ~.types-generic-lexical-alias src-427 `tok-427 `tre-427) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-427 `typ-427))
3320+ (weld (check ~.types-generic-lexical-alias src-428 `tok-428 `tre-428) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-428 `typ-428))
32833321++ test-types-generic-local-parameter
3284− (weld (check ~.types-generic-local-parameter src-428 `tok-428 `tre-428) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-428 `typ-428))
3322+ (weld (check ~.types-generic-local-parameter src-429 `tok-429 `tre-429) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-429 `typ-429))
32853323++ test-types-generic-local-scope
3286− (weld (check ~.types-generic-local-scope src-429 `tok-429 `tre-429) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-429 `typ-429))
3324+ (weld (check ~.types-generic-local-scope src-430 `tok-430 `tre-430) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-430 `typ-430))
32873325++ test-types-generic-module
3288− (weld (weld (check ~.types-generic-module src-430 `tok-430 `tre-430) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-430 `typ-430 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-430-1]])) (check-module-trees ~.types-generic-module `mtre-430 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-430-1]]))
3326+ (weld (weld (check ~.types-generic-module src-431 `tok-431 `tre-431) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-431 `typ-431 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-431-1]])) (check-module-trees ~.types-generic-module `mtre-431 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-431-1]]))
32893327++ test-types-generic-nested-scope
3290− (weld (check ~.types-generic-nested-scope src-431 `tok-431 `tre-431) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-431 `typ-431))
3328+ (weld (check ~.types-generic-nested-scope src-432 `tok-432 `tre-432) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-432 `typ-432))
32913329++ test-types-generic-parameters
3292− (weld (check ~.types-generic-parameters src-432 `tok-432 `tre-432) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-432 `typ-432))
3330+ (weld (check ~.types-generic-parameters src-433 `tok-433 `tre-433) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-433 `typ-433))
32933331++ test-types-generic-record
3294− (weld (check ~.types-generic-record src-433 `tok-433 `tre-433) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-433 `typ-433))
3332+ (weld (check ~.types-generic-record src-434 `tok-434 `tre-434) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-434 `typ-434))
32953333++ test-types-generic-recursive-union
3296− (weld (check ~.types-generic-recursive-union src-434 `tok-434 `tre-434) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-434 `typ-434))
3334+ (weld (check ~.types-generic-recursive-union src-435 `tok-435 `tre-435) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-435 `typ-435))
32973335++ test-types-generic-repeated
3298− (weld (check ~.types-generic-repeated src-435 `tok-435 `tre-435) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-435 `typ-435))
3336+ (weld (check ~.types-generic-repeated src-436 `tok-436 `tre-436) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-436 `typ-436))
32993337++ test-types-generic-result-context
3300− (weld (check ~.types-generic-result-context src-436 `tok-436 `tre-436) (check-types ~.types-generic-result-context ~[%tests %golden ~.types-generic-result-context %source %jibb] src-436 `typ-436))
3338+ (weld (check ~.types-generic-result-context src-437 `tok-437 `tre-437) (check-types ~.types-generic-result-context ~[%tests %golden ~.types-generic-result-context %source %jibb] src-437 `typ-437))
33013339++ test-types-generic-union-alias
3302− (weld (check ~.types-generic-union-alias src-437 `tok-437 `tre-437) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-437 `typ-437))
3340+ (weld (check ~.types-generic-union-alias src-438 `tok-438 `tre-438) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-438 `typ-438))
33033341++ test-types-generic-union-alias-face
3304− (weld (weld (check ~.types-generic-union-alias-face src-438 `tok-438 `tre-438) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-438 `typ-438 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-438-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-438 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-438-1]]))
3342+ (weld (weld (check ~.types-generic-union-alias-face src-439 `tok-439 `tre-439) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-439 `typ-439 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-439-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-439 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-439-1]]))
33053343++ test-types-generic-union-capitals
3306− (weld (check ~.types-generic-union-capitals src-439 `tok-439 `tre-439) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-439 `typ-439))
3344+ (weld (check ~.types-generic-union-capitals src-440 `tok-440 `tre-440) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-440 `typ-440))
33073345++ test-types-generic-union-errors
3308− (weld (check ~.types-generic-union-errors src-440 `tok-440 `tre-440) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-440 `typ-440))
3346+ (weld (check ~.types-generic-union-errors src-441 `tok-441 `tre-441) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-441 `typ-441))
33093347++ test-types-generic-union-escaping
3310− (weld (weld (check ~.types-generic-union-escaping src-441 `tok-441 `tre-441) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-441 `typ-441 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-441-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-441-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-441 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-441-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-441-2]]))
3348+ (weld (weld (check ~.types-generic-union-escaping src-442 `tok-442 `tre-442) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-442 `typ-442 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-442-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-442-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-442 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-442-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-442-2]]))
33113349++ test-types-generic-union-import
3312− (weld (weld (check ~.types-generic-union-import src-442 `tok-442 `tre-442) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-442 `typ-442 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-442-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-442-2]])) (check-module-trees ~.types-generic-union-import `mtre-442 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-442-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-442-2]]))
3350+ (weld (weld (check ~.types-generic-union-import src-443 `tok-443 `tre-443) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-443 `typ-443 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-443-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-443-2]])) (check-module-trees ~.types-generic-union-import `mtre-443 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-443-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-443-2]]))
33133351++ test-types-generic-union-local
3314− (weld (check ~.types-generic-union-local src-443 `tok-443 `tre-443) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-443 `typ-443))
3352+ (weld (check ~.types-generic-union-local src-444 `tok-444 `tre-444) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-444 `typ-444))
33153353++ test-types-generic-union-transitive
3316− (weld (weld (check ~.types-generic-union-transitive src-444 `tok-444 `tre-444) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-444 `typ-444 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-444-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-444-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-444 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-444-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-444-2]]))
3354+ (weld (weld (check ~.types-generic-union-transitive src-445 `tok-445 `tre-445) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-445 `typ-445 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-445-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-445-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-445 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-445-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-445-2]]))
33173355++ test-types-hole-concrete
3318− (weld (check ~.types-hole-concrete src-445 `tok-445 `tre-445) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-445 `typ-445))
3356+ (weld (check ~.types-hole-concrete src-446 `tok-446 `tre-446) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-446 `typ-446))
33193357++ test-types-hole-generic-mold
3320− (weld (check ~.types-hole-generic-mold src-446 `tok-446 `tre-446) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-446 `typ-446))
3358+ (weld (check ~.types-hole-generic-mold src-447 `tok-447 `tre-447) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-447 `typ-447))
33213359++ test-types-hole-local-boundary
3322− (weld (check ~.types-hole-local-boundary src-447 `tok-447 `tre-447) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-447 `typ-447))
3360+ (weld (check ~.types-hole-local-boundary src-448 `tok-448 `tre-448) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-448 `typ-448))
33233361++ test-types-hole-module-boundary
3324− (weld (weld (check ~.types-hole-module-boundary src-448 `tok-448 `tre-448) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-448 `typ-448 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-448-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-448 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-448-1]]))
3362+ (weld (weld (check ~.types-hole-module-boundary src-449 `tok-449 `tre-449) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-449 `typ-449 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-449-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-449 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-449-1]]))
33253363++ test-types-hole-named-complex
3326− (weld (check ~.types-hole-named-complex src-449 `tok-449 `tre-449) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-449 `typ-449))
3364+ (weld (check ~.types-hole-named-complex src-450 `tok-450 `tre-450) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-450 `typ-450))
33273365++ test-types-hole-numeric-capture
3328− (weld (check ~.types-hole-numeric-capture src-450 `tok-450 `tre-450) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-450 `typ-450))
3366+ (weld (check ~.types-hole-numeric-capture src-451 `tok-451 `tre-451) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-451 `typ-451))
33293367++ test-types-hole-unbound-mold
3330− (weld (check ~.types-hole-unbound-mold src-451 `tok-451 `tre-451) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-451 `typ-451))
3368+ (weld (check ~.types-hole-unbound-mold src-452 `tok-452 `tre-452) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-452 `typ-452))
33313369++ test-types-hole-unsupported
3332− (weld (check ~.types-hole-unsupported src-452 `tok-452 `tre-452) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-452 `typ-452))
3370+ (weld (check ~.types-hole-unsupported src-453 `tok-453 `tre-453) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-453 `typ-453))
33333371++ test-types-hole-user-generic
3334− (weld (check ~.types-hole-user-generic src-453 `tok-453 `tre-453) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-453 `typ-453))
3372+ (weld (check ~.types-hole-user-generic src-454 `tok-454 `tre-454) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-454 `typ-454))
33353373++ test-types-hole-user-named
3336− (weld (check ~.types-hole-user-named src-454 `tok-454 `tre-454) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-454 `typ-454))
3374+ (weld (check ~.types-hole-user-named src-455 `tok-455 `tre-455) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-455 `typ-455))
33373375++ test-types-hole-user-value
3338− (weld (check ~.types-hole-user-value src-455 `tok-455 `tre-455) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-455 `typ-455))
3376+ (weld (check ~.types-hole-user-value src-456 `tok-456 `tre-456) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-456 `typ-456))
33393377++ test-types-import-duplicate-mark
3340− (weld (check ~.types-import-duplicate-mark src-456 `tok-456 `tre-456) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-456 `typ-456 ~ ~[[%duplicate mark-456-1]]))
3378+ (weld (check ~.types-import-duplicate-mark src-457 `tok-457 `tre-457) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-457 `typ-457 ~ ~[[%duplicate mark-457-1]]))
33413379++ test-types-import-duplicate-sur
3342− (weld (check ~.types-import-duplicate-sur src-457 `tok-457 `tre-457) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-457 `typ-457 ~[[%fixture %direct imp-457-1] [%fixture %nested imp-457-2] [%fixture %valid imp-457-3]]))
3380+ (weld (check ~.types-import-duplicate-sur src-458 `tok-458 `tre-458) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-458 `typ-458 ~[[%fixture %direct imp-458-1] [%fixture %nested imp-458-2] [%fixture %valid imp-458-3]]))
33433381++ test-types-import-hoon-flags
3344− (weld (check ~.types-import-hoon-flags src-458 `tok-458 `tre-458) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-458 `typ-458 ~[[%flags %flag imp-458-1] [%flags %yes imp-458-2] [%flags %no imp-458-3] [%flags %record imp-458-4]]))
3382+ (weld (check ~.types-import-hoon-flags src-459 `tok-459 `tre-459) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-459 `typ-459 ~[[%flags %flag imp-459-1] [%flags %yes imp-459-2] [%flags %no imp-459-3] [%flags %record imp-459-4]]))
33453383++ test-types-import-hoon-noun
3346− (weld (check ~.types-import-hoon-noun src-459 `tok-459 `tre-459) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-459 `typ-459 ~[[%fixture %any imp-459-1] [%fixture %payload imp-459-2] [%fixture %option imp-459-3] [%fixture %overlap imp-459-4]]))
3384+ (weld (check ~.types-import-hoon-noun src-460 `tok-460 `tre-460) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-460 `typ-460 ~[[%fixture %any imp-460-1] [%fixture %payload imp-460-2] [%fixture %option imp-460-3] [%fixture %overlap imp-460-4]]))
33473385++ test-types-import-mark
3348− (weld (check ~.types-import-mark src-460 `tok-460 `tre-460) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-460 `typ-460 ~[[%fixture %title imp-460-1]] ~[[%label mark-460-1]]))
3386+ (weld (check ~.types-import-mark src-461 `tok-461 `tre-461) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-461 `typ-461 ~[[%fixture %title imp-461-1]] ~[[%label mark-461-1]]))
33493387++ test-types-import-mark-record
3350− (weld (check ~.types-import-mark-record src-461 `tok-461 `tre-461) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-461 `typ-461 ~ ~[[%note mark-461-1] [%choice mark-461-2]]))
3388+ (weld (check ~.types-import-mark-record src-462 `tok-462 `tre-462) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-462 `typ-462 ~ ~[[%note mark-462-1] [%choice mark-462-2]]))
33513389++ test-types-import-missing-mold
3352− (weld (check ~.types-import-missing-mold src-462 `tok-462 `tre-462) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-462 `typ-462 ~[[%fixture %missing imp-462-1]]))
3390+ (weld (check ~.types-import-missing-mold src-463 `tok-463 `tre-463) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-463 `typ-463 ~[[%fixture %missing imp-463-1]]))
33533391++ test-types-import-sur
3354− (weld (check ~.types-import-sur src-463 `tok-463 `tre-463) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-463 `typ-463 ~[[%fixture %title imp-463-1] [%fixture %pair imp-463-2]]))
3392+ (weld (check ~.types-import-sur src-464 `tok-464 `tre-464) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-464 `typ-464 ~[[%fixture %title imp-464-1] [%fixture %pair imp-464-2]]))
33553393++ test-types-import-sur-record-graph
3356− (weld (weld (check ~.types-import-sur-record-graph src-464 `tok-464 `tre-464) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-464 `typ-464 ~[[%fixture %entry imp-464-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-464 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-464-1]]))
3394+ (weld (weld (check ~.types-import-sur-record-graph src-465 `tok-465 `tre-465) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-465 `typ-465 ~[[%fixture %entry imp-465-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-465-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-465 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-465-1]]))
33573395++ test-types-import-tlon-notes
3358− (weld (check ~.types-import-tlon-notes src-465 `tok-465 `tre-465) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-465 `typ-465 ~[[%notes %u-note imp-465-1] [%notes %a-note imp-465-2] [%notes %u-notebook imp-465-3] [%notes %u-notes imp-465-4] [%notes %log imp-465-5] [%notes %import-node imp-465-6] [%notes %a-notebook imp-465-7]]))
3396+ (weld (check ~.types-import-tlon-notes src-466 `tok-466 `tre-466) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-466 `typ-466 ~[[%notes %u-note imp-466-1] [%notes %a-note imp-466-2] [%notes %u-notebook imp-466-3] [%notes %u-notes imp-466-4] [%notes %log imp-466-5] [%notes %import-node imp-466-6] [%notes %a-notebook imp-466-7]]))
33593397++ test-types-list-branch
3360− (weld (check ~.types-list-branch src-466 `tok-466 `tre-466) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-466 `typ-466 ~ ~ ~))
3398+ (weld (check ~.types-list-branch src-467 `tok-467 `tre-467) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-467 `typ-467 ~ ~ ~))
33613399++ test-types-list-cons
3362− (weld (check ~.types-list-cons src-467 `tok-467 `tre-467) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-467 `typ-467 ~ ~ ~))
3400+ (weld (check ~.types-list-cons src-468 `tok-468 `tre-468) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-468 `typ-468 ~ ~ ~))
33633401++ test-types-list-context
3364− (weld (check ~.types-list-context src-468 `tok-468 `tre-468) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-468 `typ-468 ~ ~ ~))
3402+ (weld (check ~.types-list-context src-469 `tok-469 `tre-469) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-469 `typ-469 ~ ~ ~))
33653403++ test-types-list-imported
3366− (weld (check ~.types-list-imported src-469 `tok-469 `tre-469) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-469 `typ-469 ~[[%fixture %texts imp-469-1] [%fixture %ships imp-469-2]] ~ ~))
3404+ (weld (check ~.types-list-imported src-470 `tok-470 `tre-470) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-470 `typ-470 ~[[%fixture %texts imp-470-1] [%fixture %ships imp-470-2]] ~ ~))
33673405++ test-types-list-open
3368− (weld (check ~.types-list-open src-470 `tok-470 `tre-470) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-470 `typ-470 ~ ~ ~))
3406+ (weld (check ~.types-list-open src-471 `tok-471 `tre-471) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-471 `typ-471 ~ ~ ~))
33693407++ test-types-list-open-constraints
3370− (weld (check ~.types-list-open-constraints src-471 `tok-471 `tre-471) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-471 `typ-471 ~ ~ ~))
3408+ (weld (check ~.types-list-open-constraints src-472 `tok-472 `tre-472) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-472 `typ-472 ~ ~ ~))
33713409++ test-types-list-pattern-imported
3372− (weld (check ~.types-list-pattern-imported src-472 `tok-472 `tre-472) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-472 `typ-472 ~[[%fixture %texts imp-472-1] [%fixture %text-set imp-472-2]] ~ ~))
3410+ (weld (check ~.types-list-pattern-imported src-473 `tok-473 `tre-473) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-473 `typ-473 ~[[%fixture %texts imp-473-1] [%fixture %text-set imp-473-2]] ~ ~))
33733411++ test-types-list-patterns
3374− (weld (check ~.types-list-patterns src-473 `tok-473 `tre-473) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-473 `typ-473 ~ ~ ~))
3412+ (weld (check ~.types-list-patterns src-474 `tok-474 `tre-474) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-474 `typ-474 ~ ~ ~))
33753413++ test-types-list-zero-fit
3376− (weld (check ~.types-list-zero-fit src-474 `tok-474 `tre-474) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-474 `typ-474 ~ ~ ~))
3414+ (weld (check ~.types-list-zero-fit src-475 `tok-475 `tre-475) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-475 `typ-475 ~ ~ ~))
33773415++ test-types-literal-constructor-nouns
3378− (weld (check ~.types-literal-constructor-nouns src-475 `tok-475 `tre-475) (check-types ~.types-literal-constructor-nouns ~[%tests %golden ~.types-literal-constructor-nouns %source %jibb] src-475 `typ-475))
3416+ (weld (check ~.types-literal-constructor-nouns src-476 `tok-476 `tre-476) (check-types ~.types-literal-constructor-nouns ~[%tests %golden ~.types-literal-constructor-nouns %source %jibb] src-476 `typ-476))
33793417++ test-types-local-capitals
3380− (weld (check ~.types-local-capitals src-476 `tok-476 `tre-476) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-476 `typ-476 ~ ~ ~))
3418+ (weld (check ~.types-local-capitals src-477 `tok-477 `tre-477) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-477 `typ-477 ~ ~ ~))
33813419++ test-types-local-recursive
3382− (weld (check ~.types-local-recursive src-477 `tok-477 `tre-477) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-477 `typ-477 ~ ~ ~))
3420+ (weld (check ~.types-local-recursive src-478 `tok-478 `tre-478) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-478 `typ-478 ~ ~ ~))
33833421++ test-types-local-scc
3384− (weld (check ~.types-local-scc src-478 `tok-478 `tre-478) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-478 `typ-478 ~ ~ ~))
3422+ (weld (check ~.types-local-scc src-479 `tok-479 `tre-479) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-479 `typ-479 ~ ~ ~))
33853423++ test-types-local-scc-adversarial
3386− (weld (check ~.types-local-scc-adversarial src-479 `tok-479 `tre-479) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-479 `typ-479 ~ ~ ~))
3424+ (weld (check ~.types-local-scc-adversarial src-480 `tok-480 `tre-480) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-480 `typ-480 ~ ~ ~))
33873425++ test-types-loobean-singleton-source
3388− (weld (check ~.types-loobean-singleton-source src-480 `tok-480 `tre-480) (check-types ~.types-loobean-singleton-source ~[%tests %golden ~.types-loobean-singleton-source %source %jibb] src-480 `typ-480))
3426+ (weld (check ~.types-loobean-singleton-source src-481 `tok-481 `tre-481) (check-types ~.types-loobean-singleton-source ~[%tests %golden ~.types-loobean-singleton-source %source %jibb] src-481 `typ-481))
33893427++ test-types-loobean-union-context
3390− (weld (check ~.types-loobean-union-context src-481 `tok-481 `tre-481) (check-types ~.types-loobean-union-context ~[%tests %golden ~.types-loobean-union-context %source %jibb] src-481 `typ-481))
3428+ (weld (check ~.types-loobean-union-context src-482 `tok-482 `tre-482) (check-types ~.types-loobean-union-context ~[%tests %golden ~.types-loobean-union-context %source %jibb] src-482 `typ-482))
33913429++ test-types-missing-tag-context
3392− (weld (check ~.types-missing-tag-context src-482 `tok-482 `tre-482) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-482 `typ-482 ~ ~ ~))
3430+ (weld (check ~.types-missing-tag-context src-483 `tok-483 `tre-483) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-483 `typ-483 ~ ~ ~))
33933431++ test-types-missing-tag-imported
3394− (weld (check ~.types-missing-tag-imported src-483 `tok-483 `tre-483) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-483 `typ-483 ~[[%fixture %choice imp-483-1] [%fixture %nested-choice imp-483-2]]))
3432+ (weld (check ~.types-missing-tag-imported src-484 `tok-484 `tre-484) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-484 `typ-484 ~[[%fixture %choice imp-484-1] [%fixture %nested-choice imp-484-2]]))
33953433++ test-types-missing-tag-named
3396− (weld (check ~.types-missing-tag-named src-484 `tok-484 `tre-484) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-484 `typ-484 ~ ~ ~))
3434+ (weld (check ~.types-missing-tag-named src-485 `tok-485 `tre-485) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-485 `typ-485 ~ ~ ~))
33973435++ test-types-module-field-duplicate
3398− (weld (weld (check ~.types-module-field-duplicate src-485 `tok-485 `tre-485) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-485 `typ-485 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-485-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-485 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-485-1]]))
3436+ (weld (weld (check ~.types-module-field-duplicate src-486 `tok-486 `tre-486) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-486 `typ-486 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-486 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]]))
33993437++ test-types-module-field-nonrecord
3400− (weld (weld (check ~.types-module-field-nonrecord src-486 `tok-486 `tre-486) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-486 `typ-486 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-486 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-486-1]]))
3438+ (weld (weld (check ~.types-module-field-nonrecord src-487 `tok-487 `tre-487) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-487 `typ-487 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-487 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]]))
34013439++ test-types-module-field-path
3402− (weld (weld (check ~.types-module-field-path src-487 `tok-487 `tre-487) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-487 `typ-487 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]])) (check-module-trees ~.types-module-field-path `mtre-487 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-487-1]]))
3440+ (weld (weld (check ~.types-module-field-path src-488 `tok-488 `tre-488) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]])) (check-module-trees ~.types-module-field-path `mtre-488 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]]))
34033441++ test-types-module-field-shadow
3404− (weld (weld (check ~.types-module-field-shadow src-488 `tok-488 `tre-488) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-488 `typ-488 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]])) (check-module-trees ~.types-module-field-shadow `mtre-488 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-488-1]]))
3442+ (weld (weld (check ~.types-module-field-shadow src-489 `tok-489 `tre-489) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-489 `typ-489 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-489-1]])) (check-module-trees ~.types-module-field-shadow `mtre-489 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-489-1]]))
34053443++ test-types-module-fixtures
3406− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-489 `tok-489 `tre-489) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-489 `typ-489 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-489-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-489-2]])) (check-module-trees ~.types-module-fixtures `mtre-489 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-489-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-489-2]]))
3444+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-490 `tok-490 `tre-490) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-490 `typ-490 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-490-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-490-2]])) (check-module-trees ~.types-module-fixtures `mtre-490 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-490-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-490-2]]))
34073445++ test-types-module-mixed
3408− (weld (weld (check ~.types-module-mixed src-490 `tok-490 `tre-490) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-490 `typ-490 ~[[%fixture %title imp-490-1]] ~[[%label mark-490-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-490-1]])) (check-module-trees ~.types-module-mixed `mtre-490 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-490-1]]))
3446+ (weld (weld (check ~.types-module-mixed src-491 `tok-491 `tre-491) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-491 `typ-491 ~[[%fixture %title imp-491-1]] ~[[%label mark-491-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-491-1]])) (check-module-trees ~.types-module-mixed `mtre-491 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-491-1]]))
34093447++ test-types-multi-call
3410− (weld (check ~.types-multi-call src-491 `tok-491 `tre-491) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-491 `typ-491 ~ ~ ~))
3448+ (weld (check ~.types-multi-call src-492 `tok-492 `tre-492) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-492 `typ-492 ~ ~ ~))
34113449++ test-types-multi-import
3412− (weld (weld (check ~.types-multi-import src-492 `tok-492 `tre-492) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-492 `typ-492 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-492-1]])) (check-module-trees ~.types-multi-import `mtre-492 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-492-1]]))
3450+ (weld (weld (check ~.types-multi-import src-493 `tok-493 `tre-493) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-493 `typ-493 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-493-1]])) (check-module-trees ~.types-multi-import `mtre-493 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-493-1]]))
34133451++ test-types-nested-missing-tag
3414− (weld (check ~.types-nested-missing-tag src-493 `tok-493 `tre-493) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-493 `typ-493 ~ ~ ~))
3452+ (weld (check ~.types-nested-missing-tag src-494 `tok-494 `tre-494) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-494 `typ-494 ~ ~ ~))
34153453++ test-types-nested-noun-context
3416− (weld (check ~.types-nested-noun-context src-494 `tok-494 `tre-494) (check-types ~.types-nested-noun-context ~[%tests %golden ~.types-nested-noun-context %source %jibb] src-494 `typ-494))
3454+ (weld (check ~.types-nested-noun-context src-495 `tok-495 `tre-495) (check-types ~.types-nested-noun-context ~[%tests %golden ~.types-nested-noun-context %source %jibb] src-495 `typ-495))
34173455++ test-types-nested-shallow-preserve
3418− (weld (check ~.types-nested-shallow-preserve src-495 `tok-495 `tre-495) (check-module-types ~.types-nested-shallow-preserve ~[%tests %golden ~.types-nested-shallow-preserve %source %jibb] src-495 `typ-495 ~ ~ ~))
3456+ (weld (check ~.types-nested-shallow-preserve src-496 `tok-496 `tre-496) (check-module-types ~.types-nested-shallow-preserve ~[%tests %golden ~.types-nested-shallow-preserve %source %jibb] src-496 `typ-496 ~ ~ ~))
34193457++ test-types-nested-union-context
3420− (weld (check ~.types-nested-union-context src-496 `tok-496 `tre-496) (check-types ~.types-nested-union-context ~[%tests %golden ~.types-nested-union-context %source %jibb] src-496 `typ-496))
3458+ (weld (check ~.types-nested-union-context src-497 `tok-497 `tre-497) (check-types ~.types-nested-union-context ~[%tests %golden ~.types-nested-union-context %source %jibb] src-497 `typ-497))
34213459++ test-types-null-context
3422− (weld (check ~.types-null-context src-497 `tok-497 `tre-497) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-497 `typ-497))
3460+ (weld (check ~.types-null-context src-498 `tok-498 `tre-498) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-498 `typ-498))
34233461++ test-types-null-overlap
3424− (weld (check ~.types-null-overlap src-498 `tok-498 `tre-498) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-498 `typ-498))
3462+ (weld (check ~.types-null-overlap src-499 `tok-499 `tre-499) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-499 `typ-499))
34253463++ test-types-null-unresolved
3426− (weld (check ~.types-null-unresolved src-499 `tok-499 `tre-499) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-499 `typ-499))
3464+ (weld (check ~.types-null-unresolved src-500 `tok-500 `tre-500) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-500 `typ-500))
34273465++ test-types-pair-context
3428− (weld (check ~.types-pair-context src-500 `tok-500 `tre-500) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-500 `typ-500 ~ ~ ~))
3466+ (weld (check ~.types-pair-context src-501 `tok-501 `tre-501) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-501 `typ-501 ~ ~ ~))
34293467++ test-types-partial-apply
3430− (weld (check ~.types-partial-apply src-501 `tok-501 `tre-501) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-501 `typ-501))
3468+ (weld (check ~.types-partial-apply src-502 `tok-502 `tre-502) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-502 `typ-502))
34313469++ test-types-partial-atom-alias
3432− (weld (check ~.types-partial-atom-alias src-502 `tok-502 `tre-502) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-502 `typ-502))
3470+ (weld (check ~.types-partial-atom-alias src-503 `tok-503 `tre-503) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-503 `typ-503))
34333471++ test-types-partial-atom-constraint
3434− (weld (check ~.types-partial-atom-constraint src-503 `tok-503 `tre-503) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-503 `typ-503))
3472+ (weld (check ~.types-partial-atom-constraint src-504 `tok-504 `tre-504) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-504 `typ-504))
34353473++ test-types-partial-atom-widening
3436− (weld (check ~.types-partial-atom-widening src-504 `tok-504 `tre-504) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-504 `typ-504))
3474+ (weld (check ~.types-partial-atom-widening src-505 `tok-505 `tre-505) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-505 `typ-505))
34373475++ test-types-partial-aura
3438− (weld (check ~.types-partial-aura src-505 `tok-505 `tre-505) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-505 `typ-505))
3476+ (weld (check ~.types-partial-aura src-506 `tok-506 `tre-506) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-506 `typ-506))
34393477++ test-types-partial-aura-family
3440− (weld (check ~.types-partial-aura-family src-506 `tok-506 `tre-506) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-506 `typ-506))
3478+ (weld (check ~.types-partial-aura-family src-507 `tok-507 `tre-507) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-507 `typ-507))
34413479++ test-types-partial-aura-generalization
3442− (weld (check ~.types-partial-aura-generalization src-507 `tok-507 `tre-507) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-507 `typ-507))
3480+ (weld (check ~.types-partial-aura-generalization src-508 `tok-508 `tre-508) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-508 `typ-508))
34433481++ test-types-partial-bare-atom
3444− (weld (check ~.types-partial-bare-atom src-508 `tok-508 `tre-508) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-508 `typ-508))
3482+ (weld (check ~.types-partial-bare-atom src-509 `tok-509 `tre-509) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-509 `typ-509))
34453483++ test-types-partial-branch-widening
3446− (weld (check ~.types-partial-branch-widening src-509 `tok-509 `tre-509) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-509 `typ-509))
3484+ (weld (check ~.types-partial-branch-widening src-510 `tok-510 `tre-510) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-510 `typ-510))
34473485++ test-types-partial-conflicting-sites
3448− (weld (check ~.types-partial-conflicting-sites src-510 `tok-510 `tre-510) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-510 `typ-510))
3486+ (weld (check ~.types-partial-conflicting-sites src-511 `tok-511 `tre-511) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-511 `typ-511))
34493487++ test-types-partial-decimal-default
3450− (weld (check ~.types-partial-decimal-default src-511 `tok-511 `tre-511) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-511 `typ-511))
3488+ (weld (check ~.types-partial-decimal-default src-512 `tok-512 `tre-512) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-512 `typ-512))
34513489++ test-types-partial-dependency-chain
3452− (weld (check ~.types-partial-dependency-chain src-512 `tok-512 `tre-512) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-512 `typ-512))
3490+ (weld (check ~.types-partial-dependency-chain src-513 `tok-513 `tre-513) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-513 `typ-513))
34533491++ test-types-partial-explicit-capital
3454− (weld (check ~.types-partial-explicit-capital src-513 `tok-513 `tre-513) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-513 `typ-513))
3492+ (weld (check ~.types-partial-explicit-capital src-514 `tok-514 `tre-514) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-514 `typ-514))
34553493++ test-types-partial-forward
3456− (weld (check ~.types-partial-forward src-514 `tok-514 `tre-514) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-514 `typ-514))
3494+ (weld (check ~.types-partial-forward src-515 `tok-515 `tre-515) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-515 `typ-515))
34573495++ test-types-partial-generalization
3458− (weld (check ~.types-partial-generalization src-515 `tok-515 `tre-515) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-515 `typ-515))
3496+ (weld (check ~.types-partial-generalization src-516 `tok-516 `tre-516) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-516 `typ-516))
34593497++ test-types-partial-identity
3460− (weld (check ~.types-partial-identity src-516 `tok-516 `tre-516) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-516 `typ-516))
3498+ (weld (check ~.types-partial-identity src-517 `tok-517 `tre-517) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-517 `typ-517))
34613499++ test-types-partial-independent-atoms
3462− (weld (check ~.types-partial-independent-atoms src-517 `tok-517 `tre-517) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-517 `typ-517))
3500+ (weld (check ~.types-partial-independent-atoms src-518 `tok-518 `tre-518) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-518 `typ-518))
34633501++ test-types-partial-local-molds
3464− (weld (check ~.types-partial-local-molds src-518 `tok-518 `tre-518) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-518 `typ-518))
3502+ (weld (check ~.types-partial-local-molds src-519 `tok-519 `tre-519) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-519 `typ-519))
34653503++ test-types-partial-locals
3466− (weld (check ~.types-partial-locals src-519 `tok-519 `tre-519) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-519 `typ-519))
3504+ (weld (check ~.types-partial-locals src-520 `tok-520 `tre-520) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-520 `typ-520))
34673505++ test-types-partial-many-atom-constraints
3468− (weld (check ~.types-partial-many-atom-constraints src-520 `tok-520 `tre-520) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-520 `typ-520))
3506+ (weld (check ~.types-partial-many-atom-constraints src-521 `tok-521 `tre-521) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-521 `typ-521))
34693507++ test-types-partial-mold-bare-aura
3470− (weld (check ~.types-partial-mold-bare-aura src-521 `tok-521 `tre-521) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-521 `typ-521))
3508+ (weld (check ~.types-partial-mold-bare-aura src-522 `tok-522 `tre-522) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-522 `typ-522))
34713509++ test-types-partial-mold-composite
3472− (weld (check ~.types-partial-mold-composite src-522 `tok-522 `tre-522) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-522 `typ-522))
3510+ (weld (check ~.types-partial-mold-composite src-523 `tok-523 `tre-523) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-523 `typ-523))
34733511++ test-types-partial-mold-forward
3474− (weld (check ~.types-partial-mold-forward src-523 `tok-523 `tre-523) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-523 `typ-523))
3512+ (weld (check ~.types-partial-mold-forward src-524 `tok-524 `tre-524) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-524 `typ-524))
34753513++ test-types-partial-mold-recursive
3476− (weld (check ~.types-partial-mold-recursive src-524 `tok-524 `tre-524) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-524 `typ-524))
3514+ (weld (check ~.types-partial-mold-recursive src-525 `tok-525 `tre-525) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-525 `typ-525))
34773515++ test-types-partial-occurs
3478− (weld (check ~.types-partial-occurs src-525 `tok-525 `tre-525) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-525 `typ-525))
3516+ (weld (check ~.types-partial-occurs src-526 `tok-526 `tre-526) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-526 `typ-526))
34793517++ test-types-partial-projection
3480− (weld (check ~.types-partial-projection src-526 `tok-526 `tre-526) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-526 `typ-526))
3518+ (weld (check ~.types-partial-projection src-527 `tok-527 `tre-527) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-527 `typ-527))
34813519++ test-types-partial-shadow-global
3482− (weld (check ~.types-partial-shadow-global src-527 `tok-527 `tre-527) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-527 `typ-527))
3520+ (weld (check ~.types-partial-shadow-global src-528 `tok-528 `tre-528) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-528 `typ-528))
34833521++ test-types-partial-shared-tvar
3484− (weld (check ~.types-partial-shared-tvar src-528 `tok-528 `tre-528) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-528 `typ-528))
3522+ (weld (check ~.types-partial-shared-tvar src-529 `tok-529 `tre-529) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-529 `typ-529))
34853523++ test-types-partial-union-cases
3486− (weld (check ~.types-partial-union-cases src-529 `tok-529 `tre-529) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-529 `typ-529))
3524+ (weld (check ~.types-partial-union-cases src-530 `tok-530 `tre-530) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-530 `typ-530))
34873525++ test-types-partial-union-edges
3488− (weld (check ~.types-partial-union-edges src-530 `tok-530 `tre-530) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-530 `typ-530))
3526+ (weld (check ~.types-partial-union-edges src-531 `tok-531 `tre-531) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-531 `typ-531))
34893527++ test-types-partial-union-nested-nouns
3490− (weld (check ~.types-partial-union-nested-nouns src-531 `tok-531 `tre-531) (check-types ~.types-partial-union-nested-nouns ~[%tests %golden ~.types-partial-union-nested-nouns %source %jibb] src-531 `typ-531))
3528+ (weld (check ~.types-partial-union-nested-nouns src-532 `tok-532 `tre-532) (check-types ~.types-partial-union-nested-nouns ~[%tests %golden ~.types-partial-union-nested-nouns %source %jibb] src-532 `typ-532))
34913529++ test-types-partial-unresolved-tag
3492− (weld (check ~.types-partial-unresolved-tag src-532 `tok-532 `tre-532) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-532 `typ-532))
3530+ (weld (check ~.types-partial-unresolved-tag src-533 `tok-533 `tre-533) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-533 `typ-533))
34933531++ test-types-positional-faces
3494− (weld (check ~.types-positional-faces src-533 `tok-533 `tre-533) (check-types ~.types-positional-faces ~[%tests %golden ~.types-positional-faces %source %jibb] src-533 `typ-533))
3532+ (weld (check ~.types-positional-faces src-534 `tok-534 `tre-534) (check-types ~.types-positional-faces ~[%tests %golden ~.types-positional-faces %source %jibb] src-534 `typ-534))
34953533++ test-types-prelude-arithmetic
3496− (weld (check ~.types-prelude-arithmetic src-534 `tok-534 `tre-534) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-534 `typ-534 ~ ~ ~))
3534+ (weld (check ~.types-prelude-arithmetic src-535 `tok-535 `tre-535) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-535 `typ-535 ~ ~ ~))
34973535++ test-types-prelude-ask
3498− (weld (check ~.types-prelude-ask src-535 `tok-535 `tre-535) (check-module-types ~.types-prelude-ask ~[%tests %golden ~.types-prelude-ask %source %jibb] src-535 `typ-535 ~ ~ ~))
3536+ (weld (check ~.types-prelude-ask src-536 `tok-536 `tre-536) (check-module-types ~.types-prelude-ask ~[%tests %golden ~.types-prelude-ask %source %jibb] src-536 `typ-536 ~ ~ ~))
34993537++ test-types-prelude-bond
3500− (weld (check ~.types-prelude-bond src-536 `tok-536 `tre-536) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-536 `typ-536 ~ ~ ~))
3538+ (weld (check ~.types-prelude-bond src-537 `tok-537 `tre-537) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-537 `typ-537 ~ ~ ~))
35013539++ test-types-prelude-cmd
3502− (weld (check ~.types-prelude-cmd src-537 `tok-537 `tre-537) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-537 `typ-537 ~ ~ ~))
3540+ (weld (check ~.types-prelude-cmd src-538 `tok-538 `tre-538) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-538 `typ-538 ~ ~ ~))
3541+++ test-types-prelude-comparison
3542+ (weld (check ~.types-prelude-comparison src-539 `tok-539 `tre-539) (check-module-types ~.types-prelude-comparison ~[%tests %golden ~.types-prelude-comparison %source %jibb] src-539 `typ-539 ~ ~ ~))
35033543++ test-types-prelude-direct
3504− (weld (check ~.types-prelude-direct src-538 `tok-538 `tre-538) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-538 `typ-538 ~ ~ ~))
3544+ (weld (check ~.types-prelude-direct src-540 `tok-540 `tre-540) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-540 `typ-540 ~ ~ ~))
35053545++ test-types-prelude-functional
3506− (weld (check ~.types-prelude-functional src-539 `tok-539 `tre-539) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-539 `typ-539 ~ ~ ~))
3546+ (weld (check ~.types-prelude-functional src-541 `tok-541 `tre-541) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-541 `typ-541 ~ ~ ~))
35073547++ test-types-prelude-generic-alias
3508− (weld (weld (check ~.types-prelude-generic-alias src-540 `tok-540 `tre-540) (check-module-types ~.types-prelude-generic-alias ~[%tests %golden ~.types-prelude-generic-alias %source %jibb] src-540 `typ-540 ~ ~ ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-540-1]])) (check-module-trees ~.types-prelude-generic-alias `mtre-540 ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-540-1]]))
3548+ (weld (weld (check ~.types-prelude-generic-alias src-542 `tok-542 `tre-542) (check-module-types ~.types-prelude-generic-alias ~[%tests %golden ~.types-prelude-generic-alias %source %jibb] src-542 `typ-542 ~ ~ ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-542-1]])) (check-module-trees ~.types-prelude-generic-alias `mtre-542 ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-542-1]]))
35093549++ test-types-prelude-interface
3510− (weld (weld (check ~.types-prelude-interface src-541 `tok-541 `tre-541) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-541 `typ-541 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-541-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-541-2]])) (check-module-trees ~.types-prelude-interface `mtre-541 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-541-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-541-2]]))
3550+ (weld (weld (check ~.types-prelude-interface src-543 `tok-543 `tre-543) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-543 `typ-543 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-543-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-543-2]])) (check-module-trees ~.types-prelude-interface `mtre-543 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-543-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-543-2]]))
3551+++ test-types-prelude-lead-late
3552+ (weld (check ~.types-prelude-lead-late src-544 `tok-544 `tre-544) (check-module-types ~.types-prelude-lead-late ~[%tests %golden ~.types-prelude-lead-late %source %jibb] src-544 `typ-544 ~ ~ ~))
35113553++ test-types-prelude-lent
3512− (weld (check ~.types-prelude-lent src-542 `tok-542 `tre-542) (check-module-types ~.types-prelude-lent ~[%tests %golden ~.types-prelude-lent %source %jibb] src-542 `typ-542 ~ ~ ~))
3554+ (weld (check ~.types-prelude-lent src-545 `tok-545 `tre-545) (check-module-types ~.types-prelude-lent ~[%tests %golden ~.types-prelude-lent %source %jibb] src-545 `typ-545 ~ ~ ~))
35133555++ test-types-prelude-like
3514− (weld (check ~.types-prelude-like src-543 `tok-543 `tre-543) (check-module-types ~.types-prelude-like ~[%tests %golden ~.types-prelude-like %source %jibb] src-543 `typ-543 ~ ~ ~))
3556+ (weld (check ~.types-prelude-like src-546 `tok-546 `tre-546) (check-module-types ~.types-prelude-like ~[%tests %golden ~.types-prelude-like %source %jibb] src-546 `typ-546 ~ ~ ~))
35153557++ test-types-prelude-list-alias
3516− (weld (check ~.types-prelude-list-alias src-544 `tok-544 `tre-544) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-544 `typ-544 ~ ~ ~))
3558+ (weld (check ~.types-prelude-list-alias src-547 `tok-547 `tre-547) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-547 `typ-547 ~ ~ ~))
35173559++ test-types-prelude-list-functions
3518− (weld (weld (check ~.types-prelude-list-functions src-545 `tok-545 `tre-545) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-545 `typ-545 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-545-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-545 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-545-1]]))
3560+ (weld (weld (check ~.types-prelude-list-functions src-548 `tok-548 `tre-548) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-548 `typ-548 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-548 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-548-1]]))
35193561++ test-types-prelude-list-helpers
3520− (weld (check ~.types-prelude-list-helpers src-546 `tok-546 `tre-546) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-546 `typ-546 ~ ~ ~))
3562+ (weld (check ~.types-prelude-list-helpers src-549 `tok-549 `tre-549) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-549 `typ-549 ~ ~ ~))
35213563++ test-types-prelude-predicates
3522− (weld (check ~.types-prelude-predicates src-547 `tok-547 `tre-547) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-547 `typ-547 ~ ~ ~))
3564+ (weld (check ~.types-prelude-predicates src-550 `tok-550 `tre-550) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-550 `typ-550 ~ ~ ~))
35233565++ test-types-prelude-sub
3524− (weld (check ~.types-prelude-sub src-548 `tok-548 `tre-548) (check-module-types ~.types-prelude-sub ~[%tests %golden ~.types-prelude-sub %source %jibb] src-548 `typ-548 ~ ~ ~))
3566+ (weld (check ~.types-prelude-sub src-551 `tok-551 `tre-551) (check-module-types ~.types-prelude-sub ~[%tests %golden ~.types-prelude-sub %source %jibb] src-551 `typ-551 ~ ~ ~))
35253567++ test-types-prelude-sub-nested
3526− (weld (check ~.types-prelude-sub-nested src-549 `tok-549 `tre-549) (check-module-types ~.types-prelude-sub-nested ~[%tests %golden ~.types-prelude-sub-nested %source %jibb] src-549 `typ-549 ~ ~ ~))
3568+ (weld (check ~.types-prelude-sub-nested src-552 `tok-552 `tre-552) (check-module-types ~.types-prelude-sub-nested ~[%tests %golden ~.types-prelude-sub-nested %source %jibb] src-552 `typ-552 ~ ~ ~))
3569+++ test-types-prelude-succ
3570+ (weld (check ~.types-prelude-succ src-553 `tok-553 `tre-553) (check-module-types ~.types-prelude-succ ~[%tests %golden ~.types-prelude-succ %source %jibb] src-553 `typ-553 ~ ~ ~))
3571+++ test-types-prelude-text
3572+ (weld (check ~.types-prelude-text src-554 `tok-554 `tre-554) (check-module-types ~.types-prelude-text ~[%tests %golden ~.types-prelude-text %source %jibb] src-554 `typ-554 ~ ~ ~))
3573+++ test-types-prelude-ui
3574+ (weld (check ~.types-prelude-ui src-555 `tok-555 `tre-555) (check-module-types ~.types-prelude-ui ~[%tests %golden ~.types-prelude-ui %source %jibb] src-555 `typ-555 ~ ~ ~))
35273575++ test-types-prelude-unit-helpers
3528− (weld (check ~.types-prelude-unit-helpers src-550 `tok-550 `tre-550) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-550 `typ-550 ~ ~ ~))
3576+ (weld (check ~.types-prelude-unit-helpers src-556 `tok-556 `tre-556) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-556 `typ-556 ~ ~ ~))
3577+++ test-types-prelude-zing
3578+ (weld (check ~.types-prelude-zing src-557 `tok-557 `tre-557) (check-module-types ~.types-prelude-zing ~[%tests %golden ~.types-prelude-zing %source %jibb] src-557 `typ-557 ~ ~ ~))
35293579++ test-types-proj-explicit-context
3530− (weld (check ~.types-proj-explicit-context src-551 `tok-551 `tre-551) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-551 `typ-551 ~ ~ ~))
3580+ (weld (check ~.types-proj-explicit-context src-558 `tok-558 `tre-558) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-558 `typ-558 ~ ~ ~))
35313581++ test-types-proj-nested-no-implicit
3532− (weld (check ~.types-proj-nested-no-implicit src-552 `tok-552 `tre-552) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-552 `typ-552 ~ ~ ~))
3582+ (weld (check ~.types-proj-nested-no-implicit src-559 `tok-559 `tre-559) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-559 `typ-559 ~ ~ ~))
35333583++ test-types-proj-reserved-imported-definition
3534− (weld (weld (check ~.types-proj-reserved-imported-definition src-553 `tok-553 `tre-553) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-553 `typ-553 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-553-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-553 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-553-1]]))
3584+ (weld (weld (check ~.types-proj-reserved-imported-definition src-560 `tok-560 `tre-560) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-560 `typ-560 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-560-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-560 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-560-1]]))
35353585++ test-types-proj-reserved-jibb-import
3536− (weld (weld (check ~.types-proj-reserved-jibb-import src-554 `tok-554 `tre-554) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-554 `typ-554 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-554 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-554-1]]))
3586+ (weld (weld (check ~.types-proj-reserved-jibb-import src-561 `tok-561 `tre-561) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-561 `typ-561 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-561-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-561 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-561-1]]))
35373587++ test-types-proj-reserved-local
3538− (weld (check ~.types-proj-reserved-local src-555 `tok-555 `tre-555) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-555 `typ-555 ~ ~ ~))
3588+ (weld (check ~.types-proj-reserved-local src-562 `tok-562 `tre-562) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-562 `typ-562 ~ ~ ~))
35393589++ test-types-proj-reserved-local-mold
3540− (weld (check ~.types-proj-reserved-local-mold src-556 `tok-556 `tre-556) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-556 `typ-556 ~ ~ ~))
3590+ (weld (check ~.types-proj-reserved-local-mold src-563 `tok-563 `tre-563) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-563 `typ-563 ~ ~ ~))
35413591++ test-types-proj-reserved-mark-import
3542− (weld (check ~.types-proj-reserved-mark-import src-557 `tok-557 `tre-557) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-557 `typ-557 ~ ~ ~))
3592+ (weld (check ~.types-proj-reserved-mark-import src-564 `tok-564 `tre-564) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-564 `typ-564 ~ ~ ~))
35433593++ test-types-proj-reserved-mold
3544− (weld (check ~.types-proj-reserved-mold src-558 `tok-558 `tre-558) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-558 `typ-558 ~ ~ ~))
3594+ (weld (check ~.types-proj-reserved-mold src-565 `tok-565 `tre-565) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-565 `typ-565 ~ ~ ~))
35453595++ test-types-proj-reserved-pattern
3546− (weld (check ~.types-proj-reserved-pattern src-559 `tok-559 `tre-559) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-559 `typ-559 ~ ~ ~))
3596+ (weld (check ~.types-proj-reserved-pattern src-566 `tok-566 `tre-566) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-566 `typ-566 ~ ~ ~))
35473597++ test-types-proj-reserved-positive
3548− (weld (check ~.types-proj-reserved-positive src-560 `tok-560 `tre-560) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-560 `typ-560 ~ ~ ~))
3598+ (weld (check ~.types-proj-reserved-positive src-567 `tok-567 `tre-567) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-567 `typ-567 ~ ~ ~))
35493599++ test-types-proj-reserved-sample
3550− (weld (check ~.types-proj-reserved-sample src-561 `tok-561 `tre-561) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-561 `typ-561 ~ ~ ~))
3600+ (weld (check ~.types-proj-reserved-sample src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-568 `typ-568 ~ ~ ~))
35513601++ test-types-proj-reserved-sur-import
3552− (weld (check ~.types-proj-reserved-sur-import src-562 `tok-562 `tre-562) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-562 `typ-562 ~ ~ ~))
3602+ (weld (check ~.types-proj-reserved-sur-import src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-569 `typ-569 ~ ~ ~))
35533603++ test-types-proj-reserved-unused-pattern
3554− (weld (check ~.types-proj-reserved-unused-pattern src-563 `tok-563 `tre-563) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-563 `typ-563 ~ ~ ~))
3604+ (weld (check ~.types-proj-reserved-unused-pattern src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-570 `typ-570 ~ ~ ~))
35553605++ test-types-proj-reserved-unused-sample
3556− (weld (check ~.types-proj-reserved-unused-sample src-564 `tok-564 `tre-564) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-564 `typ-564 ~ ~ ~))
3606+ (weld (check ~.types-proj-reserved-unused-sample src-571 `tok-571 `tre-571) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-571 `typ-571 ~ ~ ~))
35573607++ test-types-proj-reserved-unused-value
3558− (weld (check ~.types-proj-reserved-unused-value src-565 `tok-565 `tre-565) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-565 `typ-565 ~ ~ ~))
3608+ (weld (check ~.types-proj-reserved-unused-value src-572 `tok-572 `tre-572) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-572 `typ-572 ~ ~ ~))
35593609++ test-types-proj-reserved-value
3560− (weld (check ~.types-proj-reserved-value src-566 `tok-566 `tre-566) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-566 `typ-566 ~ ~ ~))
3610+ (weld (check ~.types-proj-reserved-value src-573 `tok-573 `tre-573) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-573 `typ-573 ~ ~ ~))
35613611++ test-types-proj-single-duplicate
3562− (weld (check ~.types-proj-single-duplicate src-567 `tok-567 `tre-567) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-567 `typ-567 ~ ~ ~))
3612+ (weld (check ~.types-proj-single-duplicate src-574 `tok-574 `tre-574) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-574 `typ-574 ~ ~ ~))
35633613++ test-types-proj-single-field
3564− (weld (check ~.types-proj-single-field src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-568 `typ-568 ~ ~ ~))
3614+ (weld (check ~.types-proj-single-field src-575 `tok-575 `tre-575) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-575 `typ-575 ~ ~ ~))
35653615++ test-types-proj-single-sample-face
3566− (weld (check ~.types-proj-single-sample-face src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-569 `typ-569 ~ ~ ~))
3616+ (weld (check ~.types-proj-single-sample-face src-576 `tok-576 `tre-576) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-576 `typ-576 ~ ~ ~))
35673617++ test-types-proj-single-wrapped
3568− (weld (check ~.types-proj-single-wrapped src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-570 `typ-570 ~ ~ ~))
3618+ (weld (check ~.types-proj-single-wrapped src-577 `tok-577 `tre-577) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-577 `typ-577 ~ ~ ~))
35693619++ test-types-qath-faces
3570− (weld (check ~.types-qath-faces src-571 `tok-571 `tre-571) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-571 `typ-571 ~ ~ ~))
3620+ (weld (check ~.types-qath-faces src-578 `tok-578 `tre-578) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-578 `typ-578 ~ ~ ~))
35713621++ test-types-qath-holes
3572− (weld (check ~.types-qath-holes src-572 `tok-572 `tre-572) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-572 `typ-572 ~ ~ ~))
3622+ (weld (check ~.types-qath-holes src-579 `tok-579 `tre-579) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-579 `typ-579 ~ ~ ~))
35733623++ test-types-qath-module-identity
3574− (weld (weld (check ~.types-qath-module-identity src-573 `tok-573 `tre-573) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-573 `typ-573 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-573-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-573-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-573-3]])) (check-module-trees ~.types-qath-module-identity `mtre-573 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-573-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-573-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-573-3]]))
3624+ (weld (weld (check ~.types-qath-module-identity src-580 `tok-580 `tre-580) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-580 `typ-580 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-580-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-580-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-580-3]])) (check-module-trees ~.types-qath-module-identity `mtre-580 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-580-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-580-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-580-3]]))
35753625++ test-types-qath-recursive
3576− (weld (check ~.types-qath-recursive src-574 `tok-574 `tre-574) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-574 `typ-574 ~ ~ ~))
3626+ (weld (check ~.types-qath-recursive src-581 `tok-581 `tre-581) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-581 `typ-581 ~ ~ ~))
35773627++ test-types-record-bound-variable
3578− (weld (check ~.types-record-bound-variable src-575 `tok-575 `tre-575) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-575 `typ-575))
3628+ (weld (check ~.types-record-bound-variable src-582 `tok-582 `tre-582) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-582 `typ-582))
35793629++ test-types-record-cast-context
3580− (weld (check ~.types-record-cast-context src-576 `tok-576 `tre-576) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-576 `typ-576 ~ ~ ~))
3630+ (weld (check ~.types-record-cast-context src-583 `tok-583 `tre-583) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-583 `typ-583 ~ ~ ~))
35813631++ test-types-record-change
3582− (weld (check ~.types-record-change src-577 `tok-577 `tre-577) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-577 `typ-577 ~ ~ ~))
3632+ (weld (check ~.types-record-change src-584 `tok-584 `tre-584) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-584 `typ-584 ~ ~ ~))
35833633++ test-types-record-change-generic
3584− (weld (check ~.types-record-change-generic src-578 `tok-578 `tre-578) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-578 `typ-578 ~ ~ ~))
3634+ (weld (check ~.types-record-change-generic src-585 `tok-585 `tre-585) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-585 `typ-585 ~ ~ ~))
35853635++ test-types-record-faces
3586− (weld (check ~.types-record-faces src-579 `tok-579 `tre-579) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-579 `typ-579))
3636+ (weld (check ~.types-record-faces src-586 `tok-586 `tre-586) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-586 `typ-586))
35873637++ test-types-record-field-edit-separate
3588− (weld (check ~.types-record-field-edit-separate src-580 `tok-580 `tre-580) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-580 `typ-580))
3638+ (weld (check ~.types-record-field-edit-separate src-587 `tok-587 `tre-587) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-587 `typ-587))
35893639++ test-types-record-field-expr-duplicate
3590− (weld (check ~.types-record-field-expr-duplicate src-581 `tok-581 `tre-581) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-581 `typ-581))
3640+ (weld (check ~.types-record-field-expr-duplicate src-588 `tok-588 `tre-588) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-588 `typ-588))
35913641++ test-types-record-field-expr-separate
3592− (weld (check ~.types-record-field-expr-separate src-582 `tok-582 `tre-582) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-582 `typ-582))
3642+ (weld (check ~.types-record-field-expr-separate src-589 `tok-589 `tre-589) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-589 `typ-589))
35933643++ test-types-record-field-module-reachable
3594− (weld (weld (check ~.types-record-field-module-reachable src-583 `tok-583 `tre-583) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-583 `typ-583 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-583-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-583 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-583-1]]))
3644+ (weld (weld (check ~.types-record-field-module-reachable src-590 `tok-590 `tre-590) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-590 `typ-590 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-590-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-590 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-590-1]]))
35953645++ test-types-record-field-module-unused
3596− (weld (weld (check ~.types-record-field-module-unused src-584 `tok-584 `tre-584) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-584 `typ-584 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-584-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-584-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-584 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-584-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-584-2]]))
3646+ (weld (weld (check ~.types-record-field-module-unused src-591 `tok-591 `tre-591) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-591 `typ-591 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-591-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-591-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-591 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-591-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-591-2]]))
35973647++ test-types-record-field-nested-mold
3598− (weld (check ~.types-record-field-nested-mold src-585 `tok-585 `tre-585) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-585 `typ-585))
3648+ (weld (check ~.types-record-field-nested-mold src-592 `tok-592 `tre-592) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-592 `typ-592))
35993649++ test-types-record-field-outer-inner
3600− (weld (check ~.types-record-field-outer-inner src-586 `tok-586 `tre-586) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-586 `typ-586))
3650+ (weld (check ~.types-record-field-outer-inner src-593 `tok-593 `tre-593) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-593 `typ-593))
36013651++ test-types-record-field-sample-duplicate
3602− (weld (check ~.types-record-field-sample-duplicate src-587 `tok-587 `tre-587) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-587 `typ-587))
3652+ (weld (check ~.types-record-field-sample-duplicate src-594 `tok-594 `tre-594) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-594 `typ-594))
36033653++ test-types-record-field-separate-molds
3604− (weld (check ~.types-record-field-separate-molds src-588 `tok-588 `tre-588) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-588 `typ-588))
3654+ (weld (check ~.types-record-field-separate-molds src-595 `tok-595 `tre-595) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-595 `typ-595))
36053655++ test-types-record-field-unused-mold
3606− (weld (check ~.types-record-field-unused-mold src-589 `tok-589 `tre-589) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-589 `typ-589))
3656+ (weld (check ~.types-record-field-unused-mold src-596 `tok-596 `tre-596) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-596 `typ-596))
36073657++ test-types-record-import
3608− (weld (weld (check ~.types-record-import src-590 `tok-590 `tre-590) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-590 `typ-590 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-590-1]])) (check-module-trees ~.types-record-import `mtre-590 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-590-1]]))
3658+ (weld (weld (check ~.types-record-import src-597 `tok-597 `tre-597) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-597 `typ-597 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]])) (check-module-trees ~.types-record-import `mtre-597 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]]))
36093659++ test-types-record-local-scheme
3610− (weld (check ~.types-record-local-scheme src-591 `tok-591 `tre-591) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-591 `typ-591))
3660+ (weld (check ~.types-record-local-scheme src-598 `tok-598 `tre-598) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-598 `typ-598))
36113661++ test-types-record-nested
3612− (weld (check ~.types-record-nested src-592 `tok-592 `tre-592) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-592 `typ-592))
3662+ (weld (check ~.types-record-nested src-599 `tok-599 `tre-599) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-599 `typ-599))
36133663++ test-types-record-to-tuple
3614− (weld (check ~.types-record-to-tuple src-593 `tok-593 `tre-593) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-593 `typ-593))
3664+ (weld (check ~.types-record-to-tuple src-600 `tok-600 `tre-600) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-600 `typ-600))
36153665++ test-types-recursion-scc-failures
3616− (weld (check ~.types-recursion-scc-failures src-594 `tok-594 `tre-594) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-594 `typ-594 ~ ~ ~))
3666+ (weld (check ~.types-recursion-scc-failures src-601 `tok-601 `tre-601) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-601 `typ-601 ~ ~ ~))
36173667++ test-types-recursion-scc-groups
3618− (weld (check ~.types-recursion-scc-groups src-595 `tok-595 `tre-595) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-595 `typ-595 ~ ~ ~))
3668+ (weld (check ~.types-recursion-scc-groups src-602 `tok-602 `tre-602) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-602 `typ-602 ~ ~ ~))
36193669++ test-types-recursion-scc-import
3620− (weld (weld (check ~.types-recursion-scc-import src-596 `tok-596 `tre-596) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-596 `typ-596 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-596-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-596 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-596-1]]))
3670+ (weld (weld (check ~.types-recursion-scc-import src-603 `tok-603 `tre-603) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-603 `typ-603 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-603-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-603 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-603-1]]))
36213671++ test-types-recursion-scc-import-bad
3622− (weld (weld (check ~.types-recursion-scc-import-bad src-597 `tok-597 `tre-597) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-597 `typ-597 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-597 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-597-1]]))
3672+ (weld (weld (check ~.types-recursion-scc-import-bad src-604 `tok-604 `tre-604) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-604 `typ-604 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-604-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-604 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-604-1]]))
36233673++ test-types-recursion-scc-local
3624− (weld (check ~.types-recursion-scc-local src-598 `tok-598 `tre-598) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-598 `typ-598 ~ ~ ~))
3674+ (weld (check ~.types-recursion-scc-local src-605 `tok-605 `tre-605) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-605 `typ-605 ~ ~ ~))
36253675++ test-types-recursion-scc-order
3626− (weld (check ~.types-recursion-scc-order src-599 `tok-599 `tre-599) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-599 `typ-599 ~ ~ ~))
3676+ (weld (check ~.types-recursion-scc-order src-606 `tok-606 `tre-606) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-606 `typ-606 ~ ~ ~))
36273677++ test-types-recursion-scc-shadow
3628− (weld (check ~.types-recursion-scc-shadow src-600 `tok-600 `tre-600) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-600 `typ-600 ~ ~ ~))
3678+ (weld (check ~.types-recursion-scc-shadow src-607 `tok-607 `tre-607) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-607 `typ-607 ~ ~ ~))
36293679++ test-types-recursive-branch
3630− (weld (check ~.types-recursive-branch src-601 `tok-601 `tre-601) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-601 `typ-601 ~ ~ ~))
3680+ (weld (check ~.types-recursive-branch src-608 `tok-608 `tre-608) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-608 `typ-608 ~ ~ ~))
36313681++ test-types-recursive-gate
3632− (weld (check ~.types-recursive-gate src-602 `tok-602 `tre-602) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-602 `typ-602))
3682+ (weld (check ~.types-recursive-gate src-609 `tok-609 `tre-609) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-609 `typ-609))
36333683++ test-types-recursive-sample
3634− (weld (check ~.types-recursive-sample src-603 `tok-603 `tre-603) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-603 `typ-603))
3684+ (weld (check ~.types-recursive-sample src-610 `tok-610 `tre-610) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-610 `typ-610))
36353685++ test-types-request-normal
3636− (weld (weld (check ~.types-request-normal src-604 `tok-604 `tre-604) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-604 `typ-604 ~ ~[[%full mark-604-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-604-1]])) (check-module-trees ~.types-request-normal `mtre-604 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-604-1]]))
3686+ (weld (weld (check ~.types-request-normal src-611 `tok-611 `tre-611) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-611 `typ-611 ~ ~[[%full mark-611-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-611-1]])) (check-module-trees ~.types-request-normal `mtre-611 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-611-1]]))
36373687++ test-types-scope-library-poke
3638− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-605 `tok-605 `tre-605) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-605 `typ-605 ~ ~ ~))
3688+ (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-612 `tok-612 `tre-612) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-612 `typ-612 ~ ~ ~))
36393689++ test-types-scope-root-api
3640− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-606 `tok-606 `tre-606) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-606 `typ-606 ~ ~ ~))
3690+ (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-613 `tok-613 `tre-613) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-613 `typ-613 ~ ~ ~))
36413691++ test-types-scope-store-duplicate
3642− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-607 `tok-607 `tre-607) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-607 `typ-607 ~ ~ ~))
3692+ (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-614 `tok-614 `tre-614) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-614 `typ-614 ~ ~ ~))
36433693++ test-types-scope-store-shadow
3644− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-608 `tok-608 `tre-608) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-608 `typ-608 ~ ~ ~))
3694+ (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-615 `tok-615 `tre-615) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-615 `typ-615 ~ ~ ~))
36453695++ test-types-single-case-pattern
3646− (weld (check ~.types-single-case-pattern src-609 `tok-609 `tre-609) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-609 `typ-609 ~ ~ ~))
3696+ (weld (check ~.types-single-case-pattern src-616 `tok-616 `tre-616) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-616 `typ-616 ~ ~ ~))
36473697++ test-types-string-interpolation
3648− (weld (check ~.types-string-interpolation src-610 `tok-610 `tre-610) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-610 `typ-610 ~ ~ ~))
3698+ (weld (check ~.types-string-interpolation src-617 `tok-617 `tre-617) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-617 `typ-617 ~ ~ ~))
36493699++ test-types-tuple-context
3650− (weld (check ~.types-tuple-context src-611 `tok-611 `tre-611) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-611 `typ-611 ~ ~ ~))
3700+ (weld (check ~.types-tuple-context src-618 `tok-618 `tre-618) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-618 `typ-618 ~ ~ ~))
36513701++ test-types-tuple-context-nested
3652− (weld (check ~.types-tuple-context-nested src-612 `tok-612 `tre-612) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-612 `typ-612 ~ ~ ~))
3702+ (weld (check ~.types-tuple-context-nested src-619 `tok-619 `tre-619) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-619 `typ-619 ~ ~ ~))
36533703++ test-types-union-alias
3654− (weld (check ~.types-union-alias src-613 `tok-613 `tre-613) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-613 `typ-613))
3704+ (weld (check ~.types-union-alias src-620 `tok-620 `tre-620) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-620 `typ-620))
36553705++ test-types-union-branch-context
3656− (weld (check ~.types-union-branch-context src-614 `tok-614 `tre-614) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-614 `typ-614))
3706+ (weld (check ~.types-union-branch-context src-621 `tok-621 `tre-621) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-621 `typ-621))
36573707++ test-types-union-branch-pending
3658− (weld (check ~.types-union-branch-pending src-615 `tok-615 `tre-615) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-615 `typ-615))
3708+ (weld (check ~.types-union-branch-pending src-622 `tok-622 `tre-622) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-622 `typ-622))
36593709++ test-types-union-constructor-shape
3660− (weld (check ~.types-union-constructor-shape src-616 `tok-616 `tre-616) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-616 `typ-616))
3710+ (weld (check ~.types-union-constructor-shape src-623 `tok-623 `tre-623) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-623 `typ-623))
36613711++ test-types-union-context-flow
3662− (weld (check ~.types-union-context-flow src-617 `tok-617 `tre-617) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-617 `typ-617))
3712+ (weld (check ~.types-union-context-flow src-624 `tok-624 `tre-624) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-624 `typ-624))
36633713++ test-types-union-finite
3664− (weld (check ~.types-union-finite src-618 `tok-618 `tre-618) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-618 `typ-618 ~ ~ ~))
3714+ (weld (check ~.types-union-finite src-625 `tok-625 `tre-625) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-625 `typ-625 ~ ~ ~))
36653715++ test-types-union-finite-context
3666− (weld (check ~.types-union-finite-context src-619 `tok-619 `tre-619) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-619 `typ-619 ~ ~ ~))
3716+ (weld (check ~.types-union-finite-context src-626 `tok-626 `tre-626) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-626 `typ-626 ~ ~ ~))
36673717++ test-types-union-finite-generic
3668− (weld (check ~.types-union-finite-generic src-620 `tok-620 `tre-620) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-620 `typ-620 ~ ~ ~))
3718+ (weld (check ~.types-union-finite-generic src-627 `tok-627 `tre-627) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-627 `typ-627 ~ ~ ~))
36693719++ test-types-union-finite-limit
3670− (weld (check ~.types-union-finite-limit src-621 `tok-621 `tre-621) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-621 `typ-621 ~ ~ ~))
3720+ (weld (check ~.types-union-finite-limit src-628 `tok-628 `tre-628) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-628 `typ-628 ~ ~ ~))
36713721++ test-types-union-import
3672− (weld (weld (check ~.types-union-import src-622 `tok-622 `tre-622) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-622 `typ-622 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-622-1]])) (check-module-trees ~.types-union-import `mtre-622 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-622-1]]))
3722+ (weld (weld (check ~.types-union-import src-629 `tok-629 `tre-629) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-629 `typ-629 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-629-1]])) (check-module-trees ~.types-union-import `mtre-629 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-629-1]]))
36733723++ test-types-union-local-pending
3674− (weld (check ~.types-union-local-pending src-623 `tok-623 `tre-623) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-623 `typ-623))
3724+ (weld (check ~.types-union-local-pending src-630 `tok-630 `tre-630) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-630 `typ-630))
36753725++ test-types-union-nonwing-subject
3676− (weld (check ~.types-union-nonwing-subject src-624 `tok-624 `tre-624) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-624 `typ-624 ~ ~ ~))
3726+ (weld (check ~.types-union-nonwing-subject src-631 `tok-631 `tre-631) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-631 `typ-631 ~ ~ ~))
36773727++ test-types-union-overlap
3678− (weld (check ~.types-union-overlap src-625 `tok-625 `tre-625) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-625 `typ-625))
3728+ (weld (check ~.types-union-overlap src-632 `tok-632 `tre-632) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-632 `typ-632))
36793729++ test-types-union-overlap-nested
3680− (weld (check ~.types-union-overlap-nested src-626 `tok-626 `tre-626) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-626 `typ-626))
3730+ (weld (check ~.types-union-overlap-nested src-633 `tok-633 `tre-633) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-633 `typ-633))
36813731++ test-types-union-pattern-result-context
3682− (weld (check ~.types-union-pattern-result-context src-627 `tok-627 `tre-627) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-627 `typ-627 ~ ~ ~))
3732+ (weld (check ~.types-union-pattern-result-context src-634 `tok-634 `tre-634) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-634 `typ-634 ~ ~ ~))
36833733++ test-types-union-pattern-result-controls
3684− (weld (check ~.types-union-pattern-result-controls src-628 `tok-628 `tre-628) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-628 `typ-628 ~ ~ ~))
3734+ (weld (check ~.types-union-pattern-result-controls src-635 `tok-635 `tre-635) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-635 `typ-635 ~ ~ ~))
36853735++ test-types-union-patterns
3686− (weld (check ~.types-union-patterns src-629 `tok-629 `tre-629) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-629 `typ-629 ~ ~ ~))
3736+ (weld (check ~.types-union-patterns src-636 `tok-636 `tre-636) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-636 `typ-636 ~ ~ ~))
36873737++ test-types-union-patterns-generic
3688− (weld (check ~.types-union-patterns-generic src-630 `tok-630 `tre-630) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-630 `typ-630 ~ ~ ~))
3738+ (weld (check ~.types-union-patterns-generic src-637 `tok-637 `tre-637) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-637 `typ-637 ~ ~ ~))
36893739++ test-types-union-patterns-import
3690− (weld (weld (check ~.types-union-patterns-import src-631 `tok-631 `tre-631) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-631 `typ-631 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-631-1]])) (check-module-trees ~.types-union-patterns-import `mtre-631 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-631-1]]))
3740+ (weld (weld (check ~.types-union-patterns-import src-638 `tok-638 `tre-638) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-638 `typ-638 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-638-1]])) (check-module-trees ~.types-union-patterns-import `mtre-638 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-638-1]]))
36913741++ test-types-union-phantom-generic
3692− (weld (check ~.types-union-phantom-generic src-632 `tok-632 `tre-632) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-632 `typ-632))
3742+ (weld (check ~.types-union-phantom-generic src-639 `tok-639 `tre-639) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-639 `typ-639))
36933743++ test-types-union-polymorphic-identity
3694− (weld (weld (check ~.types-union-polymorphic-identity src-633 `tok-633 `tre-633) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-633 `typ-633 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-633-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-633-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-633 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-633-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-633-2]]))
3744+ (weld (weld (check ~.types-union-polymorphic-identity src-640 `tok-640 `tre-640) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-640 `typ-640 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-640-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-640-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-640 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-640-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-640-2]]))
36953745++ test-types-union-print-cross-namespace
3696− (weld (weld (check ~.types-union-print-cross-namespace src-634 `tok-634 `tre-634) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-634 `typ-634 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-634-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-634 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-634-1]]))
3746+ (weld (weld (check ~.types-union-print-cross-namespace src-641 `tok-641 `tre-641) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-641 `typ-641 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-641-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-641 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-641-1]]))
36973747++ test-types-union-print-distinct
3698− (weld (weld (check ~.types-union-print-distinct src-635 `tok-635 `tre-635) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-635 `typ-635 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-635-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-635-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-635-3]])) (check-module-trees ~.types-union-print-distinct `mtre-635 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-635-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-635-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-635-3]]))
3748+ (weld (weld (check ~.types-union-print-distinct src-642 `tok-642 `tre-642) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-642 `typ-642 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-642-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-642-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-642-3]])) (check-module-trees ~.types-union-print-distinct `mtre-642 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-642-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-642-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-642-3]]))
36993749++ test-types-union-print-escape
3700− (weld (check ~.types-union-print-escape src-636 `tok-636 `tre-636) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-636 `typ-636))
3750+ (weld (check ~.types-union-print-escape src-643 `tok-643 `tre-643) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-643 `typ-643))
37013751++ test-types-union-print-local
3702− (weld (check ~.types-union-print-local src-637 `tok-637 `tre-637) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-637 `typ-637))
3752+ (weld (check ~.types-union-print-local src-644 `tok-644 `tre-644) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-644 `typ-644))
37033753++ test-types-union-print-nested
3704− (weld (check ~.types-union-print-nested src-638 `tok-638 `tre-638) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-638 `typ-638))
3754+ (weld (check ~.types-union-print-nested src-645 `tok-645 `tre-645) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-645 `typ-645))
37053755++ test-types-union-print-same-origin
3706− (weld (weld (check ~.types-union-print-same-origin src-639 `tok-639 `tre-639) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-639 `typ-639 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-639-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-639 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-639-1]]))
3756+ (weld (weld (check ~.types-union-print-same-origin src-646 `tok-646 `tre-646) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-646 `typ-646 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-646-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-646 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-646-1]]))
37073757++ test-types-union-print-transitive
3708− (weld (weld (check ~.types-union-print-transitive src-640 `tok-640 `tre-640) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-640 `typ-640 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-640-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-640-2]])) (check-module-trees ~.types-union-print-transitive `mtre-640 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-640-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-640-2]]))
3758+ (weld (weld (check ~.types-union-print-transitive src-647 `tok-647 `tre-647) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-647 `typ-647 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-647-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-647-2]])) (check-module-trees ~.types-union-print-transitive `mtre-647 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-647-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-647-2]]))
3759+++ test-types-union-runtime-equality
3760+ (weld (check ~.types-union-runtime-equality src-648 `tok-648 `tre-648) (check-types ~.types-union-runtime-equality ~[%tests %golden ~.types-union-runtime-equality %source %jibb] src-648 `typ-648))
37093761++ test-types-union-singleton
3710− (weld (check ~.types-union-singleton src-641 `tok-641 `tre-641) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-641 `typ-641))
3762+ (weld (check ~.types-union-singleton src-649 `tok-649 `tre-649) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-649 `typ-649))
3763+++ test-types-union-source-alias
3764+ (weld (check ~.types-union-source-alias src-650 `tok-650 `tre-650) (check-types ~.types-union-source-alias ~[%tests %golden ~.types-union-source-alias %source %jibb] src-650 `typ-650))
37113765++ test-types-union-tag-atoms
3712− (weld (check ~.types-union-tag-atoms src-642 `tok-642 `tre-642) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-642 `typ-642))
3766+ (weld (check ~.types-union-tag-atoms src-651 `tok-651 `tre-651) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-651 `typ-651))
37133767++ test-types-union-tags
3714− (weld (check ~.types-union-tags src-643 `tok-643 `tre-643) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-643 `typ-643))
3768+ (weld (check ~.types-union-tags src-652 `tok-652 `tre-652) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-652 `typ-652))
37153769++ test-types-union-unresolved
3716− (weld (check ~.types-union-unresolved src-644 `tok-644 `tre-644) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-644 `typ-644))
3770+ (weld (check ~.types-union-unresolved src-653 `tok-653 `tre-653) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-653 `typ-653))
37173771++ test-types-union-unresolved-flow
3718− (weld (check ~.types-union-unresolved-flow src-645 `tok-645 `tre-645) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-645 `typ-645))
3772+ (weld (check ~.types-union-unresolved-flow src-654 `tok-654 `tre-654) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-654 `typ-654))
37193773++ test-types-unit-construction
3720− (weld (check ~.types-unit-construction src-646 `tok-646 `tre-646) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-646 `typ-646 ~ ~ ~))
3774+ (weld (check ~.types-unit-construction src-655 `tok-655 `tre-655) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-655 `typ-655 ~ ~ ~))
37213775++ test-types-unit-context
3722− (weld (check ~.types-unit-context src-647 `tok-647 `tre-647) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-647 `typ-647 ~ ~ ~))
3776+ (weld (check ~.types-unit-context src-656 `tok-656 `tre-656) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-656 `typ-656 ~ ~ ~))
37233777++ test-types-unit-patterns
3724− (weld (check ~.types-unit-patterns src-648 `tok-648 `tre-648) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-648 `typ-648))
3778+ (weld (check ~.types-unit-patterns src-657 `tok-657 `tre-657) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-657 `typ-657))
37253779++ test-types-value-cycle-shadow
3726− (weld (check ~.types-value-cycle-shadow src-649 `tok-649 `tre-649) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-649 `typ-649 ~ ~ ~))
3780+ (weld (check ~.types-value-cycle-shadow src-658 `tok-658 `tre-658) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-658 `typ-658 ~ ~ ~))
37273781++ test-types-value-cycle-unsupported
3728− (weld (check ~.types-value-cycle-unsupported src-650 `tok-650 `tre-650) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-650 `typ-650 ~ ~ ~))
3782+ (weld (check ~.types-value-cycle-unsupported src-659 `tok-659 `tre-659) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-659 `typ-659 ~ ~ ~))
37293783++ test-types-value-cycles
3730− (weld (check ~.types-value-cycles src-651 `tok-651 `tre-651) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-651 `typ-651 ~ ~ ~))
3784+ (weld (check ~.types-value-cycles src-660 `tok-660 `tre-660) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-660 `typ-660 ~ ~ ~))
37313785::
37323786:: +check: run golden:jibb on a case and compare both outputs
37333787::
tests/type-cell-branch/about.txtnew file+2
@@ -0,0 +1,2 @@
1+source: Grammar, Branching and Molds — result context constrains each branch while written faces and pending tags are preserved.
2+tests: A closed cell result context, failed retry rollback, structural-substitution uncertainty, and exact source/substitution retry screen limits. The shared test arm runs under eval and on the ship.
tests/type-cell-branch/bad.txtnew file+3
@@ -0,0 +1,3 @@
1+++ probe ?- flag
2+ %.y ["yes" ~]
3+ %.n [~zod ~]
tests/type-cell-branch/good.txtnew file+3
@@ -0,0 +1,3 @@
1+++ probe ?- flag
2+ %.y ["yes" ~]
3+ %.n ["no" ~]
tests/type-deferred-context/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/grammar.md, Tag resolution: “A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it.”
2+
3+Tests bounded deferred source-order retries and source-owned literal branch obligations in import-free libraries. Each negative source must parse before it is rejected. This does not establish island kind, watchability or standard-prelude list semantics.
tests/type-deferred-context/collision-early.txtnew file+27
@@ -0,0 +1,27 @@
1+++ incompatible ^- $-(? other) choose
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5++$ maybe
6+ %none
7+ [%some value=@t]
8++$ other
9+ %none
10+ [%ship value=@p]
11+++ final ^- $-(? maybe) choose
12+++ final-ship ^- $-(? other) choose-ship
13+++ choose |= flag=?
14+ ?- flag
15+ %.y %none
16+ %.n %none
17+++ choose-ship |= flag=?
18+ ?- flag
19+ %.y %none
20+ %.n %none
21+++ send |= f=$-(@t A) f
22+++ first (send |=%got)
23+++ fixed ^- $-(@t message) first
24+++ make |= ignored=A |= x=B x
25+++ built (make choose)
26+++ reveal (built "hello")
27+++ reveal-ship (built ~zod)
tests/type-deferred-context/collision-late.txtnew file+28
@@ -0,0 +1,28 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7++$ other
8+ %none
9+ [%ship value=@p]
10+++ final ^- $-(? maybe) choose
11+++ final-ship ^- $-(? other) choose-ship
12+++ choose |= flag=?
13+ ?- flag
14+ %.y %none
15+ %.n %none
16+++ choose-ship |= flag=?
17+ ?- flag
18+ %.y %none
19+ %.n %none
20+++ send |= f=$-(@t A) f
21+++ first (send |=%got)
22+++ fixed ^- $-(@t message) first
23+++ make |= ignored=A |= x=B x
24+++ built (make choose)
25+++ reveal (built "hello")
26+++ reveal-ship (built ~zod)
27+
28+++ incompatible ^- $-(? other) choose
tests/type-deferred-context/dangling.txtnew file+16
@@ -0,0 +1,16 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? maybe) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.n %none
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
15+
16+++ unrelated |= x=@t %dangling
tests/type-deferred-context/duplicate.txtnew file+14
@@ -0,0 +1,14 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? maybe) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.y %none
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
tests/type-deferred-context/missing.txtnew file+14
@@ -0,0 +1,14 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? maybe) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.n %absent
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
tests/type-deferred-context/plain.txtnew file+11
@@ -0,0 +1,11 @@
1+++ final ^- $-(@t message) second
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ send |= f=$-(@t A) f
6+++ make |= ignored=A |= x=B x
7+++ first (send |=%got)
8+++ second first
9+++ built (make first)
10+++ reveal (built "hello")
11+++ reveal-ship (built ~zod)
tests/type-deferred-context/report.txtnew file+15
@@ -0,0 +1,15 @@
1+partial inference; module not checked
2++$ message: cases proven disjoint; mold not checked
3++$ maybe: cases proven disjoint; mold not checked
4++$ other: cases proven disjoint; mold not checked
5+++ final: $-(? maybe)
6+++ final-ship: $-(? other)
7+++ choose: $-(? maybe)
8+++ choose-ship: $-(? other)
9+++ send: $-($-(@t A) $-(@t A))
10+++ first: $-(@t message)
11+++ fixed: $-(@t message)
12+++ make: $-(A $-(B B))
13+++ built: $-(A A)
14+++ reveal: @t
15+++ reveal-ship: @p
tests/type-deferred-context/rich.txtnew file+27
@@ -0,0 +1,27 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ %stop
7+ [%some value=@t]
8++$ other
9+ %none
10+ [%ship value=@p]
11+++ final ^- $-(? maybe) choose
12+++ final-ship ^- $-(? other) choose-ship
13+++ choose |= flag=?
14+ ?- flag
15+ %.y %none
16+ %.n %stop
17+++ choose-ship |= flag=?
18+ ?- flag
19+ %.y %none
20+ %.n %none
21+++ send |= f=$-(@t A) f
22+++ first (send |=%got)
23+++ fixed ^- $-(@t message) first
24+++ make |= ignored=A |= x=B x
25+++ built (make choose)
26+++ reveal (built "hello")
27+++ reveal-ship (built ~zod)
tests/type-deferred-context/simple.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4+++ final ^- $-(@t message) (pick %.y)
5+++ pick |= flag=?
6+ ?- flag
7+ %.y first
8+ %.n first
9+++ send |= f=$-(@t A) f
10+++ first (send |=%got)
tests/type-deferred-context/wrong.txtnew file+14
@@ -0,0 +1,14 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ maybe
5+ %none
6+ [%some value=@t]
7+++ final ^- $-(? @t) choose
8+++ choose |= flag=?
9+ ?- flag
10+ %.y %none
11+ %.n %none
12+++ send |= f=$-(@t A) f
13+++ first (send |=%got)
14+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/expected-control.txtnew file+7
@@ -0,0 +1,7 @@
1+partial inference; module not checked
2++$ model: not checked
3++$ message: cases proven disjoint; mold not checked
4+++ initial: `~` needs context in partial inference
5+++ send: $-($-(@t A) $-(@t A))
6+++ first: call constraint is not supported by partial inference
7+++ fixed: name is not available to partial inference
tests/type-deferred-prepared/expected-tuple-only.txtnew file+4
@@ -0,0 +1,4 @@
1+partial inference; module not checked
2++$ model: not checked
3+++ final: $-((list @t) [(list @t) [@t (unit @t)]])
4+++ initial: $-((list @t) [(list @t) [@t (unit @t)]])
tests/type-deferred-prepared/expected.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2++$ model: not checked
3++$ message: cases proven disjoint; mold not checked
4+++ final: $-((list @t) [(list @t) [@t (unit @t)]])
5+++ initial: $-((list @t) [(list @t) [@t (unit @t)]])
6+++ send: $-($-(@t A) $-(@t A))
7+++ first: $-(@t message)
8+++ fixed: $-(@t message)
tests/type-deferred-prepared/good.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/imported.txtnew file+11
@@ -0,0 +1,11 @@
1+/= other /ui/other
2+
3++$ model [xs=(list @t) draft=@t error=(unit @t)]
4++$ message
5+ [%got value=@t]
6+ [%other value=@p]
7+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
8+++ initial |= xs=(list @t) [xs "" ~]
9+++ send |= f=$-(@t A) f
10+++ first (send |=%got)
11+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
10+++ main initial
tests/type-deferred-prepared/mold-collision.txtnew file+9
@@ -0,0 +1,9 @@
1++$ list [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/no-final-cast.txtnew file+8
@@ -0,0 +1,8 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ initial |= xs=(list @t) [xs "" ~]
6+++ send |= f=$-(@t A) f
7+++ first (send |=%got)
8+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/no-prelude.txtnew file+9
@@ -0,0 +1,9 @@
1++$ maybe
2+ %none
3+ [%some value=@t]
4++$ model [draft=@t error=maybe]
5+++ final ^- $-(@t [@t maybe]) initial
6+++ initial |= draft=@t [draft %none]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%some)
9+++ fixed ^- $-(@t maybe) first
tests/type-deferred-prepared/tuple-only.txtnew file+3
@@ -0,0 +1,3 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
3+++ initial |= xs=(list @t) [xs "" ~]
tests/type-deferred-prepared/unrelated-tag.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
10+
11+++ unresolved |= x=@t %dangling
tests/type-deferred-prepared/wrong-draft.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs ~zod ~]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-prepared/wrong-unit.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ final ^- $-((list @t) [(list @t) @t (unit @t)]) initial
6+++ initial |= xs=(list @t) [xs "" %absent]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ fixed ^- $-(@t message) first
tests/type-deferred-resolver/about.txtnew file+5
@@ -0,0 +1,5 @@
1+source: docs/spec/grammar.md, Tag resolution: “A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it.”
2+
3+Import-free, no-prelude ordinary library resolution: principal generalized result and matching report, with conflicting constructors, holes, duplicate bindings, nested faces and store kind rejected atomically. Resolved imports and the actual prepared prelude are also checked as fail-closed boundaries.
4+
5+Both source orders decline when a later substitution changes a previously checked face-propagation condition. Controls cover compound and direct calls, an unresolved result tag that becomes `*`, and an unresolved positional slot that becomes faced. Positive low-level checks preserve closed positional fits and equal single-argument fits with open variables.
tests/type-deferred-resolver/conflict.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ typed ^- $-(@t message) second
11+
12+++ clash ^- $-(@t alternate) first
tests/type-deferred-resolver/duplicate.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ typed ^- $-(@t message) second
11+
12+++ send |= arg=@p arg
tests/type-deferred-resolver/expected.txtnew file+42
@@ -0,0 +1,42 @@
1+interface retains independent polymorphism
2+text use inferred
3+ship use inferred
4+stored built: $-(A A)
5+partial inference; module not checked
6++$ message: cases proven disjoint; mold not checked
7+++ send: $-($-(@t A) $-(@t A))
8+++ make: $-(A $-(B B))
9+++ first: $-(@t message)
10+++ second: $-(@t message)
11+++ built: $-(A A)
12+++ typed: $-(@t message)
13+++ reveal: @t
14+++ reveal-ship: @p
15+conflict rejected without interface
16+missing rejected without interface
17+hole rejected without interface
18+duplicate rejected without interface
19+face rejected without interface
20+store declined without interface
21+conflict report:
22+partial inference; module not checked
23++$ message: cases proven disjoint; mold not checked
24++$ alternate: cases proven disjoint; mold not checked
25+++ send: $-($-(@t A) $-(@t A))
26+++ first: call constraint is not supported by partial inference
27+++ second: name is not available to partial inference
28+++ typed: name is not available to partial inference
29+++ clash: name is not available to partial inference
30+store report:
31+partial inference; module not checked
32++$ poke: not checked
33++$ message: cases proven disjoint; mold not checked
34+++ send: $-($-(@t A) $-(@t A))
35+++ make: $-(A $-(B B))
36+++ first: call constraint is not supported by partial inference
37+++ second: name is not available to partial inference
38+++ built: name is not available to partial inference
39+++ typed: name is not available to partial inference
40+++ reveal: name is not available to partial inference
41+++ reveal-ship: name is not available to partial inference
42+prelude and import fallback declined
tests/type-deferred-resolver/face.txtnew file+6
@@ -0,0 +1,6 @@
1++$ message
2+ [%got payload=[who=@t n=@ud]]
3+ %idle
4+++ send |= f=$-([wrong=@t n=@ud] A) f
5+++ nested (send |=%got)
6+++ typed ^- $-([wrong=@t n=@ud] message) nested
tests/type-deferred-resolver/good.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4+++ send |= f=$-(@t A) f
5+++ make |= ignored=A |= x=B x
6+++ first (send |=%got)
7+++ second first
8+++ built (make first)
9+++ typed ^- $-(@t message) second
10+++ reveal (built "hello")
11+++ reveal-ship (built ~zod)
tests/type-deferred-resolver/hole.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ typed ^- $-(@t message) second
11+
12+++ hole ^- _ %idle
tests/type-deferred-resolver/missing.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%absent)
9+++ second first
10+++ typed ^- $-(@t message) second
tests/type-deferred-resolver/stability-early.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= pair=[A [foo=A]] pair
4+++ waiting (request |=%got)
5+++ wrapped (accept [waiting waiting])
6+++ reveal ^- $-(@t single) waiting
tests/type-deferred-resolver/stability-late.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= pair=[A [foo=A]] pair
4+++ waiting (request |=%got)
5+++ reveal ^- $-(@t single) waiting
6+++ wrapped (accept [waiting waiting])
tests/type-deferred-resolver/stability-output-early.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ send |= f=$-(@t A) f
3+++ pending (send |=%got)
4+++ finish ^- $-(@t single) pending
5+++ accept |= [foo=@t bar=@t] %idle
6+++ foo-value ^- [foo=@t] "a"
7+++ bar-value ^- [bar=@t] "b"
8+++ value (accept foo-value bar-value)
9+++ reveal ^- * value
tests/type-deferred-resolver/stability-output-late.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ send |= f=$-(@t A) f
3+++ pending (send |=%got)
4+++ finish ^- $-(@t single) pending
5+++ accept |= [foo=@t bar=@t] %idle
6+++ foo-value ^- [foo=@t] "a"
7+++ bar-value ^- [bar=@t] "b"
8+++ prior ^- * (accept foo-value bar-value)
9+++ value (accept foo-value bar-value)
tests/type-deferred-resolver/stability-simple-early.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= x=[foo=A] x
4+++ waiting (request |=%got)
5+++ wrapped (accept waiting)
6+++ reveal ^- $-(@t single) waiting
tests/type-deferred-resolver/stability-simple-late.txtnew file+6
@@ -0,0 +1,6 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ accept |= x=[foo=A] x
4+++ waiting (request |=%got)
5+++ reveal ^- $-(@t single) waiting
6+++ wrapped (accept waiting)
tests/type-deferred-resolver/stability-slot-early.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ label |= x=A [foo=x]
4+++ accept |= x=[[foo=A] @t] x
5+++ pending (request |=%got)
6+++ first (pending "hello")
7+++ labeled (label first)
8+++ value (accept labeled "b")
9+++ finish ^- $-(@t single) pending
tests/type-deferred-resolver/stability-slot-late.txtnew file+9
@@ -0,0 +1,9 @@
1++$ single [%got value=@t]
2+++ request |= f=$-(@t A) f
3+++ label |= x=A [foo=x]
4+++ accept |= x=[[foo=A] @t] x
5+++ pending (request |=%got)
6+++ first (pending "hello")
7+++ labeled (label first)
8+++ finish ^- $-(@t single) pending
9+++ value (accept labeled "b")
tests/type-deferred-resolver/store.txtnew file+12
@@ -0,0 +1,12 @@
1++$ poke @t
2++$ message
3+ [%got value=@t]
4+ [%other value=@p]
5+++ send |= f=$-(@t A) f
6+++ make |= ignored=A |= x=B x
7+++ first (send |=%got)
8+++ second first
9+++ built (make first)
10+++ typed ^- $-(@t message) second
11+++ reveal (built "hello")
12+++ reveal-ship (built ~zod)
tests/type-deferred/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/grammar.md, Tag resolution: “A variable constrained by tag resolution, and any it mentions, doesn't generalize; it stays open until something in the module fixes it.”
2+
3+Source-owned deferred constructor transaction: partial type artifact only; no module kind, runtime or watchability proof. Every source case checks parse success in the same analysis. Captured IDs and replay safety are checked directly.
tests/type-deferred/conflict-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12+++ clash ^- $-(@t alternate) first
tests/type-deferred/duplicate-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12+++ send |= arg=@p arg
tests/type-deferred/expected.txtnew file+38
@@ -0,0 +1,38 @@
1+nested lexical gate and alias agree
2+later source context closes nested constructor
3+nested obligation discharged
4+independent built result stays polymorphic
5+text use inferred
6+ship use inferred independently
7+missing constructor leaves no result
8+conflicting context leaves no result
9+duplicate source binding declined
10+definition hole does not escape
11+local deferred definition declined
12+recursive deferred group declined
13+unused mold hole declined
14+fresh ID exceeds raw and quantified IDs
15+fresh ID scan respects budget
16+original structural binding rejects wrong face
17+dropping binding would accept wrong face
18+unresolved edge remains open after fit
19+closed constructor edge has no free IDs
20+final replay is unchanged
21+open interface stays unpublished
22+raw bound variable hides atom constraint
23+normalized unsupported atom constraint rejected
24+scheme-local quantifier cannot hide captured ID
25+captured outer variable remains monomorphic
26+pending tag binding keeps reachable variable monomorphic
27+recursive obligation component stays monomorphic
28+faced callback source accepted
29+wrong nested callback face rejected
30+constructor resolves to exact callback
31+callback retains its face
32+post-fit face asymmetry is absent
33+record output stays cell-capable
34+prebound incompatible callback is rejected
35+grec constraint scan declines
36+grec fresh-id scan declines
37+default inference declines; explicit capability creates obligation
38+candidate screen boundaries passed
tests/type-deferred/face-bad-src.txtnew file+6
@@ -0,0 +1,6 @@
1++$ message
2+ [%got payload=[who=@t n=@ud]]
3+ %idle
4+++ send |= f=$-([wrong=@t n=@ud] A) f
5+++ nested (send |=%got)
6+++ main ^- $-([wrong=@t n=@ud] message) nested
tests/type-deferred/face-good-src.txtnew file+6
@@ -0,0 +1,6 @@
1++$ message
2+ [%got payload=[who=@t n=@ud]]
3+ %idle
4+++ send |= f=$-([who=@t n=@ud] A) f
5+++ nested (send |=%got)
6+++ main ^- $-([who=@t n=@ud] message) nested
tests/type-deferred/hole-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12+++ hole ^- _ %idle
tests/type-deferred/local-src.txtnew file+8
@@ -0,0 +1,8 @@
1++$ message
2+ [%got value=@t]
3+ %idle
4+++ send |= f=$-(@t A) f
5+++ outer |= input=@t
6+ ++ tmp (send |=%got)
7+ tmp
8+++ main ^- $-(@t $-(@t message)) outer
tests/type-deferred/missing-src.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%absent)
9+++ second first
10+++ main ^- $-(@t message) second
tests/type-deferred/mold-hole-src.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4++$ alternate
5+ [%got value=@t]
6+ [%other value=@p]
7+++ send |= f=$-(@t A) f
8+++ first (send |=%got)
9+++ second first
10+++ main ^- $-(@t message) second
11+
12++$ unused _
tests/type-deferred/mutual-src.txtnew file+7
@@ -0,0 +1,7 @@
1++$ message
2+ [%got value=@t]
3+ %idle
4+++ send |= f=$-(@t A) f
5+++ first |= input=@t (second (send |=%got))
6+++ second |= callback=$-(@t message) (first "hello")
7+++ main ^- $-(@t message) (send |=%got)
tests/type-deferred/nested-src.txtnew file+7
@@ -0,0 +1,7 @@
1++$ message
2+ [%got value=@t]
3+ %idle
4+++ send |= f=$-(@t A) f
5+++ nested |= x=@t (send |=%got)
6+++ alias nested
7+++ main ^- $-(@t $-(@t message)) alias
tests/type-deferred/principal-src.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ [%got value=@t]
3+ [%other value=@p]
4+++ send |= f=$-(@t A) f
5+++ make |= ignored=A |= x=B x
6+++ first (send |=%got)
7+++ second first
8+++ built (make first)
9+++ main ^- $-(@t message) second
10+++ reveal (built "hello")
11+++ reveal-ship (built ~zod)
tests/type-direct-gate/expected.txt+11−11
@@ -2,14 +2,14 @@ partial inference; module not checked
22+$ message: cases proven disjoint; mold not checked
33++ init: $-(@t @ud)
44++ update: $-([msg=message state=@ud] [@ud (list (cmd message))])
5−++ view: $-(@ud [%node item=message])
5+++ view: $-(@ud (element message))
66++ subs: $-(@ud (list (sub message)))
7−++ direct: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
7+++ direct: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
88++ wrong-init: $-(@p @ud)
9−++ different-data: [init=$-(@p @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
9+++ different-data: [init=$-(@p @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
1010++ wrong-update: $-([msg=message state=@p] [@p (list (cmd message))])
1111++ mismatched-model: call constraint is not supported by partial inference
12−++ wrong-view: $-(@p [%node item=message])
12+++ wrong-view: $-(@p (element message))
1313++ mismatched-view: call constraint is not supported by partial inference
1414++ wrong-subs: $-(@p (list (sub message)))
1515++ mismatched-subs: call constraint is not supported by partial inference
@@ -17,17 +17,17 @@ partial inference; module not checked
1717++ wrong-msg-update: $-([msg=other state=@ud] [@ud (list (cmd other))])
1818++ mismatched-message: call constraint is not supported by partial inference
1919++ pending: tag needs context in partial inference
20−++ program-value: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]])
20+++ program-value: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
2121++ update-unfaced: $-([message @ud] [@ud (list (cmd message))])
22−++ direct-unfaced: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
22+++ direct-unfaced: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
2323+$ record: not checked
2424++ init-record: $-(@t [count=@ud label=@t])
2525++ update-record: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
2626++ update-record-unfaced: $-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
27−++ view-record: $-([count=@ud label=@t] [%node item=message])
27+++ view-record: $-([count=@ud label=@t] (element message))
2828++ subs-record: $-([count=@ud label=@t] (list (sub message)))
29−++ program-record: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
30−++ program-record-unfaced: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
29+++ program-record: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] (element message)) subs=$-([count=@ud label=@t] (list (sub message)))]]]
30+++ program-record-unfaced: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] (element message)) subs=$-([count=@ud label=@t] (list (sub message)))]]]
3131++ bad-update-record: $-([msg=message state=[other=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
3232++ program-wrong-nested-face: call constraint is not supported by partial inference
3333++ update-pending: tag needs context in partial inference
@@ -57,8 +57,8 @@ partial inference; module not checked
5757 ^
5858++ unknown-call: $-($-([A B] C) $-([A B] C))
5959++ update-proj-good: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
60−++ program-projection: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
61−++ program-alias: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]])
60+++ program-projection: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] (element message)) subs=$-([count=@ud label=@t] (list (sub message)))]]]
61+++ program-alias: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
6262++ through-head-alias: call constraint is not supported by partial inference
6363++ update-alias: $-([msg=message state=@ud] [@ud (list (cmd message))])
6464++ through-arg-alias: call constraint is not supported by partial inference
tests/type-direct-gate/source.txt+3−3
@@ -4,7 +4,7 @@
44++ init |= input=@t ^- @ud 1
55++ update |= [msg=message state=@ud]
66 ^- [@ud (list (cmd message))] [state ~]
7−++ view |= state=@ud ^- (element message) [%node %start]
7+++ view |= state=@ud ^- (element message) (text "view")
88++ subs |= state=@ud ^- (list (sub message)) ~
99++ direct (program init update view subs)
1010++ wrong-init |= input=@p ^- @ud 1
@@ -12,7 +12,7 @@
1212++ wrong-update |= [msg=message state=@p]
1313 ^- [@p (list (cmd message))] [state ~]
1414++ mismatched-model (program init wrong-update view subs)
15−++ wrong-view |= state=@p ^- (element message) [%node %start]
15+++ wrong-view |= state=@p ^- (element message) (text "view")
1616++ mismatched-view (program init update wrong-view subs)
1717++ wrong-subs |= state=@p ^- (list (sub message)) ~
1818++ mismatched-subs (program init update view wrong-subs)
@@ -35,7 +35,7 @@
3535 ^- [record (list (cmd message))] [state ~]
3636++ update-record-unfaced |= args=[message record]
3737 ^- [record (list (cmd message))] [[count=0 label=""] ~]
38−++ view-record |= state=record ^- (element message) [%node %start]
38+++ view-record |= state=record ^- (element message) (text "view")
3939++ subs-record |= state=record ^- (list (sub message)) ~
4040++ program-record (program init-record update-record view-record subs-record)
4141++ program-record-unfaced (program init-record update-record-unfaced view-record subs-record)
tests/type-empty/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: Grammar, Molds: the empty mold `!!` has no values. Patterns: every case needs an arm or a catch-all; an already-covered arm is an error.
2+tests: Checked interfaces retain empty molds and nested empty cell positions; only inhabited union cases need coverage. Standard list and unit null values remain inhabited, while their empty payload arms are unreachable. Fixed opaque reachability, late capital constraints, proof limits and directional fit are checked conservatively. The report is partial, and runtime behavior is not tested.
3+expect: shared eval and ship guard
tests/type-empty/dead.txtnew file+7
@@ -0,0 +1,7 @@
1++$ split
2+ [%dead [!! @t]]
3+ [%live @t]
4+++ select |= x=split
5+ ?- x
6+ [%dead impossible] "dead"
7+ [%live text] text
tests/type-empty/expected.txtnew file+59
@@ -0,0 +1,59 @@
1+empty mold exported: ok
2+live union selector preserves type: ok
3+overlap parses and is rejected: ok
4+dead empty case parses and is rejected: ok
5+missing live case parses and is rejected: ok
6+standard list and unit identities checked: ok
7+single null list gate keeps its exact sample and result: ok
8+contextual single null list gate checks: ok
9+contextual single null list arm retains faces: ok
10+one null arm on inhabited list declines: ok
11+one null arm on generic list declines: ok
12+empty list nonempty arm parses and is rejected: ok
13+empty unit present arm parses and is rejected: ok
14+nested empty proof: ok
15+list of empty is inhabited: ok
16+gate returning empty is not empty: ok
17+unbound type not proved empty: ok
18+unbound inference type reachability unknown: ok
19+written capital can have a value: ok
20+bound empty capital is unreachable: ok
21+opaque recursion reachability unknown: ok
22+opaque union case declines coverage proof: ok
23+one proof node exhausted: ok
24+two proof nodes succeed: ok
25+empty fits a concrete type: ok
26+empty cell fits a concrete type: ok
27+inhabited atom does not fit empty: ok
28+empty gate-bearing cell is gate-free: ok
29+list of empty is gate-free and inhabited: ok
30+partial inference; module not checked
31++$ never: not checked
32++$ box: not checked
33++$ split: cases proven disjoint; mold not checked
34+++ identity: $-(!! !!)
35+++ generic-empty: $-([x=!! y=@t] [x=!! y=@t])
36+++ select: $-(split @t)
37+++ crash: !!
38+partial inference; module not checked
39++$ broken: overlapping cases; mold not checked
40+/tests/empty.jibb:2:3: first union case
41+ [%tag [%.y @t]]
42+ ^
43+/tests/empty.jibb:3:3: overlapping case
44+ [%tag [%$ @p]]
45+ ^
46+partial inference; module not checked
47++$ split: cases proven disjoint; mold not checked
48+++ select: union pattern is not supported by partial inference
49+partial inference; module not checked
50++$ split: cases proven disjoint; mold not checked
51+++ select: union pattern is not supported by partial inference
52+partial inference; module not checked
53+++ probe: list nonempty pattern is unreachable
54+partial inference; module not checked
55+++ probe: unit present pattern is unreachable
56+partial inference; module not checked
57+++ probe-late: explicit capital constraints are not supported by partial inference
58+++ probe-outer: explicit capital constraints are not supported by partial inference
59+++ probe-rec: explicit capital constraints are not supported by partial inference
tests/type-empty/face-source.txtnew file+2
@@ -0,0 +1,2 @@
1+++ branch ?- xs
2+ ~ [x="yes" y="no"]
tests/type-empty/good.txtnew file+11
@@ -0,0 +1,11 @@
1++$ never !!
2++$ box |$ [A] [x=A y=@t]
3++$ split
4+ [%dead [!! @t]]
5+ [%live @t]
6+++ identity |= x=never x
7+++ generic-empty |= x=(box !!) x
8+++ select |= x=split
9+ ?- x
10+ [%live text] text
11+++ crash ^- !! !!
tests/type-empty/late-cap.txtnew file+16
@@ -0,0 +1,16 @@
1+++ probe-late |= xs=(list A)
2+ ?- xs
3+ ~ !!
4+ [item rest] ^- !! item
5+++ probe-outer |= xs=(list A)
6+ ++ inspect |= ys=(list A)
7+ ?- ys
8+ ~ !!
9+ [item rest] ^- !! item
10+ (inspect xs)
11+++ probe-rec |= xs=(list A)
12+ ?- xs
13+ ~ !!
14+ [item rest]
15+ ~& ^- !! item
16+ (probe-rec rest)
tests/type-empty/list-dead.txtnew file+4
@@ -0,0 +1,4 @@
1+++ probe |= xs=(list !!)
2+ ?- xs
3+ ~ "nil"
4+ [x rest] "cons"
tests/type-empty/list-live.txtnew file+3
@@ -0,0 +1,3 @@
1+++ no |= xs=(list @t)
2+ ?- xs
3+ ~ "nil"
tests/type-empty/list-open.txtnew file+3
@@ -0,0 +1,3 @@
1+++ no |= xs=(list A)
2+ ?- xs
3+ ~ "nil"
tests/type-empty/missing.txtnew file+6
@@ -0,0 +1,6 @@
1++$ split
2+ [%dead [!! @t]]
3+ [%live @t]
4+++ select |= x=split
5+ ?- x
6+ [%dead impossible] "dead"
tests/type-empty/overlap.txtnew file+3
@@ -0,0 +1,3 @@
1++$ broken
2+ [%tag [%.y @t]]
3+ [%tag [%$ @p]]
tests/type-empty/standard-good.txtnew file+11
@@ -0,0 +1,11 @@
1+++ list-id |= xs=(list !!) xs
2+++ unit-id |= maybe=(unit !!) maybe
3+++ list-only |= xs=(list !!)
4+ ?- xs
5+ ~ "nil"
6+++ list-only-context |= xs=(list !!)
7+ ^- @t ?- xs
8+ ~ "nil"
9+++ unit-only |= maybe=(unit !!)
10+ ?- maybe
11+ ~ "nil"
tests/type-empty/unit-dead.txtnew file+4
@@ -0,0 +1,4 @@
1+++ probe |= maybe=(unit !!)
2+ ?- maybe
3+ ~ "nil"
4+ [~ x] "some"
tests/type-full-overlap/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/grammar.md, Molds: “Cases must differ as nouns”.
2+tests: Full-module overlap evidence retains the defining source and both case spans through ordinary Jibb imports, and legacy errors render the excerpts. Distinct cases check; duplicate names, stale caches, cycles, private imports and other unsupported inputs retain their own earlier errors. Specialized API and prelude paths remain outside this diagnostic slice.
3+expect: shared eval and ship guards
tests/type-full-overlap/child.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ child-bad
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/distinct.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ good
3+ (tagged @t)
4+ [%other @p]
5+++ id |= x=good x
tests/type-full-overlap/duplicate-generic.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad |$ [B B]
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ tagged |$ [A] [%other A]
3++$ bad
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-full-overlap/expected-basic.txtnew file+16
@@ -0,0 +1,16 @@
1+256 generic parameters accepted by scan: ok
2+257 generic parameters exhaust scan: ok
3+duplicate generic parameters fail scan: ok
4+same head has source-bound overlap: ok
5+zero spelling has source-bound overlap: ok
6+generic wrapper has source-bound overlap: ok
7+duplicate generic parameters remain unstructured: ok
8+unsupported remains unstructured: ok
9+later overlap exists in precedence source: ok
10+earlier unsupported mold takes precedence: ok
11+duplicate source parsed but rejects without overlap: ok
12+invalid source rejects without overlap: ok
13+distinct alias source parses and checks: ok
14+parent itself has different positive overlap: ok
15+legacy full-module error contains both excerpts: ok
16+import overlap retains exact child source: ok
tests/type-full-overlap/expected-graph.txtnew file+8
@@ -0,0 +1,8 @@
1+detached cache rebuild preserves child evidence: ok
2+mismatched graph cache declines without evidence: ok
3+verified cache source binding: ok
4+private import declines before source proof: ok
5+active cycle declines before source proof: ok
6+duplicate child sources decline without evidence: ok
7+missing child source declines without evidence: ok
8+transitive import retains leaf source: ok
tests/type-full-overlap/generic.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad |$ [B]
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/invalid.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t
4+ [%wrapped @p]
tests/type-full-overlap/parent.txtnew file+5
@@ -0,0 +1,5 @@
1+/= lib /ui/child
2++$ tagged |$ [A] [%wrapped A]
3++$ parent-bad
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-full-overlap/precedence.txtnew file+5
@@ -0,0 +1,5 @@
1++$ unresolved (missing @t)
2++$ tagged |$ [A] [%wrapped A]
3++$ bad
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-full-overlap/same.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t)
4+ [%wrapped @p]
tests/type-full-overlap/unsupported.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad |$ [A]
3+ (tagged A)
4+ [%wrapped @t]
tests/type-full-overlap/zero.txtnew file+4
@@ -0,0 +1,4 @@
1++$ zero |$ [A] [%.y A]
2++$ bad
3+ (zero @t)
4+ [%$ @p]
tests/type-generic-construction/about.txtnew file+9
@@ -0,0 +1,9 @@
1+source: docs/spec/grammar.md:57,135 — “Molds may be recursive”; “recursive molds go by name and module”.
2+
3+This shared eval/ship fixture checks a narrow source-proven tree construction
4+slice. It exercises both recognized source shapes, type arguments and aliases,
5+nominal origins, contextual field and payload constraints, shared fuel, and
6+unrelated pending state. The source reports are explicitly partial; a separate
7+owner check requires the entire library to succeed before interface export.
8+The view and substitution scan limits do not bound all inference or retries.
9+No runtime lowering, watchability, island acceptance or backend claim is made.
tests/type-generic-construction/alias-client.txtnew file+12
@@ -0,0 +1,12 @@
1+/= first /ui/tree
2+/= again /ui/tree
3+/= second /ui/tree-two
4+/= via /ui/tree-alias
5+++ text-event |= x=@t x
6+++ ship-event |= x=@t ~zod
7+++ via-leaf ^- (alias.via @t) [%text value="x"]
8+++ via-node ^- (alias.via @p) [%node event=ship-event children=~]
9+++ cross-alias |= x=(alias.via @t) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
10+++ cross-owner |= x=(node-tree.again @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
11+++ wrong-owner |= x=(node-tree.second @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
12+++ wrong-arg |= x=(alias.via @p) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
tests/type-generic-construction/alias.txtnew file+3
@@ -0,0 +1,3 @@
1+/= source /ui/tree
2++$ alias |$ [A] (node-tree.source A)
3+++ identity |= x=(alias A) x
tests/type-generic-construction/client.txtnew file+24
@@ -0,0 +1,24 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+++ text-event |= value=@t value
4+++ ship-event |= value=@t ~zod
5+++ leaf ^- (node-tree.first @t) [%text value="hi"]
6+++ ship-leaf ^- (node-tree.first @p) [%text value="hi"]
7+++ node ^- (node-tree.first @t) [%node event=text-event children=~]
8+++ ship-node ^- (node-tree.first @p) [%node event=ship-event children=~]
9+++ nested ^- (node-tree.first @t) [%node event=text-event children=~[[%text value="x"]]]
10+++ wrong-event ^- (node-tree.first @p) [%node event=text-event children=~]
11+++ wrong-leaf ^- (node-tree.first @t) [%text value=~zod]
12+++ wrong-label ^- (node-tree.first @t) [%text other="hi"]
13+++ bad-tag ^- (node-tree.first @t) [%missing value="hi"]
14+++ foreign |= x=(node-tree.second @t) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
15+++ generic |= event=$-(@t A) ^- (node-tree.first A) [%node event=event children=~]
16+++ pending |= x=(node-tree.first @t) [%missing x]
17+++ extra ^- (node-tree.first @t) [%text value="hi" extra="bad"]
18+++ misplaced ^- (node-tree.first @t) [%text value=~zod]
19+++ bad-child ^- (node-tree.first @t) [%node event=text-event children=~["bad"]]
20+++ bad-children ^- (node-tree.first @t) [%node event=text-event children="bad"]
21+++ label-swap ^- (node-tree.first @t) [%node children=~ event=text-event]
22+++ wrong-nominal |= child=(node-tree.second @p) ^- (node-tree.first @t) [%node event=text-event children=~[child]]
23+++ wrong-argument |= child=(node-tree.first @p) ^- (node-tree.first @t) [%node event=text-event children=~[child]]
24+++ keep-generic |= f=$-(@t A) ^- (node-tree.first A) [%node event=f children=~[[%text value="x"]]]
tests/type-generic-construction/expected.txtnew file+65
@@ -0,0 +1,65 @@
1+complete owner: ok
2+owner exports constructed nominal values: ok
3+invalid owner declined: ok
4+view spends one step: ok
5+view retains argument and child identity: ok
6+zero view fuel declined: ok
7+malformed proof declined: ok
8+foreign recursive tail retained: ok
9+zero inference fuel declined: ok
10+one-step leaf retains nominal identity: ok
11+one-step node succeeds: ok
12+nested one-step declined: ok
13+nested two-step succeeds: ok
14+siblings share fuel: ok
15+same-state retry agrees: ok
16+failed retry agrees: ok
17+argument binding retains source identity: ok
18+pending tag retained: ok
19+pending hole retained: ok
20+projection evidence retained: ok
21+hidden variable declined: ok
22+scan exact limit: ok
23+scan over limit declined: ok
24+faced scan exact limit: ok
25+faced scan over limit declined: ok
26+structural substitution declined: ok
27+partial inference; module not checked
28+++ text-event: $-(@t @t)
29+++ ship-event: $-(@t @p)
30+++ leaf: (node-tree.first @t)
31+++ ship-leaf: (node-tree.first @p)
32+++ node: (node-tree.first @t)
33+++ ship-node: (node-tree.first @p)
34+++ nested: (node-tree.first @t)
35+++ wrong-event: recursive mold case does not fit its source shape
36+++ wrong-leaf: recursive mold case does not fit its source shape
37+++ wrong-label: recursive mold case does not fit its source shape
38+++ bad-tag: recursive mold constructor has no matching case
39+++ foreign: list item constraint is not supported by partial inference
40+++ generic: $-($-(@t A) (node-tree.first A))
41+++ pending: tag needs context in partial inference
42+++ extra: recursive mold case does not fit its source shape
43+++ misplaced: recursive mold case does not fit its source shape
44+++ bad-child: list item constraint is not supported by partial inference
45+++ bad-children: recursive mold case needs unsupported inference
46+++ label-swap: recursive mold case does not fit its source shape
47+++ wrong-nominal: list item constraint is not supported by partial inference
48+++ wrong-argument: list item constraint is not supported by partial inference
49+++ keep-generic: $-($-(@t A) (node-tree.first A))
50+partial inference; module not checked
51+++ text-event: $-(@t @t)
52+++ ship-event: $-(@t @p)
53+++ via-leaf: (alias.via @t)
54+++ via-node: (alias.via @p)
55+++ cross-alias: $-((alias.via @t) (node-tree.first @t))
56+++ cross-owner: $-((node-tree.again @t) (alias.via @t))
57+++ wrong-owner: list item constraint is not supported by partial inference
58+++ wrong-arg: list item constraint is not supported by partial inference
59+partial inference; module not checked
60+++ leaf: (node-tree.first @t)
61+++ node: (node-tree.first @p)
62+++ nested: (node-tree.first @t)
63+++ generic: $-(A (node-tree.first A))
64+++ wrong-owner: list item constraint is not supported by partial inference
65+++ wrong-field: recursive mold case needs unsupported inference
tests/type-generic-construction/no-event-client.txtnew file+8
@@ -0,0 +1,8 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+++ leaf ^- (node-tree.first @t) [%text value="x"]
4+++ node ^- (node-tree.first @p) [%node children=~]
5+++ nested ^- (node-tree.first @t) [%node children=~[[%text value="x"]]]
6+++ generic |= x=A ^- (node-tree.first A) [%node children=~]
7+++ wrong-owner |= x=(node-tree.second @t) ^- (node-tree.first @t) [%node children=~[x]]
8+++ wrong-field ^- (node-tree.first @t) [%node children="x"]
tests/type-generic-construction/owner-negative.txtnew file+10
@@ -0,0 +1,10 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ text-event |= x=@t x
8+++ made-leaf ^- (node-tree @t) [%text value="x"]
9+++ made-node ^- (node-tree @t) [%node event=text-event children=~[[%text value="x"]]]
10+++ invalid ^- (node-tree @t) [%text value=~zod]
tests/type-generic-construction/owner-positive.txtnew file+9
@@ -0,0 +1,9 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ text-event |= x=@t x
8+++ made-leaf ^- (node-tree @t) [%text value="x"]
9+++ made-node ^- (node-tree @t) [%node event=text-event children=~[[%text value="x"]]]
tests/type-generic-construction/sibling-values.txtnew file+4
@@ -0,0 +1,4 @@
1+++ leaf [%text value="x"]
2+++ node [%node event=text-event children=~]
3+++ nested [%node event=text-event children=~[[%text value="x"]]]
4+++ siblings [%node event=text-event children=~[[%text value="x"] [%text value="y"]]]
tests/type-generic-construction/tree-no-event.txtnew file+4
@@ -0,0 +1,4 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node children=(list (node-tree M))]
4+++ generic-id |= x=(node-tree A) x
tests/type-generic-construction/tree.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-pattern/about.txtnew file+10
@@ -0,0 +1,10 @@
1+source: docs/spec/grammar.md:57,135 — “Molds may be recursive”; “recursive molds go by name and module”.
2+
3+This shared eval/ship fixture checks a narrow source-proven recursive tree
4+pattern slice, including explicit tags, nonbinding catch-alls, binder scopes,
5+payload arguments, recursive children, aliases, coverage failures, shared
6+fuel, pending state and the 128-arm screening boundary. The source client
7+reports are explicitly partial. A separate owner check requires all ordinary
8+definitions to succeed before interface export. Whole-case binders, nested
9+recursive patterns and unresolved recursive origins remain unsupported. No
10+runtime lowering, watchability, island acceptance or backend claim is made.
tests/type-generic-pattern/client.txtnew file+166
@@ -0,0 +1,166 @@
1+/= first /ui/tree
2+/= second /ui/tree-two
3+/= via /ui/tree-alias
4+++ describe |= x=(node-tree.first @t)
5+ ?- x
6+ [%text value] value
7+ [%node event children] (event "click")
8+++ reverse |= x=(node-tree.first @p)
9+ ?- x
10+ [%node event children] (event "click")
11+ [%text value] ~zod
12+++ generic-children |= x=(node-tree.first A)
13+ ^- (list (node-tree.first A)) ?- x
14+ [%text value] ~
15+ [%node event kids] kids
16+++ alias-children |= x=(alias.via @p)
17+ ^- (list (node-tree.first @p)) ?- x
18+ [%text value] ~
19+ [%node event kids] kids
20+++ rebuild |= x=(node-tree.first @t)
21+ ^- (node-tree.first @t) ?- x
22+ [%text value] [%text value=value]
23+ [%node event children] [%node event=event children=children]
24+++ wrong-return |= x=(node-tree.first @t)
25+ ?- x
26+ [%text value] value
27+ [%node event kids] ~zod
28+++ duplicate |= x=(node-tree.first @t)
29+ ?- x
30+ [%text a] a
31+ [%text b] b
32+++ missing |= x=(node-tree.first @t)
33+ ?- x
34+ [%text a] a
35+++ shadow |= x=(node-tree.first @t)
36+ ?- x
37+ [%text x] x
38+ [%node event kids] "node"
39+++ bad-tag |= x=(node-tree.first @t)
40+ ?- x
41+ [%text value] value
42+ [%other event kids] "node"
43+++ whole-tail |= x=(node-tree.first @t)
44+ ?- x
45+ [%text value] value
46+ [%node payload] payload
47+++ unknown |= x
48+ ?- x
49+ [%text value] value
50+ [%node event kids] "node"
51+++ pending |= x=(node-tree.first @t)
52+ ?- x
53+ [%text value] [%unrelated value]
54+ [%node event kids] [%unrelated "node"]
55+++ dead |= x=(node-tree.first @t)
56+ ?- x
57+ [%text a] a
58+ [%node event kids] (event "ok")
59+ [%text b] b
60+++ wild |= x=(node-tree.first @t)
61+ ?- x
62+ [%text *] "text"
63+ [%node * *] "node"
64+++ whole-wild |= x=(node-tree.first @t)
65+ ?- x
66+ [%text value] value
67+ * "other"
68+++ foreign-children |= x=(node-tree.first @t)
69+ ^- (list (node-tree.second @t)) ?- x
70+ [%text value] ~
71+ [%node event kids] kids
72+++ wrong-argument |= x=(node-tree.first @t)
73+ ^- (list (node-tree.first @p)) ?- x
74+ [%text value] ~
75+ [%node event kids] kids
76+++ nested-child |= x=(node-tree.first @t)
77+ ?- x
78+ [%text value] value
79+ [%node event kids] ?- kids
80+ ~ "empty"
81+ [item remainder] ?- item
82+ [%text value] value
83+ [%node action rest] (action "click")
84+++ duplicate-binder |= x=(node-tree.first @t)
85+ ?- x
86+ [%text value] value
87+ [%node event event] "node"
88+++ target-shadow |= x=(node-tree.first @t)
89+ ?- x
90+ [%text value] value
91+ [%node event x] "node"
92+++ grouped |= x=(node-tree.first @t)
93+ ?- (x)
94+ [%text value] value
95+ [%node event kids] (event "click")
96+++ called |= x=(node-tree.first @t)
97+ ?- (generic-id.first x)
98+ [%text value] value
99+ [%node event kids] (event "click")
100+++ missing-context |= x=(node-tree.first @t)
101+ ^- @t ?- x
102+ [%text item] item
103+++ missing-node |= x=(node-tree.first @t)
104+ ?- x
105+ [%node action kids] (action "click")
106+++ single-wild |= x=(node-tree.first @t)
107+ ?- x
108+ * "all"
109+++ single-bind |= x=(node-tree.first @t)
110+ ?- x
111+ all all
112+++ polymorphic-source ^- (node-tree.first A) [%text value="source"]
113+++ polymorphic-match ?- polymorphic-source
114+ [%text words] words
115+++ all |= x=(node-tree.first @t)
116+ ?- x
117+ * "all"
118+++ catch-tail |= x=(node-tree.first @t)
119+ ?- x
120+ [%text value] value
121+ * "node"
122+++ catch-first-dead |= x=(node-tree.first @t)
123+ ?- x
124+ * "all"
125+ [%text value] value
126+++ late-dead |= x=(node-tree.first @t)
127+ ?- x
128+ [%text value] value
129+ [%node event kids] (event "click")
130+ * "dead"
131+++ duplicate-third |= x=(node-tree.first @t)
132+ ?- x
133+ [%text value] value
134+ [%node event kids] (event "click")
135+ [%text other] other
136+++ nominal-result |= x=(node-tree.first A)
137+ ?- x
138+ [%text value] x
139+ * x
140+++ nominal-context |= x=(node-tree.first A)
141+ ^- (node-tree.first A) ?- x
142+ [%text value] x
143+ * x
144+++ forbidden-bind |= x=(node-tree.first @t)
145+ ?- x
146+ [%text value] value
147+ rest rest
148+++ missing-again |= x=(node-tree.first @t)
149+ ?- x
150+ [%text value] value
151+++ catch-pending |= x=(node-tree.first @t)
152+ ?- x
153+ [%text value] [%unrelated value]
154+ * [%unrelated "node"]
155+++ called-all |= x=(node-tree.first @t)
156+ ?- (generic-id.first x)
157+ * "all"
158+++ called-context |= x=(node-tree.first @t)
159+ ^- @t ?- (generic-id.first x)
160+ * "all"
161+++ called-nominal |= x=(node-tree.first A)
162+ ^- (node-tree.first A) ?- (generic-id.first x)
163+ * x
164+++ called-missing |= x=(node-tree.first @t)
165+ ?- (generic-id.first x)
166+ [%text value] value
tests/type-generic-pattern/expected.txtnew file+91
@@ -0,0 +1,91 @@
1+owner describe has nominal sample and text result: ok
2+owner rebuild preserves nominal identity: ok
3+owner children preserves quantified recursive identity: ok
4+invalid owner parses and is rejected: ok
5+zero fuel declined: ok
6+one-step match: ok
7+nested match requires two steps: ok
8+same-state retry agrees: ok
9+pending tag retained: ok
10+pending hole retained: ok
11+projection evidence retained: ok
12+raw bound variable declined: ok
13+polymorphic scheme gets fresh identities: ok
14+polymorphic missing arm declined: ok
15+catch-all eligible: ok
16+whole binder stays unsupported: ok
17+whole structural tail stays unsupported: ok
18+128 arms eligible: ok
19+129 arms declined: ok
20+zero arm budget declined: ok
21+128-arm view consumes one step: ok
22+129-arm view rolls back: ok
23+hidden view stays nominally unknown: ok
24+catch-all keeps fuel and pending state: ok
25+partial inference; module not checked
26+++ describe: $-((node-tree.first @t) @t)
27+++ reverse: $-((node-tree.first @p) @p)
28+++ generic-children: $-((node-tree.first A) (list (node-tree.first A)))
29+++ alias-children: $-((alias.via @p) (list (node-tree.first @p)))
30+++ rebuild: $-((node-tree.first @t) (node-tree.first @t))
31+++ wrong-return: union branch result matching needs unsupported inference
32+++ duplicate: branch arm is covered by earlier arms
33+/tests/tree/client.jibb:31:5: covered arm
34+ [%text b] b
35+ ^
36+++ missing: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
37+++ shadow: pattern binder shadows a name
38+++ bad-tag: branch is not supported by partial inference
39+++ whole-tail: branch is not supported by partial inference
40+++ unknown: branch is not supported by partial inference
41+++ pending: union branch result matching needs unsupported inference
42+++ dead: branch arm is covered by earlier arms
43+/tests/tree/client.jibb:59:5: covered arm
44+ [%text b] b
45+ ^
46+++ wild: $-((node-tree.first @t) @t)
47+++ whole-wild: $-((node-tree.first @t) @t)
48+++ foreign-children: union branch result constraint is not supported by partial inference
49+++ wrong-argument: union branch result constraint is not supported by partial inference
50+++ nested-child: $-((node-tree.first @t) @t)
51+++ duplicate-binder: pattern binder shadows a name
52+++ target-shadow: pattern binder shadows a name
53+++ grouped: $-((node-tree.first @t) @t)
54+++ called: $-((node-tree.first @t) @t)
55+++ missing-context: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
56+++ missing-node: missing union case [%text value=@t]
57+++ single-wild: $-((node-tree.first @t) @t)
58+++ single-bind: branch is not supported by partial inference
59+++ polymorphic-source: (node-tree.first A)
60+++ polymorphic-match: missing union case [%node [event=$-(@t A) children=(list (node-tree.first A))]]
61+++ all: $-((node-tree.first @t) @t)
62+++ catch-tail: $-((node-tree.first @t) @t)
63+++ catch-first-dead: branch arm is covered by earlier arms
64+/tests/tree/client.jibb:125:5: covered arm
65+ [%text value] value
66+ ^
67+++ late-dead: branch arm is covered by earlier arms
68+/tests/tree/client.jibb:130:5: covered arm
69+ * "dead"
70+ ^
71+++ duplicate-third: branch arm is covered by earlier arms
72+/tests/tree/client.jibb:135:5: covered arm
73+ [%text other] other
74+ ^
75+++ nominal-result: $-((node-tree.first A) (node-tree.first A))
76+++ nominal-context: $-((node-tree.first A) (node-tree.first A))
77+++ forbidden-bind: branch is not supported by partial inference
78+++ missing-again: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
79+++ catch-pending: union branch result matching needs unsupported inference
80+++ called-all: branch pattern is not supported by partial inference
81+++ called-context: $-((node-tree.first @t) @t)
82+++ called-nominal: $-((node-tree.first A) (node-tree.first A))
83+++ called-missing: single-case pattern needs unsupported inference
84+partial inference; module not checked
85+++ words: $-((node-tree.first @t) @t)
86+++ children: $-((node-tree.first A) (list (node-tree.first A)))
87+++ duplicate: branch arm is covered by earlier arms
88+/tests/tree/no-event.jibb:13:5: covered arm
89+ [%text b] b
90+ ^
91+++ nested-pattern: branch is not supported by partial inference
tests/type-generic-pattern/no-event.txtnew file+17
@@ -0,0 +1,17 @@
1+/= first /ui/tree
2+++ words |= x=(node-tree.first @t)
3+ ?- x
4+ [%text value] value
5+ [%node kids] "node"
6+++ children |= x=(node-tree.first A)
7+ ^- (list (node-tree.first A)) ?- x
8+ [%text value] ~
9+ [%node kids] kids
10+++ duplicate |= x=(node-tree.first @t)
11+ ?- x
12+ [%text a] a
13+ [%text b] b
14+++ nested-pattern |= x=(node-tree.first @t)
15+ ?- x
16+ [%text value] value
17+ [%node [first rest]] "node"
tests/type-generic-pattern/owner-bad.txtnew file+22
@@ -0,0 +1,22 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ describe |= x=(node-tree @t)
8+ ?- x
9+ [%text value] value
10+ [%node event kids] (event "click")
11+++ children |= x=(node-tree A)
12+ ^- (list (node-tree A)) ?- x
13+ [%text value] ~
14+ [%node event kids] kids
15+++ rebuild |= x=(node-tree @t)
16+ ^- (node-tree @t) ?- x
17+ [%text value] [%text value=value]
18+ [%node event kids] [%node event=event children=kids]
19+++ wrong |= x=(node-tree @t)
20+ ?- x
21+ [%text value] value
22+ [%node event event] "bad"
tests/type-generic-pattern/owner.txtnew file+18
@@ -0,0 +1,18 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ describe |= x=(node-tree @t)
8+ ?- x
9+ [%text value] value
10+ [%node event kids] (event "click")
11+++ children |= x=(node-tree A)
12+ ^- (list (node-tree A)) ?- x
13+ [%text value] ~
14+ [%node event kids] kids
15+++ rebuild |= x=(node-tree @t)
16+ ^- (node-tree @t) ?- x
17+ [%text value] [%text value=value]
18+ [%node event kids] [%node event=event children=kids]
tests/type-generic-pattern/poly-values.txtnew file+2
@@ -0,0 +1,2 @@
1+++ missing ?- x
2+ [%text value] value
tests/type-generic-pattern/values.txtnew file+18
@@ -0,0 +1,18 @@
1+++ simple ?- x
2+ [%text value] value
3+ [%node event kids] (event "click")
4+++ nested ?- x
5+ [%text value] value
6+ [%node event kids] ?- kids
7+ ~ "empty"
8+ [item remainder] ?- item
9+ [%text value] value
10+ [%node action rest] (action "click")
11+++ fallback ?- x
12+ [%text value] value
13+ * "node"
14+++ whole-bind ?- x
15+ other other
16+++ whole-tail ?- x
17+ [%node payload] "node"
18+ * "other"
tests/type-generic-recursion/about.txtnew file+14
@@ -0,0 +1,14 @@
1+source: docs/spec/grammar.md:57,135,162 — “Molds may be recursive”; “recursive molds go by name and module”; a number defaults when its `++` is checked.
2+
3+This shared eval and ship fixture checks a deliberately narrow source-backed
4+recursive identity: two distinct tagged cases, a text leaf and a node with a
5+message-producing gate and a list of recursive children. The test-only tree is
6+not the UI `element` representation. A complete import-free owner module must
7+check before its interface is published. Same-origin aliases retain identity,
8+while different origins, unproved casts and broader matching remain unsupported.
9+A wrong-aura constructor fails the complete owner check. An opaque recursive type prevents premature numeric defaulting;
10+its gate-freedom remains unknown. Source/cache/prelude changes, cycles,
11+nonuniform recursion, invalid unused molds and local shadows fail closed.
12+
13+The client report explicitly remains partial. No runtime layout, program kind,
14+watchability or backend behavior is claimed.
tests/type-generic-recursion/alias.txtnew file+3
@@ -0,0 +1,3 @@
1+/= source /ui/tree
2++$ alias |$ [A] (node-tree.source A)
3+++ identity |= x=(alias A) x
tests/type-generic-recursion/bad-constructor.txtnew file+8
@@ -0,0 +1,8 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+
8+++ construct ^- (node-tree @t) [%text value=~zod]
tests/type-generic-recursion/bad-match.txtnew file+10
@@ -0,0 +1,10 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ match |= x=(node-tree @t)
8+ ?- x
9+ [%text value] value
10+ [%node event event] "node"
tests/type-generic-recursion/bad-mold.txtnew file+8
@@ -0,0 +1,8 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+
8++$ unused _
tests/type-generic-recursion/bad-parameter.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree @t))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-recursion/chain.txtnew file+3
@@ -0,0 +1,3 @@
1++$ chain |$ [A]
2+ ~
3+ [i=A t=(chain A)]
tests/type-generic-recursion/client.txtnew file+11
@@ -0,0 +1,11 @@
1+/= first /ui/tree
2+/= again /ui/tree
3+/= second /ui/tree-two
4+/= via /ui/tree-alias
5+++ from-first |= x=(node-tree.first @t) x
6+++ from-again |= x=(node-tree.again @p) x
7+++ same-origin |= x=(node-tree.first @t) ^- (node-tree.again @t) x
8+++ from-alias |= x=(alias.via @t) x
9+++ through-alias |= x=(node-tree.first @t) ^- (alias.via @t) x
10+++ different-origin |= x=(node-tree.first @t) ^- (node-tree.second @t) x
11+++ independent |= [a=(node-tree.first @t) b=(node-tree.first @p)] [(generic-id.first a) (generic-id.first b)]
tests/type-generic-recursion/expected.txtnew file+35
@@ -0,0 +1,35 @@
1+source module complete: ok
2+generic mold quantified: ok
3+distinct arguments decline: ok
4+distinct origins decline: ok
5+occurs check: ok
6+cell construction stays opaque: ok
7+noun construction stays opaque: ok
8+unindexed recursion declined: ok
9+alteration rejects missing line: ok
10+alteration rejects repeated line: ok
11+gate freedom unknown: ok
12+gate defaulting conservative: ok
13+unused mold hole declined: ok
14+invalid constructor declined: ok
15+invalid matching declined: ok
16+nonuniform recursion declined: ok
17+identical local shadow declined: ok
18+different local shadow declined: ok
19+local recursion declined: ok
20+unreserved local list shadow declined: ok
21+altered prelude list declined: ok
22+cached source reuse: ok
23+changed source invalidates cache: ok
24+changed source fresh proof: ok
25+duplicate source declined: ok
26+active import cycle declined: ok
27+changed prelude invalidates cache: ok
28+partial inference; module not checked
29+++ from-first: $-((node-tree.first @t) (node-tree.first @t))
30+++ from-again: $-((node-tree.again @p) (node-tree.again @p))
31+++ same-origin: $-((node-tree.first @t) (node-tree.again @t))
32+++ from-alias: $-((alias.via @t) (alias.via @t))
33+++ through-alias: $-((node-tree.first @t) (alias.via @t))
34+++ different-origin: cast constraint is not supported by partial inference
35+++ independent: $-([a=(node-tree.first @t) b=(node-tree.first @p)] [(node-tree.first @t) (node-tree.first @p)])
tests/type-generic-recursion/list-shadow.txtnew file+4
@@ -0,0 +1,4 @@
1++$ list |$ [M] [%fake value=M]
2++$ node-tree |$ [M]
3+ [%text value=@t]
4+ [%node children=(list (node-tree M))]
tests/type-generic-recursion/local-distinct.txtnew file+11
@@ -0,0 +1,11 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ shadow |= x=@t
8+ +$ node-tree |$ [M]
9+ [%different value=@t]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
11+ x
tests/type-generic-recursion/local-only.txtnew file+11
@@ -0,0 +1,11 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ local-only |= x=@t
8+ +$ local-tree |$ [M]
9+ [%text value=@t]
10+ [%node event=$-(@t M) children=(list (local-tree M))]
11+ x
tests/type-generic-recursion/local-shadow.txtnew file+11
@@ -0,0 +1,11 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
7+++ shadow |= x=@t
8+ +$ node-tree |$ [M]
9+ [%text value=@t]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
11+ x
tests/type-generic-recursion/tree-changed.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%branch event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-recursion/tree.txtnew file+6
@@ -0,0 +1,6 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-import-overlap/about.txtnew file+24
@@ -0,0 +1,24 @@
1+Source-aware Hoon `$?` cases are independently evaluated before the reader
2+proves a shared runtime noun or a disjoint pair of literal outer tags. The
3+positive overlap witness checks supported projected atoms, cells, faces and
4+forks across the original cases. It compares singleton noun values regardless
5+of aura. Some overlap shapes remain unsupported.
6+
7+The mixed-aura zero and nonzero controls prove actual overlap. Boolean tails
8+share loobean nouns, and `~` is the null singleton, which overlaps `@t`; unequal,
9+opaque and other unproven payloads remain unsupported. The structured diagnostic
10+bridge reports a definite overlap at the Jibb use site, while the disjoint
11+case infers and an unresolved case stays unsupported. The Hoon source case
12+locations are unavailable in this fixture and are not claimed. This is a
13+partial report and does not prove the whole module was checked. This named
14+reader proof is not a mark-reader overlap diagnostic.
15+
16+The existing 4,096 source-proof fuel limits dependency-spec visits. Chapter
17+lookup, Hoon play, type projection, parsing and all other work are outside
18+that limit. Unknown or exhausted source proof stays unsupported.
19+
20+The added `$?` source screen caps the total raw noun nodes at 4,096 and
21+the case count at 128 before checking tags. The shared guard exercises exact
22+and exceeded budgets, deep and wide inputs, nested union forms, and unknown
23+source cases. These limits do not meter atom sizes, chapter lookup, Hoon play,
24+reader projection or other work. The pre-existing `$%` path is unchanged.
tests/type-import-overlap/expected.txtnew file+26
@@ -0,0 +1,26 @@
1+mixed-zero: invalid/overlap: Hoon union cases overlap
2+nonzero: invalid/overlap: Hoon union cases overlap
3+unequal-singletons: unsupported: a Hoon union needs a source-level disjointness check
4+swapped: invalid/overlap: Hoon union cases overlap
5+separate-tags: (union [left [ @t]] [right [(union @f:0 @f:1) @t]])
6+separate-terms: (union [left [ @t]] [right [yes @t]])
7+different-value: unsupported: a Hoon union needs a source-level disjointness check
8+different-tail: unsupported: a Hoon union needs a source-level disjointness check
9+unknown-middle: unsupported: a Hoon union needs a source-level disjointness check
10+unsupported-gate: unsupported: a Hoon union needs a source-level disjointness check
11+dollar-percent: (union [left [ @t]] [right [yes @t]])
12+identical: invalid/overlap: Hoon union cases overlap
13+cross-zero: invalid/overlap: Hoon union cases overlap
14+boolean-tail: invalid/overlap: Hoon union cases overlap
15+empty-tail: invalid/overlap: Hoon union cases overlap
16+bounded source screen controls passed
17+mismatched-selected: error: Hoon module provenance does not match the selected mold
18+missing: error: Hoon mold `missing` is not declared
19+bare-zuse: error: Hoon module provenance is unavailable
20+partial inference; module not checked
21+++ overlap: Hoon union cases overlap
22+/ui/test.jibb:2:17: invalid imported mold
23+++ overlap |= x=mixed-zero.fixture x
24+ ^
25+++ disjoint: $-(([%left [%$ @t]] [%right [? @t]]) ([%left [%$ @t]] [%right [? @t]]))
26+++ unknown: sample mold is not supported by partial inference
tests/type-import-overlap/source.txtnew file+4
@@ -0,0 +1,4 @@
1+/- fixture
2+++ overlap |= x=mixed-zero.fixture x
3+++ disjoint |= x=separate-tags.fixture x
4+++ unknown |= x=unknown-middle.fixture x
tests/type-import-overlap/sur.txtnew file+17
@@ -0,0 +1,17 @@
1+|%
2++$ mixed-zero $?([%tag %$ @t] [%tag ? @t])
3++$ nonzero $?([%tag %.n @t] [%tag ? @t])
4++$ unequal-singletons $?([%tag %.n @t] [%tag %$ @t])
5++$ swapped $?([%tag ? @t] [%tag %$ @t])
6++$ separate-tags $?([%left %$ @t] [%right ? @t])
7++$ separate-terms $?([%left %$ @t] [%right %yes @t])
8++$ different-value $?([%tag %yes @t] [%tag ? @t])
9++$ different-tail $?([%tag %$ @t] [%tag ? @p])
10++$ unknown-middle $?([%tag * @t] [%tag ? @t])
11++$ unsupported-gate $?([%tag %$ @t] [%tag ? $-(@t @t)])
12++$ dollar-percent $%([%left %$ @t] [%right %yes @t])
13++$ identical $?([%tag %$ @t] [%tag %$ @t])
14++$ cross-zero $?([%tag %.y @t] [%tag %$ @t])
15++$ boolean-tail $?([%tag %$ ?] [%tag ? ?])
16++$ empty-tail $?([%tag %$ ~] [%tag ? @t])
17+--
tests/type-import-structural/about.txtnew file+14
@@ -0,0 +1,14 @@
1+The actual Hoon source includes local aliases, nested cells, equal and unequal
2+singleton nouns, open auras and three-/four-case unions. The reader reports a
3+definite overlap only when its bounded structural witness finds a shared noun;
4+otherwise ordinary source-aware disjointness checks can still recover a union,
5+or the outcome remains unsupported. The checker report is partial and points
6+to the Jibb mold use; source-case positions are unavailable here.
7+
8+Low-level controls exercise void at the root and in a cell, opaque references
9+and applications, named and faced nodes, nested alternatives, source/tag
10+mismatches and source, pair and type-node fuel. The attempted Hoon source form
11+`+$ never !!` did not compile, so the void controls use an actual `%void`
12+reader node and do not claim a source-level empty mold. The positive proof
13+only bounds specific traversals; Hoon play, projection, chapter lookup, atom
14+byte sizes and the preexisting whole-graph checks are outside those budgets.
tests/type-import-structural/expected.txtnew file+41
@@ -0,0 +1,41 @@
1+same-alias: invalid/overlap: Hoon union cases overlap
2+separate-alias: (union [tag [one @t]] [tag [two @t]])
3+deep-match: invalid/overlap: Hoon union cases overlap
4+deep-distinct: (union [tag [[inner [one three]] @t]] [tag [[inner [two three]] @t]])
5+tail-distinct: unsupported: a Hoon union needs a source-level disjointness check
6+later-overlap: invalid/overlap: Hoon union cases overlap
7+many-safe: (union [tag [one @t]] [tag [two @t]] [tag [three @t]])
8+open-atoms: invalid/overlap: Hoon union cases overlap
9+different-aura: unsupported: Hoon union disjointness could not be verified
10+same literal: ok
11+different literals: ok
12+named expands: ok
13+opaque declines: ok
14+opaque versus noun: ok
15+unknown aura: ok
16+open admits zero: ok
17+different tail: ok
18+nested face: ok
19+fork later case: ok
20+empty fuel: ok
21+cell needs both: ok
22+later pair: ok
23+pair fuel: ok
24+void: ok
25+void position: ok
26+opaque apply: ok
27+source node fuel: ok
28+source case cap: ok
29+wrong projected head: ok
30+wrong case count: ok
31+partial inference; module not checked
32+++ overlap: Hoon union cases overlap
33+/ui/structural.jibb:2:20: invalid imported mold
34+++ overlap |= x=deep-match.fixture x
35+ ^
36+++ distinct: $-(([%tag [%one @t]] [%tag [%two @t]]) ([%tag [%one @t]] [%tag [%two @t]]))
37+++ unknown: sample mold is not supported by partial inference
38+++ multi: Hoon union cases overlap
39+/ui/structural.jibb:5:18: invalid imported mold
40+++ multi |= x=later-overlap.fixture x
41+ ^
tests/type-import-structural/source.txtnew file+5
@@ -0,0 +1,5 @@
1+/- fixture
2+++ overlap |= x=deep-match.fixture x
3+++ distinct |= x=separate-alias.fixture x
4+++ unknown |= x=different-aura.fixture x
5+++ multi |= x=later-overlap.fixture x
tests/type-import-structural/sur.txtnew file+12
@@ -0,0 +1,12 @@
1+|%
2++$ scalar ?(%$ %one)
3++$ same-alias $?([%tag scalar @t] [%tag %$ @t])
4++$ separate-alias $?([%tag %one @t] [%tag %two @t])
5++$ deep-match $?([%tag [%inner [%.y %three]] @t] [%tag [%inner [%$ %three]] @t])
6++$ deep-distinct $?([%tag [%inner [%one %three]] @t] [%tag [%inner [%two %three]] @t])
7++$ tail-distinct $?([%tag %$ %one] [%tag %.y %two])
8++$ later-overlap $?([%x %one @t] [%y %one @t] [%tag %.y @t] [%tag %$ @t])
9++$ many-safe $?([%tag %one @t] [%tag %two @t] [%tag %three @t])
10++$ open-atoms $?([%tag @t @ud] [%tag @tas @t])
11++$ different-aura $?([%tag @p @t] [%tag @t @t])
12+--
tests/type-import/about.txt+10−2
@@ -22,8 +22,16 @@ Jibb-written collection molds remain unsupported.
2222A self-recursive /sur mold is an opaque module/name identity. Distinct names
2323or modules conflict; aliases, foreign references, unfolding and out-of-scope
2424names remain unsupported. The fixture checks these limits as well as malformed
25−references and overlapping recursive graphs. The reader itself rejects an
26−overlapping source union before Hoon can collapse it. A missing import and a
25+references and overlapping recursive graphs. The reader rejects the overlapping
26+source union instead of publishing a collapsed result. A missing import and a
2727duplicate supplied mold fail closed. The types output is partial and does not
2828claim that the module was checked. The same fixture runs under urbit eval and
2929through -test on the fake ship.
30+
31+The real-reader mixed-zero case places `%$` and `?` under the same outer tag;
32+both allow the noun zero, so the reader reports definite overlap. The distinct-tag
33+`%$`/`?` case and distinct-tag term singletons are successful reader/checker
34+controls. The reader also reports definite overlap for the collapsed source
35+whose two cases are both `[%x @ud]`. The overlap error points at the Jibb use site; the Hoon source case
36+positions are not available in this fixture. These are source-aware
37+reads and the checker report remains partial.
tests/type-import/expected.txt+10−1
@@ -104,7 +104,16 @@ partial inference; module not checked
104104++ flag-extra: sample mold is not supported by partial inference
105105++ flag-faced: sample mold is not supported by partial inference
106106++ flag-malformed: sample mold is not supported by partial inference
107−reader-collapsed: error: Hoon union disjointness could not be verified
107+++ mixed-zero: Hoon union cases overlap
108+/test.jibb:81:20: invalid imported mold
109+++ mixed-zero |= x=mixed-zero.fixture x
110+ ^
111+++ separate-tags: $-(([%left [%$ @t]] [%right [? @t]]) ([%left [%$ @t]] [%right [? @t]]))
112+++ separate-terms: $-(([%left [%$ @t]] [%right [%yes @t]]) ([%left [%$ @t]] [%right [%yes @t]]))
113+reader-collapsed: error: Hoon union cases overlap
114+reader-mixed-zero: error: Hoon union cases overlap
115+reader-separate-tags: (union [left [ @t]] [right [(union @f:0 @f:1) @t]])
116+reader-separate-terms: (union [left [ @t]] [right [yes @t]])
108117partial inference; module not checked
109118++ use: recursive mold name is not available in this scope
110119partial inference; module not checked
tests/type-import/source.txt+5
@@ -76,3 +76,8 @@
7676++ flag-extra |= x=flag-extra.fixture x
7777++ flag-faced |= x=flag-faced.fixture x
7878++ flag-malformed |= x=flag-malformed.fixture x
79+
80+:: Real source-aware nested mixed-aura cases.
81+++ mixed-zero |= x=mixed-zero.fixture x
82+++ separate-tags |= x=separate-tags.fixture x
83+++ separate-terms |= x=separate-terms.fixture x
tests/type-import/sur.txt+3
@@ -21,4 +21,7 @@
2121+$ zero-choice $@(~ [text=@t n=@ud])
2222+$ zero-nested [entry=zero-choice code=@ud]
2323+$ zero-lookalike $@(~ [~ @t])
24++$ mixed-zero $?([%tag %$ @t] [%tag ? @t])
25++$ separate-tags $?([%left %$ @t] [%right ? @t])
26++$ separate-terms $?([%left %$ @t] [%right %yes @t])
2427--
tests/type-list-alias/expected.txt+4−4
@@ -1,6 +1,6 @@
11canonical
22partial inference; module not checked
3−++ text: $-((list @t) (list @t))
3+++ text-value: $-((list @t) (list @t))
44++ ship: $-((list @p) (list @p))
55++ wrong: list item does not fit its expected type
66/ui/test.jibb:3:13: expected item has type @t
@@ -12,13 +12,13 @@ partial inference; module not checked
1212++ shadow: local molds shadow a name
1313altered
1414partial inference; module not checked
15−++ text: sample mold is not supported by partial inference
15+++ text-value: sample mold is not supported by partial inference
1616++ ship: sample mold is not supported by partial inference
1717++ wrong: cast mold is not supported by partial inference
1818++ shadow: sample mold is not supported by partial inference
1919omitted
2020partial inference; module not checked
21−++ text: sample mold is not supported by partial inference
21+++ text-value: sample mold is not supported by partial inference
2222++ ship: sample mold is not supported by partial inference
2323++ wrong: cast mold is not supported by partial inference
2424++ shadow: sample mold is not supported by partial inference
@@ -30,7 +30,7 @@ partial inference; module not checked
3030prelude source does not parse; module import inference unsupported
3131cyclic
3232partial inference; module not checked
33−++ text: sample mold is not supported by partial inference
33+++ text-value: sample mold is not supported by partial inference
3434++ ship: sample mold is not supported by partial inference
3535++ wrong: cast mold is not supported by partial inference
3636++ shadow: local molds shadow a name
tests/type-page-main/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: my-app/ui/about.jibb, my-app/ui/blog/index.jibb and my-app/ui/index.jibb; their fixtures and real API/UI/reader sources must remain byte-identical.
2+tests: Shared eval and ship full checks for static and direct data pages, exact closed main types, a direct-constructor reply, structural downstream imports, and rejection of wrong/arbitrary mains, page aliases, indirect, pure, hand-built, typed and diff loads, missing evidence and store paths. No rendering or runtime request execution is claimed.
3+expect: shared eval and ship guards
tests/type-page-main/arbitrary-main.txtnew file+1
@@ -0,0 +1 @@
1+++ main 42
tests/type-page-main/blog-api.txtnew file+5
@@ -0,0 +1,5 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+/% %posts
3+
4++$ paths
5+ [%posts /posts posts]
tests/type-page-main/blog-index.txtnew file+9
@@ -0,0 +1,9 @@
1+/- blog
2+/= api /ui/api/blog
3+/= card /ui/components/card
4+
5+++ main (page load view)
6+++ load |=(~ (posts.api same))
7+
8+++ view |= ps=(list post.blog)
9+ column ~[gap+%s2] (turn ps card.card)
tests/type-page-main/blog-sur.txtnew file+6
@@ -0,0 +1,6 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|%
3++$ title @t
4++$ post [title=title slug=@ta]
5++$ chain $@(~ [value=@ud next=chain])
6+--
tests/type-page-main/card.txtnew file+5
@@ -0,0 +1,5 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+/- blog
3+
4+++ card |= p=post.blog
5+ text title.p
tests/type-page-main/ctor-page.txtnew file+10
@@ -0,0 +1,10 @@
1+/= todo /ui/api/todo
2+
3++$ msg
4+ [%got todos=(list item.todo)]
5+++ main (page load view)
6+++ load |= ~
7+ ^- (ask msg) (todos.todo |=%got)
8+
9+++ view |= m=msg
10+ text "Todos loaded"
tests/type-page-main/diff-load.txtnew file+11
@@ -0,0 +1,11 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ main (page load view)
5+++ fold |= [d=[%todo-update todo-update.todo] s=todos.todo] s
6+++ load |=(~ (changes.todo same fold))
7+
8+++ view |= ts=(list item.todo)
9+ column ~[pad+%s3] ~[
10+ heading 1 "My ship"
11+ island main.todo-list ts
tests/type-page-main/hand-built-load.txtnew file+14
@@ -0,0 +1,14 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ main (page load view)
5+++ load |=(~
6+ ^- (ask (list item.todo))
7+ [%agent api="/ui/api/todo" case=%todos agent=%todo path=~[%todos] scry=~ receive=receive])
8+++ receive |= input=[mark=@tas state=(unit *) fact=*]
9+ ^- [state=* message=(list item.todo)] [state=0 message=~]
10+
11+++ view |= ts=(list item.todo)
12+ column ~[pad+%s3] ~[
13+ heading 1 "My ship"
14+ island main.todo-list ts
tests/type-page-main/index.txtnew file+10
@@ -0,0 +1,10 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ main (page load view)
5+++ load |=(~ (todos.todo same))
6+
7+++ view |= ts=(list item.todo)
8+ column ~[pad+%s3] ~[
9+ heading 1 "My ship"
10+ island main.todo-list ts
tests/type-page-main/indirect-load.txtnew file+11
@@ -0,0 +1,11 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ main (page load view)
5+++ request |=(~ (todos.todo same))
6+++ load |=(~ (request ~))
7+
8+++ view |= ts=(list item.todo)
9+ column ~[pad+%s3] ~[
10+ heading 1 "My ship"
11+ island main.todo-list ts
tests/type-page-main/page-alias.txtnew file+11
@@ -0,0 +1,11 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ make-page page
5+++ main (make-page load view)
6+++ load |=(~ (todos.todo same))
7+
8+++ view |= ts=(list item.todo)
9+ column ~[pad+%s3] ~[
10+ heading 1 "My ship"
11+ island main.todo-list ts
tests/type-page-main/posts-mark.txtnew file+6
@@ -0,0 +1,6 @@
1+:: Fixture for the documented examples; not supplied by the design doc.
2+|_ a=(list post:blog)
3+++ grab |% ++ noun (list post:blog) --
4+++ grow |% ++ noun a --
5+++ grad %noun
6+--
tests/type-page-main/pure-load.txtnew file+10
@@ -0,0 +1,10 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ main (page load view)
5+++ load |=(~ (pure ~))
6+
7+++ view |= ts=(list item.todo)
8+ column ~[pad+%s3] ~[
9+ heading 1 "My ship"
10+ island main.todo-list ts
tests/type-page-main/static.txtnew file+7
@@ -0,0 +1,7 @@
1+++ main view
2+
3+++ view
4+ column ~[width+[%fill 1] pad+%s3 gap+%s2] ~[
5+ heading 1 "About this ship"
6+ para ~[(text "Hosted on Urbit. This page ships no JavaScript.")]
7+ el ~[tone+%accent] (link %/blog "Read the blog")
tests/type-page-main/todo-api.txtnew file+13
@@ -0,0 +1,13 @@
1+:: /ui/api/todo.jibb
2+/- todo
3+/% %todo-action
4+/% %todos
5+/% %todo-update
6+/% %todo-item
7+
8++$ item item.todo
9++$ poke todo-action
10++$ paths
11+ [%todos /todos todos]
12+ [%changes /changes (facts todos todo-update)]
13+ [%todo-by-id /todo/[id=@ud] todo-item]
tests/type-page-main/todo-island.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-page-main/typed-load.txtnew file+8
@@ -0,0 +1,8 @@
1+/= todo /ui/api/todo
2+/= todo-list /ui/todo-list
3+
4+++ main (page load view)
5+++ load |=(~ (todo-by-id.todo 1 |=%one))
6+
7+++ view |= item=todo-item.todo
8+ text "One todo"
tests/type-page-main/wrong-static.txtnew file+1
@@ -0,0 +1 @@
1+++ main (button "Go" %go)
tests/type-program-main/about.txtnew file+1
@@ -0,0 +1 @@
1+tests: A direct four-wing program main uses the ordinary source-backed program fit. Its init data and model are closed and gate-free within the shared 256-node budget, and subs syntactically returns null through transparent forms. The fixture checks exported and downstream imported types, source evidence, structured and legacy adapters, and fail-closed controls. It does not execute a program or establish runtime watchability.
tests/type-program-main/alias-main.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program-alias init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ program-alias program
tests/type-program-main/arbitrary-main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main init
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-main/island
2+++ imported init.main.island-prog
tests/type-program-main/gate-data.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=$-(@t @t) ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/gate-model.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud callback=$-(@t @t)]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0 callback=echo]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ echo |= input=@t input
tests/type-program-main/initializer-consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-main/initializer
2+++ imported init.main.island-prog
tests/type-program-main/initializer-earlier.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts ~zod ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-error.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=@t]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-generic.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-message.txtnew file+13
@@ -0,0 +1,13 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ other
6+ %start
7+ %stop
8+++ main (program init update view subs)
9+++ init |= ts=(list @t) [ts "" ~]
10+++ update |= [msg=other state=model]
11+ ^- [model (list (cmd other))] [state ~]
12+++ view |= state=model ^- (element message) (text "view")
13+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-missing.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ update |= [msg=message state=model]
7+ ^- [model (list (cmd message))] [state ~]
8+++ view |= state=model ^- (element message) (text "view")
9+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-model.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ other [xs=(list @t) draft=@t error=(unit @t) extra=@ud]
3++$ message
4+ %start
5+ %stop
6+++ main (program init update view subs)
7+++ init |= ts=(list @t) [ts "" ~]
8+++ update |= [msg=message state=other]
9+ ^- [other (list (cmd message))] [state ~]
10+++ view |= state=model ^- (element message) (text "view")
11+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-no-main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ direct (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-subs.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state ~
tests/type-program-main/initializer-tag.txtnew file+13
@@ -0,0 +1,13 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ orphan
12+ ~& %unrelated
13+ 0
tests/type-program-main/initializer-unfaced.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= input=[message model]
8+ ^- [model (list (cmd message))] [[~ "" ~] ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer.txtnew file+12
@@ -0,0 +1,12 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ (~)
tests/type-program-main/mismatched-model.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=@p]
8+ ^- [@p (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/nonempty-subs.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ ~[[%watch (pure %start)]]
tests/type-program-main/open-message.txtnew file+7
@@ -0,0 +1,7 @@
1++$ model [count=@ud]
2+++ main (program init update view subs)
3+++ init |= input=@t ^- model [count=0]
4+++ update |= [msg=M state=model]
5+ ^- [model (list (cmd M))] [state ~]
6+++ view |= state=model ^- (element M) (text "view")
7+++ subs |= state=model ^- (list (sub M)) ~
tests/type-program-main/source.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program (init) update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ (~)
tests/type-program-update/consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-update/island
2+++ imported update.main.island-prog
tests/type-program-update/malformed-sample.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [count=@ud]
2++$ message %noop
3+++ main (program init update view subs)
4+++ init |= input=@t ^- model [count=0]
5+++ update |= event=message
6+ ?- event
7+ %noop [[count=0] ~]
8+++ view |= state=model ^- (element message) (text "view")
9+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-update/missing-list.txtnew file+15
@@ -0,0 +1,15 @@
1++$ model [count=@ud]
2++$ message
3+ %noop
4+ [%set value=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [event=message current=model]
8+ ?- event
9+ %noop [current ~]
10+ [%set value]
11+ ?- (gth value 10)
12+ %.y [current(count=value) ~]
13+ %.n [current ~]
14+++ view |= state=model ^- (element message) (text "view")
15+++ subs !!
tests/type-program-update/non-main.txtnew file+14
@@ -0,0 +1,14 @@
1++$ model [count=@ud]
2++$ message
3+ %noop
4+ [%set value=@ud]
5+++ init |= input=@t ^- model [count=0]
6+++ update |= [event=message current=model]
7+ ?- event
8+ %noop [current ~]
9+ [%set value]
10+ ?- (gth value 10)
11+ %.y [current(count=value) ~]
12+ %.n [current ~]
13+++ view |= state=model ^- (element message) (text "view")
14+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-update/source.txtnew file+15
@@ -0,0 +1,15 @@
1++$ model [count=@ud]
2++$ message
3+ %noop
4+ [%set value=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [event=message current=model]
8+ ?- event
9+ %noop [current ~]
10+ [%set value]
11+ ?- (gth value 10)
12+ %.y [current(count=value) ~]
13+ %.n [current ~]
14+++ view |= state=model ^- (element message) (text "view")
15+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-update/three-slot-sample.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [count=@ud]
2++$ message %noop
3+++ main (program init update view subs)
4+++ init |= input=@t ^- model [count=0]
5+++ update |= [event=message current=model extra=@ud]
6+ ?- event
7+ %noop [current ~]
8+++ view |= state=model ^- (element message) (text "view")
9+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-update/unrelated-tag.txtnew file+16
@@ -0,0 +1,16 @@
1++$ model [count=@ud]
2++$ message
3+ %noop
4+ [%set value=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [event=message current=model]
8+ ?- event
9+ %noop [current ~]
10+ [%set value]
11+ ?- (gth value 10)
12+ %.y [current(count=value) ~]
13+ %.n [current ~]
14+++ view |= state=model ^- (element message) (text "view")
15+++ subs |= state=model ^- (list (sub message)) ~
16+++ dangling |=%unrelated
tests/type-program-update/wrong-message.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [count=@ud]
2++$ message %noop
3++$ other-message %other
4+++ main (program init update view subs)
5+++ init |= input=@t ^- model [count=0]
6+++ update |= [event=other-message current=model]
7+ ?- event
8+ %other [current ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-update/wrong-model.txtnew file+12
@@ -0,0 +1,12 @@
1++$ model [count=@ud]
2++$ message
3+ %noop
4+ [%set value=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [event=message current=model]
8+ ?- event
9+ %noop [current ~]
10+ [%set value] [[count="wrong"] ~]
11+++ view |= state=model ^- (element message) (text "view")
12+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-update/wrong-result.txtnew file+12
@@ -0,0 +1,12 @@
1++$ model [count=@ud]
2++$ message
3+ %noop
4+ [%set value=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [event=message current=model]
8+ ?- event
9+ %noop [current ~]
10+ [%set value] [current `%noop]
11+++ view |= state=model ^- (element message) (text "view")
12+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-watch/about.txtnew file+1
@@ -0,0 +1 @@
1+tests: A synthetic closed program uses the real todo API and Hoon readers with synthetic init, update and view definitions. A singleton direct todos.api watch must match exact merged source-backed request evidence; the fixture checks its closed subs type and downstream import. Pure and hand-built requests, helpers and aliases, scry, missing, mismatched or ambiguous evidence, typed paths, diffs and multiple subscriptions are rejected. It does not execute the todo UI or establish runtime watching.
tests/type-store/basket.txtnew file+32
@@ -0,0 +1,32 @@
1+:: /ui/basket.jibb
2+/= cart /ui/stores/cart
3+
4+++ main (program init update view subs)
5+
6++$ model [cart=state.cart note=@t]
7++$ msg
8+ [%noted text=@t]
9+ %add
10+ %toggle
11+ [%got cart=state.cart]
12+ [%acked err=(unit @t)]
13+
14+++ init |= ~
15+ [[~ %.n] ""]
16+
17+++ update |= [=msg m=model]
18+ ?- msg
19+ [%noted t] [m(note=t) ~]
20+ %add [m(note="") ~[[%poke (cart-action.cart [%add note.m]) |=%acked]]]
21+ %toggle [m ~[[%poke (cart-action.cart %toggle) |=%acked]]]
22+ [%got c] [m(cart=c) ~]
23+ [%acked err] [m ~]
24+
25+++ subs |= m=model
26+ ~[[%watch (state.cart |=%got)]]
27+
28+++ view |= m=model
29+ column ~[gap+%s1] ~[
30+ (text "{(lent items.cart.m)} items")
31+ field "Item" note.m |=%noted
32+ button "Add" %add
tests/type-store/cart.txtnew file+13
@@ -0,0 +1,13 @@
1+:: /ui/stores/cart.jibb
2++$ state [items=(list @t) open=?]
3++$ cart-action
4+ [%add item=@t]
5+ %toggle
6++$ poke cart-action
7+
8+++ main (store init update)
9+++ init ^- state [~ %.n]
10+++ update |= [a=cart-action s=state]
11+ ?- a
12+ [%add item] s(items=[item items.s])
13+ %toggle s(open=(not open.s))
tests/type-theme/dark-absent.txtnew file+8
@@ -0,0 +1,8 @@
1+++ theme ^- theme
2+ [ space=[s1="4px" s2="8px" s3="16px"]
3+ tones=[normal="#222" background="#fff" accent="#17734f" danger="#b3261e" muted="#5f5f5f"]
4+ wide="60rem"
5+ lang="en"
6+ zone="UTC"
7+ font=`%/static/fonts/inter.woff2
8+ dark=~
tests/type-theme/missing-field.txtnew file+7
@@ -0,0 +1,7 @@
1+++ theme ^- theme
2+ [ space=[s1="4px" s2="8px" s3="16px"]
3+ tones=[normal="#222" background="#fff" accent="#17734f" danger="#b3261e" muted="#5f5f5f"]
4+ wide="60rem"
5+ lang="en"
6+ font=`%/static/fonts/inter.woff2
7+ dark=[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
tests/type-theme/source.txtnew file+8
@@ -0,0 +1,8 @@
1+++ theme ^- theme
2+ [ space=[s1="4px" s2="8px" s3="16px"]
3+ tones=[normal="#222" background="#fff" accent="#17734f" danger="#b3261e" muted="#5f5f5f"]
4+ wide="60rem"
5+ lang="en"
6+ zone="UTC"
7+ font=`%/static/fonts/inter.woff2
8+ dark=`[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
tests/type-theme/wrong-dark.txtnew file+8
@@ -0,0 +1,8 @@
1+++ theme ^- theme
2+ [ space=[s1="4px" s2="8px" s3="16px"]
3+ tones=[normal="#222" background="#fff" accent="#17734f" danger="#b3261e" muted="#5f5f5f"]
4+ wide="60rem"
5+ lang="en"
6+ zone="UTC"
7+ font=`%/static/fonts/inter.woff2
8+ dark="dark"
tests/type-theme/wrong-font.txtnew file+8
@@ -0,0 +1,8 @@
1+++ theme ^- theme
2+ [ space=[s1="4px" s2="8px" s3="16px"]
3+ tones=[normal="#222" background="#fff" accent="#17734f" danger="#b3261e" muted="#5f5f5f"]
4+ wide="60rem"
5+ lang="en"
6+ zone="UTC"
7+ font=`"/static/fonts/inter.woff2"
8+ dark=[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
tests/type-theme/wrong-nested-aura.txtnew file+8
@@ -0,0 +1,8 @@
1+++ theme ^- theme
2+ [ space=[s1="4px" s2="8px" s3="16px"]
3+ tones=[normal=~zod background="#fff" accent="#17734f" danger="#b3261e" muted="#5f5f5f"]
4+ wide="60rem"
5+ lang="en"
6+ zone="UTC"
7+ font=`%/static/fonts/inter.woff2
8+ dark=[tones=[normal="#eee" background="#111" accent="#4c9" danger="#f28b82" muted="#aaa"]]
tests/type-todo-full/about.txtnew file+3
@@ -0,0 +1,3 @@
1+source: docs/spec/overview.md, worked example 3; my-app/ui/todo-list.jibb must remain byte-identical to tests/type-gate-free/todo.txt.
2+tests: Full detailed and legacy checking of the unchanged todo island through the real Hoon readers and API. Assert the exact closed main type and structural downstream import, plus wrong model/message/result, ambiguous or open mapper, aliased mapper, non-gate view, and wrong watch rejection. The report does not execute Jibb or establish runtime watching.
3+expect: shared eval and ship guards
tests/type-todo-full/alias.txtnew file+42
@@ -0,0 +1,42 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-alias)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
41+
42+++ row-alias row-of
tests/type-todo-full/ambiguous-mapper.txtnew file+41
@@ -0,0 +1,41 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ each (turn todos.m row-of)
35+ row ~[gap+%s1] ~[
36+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
37+ button "Add" %submit
38+ el ~[tone+%danger] (text (fall error.m ""))
39+
40+++ row-of |= t=item.todo
41+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-todo-full/expected.txtnew file+2
@@ -0,0 +1,2 @@
1+full todo accepted
2+[init=$-((list [id=@ud [done=? text=@t]]) [todos=(list [id=@ud [done=? text=@t]]) [draft=@t error=(unit @t)]]) [update=$-([msg [todos=(list [id=@ud [done=? text=@t]]) [draft=@t error=(unit @t)]]] [[todos=(list [id=@ud [done=? text=@t]]) [draft=@t error=(unit @t)]] (list (cmd msg))]) [view=$-([todos=(list [id=@ud [done=? text=@t]]) [draft=@t error=(unit @t)]] (element msg)) subs=$-([todos=(list [id=@ud [done=? text=@t]]) [draft=@t error=(unit @t)]] (list (sub msg)))]]]
tests/type-todo-full/non-gate-view.txtnew file+33
@@ -0,0 +1,33 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view init
31+
32+++ row-of |= t=item.todo
33+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-todo-full/open-key.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [!! (toggle done.t text.t [%toggled id.t])]
tests/type-todo-full/wrong-message.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%other])]
tests/type-todo-full/wrong-model.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=[count=@ud]
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-todo-full/wrong-result.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (todos.todo |=%got)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ text.t
tests/type-todo-full/wrong-watch.txtnew file+40
@@ -0,0 +1,40 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ init |= ts=(list item.todo)
14+ [ts "" ~]
15+
16+++ update |= [=msg m=model]
17+ ?- msg
18+ [%typed t]
19+ ?- (gth (lent (tuba (trip t))) 80)
20+ %.y [m(draft=t error=`"Too long") ~]
21+ %.n [m(draft=t error=~) ~]
22+ %submit [m(draft="") ~[[%poke (todo-action.todo [%add draft.m]) |=%acked]]]
23+ [%toggled id] [m ~[[%poke (todo-action.todo [%toggle id]) |=%acked]]]
24+ [%got ts] [m(todos=ts) ~]
25+ [%acked err] [m(error=err) ~]
26+
27+++ subs |= m=model
28+ ~[[%watch (pure %submit)]]
29+
30+++ view |= m=model
31+ column ~[gap+%s2] ~[
32+ heading 2 "Todos"
33+ each (turn todos.m row-of)
34+ row ~[gap+%s1] ~[
35+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
36+ button "Add" %submit
37+ el ~[tone+%danger] (text (fall error.m ""))
38+
39+++ row-of |= t=item.todo
40+ [id.t (toggle done.t text.t [%toggled id.t])]
tests/type-todo-partial/expected.txt+2−2
@@ -4,10 +4,10 @@ partial inference; module not checked
44+$ model: not checked
55+$ msg: cases proven disjoint; mold not checked
66++ init: `~` needs context in partial inference
7−++ update: name is not available to partial inference
7+++ update: branch tag or union context is not supported by partial inference
88++ subs: call constraint is not supported by partial inference
99++ view: name is not available to partial inference
10−++ row-of: name is not available to partial inference
10+++ row-of: tag needs context in partial inference
1111negative API imports
1212missing-mark: rejected
1313duplicate-mark: rejected
tests/type-union-alias-overlap/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ tagged |$ [A] [%other A]
3++$ choice
4+ (tagged @t)
5+ [%wrapped @p]
tests/type-union-alias-overlap/expected.txtnew file+25
@@ -0,0 +1,25 @@
1+same head and inhabited payload overlap: ok
2+zero spelling overlap: ok
3+original same-case spans retained: ok
4+partial report displays same overlap: ok
5+partial report displays zero overlap: ok
6+distinct heads do not overlap: ok
7+distinct singleton payloads do not overlap: ok
8+empty payload has no witness: ok
9+outer variable has no witness: ok
10+unresolved reference has no witness: ok
11+equal nonzero singleton payload overlaps: ok
12+nonzero overlap reported: ok
13+late pair in three cases overlaps: ok
14+opaque gate payload declines: ok
15+wrong alias arity declines: ok
16+full module remains rejected: ok
17+first source excerpt retained: ok
18+second source excerpt retained: ok
19+flag and zero payload overlap: ok
20+flag and nonzero payload decline: ok
21+duplicate owner declines: ok
22+qualified owner declines: ok
23+20 proof fuel succeeds: ok
24+19 proof fuel declines: ok
25+zero proof fuel declines: ok
tests/type-union-alias-overlap/flag-source.txtnew file+7
@@ -0,0 +1,7 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ flag-zero
3+ (tagged ?)
4+ [%wrapped %$]
5++$ flag-nonzero
6+ (tagged ?)
7+ [%wrapped %hello]
tests/type-union-alias-overlap/multi.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ [%first @t]
4+ (tagged @p)
5+ [%wrapped @t]
tests/type-union-alias-overlap/negative.txtnew file+16
@@ -0,0 +1,16 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ distinct-head
3+ (tagged @t)
4+ [%other @p]
5++$ distinct-constant
6+ (tagged %a)
7+ [%wrapped %b]
8++$ empty-payload
9+ (tagged !!)
10+ [%wrapped @t]
11++$ generic |$ [A]
12+ (tagged A)
13+ [%wrapped @t]
14++$ unknown-name
15+ (tagged missing)
16+ [%wrapped @t]
tests/type-union-alias-overlap/nonzero.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ same
3+ (tagged %hello)
4+ [%wrapped %hello]
tests/type-union-alias-overlap/opaque.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged $-(@t @t))
4+ [%wrapped $-(@t @t)]
tests/type-union-alias-overlap/positive.txtnew file+8
@@ -0,0 +1,8 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ same
3+ (tagged @t)
4+ [%wrapped @p]
5++$ zero |$ [A] [%.y A]
6++$ same-zero
7+ (zero @t)
8+ [%$ @p]
tests/type-union-alias-overlap/qualified.txtnew file+5
@@ -0,0 +1,5 @@
1+/= lib /ui/lib
2++$ tagged |$ [A] [%wrapped A]
3++$ choice
4+ (tagged.lib @t)
5+ [%wrapped @p]
tests/type-union-alias-overlap/wrong.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t @p)
4+ [%wrapped @p]
5+++ id |= x=bad x
tests/type-union-source/direct-source.txtnew file+3
@@ -0,0 +1,3 @@
1++$ choice
2+ [%a @t]
3+ [%b @p]
tests/type-union-source/duplicate-params.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A A] [%wrapped A]
2++$ choice
3+ (tagged @t @p)
4+ [%other @p]
tests/type-union-source/duplicate.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ tagged |$ [A] [%changed A]
3++$ choice
4+ (tagged @t)
5+ [%other @p]
tests/type-union-source/expected.txtnew file+36
@@ -0,0 +1,36 @@
1+source generic distinct: ok
2+actual inference preserves pending and scoped state: ok
3+actual inference rejects structural state: ok
4+later source failure returns no partial state: ok
5+actual local owner shadow rejected: ok
6+full generic-alias module checks: ok
7+same-head module is not published: ok
8+mixed-zero module is not published: ok
9+wrong-arity module is not published: ok
10+partial report uses source proof: ok
11+partial report preserves shadow diagnostic: ok
12+recognized recursive tree causes conservative decline: ok
13+mixed partial report remains source-only: ok
14+source exact fuel 18: ok
15+source 17 fuel declines: ok
16+same head declines: ok
17+equal noun cross spelling declines: ok
18+nested application declines: ok
19+duplicate owner declines: ok
20+wrong arity declines: ok
21+duplicate parameters decline: ok
22+hidden body reference declines: ok
23+qualified import declines: ok
24+direct cases use existing proof: ok
25+wide alias body declines: ok
26+undeclared body parameter declines: ok
27+empty state accepted: ok
28+simple outer generic accepted: ok
29+structured outer argument declined: ok
30+structured substitution declined: ok
31+pending hole declined: ok
32+recursive index declined: ok
33+deferred transaction declined: ok
34+pending obligation declined: ok
35+256 state entries accepted: ok
36+257 state entries declined: ok
tests/type-union-source/free-source.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped B]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
tests/type-union-source/good.txtnew file+9
@@ -0,0 +1,9 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged @t)
4+ [%other @p]
5+++ id |= x=choice x
6++$ poly |$ [A B]
7+ (tagged A)
8+ [%second B]
9+++ typed |= x=(poly @t @p) x
tests/type-union-source/hidden-ref.txtnew file+5
@@ -0,0 +1,5 @@
1++$ helper @t
2++$ tagged |$ [A] [%wrapped helper]
3++$ choice
4+ (tagged @t)
5+ [%other @p]
tests/type-union-source/late-source.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged A)
4+ [%other B]
tests/type-union-source/mixed-source.txtnew file+8
@@ -0,0 +1,8 @@
1++$ node-tree |$ [M]
2+ [%text value=@t]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4++$ tagged |$ [A] [%wrapped A]
5++$ choice
6+ (tagged @t)
7+ [%other @p]
8+++ id |= x=choice x
tests/type-union-source/nested.txtnew file+4
@@ -0,0 +1,4 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ choice
3+ (tagged (tagged @t))
4+ [%other @p]
tests/type-union-source/qualified.txtnew file+4
@@ -0,0 +1,4 @@
1+/= lib /ui/lib
2++$ choice
3+ (tagged.lib @t)
4+ [%other @p]
tests/type-union-source/same.txtnew file+5
@@ -0,0 +1,5 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t)
4+ [%wrapped @p]
5+++ id |= x=bad x
tests/type-union-source/shadow-source.txtnew file+7

This diff is too big to show here.

tests/type-union-source/wide-source.txtnew file+4

This diff is too big to show here.

tests/type-union-source/wrong.txtnew file+5

This diff is too big to show here.

tests/type-union-source/zero.txtnew file+5

This diff is too big to show here.

tools/testdata/lead-late-hoon-reference.hoonnew file+24

This diff is too big to show here.

tools/testdata/ship-selftest+119−1

This diff is too big to show here.

tools/testdata/succ-hoon-reference.hoonnew file+9

This diff is too big to show here.

tools/testdata/zing-hoon-reference.hoonnew file+17

This diff is too big to show here.

tools/type-cell-branch-testnew file+43

This diff is too big to show here.

tools/type-deferred-context-testnew file+31

This diff is too big to show here.

tools/type-deferred-prepared-testnew file+49

This diff is too big to show here.

tools/type-deferred-resolver-testnew file+33

This diff is too big to show here.

tools/type-deferred-testnew file+32

This diff is too big to show here.

tools/type-empty-testnew file+55

This diff is too big to show here.

tools/type-full-overlap-testnew file+49

This diff is too big to show here.

tools/type-generic-construction-testnew file+49

This diff is too big to show here.

tools/type-generic-pattern-testnew file+52

This diff is too big to show here.

tools/type-generic-recursion-testnew file+61

This diff is too big to show here.

tools/type-import-overlap-testnew file+33

This diff is too big to show here.

tools/type-import-structural-testnew file+36

This diff is too big to show here.

tools/type-page-main-testnew file+86

This diff is too big to show here.

tools/type-program-init-testnew file+49

This diff is too big to show here.

tools/type-program-main-testnew file+46

This diff is too big to show here.

tools/type-program-update-testnew file+46

This diff is too big to show here.

tools/type-program-watch-testnew file+48

This diff is too big to show here.

tools/type-store-testnew file+41

This diff is too big to show here.

tools/type-theme-testnew file+44

This diff is too big to show here.

tools/type-todo-full-testnew file+98

This diff is too big to show here.

tools/type-union-alias-overlap-testnew file+52

This diff is too big to show here.

tools/type-union-source-testnew file+55

This diff is too big to show here.