on master help sign in
198 files changed+5264−1732
since splitsnapshots
unifiedsplit
README.md+3−1 docs/compiler.md+12−4 docs/development.md+12−2 docs/prelude-inventory.md+4 docs/status.md+30−11 jibb-dev/lib/jibb.hoon+562−51 jibb-dev/lib/jibb/internal.jibb+2 jibb-dev/lib/jibb/prelude.jibb+132 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-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-nested-shallow-preserve/source.jibb+15−15 tests/golden/types-nested-shallow-preserve/tokens.txt+107−107 tests/golden/types-nested-shallow-preserve/tree.txt+61−61 tests/golden/types-nested-shallow-preserve/types.txt+20−20 tests/golden/types-pair-context/source.jibb+14−14 tests/golden/types-pair-context/tokens.txt+71−71 tests/golden/types-pair-context/tree.txt+34−34 tests/golden/types-pair-context/types.txt+19−19 tests/golden/types-partial-aura-family/source.jibb+1−1 tests/golden/types-partial-aura-family/tokens.txt+8−8 tests/golden/types-partial-aura-family/tree.txt+4−4 tests/golden/types-partial-aura-family/types.txt+1−1 tests/golden/types-partial-locals/source.jibb+2−2 tests/golden/types-partial-locals/tokens.txt+10−10 tests/golden/types-partial-locals/tree.txt+5−5 tests/golden/types-partial-locals/types.txt+1−1 tests/golden/types-prelude-bond/source.jibb+1−1 tests/golden/types-prelude-bond/tokens.txt+12−12 tests/golden/types-prelude-bond/tree.txt+6−6 tests/golden/types-prelude-bond/types.txt+1−1 tests/golden/types-prelude-cmd/source.jibb+4−4 tests/golden/types-prelude-cmd/tokens.txt+30−30 tests/golden/types-prelude-cmd/tree.txt+13−13 tests/golden/types-prelude-cmd/types.txt+7−7 tests/golden/types-prelude-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-text/about.txt+4 tests/golden/types-prelude-text/modules.txt+1 tests/golden/types-prelude-text/source.jibb+8 tests/golden/types-prelude-text/tokens.txt+66 tests/golden/types-prelude-text/tree.txt+36 tests/golden/types-prelude-text/types.txt+26 tests/golden/types-prelude-ui/about.txt+4 tests/golden/types-prelude-ui/modules.txt+1 tests/golden/types-prelude-ui/source.jibb+77 tests/golden/types-prelude-ui/tokens.txt+710 tests/golden/types-prelude-ui/tree.txt+291 tests/golden/types-prelude-ui/types.txt+84 tests/golden/types-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-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-unit-context/source.jibb+3−3 tests/golden/types-unit-context/tokens.txt+33−33 tests/golden/types-unit-context/tree.txt+21−21 tests/golden/types-unit-context/types.txt+15−15 tests/lib/jibb-deferred-prepared.hoon+114 tests/lib/jibb-direct-gate-source.hoon+3−3 tests/lib/jibb-full-overlap-basic.hoon+143 tests/lib/jibb-full-overlap-graph.hoon+126 tests/lib/jibb-generic-construction.hoon+1−1 tests/lib/jibb-generic-pattern.hoon+1−1 tests/lib/jibb-generic-recursion.hoon+4−4 tests/lib/jibb-list-alias-guards.hoon+1−1 tests/lib/jibb-program-init.hoon+134 tests/lib/jibb-program-main.hoon+141 tests/lib/jibb-program-watch.hoon+209 tests/lib/jibb-request-guards.hoon+2−2 tests/lib/jibb-union-source.hoon+1−1 tests/lib/jibb.hoon+577−565 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-direct-gate/expected.txt+11−11 tests/type-direct-gate/source.txt+3−3 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/alias-client.txt+4−4 tests/type-generic-construction/alias.txt+1−1 tests/type-generic-construction/client.txt+20−20 tests/type-generic-construction/expected.txt+13−13 tests/type-generic-construction/no-event-client.txt+6−6 tests/type-generic-construction/owner-negative.txt+8−8 tests/type-generic-construction/owner-positive.txt+7−7 tests/type-generic-construction/tree-no-event.txt+3−3 tests/type-generic-construction/tree.txt+5−5 tests/type-generic-pattern/client.txt+48−48 tests/type-generic-pattern/expected.txt+24−24 tests/type-generic-pattern/no-event.txt+5−5 tests/type-generic-pattern/owner-bad.txt+11−11 tests/type-generic-pattern/owner.txt+10−10 tests/type-generic-recursion/about.txt+1−1 tests/type-generic-recursion/alias.txt+1−1 tests/type-generic-recursion/bad-constructor.txt+6−6 tests/type-generic-recursion/bad-match.txt+6−6 tests/type-generic-recursion/bad-mold.txt+5−5 tests/type-generic-recursion/bad-parameter.txt+5−5 tests/type-generic-recursion/client.txt+6−6 tests/type-generic-recursion/expected.txt+5−5 tests/type-generic-recursion/list-shadow.txt+2−2 tests/type-generic-recursion/local-distinct.txt+7−7 tests/type-generic-recursion/local-only.txt+5−5 tests/type-generic-recursion/local-shadow.txt+7−7 tests/type-generic-recursion/tree-changed.txt+5−5 tests/type-generic-recursion/tree.txt+5−5 tests/type-list-alias/expected.txt+4−4 tests/type-program-main/about.txt+1 tests/type-program-main/alias-main.txt+11 tests/type-program-main/arbitrary-main.txt+10 tests/type-program-main/consumer.txt+2 tests/type-program-main/gate-data.txt+10 tests/type-program-main/gate-model.txt+11 tests/type-program-main/initializer-consumer.txt+2 tests/type-program-main/initializer-earlier.txt+10 tests/type-program-main/initializer-error.txt+10 tests/type-program-main/initializer-generic.txt+10 tests/type-program-main/initializer-message.txt+13 tests/type-program-main/initializer-missing.txt+9 tests/type-program-main/initializer-model.txt+11 tests/type-program-main/initializer-no-main.txt+10 tests/type-program-main/initializer-subs.txt+10 tests/type-program-main/initializer-tag.txt+13 tests/type-program-main/initializer-unfaced.txt+10 tests/type-program-main/initializer.txt+12 tests/type-program-main/mismatched-model.txt+10 tests/type-program-main/nonempty-subs.txt+12 tests/type-program-main/open-message.txt+7 tests/type-program-main/source.txt+12 tests/type-program-watch/about.txt+1 tests/type-todo-partial/expected.txt+2−2 tests/type-union-source/mixed-source.txt+2−2 tools/testdata/ship-selftest+27 tools/type-deferred-prepared-test+49 tools/type-full-overlap-test+49 tools/type-program-init-test+49 tools/type-program-main-test+46 tools/type-program-watch-test+48
README.md+3−1
@@ -42,7 +42,9 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
4242tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
4343```
4444
45−`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-import-overlap-test`, `tools/type-import-structural-test`, `tools/type-union-source-test`, `tools/type-union-alias-overlap-test`, `tools/type-generic-recursion-test`, `tools/type-generic-construction-test`, `tools/type-generic-pattern-test`, `tools/type-deferred-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.
45+`tools/testdata/selftest` tests both tools against a stub library, and `tools/doc-blocks` against Markdown it writes. `tools/importer-test` compares the partial Hoon importer's fixture projections against their golden file. `tools/type-import-test`, `tools/type-import-overlap-test`, `tools/type-import-structural-test`, `tools/type-union-source-test`, `tools/type-union-alias-overlap-test`, `tools/type-full-overlap-test`, `tools/type-generic-recursion-test`, `tools/type-generic-construction-test`, `tools/type-generic-pattern-test`, `tools/type-deferred-test`, `tools/type-deferred-prepared-test`, `tools/type-deferred-resolver-test`, `tools/type-deferred-context-test`, `tools/type-empty-test`, `tools/type-cell-branch-test`, `tools/type-tlon-test`, `tools/type-mark-test`, `tools/type-poke-test` and `tools/type-api-paths-test` check importer/checker, prelude and partial API path analysis boundaries under eval; the ship suite runs the same fixtures.
46+
47+The focused `tools/type-program-main-test` checks the narrow closed, subscription-free `main` slice and its shared fake-ship fixture. `tools/type-program-init-test` checks transactional initializer recovery for a synthetic direct program, including exact exported and imported types and rejection boundaries. `tools/type-program-watch-test` uses the real todo readers with synthetic program components to check one direct request value against merged API-source evidence and reject hand-built, indirect, parameterized, diff and ambiguous subscriptions. These are static checks only: they do not run an island or establish runtime watching.
4648
4749### The doc's examples
4850
docs/compiler.md+12−4
@@ -66,7 +66,7 @@ Before the empty-capital optimization below, single sequential eval runs includi
6666
6767Restricted-number promotion only applies to written capital variables. If none are present, it returns immediately instead of traversing the environment. In one startup-inclusive pair of runs on 2,000 independent gates, output was byte-identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds while other checks were running. This does not establish a bound for dependent modules or a complete-checker benchmark.
6868
69−A bounded source proof can also establish distinct literal heads when a union case is a one-hop application of a uniquely resolved local generic mold. It compares literal runtime nouns and checks the original mold normally before publishing an interface. The same source proof improves the partial report, which still says the mold is not checked. The new proof declines nested or qualified applications, opaque references, recursive-index states, holes and deferred obligations; other valid unions can remain unsupported. A 256-node source budget and a separate 256-entry inherited-state budget apply per attempt. They do not bound the existing pairwise union pass, parsing, atom or name sizes, or downstream checking. Prepared interfaces and inference state remain trusted inputs. `tools/type-union-source-test` and the shared ship guard exercise source resolution, reporting, rollback and these bounds. A separate positive witness can identify overlap in two-field, literal-headed cases when a unique one-hop local, one-parameter generic alias is applied to a concrete primitive payload. It compares the literal noun values and proves the payloads have a shared noun, so an empty or unknown payload is not a witness. The partial report identifies both original case sites; full-module inference still rejects these cases with its generic unsupported-mold error. This witness uses a shared 256-node source/pair budget per attempt; an unsupported earlier case may hide a later overlap. Existing pairwise union analysis, parsing, atom and name sizes, and downstream checking remain outside this budget. `tools/type-union-alias-overlap-test` checks the source proof and its two-site report.
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.
7070
7171A 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.
7272
@@ -128,14 +128,20 @@ A two-item tuple with an explicit term, null or loobean head can receive payload
128128
129129`+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.
130130
131+A full ordinary module may export a narrow checked program `main` only as a direct, unqualified `(program init update view subs)` call with four simple wing arguments, modulo transparent grouping. The canonical prepared prelude must supply both the `program` value and mold. The ordinary source-backed program fit and all normal mold, value and request-graph checks complete first. The inferred `main` must be closed and invariantly match an instantiated `program` mold from that prelude. The initializer must have a closed gate scheme; its data and model contain no open variables and share the existing 256-node gate-free budget, with `%yes` required for both. The named subscription gate may syntactically return null through transparent casts, groups and definition-free bodies. Alternatively, after a successful request-graph merge, it may return one singleton list containing an unfaced `[%watch request]` pair whose request is a direct `case.face` call with one direct constructor callback. The face must resolve to an imported interface whose member has the exact plain derived-request scheme. Exactly one merged request evidence must match its API path and case, agree with the declaration's inner name, and appear in that interface's own graph; the interface source must equal the evidence's API source. The declaration must have no scry, diffs or path parameters. Pure or hand-built requests, helpers, aliases, re-exports, typed paths, folds, multiple subscriptions and missing or ambiguous evidence fail closed. Arbitrary or aliased mains, API/store kinds, and gates or unknowns in data/model also fail closed. This retains source and graph evidence and permits ordinary downstream imports; it neither executes the program nor implements runtime watching.
132+
133+When only that program's initializer and `main` are unresolved, a bounded transactional retry can derive the initializer's expected gate from the resolved update, view and subscription components. It instantiates all schemes above the greatest variable ID in the module and prelude, reuses the source-backed positional fit and stable replay, and leaves only the initializer's data variable open. The named initializer must be a direct gate whose transparent body is a tuple ending in null. Its own sample fixes data; ordinary inference, product and whole-gate fits, pending-tag and finalization checks, and a fresh ordinary `main` inference must all succeed before the ordinary kind and graph checks publish anything. Aliases, non-main libraries, simultaneous unresolved subscriptions, nonempty subscriptions and unrelated pending tags decline.
134+
131135Each 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.
132136
133137`+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.
134138
135−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` and `late`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. A dedicated trusted internal-prelude preparation path also supplies private comparison and arithmetic schemes for the Jibb-written `gth`, `add` and `dec` wrappers. Ordinary module resolution rejects that primitive path even if a caller supplies a spoofed root or bundle. The low-level prepared interface is still trusted host input; the host must select the vendored sources and canonicalize paths. Primitive execution and shape-based jet recognition are not implemented. The Jibb-written `lth`, `gte` and `lte` gates compose the source-backed `gth` and `not` gates; supported calls infer a shared atom constraint and return `?`. Their execution and jet recognition await the backend. The source-backed `add` and `dec` wrappers use private arithmetic interfaces whose shared atom variable excludes loobeans; the partial checker preserves that constraint through supported inference and prints `where A is an atom other than ?`. The partial checker resolves the supported `poke` source shape, preserves its public name, and rejects ordinary imports of the private internal path. The Jibb-written `lent` recursively counts a list using `add`; the partial checker infers its generic list argument and `@ud` result. Its execution and jet recognition remain unverified until the backend exists. The Jibb-written `zing` concatenates homogeneous lists in order using `weld`; the checker infers `(list (list A))` to `(list A)`, including for gate elements. Hoon `zing` also accepts heterogeneous noun lists, which this type does not express. `tools/hoon --raw -f tools/testdata/zing-hoon-reference.hoon` compares an equivalent Hoon recursion with Hoon `zing` on selected finite inputs; it does not execute Jibb or verify lowering or jet recognition. 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.
139+The supplied prelude is parsed into a **partial interface**: all names actually declared in the source are reserved, while only the molds and values this fragment can infer are available. These include the validated standard `list` mold, `unit`, the doc-exact generic `cmd` union, `same`, `fall`, `need`, `bond`, `lure`, `weld`, `snoc`, `turn`, `lent`, `zing`, `flop`, `rear`, `drop`, `skim`, `skip`, `murn`, `join`, `snip`, `levy`, `lien`, `cork`, `corl`, `cury`, `curr`, `lead`, `late`, `trip` and `tuba`; unsupported entries remain unavailable. The validated `list` is injected while the prelude’s gates are inferred; `weld` and `turn` use ordinary explicit result casts. An absent or altered `list` is not injected, and an altered declaration cannot leak through a direct or transitive mold alias. The same validated template is available when prelude mold aliases are prepared, so supported direct and transitive aliases can use it. A named prelude union keeps the fixed `/lib/jibb/prelude/jibb` origin in every module, and its name remains unqualified when a library exports a type containing it. The prelude inventory is incomplete, so reserving the names in this source does not establish complete shadowing coverage. The source-backed internal prelude defines `poke`, which the public prelude re-exports as an ordinary transparent type. A dedicated trusted internal-prelude preparation path also supplies private comparison, arithmetic and text-conversion schemes for the Jibb-written `gth`, `add`, `dec`, `trip` and `tuba` wrappers. Ordinary module resolution rejects that primitive path even if a caller supplies a spoofed root or bundle. The low-level prepared interface is still trusted host input; the host must select the vendored sources and canonicalize paths. Primitive execution and shape-based jet recognition are not implemented. The Jibb-written `lth`, `gte` and `lte` gates compose the source-backed `gth` and `not` gates; supported calls infer a shared atom constraint and return `?`. Their execution and jet recognition await the backend. The source-backed `add` and `dec` wrappers use private arithmetic interfaces whose shared atom variable excludes loobeans; the partial checker preserves that constraint through supported inference and prints `where A is an atom other than ?`. The partial checker resolves the supported `poke` source shape, preserves its public name, and rejects ordinary imports of the private internal path. The Jibb-written `lent` recursively counts a list using `add`; the partial checker infers its generic list argument and `@ud` result. Its execution and jet recognition remain unverified until the backend exists. The Jibb-written `zing` concatenates homogeneous lists in order using `weld`; the checker infers `(list (list A))` to `(list A)`, including for gate elements. Hoon `zing` also accepts heterogeneous noun lists, which this type does not express. `tools/hoon --raw -f tools/testdata/zing-hoon-reference.hoon` compares an equivalent Hoon recursion with Hoon `zing` on selected finite inputs; it does not execute Jibb or verify lowering or jet recognition. The Jibb-written `lead` and `late` are curried pair constructors: `((lead a) b)` returns `[a b]`, while `((late a) b)` returns `[b a]`. The checker infers independent argument types and accepts gates as ordinary values; neither helper invokes an input gate. A Hoon translation is compared with Hoon’s helpers by `tools/hoon --raw -f tools/testdata/lead-late-hoon-reference.hoon`. This does not execute Jibb or verify lowering or jet recognition. An imported API with one mark and a matching direct `+$ poke` declaration can export a derived constructor and retain agent/mark metadata when the source representation has the supported agent case. Other API shapes, complete private module checking, root API and kind checking, stores, complete `ask` and `pure` checking, lowering and runtime effects remain unfinished. A possible store or root API declaring `+$ poke` reports that kind or scope needs unsupported inference; definite duplicate declarations and unrelated shadowing still report conflicts. Prepared interfaces and caches are trusted caller inputs; the future host and linker must ensure the private source validated during preparation is the same version used to lower derived constructors. A `*` payload may contain gates, so the fragment treats it conservatively; full gate-free checks are unfinished. The shared module-scope fixture compares the prepared and source-taking paths against the real prelude and a two-module golden under eval and on the ship.
136140
137141`+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.
138142
143+The prepared interface includes the source-backed UI molds and constructors, the full nonrecursive `element` union, and the exact `program` and `page` records and builders. Its element union erases nested child, keyed-item and table payloads to `*`, while public constructor schemes retain typed composition and independent key parameters. `types-prelude-ui` checks those schemes and selected valid and invalid compositions. A child-message mismatch currently fails closed as an unsupported list-item constraint rather than a definite mismatch diagnostic. Raw-constructor encapsulation, duplicate-attribute checks, rendering, navigation, storage and execution remain outside this slice.
144+
139145And the design notes:
140146
141147| Note | Says |
@@ -190,7 +196,7 @@ Note 4 has examples of each.
190196
191197Starting `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).
192198
193−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 preludes, imports, recursive groups, unresolved holes or written capitals, and new projection actions remain outside this path. `%grec` in the constraint or freshness scan is conservatively unsupported. This is not an island-kind, runtime, or watchability check.
199+The experimental deferred constructor path can close a small import-free library transaction when ordinary resolution stalls. It retries definitions whose earlier attempts failed from their original states, retaining only successful attempts. A transaction with at most 64 definitions makes at most 4,096 attempts; it stops after a pass with no progress. This bounds the new attempt count, not each attempt's parsing, type walks or ordinary inference. Deferred definitions are restricted to simple one-component wings, literals, static strings, gates, transparent groups and empty bodies, calls, casts and a restricted boolean branch. Each successful call or cast fit must have exactly equal normalized operands so later substitutions cannot invalidate a face check. A multi-argument call also needs closed argument, sample and product types because positional face checks depend on slot boundaries and whether the result can be a cell. Other fits fail closed. A 512-node screen bounds visited expression nodes and a separate 512-node scan bounds each stability check; neither bounds mold shapes, string-piece checks, parsing, normalization, lookup, or total repeated inference. It accepts only a direct constructor callback with a closed input, records its pending fit under the source-owned inference state, and generalizes each definition against the live environment and pending constraints. Before publication it discharges and replays every edge, rejects unresolved tags or changed replay state, and checks that all molds and values are complete. The reporter reads the committed schemes for definitions added by the transaction. API and store paths, `main`, prepared-prelude recovery, imports, recursive groups, unresolved holes or written capitals, and new projection actions remain outside this full-module path. `%grec` in the constraint or freshness scan is conservatively unsupported. This is not an island-kind, runtime, or watchability check.
194200
195201An 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.
196202
@@ -198,6 +204,8 @@ In an isolated diagnostic with the real todo API and reader inputs, this cell co
198204
199205A 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.
200206
201−Before a 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.
207+With the caller's unchanged prepared prelude, the partial report can also recover a narrow import-free, non-main ordinary library initializer. A direct tuple literal may retain one source-owned fit obligation for each newly created pending literal until a later exact result cast closes them. A separate bounded candidate screen admits a direct tuple even without a constructor call. The prepared transaction requires exact agreement among the supplied interface, value inventory and reserved molds, and retains the API, store, import and `main` exclusions. It only adds recovered entries to the partial report: the ordinary full-module resolver does not publish them. Wrong unit or draft fields, unrelated pending tags and mold-name collisions fail closed; without the later final cast, the initializer remains not checked. This does not add list-literal deferral or import-aware recovery.
208+
209+Before the no-prepared-prelude fallback, the checker screens the already parsed source for a direct single-constructor call beneath groups, gates, casts or bodies without local definitions. The screen visits at most 64 AST nodes per definition and rejects sources with more than 64 definitions or 65,536 bytes. A transaction is attempted at most once per resolver or report invocation and holds at most 64 pending edges. These limits do not bound the initial parsing, ordinary resolution, normalization, or total work across separate analyses. On the pre-recursive-index snapshot, startup-inclusive synthetic 1,000-gate comparisons had baseline/candidate user times of 25.97/29.30 seconds and 26.30/27.46 seconds in reverse order. These are limited shared-load measurements, not production benchmarks. The trimmed source-backed and direct-guard fixture passed in 28.13 seconds wall and 27.53 seconds user on one run after screening; its cases include parse-success checks in the same transaction source pass. The outer resolver and reporter each parse independently, and a fallback currently parses the source again.
202210
203211A 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+12−2
@@ -14,7 +14,7 @@ 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.
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.
1818
1919## Setting up a machine
2020
@@ -68,6 +68,7 @@ git clone https://github.com/urbit/tools /root/src/tools
6868| `tools/type-import-structural-test` | Checks multi-case and nested Hoon union overlap witnesses under eval and on the ship |
6969| `tools/type-union-source-test` | Checks bounded local generic-alias disjointness and state guards under eval and on the ship |
7070| `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 |
7172| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
7273| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
7374| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
@@ -82,6 +83,7 @@ git clone https://github.com/urbit/tools /root/src/tools
8283| `tools/type-deferred-test` | Checks the bounded source-owned deferred inference transaction under eval and on the ship |
8384| `tools/type-deferred-resolver-test` | Checks deferred resolution, report consistency and atomic failure under eval and on the ship |
8485| `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 |
8587| `tools/type-cell-branch-test` | Checks closed-cell branch context, rollback and bounded retry screens under eval and on the ship |
8688| `tools/type-generic-alias-test` | Runs public/private generic union alias and provenance guards under eval and on the ship |
8789| `tools/type-positional-face-guards-test` | Runs positional-call and nested-face guards under eval and on the ship |
@@ -89,6 +91,9 @@ git clone https://github.com/urbit/tools /root/src/tools
8991| `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 |
9092| `tools/type-todo-api-test` | Exercises the actual todo API through the real Hoon readers and partial checker |
9193| `tools/type-direct-gate-test` | Checks a synthetic source-backed program report and direct gate provenance under eval and on the ship |
94+| `tools/type-program-main-test` | Checks the narrow closed subscription-free program-main interface, downstream import and rejection guards under eval and on the ship |
95+| `tools/type-program-init-test` | Checks transactional direct-program initializer recovery, exact exported/imported types and fail-closed boundaries under eval and on the ship |
96+| `tools/type-program-watch-test` | Checks direct singleton request-value watchability against merged real-todo evidence, exact types/imports and rejection boundaries under eval and on the ship |
9297| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
9398| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
9499| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
@@ -115,6 +120,7 @@ git clone https://github.com/urbit/tools /root/src/tools
115120
116121```
117122tools/golden # all cases pass
123+tools/golden --case types-prelude-ui # exact UI/program/page schemes and composition
118124tools/importer-test # Hoon importer fixture projections match
119125tools/type-import-default-test # default-wrapped source proofs match
120126tools/type-import-test # importer/checker bridge golden report matches
@@ -122,6 +128,7 @@ tools/type-import-overlap-test # source-aware Hoon overlap and provenance co
122128tools/type-import-structural-test # nested and multi-case Hoon overlap controls
123129tools/type-union-source-test # local generic-alias union guards
124130tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
131+tools/type-full-overlap-test # full-module overlap evidence
125132tools/type-tlon-test # real Tlon importer/checker report matches
126133tools/type-import-diagnostic-test # direct structured reader diagnostics match
127134tools/type-mark-test # mark/checker bridge golden report matches
@@ -136,12 +143,15 @@ tools/type-qath-guards-test # qath source and unfolding guards pass
136143tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
137144tools/type-todo-api-test # real todo API partial inference and reader guards pass
138145tools/type-direct-gate-test # direct gate source and provenance guards pass
146+tools/type-program-main-test # closed program-main interface and rejection guards pass
147+tools/type-program-init-test # transactional direct-program initializer context guards pass
139148tools/type-generic-recursion-test # source-backed recursive identities and provenance
140149tools/type-generic-construction-test # source-backed recursive construction and bounds
141150tools/type-generic-pattern-test # source-backed recursive patterns and bounds
142151tools/type-deferred-test # source-owned deferred inference guards
143152tools/type-deferred-resolver-test # resolver consistency and failure guards
144153tools/type-deferred-context-test # deferred source-order and branch guards
154+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
145155tools/type-cell-branch-test # contextual branch rollback and bounds
146156tools/type-closed-gate-guards-test # closed gate fit guards pass
147157tools/type-constructor-fit-guards-test # constructor fit guards pass
@@ -212,4 +222,4 @@ Write `source.jibb` and `about.txt` by hand, run `tools/golden --update --case <
212222
213223A 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.
214224
215−`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. These checks do not establish island-kind or watchability support.
225+`tools/type-deferred-test` exercises the bounded, source-owned constructor transaction and low-level freshness/replay guards. `tools/type-deferred-resolver-test` checks the experimental import-free library resolver, report consistency, atomic failure, and that both source orders of a late face constraint decline. `tools/type-deferred-prepared-test` checks the separate partial-report-only prepared-prelude route, direct tuple-literal obligations, exact report types and its wrong-field, unrelated-tag, mold-collision and no-final-cast controls. These checks do not establish island-kind or watchability support.
docs/prelude-inventory.md+4
@@ -8,6 +8,8 @@ The vendored prelude defines `poke` in its private internal module and re-export
88
99The prelude also declares the generic `cmd` mold exactly as in Overview, Effects. The partial checker infers its five cases and independent message types in the supported examples; complete module checking and backend validation remain outstanding. The public prelude also declares `sub`; the partial checker infers supported constructions, while request watchability and execution remain outstanding.
1010
11+The public prelude now defines the UI `length`, `align`, `role`, `tone` and `attr` molds, a nonrecursive generic `element` union with one case per UI node, and the exact `program` and `page` records with their builders. Nested child, keyed-item and table payloads in the runtime union are erased to `*`; the public constructors retain typed children and independent key types, and `island` stores `[program data]` in its erased payload. The focused `types-prelude-ui` golden infers the complete union and constructor schemes, including static and message-bearing composition. Raw-constructor encapsulation, duplicate-attribute rejection, rendering, storage, navigation and execution are not established by this slice.
12+
1113Hoon `+$` arms are marked **mold** below; `++` arms can be gates, doors or mold generators, and need individual inspection. Jibb's loobean `not` and Hoon's bitwise `not.bit` are distinct. Parser helpers outside 3g are excluded from the intended prelude except the specifically listed `slav` and `slaw`; the raw candidates below still need to be classified.
1214
1315## 1a
@@ -162,6 +164,8 @@ The compiler-result `tone.hoon` has the three cases listed above; the qualified
162164
163165`at`, `cass`, `cuss`, `crip`, `mesc`, `runt`, `sand`, `sane`, `ruth`, `trim`, `trip`, `teff`, `taft`, `tuba`, `tufa`, `tuft`, `wack`, `wick`, `woad`, `wood`.
164166
167+The prelude writes `trip` and `tuba` over private primitives. Their inferred types are `$-(@t (list @tD))` and `$-((list @tD) (list @c))`, matching the target ship's Hoon 135 definitions. Composition with `lent` and invalid argument controls pass in the partial checker; primitive lowering, execution and jet recognition remain unfinished.
168+
165169## 4k
166170
167171`co`.
docs/status.md+30−11
@@ -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| --- | --- | --- |
@@ -27,13 +27,17 @@ The internal prelude also defines `qath` as a transparent recursive knot sequenc
2727
2828The 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.
2929
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. Full module failure remains generic, and the ship replay for this witness is pending.
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.
3131
3232The 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.
3333
34−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 missing text and UI prelude definitions, cross-definition context, island-kind checks, or watchability evidence needed by the unchanged todo island.
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.
3535
36−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.
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.
3741
3842Known 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.
3943
@@ -41,7 +45,9 @@ A separate source-backed analysis can prove one named mold gate-free, report a d
4145
4246The 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.
4347
44−The API path analyzer can retain its source, complete prepared prelude, reader results and resolved dependencies as evidence, and classify a unique declaration as watchable, not watchable or unknown. It does not yet prove the provenance of request values or check island subscriptions. Prepared artifacts and reader results remain trusted host inputs.
48+A narrow full-module path now checks direct four-wing `(program init update view subs)` definitions named `main`. It requires the canonical prepared `program` value and mold, reuses ordinary source-backed program fitting, and publishes only after all ordinary module and request-graph checks. The inferred `main` must be closed and invariantly match the instantiated `program` mold. Initializer data and model must be closed and gate-free with `%yes` verdicts inside a shared 256-node budget. `subs` may syntactically return null through transparent forms, or one direct imported request watch after the request graph merges. The latter is only an unfaced two-item `[%watch (case.face |=%callback)]` singleton: the imported member must have the exact plain derived-request scheme, a unique merged request must match the API path and both case names and occur in the interface's own graph, the API source must be identical, and scry, diffs and parameters must be absent. Pure or hand-built values, helpers, aliases, re-exports, typed paths, folds, multiple watches and unknown or ambiguous evidence remain rejected. Checked interfaces retain source evidence and support ordinary downstream imports; no program execution or runtime watching is claimed. A transactional extension can recover a direct initializer whose transparent tuple body ends in null when update, view and subs are already resolved. It derives the expected gate through the ordinary positional program fit with fresh IDs and stable replay, then re-infers the actual initializer and `main` under all ordinary finalization and kind checks. Non-main libraries, aliases, nonempty or simultaneously unresolved subscriptions, and unrelated pending tags remain rejected.
49+
50+The API path analyzer can retain its source, complete prepared prelude, reader results and resolved dependencies as evidence, and classify a unique declaration as watchable, not watchable or unknown. This remains declaration evidence rather than proof about an arbitrary request value. The narrow direct-program check above composes it with final value syntax, resolved imports and merged evidence for one plain request. Prepared artifacts and reader results remain trusted host inputs.
4551
4652For 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.
4753
@@ -61,7 +67,7 @@ The prelude has Jibb-written curried `lead` and `late` pair constructors, inferr
6167
6268The 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.
6369
64−The experimental deferred constructor transaction conservatively declines tuples, 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.
70+The experimental deferred constructor transaction conservatively declines general structural tuple fits, most branches, field reads, nonidentical successful call/cast fits, and multi-argument calls with open argument, sample or result types. This prevents a later substitution from invalidating an earlier face-propagation check; cases requiring deferred structural fits remain unsupported. It can retry source definitions after later dependencies become available, and a two-arm boolean branch can retain separately owned literal-result obligations until a later closed context resolves them. Faced targets or union cases, list literals and general union-pattern branches remain unsupported.
6571
6672The 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.
6773
@@ -69,6 +75,8 @@ An eval and ship fixture now reports partial inference for the unchanged todo is
6975
7076The 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.
7177
78+The prelude also writes `trip` and `tuba` over private primitives, with inferred cord, tape and UTF-32 list types matching the target ship's Hoon 135 definitions. Their composition with `lent` and invalid argument controls pass under eval and on the ship; primitive lowering, execution and jet recognition remain unfinished. In the unchanged todo report, `update` now reaches its remaining branch-context limitation instead of failing on missing text names.
79+
7280The 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.
7381
7482Restricted-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.
@@ -89,8 +97,8 @@ What the plan asks for, and where it is:
8997
9098Besides the plan's list:
9199
92−- 658 golden cases: 438 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.
93−- The 658-case corpus passed under `urbit eval` in 106.8 s while other checks were running. The fake ship passed all 702 tests, including the source-overlap, structural-overlap, generic-union source and alias-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 107.6 s while other checks were running. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
100+- 660 golden cases: 440 that parse and 220 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
101+- The 660-case corpus passed under `urbit eval` in 103.0 s while other checks were running. The fake ship passed all 710 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 101.4 s while other checks were running. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
94102- `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.
95103- 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.
96104- 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).
@@ -201,14 +209,21 @@ Besides the plan's list:
201209| 22f3788 | 2026-10-31 | Check empty molds and propagate closed cell context into branches |
202210| 341bcb4 | 2026-10-31 | Keep deferred fits stable under later substitutions |
203211| b93a94b | 2026-10-31 | Prove local generic-alias union tags and add successor |
204−| This change | 2026-10-31 | Report generic-alias overlaps and retain deferred branch contexts |
212+| 2826c93 | 2026-10-31 | Report generic-alias overlaps and retain deferred branch contexts |
213+| b5cdc80 | 2026-10-31 | Preserve full-module overlap source evidence |
214+| ab6fdc1 | 2026-10-31 | Add source-backed text conversion wrappers |
215+| aa277c9 | 2026-10-31 | Recover prepared tuple initializers in partial reports |
216+| b4703e7 | 2026-11-01 | Check narrow closed subscription-free program mains |
217+| 26bf7a7 | 2026-11-01 | Recover narrow direct-program initializer contexts |
218+| 642d2c0 | 2026-11-01 | Prove direct request-value watchability for program subscriptions |
219+| This change | 2026-11-01 | Add the source-backed UI, program and page prelude slice |
205220
206221## Checking it
207222
208223On a machine set up as [development.md](development.md) says:
209224
210225```
211−tools/golden # 658 cases under urbit eval
226+tools/golden # 660 cases under urbit eval
212227tools/importer-test # the Hoon importer fixture projection
213228tools/type-import-default-test # default-wrapped source proof golden
214229tools/type-import-test # the importer/checker bridge fixture
@@ -216,6 +231,7 @@ tools/type-import-overlap-test # source-aware Hoon overlap and provenance fix
216231tools/type-import-structural-test # structural overlap and multi-case source fixture
217232tools/type-union-source-test # local generic-alias union guards
218233tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
234+tools/type-full-overlap-test # full-module overlap evidence
219235tools/type-tlon-test # the real Tlon reader/checker fixture
220236tools/type-mark-test # the mark/checker bridge fixture
221237tools/type-poke-test # the source-backed poke/API fixture
@@ -230,6 +246,7 @@ tools/type-generic-pattern-test # source-proven recursive pattern guards
230246tools/type-deferred-test # source-owned deferred inference guards
231247tools/type-deferred-resolver-test # resolver consistency and failure guards
232248tools/type-deferred-context-test # deferred source-order and branch guards
249+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
233250tools/type-empty-test # empty molds and coverage guards
234251tools/type-cell-branch-test # branch context and rollback guards
235252tools/type-positional-face-guards-test # positional sample face guards
@@ -237,12 +254,14 @@ tools/type-qath-guards-test # qath source and unfolding guards
237254tools/type-ask-guards-test # ask source and bootstrap guards
238255tools/type-proj-guards-test # projection evidence and scope guards
239256tools/type-module-scope-test # module and prelude scope fixture
257+tools/type-program-main-test # closed program-main interface and rejection guards
258+tools/type-program-init-test # transactional direct-program initializer context guards
240259tools/hoon check-spans-test # prints <<>> when the span checker works
241260tools/testdata/selftest # the tools themselves
242261tools/doc-blocks docs/spec # the doc's examples are golden cases
243262tools/ship start
244263tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
245−tools/ship test # the same 658 cases as -test arms on the ship
264+tools/ship test # the same 660 cases as -test arms on the ship
246265tools/testdata/ship-selftest
247266tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
248267tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb.hoon+562−51
@@ -8435,7 +8435,10 @@
84358435 =/ traced=iresult $(e val.e)
84368436 ?: ?=(%| -.traced) traced
84378437 $(e then.e, state state.p.traced)
8438− %tuple (infer-simple-items items.e env state)
8438+ %tuple
8439+ ?: &(?=(^ defer.state) ?=(^ prelude.state))
8440+ (dg-infer-tuple-items items.e env state)
8441+ (infer-simple-items items.e env state)
84398442 %body
84408443 ?~ defs.e $(e final.e)
84418444 =/ local-names=(list term) (global-value-names defs.e)
@@ -9241,6 +9244,8 @@
92419244 |= [e=expr expected=itype env=ienv state=istate context=span]
92429245 ^- iresult
92439246 ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9247+ ?: &(?=(^ defer.state) ?=(^ prelude.state) ?=(%tuple -.e))
9248+ (infer-fragment e env state)
92449249 ?: ?=(%pair -.e) $(e (pair-as-cell e))
92459250 ?: ?=(%group -.e) $(e inner.e)
92469251 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
@@ -10232,6 +10237,29 @@
1023210237 (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
1023310238::
1023410239
10240++$ iadded-definition
10241+ [env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10242+++ add-supported-result
10243+ |= [d=def result=iresult initial=istate env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10244+ ^- (unit iadded-definition)
10245+ ?> ?=(%value -.d)
10246+ ?: ?=(%| -.result) ~
10247+ =. state.p.result (promote-restricted-numbers state.p.result env)
10248+ =. state.p.result (default-hole-numbers holes.state.p.result holes.initial state.p.result env !(itype-has-gate (itype-normalize typ.p.result sub.state.p.result)))
10249+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) ~
10250+ ?: (constrained-capitals caps.state.p.result sub.state.p.result) ~
10251+ =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10252+ ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) ~
10253+ ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) ~
10254+ =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10255+ ?: (gth (lent vars) 26) ~
10256+ =/ finalized=(unit (list iwprojection))
10257+ (width-finalize projections.state.p.result sub.state.p.result vars)
10258+ ?~ finalized ~
10259+ =? artifacts ?=(^ u.finalized)
10260+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10261+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10262+ `[[[name.d [typ vars]] env] checked artifacts]
1023510263++ add-supported-defs-core
1023610264 |= [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)])]
1023710265 ^- [env=ienv artifacts=(list iwidth-definition)]
@@ -10248,23 +10276,10 @@
1024810276 =. initial (reserve-def-caps val.d initial)
1024910277 =/ result=iresult (infer-fragment val.d env initial)
1025010278 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10251− ?: ?=(%| -.result) $(ds t.ds)
10252− =. state.p.result (promote-restricted-numbers state.p.result env)
10253− =. 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)))
10254− ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) $(ds t.ds)
10255− ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
10256− =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10257− ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) $(ds t.ds)
10258− ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) $(ds t.ds)
10259− =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10260− ?: (gth (lent vars) 26) $(ds t.ds)
10261− =/ finalized=(unit (list iwprojection))
10262− (width-finalize projections.state.p.result sub.state.p.result vars)
10263− ?~ finalized $(ds t.ds)
10264− =? artifacts ?=(^ u.finalized)
10265− [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10266− =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10267− $(ds t.ds, env [[name.d [typ vars]] env], checked checked)
10279+ =/ added=(unit iadded-definition)
10280+ (add-supported-result d result initial env checked artifacts)
10281+ ?~ added $(ds t.ds)
10282+ $(ds t.ds, env env.u.added, checked checked.u.added, artifacts artifacts.u.added)
1026810283::
1026910284++ resolve-groups-core
1027010285 |= [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)])]
@@ -11006,7 +11021,14 @@
1100611021+$ jbundle (list jsource)
1100711022+$ jcache (list [at=path iface=ifile])
1100811023+$ jfile-result (each [iface=ifile cache=jcache] @t)
11024+:: Overlap evidence retains the exact source that supplied its spans.
11025+:: Ordinary Jibb imports preserve this evidence through the resolver.
11026++$ jfile-overlap [file=path source=@t name=term cases=upair]
11027++$ jfile-failure [message=@t overlap=(unit jfile-overlap)]
11028++$ jfile-detailed-result (each [iface=ifile cache=jcache] jfile-failure)
1100911029+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
11030+:: Preserve an imported overlap's original file and source across the graph.
11031++$ jimports-detailed-result (each [resolved=ijimports cache=jcache] jfile-failure)
1101011032::
1101111033:: Written record fields each have their own lexical record scope.
1101211034+$ written-fields (map term span)
@@ -11279,6 +11301,43 @@
1127911301 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
1128011302 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
1128111303::
11304+:: A detailed failure is attached only to the first mold that actually
11305+:: failed in this check, using that module's checked source mold table.
11306++$ imold-failure [message=@t overlap=(unit [name=term cases=upair])]
11307+:: Validate a generic wrapper without an unbounded duplicate-name pass.
11308+++ module-mold-params-valid
11309+ |= [vars=(list @t) seen=(set @t) fuel=@ud]
11310+ ^- ?
11311+ ?~ vars &
11312+ ?: =(0 fuel) |
11313+ ?: (~(has in:..zuse seen) i.vars) |
11314+ $(vars t.vars, seen (~(put in:..zuse seen) i.vars), fuel (dec fuel))
11315+++ module-mold-overlap
11316+ |= [m=[name=term body=shape] molds=imolds]
11317+ ^- (unit upair)
11318+ =/ sh=shape body.m
11319+ =/ valid=?
11320+ ?. ?=(%generic -.sh) &
11321+ ?~ vars.sh |
11322+ (module-mold-params-valid vars.sh *(set @t) 256)
11323+ ?. valid ~
11324+ =? sh ?=(%generic -.sh) body.sh
11325+ ?. ?=(%union -.sh) ~
11326+ (union-source-overlap cases.sh molds 256)
11327+++ module-mold-types-detail
11328+ |= [molds=imolds state=istate]
11329+ ^- (each imold-types imold-failure)
11330+ ?~ molds [%& ~]
11331+ =/ m=[name=term body=shape] i.molds
11332+ =/ t=(unit [template=ischeme state=istate])
11333+ (infer-mold-template body.m state(active [name.m active.state], in-mold &))
11334+ ?~ t
11335+ =/ overlap=(unit upair) (module-mold-overlap m molds.state)
11336+ [%| ['module mold needs unsupported inference' ?~(overlap ~ `[name.m u.overlap])]]
11337+ =. typ.template.u.t (label-direct-union typ.template.u.t body.m name.m state)
11338+ =/ rest=(each imold-types imold-failure) $(molds t.molds)
11339+ ?: ?=(%| -.rest) rest
11340+ [%& [[name.m template.u.t] p.rest]]
1128211341++ module-mold-types
1128311342 |= [molds=imolds state=istate]
1128411343 ^- (each imold-types @t)
@@ -11375,7 +11434,12 @@
1137511434 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
1137611435 =/ minus=ischeme [[%fn b b] ~[0]]
1137711436 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
11378− [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
11437+ =/ utf8=itype [%atom 'tD']
11438+ =/ tape=itype [%collection %list ~[utf8]]
11439+ =/ codepoints=itype [%collection %list ~[[%atom %c]]]
11440+ =/ text-trip=ischeme [[%fn [%atom %t] tape] ~]
11441+ =/ text-tuba=ischeme [[%fn tape codepoints] ~]
11442+ [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater] [%raw-trip text-trip] [%raw-tuba text-tuba]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
1137911443::
1138011444++ infer-private-internal
1138111445 |= [src=@t public-source=@t]
@@ -11627,33 +11691,40 @@
1162711691++ resolve-jibb-imports
1162811692 |= [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)]
1162911693 ^- jimports-result
11694+ =/ result=jimports-detailed-result
11695+ (resolve-jibb-imports-detailed imports externals mark-externals modules active prelude-values prelude-molds cache prelude)
11696+ ?: ?=(%| -.result) [%| message.p.result]
11697+ [%& p.result]
11698+++ resolve-jibb-imports-detailed
11699+ |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
11700+ ^- jimports-detailed-result
1163011701 ?~ imports [%& [~ cache]]
1163111702 ?. ?=(%jibb -.i.imports) $(imports t.imports)
1163211703 =/ at=path (weld path.i.imports `path`~[%jibb])
1163311704 ?: =(at /lib/jibb/internal/jibb)
11634− [%| 'the prelude internal module is private']
11705+ [%| ['the prelude internal module is private' ~]]
1163511706 ?: =(at /lib/jibb/primitives/jibb)
11636− [%| 'the prelude primitive interface is private']
11707+ [%| ['the prelude primitive interface is private' ~]]
1163711708 ?: (lien active |=(p=path =(p at)))
11638− [%| (crip "import cycle at {(spud at)}")]
11709+ [%| [(crip "import cycle at {(spud at)}") ~]]
1163911710 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
11640− ?~ found [%| (crip "module source missing: {(spud at)}")]
11641− ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
11711+ ?~ found [%| [(crip "module source missing: {(spud at)}") ~]]
11712+ ?^ t.found [%| [(crip "duplicate module sources: {(spud at)}") ~]]
1164211713 =/ cached=(unit ifile) (find-jibb-cache at cache)
11643− =/ iface=jfile-result
11714+ =/ iface=jfile-detailed-result
1164411715 ?^ cached
11645− ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11716+ ?. =(at.u.cached at) [%| ['cached module identity needs unsupported inference' ~]]
1164611717 ?~ graph.u.cached
1164711718 :: A detached legacy interface has unknown evidence. Rebuild it
1164811719 :: against the current graph, without retaining any stale entry.
1164911720 =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
11650− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
11721+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds clean prelude)
1165111722 ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
11652− [%| 'cached module evidence needs unsupported inference']
11723+ [%| ['cached module evidence needs unsupported inference' ~]]
1165311724 [%& [u.cached cache]]
11654− (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
11725+ (infer-jibb-file-detailed at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds cache prelude)
1165511726 ?: ?=(%| -.iface) [%| p.iface]
11656− =/ rest=jimports-result $(imports t.imports, cache cache.p.iface)
11727+ =/ rest=jimports-detailed-result $(imports t.imports, cache cache.p.iface)
1165711728 ?: ?=(%| -.rest) rest
1165811729 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
1165911730::
@@ -12387,20 +12458,334 @@
1238712458 [env exports file derived.u.poke elaborations.support ~ `src `graph]
1238812459 [%& [iface dependencies.ev]]
1238912460::
12461+:: A checked program main is only the direct four-component source call.
12462+:: Grouping is transparent, but aliases, qualified wings and other module
12463+:: kinds remain outside this slice.
12464+++ program-main-def
12465+ |= ds=(list def)
12466+ ^- (unit def)
12467+ ?~ ds ~
12468+ ?: &(?=(%value -.i.ds) =(%main name.i.ds)) `i.ds
12469+ $(ds t.ds)
12470+::
12471+++ program-main-wing
12472+ |= e=expr
12473+ ^- (unit term)
12474+ ?: ?=(%group -.e) $(e inner.e)
12475+ ?. ?=(%wing -.e) ~
12476+ ?. ?=([@ ~] names.e) ~
12477+ `i.names.e
12478+::
12479+++ program-main-args
12480+ |= d=def
12481+ ^- (unit (list expr))
12482+ ?. ?=(%value -.d) ~
12483+ |-
12484+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12485+ ?. ?=(%call -.val.d) ~
12486+ =/ head=(unit term) (program-main-wing head.val.d)
12487+ ?~ head ~
12488+ ?. =(%program u.head) ~
12489+ ?. ?=([* * * * ~] args.val.d) ~
12490+ `args.val.d
12491+::
12492+++ program-main-parts
12493+ |= d=def
12494+ ^- (unit [init=term update=term view=term subs=term])
12495+ ?. ?=(%value -.d) ~
12496+ |-
12497+ ?: ?=(%group -.val.d) $(val.d inner.val.d)
12498+ ?. ?=(%call -.val.d) ~
12499+ =/ head=(unit term) (program-main-wing head.val.d)
12500+ ?~ head ~
12501+ ?. =(%program u.head) ~
12502+ ?. ?=([* * * * ~] args.val.d) ~
12503+ =/ args=(list expr) args.val.d
12504+ ?> ?=([* * * * ~] args)
12505+ =/ init=(unit term) (program-main-wing i.args)
12506+ =/ update=(unit term) (program-main-wing i.t.args)
12507+ =/ view=(unit term) (program-main-wing i.t.t.args)
12508+ =/ subs=(unit term) (program-main-wing i.t.t.t.args)
12509+ ?~ init ~
12510+ ?~ update ~
12511+ ?~ view ~
12512+ ?~ subs ~
12513+ `[u.init u.update u.view u.subs]
12514+::
12515+++ program-empty-null
12516+ |= e=expr
12517+ ^- ?
12518+ ?- -.e
12519+ %lit =(%null form.lit.e)
12520+ %cast $(e val.e)
12521+ %group $(e inner.e)
12522+ %body ?~(defs.e $(e final.e) |)
12523+ * |
12524+ ==
12525+::
12526+++ program-subs-empty
12527+ |= d=def
12528+ ^- ?
12529+ ?. ?=(%value -.d) |
12530+ ?- -.val.d
12531+ %gate (program-empty-null body.val.d)
12532+ %gate-wide (program-empty-null body.val.d)
12533+ * |
12534+ ==
12535+::
12536+++ program-transparent
12537+ |= e=expr
12538+ ^- expr
12539+ ?- -.e
12540+ %group $(e inner.e)
12541+ %cast $(e val.e)
12542+ %body ?~(defs.e $(e final.e) e)
12543+ * e
12544+ ==
12545+++ program-init-tuple-null
12546+ |= d=def
12547+ ^- ?
12548+ ?. ?=(%value -.d) |
12549+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12550+ =/ body=expr
12551+ ?- -.val.d
12552+ %gate body.val.d
12553+ %gate-wide body.val.d
12554+ * !!
12555+ ==
12556+ =. body (program-transparent body)
12557+ ?. ?=(%tuple -.body) |
12558+ ?~ items.body |
12559+ (program-empty-null val:(rear items.body))
12560+::
12561+:: Recover only the initializer of an already recognized direct program main.
12562+:: The derived call is evidence for an ordinary init/main retry, never an
12563+:: interface to publish on its own. Any failure returns the original resolution.
12564+++ program-init-context
12565+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
12566+ ^- (unit iresolved)
12567+ =/ env=ienv env.resolution
12568+ ?^ (ienv-lookup %main env) ~
12569+ ?^ (ienv-lookup init.parts env) ~
12570+ =/ update=(unit ischeme) (ienv-lookup update.parts env)
12571+ =/ view=(unit ischeme) (ienv-lookup view.parts env)
12572+ =/ subs=(unit ischeme) (ienv-lookup subs.parts env)
12573+ ?~ update ~
12574+ ?~ view ~
12575+ ?~ subs ~
12576+ =/ inits=(list def)
12577+ (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
12578+ ?. ?=([* ~] inits) ~
12579+ =/ init-def=def i.inits
12580+ ?> ?=(%value -.init-def)
12581+ ?. (program-init-tuple-null init-def) ~
12582+ =/ args=(unit (list expr)) (program-main-args main)
12583+ ?~ args ~
12584+ ?~ prelude.initial ~
12585+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
12586+ ?~ program ~
12587+ =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
12588+ ?~ heads ~
12589+ =/ written=(unit def) (~(get by gates.u.heads) %program)
12590+ ?~ written ~
12591+ =/ written-sample=(unit sample) (direct-gate-sample u.written)
12592+ ?~ written-sample ~
12593+ ?. ?=(%cell -.u.written-sample) ~
12594+ ?~ items.u.written-sample ~
12595+ =/ checked=(map term def) (direct-checked-gates ds env)
12596+ =/ templates=ienv
12597+ (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
12598+ =/ scanned=(unit dgscan)
12599+ (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
12600+ ?~ scanned ~
12601+ =. next.initial (dg-next-id ids.u.scanned 0)
12602+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program initial)
12603+ ?. ?=(%fn -.typ.instance) ~
12604+ ?. ?=(%cell -.sample.typ.instance) ~
12605+ =/ expected-init=(unit itype)
12606+ (direct-slot-body hed.sample.typ.instance (direct-sample-name i.items.u.written-sample))
12607+ ?~ expected-init ~
12608+ ?. ?=(%fn -.u.expected-init) ~
12609+ ?. ?=(%var -.sample.u.expected-init) ~
12610+ =/ data=@ud id.sample.u.expected-init
12611+ =/ init-var=itype [%var next.state.instance]
12612+ =/ st=istate state.instance(next +(next.state.instance))
12613+ =/ up=[typ=itype state=istate] (instantiate-scheme u.update st)
12614+ =/ vw=[typ=itype state=istate] (instantiate-scheme u.view state.up)
12615+ =/ sb=[typ=itype state=istate] (instantiate-scheme u.subs state.vw)
12616+ =. st state.sb(gate-defs checked, head-evidence heads)
12617+ =/ actual=itype [%cell init-var [%cell typ.up [%cell typ.vw typ.sb]]]
12618+ =/ fit=ifit
12619+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.st next.st)
12620+ ?. ?=(%ok -.fit) ~
12621+ =/ actual-final=itype (itype-normalize actual sub.fit)
12622+ =/ expected-final=itype (itype-normalize sample.typ.instance sub.fit)
12623+ =/ open=(list @ud)
12624+ (unique-type-vars (weld (itype-vars actual-final) (itype-vars expected-final)))
12625+ ?. (levy open |=(n=@ud =(data n))) ~
12626+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
12627+ =/ replay=ifit
12628+ (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.fit next.fit)
12629+ ?. ?=(%ok -.replay) ~
12630+ ?. &(=(sub.fit sub.replay) =(next.fit next.replay)) ~
12631+ =/ expected=itype (itype-normalize u.expected-init sub.fit)
12632+ ?. ?=(%fn -.expected) ~
12633+ =. st st(sub sub.fit, next next.fit)
12634+ =/ init-state=istate (reserve-def-caps val.init-def st)
12635+ =/ inferred=iresult (infer-fragment val.init-def env init-state)
12636+ =? inferred ?=(%| -.inferred) (infer-recursive-gate init-def env init-state)
12637+ ?: ?=(%| -.inferred) ~
12638+ ?. ?=(%fn -.typ.p.inferred) ~
12639+ =/ data-fit=ifit
12640+ (itype-fit sample.typ.p.inferred sample.expected sub.state.p.inferred next.state.p.inferred)
12641+ ?. ?=(%ok -.data-fit) ~
12642+ =/ closed=itype (itype-normalize expected sub.data-fit)
12643+ ?. ?=(%fn -.closed) ~
12644+ :: Resolve the ordinary tuple cast first, then check the complete gate.
12645+ :: General function fit remains unchanged; only this recovered candidate
12646+ :: receives the derived result context before its whole-type cast fit.
12647+ =/ product-fit=ifit
12648+ (itype-fit product.typ.p.inferred product.closed sub.data-fit next.data-fit)
12649+ ?. ?=(%ok -.product-fit) ~
12650+ =/ product=itype
12651+ (itype-merge-faces product.typ.p.inferred product.closed sub.product-fit)
12652+ =/ actual-cast=itype [%fn sample.typ.p.inferred product]
12653+ =/ cast=ifit
12654+ (itype-fit actual-cast closed sub.product-fit next.product-fit)
12655+ ?. ?=(%ok -.cast) ~
12656+ =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
12657+ =/ adjusted=iresult
12658+ [%& merged state.p.inferred(sub sub.cast, next next.cast)]
12659+ =/ added=(unit iadded-definition)
12660+ (add-supported-result init-def adjusted init-state env checked artifacts.resolution)
12661+ ?~ added ~
12662+ =/ recovered=(unit ischeme) (ienv-lookup init.parts env.u.added)
12663+ ?~ recovered ~
12664+ ?. ?=(~ vars.u.recovered) ~
12665+ ?. ?=(~ (itype-vars typ.u.recovered)) ~
12666+ =/ completed=[env=ienv artifacts=(list iwidth-definition)]
12667+ (add-supported-defs-core ~[main] ds checked.u.added heads env.u.added molds.initial globals.initial externals.initial surs.initial mark-externals.initial marks.initial jimports.initial reserved-molds.initial at.initial prelude.initial artifacts.u.added grec-index.initial)
12668+ ?~ (ienv-lookup %main env.completed) ~
12669+ `[env.completed grouped.resolution artifacts.completed]
12670+::
12671+++ program-subs-watch
12672+ |= [d=def imports=ijimports graph=irequest-graph prelude=ifile]
12673+ ^- ?
12674+ ?. ?=(%value -.d) |
12675+ ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12676+ =/ body=expr
12677+ ?- -.val.d
12678+ %gate body.val.d
12679+ %gate-wide body.val.d
12680+ * val.d
12681+ ==
12682+ =. body (program-transparent body)
12683+ ?. ?=(%list -.body) |
12684+ ?. ?=([* ~] items.body) |
12685+ =/ watch=expr (program-transparent i.items.body)
12686+ ?. ?=(%tuple -.watch) |
12687+ ?. ?=([* * ~] items.watch) |
12688+ =/ tag=item i.items.watch
12689+ =/ payload=item i.t.items.watch
12690+ ?. &(?=(~ face.tag) ?=(~ face.payload)) |
12691+ =/ tag-expr=expr (program-transparent val.tag)
12692+ ?. ?=(%lit -.tag-expr) |
12693+ ?. &(?=(%term form.lit.tag-expr) =(%watch val.lit.tag-expr)) |
12694+ =/ request=expr (program-transparent val.payload)
12695+ ?. ?=(%call -.request) |
12696+ ?. ?=([* ~] args.request) |
12697+ =/ head=expr (program-transparent head.request)
12698+ ?. ?=(%wing -.head) |
12699+ ?. ?=([@ @ ~] names.head) |
12700+ =/ case=term i.names.head
12701+ =/ face=term i.t.names.head
12702+ =/ callback=expr (program-transparent i.args.request)
12703+ ?. ?=(%ctor -.callback) |
12704+ ?. ?=(%term form.tag.callback) |
12705+ =/ selected=(list [face=term interface=ifile])
12706+ (skim imports |=(j=[face=term interface=ifile] =(face face.j)))
12707+ ?. ?=([* ~] selected) |
12708+ =/ iface=ifile interface.i.selected
12709+ =/ member=(unit ischeme) (ienv-lookup case values.iface)
12710+ ?~ member |
12711+ ?~ source.iface |
12712+ =/ evidence=(list irequest-evidence)
12713+ (skim requests.graph |=(r=irequest-evidence &(=(api-at.r at.iface) =(name.r case))))
12714+ ?. ?=([* ~] evidence) |
12715+ =/ request-evidence=irequest-evidence i.evidence
12716+ ?. =(u.source.iface api-source.request-evidence) |
12717+ ?. =(name.path.path.request-evidence case) |
12718+ ?~ graph.iface |
12719+ ?. (lien requests.u.graph.iface |=(r=irequest-evidence =(r request-evidence))) |
12720+ ?. ?=(~ scry.path.path.request-evidence) |
12721+ ?. &(?=(~ diffs.path.request-evidence) ?=(~ diffs.path.path.request-evidence)) |
12722+ ?: (lien segments.path.path.request-evidence |=(p=pseg !?=(%knot -.p))) |
12723+ ?. ?=([@ ~] vars.u.member) |
12724+ =/ message=@ud i.vars.u.member
12725+ ?. ?=(%fn -.typ.u.member) |
12726+ ?. ?=(%fn -.sample.typ.u.member) |
12727+ ?. =(sample.sample.typ.u.member full.path.request-evidence) |
12728+ ?. =(product.sample.typ.u.member [%var message]) |
12729+ =/ prep=iprelude [prelude prelude-values.graph prelude-molds.graph]
12730+ =/ ask=(unit ischeme) (request-compatible-ask prep)
12731+ ?~ ask |
12732+ =/ result=(unit itype) (template-apply u.ask ~[[%var message]])
12733+ ?~ result |
12734+ =(product.typ.u.member u.result)
12735+::
12736+++ program-main-closed
12737+ |= [parts=[init=term update=term view=term subs=term] ds=(list def) env=ienv prelude=(unit ifile) imports=ijimports graph=irequest-graph]
12738+ ^- ?
12739+ ?~ prelude |
12740+ ?~ (ienv-lookup %program values.u.prelude) |
12741+ =/ program=(unit ischeme) (find-jibb-mold %program u.prelude)
12742+ ?~ program |
12743+ =/ main=(unit ischeme) (ienv-lookup %main env)
12744+ ?~ main |
12745+ ?. ?=(~ vars.u.main) |
12746+ ?. ?=(~ (itype-vars typ.u.main)) |
12747+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.program *istate)
12748+ =/ main-fit=ifit (direct-invariant typ.u.main typ.instance ~ next.state.instance)
12749+ ?. ?=(%ok -.main-fit) |
12750+ =/ init=(unit ischeme) (ienv-lookup init.parts env)
12751+ ?~ init |
12752+ ?. ?=(~ vars.u.init) |
12753+ ?. ?=(%fn -.typ.u.init) |
12754+ ?. ?=(~ (itype-vars sample.typ.u.init)) |
12755+ ?. ?=(~ (itype-vars product.typ.u.init)) |
12756+ =/ data=igate-free (gate-free-type sample.typ.u.init 256 ~)
12757+ ?. =(%yes verdict.data) |
12758+ =/ model=igate-free (gate-free-type product.typ.u.init left.data ~)
12759+ ?. =(%yes verdict.model) |
12760+ =/ subs=(list def)
12761+ (skim ds |=(d=def &(?=(%value -.d) =(subs.parts name.d))))
12762+ ?. ?=([* ~] subs) |
12763+ |((program-subs-empty i.subs) (program-subs-watch i.subs imports graph u.prelude))
12764+::
1239012765++ infer-jibb-file
1239112766 |= [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)]
1239212767 ^- jfile-result
12768+ =/ out=jfile-detailed-result
12769+ (infer-jibb-file-detailed at src externals mark-externals modules active prelude-values prelude-molds cache prelude)
12770+ ?: ?=(%| -.out) [%| message.p.out]
12771+ [%& p.out]
12772+:: Returns structured root-source overlap evidence after the same full check.
12773+++ infer-jibb-file-detailed
12774+ |= [at=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term) cache=jcache prelude=(unit ifile)]
12775+ ^- jfile-detailed-result
1239312776 =/ parsed (parse at src)
12394− ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
12777+ ?: ?=(%| -.parsed) [%| [(crip "module source does not parse: {(spud at)}") ~]]
1239512778 =/ mod=module p.parsed
1239612779 =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
12397− ?^ duplicate [%| (show-duplicate-fields at src u.duplicate)]
12780+ ?^ duplicate [%| [(show-duplicate-fields at src u.duplicate) ~]]
12781+ ?: &(?=([%ui %api *] at) ?=(^ (program-main-def defs.mod)))
12782+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
1239812783 ?: ?=([%ui %api *] at)
1239912784 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
1240012785 ?^ iface
1240112786 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
1240212787 [%& [checked [[at checked] cache]]]
12403− ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
12788+ ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1240412789 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
1240512790 =/ narrow=?
1240612791 ?. ?=([[%mark *] ~] imports.mod) |
@@ -12410,21 +12795,24 @@
1241012795 ?: narrow
1241112796 =/ request=(each ione-request-interface @t)
1241212797 (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
12413− ?: ?=(%| -.request) [%| (crip "API module needs unsupported inference: {(spud at)}")]
12798+ ?: ?=(%| -.request) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1241412799 =/ checked=ifile iface.p.request
1241512800 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
1241612801 =/ multi=(each [iface=ifile cache=jcache] @t)
1241712802 (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
12418− ?: ?=(%| -.multi) [%| (crip "API module needs unsupported inference: {(spud at)}")]
12803+ ?: ?=(%| -.multi) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1241912804 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
1242012805 ?. (module-scope-valid mod prelude-values prelude-molds)
1242112806 ?: (pending-declared-poke at mod prelude-values prelude-molds)
12422− [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
12423− [%| (crip "module has conflicting names: {(spud at)}")]
12807+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
12808+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
1242412809 =/ vals=(list term) (global-value-names defs.mod)
12425− ?: (lien vals |=(n=term =(n %main)))
12426− [%| (crip "module kind needs unsupported inference: {(spud at)}")]
12427− =/ js=jimports-result (resolve-jibb-imports imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
12810+ =/ main=(unit def) (program-main-def defs.mod)
12811+ =/ main-parts=(unit [init=term update=term view=term subs=term])
12812+ ?~(main ~ (program-main-parts u.main))
12813+ ?. ?~(main & &(!?=([%ui %stores *] at) ?=(^ main-parts)))
12814+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
12815+ =/ js=jimports-detailed-result (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
1242812816 ?: ?=(%| -.js) [%| p.js]
1242912817 =/ collected=grec-collected
1243012818 ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
@@ -12449,13 +12837,26 @@
1244912837 ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
1245012838 `[at src u.prelude index]
1245112839 =. grec-index.state index
12452− =/ mts=(each imold-types @t) (module-mold-types molds state)
12453− ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
12840+ =/ mts=(each imold-types imold-failure) (module-mold-types-detail molds state)
12841+ ?: ?=(%| -.mts)
12842+ ?~ overlap.p.mts [%| [(crip "{(trip message.p.mts)}: {(spud at)}") ~]]
12843+ =/ witness=[name=term cases=upair] u.overlap.p.mts
12844+ =/ first=@t (show-error src [at line.beg.first.cases.witness col.beg.first.cases.witness "first union case"])
12845+ =/ second=@t (show-error src [at line.beg.second.cases.witness col.beg.second.cases.witness "overlapping case"])
12846+ =/ msg=@t (of-wain:format ~[(crip "module mold {(trip name.witness)} has overlapping cases") first second])
12847+ [%| [msg `[at src name.witness cases.witness]]]
1245412848 =/ resolution=iresolved
1245512849 ?~ index
1245612850 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
1245712851 (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
1245812852 =/ env=ienv env.resolution
12853+ =/ recovered=(unit iresolved)
12854+ ?~ main ~
12855+ ?~ main-parts ~
12856+ (program-init-context u.main u.main-parts defs.mod resolution state)
12857+ =. env ?~(recovered env env.u.recovered)
12858+ =. artifacts.resolution
12859+ ?~(recovered artifacts.resolution artifacts.u.recovered)
1245912860 =. env
1246012861 ?: (module-values-complete defs.mod env) env
1246112862 ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env
@@ -12467,10 +12868,12 @@
1246712868 ?: (dg-interface-safe env.u.transaction) env.u.transaction
1246812869 env
1246912870 ?. (module-values-complete defs.mod env)
12470− [%| (crip "module definitions need unsupported inference: {(spud at)}")]
12871+ [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
1247112872 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
1247212873 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
12473− ?~ graph [%| 'module request evidence needs unsupported inference']
12874+ ?~ graph [%| ['module request evidence needs unsupported inference' ~]]
12875+ ?. ?~(main & ?~(main-parts | (program-main-closed u.main-parts defs.mod env prelude resolved.p.js u.graph)))
12876+ [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
1247412877 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
1247512878 [%& [iface [[at iface] cache.p.js]]]
1247612879::
@@ -12588,7 +12991,7 @@
1258812991 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
1258912992 =/ scope-values=(list term)
1259012993 (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
12591− (golden-types-in-context file src externals mark-externals resolved.p.js scope-values prelude-molds iface)
12994+ (golden-types-in-context-core file src externals mark-externals resolved.p.js scope-values prelude-molds iface prepared)
1259212995::
1259312996:: +golden-types-with-marks: supply declared mark types separately from /sur
1259412997:: entries, as [mark result] with the result from +read-mark:jibb-import.
@@ -12619,6 +13022,10 @@
1261913022++ golden-types-in-context
1262013023 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
1262113024 ^- @t
13025+ (golden-types-in-context-core file src externals mark-externals jimports prelude-values reserved-molds prelude ~)
13026+++ golden-types-in-context-core
13027+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile) prepared=(unit iprelude)]
13028+ ^- @t
1262213029 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
1262313030 =/ parsed (parse file src)
1262413031 ?: ?=(%| -.parsed) (show-error src p.parsed)
@@ -12638,19 +13045,27 @@
1263813045 =/ eligible=?
1263913046 ?& ?=(~ imports.p.parsed)
1264013047 ?=(~ jimports)
12641− ?=(~ prelude)
12642− ?=(~ prelude-values)
12643− ?=(~ reserved-molds)
1264413048 !?=([%ui %api *] file)
1264513049 !?=([%ui %stores *] file)
1264613050 !(lien (global-value-names ds) |=(n=term =(n %main)))
12647− (module-scope-valid p.parsed ~ ~)
1264813051 !(module-values-complete ds env)
1264913052 (lte (met 3 src) 65.536)
1265013053 (lte (lent ds) 64)
12651− (dg-source-candidate ds 64)
13054+ ?| &(?=(~ prepared) ?=(~ prelude) ?=(~ prelude-values) ?=(~ reserved-molds) (module-scope-valid p.parsed ~ ~) (dg-source-candidate ds 64))
13055+ ?& ?=(^ prepared)
13056+ ?=(^ prelude)
13057+ =(u.prelude iface.u.prepared)
13058+ =(prelude-values values.u.prepared)
13059+ =(reserved-molds molds.u.prepared)
13060+ (module-scope-valid p.parsed values.u.prepared molds.u.prepared)
13061+ (dg-prepared-candidate ds 64)
13062+ ==
13063+ ==
1265213064 ==
12653− =/ transaction=(unit dgcommit) ?:(eligible (dg-root-source file src) ~)
13065+ =/ transaction=(unit dgcommit)
13066+ ?. eligible ~
13067+ ?~ prepared (dg-root-source file src)
13068+ (dg-root-prepared file src u.prepared)
1265413069 =. recovered
1265513070 ?~ transaction ~
1265613071 ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
@@ -12936,6 +13351,31 @@
1293613351 [%& result st(next +(next.st), obligations [ex ey obligations.st])]
1293713352 [%& typ.p.left state.p.right]
1293813353::
13354+:: A direct tuple literal may wait for a later exact result context.
13355+:: Each pending literal retains its source tag and its own fit obligation.
13356+++ dg-infer-tuple-items
13357+ |= [items=(list item) env=ienv state=istate]
13358+ ^- iresult
13359+ ?~ items [%| ["empty cell is not supported by partial inference" ~]]
13360+ =/ head=iresult (infer-fragment val.i.items env state)
13361+ ?: ?=(%| -.head) head
13362+ =/ typ=itype typ.p.head
13363+ =/ st=istate state.p.head
13364+ =/ adjusted=(unit [typ=itype state=istate])
13365+ ?. (dg-owned-arm-literal val.i.items typ tags.st sub.st next.state) `[typ st]
13366+ ?: (gth (lent obligations.st) 63) ~
13367+ =/ pending=itype [%var next.st]
13368+ =/ edge=dgo [typ pending (span-of val.i.items) at.i.items]
13369+ `[pending st(next +(next.st), obligations [edge obligations.st])]
13370+ ?~ adjusted [%| ["deferred tuple context needs unsupported inference" ~]]
13371+ =. typ typ.u.adjusted
13372+ =. st state.u.adjusted
13373+ =. typ ?~(face.i.items typ [%face u.face.i.items typ])
13374+ ?~ t.items [%& typ st]
13375+ =/ tail=iresult $(items t.items, state st)
13376+ ?: ?=(%| -.tail) tail
13377+ [%& [%cell typ typ.p.tail] state.p.tail]
13378+::
1293913379:: Deferred inference uses only source forms whose successful fit sites are
1294013380:: guarded below; a shared source-node budget bounds this screen.
1294113381++ dg-safe-expressions
@@ -12945,6 +13385,13 @@
1294513385 =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
1294613386 ?~ first ~
1294713387 $(todo t.todo, fuel u.first)
13388+++ dg-safe-items
13389+ |= [items=(list item) fuel=@ud]
13390+ ^- (unit @ud)
13391+ ?~ items `fuel
13392+ =/ first=(unit @ud) (dg-safe-expression val.i.items fuel)
13393+ ?~ first ~
13394+ $(items t.items, fuel u.first)
1294813395++ dg-safe-expression
1294913396 |= [e=expr fuel=@ud]
1295013397 ^- (unit @ud)
@@ -12962,6 +13409,7 @@
1296213409 $(e final.e, fuel fuel)
1296313410 %gate $(e body.e, fuel fuel)
1296413411 %gate-wide $(e body.e, fuel fuel)
13412+ %tuple (dg-safe-items items.e fuel)
1296513413 %branch
1296613414 ?. (dg-boolean-patterns e) ~
1296713415 ?> ?=(^ arms.e)
@@ -13101,6 +13549,28 @@
1310113549 ?: (dg-direct-source val.i.ds 64) &
1310213550 $(ds t.ds, fuel (dec fuel))
1310313551::
13552+++ dg-prepared-source
13553+ |= [e=expr fuel=@ud]
13554+ ^- ?
13555+ ?: (dg-direct-source e fuel) &
13556+ ?: =(0 fuel) |
13557+ ?+ -.e |
13558+ %group $(e inner.e, fuel (dec fuel))
13559+ %gate $(e body.e, fuel (dec fuel))
13560+ %gate-wide $(e body.e, fuel (dec fuel))
13561+ %cast $(e val.e, fuel (dec fuel))
13562+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
13563+ %tuple &
13564+ ==
13565+++ dg-prepared-candidate
13566+ |= [ds=(list def) fuel=@ud]
13567+ ^- ?
13568+ ?~ ds |
13569+ ?: =(0 fuel) |
13570+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
13571+ ?: (dg-prepared-source val.i.ds 64) &
13572+ $(ds t.ds, fuel (dec fuel))
13573+::
1310413574++ dg-interface-safe
1310513575 |= [env=ienv]
1310613576 ^- ?
@@ -13146,6 +13616,47 @@
1314613616 (dg-stage defs base base st ~ 64)
1314713617 ::
1314813618 [& (transact)]
13619+:: The caller supplies the trusted prepared prelude. This transaction is
13620+:: only report evidence; the ordinary module resolver does not publish it.
13621+++ dg-root-prepared
13622+ |= [at=path src=@t prepared=iprelude]
13623+ ^- (unit dgcommit)
13624+ ?: ?=([%ui %api *] at) ~
13625+ ?: ?=([%ui %stores *] at) ~
13626+ ?: (gth (met 3 src) 65.536) ~
13627+ =/ parsed (parse at src)
13628+ ?: ?=(%| -.parsed) ~
13629+ ?^ imports.p.parsed ~
13630+ ?. (module-scope-valid p.parsed values.prepared molds.prepared) ~
13631+ ?^ (duplicate-defs defs.p.parsed) ~
13632+ =/ defs=(list def) defs.p.parsed
13633+ ?: (gth (lent defs) 64) ~
13634+ ?: (lien (global-value-names defs) |=(n=term =(n %main))) ~
13635+ ?. (dg-prepared-candidate defs 64) ~
13636+ =/ local-molds=imolds (collect-simple-molds defs)
13637+ =/ globals=(list term) (weld values.prepared (global-value-names defs))
13638+ =/ iface=ifile iface.prepared
13639+ =/ prelude=(unit ifile) `iface
13640+ =/ resolution=iresolved
13641+ (resolve-groups defs local-molds globals ~ ~ ~ ~ ~ molds.prepared at prelude)
13642+ ?^ grouped.resolution ~
13643+ ?^ artifacts.resolution ~
13644+ =/ base=ienv env.resolution
13645+ =/ templates=ienv
13646+ (turn molds.iface |=(x=[name=term template=ischeme] [name.x template.x]))
13647+ =/ all-env=ienv (weld base (weld values.iface templates))
13648+ =/ free=(unit dgscan) (dg-env all-env ~ 32.768 ~)
13649+ ?~ free ~
13650+ ?^ ids.u.free ~
13651+ =/ all=(unit dgscan) (dg-all-env-ids all-env 32.768 ~)
13652+ ?~ all ~
13653+ =/ fresh=@ud (dg-next-id ids.u.all 0)
13654+ =/ st=istate *istate
13655+ =. st st(next fresh, defer `~, molds local-molds, globals globals, at at, reserved-molds molds.prepared, prelude prelude, top-molds (turn local-molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
13656+ =/ checked-molds=(each imold-types @t) (module-mold-types local-molds st)
13657+ ?: ?=(%| -.checked-molds) ~
13658+ (dg-stage defs base base st ~ 64)
13659+::
1314913660++ dg-all-env-ids
1315013661 |= [env=ienv fuel=@ud ids=(list @ud)]
1315113662 ^- (unit dgscan)
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+132
@@ -373,3 +373,135 @@
373373++ late |= second=B |= first=A [first second]
374374
375375++ succ |= x=A (add x 1)
376+
377+++ trip |= value=@t (trip-text.internal value)
378+++ tuba |= values=(list @tD) (tuba-text.internal values)
379+
380+:: UI values are source-level descriptions only. Nested element payloads are
381+:: erased in the nonrecursive union; the public constructors below retain the
382+:: typed composition boundaries. Raw-constructor encapsulation, rendering and
383+:: execution are not established by this slice.
384++$ length
385+ [%chars n=@ud]
386+ [%fill n=@ud]
387+ %shrink
388+
389++$ align
390+ %start
391+ %center
392+ %end
393+
394++$ role
395+ %body
396+ %caption
397+ %label
398+
399++$ tone
400+ %normal
401+ %muted
402+ %accent
403+ %danger
404+
405++$ attr
406+ [%pad %s0]
407+ [%pad %s1]
408+ [%pad %s2]
409+ [%pad %s3]
410+ [%gap %s0]
411+ [%gap %s1]
412+ [%gap %s2]
413+ [%gap %s3]
414+ [%width width=length]
415+ [%align align=align]
416+ [%role role=role]
417+ [%tone tone=tone]
418+
419++$ element |$ [M]
420+ [%row attrs=(list attr) kids=*]
421+ [%column attrs=(list attr) kids=*]
422+ [%wrap attrs=(list attr) kids=*]
423+ [%stack attrs=(list attr) kids=*]
424+ [%el attrs=(list attr) kid=*]
425+ [%para kids=*]
426+ [%text words=@t]
427+ [%heading level=@ud words=@t]
428+ [%each items=*]
429+ [%table columns=* rows=*]
430+ [%image source=qath description=@t]
431+ [%image-unsafe source=[url=@t width=@ud height=@ud] description=@t]
432+ [%link target=qath label=@t]
433+ [%link-unsafe target=@t label=@t]
434+ [%button label=@t message=M]
435+ [%toggle on=? label=@t message=M]
436+ [%field label=@t value=@t reply=$-(@t M)]
437+ [%form message=M kids=*]
438+ [%island payload=*]
439+
440+++ row |= [attrs=(list attr) kids=(list (element M))]
441+ ^- (element M) [%row attrs kids]
442+
443+++ column |= [attrs=(list attr) kids=(list (element M))]
444+ ^- (element M) [%column attrs kids]
445+
446+++ wrap |= [attrs=(list attr) kids=(list (element M))]
447+ ^- (element M) [%wrap attrs kids]
448+
449+++ stack |= [attrs=(list attr) kids=(list (element M))]
450+ ^- (element M) [%stack attrs kids]
451+
452+++ el |= [attrs=(list attr) kid=(element M)]
453+ ^- (element M) [%el attrs kid]
454+
455+++ para |= kids=(list (element M))
456+ ^- (element M) [%para kids]
457+
458+++ text |= words=@t
459+ ^- (element M) [%text words]
460+
461+++ heading |= [level=@ud words=@t]
462+ ^- (element M) [%heading level words]
463+
464+++ each |= items=(list [key=K el=(element M)])
465+ ^- (element M) [%each items]
466+
467+++ table |= [columns=(list [header=@t width=length align=align]) rows=(list [key=K cells=(list (element M))])]
468+ ^- (element M) [%table columns rows]
469+
470+++ image |= [source=qath description=@t]
471+ ^- (element M) [%image source description]
472+
473+++ image-unsafe |= [source=[url=@t width=@ud height=@ud] description=@t]
474+ ^- (element M) [%image-unsafe source description]
475+
476+++ link |= [target=qath label=@t]
477+ ^- (element M) [%link target label]
478+
479+++ link-unsafe |= [target=@t label=@t]
480+ ^- (element M) [%link-unsafe target label]
481+
482+++ button |= [label=@t message=M]
483+ ^- (element M) [%button label message]
484+
485+++ toggle |= [on=? label=@t message=M]
486+ ^- (element M) [%toggle on label message]
487+
488+++ field |= [label=@t value=@t reply=$-(@t M)]
489+ ^- (element M) [%field label value reply]
490+
491+++ form |= [message=M kids=(list (element M))]
492+ ^- (element M) [%form message kids]
493+
494++$ program |$ [D X M]
495+ [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
496+
497+++ program |= [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
498+ ^- (program D X M) [init update view subs]
499+
500+++ island |= [p=(program D X M) data=D]
501+ ^- (element !!) [%island [p data]]
502+
503++$ page |$ [R D]
504+ [load=$-(R (ask D)) view=$-(D (element !!))]
505+
506+++ page |= [load=$-(R (ask D)) view=$-(D (element !!))]
507+ ^- (page R D) [load view]
tests/golden/module-import-cycle/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= a /ui/a
2−++ text (identity.a "hi")
2+++ text-value (identity.a "hi")
tests/golden/module-import-cycle/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:11 tight knot a
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.a
12−2:21 str "hi"
13−2:25 tight glyph )
14−2:26 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.a
12+2:27 str "hi"
13+2:31 tight glyph )
14+2:32 NEWLINE
tests/golden/module-import-cycle/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 a /ui/a)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.a) (str 2:27 "hi")))))
tests/golden/module-import-identity/source.jibb+1−1
@@ -1,3 +1,3 @@
11/= lib /ui/lib
2−++ text (identity.lib "hi")
2+++ text-value (identity.lib "hi")
33++ ship (identity.lib ~zod)
tests/golden/module-import-identity/tokens.txt+5−5
@@ -6,11 +6,11 @@
661:13 tight knot lib
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.lib
12−2:23 str "hi"
13−2:27 tight glyph )
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.lib
12+2:29 str "hi"
13+2:33 tight glyph )
14143:1 NEWLINE
15153:1 glyph ++
16163:4 name ship
tests/golden/module-import-identity/tree.txt+3−3
@@ -1,8 +1,8 @@
11(module
22 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.lib) (str 2:23 "hi"))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.lib) (str 2:29 "hi"))))
66 (value 3:1 ship
77 (group 3:9
88 (call 3:10 (wing 3:10 identity.lib) (lit 3:23 ~zod)))))
tests/golden/module-import-identity/types.txt+1−1
@@ -1,3 +1,3 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
33++ ship: @p
tests/golden/module-import-transitive/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= a /ui/a
2−++ text (identity.a "hi")
2+++ text-value (identity.a "hi")
tests/golden/module-import-transitive/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:11 tight knot a
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.a
12−2:21 str "hi"
13−2:25 tight glyph )
14−2:26 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.a
12+2:27 str "hi"
13+2:31 tight glyph )
14+2:32 NEWLINE
tests/golden/module-import-transitive/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 a /ui/a)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.a) (str 2:27 "hi")))))
tests/golden/module-import-transitive/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/module-import-unused-invalid/source.jibb+1−1
@@ -1,2 +1,2 @@
11/= good /ui/good
2−++ text (identity.good "hi")
2+++ text-value (identity.good "hi")
tests/golden/module-import-unused-invalid/tokens.txt+6−6
@@ -6,9 +6,9 @@
661:14 tight knot good
772:1 NEWLINE
882:1 glyph ++
9−2:4 name text
10−2:9 glyph (
11−2:10 tight wing identity.good
12−2:24 str "hi"
13−2:28 tight glyph )
14−2:29 NEWLINE
9+2:4 name text-value
10+2:15 glyph (
11+2:16 tight wing identity.good
12+2:30 str "hi"
13+2:34 tight glyph )
14+2:35 NEWLINE
tests/golden/module-import-unused-invalid/tree.txt+3−3
@@ -1,5 +1,5 @@
11(module
22 (jibb 1:1 good /ui/good)
3− (value 2:1 text
4− (group 2:9
5− (call 2:10 (wing 2:10 identity.good) (str 2:24 "hi")))))
3+ (value 2:1 text-value
4+ (group 2:15
5+ (call 2:16 (wing 2:16 identity.good) (str 2:30 "hi")))))
tests/golden/module-import-unused-invalid/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/types-arithmetic-module/source.jibb+1−1
@@ -1,7 +1,7 @@
11/= math /ui/math
22++ decimal ^- @ud (sum.math 1 2)
33++ hex ^- @ux (sum.math 0x1 0x2)
4−++ text ^- @t (alias.math "a" "b")
4+++ text-value ^- @t (alias.math "a" "b")
55++ ship ^- @p (down.math ~zod)
66++ reject-bool (sum.math %.y %.n)
77++ reject-down (down.math %.y)
tests/golden/types-arithmetic-module/tokens.txt+8−8
@@ -26,14 +26,14 @@
26263:32 tight glyph )
27274:1 NEWLINE
28284:1 glyph ++
29−4:4 name text
30−4:9 glyph ^-
31−4:12 aura @t
32−4:15 glyph (
33−4:16 tight wing alias.math
34−4:27 str "a"
35−4:31 str "b"
36−4:34 tight glyph )
29+4:4 name text-value
30+4:15 glyph ^-
31+4:18 aura @t
32+4:21 glyph (
33+4:22 tight wing alias.math
34+4:33 str "a"
35+4:37 str "b"
36+4:40 tight glyph )
37375:1 NEWLINE
38385:1 glyph ++
39395:4 name ship
tests/golden/types-arithmetic-module/tree.txt+5−5
@@ -10,11 +10,11 @@
1010 (aura 3:11 @ux)
1111 (group 3:15
1212 (call 3:16 (wing 3:16 sum.math) (lit 3:25 0x1) (lit 3:29 0x2)))))
13− (value 4:1 text
14− (cast 4:9
15− (aura 4:12 @t)
16− (group 4:15
17− (call 4:16 (wing 4:16 alias.math) (str 4:27 "a") (str 4:31 "b")))))
13+ (value 4:1 text-value
14+ (cast 4:15
15+ (aura 4:18 @t)
16+ (group 4:21
17+ (call 4:22 (wing 4:22 alias.math) (str 4:33 "a") (str 4:37 "b")))))
1818 (value 5:1 ship
1919 (cast 5:9
2020 (aura 5:12 @p)
tests/golden/types-arithmetic-module/types.txt+1−1
@@ -1,7 +1,7 @@
11partial inference; module not checked
22++ decimal: @ud
33++ hex: @ux
4−++ text: @t
4+++ text-value: @t
55++ ship: @p
66++ reject-bool: call's sample and argument types do not unify
77/tests/golden/types-arithmetic-module/source.jibb:6:17: called gate has type $-([a=A b=A] A) where A is an atom other than ?
tests/golden/types-cell-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-nested-shallow-preserve/source.jibb+15−15
@@ -1,25 +1,25 @@
1−+$ length
1++$ extent
22 [%fill n=@ud]
33 %shrink
4−+$ attr
5− [%width length]
4++$ attribute
5+ [%width extent]
66 [%gap @tas]
77++ number-id |= x=@ud x
8−++ plain ^- attr width+[%fill 1]
9−++ direct ^- attr [%width [%fill 1]]
10−++ list ^- (list attr) ~[width+[%fill 1]]
11−++ accept |= value=attr value
8+++ plain ^- attribute width+[%fill 1]
9+++ direct ^- attribute [%width [%fill 1]]
10+++ list ^- (list attribute) ~[width+[%fill 1]]
11+++ accept |= value=attribute value
1212++ call (accept width+[%fill 1])
13−++ simple-call ^- attr width+[%fill (number-id 1)]
14−++ grouped-call ^- attr width+[%fill ((number-id 1))]
15−++ cast-call ^- attr width+[%fill (^- @ud (number-id 1))]
16−++ nested-call ^- attr width+[%fill (number-id (number-id 1))]
17−++ bad-tag ^- attr width+[%missing 1]
18−++ bad-number ^- attr width+[%fill "bad"]
13+++ simple-call ^- attribute width+[%fill (number-id 1)]
14+++ grouped-call ^- attribute width+[%fill ((number-id 1))]
15+++ cast-call ^- attribute width+[%fill (^- @ud (number-id 1))]
16+++ nested-call ^- attribute width+[%fill (number-id (number-id 1))]
17+++ bad-tag ^- attribute width+[%missing 1]
18+++ bad-number ^- attribute width+[%fill "bad"]
1919++ pending
2020 ~& %unrelated
21− ^- attr width+[%fill (number-id 1)]
22−++ singleton ^- attr width+%shrink
21+ ^- attribute width+[%fill (number-id 1)]
22+++ singleton ^- attribute width+%shrink
2323+$ event
2424 [%got value=@t]
2525 %idle
tests/golden/types-nested-shallow-preserve/tokens.txt+107−107
@@ -1,5 +1,5 @@
111:1 glyph +$
2−1:4 name length
2+1:4 name extent
332:3 INDENT
442:3 glyph [
552:4 tight lit %fill
@@ -12,11 +12,11 @@
12124:1 DEDENT
13134:1 NEWLINE
14144:1 glyph +$
15−4:4 name attr
15+4:4 name attribute
16165:3 INDENT
17175:3 glyph [
18185:4 tight lit %width
19−5:11 name length
19+5:11 name extent
20205:17 tight glyph ]
21216:3 NEWLINE
22226:3 glyph [
@@ -36,49 +36,49 @@
36368:1 glyph ++
37378:4 name plain
38388:10 glyph ^-
39−8:13 name attr
40−8:18 name width
41−8:23 tight glyph +
42−8:24 tight glyph [
43−8:25 tight lit %fill
44−8:31 lit 1
45−8:32 tight glyph ]
39+8:13 name attribute
40+8:23 name width
41+8:28 tight glyph +
42+8:29 tight glyph [
43+8:30 tight lit %fill
44+8:36 lit 1
45+8:37 tight glyph ]
46469:1 NEWLINE
47479:1 glyph ++
48489:4 name direct
49499:11 glyph ^-
50−9:14 name attr
51−9:19 glyph [
52−9:20 tight lit %width
53−9:27 glyph [
54−9:28 tight lit %fill
55−9:34 lit 1
56−9:35 tight glyph ]
57−9:36 tight glyph ]
50+9:14 name attribute
51+9:24 glyph [
52+9:25 tight lit %width
53+9:32 glyph [
54+9:33 tight lit %fill
55+9:39 lit 1
56+9:40 tight glyph ]
57+9:41 tight glyph ]
585810:1 NEWLINE
595910:1 glyph ++
606010:4 name list
616110:9 glyph ^-
626210:12 glyph (
636310:13 tight name list
64−10:18 name attr
65−10:22 tight glyph )
66−10:24 glyph ~[
67−10:26 tight name width
68−10:31 tight glyph +
69−10:32 tight glyph [
70−10:33 tight lit %fill
71−10:39 lit 1
72−10:40 tight glyph ]
73−10:41 tight glyph ]
64+10:18 name attribute
65+10:27 tight glyph )
66+10:29 glyph ~[
67+10:31 tight name width
68+10:36 tight glyph +
69+10:37 tight glyph [
70+10:38 tight lit %fill
71+10:44 lit 1
72+10:45 tight glyph ]
73+10:46 tight glyph ]
747411:1 NEWLINE
757511:1 glyph ++
767611:4 name accept
777711:11 glyph |=
787811:14 name value
797911:19 tight glyph =
80−11:20 tight name attr
81−11:25 name value
80+11:20 tight name attribute
81+11:30 name value
828212:1 NEWLINE
838312:1 glyph ++
848412:4 name call
@@ -95,89 +95,89 @@
959513:1 glyph ++
969613:4 name simple-call
979713:16 glyph ^-
98−13:19 name attr
99−13:24 name width
100−13:29 tight glyph +
101−13:30 tight glyph [
102−13:31 tight lit %fill
103−13:37 glyph (
104−13:38 tight name number-id
105−13:48 lit 1
106−13:49 tight glyph )
107−13:50 tight glyph ]
98+13:19 name attribute
99+13:29 name width
100+13:34 tight glyph +
101+13:35 tight glyph [
102+13:36 tight lit %fill
103+13:42 glyph (
104+13:43 tight name number-id
105+13:53 lit 1
106+13:54 tight glyph )
107+13:55 tight glyph ]
10810814:1 NEWLINE
10910914:1 glyph ++
11011014:4 name grouped-call
11111114:17 glyph ^-
112−14:20 name attr
113−14:25 name width
114−14:30 tight glyph +
115−14:31 tight glyph [
116−14:32 tight lit %fill
117−14:38 glyph (
118−14:39 tight glyph (
119−14:40 tight name number-id
120−14:50 lit 1
121−14:51 tight glyph )
122−14:52 tight glyph )
123−14:53 tight glyph ]
112+14:20 name attribute
113+14:30 name width
114+14:35 tight glyph +
115+14:36 tight glyph [
116+14:37 tight lit %fill
117+14:43 glyph (
118+14:44 tight glyph (
119+14:45 tight name number-id
120+14:55 lit 1
121+14:56 tight glyph )
122+14:57 tight glyph )
123+14:58 tight glyph ]
12412415:1 NEWLINE
12512515:1 glyph ++
12612615:4 name cast-call
12712715:14 glyph ^-
128−15:17 name attr
129−15:22 name width
130−15:27 tight glyph +
131−15:28 tight glyph [
132−15:29 tight lit %fill
133−15:35 glyph (
134−15:36 tight glyph ^-
135−15:39 aura @ud
136−15:43 glyph (
137−15:44 tight name number-id
138−15:54 lit 1
139−15:55 tight glyph )
140−15:56 tight glyph )
141−15:57 tight glyph ]
128+15:17 name attribute
129+15:27 name width
130+15:32 tight glyph +
131+15:33 tight glyph [
132+15:34 tight lit %fill
133+15:40 glyph (
134+15:41 tight glyph ^-
135+15:44 aura @ud
136+15:48 glyph (
137+15:49 tight name number-id
138+15:59 lit 1
139+15:60 tight glyph )
140+15:61 tight glyph )
141+15:62 tight glyph ]
14214216:1 NEWLINE
14314316:1 glyph ++
14414416:4 name nested-call
14514516:16 glyph ^-
146−16:19 name attr
147−16:24 name width
148−16:29 tight glyph +
149−16:30 tight glyph [
150−16:31 tight lit %fill
151−16:37 glyph (
152−16:38 tight name number-id
153−16:48 glyph (
154−16:49 tight name number-id
155−16:59 lit 1
156−16:60 tight glyph )
157−16:61 tight glyph )
158−16:62 tight glyph ]
146+16:19 name attribute
147+16:29 name width
148+16:34 tight glyph +
149+16:35 tight glyph [
150+16:36 tight lit %fill
151+16:42 glyph (
152+16:43 tight name number-id
153+16:53 glyph (
154+16:54 tight name number-id
155+16:64 lit 1
156+16:65 tight glyph )
157+16:66 tight glyph )
158+16:67 tight glyph ]
15915917:1 NEWLINE
16016017:1 glyph ++
16116117:4 name bad-tag
16216217:12 glyph ^-
163−17:15 name attr
164−17:20 name width
165−17:25 tight glyph +
166−17:26 tight glyph [
167−17:27 tight lit %missing
168−17:36 lit 1
169−17:37 tight glyph ]
163+17:15 name attribute
164+17:25 name width
165+17:30 tight glyph +
166+17:31 tight glyph [
167+17:32 tight lit %missing
168+17:41 lit 1
169+17:42 tight glyph ]
17017018:1 NEWLINE
17117118:1 glyph ++
17217218:4 name bad-number
17317318:15 glyph ^-
174−18:18 name attr
175−18:23 name width
176−18:28 tight glyph +
177−18:29 tight glyph [
178−18:30 tight lit %fill
179−18:36 str "bad"
180−18:41 tight glyph ]
174+18:18 name attribute
175+18:28 name width
176+18:33 tight glyph +
177+18:34 tight glyph [
178+18:35 tight lit %fill
179+18:41 str "bad"
180+18:46 tight glyph ]
18118119:1 NEWLINE
18218219:1 glyph ++
18318319:4 name pending
@@ -186,26 +186,26 @@
18618620:6 lit %unrelated
18718721:5 INDENT
18818821:5 glyph ^-
189−21:8 name attr
190−21:13 name width
191−21:18 tight glyph +
192−21:19 tight glyph [
193−21:20 tight lit %fill
194−21:26 glyph (
195−21:27 tight name number-id
196−21:37 lit 1
197−21:38 tight glyph )
198−21:39 tight glyph ]
189+21:8 name attribute
190+21:18 name width
191+21:23 tight glyph +
192+21:24 tight glyph [
193+21:25 tight lit %fill
194+21:31 glyph (
195+21:32 tight name number-id
196+21:42 lit 1
197+21:43 tight glyph )
198+21:44 tight glyph ]
19919922:1 DEDENT
20020022:1 DEDENT
20120122:1 NEWLINE
20220222:1 glyph ++
20320322:4 name singleton
20420422:14 glyph ^-
205−22:17 name attr
206−22:22 name width
207−22:27 tight glyph +
208−22:28 tight lit %shrink
205+22:17 name attribute
206+22:27 name width
207+22:32 tight glyph +
208+22:33 tight lit %shrink
20920923:1 NEWLINE
21021023:1 glyph +$
21121123:4 name event
tests/golden/types-nested-shallow-preserve/tree.txt+61−61
@@ -1,13 +1,13 @@
11(module
2− (mold 1:1 length
2+ (mold 1:1 extent
33 (union 2:3
44 (cell 2:3
55 (const 2:4 %fill)
66 (face 2:10 n (aura 2:12 @ud)))
77 (const 3:3 %shrink)))
8− (mold 4:1 attr
8+ (mold 4:1 attribute
99 (union 5:3
10− (cell 5:3 (const 5:4 %width) (ref 5:11 length))
10+ (cell 5:3 (const 5:4 %width) (ref 5:11 extent))
1111 (cell 6:3 (const 6:4 %gap) (aura 6:9 @tas))))
1212 (value 7:1 number-id
1313 (gate 7:14
@@ -15,25 +15,25 @@
1515 (wing 7:23 x)))
1616 (value 8:1 plain
1717 (cast 8:10
18− (ref 8:13 attr)
19− (pair 8:18 width
20− (tuple 8:24 (lit 8:25 %fill) (lit 8:31 1)))))
18+ (ref 8:13 attribute)
19+ (pair 8:23 width
20+ (tuple 8:29 (lit 8:30 %fill) (lit 8:36 1)))))
2121 (value 9:1 direct
2222 (cast 9:11
23− (ref 9:14 attr)
24− (tuple 9:19
25− (lit 9:20 %width)
26− (tuple 9:27 (lit 9:28 %fill) (lit 9:34 1)))))
23+ (ref 9:14 attribute)
24+ (tuple 9:24
25+ (lit 9:25 %width)
26+ (tuple 9:32 (lit 9:33 %fill) (lit 9:39 1)))))
2727 (value 10:1 list
2828 (cast 10:9
29− (apply 10:12 list (ref 10:18 attr))
30− (list 10:24
31− (pair 10:26 width
32− (tuple 10:32 (lit 10:33 %fill) (lit 10:39 1))))))
29+ (apply 10:12 list (ref 10:18 attribute))
30+ (list 10:29
31+ (pair 10:31 width
32+ (tuple 10:37 (lit 10:38 %fill) (lit 10:44 1))))))
3333 (value 11:1 accept
3434 (gate 11:11
35− (face 11:14 value (ref 11:20 attr))
36− (wing 11:25 value)))
35+ (face 11:14 value (ref 11:20 attribute))
36+ (wing 11:30 value)))
3737 (value 12:1 call
3838 (group 12:9
3939 (call 12:10
@@ -42,69 +42,69 @@
4242 (tuple 12:23 (lit 12:24 %fill) (lit 12:30 1))))))
4343 (value 13:1 simple-call
4444 (cast 13:16
45− (ref 13:19 attr)
46− (pair 13:24 width
47− (tuple 13:30
48− (lit 13:31 %fill)
49− (group 13:37
50− (call 13:38 (wing 13:38 number-id) (lit 13:48 1)))))))
45+ (ref 13:19 attribute)
46+ (pair 13:29 width
47+ (tuple 13:35
48+ (lit 13:36 %fill)
49+ (group 13:42
50+ (call 13:43 (wing 13:43 number-id) (lit 13:53 1)))))))
5151 (value 14:1 grouped-call
5252 (cast 14:17
53− (ref 14:20 attr)
54− (pair 14:25 width
55− (tuple 14:31
56− (lit 14:32 %fill)
57− (group 14:38
58− (group 14:39
59− (call 14:40 (wing 14:40 number-id) (lit 14:50 1))))))))
53+ (ref 14:20 attribute)
54+ (pair 14:30 width
55+ (tuple 14:36
56+ (lit 14:37 %fill)
57+ (group 14:43
58+ (group 14:44
59+ (call 14:45 (wing 14:45 number-id) (lit 14:55 1))))))))
6060 (value 15:1 cast-call
6161 (cast 15:14
62− (ref 15:17 attr)
63− (pair 15:22 width
64− (tuple 15:28
65− (lit 15:29 %fill)
66− (group 15:35
67− (cast 15:36
68− (aura 15:39 @ud)
69− (group 15:43
70− (call 15:44 (wing 15:44 number-id) (lit 15:54 1)))))))))
62+ (ref 15:17 attribute)
63+ (pair 15:27 width
64+ (tuple 15:33
65+ (lit 15:34 %fill)
66+ (group 15:40
67+ (cast 15:41
68+ (aura 15:44 @ud)
69+ (group 15:48
70+ (call 15:49 (wing 15:49 number-id) (lit 15:59 1)))))))))
7171 (value 16:1 nested-call
7272 (cast 16:16
73− (ref 16:19 attr)
74− (pair 16:24 width
75− (tuple 16:30
76− (lit 16:31 %fill)
77− (group 16:37
78− (call 16:38
79− (wing 16:38 number-id)
80− (group 16:48
81− (call 16:49 (wing 16:49 number-id) (lit 16:59 1)))))))))
73+ (ref 16:19 attribute)
74+ (pair 16:29 width
75+ (tuple 16:35
76+ (lit 16:36 %fill)
77+ (group 16:42
78+ (call 16:43
79+ (wing 16:43 number-id)
80+ (group 16:53
81+ (call 16:54 (wing 16:54 number-id) (lit 16:64 1)))))))))
8282 (value 17:1 bad-tag
8383 (cast 17:12
84− (ref 17:15 attr)
85− (pair 17:20 width
86− (tuple 17:26 (lit 17:27 %missing) (lit 17:36 1)))))
84+ (ref 17:15 attribute)
85+ (pair 17:25 width
86+ (tuple 17:31 (lit 17:32 %missing) (lit 17:41 1)))))
8787 (value 18:1 bad-number
8888 (cast 18:15
89− (ref 18:18 attr)
90− (pair 18:23 width
91− (tuple 18:29 (lit 18:30 %fill) (str 18:36 "bad")))))
89+ (ref 18:18 attribute)
90+ (pair 18:28 width
91+ (tuple 18:34 (lit 18:35 %fill) (str 18:41 "bad")))))
9292 (value 19:1 pending
9393 (body 20:3
9494 (trace 20:3
9595 (lit 20:6 %unrelated)
9696 (body 21:5
9797 (cast 21:5
98− (ref 21:8 attr)
99− (pair 21:13 width
100− (tuple 21:19
101− (lit 21:20 %fill)
102− (group 21:26
103− (call 21:27 (wing 21:27 number-id) (lit 21:37 1))))))))))
98+ (ref 21:8 attribute)
99+ (pair 21:18 width
100+ (tuple 21:24
101+ (lit 21:25 %fill)
102+ (group 21:31
103+ (call 21:32 (wing 21:32 number-id) (lit 21:42 1))))))))))
104104 (value 22:1 singleton
105105 (cast 22:14
106− (ref 22:17 attr)
107− (pair 22:22 width (lit 22:28 %shrink))))
106+ (ref 22:17 attribute)
107+ (pair 22:27 width (lit 22:33 %shrink))))
108108 (mold 23:1 event
109109 (union 24:3
110110 (cell 24:3
tests/golden/types-nested-shallow-preserve/types.txt+20−20
@@ -1,32 +1,32 @@
11partial inference; module not checked
2−+$ length: cases proven disjoint; mold not checked
3−+$ attr: cases proven disjoint; mold not checked
2++$ extent: cases proven disjoint; mold not checked
3++$ attribute: cases proven disjoint; mold not checked
44++ number-id: $-(@ud @ud)
5−++ plain: attr
6−++ direct: attr
7−++ list: (list attr)
8−++ accept: $-(attr attr)
9−++ call: attr
10−++ simple-call: attr
11−++ grouped-call: attr
12−++ cast-call: attr
13−++ nested-call: attr
5+++ plain: attribute
6+++ direct: attribute
7+++ list: (list attribute)
8+++ accept: $-(attribute attribute)
9+++ call: attribute
10+++ simple-call: attribute
11+++ grouped-call: attribute
12+++ cast-call: attribute
13+++ nested-call: attribute
1414++ bad-tag: cast mold and expression type do not unify
1515/tests/golden/types-nested-shallow-preserve/source.jibb:17:15: cast mold
16−++ bad-tag ^- attr width+[%missing 1]
16+++ bad-tag ^- attribute width+[%missing 1]
1717 ^
18−/tests/golden/types-nested-shallow-preserve/source.jibb:17:20: expression
19−++ bad-tag ^- attr width+[%missing 1]
20− ^
18+/tests/golden/types-nested-shallow-preserve/source.jibb:17:25: expression
19+++ bad-tag ^- attribute width+[%missing 1]
20+ ^
2121++ bad-number: cast mold and expression type do not unify
2222/tests/golden/types-nested-shallow-preserve/source.jibb:18:18: cast mold
23−++ bad-number ^- attr width+[%fill "bad"]
23+++ bad-number ^- attribute width+[%fill "bad"]
2424 ^
25−/tests/golden/types-nested-shallow-preserve/source.jibb:18:23: expression
26−++ bad-number ^- attr width+[%fill "bad"]
27− ^
25+/tests/golden/types-nested-shallow-preserve/source.jibb:18:28: expression
26+++ bad-number ^- attribute width+[%fill "bad"]
27+ ^
2828++ pending: tag needs context in partial inference
29−++ singleton: attr
29+++ singleton: attribute
3030+$ event: cases proven disjoint; mold not checked
3131+$ envelope: cases proven disjoint; mold not checked
3232++ constructor: envelope
tests/golden/types-pair-context/source.jibb+14−14
@@ -3,30 +3,30 @@
33 %s1
44 %s2
55 %s3
6−+$ length
6++$ extent
77 [%fill n=@ud]
88 %shrink
9−+$ attr
9++$ attribute
1010 [%gap spacing]
1111 [%pad spacing]
12− [%width length]
13−+$ other-attr
12+ [%width extent]
13++$ other-attribute
1414 [%gap spacing]
1515 [%pad spacing]
16− [%width length]
17−++ one ^- attr gap+%s2
18−++ equiv ^- attr [%gap %s2]
19−++ attrs ^- (list attr) ~[gap+%s2 pad+%s3 width+[%fill 1]]
16+ [%width extent]
17+++ one ^- attribute gap+%s2
18+++ equiv ^- attribute [%gap %s2]
19+++ attributes ^- (list attribute) ~[gap+%s2 pad+%s3 width+[%fill 1]]
2020++ gap-structural ^- [@tas @tas] gap+%s2
21−++ nested ^- attr width+[%fill 1]
22−++ mismatch ^- attr gap+%shrink
23−++ missing ^- attr width+[%oops 1]
21+++ nested ^- attribute width+[%fill 1]
22+++ mismatch ^- attribute gap+%shrink
23+++ missing ^- attribute width+[%oops 1]
2424++ pending gap+%s2
25−++ cross-origin ^- attr ^- other-attr gap+%s2
25+++ cross-origin ^- attribute ^- other-attribute gap+%s2
2626++ noun-pair ^- [* *] gap+%s2
2727++ atom-pair ^- [@ta @tas] gap+%s2
2828++ wrong-head ^- [@ud @tas] gap+%s2
29−++ wrong-number ^- attr width+[%fill "hi"]
29+++ wrong-number ^- attribute width+[%fill "hi"]
3030++ unrelated
3131 ~& %dangling
32− ^- attr gap+%s2
32+ ^- attribute gap+%s2
tests/golden/types-pair-context/tokens.txt+71−71
@@ -11,7 +11,7 @@
11116:1 DEDENT
12126:1 NEWLINE
13136:1 glyph +$
14−6:4 name length
14+6:4 name extent
15157:3 INDENT
16167:3 glyph [
17177:4 tight lit %fill
@@ -24,7 +24,7 @@
24249:1 DEDENT
25259:1 NEWLINE
26269:1 glyph +$
27−9:4 name attr
27+9:4 name attribute
282810:3 INDENT
292910:3 glyph [
303010:4 tight lit %gap
@@ -38,12 +38,12 @@
383812:3 NEWLINE
393912:3 glyph [
404012:4 tight lit %width
41−12:11 name length
41+12:11 name extent
424212:17 tight glyph ]
434313:1 DEDENT
444413:1 NEWLINE
454513:1 glyph +$
46−13:4 name other-attr
46+13:4 name other-attribute
474714:3 INDENT
484814:3 glyph [
494914:4 tight lit %gap
@@ -57,48 +57,48 @@
575716:3 NEWLINE
585816:3 glyph [
595916:4 tight lit %width
60−16:11 name length
60+16:11 name extent
616116:17 tight glyph ]
626217:1 DEDENT
636317:1 NEWLINE
646417:1 glyph ++
656517:4 name one
666617:8 glyph ^-
67−17:11 name attr
68−17:16 name gap
69−17:19 tight glyph +
70−17:20 tight lit %s2
67+17:11 name attribute
68+17:21 name gap
69+17:24 tight glyph +
70+17:25 tight lit %s2
717118:1 NEWLINE
727218:1 glyph ++
737318:4 name equiv
747418:10 glyph ^-
75−18:13 name attr
76−18:18 glyph [
77−18:19 tight lit %gap
78−18:24 lit %s2
79−18:27 tight glyph ]
75+18:13 name attribute
76+18:23 glyph [
77+18:24 tight lit %gap
78+18:29 lit %s2
79+18:32 tight glyph ]
808019:1 NEWLINE
818119:1 glyph ++
82−19:4 name attrs
83−19:10 glyph ^-
84−19:13 glyph (
85−19:14 tight name list
86−19:19 name attr
87−19:23 tight glyph )
88−19:25 glyph ~[
89−19:27 tight name gap
90−19:30 tight glyph +
91−19:31 tight lit %s2
92−19:35 name pad
93−19:38 tight glyph +
94−19:39 tight lit %s3
95−19:43 name width
82+19:4 name attributes
83+19:15 glyph ^-
84+19:18 glyph (
85+19:19 tight name list
86+19:24 name attribute
87+19:33 tight glyph )
88+19:35 glyph ~[
89+19:37 tight name gap
90+19:40 tight glyph +
91+19:41 tight lit %s2
92+19:45 name pad
969319:48 tight glyph +
97−19:49 tight glyph [
98−19:50 tight lit %fill
99−19:56 lit 1
100−19:57 tight glyph ]
101−19:58 tight glyph ]
94+19:49 tight lit %s3
95+19:53 name width
96+19:58 tight glyph +
97+19:59 tight glyph [
98+19:60 tight lit %fill
99+19:66 lit 1
100+19:67 tight glyph ]
101+19:68 tight glyph ]
10210220:1 NEWLINE
10310320:1 glyph ++
10410420:4 name gap-structural
@@ -114,32 +114,32 @@
11411421:1 glyph ++
11511521:4 name nested
11611621:11 glyph ^-
117−21:14 name attr
118−21:19 name width
119−21:24 tight glyph +
120−21:25 tight glyph [
121−21:26 tight lit %fill
122−21:32 lit 1
123−21:33 tight glyph ]
117+21:14 name attribute
118+21:24 name width
119+21:29 tight glyph +
120+21:30 tight glyph [
121+21:31 tight lit %fill
122+21:37 lit 1
123+21:38 tight glyph ]
12412422:1 NEWLINE
12512522:1 glyph ++
12612622:4 name mismatch
12712722:13 glyph ^-
128−22:16 name attr
129−22:21 name gap
130−22:24 tight glyph +
131−22:25 tight lit %shrink
128+22:16 name attribute
129+22:26 name gap
130+22:29 tight glyph +
131+22:30 tight lit %shrink
13213223:1 NEWLINE
13313323:1 glyph ++
13413423:4 name missing
13513523:12 glyph ^-
136−23:15 name attr
137−23:20 name width
138−23:25 tight glyph +
139−23:26 tight glyph [
140−23:27 tight lit %oops
141−23:33 lit 1
142−23:34 tight glyph ]
136+23:15 name attribute
137+23:25 name width
138+23:30 tight glyph +
139+23:31 tight glyph [
140+23:32 tight lit %oops
141+23:38 lit 1
142+23:39 tight glyph ]
14314324:1 NEWLINE
14414424:1 glyph ++
14514524:4 name pending
@@ -150,12 +150,12 @@
15015025:1 glyph ++
15115125:4 name cross-origin
15215225:17 glyph ^-
153−25:20 name attr
154−25:25 glyph ^-
155−25:28 name other-attr
156−25:39 name gap
157−25:42 tight glyph +
158−25:43 tight lit %s2
153+25:20 name attribute
154+25:30 glyph ^-
155+25:33 name other-attribute
156+25:49 name gap
157+25:52 tight glyph +
158+25:53 tight lit %s2
15915926:1 NEWLINE
16016026:1 glyph ++
16116126:4 name noun-pair
@@ -193,13 +193,13 @@
19319329:1 glyph ++
19419429:4 name wrong-number
19519529:17 glyph ^-
196−29:20 name attr
197−29:25 name width
198−29:30 tight glyph +
199−29:31 tight glyph [
200−29:32 tight lit %fill
201−29:38 str "hi"
202−29:42 tight glyph ]
196+29:20 name attribute
197+29:30 name width
198+29:35 tight glyph +
199+29:36 tight glyph [
200+29:37 tight lit %fill
201+29:43 str "hi"
202+29:47 tight glyph ]
20320330:1 NEWLINE
20420430:1 glyph ++
20520530:4 name unrelated
@@ -208,10 +208,10 @@
20820831:6 lit %dangling
20920932:5 INDENT
21021032:5 glyph ^-
211−32:8 name attr
212−32:13 name gap
213−32:16 tight glyph +
214−32:17 tight lit %s2
215−32:20 DEDENT
216−32:20 DEDENT
217−32:20 NEWLINE
211+32:8 name attribute
212+32:18 name gap
213+32:21 tight glyph +
214+32:22 tight lit %s2
215+32:25 DEDENT
216+32:25 DEDENT
217+32:25 NEWLINE
tests/golden/types-pair-context/tree.txt+34−34
@@ -1,64 +1,64 @@
11(module
22 (mold 1:1 spacing
33 (union 2:3 (const 2:3 %s0) (const 3:3 %s1) (const 4:3 %s2) (const 5:3 %s3)))
4− (mold 6:1 length
4+ (mold 6:1 extent
55 (union 7:3
66 (cell 7:3
77 (const 7:4 %fill)
88 (face 7:10 n (aura 7:12 @ud)))
99 (const 8:3 %shrink)))
10− (mold 9:1 attr
10+ (mold 9:1 attribute
1111 (union 10:3
1212 (cell 10:3 (const 10:4 %gap) (ref 10:9 spacing))
1313 (cell 11:3 (const 11:4 %pad) (ref 11:9 spacing))
14− (cell 12:3 (const 12:4 %width) (ref 12:11 length))))
15− (mold 13:1 other-attr
14+ (cell 12:3 (const 12:4 %width) (ref 12:11 extent))))
15+ (mold 13:1 other-attribute
1616 (union 14:3
1717 (cell 14:3 (const 14:4 %gap) (ref 14:9 spacing))
1818 (cell 15:3 (const 15:4 %pad) (ref 15:9 spacing))
19− (cell 16:3 (const 16:4 %width) (ref 16:11 length))))
19+ (cell 16:3 (const 16:4 %width) (ref 16:11 extent))))
2020 (value 17:1 one
2121 (cast 17:8
22− (ref 17:11 attr)
23− (pair 17:16 gap (lit 17:20 %s2))))
22+ (ref 17:11 attribute)
23+ (pair 17:21 gap (lit 17:25 %s2))))
2424 (value 18:1 equiv
2525 (cast 18:10
26− (ref 18:13 attr)
27− (tuple 18:18 (lit 18:19 %gap) (lit 18:24 %s2))))
28− (value 19:1 attrs
29− (cast 19:10
30− (apply 19:13 list (ref 19:19 attr))
31− (list 19:25
32− (pair 19:27 gap (lit 19:31 %s2))
33− (pair 19:35 pad (lit 19:39 %s3))
34− (pair 19:43 width
35− (tuple 19:49 (lit 19:50 %fill) (lit 19:56 1))))))
26+ (ref 18:13 attribute)
27+ (tuple 18:23 (lit 18:24 %gap) (lit 18:29 %s2))))
28+ (value 19:1 attributes
29+ (cast 19:15
30+ (apply 19:18 list (ref 19:24 attribute))
31+ (list 19:35
32+ (pair 19:37 gap (lit 19:41 %s2))
33+ (pair 19:45 pad (lit 19:49 %s3))
34+ (pair 19:53 width
35+ (tuple 19:59 (lit 19:60 %fill) (lit 19:66 1))))))
3636 (value 20:1 gap-structural
3737 (cast 20:19
3838 (cell 20:22 (aura 20:23 @tas) (aura 20:28 @tas))
3939 (pair 20:34 gap (lit 20:38 %s2))))
4040 (value 21:1 nested
4141 (cast 21:11
42− (ref 21:14 attr)
43− (pair 21:19 width
44− (tuple 21:25 (lit 21:26 %fill) (lit 21:32 1)))))
42+ (ref 21:14 attribute)
43+ (pair 21:24 width
44+ (tuple 21:30 (lit 21:31 %fill) (lit 21:37 1)))))
4545 (value 22:1 mismatch
4646 (cast 22:13
47− (ref 22:16 attr)
48− (pair 22:21 gap (lit 22:25 %shrink))))
47+ (ref 22:16 attribute)
48+ (pair 22:26 gap (lit 22:30 %shrink))))
4949 (value 23:1 missing
5050 (cast 23:12
51− (ref 23:15 attr)
52− (pair 23:20 width
53− (tuple 23:26 (lit 23:27 %oops) (lit 23:33 1)))))
51+ (ref 23:15 attribute)
52+ (pair 23:25 width
53+ (tuple 23:31 (lit 23:32 %oops) (lit 23:38 1)))))
5454 (value 24:1 pending
5555 (pair 24:12 gap (lit 24:16 %s2)))
5656 (value 25:1 cross-origin
5757 (cast 25:17
58− (ref 25:20 attr)
59− (cast 25:25
60− (ref 25:28 other-attr)
61− (pair 25:39 gap (lit 25:43 %s2)))))
58+ (ref 25:20 attribute)
59+ (cast 25:30
60+ (ref 25:33 other-attribute)
61+ (pair 25:49 gap (lit 25:53 %s2)))))
6262 (value 26:1 noun-pair
6363 (cast 26:14
6464 (cell 26:17 (noun 26:18) (noun 26:20))
@@ -73,14 +73,14 @@
7373 (pair 28:29 gap (lit 28:33 %s2))))
7474 (value 29:1 wrong-number
7575 (cast 29:17
76− (ref 29:20 attr)
77− (pair 29:25 width
78− (tuple 29:31 (lit 29:32 %fill) (str 29:38 "hi")))))
76+ (ref 29:20 attribute)
77+ (pair 29:30 width
78+ (tuple 29:36 (lit 29:37 %fill) (str 29:43 "hi")))))
7979 (value 30:1 unrelated
8080 (body 31:3
8181 (trace 31:3
8282 (lit 31:6 %dangling)
8383 (body 32:5
8484 (cast 32:5
85− (ref 32:8 attr)
86− (pair 32:13 gap (lit 32:17 %s2))))))))
85+ (ref 32:8 attribute)
86+ (pair 32:18 gap (lit 32:22 %s2))))))))
tests/golden/types-pair-context/types.txt+19−19
@@ -1,27 +1,27 @@
11partial inference; module not checked
22+$ spacing: cases proven disjoint; mold not checked
3−+$ length: cases proven disjoint; mold not checked
4−+$ attr: cases proven disjoint; mold not checked
5−+$ other-attr: cases proven disjoint; mold not checked
6−++ one: attr
7−++ equiv: attr
8−++ attrs: (list attr)
3++$ extent: cases proven disjoint; mold not checked
4++$ attribute: cases proven disjoint; mold not checked
5++$ other-attribute: cases proven disjoint; mold not checked
6+++ one: attribute
7+++ equiv: attribute
8+++ attributes: (list attribute)
99++ gap-structural: [@tas @tas]
10−++ nested: attr
10+++ nested: attribute
1111++ mismatch: cast mold and expression type do not unify
1212/tests/golden/types-pair-context/source.jibb:22:16: cast mold
13−++ mismatch ^- attr gap+%shrink
13+++ mismatch ^- attribute gap+%shrink
1414 ^
15−/tests/golden/types-pair-context/source.jibb:22:21: expression
16−++ mismatch ^- attr gap+%shrink
17− ^
15+/tests/golden/types-pair-context/source.jibb:22:26: expression
16+++ mismatch ^- attribute gap+%shrink
17+ ^
1818++ missing: cast mold and expression type do not unify
1919/tests/golden/types-pair-context/source.jibb:23:15: cast mold
20−++ missing ^- attr width+[%oops 1]
20+++ missing ^- attribute width+[%oops 1]
2121 ^
22−/tests/golden/types-pair-context/source.jibb:23:20: expression
23−++ missing ^- attr width+[%oops 1]
24− ^
22+/tests/golden/types-pair-context/source.jibb:23:25: expression
23+++ missing ^- attribute width+[%oops 1]
24+ ^
2525++ pending: tag needs context in partial inference
2626++ cross-origin: cast constraint is not supported by partial inference
2727++ noun-pair: [* *]
@@ -35,9 +35,9 @@ partial inference; module not checked
3535 ^
3636++ wrong-number: cast mold and expression type do not unify
3737/tests/golden/types-pair-context/source.jibb:29:20: cast mold
38−++ wrong-number ^- attr width+[%fill "hi"]
38+++ wrong-number ^- attribute width+[%fill "hi"]
3939 ^
40−/tests/golden/types-pair-context/source.jibb:29:25: expression
41−++ wrong-number ^- attr width+[%fill "hi"]
42− ^
40+/tests/golden/types-pair-context/source.jibb:29:30: expression
41+++ wrong-number ^- attribute width+[%fill "hi"]
42+ ^
4343++ unrelated: tag needs context in partial inference
tests/golden/types-partial-aura-family/source.jibb+1−1
@@ -1,7 +1,7 @@
11++ decimal |= x=@ud ^- @u x
22++ hex ^- @u 0x1f
33++ base32 |= x=@uv ^- @u x
4−++ text |= x=@tD ^- @t x
4+++ text-value |= x=@tD ^- @t x
55++ narrow |= x=@t ^- @tD x
66++ siblings |= x=@ux ^- @ud x
77++ dup |= p=[A A] p
tests/golden/types-partial-aura-family/tokens.txt+8−8
@@ -25,14 +25,14 @@
25253:26 name x
26264:1 NEWLINE
27274:1 glyph ++
28−4:4 name text
29−4:9 glyph |=
30−4:12 name x
31−4:13 tight glyph =
32−4:14 tight aura @tD
33−4:18 glyph ^-
34−4:21 aura @t
35−4:24 name x
28+4:4 name text-value
29+4:15 glyph |=
30+4:18 name x
31+4:19 tight glyph =
32+4:20 tight aura @tD
33+4:24 glyph ^-
34+4:27 aura @t
35+4:30 name x
36365:1 NEWLINE
37375:1 glyph ++
38385:4 name narrow
tests/golden/types-partial-aura-family/tree.txt+4−4
@@ -9,10 +9,10 @@
99 (gate 3:11
1010 (face 3:14 x (aura 3:16 @uv))
1111 (cast 3:20 (aura 3:23 @u) (wing 3:26 x))))
12− (value 4:1 text
13− (gate 4:9
14− (face 4:12 x (aura 4:14 @tD))
15− (cast 4:18 (aura 4:21 @t) (wing 4:24 x))))
12+ (value 4:1 text-value
13+ (gate 4:15
14+ (face 4:18 x (aura 4:20 @tD))
15+ (cast 4:24 (aura 4:27 @t) (wing 4:30 x))))
1616 (value 5:1 narrow
1717 (gate 5:11
1818 (face 5:14 x (aura 5:16 @t))
tests/golden/types-partial-aura-family/types.txt+1−1
@@ -2,7 +2,7 @@ partial inference; module not checked
22++ decimal: $-(@ud @u)
33++ hex: @u
44++ base32: $-(@uv @u)
5−++ text: $-(@tD @t)
5+++ text-value: $-(@tD @t)
66++ narrow: cast mold and expression type do not unify
77/tests/golden/types-partial-aura-family/source.jibb:5:22: cast mold has type @tD
88++ narrow |= x=@t ^- @tD x
tests/golden/types-partial-locals/source.jibb+2−2
@@ -32,9 +32,9 @@
3232++ local-mold |= x
3333 +$ item @t
3434 x
35−++ wrap |= y |=(z y)
35+++ wrap-value |= y |=(z y)
3636++ through-global |= x
37− ++ local (wrap x)
37+ ++ local (wrap-value x)
3838 ~& ^- @t (local ~zod)
3939 ^- @p (local "hi")
4040++ nested-shadow |= x
tests/golden/types-partial-locals/tokens.txt+10−10
@@ -180,13 +180,13 @@
18018035:1 DEDENT
18118135:1 NEWLINE
18218235:1 glyph ++
183−35:4 name wrap
184−35:9 glyph |=
185−35:12 name y
186−35:14 glyph |=(
187−35:17 tight name z
188−35:19 name y
189−35:20 tight glyph )
183+35:4 name wrap-value
184+35:15 glyph |=
185+35:18 name y
186+35:20 glyph |=(
187+35:23 tight name z
188+35:25 name y
189+35:26 tight glyph )
19019036:1 NEWLINE
19119136:1 glyph ++
19219236:4 name through-global
@@ -196,9 +196,9 @@
19619637:3 glyph ++
19719737:6 name local
19819837:12 glyph (
199−37:13 tight name wrap
200−37:18 name x
201−37:19 tight glyph )
199+37:13 tight name wrap-value
200+37:24 name x
201+37:25 tight glyph )
20220238:3 NEWLINE
20320338:3 glyph ~&
20420438:6 glyph ^-
tests/golden/types-partial-locals/tree.txt+5−5
@@ -88,17 +88,17 @@
8888 (body 33:3
8989 (mold 33:3 item (aura 33:11 @t))
9090 (wing 34:3 x))))
91− (value 35:1 wrap
92− (gate 35:9
93− (bind 35:12 y)
94− (gate-wide 35:14 (bind 35:17 z) (wing 35:19 y))))
91+ (value 35:1 wrap-value
92+ (gate 35:15
93+ (bind 35:18 y)
94+ (gate-wide 35:20 (bind 35:23 z) (wing 35:25 y))))
9595 (value 36:1 through-global
9696 (gate 36:19
9797 (bind 36:22 x)
9898 (body 37:3
9999 (value 37:3 local
100100 (group 37:12
101− (call 37:13 (wing 37:13 wrap) (wing 37:18 x))))
101+ (call 37:13 (wing 37:13 wrap-value) (wing 37:24 x))))
102102 (trace 38:3
103103 (cast 38:6
104104 (aura 38:9 @t)
tests/golden/types-partial-locals/types.txt+1−1
@@ -21,7 +21,7 @@ partial inference; module not checked
2121 ^
2222++ unused-bad: local definitions need unsupported inference
2323++ local-mold: $-(A A)
24−++ wrap: $-(A $-(B A))
24+++ wrap-value: $-(A $-(B A))
2525++ through-global: cast mold and expression type do not unify
2626/tests/golden/types-partial-locals/source.jibb:39:8: cast mold has type @p
2727 ^- @p (local "hi")
tests/golden/types-prelude-bond/source.jibb+1−1
@@ -1,6 +1,6 @@
11++ choose (bond |=(~ "default"))
22++ missing (choose ~)
33++ present (choose `"found")
4−++ wrap |= fallback=$-(~ A) (bond fallback)
4+++ wrap-value |= fallback=$-(~ A) (bond fallback)
55++ choose-ship (bond |=(~ ~zod))
66++ present-ship (choose-ship `~zod)
tests/golden/types-prelude-bond/tokens.txt+12−12
@@ -24,18 +24,18 @@
24243:28 tight glyph )
25254:1 NEWLINE
26264:1 glyph ++
27−4:4 name wrap
28−4:9 glyph |=
29−4:12 name fallback
30−4:20 tight glyph =
31−4:21 tight glyph $-(
32−4:24 tight lit ~
33−4:26 tvar A
34−4:27 tight glyph )
35−4:29 glyph (
36−4:30 tight name bond
37−4:35 name fallback
38−4:43 tight glyph )
27+4:4 name wrap-value
28+4:15 glyph |=
29+4:18 name fallback
30+4:26 tight glyph =
31+4:27 tight glyph $-(
32+4:30 tight lit ~
33+4:32 tvar A
34+4:33 tight glyph )
35+4:35 glyph (
36+4:36 tight name bond
37+4:41 name fallback
38+4:49 tight glyph )
39395:1 NEWLINE
40405:1 glyph ++
41415:4 name choose-ship
tests/golden/types-prelude-bond/tree.txt+6−6
@@ -12,12 +12,12 @@
1212 (call 3:13
1313 (wing 3:13 choose)
1414 (unit 3:20 (str 3:21 "found")))))
15− (value 4:1 wrap
16− (gate 4:9
17− (face 4:12 fallback
18− (fn 4:21 (const 4:24 ~) (tvar 4:26 A)))
19− (group 4:29
20− (call 4:30 (wing 4:30 bond) (wing 4:35 fallback)))))
15+ (value 4:1 wrap-value
16+ (gate 4:15
17+ (face 4:18 fallback
18+ (fn 4:27 (const 4:30 ~) (tvar 4:32 A)))
19+ (group 4:35
20+ (call 4:36 (wing 4:36 bond) (wing 4:41 fallback)))))
2121 (value 5:1 choose-ship
2222 (group 5:16
2323 (call 5:17
tests/golden/types-prelude-bond/types.txt+1−1
@@ -2,6 +2,6 @@ partial inference; module not checked
22++ choose: $-((unit @t) @t)
33++ missing: @t
44++ present: @t
5−++ wrap: $-($-(~ A) $-((unit A) A))
5+++ wrap-value: $-($-(~ A) $-((unit A) A))
66++ choose-ship: $-((unit @p) @p)
77++ present-ship: @p
tests/golden/types-prelude-cmd/source.jibb+4−4
@@ -8,9 +8,9 @@
88++ wait ^- (cmd @t) [%wait ~s30 "done"]
99++ who ^- (cmd @t) [%who |=(p=@p "done")]
1010++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
11−++ wrap |= x=A ^- (cmd A) [%wait ~s30 x]
12−++ wrap-text (wrap "hello")
13−++ wrap-ship (wrap ~zod)
11+++ wrap-value |= x=A ^- (cmd A) [%wait ~s30 x]
12+++ wrap-value-text (wrap-value "hello")
13+++ wrap-value-ship (wrap-value ~zod)
1414++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
1515++ commands ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 "done"]]
1616++ commands-bad ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 ~zod]]
@@ -18,4 +18,4 @@
1818 ^- (cmd @t) [%poke p |=(r=@p "done")]
1919++ wrong-case ^- (cmd @t) %oops
2020++ use-text |= x=(cmd @t) x
21−++ cross (use-text (wrap ~zod))
21+++ cross (use-text (wrap-value ~zod))
tests/golden/types-prelude-cmd/tokens.txt+30−30
@@ -138,35 +138,35 @@
13813810:46 tight glyph ]
13913911:1 NEWLINE
14014011:1 glyph ++
141−11:4 name wrap
142−11:9 glyph |=
143−11:12 name x
144−11:13 tight glyph =
145−11:14 tight tvar A
146−11:16 glyph ^-
147−11:19 glyph (
148−11:20 tight name cmd
149−11:24 tvar A
150−11:25 tight glyph )
151−11:27 glyph [
152−11:28 tight lit %wait
153−11:34 lit ~s30
154−11:39 name x
155−11:40 tight glyph ]
141+11:4 name wrap-value
142+11:15 glyph |=
143+11:18 name x
144+11:19 tight glyph =
145+11:20 tight tvar A
146+11:22 glyph ^-
147+11:25 glyph (
148+11:26 tight name cmd
149+11:30 tvar A
150+11:31 tight glyph )
151+11:33 glyph [
152+11:34 tight lit %wait
153+11:40 lit ~s30
154+11:45 name x
155+11:46 tight glyph ]
15615612:1 NEWLINE
15715712:1 glyph ++
158−12:4 name wrap-text
159−12:14 glyph (
160−12:15 tight name wrap
161−12:20 str "hello"
162−12:27 tight glyph )
158+12:4 name wrap-value-text
159+12:20 glyph (
160+12:21 tight name wrap-value
161+12:32 str "hello"
162+12:39 tight glyph )
16316313:1 NEWLINE
16416413:1 glyph ++
165−13:4 name wrap-ship
166−13:14 glyph (
167−13:15 tight name wrap
168−13:20 lit ~zod
169−13:24 tight glyph )
165+13:4 name wrap-value-ship
166+13:20 glyph (
167+13:21 tight name wrap-value
168+13:32 lit ~zod
169+13:36 tight glyph )
17017014:1 NEWLINE
17117114:1 glyph ++
17217214:4 name wrong-reply
@@ -278,8 +278,8 @@
27827821:10 glyph (
27927921:11 tight name use-text
28028021:20 glyph (
281−21:21 tight name wrap
282−21:26 lit ~zod
283−21:30 tight glyph )
284−21:31 tight glyph )
285−21:32 NEWLINE
281+21:21 tight name wrap-value
282+21:32 lit ~zod
283+21:36 tight glyph )
284+21:37 tight glyph )
285+21:38 NEWLINE
tests/golden/types-prelude-cmd/tree.txt+13−13
@@ -59,18 +59,18 @@
5959 (cast 10:18
6060 (apply 10:21 cmd (aura 10:26 @t))
6161 (tuple 10:30 (lit 10:31 %wait) (lit 10:37 ~s30) (lit 10:42 ~zod))))
62− (value 11:1 wrap
63− (gate 11:9
64− (face 11:12 x (tvar 11:14 A))
65− (cast 11:16
66− (apply 11:19 cmd (tvar 11:24 A))
67− (tuple 11:27 (lit 11:28 %wait) (lit 11:34 ~s30) (wing 11:39 x)))))
68− (value 12:1 wrap-text
69− (group 12:14
70− (call 12:15 (wing 12:15 wrap) (str 12:20 "hello"))))
71− (value 13:1 wrap-ship
72− (group 13:14
73− (call 13:15 (wing 13:15 wrap) (lit 13:20 ~zod))))
62+ (value 11:1 wrap-value
63+ (gate 11:15
64+ (face 11:18 x (tvar 11:20 A))
65+ (cast 11:22
66+ (apply 11:25 cmd (tvar 11:30 A))
67+ (tuple 11:33 (lit 11:34 %wait) (lit 11:40 ~s30) (wing 11:45 x)))))
68+ (value 12:1 wrap-value-text
69+ (group 12:20
70+ (call 12:21 (wing 12:21 wrap-value) (str 12:32 "hello"))))
71+ (value 13:1 wrap-value-ship
72+ (group 13:20
73+ (call 13:21 (wing 13:21 wrap-value) (lit 13:32 ~zod))))
7474 (value 14:1 wrong-reply
7575 (cast 14:16
7676 (apply 14:19 cmd (aura 14:24 @t))
@@ -119,4 +119,4 @@
119119 (call 21:11
120120 (wing 21:11 use-text)
121121 (group 21:20
122− (call 21:21 (wing 21:21 wrap) (lit 21:26 ~zod)))))))
122+ (call 21:21 (wing 21:21 wrap-value) (lit 21:32 ~zod)))))))
tests/golden/types-prelude-cmd/types.txt+7−7
@@ -20,9 +20,9 @@ partial inference; module not checked
2020/tests/golden/types-prelude-cmd/source.jibb:10:30: expression
2121++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
2222 ^
23−++ wrap: $-(A (cmd A))
24−++ wrap-text: (cmd @t)
25−++ wrap-ship: (cmd @p)
23+++ wrap-value: $-(A (cmd A))
24+++ wrap-value-text: (cmd @t)
25+++ wrap-value-ship: (cmd @p)
2626++ wrong-reply: cast mold and expression type do not unify
2727/tests/golden/types-prelude-cmd/source.jibb:14:19: cast mold
2828++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
@@ -49,8 +49,8 @@ partial inference; module not checked
4949++ use-text: $-((cmd @t) (cmd @t))
5050++ cross: call's sample and argument types do not unify
5151/tests/golden/types-prelude-cmd/source.jibb:21:21: called gate
52−++ cross (use-text (wrap ~zod))
52+++ cross (use-text (wrap-value ~zod))
5353 ^
54−/tests/golden/types-prelude-cmd/source.jibb:21:26: argument has type @p
55−++ cross (use-text (wrap ~zod))
56− ^
54+/tests/golden/types-prelude-cmd/source.jibb:21:32: argument has type @p
55+++ cross (use-text (wrap-value ~zod))
56+ ^
tests/golden/types-prelude-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-text/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude: "Text ... crip, trip, cass, cuss, trim, tufa, tuba"; the target ship's Hoon 135 definitions give trip and tuba their tape and UTF-32 types.
2+tests: Source-backed trip and tuba wrappers preserve cord, tape and UTF-32 list types through composition and generic list length. Empty input infers; non-cord and non-tape arguments fail. Primitive lowering and execution remain unfinished. The module report is partial.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-prelude-text/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-text/source.jibbnew file+8
@@ -0,0 +1,8 @@
1+++ to-tape (trip "abc")
2+++ to-codepoints (tuba (trip "abc"))
3+++ empty-codepoints (tuba ~)
4+++ count-codepoints |= value=@t
5+ (lent (tuba (trip value)))
6+++ bad-trip (trip ~zod)
7+++ bad-tuba (tuba "abc")
8+++ bad-tuba-items (tuba ~[~zod])
tests/golden/types-prelude-text/tokens.txtnew file+66
@@ -0,0 +1,66 @@
1+1:1 glyph ++
2+1:4 name to-tape
3+1:12 glyph (
4+1:13 tight name trip
5+1:18 str "abc"
6+1:23 tight glyph )
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name to-codepoints
10+2:18 glyph (
11+2:19 tight name tuba
12+2:24 glyph (
13+2:25 tight name trip
14+2:30 str "abc"
15+2:35 tight glyph )
16+2:36 tight glyph )
17+3:1 NEWLINE
18+3:1 glyph ++
19+3:4 name empty-codepoints
20+3:21 glyph (
21+3:22 tight name tuba
22+3:27 lit ~
23+3:28 tight glyph )
24+4:1 NEWLINE
25+4:1 glyph ++
26+4:4 name count-codepoints
27+4:21 glyph |=
28+4:24 name value
29+4:29 tight glyph =
30+4:30 tight aura @t
31+5:3 INDENT
32+5:3 glyph (
33+5:4 tight name lent
34+5:9 glyph (
35+5:10 tight name tuba
36+5:15 glyph (
37+5:16 tight name trip
38+5:21 name value
39+5:26 tight glyph )
40+5:27 tight glyph )
41+5:28 tight glyph )
42+6:1 DEDENT
43+6:1 NEWLINE
44+6:1 glyph ++
45+6:4 name bad-trip
46+6:13 glyph (
47+6:14 tight name trip
48+6:19 lit ~zod
49+6:23 tight glyph )
50+7:1 NEWLINE
51+7:1 glyph ++
52+7:4 name bad-tuba
53+7:13 glyph (
54+7:14 tight name tuba
55+7:19 str "abc"
56+7:24 tight glyph )
57+8:1 NEWLINE
58+8:1 glyph ++
59+8:4 name bad-tuba-items
60+8:19 glyph (
61+8:20 tight name tuba
62+8:25 glyph ~[
63+8:27 tight lit ~zod
64+8:31 tight glyph ]
65+8:32 tight glyph )
66+8:33 NEWLINE
tests/golden/types-prelude-text/tree.txtnew file+36
@@ -0,0 +1,36 @@
1+(module
2+ (value 1:1 to-tape
3+ (group 1:12
4+ (call 1:13 (wing 1:13 trip) (str 1:18 "abc"))))
5+ (value 2:1 to-codepoints
6+ (group 2:18
7+ (call 2:19
8+ (wing 2:19 tuba)
9+ (group 2:24
10+ (call 2:25 (wing 2:25 trip) (str 2:30 "abc"))))))
11+ (value 3:1 empty-codepoints
12+ (group 3:21
13+ (call 3:22 (wing 3:22 tuba) (lit 3:27 ~))))
14+ (value 4:1 count-codepoints
15+ (gate 4:21
16+ (face 4:24 value (aura 4:30 @t))
17+ (body 5:3
18+ (group 5:3
19+ (call 5:4
20+ (wing 5:4 lent)
21+ (group 5:9
22+ (call 5:10
23+ (wing 5:10 tuba)
24+ (group 5:15
25+ (call 5:16 (wing 5:16 trip) (wing 5:21 value))))))))))
26+ (value 6:1 bad-trip
27+ (group 6:13
28+ (call 6:14 (wing 6:14 trip) (lit 6:19 ~zod))))
29+ (value 7:1 bad-tuba
30+ (group 7:13
31+ (call 7:14 (wing 7:14 tuba) (str 7:19 "abc"))))
32+ (value 8:1 bad-tuba-items
33+ (group 8:19
34+ (call 8:20
35+ (wing 8:20 tuba)
36+ (list 8:25 (lit 8:27 ~zod))))))
tests/golden/types-prelude-text/types.txtnew file+26
@@ -0,0 +1,26 @@
1+partial inference; module not checked
2+++ to-tape: (list @tD)
3+++ to-codepoints: (list @c)
4+++ empty-codepoints: (list @c)
5+++ count-codepoints: $-(@t @ud)
6+++ bad-trip: call's sample and argument types do not unify
7+/tests/golden/types-prelude-text/source.jibb:6:14: called gate has type $-(@t (list @tD))
8+++ bad-trip (trip ~zod)
9+ ^
10+/tests/golden/types-prelude-text/source.jibb:6:19: argument has type @p
11+++ bad-trip (trip ~zod)
12+ ^
13+++ bad-tuba: call's sample and argument types do not unify
14+/tests/golden/types-prelude-text/source.jibb:7:14: called gate has type $-((list @tD) (list @c))
15+++ bad-tuba (tuba "abc")
16+ ^
17+/tests/golden/types-prelude-text/source.jibb:7:19: argument has type @t
18+++ bad-tuba (tuba "abc")
19+ ^
20+++ bad-tuba-items: list item does not fit its expected type
21+/tests/golden/types-prelude-text/source.jibb:8:20: expected item has type @tD
22+++ bad-tuba-items (tuba ~[~zod])
23+ ^
24+/tests/golden/types-prelude-text/source.jibb:8:27: list item has type @p
25+++ bad-tuba-items (tuba ~[~zod])
26+ ^
tests/golden/types-prelude-ui/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Prelude, The Elm architecture on Urbit, and Layout and styling.
2+tests: Exact source-backed UI/program/page constructor schemes; static and message-bearing composition; concrete islands and pages; invalid attributes, malformed keyed/table inputs, child-message mismatch, and mismatched island data. Nested element payloads are erased only in the nonrecursive runtime mold, not in public constructor signatures.
3+expect: parses
4+expect-types: supported declarations infer exact types and invalid compositions report errors; the child-message mismatch fails closed as an unsupported constraint. No raw-constructor encapsulation, duplicate-attribute check, rendering, navigation, storage, or execution is claimed.
tests/golden/types-prelude-ui/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/types-prelude-ui/source.jibbnew file+77
@@ -0,0 +1,77 @@
1++$ msg
2+ %save
3+ %toggle
4+ [%edited value=@t]
5++$ model [count=@ud]
6+
7+++ row-scheme row
8+++ column-scheme column
9+++ wrap-scheme wrap
10+++ stack-scheme stack
11+++ el-scheme el
12+++ para-scheme para
13+++ text-scheme text
14+++ heading-scheme heading
15+++ each-scheme each
16+++ table-scheme table
17+++ image-scheme image
18+++ image-unsafe-scheme image-unsafe
19+++ link-scheme link
20+++ link-unsafe-scheme link-unsafe
21+++ button-scheme button
22+++ toggle-scheme toggle
23+++ field-scheme field
24+++ form-scheme form
25+++ island-scheme island
26+++ program-scheme program
27+++ page-scheme page
28+
29+++ static-text ^- (element !!) (text "hello")
30+++ static-ui ^- (element !!)
31+ column ~[pad+%s1 gap+%s2 width+[%fill 1] align+%center role+%body tone+%muted] ~[
32+ text "one"
33+ para ~[(text "two")]
34+ heading 2 "heading"
35+++ static-media ^- (element !!)
36+ stack ~[width+[%chars 20]] ~[
37+ image %/images/logo.png "Logo"
38+ link %/home "Home"
39+++ unsafe-media ^- (element !!)
40+ wrap ~[width+%shrink role+%caption tone+%accent] ~[
41+ image-unsafe [url="https://example.com/a.png" width=20 height=10] "Remote"
42+ link-unsafe "/elsewhere" "Elsewhere"
43+++ save-message ^- msg %save
44+++ toggle-message ^- msg %toggle
45+++ save-button ^- (element msg) (button "Save" save-message)
46+++ enabled-toggle ^- (element msg) (toggle %.y "Enabled" toggle-message)
47+++ edit-message |= value=@t ^- msg [%edited value]
48+++ name-field ^- (element msg) (field "Name" "value" edit-message)
49+++ controls ^- (element msg)
50+ (form save-message ~[save-button enabled-toggle name-field])
51+++ keyed |= items=(list [key=@t el=(element msg)])
52+ ^- (element msg) (each items)
53+++ tabular |= rows=(list [key=@ud cells=(list (element msg))])
54+ ^- (element msg)
55+ (table ~[[header="Name" width=[%fill 1] align=%start]] rows)
56+
57+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
58+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
59+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
60+++ malformed-table ^- (element msg)
61+ (table ~[[header="Name" width=%shrink]] ~)
62+++ ship-control ^- (element @p) (button "Ship" ~zod)
63+++ text-row |= kids=(list (element @t)) ^- (element @t) (row ~ kids)
64+++ bad-child (text-row ~[ship-control])
65+
66+++ init |= input=@t ^- model [count=0]
67+++ update |= [message=msg state=model]
68+ ^- [model (list (cmd msg))] [state ~]
69+++ view |= state=model ^- (element msg) (controls)
70+++ subs |= state=model ^- (list (sub msg)) ~
71+++ concrete-program ^- (program @t model msg) (program init update view subs)
72+++ embedded ^- (element !!) (island concrete-program "seed")
73+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
74+
75+++ load |= route=@t ^- (ask model) (pure [count=0])
76+++ page-view |= data=model ^- (element !!) (text "page")
77+++ static-page ^- (page @t model) (page load page-view)
tests/golden/types-prelude-ui/tokens.txtnew file+710
@@ -0,0 +1,710 @@
1+1:1 glyph +$
2+1:4 name msg
3+2:3 INDENT
4+2:3 lit %save
5+3:3 NEWLINE
6+3:3 lit %toggle
7+4:3 NEWLINE
8+4:3 glyph [
9+4:4 tight lit %edited
10+4:12 name value
11+4:17 tight glyph =
12+4:18 tight aura @t
13+4:20 tight glyph ]
14+5:1 DEDENT
15+5:1 NEWLINE
16+5:1 glyph +$
17+5:4 name model
18+5:10 glyph [
19+5:11 tight name count
20+5:16 tight glyph =
21+5:17 tight aura @ud
22+5:20 tight glyph ]
23+7:1 NEWLINE
24+7:1 glyph ++
25+7:4 name row-scheme
26+7:15 name row
27+8:1 NEWLINE
28+8:1 glyph ++
29+8:4 name column-scheme
30+8:18 name column
31+9:1 NEWLINE
32+9:1 glyph ++
33+9:4 name wrap-scheme
34+9:16 name wrap
35+10:1 NEWLINE
36+10:1 glyph ++
37+10:4 name stack-scheme
38+10:17 name stack
39+11:1 NEWLINE
40+11:1 glyph ++
41+11:4 name el-scheme
42+11:14 name el
43+12:1 NEWLINE
44+12:1 glyph ++
45+12:4 name para-scheme
46+12:16 name para
47+13:1 NEWLINE
48+13:1 glyph ++
49+13:4 name text-scheme
50+13:16 name text
51+14:1 NEWLINE
52+14:1 glyph ++
53+14:4 name heading-scheme
54+14:19 name heading
55+15:1 NEWLINE
56+15:1 glyph ++
57+15:4 name each-scheme
58+15:16 name each
59+16:1 NEWLINE
60+16:1 glyph ++
61+16:4 name table-scheme
62+16:17 name table
63+17:1 NEWLINE
64+17:1 glyph ++
65+17:4 name image-scheme
66+17:17 name image
67+18:1 NEWLINE
68+18:1 glyph ++
69+18:4 name image-unsafe-scheme
70+18:24 name image-unsafe
71+19:1 NEWLINE
72+19:1 glyph ++
73+19:4 name link-scheme
74+19:16 name link
75+20:1 NEWLINE
76+20:1 glyph ++
77+20:4 name link-unsafe-scheme
78+20:23 name link-unsafe
79+21:1 NEWLINE
80+21:1 glyph ++
81+21:4 name button-scheme
82+21:18 name button
83+22:1 NEWLINE
84+22:1 glyph ++
85+22:4 name toggle-scheme
86+22:18 name toggle
87+23:1 NEWLINE
88+23:1 glyph ++
89+23:4 name field-scheme
90+23:17 name field
91+24:1 NEWLINE
92+24:1 glyph ++
93+24:4 name form-scheme
94+24:16 name form
95+25:1 NEWLINE
96+25:1 glyph ++
97+25:4 name island-scheme
98+25:18 name island
99+26:1 NEWLINE
100+26:1 glyph ++
101+26:4 name program-scheme
102+26:19 name program
103+27:1 NEWLINE
104+27:1 glyph ++
105+27:4 name page-scheme
106+27:16 name page
107+29:1 NEWLINE
108+29:1 glyph ++
109+29:4 name static-text
110+29:16 glyph ^-
111+29:19 glyph (
112+29:20 tight name element
113+29:28 glyph !!
114+29:30 tight glyph )
115+29:32 glyph (
116+29:33 tight name text
117+29:38 str "hello"
118+29:45 tight glyph )
119+30:1 NEWLINE
120+30:1 glyph ++
121+30:4 name static-ui
122+30:14 glyph ^-
123+30:17 glyph (
124+30:18 tight name element
125+30:26 glyph !!
126+30:28 tight glyph )
127+31:3 INDENT
128+31:3 name column
129+31:10 glyph ~[
130+31:12 tight name pad
131+31:15 tight glyph +
132+31:16 tight lit %s1
133+31:20 name gap
134+31:23 tight glyph +
135+31:24 tight lit %s2
136+31:28 name width
137+31:33 tight glyph +
138+31:34 tight glyph [
139+31:35 tight lit %fill
140+31:41 lit 1
141+31:42 tight glyph ]
142+31:44 name align
143+31:49 tight glyph +
144+31:50 tight lit %center
145+31:58 name role
146+31:62 tight glyph +
147+31:63 tight lit %body
148+31:69 name tone
149+31:73 tight glyph +
150+31:74 tight lit %muted
151+31:80 tight glyph ]
152+31:82 glyph ~[
153+32:5 INDENT
154+32:5 name text
155+32:10 str "one"
156+33:5 NEWLINE
157+33:5 name para
158+33:10 glyph ~[
159+33:12 tight glyph (
160+33:13 tight name text
161+33:18 str "two"
162+33:23 tight glyph )
163+33:24 tight glyph ]
164+34:5 NEWLINE
165+34:5 name heading
166+34:13 lit 2
167+34:15 str "heading"
168+35:1 DEDENT
169+35:1 DEDENT
170+35:1 NEWLINE
171+35:1 glyph ++
172+35:4 name static-media
173+35:17 glyph ^-
174+35:20 glyph (
175+35:21 tight name element
176+35:29 glyph !!
177+35:31 tight glyph )
178+36:3 INDENT
179+36:3 name stack
180+36:9 glyph ~[
181+36:11 tight name width
182+36:16 tight glyph +
183+36:17 tight glyph [
184+36:18 tight lit %chars
185+36:25 lit 20
186+36:27 tight glyph ]
187+36:28 tight glyph ]
188+36:30 glyph ~[
189+37:5 INDENT
190+37:5 name image
191+37:11 glyph %/
192+37:13 tight knot images
193+37:19 tight glyph /
194+37:20 tight knot logo.png
195+37:29 str "Logo"
196+38:5 NEWLINE
197+38:5 name link
198+38:10 glyph %/
199+38:12 tight knot home
200+38:17 str "Home"
201+39:1 DEDENT
202+39:1 DEDENT
203+39:1 NEWLINE
204+39:1 glyph ++
205+39:4 name unsafe-media
206+39:17 glyph ^-
207+39:20 glyph (
208+39:21 tight name element
209+39:29 glyph !!
210+39:31 tight glyph )
211+40:3 INDENT
212+40:3 name wrap
213+40:8 glyph ~[
214+40:10 tight name width
215+40:15 tight glyph +
216+40:16 tight lit %shrink
217+40:24 name role
218+40:28 tight glyph +
219+40:29 tight lit %caption
220+40:38 name tone
221+40:42 tight glyph +
222+40:43 tight lit %accent
223+40:50 tight glyph ]
224+40:52 glyph ~[
225+41:5 INDENT
226+41:5 name image-unsafe
227+41:18 glyph [
228+41:19 tight name url
229+41:22 tight glyph =
230+41:23 tight str "https://example.com/a.png"
231+41:51 name width
232+41:56 tight glyph =
233+41:57 tight lit 20
234+41:60 name height
235+41:66 tight glyph =
236+41:67 tight lit 10
237+41:69 tight glyph ]
238+41:71 str "Remote"
239+42:5 NEWLINE
240+42:5 name link-unsafe
241+42:17 str "/elsewhere"
242+42:30 str "Elsewhere"
243+43:1 DEDENT
244+43:1 DEDENT
245+43:1 NEWLINE
246+43:1 glyph ++
247+43:4 name save-message
248+43:17 glyph ^-
249+43:20 name msg
250+43:24 lit %save
251+44:1 NEWLINE
252+44:1 glyph ++
253+44:4 name toggle-message
254+44:19 glyph ^-
255+44:22 name msg
256+44:26 lit %toggle
257+45:1 NEWLINE
258+45:1 glyph ++
259+45:4 name save-button
260+45:16 glyph ^-
261+45:19 glyph (
262+45:20 tight name element
263+45:28 name msg
264+45:31 tight glyph )
265+45:33 glyph (
266+45:34 tight name button
267+45:41 str "Save"
268+45:48 name save-message
269+45:60 tight glyph )
270+46:1 NEWLINE
271+46:1 glyph ++
272+46:4 name enabled-toggle
273+46:19 glyph ^-
274+46:22 glyph (
275+46:23 tight name element
276+46:31 name msg
277+46:34 tight glyph )
278+46:36 glyph (
279+46:37 tight name toggle
280+46:44 lit %.y
281+46:48 str "Enabled"
282+46:58 name toggle-message
283+46:72 tight glyph )
284+47:1 NEWLINE
285+47:1 glyph ++
286+47:4 name edit-message
287+47:17 glyph |=
288+47:20 name value
289+47:25 tight glyph =
290+47:26 tight aura @t
291+47:29 glyph ^-
292+47:32 name msg
293+47:36 glyph [
294+47:37 tight lit %edited
295+47:45 name value
296+47:50 tight glyph ]
297+48:1 NEWLINE
298+48:1 glyph ++
299+48:4 name name-field
300+48:15 glyph ^-
301+48:18 glyph (
302+48:19 tight name element
303+48:27 name msg
304+48:30 tight glyph )
305+48:32 glyph (
306+48:33 tight name field
307+48:39 str "Name"
308+48:46 str "value"
309+48:54 name edit-message
310+48:66 tight glyph )
311+49:1 NEWLINE
312+49:1 glyph ++
313+49:4 name controls
314+49:13 glyph ^-
315+49:16 glyph (
316+49:17 tight name element
317+49:25 name msg
318+49:28 tight glyph )
319+50:3 INDENT
320+50:3 glyph (
321+50:4 tight name form
322+50:9 name save-message
323+50:22 glyph ~[
324+50:24 tight name save-button
325+50:36 name enabled-toggle
326+50:51 name name-field
327+50:61 tight glyph ]
328+50:62 tight glyph )
329+51:1 DEDENT
330+51:1 NEWLINE
331+51:1 glyph ++
332+51:4 name keyed
333+51:10 glyph |=
334+51:13 name items
335+51:18 tight glyph =
336+51:19 tight glyph (
337+51:20 tight name list
338+51:25 glyph [
339+51:26 tight name key
340+51:29 tight glyph =
341+51:30 tight aura @t
342+51:33 name el
343+51:35 tight glyph =
344+51:36 tight glyph (
345+51:37 tight name element
346+51:45 name msg
347+51:48 tight glyph )
348+51:49 tight glyph ]
349+51:50 tight glyph )
350+52:3 INDENT
351+52:3 glyph ^-
352+52:6 glyph (
353+52:7 tight name element
354+52:15 name msg
355+52:18 tight glyph )
356+52:20 glyph (
357+52:21 tight name each
358+52:26 name items
359+52:31 tight glyph )
360+53:1 DEDENT
361+53:1 NEWLINE
362+53:1 glyph ++
363+53:4 name tabular
364+53:12 glyph |=
365+53:15 name rows
366+53:19 tight glyph =
367+53:20 tight glyph (
368+53:21 tight name list
369+53:26 glyph [
370+53:27 tight name key
371+53:30 tight glyph =
372+53:31 tight aura @ud
373+53:35 name cells
374+53:40 tight glyph =
375+53:41 tight glyph (
376+53:42 tight name list
377+53:47 glyph (
378+53:48 tight name element
379+53:56 name msg
380+53:59 tight glyph )
381+53:60 tight glyph )
382+53:61 tight glyph ]
383+53:62 tight glyph )
384+54:3 INDENT
385+54:3 glyph ^-
386+54:6 glyph (
387+54:7 tight name element
388+54:15 name msg
389+54:18 tight glyph )
390+55:5 INDENT
391+55:5 glyph (
392+55:6 tight name table
393+55:12 glyph ~[
394+55:14 tight glyph [
395+55:15 tight name header
396+55:21 tight glyph =
397+55:22 tight str "Name"
398+55:29 name width
399+55:34 tight glyph =
400+55:35 tight glyph [
401+55:36 tight lit %fill
402+55:42 lit 1
403+55:43 tight glyph ]
404+55:45 name align
405+55:50 tight glyph =
406+55:51 tight lit %start
407+55:57 tight glyph ]
408+55:58 tight glyph ]
409+55:60 name rows
410+55:64 tight glyph )
411+57:1 DEDENT
412+57:1 DEDENT
413+57:1 NEWLINE
414+57:1 glyph ++
415+57:4 name bad-pad
416+57:12 glyph ^-
417+57:15 glyph (
418+57:16 tight name element
419+57:24 glyph !!
420+57:26 tight glyph )
421+57:28 glyph (
422+57:29 tight name row
423+57:33 glyph ~[
424+57:35 tight name pad
425+57:38 tight glyph +
426+57:39 tight lit %s4
427+57:42 tight glyph ]
428+57:44 lit ~
429+57:45 tight glyph )
430+58:1 NEWLINE
431+58:1 glyph ++
432+58:4 name bad-width
433+58:14 glyph ^-
434+58:17 glyph (
435+58:18 tight name element
436+58:26 glyph !!
437+58:28 tight glyph )
438+58:30 glyph (
439+58:31 tight name row
440+58:35 glyph ~[
441+58:37 tight name width
442+58:42 tight glyph +
443+58:43 tight glyph [
444+58:44 tight lit %chars
445+58:51 str "wide"
446+58:57 tight glyph ]
447+58:58 tight glyph ]
448+58:60 lit ~
449+58:61 tight glyph )
450+59:1 NEWLINE
451+59:1 glyph ++
452+59:4 name malformed-each
453+59:19 glyph ^-
454+59:22 glyph (
455+59:23 tight name element
456+59:31 name msg
457+59:34 tight glyph )
458+59:36 glyph (
459+59:37 tight name each
460+59:42 glyph ~[
461+59:44 tight glyph [
462+59:45 tight name key
463+59:48 tight glyph =
464+59:49 tight str "row"
465+59:55 name kid
466+59:58 tight glyph =
467+59:59 tight glyph (
468+59:60 tight name text
469+59:65 str "child"
470+59:72 tight glyph )
471+59:73 tight glyph ]
472+59:74 tight glyph ]
473+59:75 tight glyph )
474+60:1 NEWLINE
475+60:1 glyph ++
476+60:4 name malformed-table
477+60:20 glyph ^-
478+60:23 glyph (
479+60:24 tight name element
480+60:32 name msg
481+60:35 tight glyph )
482+61:3 INDENT
483+61:3 glyph (
484+61:4 tight name table
485+61:10 glyph ~[
486+61:12 tight glyph [
487+61:13 tight name header
488+61:19 tight glyph =
489+61:20 tight str "Name"
490+61:27 name width
491+61:32 tight glyph =
492+61:33 tight lit %shrink
493+61:40 tight glyph ]
494+61:41 tight glyph ]
495+61:43 lit ~
496+61:44 tight glyph )
497+62:1 DEDENT
498+62:1 NEWLINE
499+62:1 glyph ++
500+62:4 name ship-control
501+62:17 glyph ^-
502+62:20 glyph (
503+62:21 tight name element
504+62:29 aura @p
505+62:31 tight glyph )
506+62:33 glyph (
507+62:34 tight name button
508+62:41 str "Ship"
509+62:48 lit ~zod
510+62:52 tight glyph )
511+63:1 NEWLINE
512+63:1 glyph ++
513+63:4 name text-row
514+63:13 glyph |=
515+63:16 name kids
516+63:20 tight glyph =
517+63:21 tight glyph (
518+63:22 tight name list
519+63:27 glyph (
520+63:28 tight name element
521+63:36 aura @t
522+63:38 tight glyph )
523+63:39 tight glyph )
524+63:41 glyph ^-
525+63:44 glyph (
526+63:45 tight name element
527+63:53 aura @t
528+63:55 tight glyph )
529+63:57 glyph (
530+63:58 tight name row
531+63:62 lit ~
532+63:64 name kids
533+63:68 tight glyph )
534+64:1 NEWLINE
535+64:1 glyph ++
536+64:4 name bad-child
537+64:14 glyph (
538+64:15 tight name text-row
539+64:24 glyph ~[
540+64:26 tight name ship-control
541+64:38 tight glyph ]
542+64:39 tight glyph )
543+66:1 NEWLINE
544+66:1 glyph ++
545+66:4 name init
546+66:9 glyph |=
547+66:12 name input
548+66:17 tight glyph =
549+66:18 tight aura @t
550+66:21 glyph ^-
551+66:24 name model
552+66:30 glyph [
553+66:31 tight name count
554+66:36 tight glyph =
555+66:37 tight lit 0
556+66:38 tight glyph ]
557+67:1 NEWLINE
558+67:1 glyph ++
559+67:4 name update
560+67:11 glyph |=
561+67:14 glyph [
562+67:15 tight name message
563+67:22 tight glyph =
564+67:23 tight name msg
565+67:27 name state
566+67:32 tight glyph =
567+67:33 tight name model
568+67:38 tight glyph ]
569+68:3 INDENT
570+68:3 glyph ^-
571+68:6 glyph [
572+68:7 tight name model
573+68:13 glyph (
574+68:14 tight name list
575+68:19 glyph (
576+68:20 tight name cmd
577+68:24 name msg
578+68:27 tight glyph )
579+68:28 tight glyph )
580+68:29 tight glyph ]
581+68:31 glyph [
582+68:32 tight name state
583+68:38 lit ~
584+68:39 tight glyph ]
585+69:1 DEDENT
586+69:1 NEWLINE
587+69:1 glyph ++
588+69:4 name view
589+69:9 glyph |=
590+69:12 name state
591+69:17 tight glyph =
592+69:18 tight name model
593+69:24 glyph ^-
594+69:27 glyph (
595+69:28 tight name element
596+69:36 name msg
597+69:39 tight glyph )
598+69:41 glyph (
599+69:42 tight name controls
600+69:50 tight glyph )
601+70:1 NEWLINE
602+70:1 glyph ++
603+70:4 name subs
604+70:9 glyph |=
605+70:12 name state
606+70:17 tight glyph =
607+70:18 tight name model
608+70:24 glyph ^-
609+70:27 glyph (
610+70:28 tight name list
611+70:33 glyph (
612+70:34 tight name sub
613+70:38 name msg
614+70:41 tight glyph )
615+70:42 tight glyph )
616+70:44 lit ~
617+71:1 NEWLINE
618+71:1 glyph ++
619+71:4 name concrete-program
620+71:21 glyph ^-
621+71:24 glyph (
622+71:25 tight name program
623+71:33 aura @t
624+71:36 name model
625+71:42 name msg
626+71:45 tight glyph )
627+71:47 glyph (
628+71:48 tight name program
629+71:56 name init
630+71:61 name update
631+71:68 name view
632+71:73 name subs
633+71:77 tight glyph )
634+72:1 NEWLINE
635+72:1 glyph ++
636+72:4 name embedded
637+72:13 glyph ^-
638+72:16 glyph (
639+72:17 tight name element
640+72:25 glyph !!
641+72:27 tight glyph )
642+72:29 glyph (
643+72:30 tight name island
644+72:37 name concrete-program
645+72:54 str "seed"
646+72:60 tight glyph )
647+73:1 NEWLINE
648+73:1 glyph ++
649+73:4 name mismatched-island-data
650+73:27 glyph ^-
651+73:30 glyph (
652+73:31 tight name element
653+73:39 glyph !!
654+73:41 tight glyph )
655+73:43 glyph (
656+73:44 tight name island
657+73:51 name concrete-program
658+73:68 lit ~zod
659+73:72 tight glyph )
660+75:1 NEWLINE
661+75:1 glyph ++
662+75:4 name load
663+75:9 glyph |=
664+75:12 name route
665+75:17 tight glyph =
666+75:18 tight aura @t
667+75:21 glyph ^-
668+75:24 glyph (
669+75:25 tight name ask
670+75:29 name model
671+75:34 tight glyph )
672+75:36 glyph (
673+75:37 tight name pure
674+75:42 glyph [
675+75:43 tight name count
676+75:48 tight glyph =
677+75:49 tight lit 0
678+75:50 tight glyph ]
679+75:51 tight glyph )
680+76:1 NEWLINE
681+76:1 glyph ++
682+76:4 name page-view
683+76:14 glyph |=
684+76:17 name data
685+76:21 tight glyph =
686+76:22 tight name model
687+76:28 glyph ^-
688+76:31 glyph (
689+76:32 tight name element
690+76:40 glyph !!
691+76:42 tight glyph )
692+76:44 glyph (
693+76:45 tight name text
694+76:50 str "page"
695+76:56 tight glyph )
696+77:1 NEWLINE
697+77:1 glyph ++
698+77:4 name static-page
699+77:16 glyph ^-
700+77:19 glyph (
701+77:20 tight name page
702+77:25 aura @t
703+77:28 name model
704+77:33 tight glyph )
705+77:35 glyph (
706+77:36 tight name page
707+77:41 name load
708+77:46 name page-view
709+77:55 tight glyph )
710+77:56 NEWLINE
tests/golden/types-prelude-ui/tree.txtnew file+291
@@ -0,0 +1,291 @@
1+(module
2+ (mold 1:1 msg
3+ (union 2:3
4+ (const 2:3 %save)
5+ (const 3:3 %toggle)
6+ (cell 4:3
7+ (const 4:4 %edited)
8+ (face 4:12 value (aura 4:18 @t)))))
9+ (mold 5:1 model
10+ (cell 5:10
11+ (face 5:11 count (aura 5:17 @ud))))
12+ (value 7:1 row-scheme (wing 7:15 row))
13+ (value 8:1 column-scheme (wing 8:18 column))
14+ (value 9:1 wrap-scheme (wing 9:16 wrap))
15+ (value 10:1 stack-scheme (wing 10:17 stack))
16+ (value 11:1 el-scheme (wing 11:14 el))
17+ (value 12:1 para-scheme (wing 12:16 para))
18+ (value 13:1 text-scheme (wing 13:16 text))
19+ (value 14:1 heading-scheme (wing 14:19 heading))
20+ (value 15:1 each-scheme (wing 15:16 each))
21+ (value 16:1 table-scheme (wing 16:17 table))
22+ (value 17:1 image-scheme (wing 17:17 image))
23+ (value 18:1 image-unsafe-scheme (wing 18:24 image-unsafe))
24+ (value 19:1 link-scheme (wing 19:16 link))
25+ (value 20:1 link-unsafe-scheme (wing 20:23 link-unsafe))
26+ (value 21:1 button-scheme (wing 21:18 button))
27+ (value 22:1 toggle-scheme (wing 22:18 toggle))
28+ (value 23:1 field-scheme (wing 23:17 field))
29+ (value 24:1 form-scheme (wing 24:16 form))
30+ (value 25:1 island-scheme (wing 25:18 island))
31+ (value 26:1 program-scheme (wing 26:19 program))
32+ (value 27:1 page-scheme (wing 27:16 page))
33+ (value 29:1 static-text
34+ (cast 29:16
35+ (apply 29:19 element (void 29:28))
36+ (group 29:32
37+ (call 29:33 (wing 29:33 text) (str 29:38 "hello")))))
38+ (value 30:1 static-ui
39+ (cast 30:14
40+ (apply 30:17 element (void 30:26))
41+ (body 31:3
42+ (call 31:3
43+ (wing 31:3 column)
44+ (list 31:10
45+ (pair 31:12 pad (lit 31:16 %s1))
46+ (pair 31:20 gap (lit 31:24 %s2))
47+ (pair 31:28 width
48+ (tuple 31:34 (lit 31:35 %fill) (lit 31:41 1)))
49+ (pair 31:44 align (lit 31:50 %center))
50+ (pair 31:58 role (lit 31:63 %body))
51+ (pair 31:69 tone (lit 31:74 %muted)))
52+ (list 31:82
53+ (call 32:5 (wing 32:5 text) (str 32:10 "one"))
54+ (call 33:5
55+ (wing 33:5 para)
56+ (list 33:10
57+ (group 33:12
58+ (call 33:13 (wing 33:13 text) (str 33:18 "two")))))
59+ (call 34:5 (wing 34:5 heading) (lit 34:13 2) (str 34:15 "heading")))))))
60+ (value 35:1 static-media
61+ (cast 35:17
62+ (apply 35:20 element (void 35:29))
63+ (body 36:3
64+ (call 36:3
65+ (wing 36:3 stack)
66+ (list 36:9
67+ (pair 36:11 width
68+ (tuple 36:17 (lit 36:18 %chars) (lit 36:25 20))))
69+ (list 36:30
70+ (call 37:5 (wing 37:5 image) (qath 37:11 images logo.png) (str 37:29 "Logo"))
71+ (call 38:5 (wing 38:5 link) (qath 38:10 home) (str 38:17 "Home")))))))
72+ (value 39:1 unsafe-media
73+ (cast 39:17
74+ (apply 39:20 element (void 39:29))
75+ (body 40:3
76+ (call 40:3
77+ (wing 40:3 wrap)
78+ (list 40:8
79+ (pair 40:10 width (lit 40:16 %shrink))
80+ (pair 40:24 role (lit 40:29 %caption))
81+ (pair 40:38 tone (lit 40:43 %accent)))
82+ (list 40:52
83+ (call 41:5
84+ (wing 41:5 image-unsafe)
85+ (tuple 41:18
86+ (face 41:19 url (str 41:23 "https://example.com/a.png"))
87+ (face 41:51 width (lit 41:57 20))
88+ (face 41:60 height (lit 41:67 10)))
89+ (str 41:71 "Remote"))
90+ (call 42:5 (wing 42:5 link-unsafe) (str 42:17 "/elsewhere") (str 42:30 "Elsewhere")))))))
91+ (value 43:1 save-message
92+ (cast 43:17 (ref 43:20 msg) (lit 43:24 %save)))
93+ (value 44:1 toggle-message
94+ (cast 44:19 (ref 44:22 msg) (lit 44:26 %toggle)))
95+ (value 45:1 save-button
96+ (cast 45:16
97+ (apply 45:19 element (ref 45:28 msg))
98+ (group 45:33
99+ (call 45:34 (wing 45:34 button) (str 45:41 "Save") (wing 45:48 save-message)))))
100+ (value 46:1 enabled-toggle
101+ (cast 46:19
102+ (apply 46:22 element (ref 46:31 msg))
103+ (group 46:36
104+ (call 46:37 (wing 46:37 toggle) (lit 46:44 %.y) (str 46:48 "Enabled") (wing 46:58 toggle-message)))))
105+ (value 47:1 edit-message
106+ (gate 47:17
107+ (face 47:20 value (aura 47:26 @t))
108+ (cast 47:29
109+ (ref 47:32 msg)
110+ (tuple 47:36 (lit 47:37 %edited) (wing 47:45 value)))))
111+ (value 48:1 name-field
112+ (cast 48:15
113+ (apply 48:18 element (ref 48:27 msg))
114+ (group 48:32
115+ (call 48:33 (wing 48:33 field) (str 48:39 "Name") (str 48:46 "value") (wing 48:54 edit-message)))))
116+ (value 49:1 controls
117+ (cast 49:13
118+ (apply 49:16 element (ref 49:25 msg))
119+ (body 50:3
120+ (group 50:3
121+ (call 50:4
122+ (wing 50:4 form)
123+ (wing 50:9 save-message)
124+ (list 50:22 (wing 50:24 save-button) (wing 50:36 enabled-toggle) (wing 50:51 name-field)))))))
125+ (value 51:1 keyed
126+ (gate 51:10
127+ (face 51:13 items
128+ (apply 51:19 list
129+ (cell 51:25
130+ (face 51:26 key (aura 51:30 @t))
131+ (face 51:33 el
132+ (apply 51:36 element (ref 51:45 msg))))))
133+ (body 52:3
134+ (cast 52:3
135+ (apply 52:6 element (ref 52:15 msg))
136+ (group 52:20
137+ (call 52:21 (wing 52:21 each) (wing 52:26 items)))))))
138+ (value 53:1 tabular
139+ (gate 53:12
140+ (face 53:15 rows
141+ (apply 53:20 list
142+ (cell 53:26
143+ (face 53:27 key (aura 53:31 @ud))
144+ (face 53:35 cells
145+ (apply 53:41 list
146+ (apply 53:47 element (ref 53:56 msg)))))))
147+ (body 54:3
148+ (cast 54:3
149+ (apply 54:6 element (ref 54:15 msg))
150+ (body 55:5
151+ (group 55:5
152+ (call 55:6
153+ (wing 55:6 table)
154+ (list 55:12
155+ (tuple 55:14
156+ (face 55:15 header (str 55:22 "Name"))
157+ (face 55:29 width
158+ (tuple 55:35 (lit 55:36 %fill) (lit 55:42 1)))
159+ (face 55:45 align (lit 55:51 %start))))
160+ (wing 55:60 rows))))))))
161+ (value 57:1 bad-pad
162+ (cast 57:12
163+ (apply 57:15 element (void 57:24))
164+ (group 57:28
165+ (call 57:29
166+ (wing 57:29 row)
167+ (list 57:33
168+ (pair 57:35 pad (lit 57:39 %s4)))
169+ (lit 57:44 ~)))))
170+ (value 58:1 bad-width
171+ (cast 58:14
172+ (apply 58:17 element (void 58:26))
173+ (group 58:30
174+ (call 58:31
175+ (wing 58:31 row)
176+ (list 58:35
177+ (pair 58:37 width
178+ (tuple 58:43 (lit 58:44 %chars) (str 58:51 "wide"))))
179+ (lit 58:60 ~)))))
180+ (value 59:1 malformed-each
181+ (cast 59:19
182+ (apply 59:22 element (ref 59:31 msg))
183+ (group 59:36
184+ (call 59:37
185+ (wing 59:37 each)
186+ (list 59:42
187+ (tuple 59:44
188+ (face 59:45 key (str 59:49 "row"))
189+ (face 59:55 kid
190+ (group 59:59
191+ (call 59:60 (wing 59:60 text) (str 59:65 "child"))))))))))
192+ (value 60:1 malformed-table
193+ (cast 60:20
194+ (apply 60:23 element (ref 60:32 msg))
195+ (body 61:3
196+ (group 61:3
197+ (call 61:4
198+ (wing 61:4 table)
199+ (list 61:10
200+ (tuple 61:12
201+ (face 61:13 header (str 61:20 "Name"))
202+ (face 61:27 width (lit 61:33 %shrink))))
203+ (lit 61:43 ~))))))
204+ (value 62:1 ship-control
205+ (cast 62:17
206+ (apply 62:20 element (aura 62:29 @p))
207+ (group 62:33
208+ (call 62:34 (wing 62:34 button) (str 62:41 "Ship") (lit 62:48 ~zod)))))
209+ (value 63:1 text-row
210+ (gate 63:13
211+ (face 63:16 kids
212+ (apply 63:21 list
213+ (apply 63:27 element (aura 63:36 @t))))
214+ (cast 63:41
215+ (apply 63:44 element (aura 63:53 @t))
216+ (group 63:57
217+ (call 63:58 (wing 63:58 row) (lit 63:62 ~) (wing 63:64 kids))))))
218+ (value 64:1 bad-child
219+ (group 64:14
220+ (call 64:15
221+ (wing 64:15 text-row)
222+ (list 64:24 (wing 64:26 ship-control)))))
223+ (value 66:1 init
224+ (gate 66:9
225+ (face 66:12 input (aura 66:18 @t))
226+ (cast 66:21
227+ (ref 66:24 model)
228+ (tuple 66:30
229+ (face 66:31 count (lit 66:37 0))))))
230+ (value 67:1 update
231+ (gate 67:11
232+ (cell 67:14
233+ (face 67:15 message (ref 67:23 msg))
234+ (face 67:27 state (ref 67:33 model)))
235+ (body 68:3
236+ (cast 68:3
237+ (cell 68:6
238+ (ref 68:7 model)
239+ (apply 68:13 list
240+ (apply 68:19 cmd (ref 68:24 msg))))
241+ (tuple 68:31 (wing 68:32 state) (lit 68:38 ~))))))
242+ (value 69:1 view
243+ (gate 69:9
244+ (face 69:12 state (ref 69:18 model))
245+ (cast 69:24
246+ (apply 69:27 element (ref 69:36 msg))
247+ (group 69:41 (wing 69:42 controls)))))
248+ (value 70:1 subs
249+ (gate 70:9
250+ (face 70:12 state (ref 70:18 model))
251+ (cast 70:24
252+ (apply 70:27 list
253+ (apply 70:33 sub (ref 70:38 msg)))
254+ (lit 70:44 ~))))
255+ (value 71:1 concrete-program
256+ (cast 71:21
257+ (apply 71:24 program (aura 71:33 @t) (ref 71:36 model) (ref 71:42 msg))
258+ (group 71:47
259+ (call 71:48 (wing 71:48 program) (wing 71:56 init) (wing 71:61 update) (wing 71:68 view) (wing 71:73 subs)))))
260+ (value 72:1 embedded
261+ (cast 72:13
262+ (apply 72:16 element (void 72:25))
263+ (group 72:29
264+ (call 72:30 (wing 72:30 island) (wing 72:37 concrete-program) (str 72:54 "seed")))))
265+ (value 73:1 mismatched-island-data
266+ (cast 73:27
267+ (apply 73:30 element (void 73:39))
268+ (group 73:43
269+ (call 73:44 (wing 73:44 island) (wing 73:51 concrete-program) (lit 73:68 ~zod)))))
270+ (value 75:1 load
271+ (gate 75:9
272+ (face 75:12 route (aura 75:18 @t))
273+ (cast 75:21
274+ (apply 75:24 ask (ref 75:29 model))
275+ (group 75:36
276+ (call 75:37
277+ (wing 75:37 pure)
278+ (tuple 75:42
279+ (face 75:43 count (lit 75:49 0))))))))
280+ (value 76:1 page-view
281+ (gate 76:14
282+ (face 76:17 data (ref 76:22 model))
283+ (cast 76:28
284+ (apply 76:31 element (void 76:40))
285+ (group 76:44
286+ (call 76:45 (wing 76:45 text) (str 76:50 "page"))))))
287+ (value 77:1 static-page
288+ (cast 77:16
289+ (apply 77:19 page (aura 77:25 @t) (ref 77:28 model))
290+ (group 77:35
291+ (call 77:36 (wing 77:36 page) (wing 77:41 load) (wing 77:46 page-view))))))
tests/golden/types-prelude-ui/types.txtnew file+84
@@ -0,0 +1,84 @@
1+partial inference; module not checked
2++$ msg: cases proven disjoint; mold not checked
3++$ model: not checked
4+++ row-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
5+++ column-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
6+++ wrap-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
7+++ stack-scheme: $-([attrs=(list attr) kids=(list (element A))] (element A))
8+++ el-scheme: $-([attrs=(list attr) kid=(element A)] (element A))
9+++ para-scheme: $-((list (element A)) (element A))
10+++ text-scheme: $-(@t (element A))
11+++ heading-scheme: $-([level=@ud words=@t] (element A))
12+++ each-scheme: $-((list [key=A el=(element B)]) (element B))
13+++ table-scheme: $-([columns=(list [header=@t [width=length align=align]]) rows=(list [key=A cells=(list (element B))])] (element B))
14+++ image-scheme: $-([source=qath description=@t] (element A))
15+++ image-unsafe-scheme: $-([source=[url=@t [width=@ud height=@ud]] description=@t] (element A))
16+++ link-scheme: $-([target=qath label=@t] (element A))
17+++ link-unsafe-scheme: $-([target=@t label=@t] (element A))
18+++ button-scheme: $-([label=@t message=A] (element A))
19+++ toggle-scheme: $-([on=? [label=@t message=A]] (element A))
20+++ field-scheme: $-([label=@t [value=@t reply=$-(@t A)]] (element A))
21+++ form-scheme: $-([message=A kids=(list (element A))] (element A))
22+++ island-scheme: $-([p=[init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] data=A] (element !!))
23+++ program-scheme: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B (element C)) subs=$-(B (list (sub C)))]]])
24+++ page-scheme: $-([load=$-(A (ask B)) view=$-(B (element !!))] [load=$-(A (ask B)) view=$-(B (element !!))])
25+++ static-text: (element !!)
26+++ static-ui: (element !!)
27+++ static-media: (element !!)
28+++ unsafe-media: (element !!)
29+++ save-message: msg
30+++ toggle-message: msg
31+++ save-button: (element msg)
32+++ enabled-toggle: (element msg)
33+++ edit-message: $-(@t msg)
34+++ name-field: (element msg)
35+++ controls: (element msg)
36+++ keyed: $-((list [key=@t el=(element msg)]) (element msg))
37+++ tabular: $-((list [key=@ud cells=(list (element msg))]) (element msg))
38+++ bad-pad: list item does not fit its expected type
39+/tests/golden/types-prelude-ui/source.jibb:57:29: expected item
40+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
41+ ^
42+/tests/golden/types-prelude-ui/source.jibb:57:35: list item
43+++ bad-pad ^- (element !!) (row ~[pad+%s4] ~)
44+ ^
45+++ bad-width: list item does not fit its expected type
46+/tests/golden/types-prelude-ui/source.jibb:58:31: expected item
47+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
48+ ^
49+/tests/golden/types-prelude-ui/source.jibb:58:37: list item
50+++ bad-width ^- (element !!) (row ~[width+[%chars "wide"]] ~)
51+ ^
52+++ malformed-each: list item does not fit its expected type
53+/tests/golden/types-prelude-ui/source.jibb:59:37: expected item
54+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
55+ ^
56+/tests/golden/types-prelude-ui/source.jibb:59:44: list item
57+++ malformed-each ^- (element msg) (each ~[[key="row" kid=(text "child")]])
58+ ^
59+++ malformed-table: list item does not fit its expected type
60+/tests/golden/types-prelude-ui/source.jibb:61:4: expected item
61+ (table ~[[header="Name" width=%shrink]] ~)
62+ ^
63+/tests/golden/types-prelude-ui/source.jibb:61:12: list item
64+ (table ~[[header="Name" width=%shrink]] ~)
65+ ^
66+++ ship-control: (element @p)
67+++ text-row: $-((list (element @t)) (element @t))
68+++ bad-child: list item constraint is not supported by partial inference
69+++ init: $-(@t [count=@ud])
70+++ update: $-([message=msg state=[count=@ud]] [count=@ud (list (cmd msg))])
71+++ view: $-([count=@ud] (element msg))
72+++ subs: $-([count=@ud] (list (sub msg)))
73+++ concrete-program: [init=$-(@t [count=@ud]) [update=$-([msg count=@ud] [count=@ud (list (cmd msg))]) [view=$-([count=@ud] (element msg)) subs=$-([count=@ud] (list (sub msg)))]]]
74+++ embedded: (element !!)
75+++ mismatched-island-data: call's sample and argument types do not unify
76+/tests/golden/types-prelude-ui/source.jibb:73:44: called gate
77+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
78+ ^
79+/tests/golden/types-prelude-ui/source.jibb:73:51: argument
80+++ mismatched-island-data ^- (element !!) (island concrete-program ~zod)
81+ ^
82+++ load: $-(@t (ask [count=@ud]))
83+++ page-view: $-([count=@ud] (element !!))
84+++ static-page: [load=$-(@t (ask.internal [count=@ud])) view=$-([count=@ud] (element !!))]
tests/golden/types-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-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-unit-context/source.jibb+3−3
@@ -16,8 +16,8 @@
1616++ accept |= x=(unit msg) x
1717++ call (accept `%stay)
1818++ bad-call (accept `%bad)
19−++ field ^- record [`%go ~[`"hi"]]
20−++ field-bad ^- record [`%bad ~[`"hi"]]
19+++ field-value ^- record [`%go ~[`"hi"]]
20+++ field-value-bad ^- record [`%bad ~[`"hi"]]
2121++ mimic-mismatch ^- (mimic @t) `"hi"
2222++ without-context `%go
2323++ pending
@@ -31,7 +31,7 @@
3131+$ alt
3232 %go
3333 %stay
34−++ field-wrong-payload ^- record [`%go ~[`~zod]]
34+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
3535++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
3636++ wrong-union |= x=alt ^- record [`x ~[`"hi"]]
3737++ no-field-context |= x=A ^- [a=A] [wrong=x]
tests/golden/types-unit-context/tokens.txt+33−33
@@ -169,30 +169,30 @@
16916918:26 tight glyph )
17017019:1 NEWLINE
17117119:1 glyph ++
172−19:4 name field
173−19:10 glyph ^-
174−19:13 name record
175−19:20 glyph [
176−19:21 tight glyph `
177−19:22 tight lit %go
178−19:26 glyph ~[
179−19:28 tight glyph `
180−19:29 tight str "hi"
181−19:33 tight glyph ]
182−19:34 tight glyph ]
172+19:4 name field-value
173+19:16 glyph ^-
174+19:19 name record
175+19:26 glyph [
176+19:27 tight glyph `
177+19:28 tight lit %go
178+19:32 glyph ~[
179+19:34 tight glyph `
180+19:35 tight str "hi"
181+19:39 tight glyph ]
182+19:40 tight glyph ]
18318320:1 NEWLINE
18418420:1 glyph ++
185−20:4 name field-bad
186−20:14 glyph ^-
187−20:17 name record
188−20:24 glyph [
189−20:25 tight glyph `
190−20:26 tight lit %bad
191−20:31 glyph ~[
192−20:33 tight glyph `
193−20:34 tight str "hi"
194−20:38 tight glyph ]
195−20:39 tight glyph ]
185+20:4 name field-value-bad
186+20:20 glyph ^-
187+20:23 name record
188+20:30 glyph [
189+20:31 tight glyph `
190+20:32 tight lit %bad
191+20:37 glyph ~[
192+20:39 tight glyph `
193+20:40 tight str "hi"
194+20:44 tight glyph ]
195+20:45 tight glyph ]
19619621:1 NEWLINE
19719721:1 glyph ++
19819821:4 name mimic-mismatch
@@ -278,17 +278,17 @@
27827834:1 DEDENT
27927934:1 NEWLINE
28028034:1 glyph ++
281−34:4 name field-wrong-payload
282−34:24 glyph ^-
283−34:27 name record
284−34:34 glyph [
285−34:35 tight glyph `
286−34:36 tight lit %go
287−34:40 glyph ~[
288−34:42 tight glyph `
289−34:43 tight lit ~zod
290−34:47 tight glyph ]
291−34:48 tight glyph ]
281+34:4 name field-value-wrong-payload
282+34:30 glyph ^-
283+34:33 name record
284+34:40 glyph [
285+34:41 tight glyph `
286+34:42 tight lit %go
287+34:46 glyph ~[
288+34:48 tight glyph `
289+34:49 tight lit ~zod
290+34:53 tight glyph ]
291+34:54 tight glyph ]
29229235:1 NEWLINE
29329335:1 glyph ++
29429435:4 name wrong-name
tests/golden/types-unit-context/tree.txt+21−21
@@ -70,20 +70,20 @@
7070 (call 18:14
7171 (wing 18:14 accept)
7272 (unit 18:21 (lit 18:22 %bad)))))
73− (value 19:1 field
74− (cast 19:10
75− (ref 19:13 record)
76− (tuple 19:20
77− (unit 19:21 (lit 19:22 %go))
78− (list 19:26
79− (unit 19:28 (str 19:29 "hi"))))))
80− (value 20:1 field-bad
81− (cast 20:14
82− (ref 20:17 record)
83− (tuple 20:24
84− (unit 20:25 (lit 20:26 %bad))
85− (list 20:31
86− (unit 20:33 (str 20:34 "hi"))))))
73+ (value 19:1 field-value
74+ (cast 19:16
75+ (ref 19:19 record)
76+ (tuple 19:26
77+ (unit 19:27 (lit 19:28 %go))
78+ (list 19:32
79+ (unit 19:34 (str 19:35 "hi"))))))
80+ (value 20:1 field-value-bad
81+ (cast 20:20
82+ (ref 20:23 record)
83+ (tuple 20:30
84+ (unit 20:31 (lit 20:32 %bad))
85+ (list 20:37
86+ (unit 20:39 (str 20:40 "hi"))))))
8787 (value 21:1 mimic-mismatch
8888 (cast 21:19
8989 (apply 21:22 mimic (aura 21:29 @t))
@@ -120,13 +120,13 @@
120120 (unit 30:29 (str 30:30 "hi")))))
121121 (mold 31:1 alt
122122 (union 32:3 (const 32:3 %go) (const 33:3 %stay)))
123− (value 34:1 field-wrong-payload
124− (cast 34:24
125− (ref 34:27 record)
126− (tuple 34:34
127− (unit 34:35 (lit 34:36 %go))
128− (list 34:40
129− (unit 34:42 (lit 34:43 ~zod))))))
123+ (value 34:1 field-value-wrong-payload
124+ (cast 34:30
125+ (ref 34:33 record)
126+ (tuple 34:40
127+ (unit 34:41 (lit 34:42 %go))
128+ (list 34:46
129+ (unit 34:48 (lit 34:49 ~zod))))))
130130 (value 35:1 wrong-name
131131 (cast 35:15
132132 (ref 35:18 record)
tests/golden/types-unit-context/types.txt+15−15
@@ -43,14 +43,14 @@ partial inference; module not checked
4343/tests/golden/types-unit-context/source.jibb:18:22: tag
4444++ bad-call (accept `%bad)
4545 ^
46−++ field: [u=(unit msg) xs=(list (unit @t))]
47−++ field-bad: msg has no case `%bad`
48−/tests/golden/types-unit-context/source.jibb:20:17: expected union
49−++ field-bad ^- record [`%bad ~[`"hi"]]
50− ^
51−/tests/golden/types-unit-context/source.jibb:20:26: tag
52−++ field-bad ^- record [`%bad ~[`"hi"]]
53− ^
46+++ field-value: [u=(unit msg) xs=(list (unit @t))]
47+++ field-value-bad: msg has no case `%bad`
48+/tests/golden/types-unit-context/source.jibb:20:23: expected union
49+++ field-value-bad ^- record [`%bad ~[`"hi"]]
50+ ^
51+/tests/golden/types-unit-context/source.jibb:20:32: tag
52+++ field-value-bad ^- record [`%bad ~[`"hi"]]
53+ ^
5454++ mimic-mismatch: cast constraint is not supported by partial inference
5555++ without-context: tag needs context in partial inference
5656++ pending: tag needs context in partial inference
@@ -58,13 +58,13 @@ partial inference; module not checked
5858++ preserve: $-(A (unit A))
5959++ force: explicit capital constraints are not supported by partial inference
6060+$ alt: cases proven disjoint; mold not checked
61−++ field-wrong-payload: unit payload does not fit its expected type
62−/tests/golden/types-unit-context/source.jibb:34:27: expected unit payload has type @t
63−++ field-wrong-payload ^- record [`%go ~[`~zod]]
64− ^
65−/tests/golden/types-unit-context/source.jibb:34:43: payload has type @p
66−++ field-wrong-payload ^- record [`%go ~[`~zod]]
67− ^
61+++ field-value-wrong-payload: unit payload does not fit its expected type
62+/tests/golden/types-unit-context/source.jibb:34:33: expected unit payload has type @t
63+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
64+ ^
65+/tests/golden/types-unit-context/source.jibb:34:49: payload has type @p
66+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
67+ ^
6868++ wrong-name: cast mold and expression type do not unify
6969/tests/golden/types-unit-context/source.jibb:35:18: cast mold
7070++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
tests/lib/jibb-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-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-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.hoon+1−1
@@ -33,7 +33,7 @@
3333 =/ bad-owner=jfile-result:jibb
3434 (infer-jibb-file:jibb /ui/tree/jibb owner-negative ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
3535 =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-negative)
36− =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.owner)
36+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.owner)
3737 ?~ mold 'BAD owner mold'
3838 ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
3939 =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
tests/lib/jibb-generic-pattern.hoon+1−1
@@ -32,7 +32,7 @@
3232 =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-bad)
3333 =/ bad=jfile-result:jibb
3434 (infer-jibb-file:jibb /ui/tree/jibb owner-bad ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35− =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.checked)
35+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.checked)
3636 ?~ mold 'BAD owner mold'
3737 ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
3838 =/ target=itype:jibb typ.u.mold(args ~[[%atom %t]])
tests/lib/jibb-generic-recursion.hoon+4−4
@@ -1,4 +1,4 @@
1−:: Source-backed recursive identities; this is not a runtime element model.
1+:: Source-backed recursive identities; this is not the runtime UI element model.
22/+ jibb
33/* real-prelude %jibb /lib/jibb/prelude/jibb
44/* real-internal %jibb /lib/jibb/internal/jibb
@@ -42,7 +42,7 @@
4242 =/ module=jfile-result:jibb
4343 (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
4444 ?: ?=(%| -.module) (cat 3 'BAD recursive module: ' p.module)
45− =/ scheme=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.module)
45+ =/ scheme=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.module)
4646 ?~ scheme 'BAD missing recursive mold'
4747 ?. ?=(%grec -.typ.u.scheme) 'BAD missing recursive identity'
4848 =/ typ=itype:jibb typ.u.scheme
@@ -116,8 +116,8 @@
116116 =/ shape-changed=?
117117 ?~ old |
118118 ?~ new |
119− =/ a=(unit ischeme:jibb) (find-jibb-mold:jibb %element u.old)
120− =/ b=(unit ischeme:jibb) (find-jibb-mold:jibb %element u.new)
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)
121121 ?~ a |
122122 ?~ b |
123123 ?. &(?=(%grec -.typ.u.a) ?=(%grec -.typ.u.b)) |
tests/lib/jibb-list-alias-guards.hoon+1−1
@@ -4,7 +4,7 @@
44|%
55++ list-alias-output
66 ^- @t
7− =/ src=@t (crip "++ text |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
7+ =/ src=@t (crip "++ text-value |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
88 =/ canonical=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
99 =/ altered=@t (crip "+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
1010 =/ omitted=@t (crip "+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
tests/lib/jibb-program-init.hoonnew file+134
@@ -0,0 +1,134 @@
1+:: Transactional direct-program initializer context, without UI execution.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* initializer %txt /tests/type-program-main/initializer/txt
6+/* initializer-consumer %txt /tests/type-program-main/initializer-consumer/txt
7+/* initializer-unfaced %txt /tests/type-program-main/initializer-unfaced/txt
8+/* initializer-error %txt /tests/type-program-main/initializer-error/txt
9+/* initializer-earlier %txt /tests/type-program-main/initializer-earlier/txt
10+/* initializer-model %txt /tests/type-program-main/initializer-model/txt
11+/* initializer-message %txt /tests/type-program-main/initializer-message/txt
12+/* initializer-generic %txt /tests/type-program-main/initializer-generic/txt
13+/* initializer-missing %txt /tests/type-program-main/initializer-missing/txt
14+/* initializer-tag %txt /tests/type-program-main/initializer-tag/txt
15+/* initializer-no-main %txt /tests/type-program-main/initializer-no-main/txt
16+/* initializer-subs %txt /tests/type-program-main/initializer-subs/txt
17+|%
18+++ text
19+ |= lines=wain
20+ ^- @t
21+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
22+::
23+++ program-init-prepared
24+ |= [public=@t private=@t]
25+ ^- (unit iprelude:jibb)
26+ (prepare-prelude-with-internal:jibb public private)
27+::
28+++ program-init-detailed
29+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
30+ ^- jfile-detailed-result:jibb
31+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
32+::
33+++ program-init-legacy
34+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
35+ ^- jfile-result:jibb
36+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
37+::
38+++ program-init-positive
39+ |= [at=path src=@t downstream=(unit @t) prepared=iprelude:jibb]
40+ ^- (list tape)
41+ =/ detailed=jfile-detailed-result:jibb (program-init-detailed at src ~ prepared)
42+ ?: ?=(%| -.detailed) ~["contextual direct program init was rejected"]
43+ =/ checked=ifile:jibb iface.p.detailed
44+ =/ legacy=jfile-result:jibb (program-init-legacy at src ~ prepared)
45+ ?: ?=(%| -.legacy) ~["legacy adapter rejected contextual init"]
46+ ?. =(values.checked values.iface.p.legacy) ~["contextual structured and legacy values differ"]
47+ =/ init=(unit ischeme:jibb) (ienv-lookup:jibb %init values.checked)
48+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
49+ ?~ init ~["contextual init interface is missing"]
50+ ?~ main ~["contextual main interface is missing"]
51+ ?. ?=(~ vars.u.init) ~["contextual init interface is not closed"]
52+ =/ expected=tape "$-((list @t) [xs=(list @t) [draft=@t error=(unit @t)]])"
53+ ?. =((show-itype:jibb typ.u.init ~) expected) ~["contextual init interface type differs"]
54+ ?. ?=(~ vars.u.main) ~["contextual main interface is not closed"]
55+ =/ fields=(list itype:jibb) (record-fields-named:jibb %init typ.u.main ~)
56+ ?. =(fields ~[typ.u.init]) ~["contextual main initializer field differs"]
57+ ?~ source.checked ~["contextual program source evidence is missing"]
58+ ?. =(u.source.checked src) ~["contextual program source evidence differs"]
59+ ?~ graph.checked ~["contextual program request graph is missing"]
60+ ?~ downstream ~
61+ =/ consumer-at=path /tests/program-main/initializer-consumer/jibb
62+ =/ imported=jfile-detailed-result:jibb
63+ (program-init-detailed consumer-at u.downstream ~[[at src]] prepared)
64+ ?: ?=(%| -.imported) ~[(weld "downstream contextual initializer import was rejected: " (trip message.p.imported))]
65+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
66+ ?~ use ~["downstream contextual initializer is missing"]
67+ ?. =((show-itype:jibb typ.u.use ~) expected) ~["downstream contextual initializer type differs"]
68+ ?. =(u.use u.init) ~["downstream contextual initializer scheme differs"]
69+ ~
70+::
71+++ program-init-negative
72+ |= [label=@t at=path src=@t boundary=@t prepared=iprelude:jibb]
73+ ^- (list tape)
74+ =/ detailed=jfile-detailed-result:jibb (program-init-detailed at src ~ prepared)
75+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
76+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
77+ ?. =(message.p.detailed boundary) ~[(weld (trip label) ": rejected at the wrong boundary")]
78+ =/ legacy=jfile-result:jibb (program-init-legacy at src ~ prepared)
79+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
80+ ?. =(p.legacy boundary) ~[(weld (trip label) ": legacy boundary differs")]
81+ ~
82+::
83+++ program-init-negative-cases
84+ |= [cases=(list [label=@t at=path src=@t boundary=@t]) prepared=iprelude:jibb]
85+ ^- (list tape)
86+ ?~ cases ~
87+ %+ weld
88+ (program-init-negative label.i.cases at.i.cases src.i.cases boundary.i.cases prepared)
89+ $(cases t.cases)
90+::
91+++ program-init-errors
92+ |= [public=@t private=@t island=@t downstream=@t unfaced=@t negatives=(list @t)]
93+ ^- (list tape)
94+ =/ prepared=(unit iprelude:jibb) (program-init-prepared public private)
95+ ?~ prepared ~["synthetic program prelude did not prepare for contextual init"]
96+ =/ at=path /tests/program-main/initializer/jibb
97+ =/ positives=(list tape)
98+ %+ weld
99+ (program-init-positive at island `downstream u.prepared)
100+ (program-init-positive /tests/program-main/initializer-unfaced/jibb unfaced ~ u.prepared)
101+ ?. =(9 (lent negatives)) ~["contextual negative fixture count differs"]
102+ =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}")
103+ =/ cases=(list [label=@t at=path src=@t boundary=@t])
104+ :~ ['incompatible error field' at (snag 0 negatives) definitions]
105+ ['earlier tuple mismatch' at (snag 1 negatives) definitions]
106+ ['inconsistent model' at (snag 2 negatives) definitions]
107+ ['inconsistent message' at (snag 3 negatives) definitions]
108+ ['missing/generic data sample' at (snag 4 negatives) definitions]
109+ ['missing initializer' at (snag 5 negatives) definitions]
110+ ['unrelated pending tag' at (snag 6 negatives) definitions]
111+ ['non-main same source' at (snag 7 negatives) definitions]
112+ ['init and subs unresolved' at (snag 8 negatives) definitions]
113+ :- 'API path'
114+ [/ui/api/program-main/jibb island 'module kind needs unsupported inference: /ui/api/program-main/jibb']
115+ :- 'store path'
116+ [/ui/stores/program-main/jibb island 'module kind needs unsupported inference: /ui/stores/program-main/jibb']
117+ ==
118+ (weld positives (program-init-negative-cases cases u.prepared))
119+::
120+++ test-program-init
121+ ^- tang
122+ =/ negatives=(list @t)
123+ :~ (text initializer-error)
124+ (text initializer-earlier)
125+ (text initializer-model)
126+ (text initializer-message)
127+ (text initializer-generic)
128+ (text initializer-missing)
129+ (text initializer-tag)
130+ (text initializer-no-main)
131+ (text initializer-subs)
132+ ==
133+ (turn (program-init-errors prelude internal (text initializer) (text initializer-consumer) (text initializer-unfaced) negatives) |=(reason=tape leaf+reason))
134+--
tests/lib/jibb-program-main.hoonnew file+141
@@ -0,0 +1,141 @@
1+:: Narrow closed program-main checking, without execution or watchability claims.
2+/+ jibb
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* source %txt /tests/type-program-main/source/txt
6+/* consumer %txt /tests/type-program-main/consumer/txt
7+/* gate-model %txt /tests/type-program-main/gate-model/txt
8+/* gate-data %txt /tests/type-program-main/gate-data/txt
9+/* nonempty-subs %txt /tests/type-program-main/nonempty-subs/txt
10+/* mismatched-model %txt /tests/type-program-main/mismatched-model/txt
11+/* arbitrary-main %txt /tests/type-program-main/arbitrary-main/txt
12+/* alias-main %txt /tests/type-program-main/alias-main/txt
13+/* open-message %txt /tests/type-program-main/open-message/txt
14+|%
15+++ text
16+ |= lines=wain
17+ ^- @t
18+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
19+::
20+++ program-prepared
21+ |= [public=@t private=@t]
22+ ^- (unit iprelude:jibb)
23+ (prepare-prelude-with-internal:jibb public private)
24+::
25+++ program-main-detailed
26+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
27+ ^- jfile-detailed-result:jibb
28+ (infer-jibb-file-detailed:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
29+::
30+++ program-main-legacy
31+ |= [at=path src=@t modules=jbundle:jibb prepared=iprelude:jibb]
32+ ^- jfile-result:jibb
33+ (infer-jibb-file:jibb at src ~ ~ modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
34+::
35+++ program-main-negative-errors
36+ |= [label=@t at=path src=@t prepared=iprelude:jibb]
37+ ^- (list tape)
38+ =/ detailed=jfile-detailed-result:jibb (program-main-detailed at src ~ prepared)
39+ ?: ?=(%& -.detailed) ~[(weld (trip label) ": structured check accepted")]
40+ ?. ?=(~ overlap.p.detailed) ~[(weld (trip label) ": unexpected overlap evidence")]
41+ =/ legacy=jfile-result:jibb (program-main-legacy at src ~ prepared)
42+ ?: ?=(%& -.legacy) ~[(weld (trip label) ": legacy check accepted")]
43+ ?. =(p.legacy message.p.detailed) ~[(weld (trip label) ": adapter messages differ")]
44+ ~
45+::
46+++ program-main-errors
47+ |= [public=@t private=@t island=@t downstream=@t negatives=(list @t)]
48+ ^- (list tape)
49+ =/ prepared=(unit iprelude:jibb)
50+ (program-prepared public private)
51+ ?~ prepared ~["synthetic program prelude did not prepare"]
52+ =/ at=path /tests/program-main/island/jibb
53+ =/ detailed=jfile-detailed-result:jibb (program-main-detailed at island ~ u.prepared)
54+ ?: ?=(%| -.detailed) ~["direct closed program main was rejected"]
55+ =/ checked=ifile:jibb iface.p.detailed
56+ ?~ graph.checked ~["program request graph evidence is missing"]
57+ =/ legacy=jfile-result:jibb (program-main-legacy at island ~ u.prepared)
58+ ?: ?=(%| -.legacy) ~["legacy adapter rejected a closed program main"]
59+ ?. =(values.checked values.iface.p.legacy) ~["structured and legacy interface values differ"]
60+ =/ init=(unit ischeme:jibb) (ienv-lookup:jibb %init values.checked)
61+ =/ update=(unit ischeme:jibb) (ienv-lookup:jibb %update values.checked)
62+ =/ view=(unit ischeme:jibb) (ienv-lookup:jibb %view values.checked)
63+ =/ subs=(unit ischeme:jibb) (ienv-lookup:jibb %subs values.checked)
64+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
65+ ?~ init ~["init interface is missing"]
66+ ?~ update ~["update interface is missing"]
67+ ?~ view ~["view interface is missing"]
68+ ?~ subs ~["subs interface is missing"]
69+ ?~ main ~["main interface is missing"]
70+ =/ parsed (parse:jibb at island)
71+ ?: ?=(%| -.parsed) ~["program source no longer parses"]
72+ =/ main-def=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
73+ ?~ main-def ~["program main definition is missing"]
74+ =/ parts (program-main-parts:jibb u.main-def)
75+ ?~ parts ~["program main parts are missing"]
76+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked ~ ~ u.graph.checked)
77+ ~["program kind was accepted without its source-backed prelude"]
78+ =/ program-scheme=(unit ischeme:jibb) (ienv-lookup:jibb %program values.iface.u.prepared)
79+ ?~ program-scheme ~["synthetic program scheme is missing"]
80+ ?. ?=(%fn -.typ.u.program-scheme) ~["synthetic program value is not a gate"]
81+ =/ broken-values=ienv:jibb
82+ (skim values.iface.u.prepared |=(entry=[name=term scheme=ischeme:jibb] !=(%program name.entry)))
83+ =/ broken=ifile:jibb
84+ iface.u.prepared(values [[%program [[%fn sample.typ.u.program-scheme [%atom %ud]] vars.u.program-scheme]] broken-values])
85+ =/ malformed=jfile-detailed-result:jibb
86+ (infer-jibb-file-detailed:jibb at island ~ ~ ~ ~[at] values.u.prepared molds.u.prepared ~ `broken)
87+ ?: ?=(%& -.malformed) ~["program result was not checked against the program mold"]
88+ =/ kind-error=@t (crip "module kind needs unsupported inference: {(spud at)}")
89+ ?. =(message.p.malformed kind-error) ~["malformed program failed before the kind check"]
90+ =/ open=jfile-detailed-result:jibb
91+ (program-main-detailed at (snag 6 negatives) ~ u.prepared)
92+ ?: ?=(%& -.open) ~["open program message was accepted"]
93+ =/ other-values=ienv:jibb
94+ (skim values.checked |=(entry=[name=term scheme=ischeme:jibb] !=(%main name.entry)))
95+ =/ open-values=ienv:jibb [[%main u.main(vars ~[0])] other-values]
96+ ?: (program-main-closed:jibb u.parts defs.p.parsed open-values `iface.u.prepared ~ u.graph.checked)
97+ ~["generic main scheme passed the closure check"]
98+ =/ model=itype:jibb [%face %count [%atom %ud]]
99+ ?. =(u.init [[%fn [%atom %t] model] ~]) ~["init interface type differs"]
100+ ?. ?=(~ vars.u.main) ~["main interface is not closed"]
101+ =/ init-fields=(list itype:jibb) (record-fields-named:jibb %init typ.u.main ~)
102+ =/ update-fields=(list itype:jibb) (record-fields-named:jibb %update typ.u.main ~)
103+ =/ view-fields=(list itype:jibb) (record-fields-named:jibb %view typ.u.main ~)
104+ =/ subs-fields=(list itype:jibb) (record-fields-named:jibb %subs typ.u.main ~)
105+ ?. =(init-fields ~[typ.u.init]) ~["main initializer field differs"]
106+ ?. &(=(1 (lent update-fields)) =(1 (lent view-fields)) =(1 (lent subs-fields)))
107+ ~["main component fields differ"]
108+ ?~ source.checked ~["program source evidence is missing"]
109+ ?. =(u.source.checked island) ~["program source evidence differs"]
110+ =/ consumer-at=path /tests/program-main/consumer/jibb
111+ =/ imported=jfile-detailed-result:jibb
112+ (program-main-detailed consumer-at downstream ~[[at island]] u.prepared)
113+ ?: ?=(%| -.imported) ~[(weld "ordinary downstream program import was rejected: " (trip message.p.imported))]
114+ =/ use=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
115+ ?~ use ~["downstream imported initializer is missing"]
116+ ?. =(u.use u.init) ~["downstream imported initializer type differs"]
117+ ?. =(7 (lent negatives)) ~["focused negative fixture count differs"]
118+ =/ cases=(list [label=@t at=path src=@t])
119+ :~ ['gate in model' at (snag 0 negatives)]
120+ ['gate in data' at (snag 1 negatives)]
121+ ['nonempty subs' at (snag 2 negatives)]
122+ ['mismatched model' at (snag 3 negatives)]
123+ ['arbitrary main' at (snag 4 negatives)]
124+ ['store path' /ui/stores/program-main/jibb island]
125+ ['program alias' at (snag 5 negatives)]
126+ ==
127+ (zing (turn cases |=(c=[label=@t at=path src=@t] (program-main-negative-errors label.c at.c src.c u.prepared))))
128+::
129+++ test-program-main
130+ ^- tang
131+ =/ negatives=(list @t)
132+ :~ (text gate-model)
133+ (text gate-data)
134+ (text nonempty-subs)
135+ (text mismatched-model)
136+ (text arbitrary-main)
137+ (text alias-main)
138+ (text open-message)
139+ ==
140+ (turn (program-main-errors prelude internal (text source) (text consumer) negatives) |=(reason=tape leaf+reason))
141+--
tests/lib/jibb-program-watch.hoonnew file+209
@@ -0,0 +1,209 @@
1+:: Direct request-value watchability for a synthetic program over the real todo API.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* sur %txt /tests/type-api-paths/todo-sur/txt
6+/* action %txt /tests/type-api-paths/todo-action/txt
7+/* todos %txt /tests/type-api-paths/todos/txt
8+/* update %txt /tests/type-api-paths/todo-update/txt
9+/* item %txt /tests/type-api-paths/todo-item/txt
10+/* api %txt /tests/type-api-paths/api/txt
11+|%
12+++ text
13+ |= lines=wain
14+ ^- @t
15+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
16+::
17+++ program-watch-prepared
18+ |= [public=@t private=@t]
19+ ^- (unit iprelude:jibb)
20+ (prepare-prelude-with-internal:jibb public private)
21+::
22+++ program-watch-detailed
23+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
24+ ^- jfile-detailed-result:jibb
25+ (infer-jibb-file-detailed:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
26+::
27+++ program-watch-source
28+ |= [extra=@t subscriptions=@t]
29+ ^- @t
30+ %+ rap 3
31+ :~ '/= api /ui/api/todo\0a'
32+ '+$ model [count=@ud]\0a'
33+ '+$ msg\0a [%got todos=(list item.api)]\0a [%one item=todo-item.api]\0a %other\0a'
34+ extra
35+ '++ main (program init update view subs)\0a'
36+ '++ init |= input=@t ^- model [count=0]\0a'
37+ '++ update |= [m=msg state=model]\0a ^- [model (list (cmd msg))] [state ~]\0a'
38+ '++ view |= state=model ^- (element msg) (text "view")\0a'
39+ subscriptions
40+ ==
41+::
42+++ program-watch-agent-source
43+ ^- @t
44+ %+ rap 3
45+ :~ '/= api /ui/api/todo\0a'
46+ '+$ model [count=@ud]\0a'
47+ '++ receive |= input=[mark=@tas state=(unit *) fact=*]\0a ^- [state=* message=@t] [state=0 message="ok"]\0a'
48+ '++ request-path ^- path ~[%todos]\0a'
49+ '++ request ^- (ask @t)\0a [%agent api="/ui/api/todo" case=%todos agent=%todo path=request-path scry=~ receive=receive]\0a'
50+ '++ main (program init update view subs)\0a'
51+ '++ init |= input=@t ^- model [count=0]\0a'
52+ '++ update |= [m=@t state=model]\0a ^- [model (list (cmd @t))] [state ~]\0a'
53+ '++ view |= state=model ^- (element @t) (text "ok")\0a'
54+ '++ subs |= state=model\0a ^- (list (sub @t))\0a ~[[%watch request]]\0a'
55+ ==
56+::
57+++ program-watch-errors
58+ |= [public=@t private=@t sur=@t action=@t todos=@t update=@t item=@t api=@t]
59+ ^- (list tape)
60+ =/ prepared=(unit iprelude:jibb) (program-watch-prepared public private)
61+ ?~ prepared ~["synthetic program prelude did not prepare"]
62+ =/ todo=type -:(ride -:!>(..zuse) sur)
63+ =/ subject=type [%cell [%face %todo todo] -:!>(..zuse)]
64+ =/ ma=* (read-mark:jibb-import %todo-action -:(ride subject action))
65+ =/ mt=* (read-mark:jibb-import %todos -:(ride subject todos))
66+ =/ mu=* (read-mark:jibb-import %todo-update -:(ride subject update))
67+ =/ mi=* (read-mark:jibb-import %todo-item -:(ride subject item))
68+ =/ marks=imark-externals:jibb ~[[%todo-action ma] [%todos mt] [%todo-update mu] [%todo-item mi]]
69+ =/ item-input=* (read-named:jibb-import %todo %item todo)
70+ =/ externals=iexternals:jibb ~[[%todo %item item-input]]
71+ =/ api-at=path /ui/api/todo/jibb
72+ =/ api-result=jfile-detailed-result:jibb
73+ (program-watch-detailed api-at api externals marks ~ u.prepared)
74+ ?: ?=(%| -.api-result) ~["real todo API did not check"]
75+ =/ api-iface=ifile:jibb iface.p.api-result
76+ ?~ graph.api-iface ~["real todo API evidence is missing"]
77+ =/ direct-subs=@t '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (todos.api |=%got)]]\0a'
78+ =/ island=@t (program-watch-source '' direct-subs)
79+ =/ at=path /tests/program-watch/island/jibb
80+ =/ modules=jbundle:jibb ~[[api-at api]]
81+ =/ detailed=jfile-detailed-result:jibb
82+ (program-watch-detailed at island externals marks modules u.prepared)
83+ ?: ?=(%| -.detailed) ~[(weld "direct request watch was rejected: " (trip message.p.detailed))]
84+ =/ checked=ifile:jibb iface.p.detailed
85+ ?~ graph.checked ~["program request graph evidence is missing"]
86+ =/ legacy=jfile-result:jibb
87+ (infer-jibb-file:jibb at island externals marks modules ~[at] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
88+ ?: ?=(%| -.legacy) ~["legacy adapter rejected a direct request watch"]
89+ ?. =(values.checked values.iface.p.legacy) ~["structured and legacy interface values differ"]
90+ =/ subs=(unit ischeme:jibb) (ienv-lookup:jibb %subs values.checked)
91+ =/ main=(unit ischeme:jibb) (ienv-lookup:jibb %main values.checked)
92+ ?~ subs ~["subs interface is missing"]
93+ ?~ main ~["main interface is missing"]
94+ ?. &(?=(~ vars.u.subs) ?=(~ (itype-vars:jibb typ.u.subs))) ~["subs interface is not closed"]
95+ =/ subs-fields=(list itype:jibb) (record-fields-named:jibb %subs typ.u.main ~)
96+ ?. ?=([* ~] subs-fields) ~["closed program does not have one subs field"]
97+ =/ model=(unit ischeme:jibb) (find-jibb-mold:jibb %model checked)
98+ =/ msg=(unit ischeme:jibb) (find-jibb-mold:jibb %msg checked)
99+ =/ list-template=(unit ischeme:jibb) (find-jibb-mold:jibb %list iface.u.prepared)
100+ =/ sub=(unit ischeme:jibb) (find-jibb-mold:jibb %sub iface.u.prepared)
101+ ?~ model ~["model mold is missing"]
102+ ?~ msg ~["message mold is missing"]
103+ ?~ list-template ~["list mold is missing"]
104+ ?~ sub ~["sub mold is missing"]
105+ =/ message-sub=(unit itype:jibb) (template-apply:jibb u.sub ~[typ.u.msg])
106+ ?~ message-sub ~["message subscription type did not instantiate"]
107+ =/ subs-result=(unit itype:jibb) (template-apply:jibb u.list-template ~[u.message-sub])
108+ ?~ subs-result ~["subscription list type did not instantiate"]
109+ =/ expected-subs=itype:jibb [%fn typ.u.model u.subs-result]
110+ ?. =(typ.u.subs expected-subs) ~["subs interface has the wrong exact type"]
111+ ?. =((lent requests.u.graph.checked) (lent requests.u.graph.api-iface)) ~["merged API evidence count differs"]
112+ ?. (levy requests.u.graph.checked |=(r=irequest-evidence:jibb (lien requests.u.graph.api-iface |=(a=irequest-evidence:jibb =(r a))))) ~["merged API evidence differs"]
113+ =/ matching=(list irequest-evidence:jibb)
114+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb &(=(api-at.r api-at) =(%todos name.r))))
115+ ?. ?=([* ~] matching) ~["direct todos evidence is not unique"]
116+ =/ evidence=irequest-evidence:jibb i.matching
117+ ?. =(api-source.evidence api) ~["request evidence does not retain the exact API source"]
118+ ?. &(?=(~ scry.path.path.evidence) ?=(~ diffs.path.evidence) ?=(~ diffs.path.path.evidence))
119+ ~["plain todos evidence acquired scry or diffs"]
120+ ?: (lien segments.path.path.evidence |=(p=pseg:jibb !?=(%knot -.p))) ~["plain todos evidence acquired parameters"]
121+ =/ consumer-at=path /tests/program-watch/consumer/jibb
122+ =/ consumer=@t '/= island-prog /tests/program-watch/island\0a++ imported subs.island-prog\0a'
123+ =/ imported=jfile-detailed-result:jibb
124+ (program-watch-detailed consumer-at consumer externals marks [[at island] modules] u.prepared)
125+ ?: ?=(%| -.imported) ~["downstream program import was rejected"]
126+ =/ imported-subs=(unit ischeme:jibb) (ienv-lookup:jibb %imported values.iface.p.imported)
127+ ?~ imported-subs ~["downstream imported subs is missing"]
128+ =/ expected-import=itype:jibb (itype-in-import:jibb typ.u.subs checked %island-prog `iface.u.prepared)
129+ ?. &(?=(~ vars.u.imported-subs) =(typ.u.imported-subs expected-import)) ~["downstream imported subs type differs"]
130+ =/ parsed (parse:jibb at island)
131+ ?: ?=(%| -.parsed) ~["program source no longer parses"]
132+ =/ main-def=(unit def:jibb) (program-main-def:jibb defs.p.parsed)
133+ ?~ main-def ~["program main definition is missing"]
134+ =/ parts (program-main-parts:jibb u.main-def)
135+ ?~ parts ~["program main parts are missing"]
136+ =/ resolved=ijimports:jibb ~[[%api api-iface]]
137+ =/ others=(list irequest-evidence:jibb)
138+ (skim requests.u.graph.checked |=(r=irequest-evidence:jibb !&(=(api-at.r api-at) =(%todos name.r))))
139+ =/ missing=irequest-graph:jibb u.graph.checked(requests others)
140+ =/ mismatch=irequest-graph:jibb u.graph.checked(requests [evidence(api-source 'mismatched') others])
141+ =/ scry=irequest-graph:jibb u.graph.checked(requests [evidence(scry.path.path `~[[%knot ~.peek]]) others])
142+ =/ ambiguous=irequest-graph:jibb u.graph.checked(requests [evidence requests.u.graph.checked])
143+ =/ evidence-cases=(list [label=tape graph=irequest-graph:jibb])
144+ :~ ["missing evidence" missing]
145+ ["API-source mismatch" mismatch]
146+ ["scry declaration evidence" scry]
147+ ["ambiguous evidence" ambiguous]
148+ ==
149+ =/ evidence-failures=(list tape)
150+ %+ murn evidence-cases
151+ |= c=[label=tape graph=irequest-graph:jibb]
152+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared resolved graph.c)
153+ `label.c
154+ ~
155+ ?^ evidence-failures ~[(weld "bad evidence passed watchability: " i.evidence-failures)]
156+ =/ ordinary-values=ienv:jibb
157+ (skim values.api-iface |=(entry=[name=term scheme=ischeme:jibb] !=(%todos name.entry)))
158+ =/ forged=ifile:jibb
159+ api-iface(values [[%todos [[%fn [%atom %t] [%atom %t]] ~]] ordinary-values])
160+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api forged]] u.graph.checked)
161+ ~["same-named non-derived member passed watchability"]
162+ =/ detached=ifile:jibb api-iface(graph `u.graph.api-iface(requests ~))
163+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api detached]] u.graph.checked)
164+ ~["evidence outside the selected interface passed watchability"]
165+ =/ incoherent=irequest-evidence:jibb evidence(name.path.path %other)
166+ =/ api-others=(list irequest-evidence:jibb)
167+ (skim requests.u.graph.api-iface |=(r=irequest-evidence:jibb !&(=(api-at.r api-at) =(%todos name.r))))
168+ =/ incoherent-api=ifile:jibb api-iface(graph `u.graph.api-iface(requests [incoherent api-others]))
169+ =/ incoherent-graph=irequest-graph:jibb u.graph.checked(requests [incoherent others])
170+ ?: (program-main-closed:jibb u.parts defs.p.parsed values.checked `iface.u.prepared ~[[%api incoherent-api]] incoherent-graph)
171+ ~["inconsistent request case names passed watchability"]
172+ =/ kind-error=@t (crip "module kind needs unsupported inference: {(spud at)}")
173+ =/ negatives=(list [label=tape src=@t])
174+ :~ :- "pure watch"
175+ (program-watch-source '' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (pure %other)]]\0a')
176+ :- "correctly typed hand-built agent"
177+ program-watch-agent-source
178+ :- "request helper"
179+ (program-watch-source '++ request ^- (ask msg) (todos.api |=%got)\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch request]]\0a')
180+ :- "request alias"
181+ (program-watch-source '++ request todos.api\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (request |=%got)]]\0a')
182+ :- "parameterized todo-by-id"
183+ (program-watch-source '' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (todo-by-id.api 1 |=%one)]]\0a')
184+ :- "diff changes"
185+ (program-watch-source '++ fold |= [d=[%todo-update todo-update.api] s=todos.api] s\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[[%watch (changes.api |=%got fold)]]\0a')
186+ :- "multi-item subscriptions"
187+ (program-watch-source '++ first ^- (sub msg) [%watch (todos.api |=%got)]\0a++ second ^- (sub msg) [%watch (pure %other)]\0a' '++ subs |= state=model\0a ^- (list (sub msg))\0a ~[first second]\0a')
188+ ==
189+ %+ weld (turn evidence-failures |=(reason=tape reason))
190+ %+ murn negatives
191+ |= c=[label=tape src=@t]
192+ =/ bad=jfile-detailed-result:jibb
193+ (program-watch-detailed at src.c externals marks modules u.prepared)
194+ ?: ?=(%& -.bad) `[(weld label.c ": accepted")]
195+ ?. =(message.p.bad kind-error) `[(weld label.c ": did not reach watchability")]
196+ ~
197+::
198+++ test-program-watch
199+ ^- tang
200+ ?~ sur ~[leaf+"program-watch fixture sur is missing"]
201+ ?~ action ~[leaf+"program-watch fixture action is missing"]
202+ ?~ todos ~[leaf+"program-watch fixture todos is missing"]
203+ ?~ update ~[leaf+"program-watch fixture update is missing"]
204+ ?~ item ~[leaf+"program-watch fixture item is missing"]
205+ ?~ api ~[leaf+"program-watch fixture api is missing"]
206+ =/ failures=(list tape)
207+ (program-watch-errors prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api))
208+ (turn failures |=(reason=tape leaf+reason))
209+--
tests/lib/jibb-request-guards.hoon+2−2
@@ -127,8 +127,8 @@
127127 =/ bad-cache=jcache:jibb ~[[helper-at mismatched]]
128128 =/ wrong (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep bad-cache pre)
129129 ?: ?=(%& -.wrong) 'cache key and interface path mismatch accepted'
130− =/ old-client=@t '++ text "safe"\0a'
131− =/ dep=@t '/= c /lib/client\0a++ value text.c\0a'
130+ =/ old-client=@t '++ text-value "safe"\0a'
131+ =/ dep=@t '/= c /lib/client\0a++ value text-value.c\0a'
132132 =/ root=@t '/= h /lib/helper\0a++ x value.h\0a'
133133 =/ cycle-bundle=jbundle:jibb ~[[client old-client] [helper-at dep]]
134134 =/ cycle-legacy=ifile:jibb legacy(source `dep)
tests/lib/jibb-union-source.hoon+1−1
@@ -66,7 +66,7 @@
6666 =/ mixed-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb mixed-source)
6767 ?: ?=(%| -.mixed-parsed) ~[['BAD mixed parse' |]]
6868 =/ mixed-collected=grec-collected:jibb (grec-collect-molds:jibb defs.p.mixed-parsed)
69− =/ mixed-tree=(unit shape:jibb) (~(get by proofs.mixed-collected) %element)
69+ =/ mixed-tree=(unit shape:jibb) (~(get by proofs.mixed-collected) %node-tree)
7070 =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
7171 ?~ prep ~[['BAD prepared prelude' |]]
7272 =/ mixed-result=jfile-result:jibb
tests/lib/jibb.hoon+577−565
@@ -1990,466 +1990,474 @@
19901990/* tok-553 %txt /tests/golden/types-prelude-succ/tokens/txt
19911991/* tre-553 %txt /tests/golden/types-prelude-succ/tree/txt
19921992/* typ-553 %txt /tests/golden/types-prelude-succ/types/txt
1993−/* src-554 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1994−/* tok-554 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1995−/* tre-554 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1996−/* typ-554 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1997−/* src-555 %jibb /tests/golden/types-prelude-zing/source/jibb
1998−/* tok-555 %txt /tests/golden/types-prelude-zing/tokens/txt
1999−/* tre-555 %txt /tests/golden/types-prelude-zing/tree/txt
2000−/* typ-555 %txt /tests/golden/types-prelude-zing/types/txt
2001−/* src-556 %jibb /tests/golden/types-proj-explicit-context/source/jibb
2002−/* tok-556 %txt /tests/golden/types-proj-explicit-context/tokens/txt
2003−/* tre-556 %txt /tests/golden/types-proj-explicit-context/tree/txt
2004−/* typ-556 %txt /tests/golden/types-proj-explicit-context/types/txt
2005−/* src-557 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
2006−/* tok-557 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
2007−/* tre-557 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
2008−/* typ-557 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
2009−/* src-558 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
2010−/* tok-558 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
2011−/* tre-558 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2012−/* mod-558-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2013−/* typ-558 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2014−/* mtre-558 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2015−/* src-559 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2016−/* tok-559 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2017−/* tre-559 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2018−/* mod-559-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2019−/* typ-559 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2020−/* mtre-559 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2021−/* src-560 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2022−/* tok-560 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2023−/* tre-560 %txt /tests/golden/types-proj-reserved-local/tree/txt
2024−/* typ-560 %txt /tests/golden/types-proj-reserved-local/types/txt
2025−/* src-561 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2026−/* tok-561 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2027−/* tre-561 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2028−/* typ-561 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2029−/* src-562 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2030−/* tok-562 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2031−/* tre-562 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2032−/* typ-562 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2033−/* src-563 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2034−/* tok-563 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2035−/* tre-563 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2036−/* typ-563 %txt /tests/golden/types-proj-reserved-mold/types/txt
2037−/* src-564 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2038−/* tok-564 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2039−/* tre-564 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2040−/* typ-564 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2041−/* src-565 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2042−/* tok-565 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2043−/* tre-565 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2044−/* typ-565 %txt /tests/golden/types-proj-reserved-positive/types/txt
2045−/* src-566 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2046−/* tok-566 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2047−/* tre-566 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2048−/* typ-566 %txt /tests/golden/types-proj-reserved-sample/types/txt
2049−/* src-567 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2050−/* tok-567 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2051−/* tre-567 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2052−/* typ-567 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2053−/* src-568 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2054−/* tok-568 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2055−/* tre-568 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2056−/* typ-568 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2057−/* src-569 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2058−/* tok-569 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2059−/* tre-569 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2060−/* typ-569 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2061−/* src-570 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2062−/* tok-570 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2063−/* tre-570 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2064−/* typ-570 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2065−/* src-571 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2066−/* tok-571 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2067−/* tre-571 %txt /tests/golden/types-proj-reserved-value/tree/txt
2068−/* typ-571 %txt /tests/golden/types-proj-reserved-value/types/txt
2069−/* src-572 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2070−/* tok-572 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2071−/* tre-572 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2072−/* typ-572 %txt /tests/golden/types-proj-single-duplicate/types/txt
2073−/* src-573 %jibb /tests/golden/types-proj-single-field/source/jibb
2074−/* tok-573 %txt /tests/golden/types-proj-single-field/tokens/txt
2075−/* tre-573 %txt /tests/golden/types-proj-single-field/tree/txt
2076−/* typ-573 %txt /tests/golden/types-proj-single-field/types/txt
2077−/* src-574 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2078−/* tok-574 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2079−/* tre-574 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2080−/* typ-574 %txt /tests/golden/types-proj-single-sample-face/types/txt
2081−/* src-575 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2082−/* tok-575 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2083−/* tre-575 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2084−/* typ-575 %txt /tests/golden/types-proj-single-wrapped/types/txt
2085−/* src-576 %jibb /tests/golden/types-qath-faces/source/jibb
2086−/* tok-576 %txt /tests/golden/types-qath-faces/tokens/txt
2087−/* tre-576 %txt /tests/golden/types-qath-faces/tree/txt
2088−/* typ-576 %txt /tests/golden/types-qath-faces/types/txt
2089−/* src-577 %jibb /tests/golden/types-qath-holes/source/jibb
2090−/* tok-577 %txt /tests/golden/types-qath-holes/tokens/txt
2091−/* tre-577 %txt /tests/golden/types-qath-holes/tree/txt
2092−/* typ-577 %txt /tests/golden/types-qath-holes/types/txt
2093−/* src-578 %jibb /tests/golden/types-qath-module-identity/source/jibb
2094−/* tok-578 %txt /tests/golden/types-qath-module-identity/tokens/txt
2095−/* tre-578 %txt /tests/golden/types-qath-module-identity/tree/txt
2096−/* mod-578-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2097−/* mod-578-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2098−/* mod-578-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2099−/* typ-578 %txt /tests/golden/types-qath-module-identity/types/txt
2100−/* mtre-578 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2101−/* src-579 %jibb /tests/golden/types-qath-recursive/source/jibb
2102−/* tok-579 %txt /tests/golden/types-qath-recursive/tokens/txt
2103−/* tre-579 %txt /tests/golden/types-qath-recursive/tree/txt
2104−/* typ-579 %txt /tests/golden/types-qath-recursive/types/txt
2105−/* src-580 %jibb /tests/golden/types-record-bound-variable/source/jibb
2106−/* tok-580 %txt /tests/golden/types-record-bound-variable/tokens/txt
2107−/* tre-580 %txt /tests/golden/types-record-bound-variable/tree/txt
2108−/* typ-580 %txt /tests/golden/types-record-bound-variable/types/txt
2109−/* src-581 %jibb /tests/golden/types-record-cast-context/source/jibb
2110−/* tok-581 %txt /tests/golden/types-record-cast-context/tokens/txt
2111−/* tre-581 %txt /tests/golden/types-record-cast-context/tree/txt
2112−/* typ-581 %txt /tests/golden/types-record-cast-context/types/txt
2113−/* src-582 %jibb /tests/golden/types-record-change/source/jibb
2114−/* tok-582 %txt /tests/golden/types-record-change/tokens/txt
2115−/* tre-582 %txt /tests/golden/types-record-change/tree/txt
2116−/* typ-582 %txt /tests/golden/types-record-change/types/txt
2117−/* src-583 %jibb /tests/golden/types-record-change-generic/source/jibb
2118−/* tok-583 %txt /tests/golden/types-record-change-generic/tokens/txt
2119−/* tre-583 %txt /tests/golden/types-record-change-generic/tree/txt
2120−/* typ-583 %txt /tests/golden/types-record-change-generic/types/txt
2121−/* src-584 %jibb /tests/golden/types-record-faces/source/jibb
2122−/* tok-584 %txt /tests/golden/types-record-faces/tokens/txt
2123−/* tre-584 %txt /tests/golden/types-record-faces/tree/txt
2124−/* typ-584 %txt /tests/golden/types-record-faces/types/txt
2125−/* src-585 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2126−/* tok-585 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2127−/* tre-585 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2128−/* typ-585 %txt /tests/golden/types-record-field-edit-separate/types/txt
2129−/* src-586 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2130−/* tok-586 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2131−/* tre-586 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2132−/* typ-586 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2133−/* src-587 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2134−/* tok-587 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2135−/* tre-587 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2136−/* typ-587 %txt /tests/golden/types-record-field-expr-separate/types/txt
2137−/* src-588 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2138−/* tok-588 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2139−/* tre-588 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2140−/* mod-588-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2141−/* typ-588 %txt /tests/golden/types-record-field-module-reachable/types/txt
2142−/* mtre-588 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2143−/* src-589 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2144−/* tok-589 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2145−/* tre-589 %txt /tests/golden/types-record-field-module-unused/tree/txt
2146−/* mod-589-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2147−/* mod-589-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2148−/* typ-589 %txt /tests/golden/types-record-field-module-unused/types/txt
2149−/* mtre-589 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2150−/* src-590 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2151−/* tok-590 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2152−/* tre-590 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2153−/* typ-590 %txt /tests/golden/types-record-field-nested-mold/types/txt
2154−/* src-591 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2155−/* tok-591 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2156−/* tre-591 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2157−/* typ-591 %txt /tests/golden/types-record-field-outer-inner/types/txt
2158−/* src-592 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2159−/* tok-592 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2160−/* tre-592 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2161−/* typ-592 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2162−/* src-593 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2163−/* tok-593 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2164−/* tre-593 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2165−/* typ-593 %txt /tests/golden/types-record-field-separate-molds/types/txt
2166−/* src-594 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2167−/* tok-594 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2168−/* tre-594 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2169−/* typ-594 %txt /tests/golden/types-record-field-unused-mold/types/txt
2170−/* src-595 %jibb /tests/golden/types-record-import/source/jibb
2171−/* tok-595 %txt /tests/golden/types-record-import/tokens/txt
2172−/* tre-595 %txt /tests/golden/types-record-import/tree/txt
2173−/* mod-595-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2174−/* typ-595 %txt /tests/golden/types-record-import/types/txt
2175−/* mtre-595 %txt /tests/golden/types-record-import/module-trees/txt
2176−/* src-596 %jibb /tests/golden/types-record-local-scheme/source/jibb
2177−/* tok-596 %txt /tests/golden/types-record-local-scheme/tokens/txt
2178−/* tre-596 %txt /tests/golden/types-record-local-scheme/tree/txt
2179−/* typ-596 %txt /tests/golden/types-record-local-scheme/types/txt
2180−/* src-597 %jibb /tests/golden/types-record-nested/source/jibb
2181−/* tok-597 %txt /tests/golden/types-record-nested/tokens/txt
2182−/* tre-597 %txt /tests/golden/types-record-nested/tree/txt
2183−/* typ-597 %txt /tests/golden/types-record-nested/types/txt
2184−/* src-598 %jibb /tests/golden/types-record-to-tuple/source/jibb
2185−/* tok-598 %txt /tests/golden/types-record-to-tuple/tokens/txt
2186−/* tre-598 %txt /tests/golden/types-record-to-tuple/tree/txt
2187−/* typ-598 %txt /tests/golden/types-record-to-tuple/types/txt
2188−/* src-599 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2189−/* tok-599 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2190−/* tre-599 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2191−/* typ-599 %txt /tests/golden/types-recursion-scc-failures/types/txt
2192−/* src-600 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2193−/* tok-600 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2194−/* tre-600 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2195−/* typ-600 %txt /tests/golden/types-recursion-scc-groups/types/txt
2196−/* src-601 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2197−/* tok-601 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2198−/* tre-601 %txt /tests/golden/types-recursion-scc-import/tree/txt
2199−/* mod-601-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2200−/* typ-601 %txt /tests/golden/types-recursion-scc-import/types/txt
2201−/* mtre-601 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2202−/* src-602 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2203−/* tok-602 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2204−/* tre-602 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2205−/* mod-602-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2206−/* typ-602 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2207−/* mtre-602 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2208−/* src-603 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2209−/* tok-603 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2210−/* tre-603 %txt /tests/golden/types-recursion-scc-local/tree/txt
2211−/* typ-603 %txt /tests/golden/types-recursion-scc-local/types/txt
2212−/* src-604 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2213−/* tok-604 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2214−/* tre-604 %txt /tests/golden/types-recursion-scc-order/tree/txt
2215−/* typ-604 %txt /tests/golden/types-recursion-scc-order/types/txt
2216−/* src-605 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2217−/* tok-605 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2218−/* tre-605 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2219−/* typ-605 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2220−/* src-606 %jibb /tests/golden/types-recursive-branch/source/jibb
2221−/* tok-606 %txt /tests/golden/types-recursive-branch/tokens/txt
2222−/* tre-606 %txt /tests/golden/types-recursive-branch/tree/txt
2223−/* typ-606 %txt /tests/golden/types-recursive-branch/types/txt
2224−/* src-607 %jibb /tests/golden/types-recursive-gate/source/jibb
2225−/* tok-607 %txt /tests/golden/types-recursive-gate/tokens/txt
2226−/* tre-607 %txt /tests/golden/types-recursive-gate/tree/txt
2227−/* typ-607 %txt /tests/golden/types-recursive-gate/types/txt
2228−/* src-608 %jibb /tests/golden/types-recursive-sample/source/jibb
2229−/* tok-608 %txt /tests/golden/types-recursive-sample/tokens/txt
2230−/* tre-608 %txt /tests/golden/types-recursive-sample/tree/txt
2231−/* typ-608 %txt /tests/golden/types-recursive-sample/types/txt
2232−/* src-609 %jibb /tests/golden/types-request-normal/source/jibb
2233−/* tok-609 %txt /tests/golden/types-request-normal/tokens/txt
2234−/* tre-609 %txt /tests/golden/types-request-normal/tree/txt
2235−/* mod-609-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2236−/* typ-609 %txt /tests/golden/types-request-normal/types/txt
2237−/* mark-609-1 %txt /tests/golden/types-request-normal/mar/full/txt
2238−/* mtre-609 %txt /tests/golden/types-request-normal/module-trees/txt
2239−/* src-610 %jibb /tests/golden/types-scope-library-poke/source/jibb
2240−/* tok-610 %txt /tests/golden/types-scope-library-poke/tokens/txt
2241−/* tre-610 %txt /tests/golden/types-scope-library-poke/tree/txt
2242−/* typ-610 %txt /tests/golden/types-scope-library-poke/types/txt
2243−/* src-611 %jibb /tests/golden/types-scope-root-api/source/jibb
2244−/* tok-611 %txt /tests/golden/types-scope-root-api/tokens/txt
2245−/* tre-611 %txt /tests/golden/types-scope-root-api/tree/txt
2246−/* typ-611 %txt /tests/golden/types-scope-root-api/types/txt
2247−/* src-612 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2248−/* tok-612 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2249−/* tre-612 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2250−/* typ-612 %txt /tests/golden/types-scope-store-duplicate/types/txt
2251−/* src-613 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2252−/* tok-613 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2253−/* tre-613 %txt /tests/golden/types-scope-store-shadow/tree/txt
2254−/* typ-613 %txt /tests/golden/types-scope-store-shadow/types/txt
2255−/* src-614 %jibb /tests/golden/types-single-case-pattern/source/jibb
2256−/* tok-614 %txt /tests/golden/types-single-case-pattern/tokens/txt
2257−/* tre-614 %txt /tests/golden/types-single-case-pattern/tree/txt
2258−/* typ-614 %txt /tests/golden/types-single-case-pattern/types/txt
2259−/* src-615 %jibb /tests/golden/types-string-interpolation/source/jibb
2260−/* tok-615 %txt /tests/golden/types-string-interpolation/tokens/txt
2261−/* tre-615 %txt /tests/golden/types-string-interpolation/tree/txt
2262−/* typ-615 %txt /tests/golden/types-string-interpolation/types/txt
2263−/* src-616 %jibb /tests/golden/types-tuple-context/source/jibb
2264−/* tok-616 %txt /tests/golden/types-tuple-context/tokens/txt
2265−/* tre-616 %txt /tests/golden/types-tuple-context/tree/txt
2266−/* typ-616 %txt /tests/golden/types-tuple-context/types/txt
2267−/* src-617 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2268−/* tok-617 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2269−/* tre-617 %txt /tests/golden/types-tuple-context-nested/tree/txt
2270−/* typ-617 %txt /tests/golden/types-tuple-context-nested/types/txt
2271−/* src-618 %jibb /tests/golden/types-union-alias/source/jibb
2272−/* tok-618 %txt /tests/golden/types-union-alias/tokens/txt
2273−/* tre-618 %txt /tests/golden/types-union-alias/tree/txt
2274−/* typ-618 %txt /tests/golden/types-union-alias/types/txt
2275−/* src-619 %jibb /tests/golden/types-union-branch-context/source/jibb
2276−/* tok-619 %txt /tests/golden/types-union-branch-context/tokens/txt
2277−/* tre-619 %txt /tests/golden/types-union-branch-context/tree/txt
2278−/* typ-619 %txt /tests/golden/types-union-branch-context/types/txt
2279−/* src-620 %jibb /tests/golden/types-union-branch-pending/source/jibb
2280−/* tok-620 %txt /tests/golden/types-union-branch-pending/tokens/txt
2281−/* tre-620 %txt /tests/golden/types-union-branch-pending/tree/txt
2282−/* typ-620 %txt /tests/golden/types-union-branch-pending/types/txt
2283−/* src-621 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2284−/* tok-621 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2285−/* tre-621 %txt /tests/golden/types-union-constructor-shape/tree/txt
2286−/* typ-621 %txt /tests/golden/types-union-constructor-shape/types/txt
2287−/* src-622 %jibb /tests/golden/types-union-context-flow/source/jibb
2288−/* tok-622 %txt /tests/golden/types-union-context-flow/tokens/txt
2289−/* tre-622 %txt /tests/golden/types-union-context-flow/tree/txt
2290−/* typ-622 %txt /tests/golden/types-union-context-flow/types/txt
2291−/* src-623 %jibb /tests/golden/types-union-finite/source/jibb
2292−/* tok-623 %txt /tests/golden/types-union-finite/tokens/txt
2293−/* tre-623 %txt /tests/golden/types-union-finite/tree/txt
2294−/* typ-623 %txt /tests/golden/types-union-finite/types/txt
2295−/* src-624 %jibb /tests/golden/types-union-finite-context/source/jibb
2296−/* tok-624 %txt /tests/golden/types-union-finite-context/tokens/txt
2297−/* tre-624 %txt /tests/golden/types-union-finite-context/tree/txt
2298−/* typ-624 %txt /tests/golden/types-union-finite-context/types/txt
2299−/* src-625 %jibb /tests/golden/types-union-finite-generic/source/jibb
2300−/* tok-625 %txt /tests/golden/types-union-finite-generic/tokens/txt
2301−/* tre-625 %txt /tests/golden/types-union-finite-generic/tree/txt
2302−/* typ-625 %txt /tests/golden/types-union-finite-generic/types/txt
2303−/* src-626 %jibb /tests/golden/types-union-finite-limit/source/jibb
2304−/* tok-626 %txt /tests/golden/types-union-finite-limit/tokens/txt
2305−/* tre-626 %txt /tests/golden/types-union-finite-limit/tree/txt
2306−/* typ-626 %txt /tests/golden/types-union-finite-limit/types/txt
2307−/* src-627 %jibb /tests/golden/types-union-import/source/jibb
2308−/* tok-627 %txt /tests/golden/types-union-import/tokens/txt
2309−/* tre-627 %txt /tests/golden/types-union-import/tree/txt
2310−/* mod-627-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2311−/* typ-627 %txt /tests/golden/types-union-import/types/txt
2312−/* mtre-627 %txt /tests/golden/types-union-import/module-trees/txt
2313−/* src-628 %jibb /tests/golden/types-union-local-pending/source/jibb
2314−/* tok-628 %txt /tests/golden/types-union-local-pending/tokens/txt
2315−/* tre-628 %txt /tests/golden/types-union-local-pending/tree/txt
2316−/* typ-628 %txt /tests/golden/types-union-local-pending/types/txt
2317−/* src-629 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2318−/* tok-629 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2319−/* tre-629 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2320−/* typ-629 %txt /tests/golden/types-union-nonwing-subject/types/txt
2321−/* src-630 %jibb /tests/golden/types-union-overlap/source/jibb
2322−/* tok-630 %txt /tests/golden/types-union-overlap/tokens/txt
2323−/* tre-630 %txt /tests/golden/types-union-overlap/tree/txt
2324−/* typ-630 %txt /tests/golden/types-union-overlap/types/txt
2325−/* src-631 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2326−/* tok-631 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2327−/* tre-631 %txt /tests/golden/types-union-overlap-nested/tree/txt
2328−/* typ-631 %txt /tests/golden/types-union-overlap-nested/types/txt
2329−/* src-632 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2330−/* tok-632 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2331−/* tre-632 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2332−/* typ-632 %txt /tests/golden/types-union-pattern-result-context/types/txt
2333−/* src-633 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2334−/* tok-633 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2335−/* tre-633 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2336−/* typ-633 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2337−/* src-634 %jibb /tests/golden/types-union-patterns/source/jibb
2338−/* tok-634 %txt /tests/golden/types-union-patterns/tokens/txt
2339−/* tre-634 %txt /tests/golden/types-union-patterns/tree/txt
2340−/* typ-634 %txt /tests/golden/types-union-patterns/types/txt
2341−/* src-635 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2342−/* tok-635 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2343−/* tre-635 %txt /tests/golden/types-union-patterns-generic/tree/txt
2344−/* typ-635 %txt /tests/golden/types-union-patterns-generic/types/txt
2345−/* src-636 %jibb /tests/golden/types-union-patterns-import/source/jibb
2346−/* tok-636 %txt /tests/golden/types-union-patterns-import/tokens/txt
2347−/* tre-636 %txt /tests/golden/types-union-patterns-import/tree/txt
2348−/* mod-636-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2349−/* typ-636 %txt /tests/golden/types-union-patterns-import/types/txt
2350−/* mtre-636 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2351−/* src-637 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2352−/* tok-637 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2353−/* tre-637 %txt /tests/golden/types-union-phantom-generic/tree/txt
2354−/* typ-637 %txt /tests/golden/types-union-phantom-generic/types/txt
2355−/* src-638 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2356−/* tok-638 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2357−/* tre-638 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2358−/* mod-638-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2359−/* mod-638-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2360−/* typ-638 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2361−/* mtre-638 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2362−/* src-639 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2363−/* tok-639 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2364−/* tre-639 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2365−/* mod-639-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2366−/* typ-639 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2367−/* mtre-639 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2368−/* src-640 %jibb /tests/golden/types-union-print-distinct/source/jibb
2369−/* tok-640 %txt /tests/golden/types-union-print-distinct/tokens/txt
2370−/* tre-640 %txt /tests/golden/types-union-print-distinct/tree/txt
2371−/* mod-640-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2372−/* mod-640-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2373−/* mod-640-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2374−/* typ-640 %txt /tests/golden/types-union-print-distinct/types/txt
2375−/* mtre-640 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2376−/* src-641 %jibb /tests/golden/types-union-print-escape/source/jibb
2377−/* tok-641 %txt /tests/golden/types-union-print-escape/tokens/txt
2378−/* tre-641 %txt /tests/golden/types-union-print-escape/tree/txt
2379−/* typ-641 %txt /tests/golden/types-union-print-escape/types/txt
2380−/* src-642 %jibb /tests/golden/types-union-print-local/source/jibb
2381−/* tok-642 %txt /tests/golden/types-union-print-local/tokens/txt
2382−/* tre-642 %txt /tests/golden/types-union-print-local/tree/txt
2383−/* typ-642 %txt /tests/golden/types-union-print-local/types/txt
2384−/* src-643 %jibb /tests/golden/types-union-print-nested/source/jibb
2385−/* tok-643 %txt /tests/golden/types-union-print-nested/tokens/txt
2386−/* tre-643 %txt /tests/golden/types-union-print-nested/tree/txt
2387−/* typ-643 %txt /tests/golden/types-union-print-nested/types/txt
2388−/* src-644 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2389−/* tok-644 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2390−/* tre-644 %txt /tests/golden/types-union-print-same-origin/tree/txt
2391−/* mod-644-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2392−/* typ-644 %txt /tests/golden/types-union-print-same-origin/types/txt
2393−/* mtre-644 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2394−/* src-645 %jibb /tests/golden/types-union-print-transitive/source/jibb
2395−/* tok-645 %txt /tests/golden/types-union-print-transitive/tokens/txt
2396−/* tre-645 %txt /tests/golden/types-union-print-transitive/tree/txt
2397−/* mod-645-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2398−/* mod-645-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2399−/* typ-645 %txt /tests/golden/types-union-print-transitive/types/txt
2400−/* mtre-645 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2401−/* src-646 %jibb /tests/golden/types-union-runtime-equality/source/jibb
2402−/* tok-646 %txt /tests/golden/types-union-runtime-equality/tokens/txt
2403−/* tre-646 %txt /tests/golden/types-union-runtime-equality/tree/txt
2404−/* typ-646 %txt /tests/golden/types-union-runtime-equality/types/txt
2405−/* src-647 %jibb /tests/golden/types-union-singleton/source/jibb
2406−/* tok-647 %txt /tests/golden/types-union-singleton/tokens/txt
2407−/* tre-647 %txt /tests/golden/types-union-singleton/tree/txt
2408−/* typ-647 %txt /tests/golden/types-union-singleton/types/txt
2409−/* src-648 %jibb /tests/golden/types-union-source-alias/source/jibb
2410−/* tok-648 %txt /tests/golden/types-union-source-alias/tokens/txt
2411−/* tre-648 %txt /tests/golden/types-union-source-alias/tree/txt
2412−/* typ-648 %txt /tests/golden/types-union-source-alias/types/txt
2413−/* src-649 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2414−/* tok-649 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2415−/* tre-649 %txt /tests/golden/types-union-tag-atoms/tree/txt
2416−/* typ-649 %txt /tests/golden/types-union-tag-atoms/types/txt
2417−/* src-650 %jibb /tests/golden/types-union-tags/source/jibb
2418−/* tok-650 %txt /tests/golden/types-union-tags/tokens/txt
2419−/* tre-650 %txt /tests/golden/types-union-tags/tree/txt
2420−/* typ-650 %txt /tests/golden/types-union-tags/types/txt
2421−/* src-651 %jibb /tests/golden/types-union-unresolved/source/jibb
2422−/* tok-651 %txt /tests/golden/types-union-unresolved/tokens/txt
2423−/* tre-651 %txt /tests/golden/types-union-unresolved/tree/txt
2424−/* typ-651 %txt /tests/golden/types-union-unresolved/types/txt
2425−/* src-652 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2426−/* tok-652 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2427−/* tre-652 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2428−/* typ-652 %txt /tests/golden/types-union-unresolved-flow/types/txt
2429−/* src-653 %jibb /tests/golden/types-unit-construction/source/jibb
2430−/* tok-653 %txt /tests/golden/types-unit-construction/tokens/txt
2431−/* tre-653 %txt /tests/golden/types-unit-construction/tree/txt
2432−/* typ-653 %txt /tests/golden/types-unit-construction/types/txt
2433−/* src-654 %jibb /tests/golden/types-unit-context/source/jibb
2434−/* tok-654 %txt /tests/golden/types-unit-context/tokens/txt
2435−/* tre-654 %txt /tests/golden/types-unit-context/tree/txt
2436−/* typ-654 %txt /tests/golden/types-unit-context/types/txt
2437−/* src-655 %jibb /tests/golden/types-unit-patterns/source/jibb
2438−/* tok-655 %txt /tests/golden/types-unit-patterns/tokens/txt
2439−/* tre-655 %txt /tests/golden/types-unit-patterns/tree/txt
2440−/* typ-655 %txt /tests/golden/types-unit-patterns/types/txt
2441−/* src-656 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2442−/* tok-656 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2443−/* tre-656 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2444−/* typ-656 %txt /tests/golden/types-value-cycle-shadow/types/txt
2445−/* src-657 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2446−/* tok-657 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2447−/* tre-657 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2448−/* typ-657 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2449−/* src-658 %jibb /tests/golden/types-value-cycles/source/jibb
2450−/* tok-658 %txt /tests/golden/types-value-cycles/tokens/txt
2451−/* tre-658 %txt /tests/golden/types-value-cycles/tree/txt
2452−/* typ-658 %txt /tests/golden/types-value-cycles/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
24532461=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
24542462|%
24552463:: one arm per case
@@ -3560,216 +3568,220 @@
35603568 (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 ~ ~ ~))
35613569++ test-types-prelude-succ
35623570 (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 ~ ~ ~))
35633575++ test-types-prelude-unit-helpers
3564− (weld (check ~.types-prelude-unit-helpers src-554 `tok-554 `tre-554) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-554 `typ-554 ~ ~ ~))
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 ~ ~ ~))
35653577++ test-types-prelude-zing
3566− (weld (check ~.types-prelude-zing src-555 `tok-555 `tre-555) (check-module-types ~.types-prelude-zing ~[%tests %golden ~.types-prelude-zing %source %jibb] src-555 `typ-555 ~ ~ ~))
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 ~ ~ ~))
35673579++ test-types-proj-explicit-context
3568− (weld (check ~.types-proj-explicit-context src-556 `tok-556 `tre-556) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-556 `typ-556 ~ ~ ~))
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 ~ ~ ~))
35693581++ test-types-proj-nested-no-implicit
3570− (weld (check ~.types-proj-nested-no-implicit src-557 `tok-557 `tre-557) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-557 `typ-557 ~ ~ ~))
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 ~ ~ ~))
35713583++ test-types-proj-reserved-imported-definition
3572− (weld (weld (check ~.types-proj-reserved-imported-definition src-558 `tok-558 `tre-558) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-558 `typ-558 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-558-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-558 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-558-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]]))
35733585++ test-types-proj-reserved-jibb-import
3574− (weld (weld (check ~.types-proj-reserved-jibb-import src-559 `tok-559 `tre-559) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-559 `typ-559 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-559-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-559 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-559-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]]))
35753587++ test-types-proj-reserved-local
3576− (weld (check ~.types-proj-reserved-local src-560 `tok-560 `tre-560) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-560 `typ-560 ~ ~ ~))
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 ~ ~ ~))
35773589++ test-types-proj-reserved-local-mold
3578− (weld (check ~.types-proj-reserved-local-mold src-561 `tok-561 `tre-561) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-561 `typ-561 ~ ~ ~))
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 ~ ~ ~))
35793591++ test-types-proj-reserved-mark-import
3580− (weld (check ~.types-proj-reserved-mark-import src-562 `tok-562 `tre-562) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-562 `typ-562 ~ ~ ~))
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 ~ ~ ~))
35813593++ test-types-proj-reserved-mold
3582− (weld (check ~.types-proj-reserved-mold src-563 `tok-563 `tre-563) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-563 `typ-563 ~ ~ ~))
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 ~ ~ ~))
35833595++ test-types-proj-reserved-pattern
3584− (weld (check ~.types-proj-reserved-pattern src-564 `tok-564 `tre-564) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-564 `typ-564 ~ ~ ~))
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 ~ ~ ~))
35853597++ test-types-proj-reserved-positive
3586− (weld (check ~.types-proj-reserved-positive src-565 `tok-565 `tre-565) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-565 `typ-565 ~ ~ ~))
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 ~ ~ ~))
35873599++ test-types-proj-reserved-sample
3588− (weld (check ~.types-proj-reserved-sample src-566 `tok-566 `tre-566) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-566 `typ-566 ~ ~ ~))
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 ~ ~ ~))
35893601++ test-types-proj-reserved-sur-import
3590− (weld (check ~.types-proj-reserved-sur-import src-567 `tok-567 `tre-567) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-567 `typ-567 ~ ~ ~))
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 ~ ~ ~))
35913603++ test-types-proj-reserved-unused-pattern
3592− (weld (check ~.types-proj-reserved-unused-pattern src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-568 `typ-568 ~ ~ ~))
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 ~ ~ ~))
35933605++ test-types-proj-reserved-unused-sample
3594− (weld (check ~.types-proj-reserved-unused-sample src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-569 `typ-569 ~ ~ ~))
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 ~ ~ ~))
35953607++ test-types-proj-reserved-unused-value
3596− (weld (check ~.types-proj-reserved-unused-value src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-570 `typ-570 ~ ~ ~))
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 ~ ~ ~))
35973609++ test-types-proj-reserved-value
3598− (weld (check ~.types-proj-reserved-value src-571 `tok-571 `tre-571) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-571 `typ-571 ~ ~ ~))
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 ~ ~ ~))
35993611++ test-types-proj-single-duplicate
3600− (weld (check ~.types-proj-single-duplicate src-572 `tok-572 `tre-572) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-572 `typ-572 ~ ~ ~))
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 ~ ~ ~))
36013613++ test-types-proj-single-field
3602− (weld (check ~.types-proj-single-field src-573 `tok-573 `tre-573) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-573 `typ-573 ~ ~ ~))
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 ~ ~ ~))
36033615++ test-types-proj-single-sample-face
3604− (weld (check ~.types-proj-single-sample-face src-574 `tok-574 `tre-574) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-574 `typ-574 ~ ~ ~))
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 ~ ~ ~))
36053617++ test-types-proj-single-wrapped
3606− (weld (check ~.types-proj-single-wrapped src-575 `tok-575 `tre-575) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-575 `typ-575 ~ ~ ~))
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 ~ ~ ~))
36073619++ test-types-qath-faces
3608− (weld (check ~.types-qath-faces src-576 `tok-576 `tre-576) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-576 `typ-576 ~ ~ ~))
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 ~ ~ ~))
36093621++ test-types-qath-holes
3610− (weld (check ~.types-qath-holes src-577 `tok-577 `tre-577) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-577 `typ-577 ~ ~ ~))
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 ~ ~ ~))
36113623++ test-types-qath-module-identity
3612− (weld (weld (check ~.types-qath-module-identity src-578 `tok-578 `tre-578) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-578 `typ-578 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-578-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-578-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-578-3]])) (check-module-trees ~.types-qath-module-identity `mtre-578 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-578-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-578-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-578-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]]))
36133625++ test-types-qath-recursive
3614− (weld (check ~.types-qath-recursive src-579 `tok-579 `tre-579) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-579 `typ-579 ~ ~ ~))
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 ~ ~ ~))
36153627++ test-types-record-bound-variable
3616− (weld (check ~.types-record-bound-variable src-580 `tok-580 `tre-580) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-580 `typ-580))
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))
36173629++ test-types-record-cast-context
3618− (weld (check ~.types-record-cast-context src-581 `tok-581 `tre-581) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-581 `typ-581 ~ ~ ~))
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 ~ ~ ~))
36193631++ test-types-record-change
3620− (weld (check ~.types-record-change src-582 `tok-582 `tre-582) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-582 `typ-582 ~ ~ ~))
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 ~ ~ ~))
36213633++ test-types-record-change-generic
3622− (weld (check ~.types-record-change-generic src-583 `tok-583 `tre-583) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-583 `typ-583 ~ ~ ~))
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 ~ ~ ~))
36233635++ test-types-record-faces
3624− (weld (check ~.types-record-faces src-584 `tok-584 `tre-584) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-584 `typ-584))
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))
36253637++ test-types-record-field-edit-separate
3626− (weld (check ~.types-record-field-edit-separate src-585 `tok-585 `tre-585) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-585 `typ-585))
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))
36273639++ test-types-record-field-expr-duplicate
3628− (weld (check ~.types-record-field-expr-duplicate src-586 `tok-586 `tre-586) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-586 `typ-586))
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))
36293641++ test-types-record-field-expr-separate
3630− (weld (check ~.types-record-field-expr-separate src-587 `tok-587 `tre-587) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-587 `typ-587))
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))
36313643++ test-types-record-field-module-reachable
3632− (weld (weld (check ~.types-record-field-module-reachable src-588 `tok-588 `tre-588) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-588 `typ-588 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-588-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-588 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-588-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]]))
36333645++ test-types-record-field-module-unused
3634− (weld (weld (check ~.types-record-field-module-unused src-589 `tok-589 `tre-589) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-589 `typ-589 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-589-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-589-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-589 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-589-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-589-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]]))
36353647++ test-types-record-field-nested-mold
3636− (weld (check ~.types-record-field-nested-mold src-590 `tok-590 `tre-590) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-590 `typ-590))
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))
36373649++ test-types-record-field-outer-inner
3638− (weld (check ~.types-record-field-outer-inner src-591 `tok-591 `tre-591) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-591 `typ-591))
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))
36393651++ test-types-record-field-sample-duplicate
3640− (weld (check ~.types-record-field-sample-duplicate src-592 `tok-592 `tre-592) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-592 `typ-592))
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))
36413653++ test-types-record-field-separate-molds
3642− (weld (check ~.types-record-field-separate-molds src-593 `tok-593 `tre-593) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-593 `typ-593))
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))
36433655++ test-types-record-field-unused-mold
3644− (weld (check ~.types-record-field-unused-mold src-594 `tok-594 `tre-594) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-594 `typ-594))
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))
36453657++ test-types-record-import
3646− (weld (weld (check ~.types-record-import src-595 `tok-595 `tre-595) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-595 `typ-595 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-595-1]])) (check-module-trees ~.types-record-import `mtre-595 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-595-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]]))
36473659++ test-types-record-local-scheme
3648− (weld (check ~.types-record-local-scheme src-596 `tok-596 `tre-596) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-596 `typ-596))
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))
36493661++ test-types-record-nested
3650− (weld (check ~.types-record-nested src-597 `tok-597 `tre-597) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-597 `typ-597))
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))
36513663++ test-types-record-to-tuple
3652− (weld (check ~.types-record-to-tuple src-598 `tok-598 `tre-598) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-598 `typ-598))
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))
36533665++ test-types-recursion-scc-failures
3654− (weld (check ~.types-recursion-scc-failures src-599 `tok-599 `tre-599) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-599 `typ-599 ~ ~ ~))
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 ~ ~ ~))
36553667++ test-types-recursion-scc-groups
3656− (weld (check ~.types-recursion-scc-groups src-600 `tok-600 `tre-600) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-600 `typ-600 ~ ~ ~))
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 ~ ~ ~))
36573669++ test-types-recursion-scc-import
3658− (weld (weld (check ~.types-recursion-scc-import src-601 `tok-601 `tre-601) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-601 `typ-601 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-601-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-601 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-601-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]]))
36593671++ test-types-recursion-scc-import-bad
3660− (weld (weld (check ~.types-recursion-scc-import-bad src-602 `tok-602 `tre-602) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-602 `typ-602 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-602-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-602 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-602-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]]))
36613673++ test-types-recursion-scc-local
3662− (weld (check ~.types-recursion-scc-local src-603 `tok-603 `tre-603) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-603 `typ-603 ~ ~ ~))
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 ~ ~ ~))
36633675++ test-types-recursion-scc-order
3664− (weld (check ~.types-recursion-scc-order src-604 `tok-604 `tre-604) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-604 `typ-604 ~ ~ ~))
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 ~ ~ ~))
36653677++ test-types-recursion-scc-shadow
3666− (weld (check ~.types-recursion-scc-shadow src-605 `tok-605 `tre-605) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-605 `typ-605 ~ ~ ~))
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 ~ ~ ~))
36673679++ test-types-recursive-branch
3668− (weld (check ~.types-recursive-branch src-606 `tok-606 `tre-606) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-606 `typ-606 ~ ~ ~))
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 ~ ~ ~))
36693681++ test-types-recursive-gate
3670− (weld (check ~.types-recursive-gate src-607 `tok-607 `tre-607) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-607 `typ-607))
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))
36713683++ test-types-recursive-sample
3672− (weld (check ~.types-recursive-sample src-608 `tok-608 `tre-608) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-608 `typ-608))
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))
36733685++ test-types-request-normal
3674− (weld (weld (check ~.types-request-normal src-609 `tok-609 `tre-609) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-609 `typ-609 ~ ~[[%full mark-609-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-609-1]])) (check-module-trees ~.types-request-normal `mtre-609 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-609-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]]))
36753687++ test-types-scope-library-poke
3676− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-610 `tok-610 `tre-610) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-610 `typ-610 ~ ~ ~))
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 ~ ~ ~))
36773689++ test-types-scope-root-api
3678− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-611 `tok-611 `tre-611) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-611 `typ-611 ~ ~ ~))
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 ~ ~ ~))
36793691++ test-types-scope-store-duplicate
3680− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-612 `tok-612 `tre-612) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-612 `typ-612 ~ ~ ~))
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 ~ ~ ~))
36813693++ test-types-scope-store-shadow
3682− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-613 `tok-613 `tre-613) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-613 `typ-613 ~ ~ ~))
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 ~ ~ ~))
36833695++ test-types-single-case-pattern
3684− (weld (check ~.types-single-case-pattern src-614 `tok-614 `tre-614) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-614 `typ-614 ~ ~ ~))
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 ~ ~ ~))
36853697++ test-types-string-interpolation
3686− (weld (check ~.types-string-interpolation src-615 `tok-615 `tre-615) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-615 `typ-615 ~ ~ ~))
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 ~ ~ ~))
36873699++ test-types-tuple-context
3688− (weld (check ~.types-tuple-context src-616 `tok-616 `tre-616) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-616 `typ-616 ~ ~ ~))
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 ~ ~ ~))
36893701++ test-types-tuple-context-nested
3690− (weld (check ~.types-tuple-context-nested src-617 `tok-617 `tre-617) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-617 `typ-617 ~ ~ ~))
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 ~ ~ ~))
36913703++ test-types-union-alias
3692− (weld (check ~.types-union-alias src-618 `tok-618 `tre-618) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-618 `typ-618))
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))
36933705++ test-types-union-branch-context
3694− (weld (check ~.types-union-branch-context src-619 `tok-619 `tre-619) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-619 `typ-619))
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))
36953707++ test-types-union-branch-pending
3696− (weld (check ~.types-union-branch-pending src-620 `tok-620 `tre-620) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-620 `typ-620))
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))
36973709++ test-types-union-constructor-shape
3698− (weld (check ~.types-union-constructor-shape src-621 `tok-621 `tre-621) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-621 `typ-621))
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))
36993711++ test-types-union-context-flow
3700− (weld (check ~.types-union-context-flow src-622 `tok-622 `tre-622) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-622 `typ-622))
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))
37013713++ test-types-union-finite
3702− (weld (check ~.types-union-finite src-623 `tok-623 `tre-623) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-623 `typ-623 ~ ~ ~))
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 ~ ~ ~))
37033715++ test-types-union-finite-context
3704− (weld (check ~.types-union-finite-context src-624 `tok-624 `tre-624) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-624 `typ-624 ~ ~ ~))
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 ~ ~ ~))
37053717++ test-types-union-finite-generic
3706− (weld (check ~.types-union-finite-generic src-625 `tok-625 `tre-625) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-625 `typ-625 ~ ~ ~))
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 ~ ~ ~))
37073719++ test-types-union-finite-limit
3708− (weld (check ~.types-union-finite-limit src-626 `tok-626 `tre-626) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-626 `typ-626 ~ ~ ~))
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 ~ ~ ~))
37093721++ test-types-union-import
3710− (weld (weld (check ~.types-union-import src-627 `tok-627 `tre-627) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-627 `typ-627 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-627-1]])) (check-module-trees ~.types-union-import `mtre-627 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-627-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]]))
37113723++ test-types-union-local-pending
3712− (weld (check ~.types-union-local-pending src-628 `tok-628 `tre-628) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-628 `typ-628))
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))
37133725++ test-types-union-nonwing-subject
3714− (weld (check ~.types-union-nonwing-subject src-629 `tok-629 `tre-629) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-629 `typ-629 ~ ~ ~))
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 ~ ~ ~))
37153727++ test-types-union-overlap
3716− (weld (check ~.types-union-overlap src-630 `tok-630 `tre-630) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-630 `typ-630))
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))
37173729++ test-types-union-overlap-nested
3718− (weld (check ~.types-union-overlap-nested src-631 `tok-631 `tre-631) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-631 `typ-631))
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))
37193731++ test-types-union-pattern-result-context
3720− (weld (check ~.types-union-pattern-result-context src-632 `tok-632 `tre-632) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-632 `typ-632 ~ ~ ~))
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 ~ ~ ~))
37213733++ test-types-union-pattern-result-controls
3722− (weld (check ~.types-union-pattern-result-controls src-633 `tok-633 `tre-633) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-633 `typ-633 ~ ~ ~))
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 ~ ~ ~))
37233735++ test-types-union-patterns
3724− (weld (check ~.types-union-patterns src-634 `tok-634 `tre-634) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-634 `typ-634 ~ ~ ~))
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 ~ ~ ~))
37253737++ test-types-union-patterns-generic
3726− (weld (check ~.types-union-patterns-generic src-635 `tok-635 `tre-635) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-635 `typ-635 ~ ~ ~))
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 ~ ~ ~))
37273739++ test-types-union-patterns-import
3728− (weld (weld (check ~.types-union-patterns-import src-636 `tok-636 `tre-636) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-636 `typ-636 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-636-1]])) (check-module-trees ~.types-union-patterns-import `mtre-636 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-636-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]]))
37293741++ test-types-union-phantom-generic
3730− (weld (check ~.types-union-phantom-generic src-637 `tok-637 `tre-637) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-637 `typ-637))
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))
37313743++ test-types-union-polymorphic-identity
3732− (weld (weld (check ~.types-union-polymorphic-identity src-638 `tok-638 `tre-638) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-638 `typ-638 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-638-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-638-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-638 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-638-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-638-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]]))
37333745++ test-types-union-print-cross-namespace
3734− (weld (weld (check ~.types-union-print-cross-namespace src-639 `tok-639 `tre-639) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-639 `typ-639 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-639-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-639 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-639-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]]))
37353747++ test-types-union-print-distinct
3736− (weld (weld (check ~.types-union-print-distinct src-640 `tok-640 `tre-640) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-640 `typ-640 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-640-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-640-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-640-3]])) (check-module-trees ~.types-union-print-distinct `mtre-640 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-640-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-640-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-640-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]]))
37373749++ test-types-union-print-escape
3738− (weld (check ~.types-union-print-escape src-641 `tok-641 `tre-641) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-641 `typ-641))
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))
37393751++ test-types-union-print-local
3740− (weld (check ~.types-union-print-local src-642 `tok-642 `tre-642) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-642 `typ-642))
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))
37413753++ test-types-union-print-nested
3742− (weld (check ~.types-union-print-nested src-643 `tok-643 `tre-643) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-643 `typ-643))
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))
37433755++ test-types-union-print-same-origin
3744− (weld (weld (check ~.types-union-print-same-origin src-644 `tok-644 `tre-644) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-644 `typ-644 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-644-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-644 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-644-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]]))
37453757++ test-types-union-print-transitive
3746− (weld (weld (check ~.types-union-print-transitive src-645 `tok-645 `tre-645) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-645 `typ-645 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-645-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-645-2]])) (check-module-trees ~.types-union-print-transitive `mtre-645 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-645-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-645-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]]))
37473759++ test-types-union-runtime-equality
3748− (weld (check ~.types-union-runtime-equality src-646 `tok-646 `tre-646) (check-types ~.types-union-runtime-equality ~[%tests %golden ~.types-union-runtime-equality %source %jibb] src-646 `typ-646))
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))
37493761++ test-types-union-singleton
3750− (weld (check ~.types-union-singleton src-647 `tok-647 `tre-647) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-647 `typ-647))
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))
37513763++ test-types-union-source-alias
3752− (weld (check ~.types-union-source-alias src-648 `tok-648 `tre-648) (check-types ~.types-union-source-alias ~[%tests %golden ~.types-union-source-alias %source %jibb] src-648 `typ-648))
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))
37533765++ test-types-union-tag-atoms
3754− (weld (check ~.types-union-tag-atoms src-649 `tok-649 `tre-649) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-649 `typ-649))
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))
37553767++ test-types-union-tags
3756− (weld (check ~.types-union-tags src-650 `tok-650 `tre-650) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-650 `typ-650))
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))
37573769++ test-types-union-unresolved
3758− (weld (check ~.types-union-unresolved src-651 `tok-651 `tre-651) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-651 `typ-651))
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))
37593771++ test-types-union-unresolved-flow
3760− (weld (check ~.types-union-unresolved-flow src-652 `tok-652 `tre-652) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-652 `typ-652))
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))
37613773++ test-types-unit-construction
3762− (weld (check ~.types-unit-construction src-653 `tok-653 `tre-653) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-653 `typ-653 ~ ~ ~))
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 ~ ~ ~))
37633775++ test-types-unit-context
3764− (weld (check ~.types-unit-context src-654 `tok-654 `tre-654) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-654 `typ-654 ~ ~ ~))
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 ~ ~ ~))
37653777++ test-types-unit-patterns
3766− (weld (check ~.types-unit-patterns src-655 `tok-655 `tre-655) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-655 `typ-655))
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))
37673779++ test-types-value-cycle-shadow
3768− (weld (check ~.types-value-cycle-shadow src-656 `tok-656 `tre-656) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-656 `typ-656 ~ ~ ~))
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 ~ ~ ~))
37693781++ test-types-value-cycle-unsupported
3770− (weld (check ~.types-value-cycle-unsupported src-657 `tok-657 `tre-657) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-657 `typ-657 ~ ~ ~))
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 ~ ~ ~))
37713783++ test-types-value-cycles
3772− (weld (check ~.types-value-cycles src-658 `tok-658 `tre-658) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-658 `typ-658 ~ ~ ~))
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 ~ ~ ~))
37733785::
37743786:: +check: run golden:jibb on a case and compare both outputs
37753787::
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-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-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/alias-client.txt+4−4
@@ -6,7 +6,7 @@
66++ ship-event |= x=@t ~zod
77++ via-leaf ^- (alias.via @t) [%text value="x"]
88++ via-node ^- (alias.via @p) [%node event=ship-event children=~]
9−++ cross-alias |= x=(alias.via @t) ^- (element.first @t) [%node event=text-event children=~[x]]
10−++ cross-owner |= x=(element.again @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
11−++ wrong-owner |= x=(element.second @t) ^- (alias.via @t) [%node event=text-event children=~[x]]
12−++ wrong-arg |= x=(alias.via @p) ^- (element.first @t) [%node event=text-event children=~[x]]
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.txt+1−1
@@ -1,3 +1,3 @@
11/= source /ui/tree
2−+$ alias |$ [A] (element.source A)
2++$ alias |$ [A] (node-tree.source A)
33++ identity |= x=(alias A) x
tests/type-generic-construction/client.txt+20−20
@@ -2,23 +2,23 @@
22/= second /ui/tree-two
33++ text-event |= value=@t value
44++ ship-event |= value=@t ~zod
5−++ leaf ^- (element.first @t) [%text value="hi"]
6−++ ship-leaf ^- (element.first @p) [%text value="hi"]
7−++ node ^- (element.first @t) [%node event=text-event children=~]
8−++ ship-node ^- (element.first @p) [%node event=ship-event children=~]
9−++ nested ^- (element.first @t) [%node event=text-event children=~[[%text value="x"]]]
10−++ wrong-event ^- (element.first @p) [%node event=text-event children=~]
11−++ wrong-leaf ^- (element.first @t) [%text value=~zod]
12−++ wrong-label ^- (element.first @t) [%text other="hi"]
13−++ bad-tag ^- (element.first @t) [%missing value="hi"]
14−++ foreign |= x=(element.second @t) ^- (element.first @t) [%node event=text-event children=~[x]]
15−++ generic |= event=$-(@t A) ^- (element.first A) [%node event=event children=~]
16−++ pending |= x=(element.first @t) [%missing x]
17−++ extra ^- (element.first @t) [%text value="hi" extra="bad"]
18−++ misplaced ^- (element.first @t) [%text value=~zod]
19−++ bad-child ^- (element.first @t) [%node event=text-event children=~["bad"]]
20−++ bad-children ^- (element.first @t) [%node event=text-event children="bad"]
21−++ label-swap ^- (element.first @t) [%node children=~ event=text-event]
22−++ wrong-nominal |= child=(element.second @p) ^- (element.first @t) [%node event=text-event children=~[child]]
23−++ wrong-argument |= child=(element.first @p) ^- (element.first @t) [%node event=text-event children=~[child]]
24−++ keep-generic |= f=$-(@t A) ^- (element.first A) [%node event=f children=~[[%text value="x"]]]
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.txt+13−13
@@ -27,17 +27,17 @@ structural substitution declined: ok
2727partial inference; module not checked
2828++ text-event: $-(@t @t)
2929++ ship-event: $-(@t @p)
30−++ leaf: (element.first @t)
31−++ ship-leaf: (element.first @p)
32−++ node: (element.first @t)
33−++ ship-node: (element.first @p)
34−++ nested: (element.first @t)
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)
3535++ wrong-event: recursive mold case does not fit its source shape
3636++ wrong-leaf: recursive mold case does not fit its source shape
3737++ wrong-label: recursive mold case does not fit its source shape
3838++ bad-tag: recursive mold constructor has no matching case
3939++ foreign: list item constraint is not supported by partial inference
40−++ generic: $-($-(@t A) (element.first A))
40+++ generic: $-($-(@t A) (node-tree.first A))
4141++ pending: tag needs context in partial inference
4242++ extra: recursive mold case does not fit its source shape
4343++ misplaced: recursive mold case does not fit its source shape
@@ -46,20 +46,20 @@ partial inference; module not checked
4646++ label-swap: recursive mold case does not fit its source shape
4747++ wrong-nominal: list item constraint is not supported by partial inference
4848++ wrong-argument: list item constraint is not supported by partial inference
49−++ keep-generic: $-($-(@t A) (element.first A))
49+++ keep-generic: $-($-(@t A) (node-tree.first A))
5050partial inference; module not checked
5151++ text-event: $-(@t @t)
5252++ ship-event: $-(@t @p)
5353++ via-leaf: (alias.via @t)
5454++ via-node: (alias.via @p)
55−++ cross-alias: $-((alias.via @t) (element.first @t))
56−++ cross-owner: $-((element.again @t) (alias.via @t))
55+++ cross-alias: $-((alias.via @t) (node-tree.first @t))
56+++ cross-owner: $-((node-tree.again @t) (alias.via @t))
5757++ wrong-owner: list item constraint is not supported by partial inference
5858++ wrong-arg: list item constraint is not supported by partial inference
5959partial inference; module not checked
60−++ leaf: (element.first @t)
61−++ node: (element.first @p)
62−++ nested: (element.first @t)
63−++ generic: $-(A (element.first A))
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))
6464++ wrong-owner: list item constraint is not supported by partial inference
6565++ wrong-field: recursive mold case needs unsupported inference
tests/type-generic-construction/no-event-client.txt+6−6
@@ -1,8 +1,8 @@
11/= first /ui/tree
22/= second /ui/tree-two
3−++ leaf ^- (element.first @t) [%text value="x"]
4−++ node ^- (element.first @p) [%node children=~]
5−++ nested ^- (element.first @t) [%node children=~[[%text value="x"]]]
6−++ generic |= x=A ^- (element.first A) [%node children=~]
7−++ wrong-owner |= x=(element.second @t) ^- (element.first @t) [%node children=~[x]]
8−++ wrong-field ^- (element.first @t) [%node children="x"]
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.txt+8−8
@@ -1,10 +1,10 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77++ text-event |= x=@t x
8−++ made-leaf ^- (element @t) [%text value="x"]
9−++ made-node ^- (element @t) [%node event=text-event children=~[[%text value="x"]]]
10−++ invalid ^- (element @t) [%text value=~zod]
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.txt+7−7
@@ -1,9 +1,9 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77++ text-event |= x=@t x
8−++ made-leaf ^- (element @t) [%text value="x"]
9−++ made-node ^- (element @t) [%node event=text-event children=~[[%text value="x"]]]
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/tree-no-event.txt+3−3
@@ -1,4 +1,4 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node children=(list (element M))]
4−++ generic-id |= x=(element A) x
3+ [%node children=(list (node-tree M))]
4+++ generic-id |= x=(node-tree A) x
tests/type-generic-construction/tree.txt+5−5
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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/client.txt+48−48
@@ -1,46 +1,46 @@
11/= first /ui/tree
22/= second /ui/tree-two
33/= via /ui/tree-alias
4−++ describe |= x=(element.first @t)
4+++ describe |= x=(node-tree.first @t)
55 ?- x
66 [%text value] value
77 [%node event children] (event "click")
8−++ reverse |= x=(element.first @p)
8+++ reverse |= x=(node-tree.first @p)
99 ?- x
1010 [%node event children] (event "click")
1111 [%text value] ~zod
12−++ generic-children |= x=(element.first A)
13− ^- (list (element.first A)) ?- x
12+++ generic-children |= x=(node-tree.first A)
13+ ^- (list (node-tree.first A)) ?- x
1414 [%text value] ~
1515 [%node event kids] kids
1616++ alias-children |= x=(alias.via @p)
17− ^- (list (element.first @p)) ?- x
17+ ^- (list (node-tree.first @p)) ?- x
1818 [%text value] ~
1919 [%node event kids] kids
20−++ rebuild |= x=(element.first @t)
21− ^- (element.first @t) ?- x
20+++ rebuild |= x=(node-tree.first @t)
21+ ^- (node-tree.first @t) ?- x
2222 [%text value] [%text value=value]
2323 [%node event children] [%node event=event children=children]
24−++ wrong-return |= x=(element.first @t)
24+++ wrong-return |= x=(node-tree.first @t)
2525 ?- x
2626 [%text value] value
2727 [%node event kids] ~zod
28−++ duplicate |= x=(element.first @t)
28+++ duplicate |= x=(node-tree.first @t)
2929 ?- x
3030 [%text a] a
3131 [%text b] b
32−++ missing |= x=(element.first @t)
32+++ missing |= x=(node-tree.first @t)
3333 ?- x
3434 [%text a] a
35−++ shadow |= x=(element.first @t)
35+++ shadow |= x=(node-tree.first @t)
3636 ?- x
3737 [%text x] x
3838 [%node event kids] "node"
39−++ bad-tag |= x=(element.first @t)
39+++ bad-tag |= x=(node-tree.first @t)
4040 ?- x
4141 [%text value] value
4242 [%other event kids] "node"
43−++ whole-tail |= x=(element.first @t)
43+++ whole-tail |= x=(node-tree.first @t)
4444 ?- x
4545 [%text value] value
4646 [%node payload] payload
@@ -48,32 +48,32 @@
4848 ?- x
4949 [%text value] value
5050 [%node event kids] "node"
51−++ pending |= x=(element.first @t)
51+++ pending |= x=(node-tree.first @t)
5252 ?- x
5353 [%text value] [%unrelated value]
5454 [%node event kids] [%unrelated "node"]
55−++ dead |= x=(element.first @t)
55+++ dead |= x=(node-tree.first @t)
5656 ?- x
5757 [%text a] a
5858 [%node event kids] (event "ok")
5959 [%text b] b
60−++ wild |= x=(element.first @t)
60+++ wild |= x=(node-tree.first @t)
6161 ?- x
6262 [%text *] "text"
6363 [%node * *] "node"
64−++ whole-wild |= x=(element.first @t)
64+++ whole-wild |= x=(node-tree.first @t)
6565 ?- x
6666 [%text value] value
6767 * "other"
68−++ foreign-children |= x=(element.first @t)
69− ^- (list (element.second @t)) ?- x
68+++ foreign-children |= x=(node-tree.first @t)
69+ ^- (list (node-tree.second @t)) ?- x
7070 [%text value] ~
7171 [%node event kids] kids
72−++ wrong-argument |= x=(element.first @t)
73− ^- (list (element.first @p)) ?- x
72+++ wrong-argument |= x=(node-tree.first @t)
73+ ^- (list (node-tree.first @p)) ?- x
7474 [%text value] ~
7575 [%node event kids] kids
76−++ nested-child |= x=(element.first @t)
76+++ nested-child |= x=(node-tree.first @t)
7777 ?- x
7878 [%text value] value
7979 [%node event kids] ?- kids
@@ -81,86 +81,86 @@
8181 [item remainder] ?- item
8282 [%text value] value
8383 [%node action rest] (action "click")
84−++ duplicate-binder |= x=(element.first @t)
84+++ duplicate-binder |= x=(node-tree.first @t)
8585 ?- x
8686 [%text value] value
8787 [%node event event] "node"
88−++ target-shadow |= x=(element.first @t)
88+++ target-shadow |= x=(node-tree.first @t)
8989 ?- x
9090 [%text value] value
9191 [%node event x] "node"
92−++ grouped |= x=(element.first @t)
92+++ grouped |= x=(node-tree.first @t)
9393 ?- (x)
9494 [%text value] value
9595 [%node event kids] (event "click")
96−++ called |= x=(element.first @t)
96+++ called |= x=(node-tree.first @t)
9797 ?- (generic-id.first x)
9898 [%text value] value
9999 [%node event kids] (event "click")
100−++ missing-context |= x=(element.first @t)
100+++ missing-context |= x=(node-tree.first @t)
101101 ^- @t ?- x
102102 [%text item] item
103−++ missing-node |= x=(element.first @t)
103+++ missing-node |= x=(node-tree.first @t)
104104 ?- x
105105 [%node action kids] (action "click")
106−++ single-wild |= x=(element.first @t)
106+++ single-wild |= x=(node-tree.first @t)
107107 ?- x
108108 * "all"
109−++ single-bind |= x=(element.first @t)
109+++ single-bind |= x=(node-tree.first @t)
110110 ?- x
111111 all all
112−++ polymorphic-source ^- (element.first A) [%text value="source"]
112+++ polymorphic-source ^- (node-tree.first A) [%text value="source"]
113113++ polymorphic-match ?- polymorphic-source
114− [%text text] text
115−++ all |= x=(element.first @t)
114+ [%text words] words
115+++ all |= x=(node-tree.first @t)
116116 ?- x
117117 * "all"
118−++ catch-tail |= x=(element.first @t)
118+++ catch-tail |= x=(node-tree.first @t)
119119 ?- x
120120 [%text value] value
121121 * "node"
122−++ catch-first-dead |= x=(element.first @t)
122+++ catch-first-dead |= x=(node-tree.first @t)
123123 ?- x
124124 * "all"
125125 [%text value] value
126−++ late-dead |= x=(element.first @t)
126+++ late-dead |= x=(node-tree.first @t)
127127 ?- x
128128 [%text value] value
129129 [%node event kids] (event "click")
130130 * "dead"
131−++ duplicate-third |= x=(element.first @t)
131+++ duplicate-third |= x=(node-tree.first @t)
132132 ?- x
133133 [%text value] value
134134 [%node event kids] (event "click")
135135 [%text other] other
136−++ nominal-result |= x=(element.first A)
136+++ nominal-result |= x=(node-tree.first A)
137137 ?- x
138138 [%text value] x
139139 * x
140−++ nominal-context |= x=(element.first A)
141− ^- (element.first A) ?- x
140+++ nominal-context |= x=(node-tree.first A)
141+ ^- (node-tree.first A) ?- x
142142 [%text value] x
143143 * x
144−++ forbidden-bind |= x=(element.first @t)
144+++ forbidden-bind |= x=(node-tree.first @t)
145145 ?- x
146146 [%text value] value
147147 rest rest
148−++ missing-again |= x=(element.first @t)
148+++ missing-again |= x=(node-tree.first @t)
149149 ?- x
150150 [%text value] value
151−++ catch-pending |= x=(element.first @t)
151+++ catch-pending |= x=(node-tree.first @t)
152152 ?- x
153153 [%text value] [%unrelated value]
154154 * [%unrelated "node"]
155−++ called-all |= x=(element.first @t)
155+++ called-all |= x=(node-tree.first @t)
156156 ?- (generic-id.first x)
157157 * "all"
158−++ called-context |= x=(element.first @t)
158+++ called-context |= x=(node-tree.first @t)
159159 ^- @t ?- (generic-id.first x)
160160 * "all"
161−++ called-nominal |= x=(element.first A)
162− ^- (element.first A) ?- (generic-id.first x)
161+++ called-nominal |= x=(node-tree.first A)
162+ ^- (node-tree.first A) ?- (generic-id.first x)
163163 * x
164−++ called-missing |= x=(element.first @t)
164+++ called-missing |= x=(node-tree.first @t)
165165 ?- (generic-id.first x)
166166 [%text value] value
tests/type-generic-pattern/expected.txt+24−24
@@ -23,17 +23,17 @@ zero arm budget declined: ok
2323hidden view stays nominally unknown: ok
2424catch-all keeps fuel and pending state: ok
2525partial inference; module not checked
26−++ describe: $-((element.first @t) @t)
27−++ reverse: $-((element.first @p) @p)
28−++ generic-children: $-((element.first A) (list (element.first A)))
29−++ alias-children: $-((alias.via @p) (list (element.first @p)))
30−++ rebuild: $-((element.first @t) (element.first @t))
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))
3131++ wrong-return: union branch result matching needs unsupported inference
3232++ duplicate: branch arm is covered by earlier arms
3333/tests/tree/client.jibb:31:5: covered arm
3434 [%text b] b
3535 ^
36−++ missing: missing union case [%node [event=$-(@t @t) children=(list (element.first @t))]]
36+++ missing: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
3737++ shadow: pattern binder shadows a name
3838++ bad-tag: branch is not supported by partial inference
3939++ whole-tail: branch is not supported by partial inference
@@ -43,23 +43,23 @@ partial inference; module not checked
4343/tests/tree/client.jibb:59:5: covered arm
4444 [%text b] b
4545 ^
46−++ wild: $-((element.first @t) @t)
47−++ whole-wild: $-((element.first @t) @t)
46+++ wild: $-((node-tree.first @t) @t)
47+++ whole-wild: $-((node-tree.first @t) @t)
4848++ foreign-children: union branch result constraint is not supported by partial inference
4949++ wrong-argument: union branch result constraint is not supported by partial inference
50−++ nested-child: $-((element.first @t) @t)
50+++ nested-child: $-((node-tree.first @t) @t)
5151++ duplicate-binder: pattern binder shadows a name
5252++ target-shadow: pattern binder shadows a name
53−++ grouped: $-((element.first @t) @t)
54−++ called: $-((element.first @t) @t)
55−++ missing-context: missing union case [%node [event=$-(@t @t) children=(list (element.first @t))]]
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))]]
5656++ missing-node: missing union case [%text value=@t]
57−++ single-wild: $-((element.first @t) @t)
57+++ single-wild: $-((node-tree.first @t) @t)
5858++ single-bind: branch is not supported by partial inference
59−++ polymorphic-source: (element.first A)
60−++ polymorphic-match: missing union case [%node [event=$-(@t A) children=(list (element.first A))]]
61−++ all: $-((element.first @t) @t)
62−++ catch-tail: $-((element.first @t) @t)
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)
6363++ catch-first-dead: branch arm is covered by earlier arms
6464/tests/tree/client.jibb:125:5: covered arm
6565 [%text value] value
@@ -72,18 +72,18 @@ partial inference; module not checked
7272/tests/tree/client.jibb:135:5: covered arm
7373 [%text other] other
7474 ^
75−++ nominal-result: $-((element.first A) (element.first A))
76−++ nominal-context: $-((element.first A) (element.first A))
75+++ nominal-result: $-((node-tree.first A) (node-tree.first A))
76+++ nominal-context: $-((node-tree.first A) (node-tree.first A))
7777++ forbidden-bind: branch is not supported by partial inference
78−++ missing-again: missing union case [%node [event=$-(@t @t) children=(list (element.first @t))]]
78+++ missing-again: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
7979++ catch-pending: union branch result matching needs unsupported inference
8080++ called-all: branch pattern is not supported by partial inference
81−++ called-context: $-((element.first @t) @t)
82−++ called-nominal: $-((element.first A) (element.first A))
81+++ called-context: $-((node-tree.first @t) @t)
82+++ called-nominal: $-((node-tree.first A) (node-tree.first A))
8383++ called-missing: single-case pattern needs unsupported inference
8484partial inference; module not checked
85−++ words: $-((element.first @t) @t)
86−++ children: $-((element.first A) (list (element.first A)))
85+++ words: $-((node-tree.first @t) @t)
86+++ children: $-((node-tree.first A) (list (node-tree.first A)))
8787++ duplicate: branch arm is covered by earlier arms
8888/tests/tree/no-event.jibb:13:5: covered arm
8989 [%text b] b
tests/type-generic-pattern/no-event.txt+5−5
@@ -1,17 +1,17 @@
11/= first /ui/tree
2−++ words |= x=(element.first @t)
2+++ words |= x=(node-tree.first @t)
33 ?- x
44 [%text value] value
55 [%node kids] "node"
6−++ children |= x=(element.first A)
7− ^- (list (element.first A)) ?- x
6+++ children |= x=(node-tree.first A)
7+ ^- (list (node-tree.first A)) ?- x
88 [%text value] ~
99 [%node kids] kids
10−++ duplicate |= x=(element.first @t)
10+++ duplicate |= x=(node-tree.first @t)
1111 ?- x
1212 [%text a] a
1313 [%text b] b
14−++ nested-pattern |= x=(element.first @t)
14+++ nested-pattern |= x=(node-tree.first @t)
1515 ?- x
1616 [%text value] value
1717 [%node [first rest]] "node"
tests/type-generic-pattern/owner-bad.txt+11−11
@@ -1,22 +1,22 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
7−++ describe |= x=(element @t)
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)
88 ?- x
99 [%text value] value
1010 [%node event kids] (event "click")
11−++ children |= x=(element A)
12− ^- (list (element A)) ?- x
11+++ children |= x=(node-tree A)
12+ ^- (list (node-tree A)) ?- x
1313 [%text value] ~
1414 [%node event kids] kids
15−++ rebuild |= x=(element @t)
16− ^- (element @t) ?- x
15+++ rebuild |= x=(node-tree @t)
16+ ^- (node-tree @t) ?- x
1717 [%text value] [%text value=value]
1818 [%node event kids] [%node event=event children=kids]
19−++ wrong |= x=(element @t)
19+++ wrong |= x=(node-tree @t)
2020 ?- x
2121 [%text value] value
2222 [%node event event] "bad"
tests/type-generic-pattern/owner.txt+10−10
@@ -1,18 +1,18 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
7−++ describe |= x=(element @t)
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)
88 ?- x
99 [%text value] value
1010 [%node event kids] (event "click")
11−++ children |= x=(element A)
12− ^- (list (element A)) ?- x
11+++ children |= x=(node-tree A)
12+ ^- (list (node-tree A)) ?- x
1313 [%text value] ~
1414 [%node event kids] kids
15−++ rebuild |= x=(element @t)
16− ^- (element @t) ?- x
15+++ rebuild |= x=(node-tree @t)
16+ ^- (node-tree @t) ?- x
1717 [%text value] [%text value=value]
1818 [%node event kids] [%node event=event children=kids]
tests/type-generic-recursion/about.txt+1−1
@@ -3,7 +3,7 @@ source: docs/spec/grammar.md:57,135,162 — “Molds may be recursive”; “rec
33This shared eval and ship fixture checks a deliberately narrow source-backed
44recursive identity: two distinct tagged cases, a text leaf and a node with a
55message-producing gate and a list of recursive children. The test-only tree is
6−not a chosen element representation. A complete import-free owner module must
6+not the UI `element` representation. A complete import-free owner module must
77check before its interface is published. Same-origin aliases retain identity,
88while different origins, unproved casts and broader matching remain unsupported.
99A wrong-aura constructor fails the complete owner check. An opaque recursive type prevents premature numeric defaulting;
tests/type-generic-recursion/alias.txt+1−1
@@ -1,3 +1,3 @@
11/= source /ui/tree
2−+$ alias |$ [A] (element.source A)
2++$ alias |$ [A] (node-tree.source A)
33++ identity |= x=(alias A) x
tests/type-generic-recursion/bad-constructor.txt+6−6
@@ -1,8 +1,8 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77
8−++ construct ^- (element @t) [%text value=~zod]
8+++ construct ^- (node-tree @t) [%text value=~zod]
tests/type-generic-recursion/bad-match.txt+6−6
@@ -1,10 +1,10 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
7−++ match |= x=(element @t)
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)
88 ?- x
99 [%text value] value
1010 [%node event event] "node"
tests/type-generic-recursion/bad-mold.txt+5−5
@@ -1,8 +1,8 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77
88+$ unused _
tests/type-generic-recursion/bad-parameter.txt+5−5
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element @t))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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/client.txt+6−6
@@ -2,10 +2,10 @@
22/= again /ui/tree
33/= second /ui/tree-two
44/= via /ui/tree-alias
5−++ from-first |= x=(element.first @t) x
6−++ from-again |= x=(element.again @p) x
7−++ same-origin |= x=(element.first @t) ^- (element.again @t) x
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
88++ from-alias |= x=(alias.via @t) x
9−++ through-alias |= x=(element.first @t) ^- (alias.via @t) x
10−++ different-origin |= x=(element.first @t) ^- (element.second @t) x
11−++ independent |= [a=(element.first @t) b=(element.first @p)] [(generic-id.first a) (generic-id.first b)]
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.txt+5−5
@@ -26,10 +26,10 @@ duplicate source declined: ok
2626active import cycle declined: ok
2727changed prelude invalidates cache: ok
2828partial inference; module not checked
29−++ from-first: $-((element.first @t) (element.first @t))
30−++ from-again: $-((element.again @p) (element.again @p))
31−++ same-origin: $-((element.first @t) (element.again @t))
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))
3232++ from-alias: $-((alias.via @t) (alias.via @t))
33−++ through-alias: $-((element.first @t) (alias.via @t))
33+++ through-alias: $-((node-tree.first @t) (alias.via @t))
3434++ different-origin: cast constraint is not supported by partial inference
35−++ independent: $-([a=(element.first @t) b=(element.first @p)] [(element.first @t) (element.first @p)])
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.txt+2−2
@@ -1,4 +1,4 @@
11+$ list |$ [M] [%fake value=M]
2−+$ element |$ [M]
2++$ node-tree |$ [M]
33 [%text value=@t]
4− [%node children=(list (element M))]
4+ [%node children=(list (node-tree M))]
tests/type-generic-recursion/local-distinct.txt+7−7
@@ -1,11 +1,11 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77++ shadow |= x=@t
8− +$ element |$ [M]
8+ +$ node-tree |$ [M]
99 [%different value=@t]
10− [%node event=$-(@t M) children=(list (element M))]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
1111 x
tests/type-generic-recursion/local-only.txt+5−5
@@ -1,9 +1,9 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77++ local-only |= x=@t
88 +$ local-tree |$ [M]
99 [%text value=@t]
tests/type-generic-recursion/local-shadow.txt+7−7
@@ -1,11 +1,11 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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
77++ shadow |= x=@t
8− +$ element |$ [M]
8+ +$ node-tree |$ [M]
99 [%text value=@t]
10− [%node event=$-(@t M) children=(list (element M))]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
1111 x
tests/type-generic-recursion/tree-changed.txt+5−5
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%branch event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
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.txt+5−5
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
4−++ text-id |= x=(element @t) x
5−++ ship-id |= x=(element @p) x
6−++ generic-id |= x=(element A) x
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+++ text-id |= x=(node-tree @t) x
5+++ ship-id |= x=(node-tree @p) x
6+++ generic-id |= x=(node-tree A) x
tests/type-list-alias/expected.txt+4−4
@@ -1,6 +1,6 @@
11canonical
22partial inference; module not checked
3−++ text: $-((list @t) (list @t))
3+++ text-value: $-((list @t) (list @t))
44++ ship: $-((list @p) (list @p))
55++ wrong: list item does not fit its expected type
66/ui/test.jibb:3:13: expected item has type @t
@@ -12,13 +12,13 @@ partial inference; module not checked
1212++ shadow: local molds shadow a name
1313altered
1414partial inference; module not checked
15−++ text: sample mold is not supported by partial inference
15+++ text-value: sample mold is not supported by partial inference
1616++ ship: sample mold is not supported by partial inference
1717++ wrong: cast mold is not supported by partial inference
1818++ shadow: sample mold is not supported by partial inference
1919omitted
2020partial inference; module not checked
21−++ text: sample mold is not supported by partial inference
21+++ text-value: sample mold is not supported by partial inference
2222++ ship: sample mold is not supported by partial inference
2323++ wrong: cast mold is not supported by partial inference
2424++ shadow: sample mold is not supported by partial inference
@@ -30,7 +30,7 @@ partial inference; module not checked
3030prelude source does not parse; module import inference unsupported
3131cyclic
3232partial inference; module not checked
33−++ text: sample mold is not supported by partial inference
33+++ text-value: sample mold is not supported by partial inference
3434++ ship: sample mold is not supported by partial inference
3535++ wrong: cast mold is not supported by partial inference
3636++ shadow: local molds shadow a name
tests/type-program-main/about.txtnew file+1
@@ -0,0 +1 @@
1+tests: A direct four-wing program main uses the ordinary source-backed program fit. Its init data and model are closed and gate-free within the shared 256-node budget, and subs syntactically returns null through transparent forms. The fixture checks exported and downstream imported types, source evidence, structured and legacy adapters, and fail-closed controls. It does not execute a program or establish runtime watchability.
tests/type-program-main/alias-main.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program-alias init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ program-alias program
tests/type-program-main/arbitrary-main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main init
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-main/island
2+++ imported init.main.island-prog
tests/type-program-main/gate-data.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=$-(@t @t) ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/gate-model.txtnew file+11
@@ -0,0 +1,11 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud callback=$-(@t @t)]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0 callback=echo]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ echo |= input=@t input
tests/type-program-main/initializer-consumer.txtnew file+2
@@ -0,0 +1,2 @@
1+/= island-prog /tests/program-main/initializer
2+++ imported init.main.island-prog
tests/type-program-main/initializer-earlier.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts ~zod ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-error.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=@t]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-generic.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-message.txtnew file+13
@@ -0,0 +1,13 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ other
6+ %start
7+ %stop
8+++ main (program init update view subs)
9+++ init |= ts=(list @t) [ts "" ~]
10+++ update |= [msg=other state=model]
11+ ^- [model (list (cmd other))] [state ~]
12+++ view |= state=model ^- (element message) (text "view")
13+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-missing.txtnew file+9
@@ -0,0 +1,9 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ update |= [msg=message state=model]
7+ ^- [model (list (cmd message))] [state ~]
8+++ view |= state=model ^- (element message) (text "view")
9+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-model.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ other [xs=(list @t) draft=@t error=(unit @t) extra=@ud]
3++$ message
4+ %start
5+ %stop
6+++ main (program init update view subs)
7+++ init |= ts=(list @t) [ts "" ~]
8+++ update |= [msg=message state=other]
9+ ^- [other (list (cmd message))] [state ~]
10+++ view |= state=model ^- (element message) (text "view")
11+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-no-main.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ direct (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-subs.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state ~
tests/type-program-main/initializer-tag.txtnew file+13
@@ -0,0 +1,13 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
11+++ orphan
12+ ~& %unrelated
13+ 0
tests/type-program-main/initializer-unfaced.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= input=[message model]
8+ ^- [model (list (cmd message))] [[~ "" ~] ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer.txtnew file+12
@@ -0,0 +1,12 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ (~)
tests/type-program-main/mismatched-model.txtnew file+10
@@ -0,0 +1,10 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=@p]
8+ ^- [@p (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/nonempty-subs.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program init update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ ~[[%watch (pure %start)]]
tests/type-program-main/open-message.txtnew file+7
@@ -0,0 +1,7 @@
1++$ model [count=@ud]
2+++ main (program init update view subs)
3+++ init |= input=@t ^- model [count=0]
4+++ update |= [msg=M state=model]
5+ ^- [model (list (cmd M))] [state ~]
6+++ view |= state=model ^- (element M) (text "view")
7+++ subs |= state=model ^- (list (sub M)) ~
tests/type-program-main/source.txtnew file+12
@@ -0,0 +1,12 @@
1++$ message
2+ %start
3+ %stop
4++$ model [count=@ud]
5+++ main (program (init) update view subs)
6+++ init |= input=@t ^- model [count=0]
7+++ update |= [msg=message state=model]
8+ ^- [model (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model
11+ ^- (list (sub message))
12+ (~)
tests/type-program-watch/about.txtnew file+1
@@ -0,0 +1 @@
1+tests: A synthetic closed program uses the real todo API and Hoon readers with synthetic init, update and view definitions. A singleton direct todos.api watch must match exact merged source-backed request evidence; the fixture checks its closed subs type and downstream import. Pure and hand-built requests, helpers and aliases, scry, missing, mismatched or ambiguous evidence, typed paths, diffs and multiple subscriptions are rejected. It does not execute the todo UI or establish runtime watching.
tests/type-todo-partial/expected.txt+2−2
@@ -4,10 +4,10 @@ partial inference; module not checked
44+$ model: not checked
55+$ msg: cases proven disjoint; mold not checked
66++ init: `~` needs context in partial inference
7−++ update: name is not available to partial inference
7+++ update: branch tag or union context is not supported by partial inference
88++ subs: call constraint is not supported by partial inference
99++ view: name is not available to partial inference
10−++ row-of: name is not available to partial inference
10+++ row-of: tag needs context in partial inference
1111negative API imports
1212missing-mark: rejected
1313duplicate-mark: rejected
tests/type-union-source/mixed-source.txt+2−2
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
22 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
44+$ tagged |$ [A] [%wrapped A]
55+$ choice
66 (tagged @t)
tools/testdata/ship-selftest+27
@@ -316,12 +316,17 @@ def generator_checks(tmp):
316316 'tests/lib/jibb-empty.hoon',
317317 'tests/lib/jibb-union-source.hoon',
318318 'tests/lib/jibb-union-alias-overlap.hoon',
319+ 'tests/lib/jibb-full-overlap-basic.hoon',
320+ 'tests/lib/jibb-full-overlap-graph.hoon',
319321 'tests/lib/jibb-api-evidence.hoon',
320322 'tests/lib/jibb-ask-guards.hoon',
321323 'tests/lib/jibb-request-guards.hoon',
322324 'tests/lib/jibb-closed-gate-guards.hoon',
323325 'tests/lib/jibb-direct-gate-guards.hoon',
324326 'tests/lib/jibb-direct-gate-source.hoon',
327+ 'tests/lib/jibb-program-main.hoon',
328+ 'tests/lib/jibb-program-init.hoon',
329+ 'tests/lib/jibb-program-watch.hoon',
325330 'tests/lib/jibb-todo-api.hoon',
326331 'tests/lib/jibb-todo-partial.hoon',
327332 'tests/lib/jibb-constructor-fit-guards.hoon',
@@ -332,6 +337,7 @@ def generator_checks(tmp):
332337 'tests/lib/jibb-deferred.hoon',
333338 'tests/lib/jibb-deferred-resolver.hoon',
334339 'tests/lib/jibb-deferred-context.hoon',
340+ 'tests/lib/jibb-deferred-prepared.hoon',
335341 'tests/lib/jibb-cell-branch.hoon'}
336342 <= normal_tests, sorted(normal_tests))
337343 check('generic recursion source and golden are assembled',
@@ -363,6 +369,11 @@ def generator_checks(tmp):
363369 {f'tests/type-union-alias-overlap/{name}.txt' for name in (
364370 'positive', 'negative', 'nonzero', 'multi', 'opaque', 'wrong',
365371 'duplicate', 'qualified', 'flag-source', 'expected')} <= set(normal.files))
372+ check('full overlap source fixtures are assembled',
373+ {f'tests/type-full-overlap/{name}.txt' for name in (
374+ 'same', 'zero', 'unsupported', 'precedence', 'duplicate',
375+ 'invalid', 'distinct', 'parent', 'child', 'generic',
376+ 'duplicate-generic', 'expected-basic', 'expected-graph')} <= set(normal.files))
366377 check('deferred transaction and resolver sources are assembled',
367378 {'tests/type-deferred/nested-src.txt', 'tests/type-deferred/principal-src.txt',
368379 'tests/type-deferred/expected.txt', 'tests/type-deferred-resolver/good.txt',
@@ -376,12 +387,28 @@ def generator_checks(tmp):
376387 {f'tests/type-deferred-context/{name}.txt' for name in (
377388 'rich', 'plain', 'simple', 'missing', 'wrong', 'duplicate',
378389 'dangling', 'collision-early', 'collision-late', 'report')} <= set(normal.files))
390+ check('prepared initializer sources and exact reports are assembled',
391+ {f'tests/type-deferred-prepared/{name}.txt' for name in (
392+ 'good', 'tuple-only', 'wrong-unit', 'wrong-draft', 'unrelated-tag',
393+ 'mold-collision', 'no-final-cast', 'no-prelude', 'main',
394+ 'imported', 'expected', 'expected-control', 'expected-tuple-only')} <= set(normal.files))
379395 check('cell branch sources are assembled',
380396 {'tests/type-cell-branch/good.txt', 'tests/type-cell-branch/bad.txt'}
381397 <= set(normal.files))
382398 check('direct gate source and golden are assembled',
383399 {'tests/type-direct-gate/source.txt', 'tests/type-direct-gate/expected.txt'}
384400 <= set(normal.files))
401+ check('program main sources and shared fixture are assembled',
402+ {f'tests/type-program-main/{name}.txt' for name in (
403+ 'source', 'consumer', 'gate-model', 'gate-data', 'nonempty-subs',
404+ 'mismatched-model', 'arbitrary-main', 'alias-main', 'open-message',
405+ 'initializer', 'initializer-consumer', 'initializer-unfaced',
406+ 'initializer-error', 'initializer-earlier', 'initializer-model',
407+ 'initializer-message', 'initializer-generic', 'initializer-missing',
408+ 'initializer-tag', 'initializer-no-main', 'initializer-subs')} <= set(normal.files))
409+ check('program watch shared fixture is assembled',
410+ {'tests/lib/jibb-program-watch.hoon', 'tests/type-program-watch/about.txt'}
411+ <= set(normal.files))
385412 check('todo partial golden and reused sources are assembled',
386413 {'tests/type-todo-partial/expected.txt', 'tests/type-gate-free/todo.txt',
387414 'tests/type-api-paths/api.txt'} <= set(normal.files))
tools/type-deferred-prepared-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Evaluate prepared-prelude initializer recovery and report guards."""
3+from pathlib import Path
4+import argparse, subprocess, sys, tempfile
5+root = Path(__file__).resolve().parent.parent
6+p = argparse.ArgumentParser(description=__doc__)
7+p.add_argument('--lib', default=str(root/'jibb-dev/lib/jibb.hoon'))
8+p.add_argument('--hoon', default=str(root/'tools/hoon'))
9+a = p.parse_args()
10+core = (root / 'tests/lib/jibb-deferred-prepared.hoon').read_text()
11+core = core[core.index('\n|%\n') + 1:]
12+names = ['good', 'tuple-only', 'wrong-unit', 'wrong-draft', 'unrelated-tag', 'mold-collision',
13+ 'no-final-cast', 'no-prelude', 'main', 'imported', 'expected', 'expected-control',
14+ 'expected-tuple-only']
15+bindings = ''.join('=/ '+('main-source' if n == 'main' else n)+'=wain (to-wain:format '+n+'-text)\n' for n in names)
16+at = '/ui/prepared/jibb'
17+checks = ['(check-prepared:suite %s %s %s)' % (where, source, valid)
18+ for where, source, valid in (
19+ (at, 'good', '&'), (at, 'tuple-only', '&'), (at, 'no-prelude', '&'),
20+ (at, 'wrong-unit', '|'), (at, 'wrong-draft', '|'),
21+ (at, 'unrelated-tag', '|'), (at, 'mold-collision', '|'),
22+ (at, 'no-final-cast', '|'), (at, 'main-source', '|'),
23+ (at, 'imported', '|'),
24+ ('/ui/api/prepared/jibb', 'good', '|'),
25+ ('/ui/stores/prepared/jibb', 'good', '|'))]
26+checks += ['check-no-prelude:suite', 'check-ordinary:suite', 'check-prepared-binding:suite',
27+ '(check-report:suite good expected)', '(check-report:suite tuple-only expected-tuple-only)',
28+ '(check-report:suite no-final-cast expected-control)']
29+with tempfile.TemporaryDirectory(prefix='jibb-deferred-prepared-') as d:
30+ f = Path(d) / 'report.hoon'
31+ for check in checks:
32+ program = ('=/ jibb .\n' + bindings + '=/ suite\n' + core +
33+ "\n^- @t\n=/ checked=tang " + check + "\n?~ checked 'prepared deferred inference guards passed'\n(crip \"{<checked>}\")\n")
34+ f.write_text(program)
35+ cmd = [a.hoon, '--lib', a.lib, '--raw', '-f', str(f),
36+ '--cord', 'prelude='+str(root/'jibb-dev/lib/jibb/prelude.jibb'),
37+ '--cord', 'internal='+str(root/'jibb-dev/lib/jibb/internal.jibb')]
38+ for n in names:
39+ fixture = root/'tests/type-deferred-prepared'/(n+'.txt')
40+ if not fixture.is_file() or fixture.stat().st_size == 0:
41+ sys.exit('missing or empty fixture: '+str(fixture))
42+ cmd.extend(['--cord', n+'-text='+str(fixture)])
43+ got = subprocess.run(cmd, stdout=subprocess.PIPE)
44+ if got.returncode:
45+ sys.exit(got.returncode)
46+ if got.stdout != b'prepared deferred inference guards passed\n':
47+ sys.stderr.write(got.stdout.decode(errors='replace'))
48+ sys.exit(1)
49+print('prepared deferred inference guards passed')
tools/type-full-overlap-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Check source-bound full-module overlap evidence under eval."""
3+from pathlib import Path
4+import argparse
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+parser = argparse.ArgumentParser(description=__doc__)
12+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
13+parser.add_argument('--update', action='store_true')
14+args = parser.parse_args()
15+fixture = root / 'tests/type-full-overlap'
16+cases = {
17+ 'basic': ['same', 'zero', 'unsupported', 'precedence', 'duplicate', 'invalid', 'distinct', 'parent', 'child', 'generic', 'duplicate-generic'],
18+ 'graph': ['parent', 'child', 'distinct'],
19+}
20+for kind, names in cases.items():
21+ source = (root / 'tests/lib' / f'jibb-full-overlap-{kind}.hoon').read_text()
22+ source = source[source.index('\n|%\n') + 1:]
23+ cords = [item for name in names for item in ('--cord', f'{name}-text={fixture / (name + ".txt")}')]
24+ expected = fixture / f'expected-{kind}.txt'
25+ if not args.update:
26+ cords += ['--cord', f'expected-text={expected}']
27+ bindings = ''.join(f'=/ {name}=wain (to-wain:format {name}-text)\n' for name in names)
28+ program = ('=/ jibb .\n' + bindings +
29+ ('=/ expected=wain ~\n' if args.update else '=/ expected=wain (to-wain:format expected-text)\n') +
30+ '=/ suite\n' + source + '\n=/ output=@t (output:suite ' +
31+ ' '.join(name + '-text' for name in names) + ')\n' +
32+ ('output\n' if args.update else
33+ f"=/ actual-test=tang test-full-overlap-{kind}:suite\n?~ actual-test output\n'BAD ship test arm'\n"))
34+ with tempfile.TemporaryDirectory(prefix='jibb-full-overlap-') as tmp:
35+ path = Path(tmp) / 'driver.hoon'
36+ path.write_text(program)
37+ result = subprocess.run([str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path), *cords], stdout=subprocess.PIPE)
38+ if result.returncode:
39+ sys.exit(result.returncode)
40+ if any(line.startswith(b'BAD ') or line.endswith(b': BAD') for line in result.stdout.splitlines()):
41+ sys.stderr.write(f'{kind} overlap guard assertion failed:\n')
42+ sys.stderr.buffer.write(result.stdout)
43+ sys.exit(1)
44+ if args.update:
45+ expected.write_bytes(result.stdout)
46+ elif result.stdout != expected.read_bytes():
47+ sys.stderr.writelines(difflib.unified_diff(expected.read_text().splitlines(keepends=True), result.stdout.decode().splitlines(keepends=True), fromfile=str(expected), tofile='actual'))
48+ sys.exit(1)
49+print('source-bound full-module overlap guards passed')
tools/type-program-init-testnew file+49
@@ -0,0 +1,49 @@
1+#!/usr/bin/env python3
2+"""Run transactional direct-program initializer context checks under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+
14+def body(name):
15+ text = (root / 'tests/lib' / name).read_text()
16+ return text[text.index('\n|%\n') + 1:]
17+
18+names = ('initializer', 'initializer-consumer', 'initializer-unfaced',
19+ 'initializer-error', 'initializer-earlier', 'initializer-model',
20+ 'initializer-message', 'initializer-generic', 'initializer-missing',
21+ 'initializer-tag', 'initializer-no-main', 'initializer-subs')
22+expression = ('=/ jibb .\n=/ prelude=@t prelude-text\n'
23+ '=/ internal=@t internal-text\n' +
24+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
25+ for name in names) +
26+ '=/ suite\n' + body('jibb-program-init.hoon') +
27+ '\n=/ negatives=(list @t)\n :~ (text:suite initializer-error)\n'
28+ ' (text:suite initializer-earlier)\n (text:suite initializer-model)\n'
29+ ' (text:suite initializer-message)\n (text:suite initializer-generic)\n'
30+ ' (text:suite initializer-missing)\n (text:suite initializer-tag)\n'
31+ ' (text:suite initializer-no-main)\n (text:suite initializer-subs)\n ==\n'
32+ '=/ failures=(list tape) (program-init-errors:suite prelude internal (text:suite initializer) (text:suite initializer-consumer) (text:suite initializer-unfaced) negatives)\n'
33+ '^- @t\n?~ failures \'program initializer checks passed\'\n'
34+ '(of-wain:format (turn failures crip))\n')
35+with tempfile.TemporaryDirectory(prefix='jibb-program-init-') as tmp:
36+ program = Path(tmp) / 'program-init.hoon'
37+ program.write_text(expression)
38+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
39+ '--cord', 'prelude-text=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
40+ '--cord', 'internal-text=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
41+ for name in names:
42+ command += ['--cord', name + '-text=' + str(root / 'tests/type-program-main' / (name + '.txt'))]
43+ result = subprocess.run(command, stdout=subprocess.PIPE)
44+if result.returncode:
45+ sys.exit(result.returncode)
46+if result.stdout != b'program initializer checks passed\n':
47+ sys.stderr.buffer.write(result.stdout)
48+ sys.exit(1)
49+print('transactional direct-program initializer context guards passed')
tools/type-program-main-testnew file+46
@@ -0,0 +1,46 @@
1+#!/usr/bin/env python3
2+"""Run the shared closed program-main checks under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+
14+def body(name):
15+ text = (root / 'tests/lib' / name).read_text()
16+ return text[text.index('\n|%\n') + 1:]
17+
18+names = ('source', 'consumer', 'gate-model', 'gate-data', 'nonempty-subs',
19+ 'mismatched-model', 'arbitrary-main', 'alias-main', 'open-message')
20+expression = ('=/ jibb .\n=/ prelude=@t prelude-text\n'
21+ '=/ internal=@t internal-text\n' +
22+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
23+ for name in names) +
24+ '=/ expected=wain ~\n=/ suite\n' + body('jibb-program-main.hoon') +
25+ '\n=/ negatives=(list @t)\n :~ (text:suite gate-model)\n'
26+ ' (text:suite gate-data)\n (text:suite nonempty-subs)\n'
27+ ' (text:suite mismatched-model)\n (text:suite arbitrary-main)\n'
28+ ' (text:suite alias-main)\n (text:suite open-message)\n ==\n'
29+ '=/ failures=(list tape) (program-main-errors:suite prelude internal (text:suite source) (text:suite consumer) negatives)\n'
30+ '^- @t\n?~ failures \'program main checks passed\'\n'
31+ '(of-wain:format (turn failures crip))\n')
32+with tempfile.TemporaryDirectory(prefix='jibb-program-main-') as tmp:
33+ program = Path(tmp) / 'program-main.hoon'
34+ program.write_text(expression)
35+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(program),
36+ '--cord', 'prelude-text=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
37+ '--cord', 'internal-text=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
38+ for name in names:
39+ command += ['--cord', name + '-text=' + str(root / 'tests/type-program-main' / (name + '.txt'))]
40+ result = subprocess.run(command, stdout=subprocess.PIPE)
41+if result.returncode:
42+ sys.exit(result.returncode)
43+if result.stdout != b'program main checks passed\n':
44+ sys.stderr.buffer.write(result.stdout)
45+ sys.exit(1)
46+print('closed program-main interface and rejection guards passed')
tools/type-program-watch-testnew file+48
@@ -0,0 +1,48 @@
1+#!/usr/bin/env python3
2+"""Run direct request-value watchability checks under eval."""
3+from pathlib import Path
4+import argparse
5+import subprocess
6+import sys
7+import tempfile
8+
9+root = Path(__file__).resolve().parent.parent
10+parser = argparse.ArgumentParser(description=__doc__)
11+parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12+args = parser.parse_args()
13+fixture = root / 'tests/type-api-paths/api.txt'
14+actual = root / 'my-app/ui/api/todo.jibb'
15+if fixture.read_bytes() != actual.read_bytes():
16+ sys.exit('todo API fixture differs from my-app/ui/api/todo.jibb')
17+reader = (root / 'jibb-dev/lib/jibb-import.hoon').read_text()
18+tests = (root / 'tests/lib/jibb-program-watch.hoon').read_text()
19+tests = tests[tests.index('\n|%\n') + 1:]
20+names = ('sur', 'action', 'todos', 'update', 'item', 'api')
21+program = ('=/ jibb .\n=/ jibb-import\n' + reader + '\n' +
22+ ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
23+ for name in names) +
24+ '=/ suite\n' + tests +
25+ '\n=/ failures=(list tape) (program-watch-errors:suite prelude internal (text:suite sur) (text:suite action) (text:suite todos) (text:suite update) (text:suite item) (text:suite api))\n'
26+ '^- @t\n?~ failures \'program request-value watchability passed\'\n'
27+ '(of-wain:format (turn failures crip))\n')
28+fixtures = {'sur': 'tests/type-api-paths/todo-sur.txt',
29+ 'action': 'tests/type-api-paths/todo-action.txt',
30+ 'todos': 'tests/type-api-paths/todos.txt',
31+ 'update': 'tests/type-api-paths/todo-update.txt',
32+ 'item': 'tests/type-api-paths/todo-item.txt',
33+ 'api': 'tests/type-api-paths/api.txt'}
34+with tempfile.TemporaryDirectory(prefix='jibb-program-watch-') as tmp:
35+ path = Path(tmp) / 'program-watch.hoon'
36+ path.write_text(program)
37+ command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path),
38+ '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
39+ '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
40+ for name, filename in fixtures.items():
41+ command += ['--cord', name + '-text=' + str(root / filename)]
42+ result = subprocess.run(command, stdout=subprocess.PIPE)
43+if result.returncode:
44+ sys.exit(result.returncode)
45+if result.stdout != b'program request-value watchability passed\n':
46+ sys.stderr.buffer.write(result.stdout)
47+ sys.exit(1)
48+print('direct request-value watchability and rejection guards passed')