on master help sign in
README.md+3−1
since splitsnapshots
unifiedsplit
@@ -42,7 +42,9 @@ tools/hoon '(golden /a/b/jibb (crip "++ main view"))'
42tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
42tools/hoon --raw --cord src=tests/golden/foo/source.jibb 'tree:(golden /a/b/jibb src)'
43```
43```
44
44
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.
46
48
47### The doc's examples
49### The doc's examples
48
50
docs/compiler.md+12−4
@@ -66,7 +66,7 @@ Before the empty-capital optimization below, single sequential eval runs includi
66
66
67Restricted-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.
67Restricted-number promotion only applies to written capital variables. If none are present, it returns immediately instead of traversing the environment. In one startup-inclusive pair of runs on 2,000 independent gates, output was byte-identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds while other checks were running. This does not establish a bound for dependent modules or a complete-checker benchmark.
68
68
69−A bounded source proof can also establish distinct literal heads when a union case is a one-hop application of a uniquely resolved local generic mold. It compares literal runtime nouns and checks the original mold normally before publishing an interface. The same source proof improves the partial report, which still says the mold is not checked. The new proof declines nested or qualified applications, opaque references, recursive-index states, holes and deferred obligations; other valid unions can remain unsupported. A 256-node source budget and a separate 256-entry inherited-state budget apply per attempt. They do not bound the existing pairwise union pass, parsing, atom or name sizes, or downstream checking. Prepared interfaces and inference state remain trusted inputs. `tools/type-union-source-test` and the shared ship guard exercise source resolution, reporting, rollback and these bounds. A separate positive witness can identify overlap in two-field, literal-headed cases when a unique one-hop local, one-parameter generic alias is applied to a concrete primitive payload. It compares the literal noun values and proves the payloads have a shared noun, so an empty or unknown payload is not a witness. The partial report identifies both original case sites; 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.
70
70
71A 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.
71A 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.
72
72
@@ -128,14 +128,20 @@ A two-item tuple with an explicit term, null or loobean head can receive payload
128
128
129`+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.
129`+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.
130
130
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+
131Each 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.
135Each 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.
132
136
133`+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.
137`+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.
134
138
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.
136
140
137`+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.
141`+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.
138
142
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+
139And the design notes:
145And the design notes:
140
146
141| Note | Says |
147| Note | Says |
@@ -190,7 +196,7 @@ Note 4 has examples of each.
190
196
191Starting `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).
197Starting `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).
192
198
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.
194
200
195An 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.
201An 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.
196
202
@@ -198,6 +204,8 @@ In an isolated diagnostic with the real todo API and reader inputs, this cell co
198
204
199A 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.
205A 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.
200
206
207+With the caller's unchanged prepared prelude, the partial report can also recover a narrow import-free, non-main ordinary library initializer. A direct tuple literal may retain one source-owned fit obligation for each newly created pending literal until a later exact result cast closes them. A separate bounded candidate screen admits a direct tuple even without a constructor call. The prepared transaction requires exact agreement among the supplied interface, value inventory and reserved molds, and retains the API, store, import and `main` exclusions. It only adds recovered entries to the partial report: the ordinary full-module resolver does not publish them. Wrong unit or draft fields, unrelated pending tags and mold-name collisions fail closed; without the later final cast, the initializer remains not checked. This does not add list-literal deferral or import-aware recovery.
208+
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.
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.
202
210
203A 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.
211A 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:
14- **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.
14- **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.
15- **Keep docs/ current**: [status.md](status.md) when a milestone moves, [open-questions.md](open-questions.md) when a question is settled or found.
15- **Keep docs/ current**: [status.md](status.md) when a milestone moves, [open-questions.md](open-questions.md) when a question is settled or found.
16
16
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.
18
18
19## Setting up a machine
19## Setting up a machine
20
20
@@ -68,6 +68,7 @@ git clone https://github.com/urbit/tools /root/src/tools
68| `tools/type-import-structural-test` | Checks multi-case and nested Hoon union overlap witnesses under eval and on the ship |
68| `tools/type-import-structural-test` | Checks multi-case and nested Hoon union overlap witnesses under eval and on the ship |
69| `tools/type-union-source-test` | Checks bounded local generic-alias disjointness and state guards under eval and on the ship |
69| `tools/type-union-source-test` | Checks bounded local generic-alias disjointness and state guards under eval and on the ship |
70| `tools/type-union-alias-overlap-test` | Checks source-backed generic-alias overlap witnesses under eval and on the ship |
70| `tools/type-union-alias-overlap-test` | Checks source-backed generic-alias overlap witnesses under eval and on the ship |
71+| `tools/type-full-overlap-test` | Checks structured full-module overlap evidence and imported-source attribution |
71| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
72| `tools/type-tlon-test` | Runs the real Tlon presence source through the importer and partial checker, comparing `tests/type-tlon/expected.txt` under eval |
72| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
73| `tools/type-import-diagnostic-test` | Compares the structured reader diagnostic bridge report under eval |
73| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
74| `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
82| `tools/type-deferred-test` | Checks the bounded source-owned deferred inference transaction under eval and on the ship |
83| `tools/type-deferred-test` | Checks the bounded source-owned deferred inference transaction under eval and on the ship |
83| `tools/type-deferred-resolver-test` | Checks deferred resolution, report consistency and atomic failure under eval and on the ship |
84| `tools/type-deferred-resolver-test` | Checks deferred resolution, report consistency and atomic failure under eval and on the ship |
84| `tools/type-deferred-context-test` | Checks deferred source order and literal branch contexts under eval and on the ship |
85| `tools/type-deferred-context-test` | Checks deferred source order and literal branch contexts under eval and on the ship |
86+| `tools/type-deferred-prepared-test` | Checks prepared-prelude tuple initializer recovery, exact partial reports and fail-closed guards under eval and on the ship |
85| `tools/type-cell-branch-test` | Checks closed-cell branch context, rollback and bounded retry screens under eval and on the ship |
87| `tools/type-cell-branch-test` | Checks closed-cell branch context, rollback and bounded retry screens under eval and on the ship |
86| `tools/type-generic-alias-test` | Runs public/private generic union alias and provenance guards under eval and on the ship |
88| `tools/type-generic-alias-test` | Runs public/private generic union alias and provenance guards under eval and on the ship |
87| `tools/type-positional-face-guards-test` | Runs positional-call and nested-face guards under eval and on the ship |
89| `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
89| `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 |
91| `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 |
90| `tools/type-todo-api-test` | Exercises the actual todo API through the real Hoon readers and partial checker |
92| `tools/type-todo-api-test` | Exercises the actual todo API through the real Hoon readers and partial checker |
91| `tools/type-direct-gate-test` | Checks a synthetic source-backed program report and direct gate provenance under eval and on the ship |
93| `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 |
92| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
97| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
93| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
98| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
94| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
99| `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
115
120
116```
121```
117tools/golden # all cases pass
122tools/golden # all cases pass
123+tools/golden --case types-prelude-ui # exact UI/program/page schemes and composition
118tools/importer-test # Hoon importer fixture projections match
124tools/importer-test # Hoon importer fixture projections match
119tools/type-import-default-test # default-wrapped source proofs match
125tools/type-import-default-test # default-wrapped source proofs match
120tools/type-import-test # importer/checker bridge golden report matches
126tools/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
122tools/type-import-structural-test # nested and multi-case Hoon overlap controls
128tools/type-import-structural-test # nested and multi-case Hoon overlap controls
123tools/type-union-source-test # local generic-alias union guards
129tools/type-union-source-test # local generic-alias union guards
124tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
130tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
131+tools/type-full-overlap-test # full-module overlap evidence
125tools/type-tlon-test # real Tlon importer/checker report matches
132tools/type-tlon-test # real Tlon importer/checker report matches
126tools/type-import-diagnostic-test # direct structured reader diagnostics match
133tools/type-import-diagnostic-test # direct structured reader diagnostics match
127tools/type-mark-test # mark/checker bridge golden report matches
134tools/type-mark-test # mark/checker bridge golden report matches
@@ -136,12 +143,15 @@ tools/type-qath-guards-test # qath source and unfolding guards pass
136tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
143tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
137tools/type-todo-api-test # real todo API partial inference and reader guards pass
144tools/type-todo-api-test # real todo API partial inference and reader guards pass
138tools/type-direct-gate-test # direct gate source and provenance guards pass
145tools/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
139tools/type-generic-recursion-test # source-backed recursive identities and provenance
148tools/type-generic-recursion-test # source-backed recursive identities and provenance
140tools/type-generic-construction-test # source-backed recursive construction and bounds
149tools/type-generic-construction-test # source-backed recursive construction and bounds
141tools/type-generic-pattern-test # source-backed recursive patterns and bounds
150tools/type-generic-pattern-test # source-backed recursive patterns and bounds
142tools/type-deferred-test # source-owned deferred inference guards
151tools/type-deferred-test # source-owned deferred inference guards
143tools/type-deferred-resolver-test # resolver consistency and failure guards
152tools/type-deferred-resolver-test # resolver consistency and failure guards
144tools/type-deferred-context-test # deferred source-order and branch guards
153tools/type-deferred-context-test # deferred source-order and branch guards
154+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
145tools/type-cell-branch-test # contextual branch rollback and bounds
155tools/type-cell-branch-test # contextual branch rollback and bounds
146tools/type-closed-gate-guards-test # closed gate fit guards pass
156tools/type-closed-gate-guards-test # closed gate fit guards pass
147tools/type-constructor-fit-guards-test # constructor fit guards pass
157tools/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 <
212
222
213A 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.
223A 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.
214
224
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
8
8
9The 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.
9The 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.
10
10
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+
11Hoon `+$` 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.
13Hoon `+$` 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.
12
14
13## 1a
15## 1a
@@ -162,6 +164,8 @@ The compiler-result `tone.hoon` has the three cases listed above; the qualified
162
164
163`at`, `cass`, `cuss`, `crip`, `mesc`, `runt`, `sand`, `sane`, `ruth`, `trim`, `trip`, `teff`, `taft`, `tuba`, `tufa`, `tuft`, `wack`, `wick`, `woad`, `wood`.
165`at`, `cass`, `cuss`, `crip`, `mesc`, `runt`, `sand`, `sane`, `ruth`, `trim`, `trip`, `teff`, `taft`, `tuba`, `tufa`, `tuft`, `wack`, `wick`, `woad`, `wood`.
164
166
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+
165## 4k
169## 4k
166
170
167`co`.
171`co`.
docs/status.md+30−11
@@ -1,6 +1,6 @@
1# Status
1# Status
2
2
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.
4
4
5| # | Milestone | Status |
5| # | Milestone | Status |
6| --- | --- | --- |
6| --- | --- | --- |
@@ -27,13 +27,17 @@ The internal prelude also defines `qath` as a transparent recursive knot sequenc
27
27
28The 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.
28The checker also recognizes a limited source-proven generic recursive tree in an import-free defining module. Its nominal identity retains the defining path, mold name and type arguments, including across supported imports and aliases. With a known expected type it can construct supported tagged cases by checking one source-proven layer at a time. Flat matches with explicit tags or nonbinding catch-alls also work for these source-proven trees, as does a missing-case diagnostic for a supported single-arm match. At most 128 arms are screened per attempt; whole-case binders and nested patterns remain unsupported. Broader pattern matching, general structural fits and gate-free proof remain unsupported; this is not yet the prelude's `element` implementation or island checking. The source index uses fixed-shape checks during mold collection. Each construction or supported pattern attempt has 256 unfolding steps and at most 4,096 face and substitution visits per scan; pattern subject recognition and view validation can each scan separately. Parsing, other inference and retries remain outside those limits. A single startup-inclusive comparison of 1,000 ordinary gates produced identical reports and used 29.12 seconds of user CPU before the shared-resolver refactor and 28.55 seconds after it, with other work running; it is not a general performance bound.
29
29
30−A bounded local source proof recognizes a narrow class of generic-alias union cases with different literal heads, then applies the ordinary mold checks. Nested or qualified aliases and several open states remain unsupported, including a valid alias used during the deferred transaction; the partial report states that the mold itself has not been checked. `tools/type-union-source-test` exercises the source and state bounds and failure paths under eval and on the ship. A separate bounded witness now reports proven collisions between supported literal-headed aliases, with both original case sites; unknown payload intersections still decline. 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.
31
31
32The 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.
32The checker can experimentally discharge a narrowly scoped direct-constructor constraint while resolving an import-free library without a prepared prelude. It preserves independent generalized schemes and publishes only after all source molds, values, and recorded constraints close. API/store paths, `main`, imports, prepared preludes, recursive groups, open constraints, projection actions, and `%grec` in the constraint graph remain unsupported by this route. The fallback also declines source shapes outside its bounded direct-call screen. It does not yet typecheck the unchanged todo island or establish watchability.
33
33
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.
35
35
36+Closed cell context can now flow through a bounded loobean branch while preserving the inferred value faces and original failed-inference behavior. Open or structurally uncertain substitutions and nested retry shapes remain unsupported. This does not by itself provide the remaining cross-definition context or complete island-kind and watchability checks needed by the unchanged todo island.
37+
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.
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.
37
41
38Known 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.
42Known 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.
39
43
@@ -41,7 +45,9 @@ A separate source-backed analysis can prove one named mold gate-free, report a d
41
45
42The 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.
46The 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.
43
47
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+
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.
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.
45
51
46For 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.
52For 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.
47
53
@@ -61,7 +67,7 @@ The prelude has Jibb-written curried `lead` and `late` pair constructors, inferr
61
67
62The 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.
68The 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.
63
69
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.
65
71
66The 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.
72The 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.
67
73
@@ -69,6 +75,8 @@ An eval and ship fixture now reports partial inference for the unchanged todo is
69
75
70The 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.
76The 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.
71
77
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+
72The 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.
80The 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.
73
81
74Restricted-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.
82Restricted-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:
89
97
90Besides the plan's list:
98Besides the plan's list:
91
99
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.
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.
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.
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.
94- `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.
102- `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.
95- 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.
103- 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.
96- 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).
104- 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:
201| 22f3788 | 2026-10-31 | Check empty molds and propagate closed cell context into branches |
209| 22f3788 | 2026-10-31 | Check empty molds and propagate closed cell context into branches |
202| 341bcb4 | 2026-10-31 | Keep deferred fits stable under later substitutions |
210| 341bcb4 | 2026-10-31 | Keep deferred fits stable under later substitutions |
203| b93a94b | 2026-10-31 | Prove local generic-alias union tags and add successor |
211| 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 |
205
220
206## Checking it
221## Checking it
207
222
208On a machine set up as [development.md](development.md) says:
223On a machine set up as [development.md](development.md) says:
209
224
210```
225```
211−tools/golden # 658 cases under urbit eval
226+tools/golden # 660 cases under urbit eval
212tools/importer-test # the Hoon importer fixture projection
227tools/importer-test # the Hoon importer fixture projection
213tools/type-import-default-test # default-wrapped source proof golden
228tools/type-import-default-test # default-wrapped source proof golden
214tools/type-import-test # the importer/checker bridge fixture
229tools/type-import-test # the importer/checker bridge fixture
@@ -216,6 +231,7 @@ tools/type-import-overlap-test # source-aware Hoon overlap and provenance fix
216tools/type-import-structural-test # structural overlap and multi-case source fixture
231tools/type-import-structural-test # structural overlap and multi-case source fixture
217tools/type-union-source-test # local generic-alias union guards
232tools/type-union-source-test # local generic-alias union guards
218tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
233tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
234+tools/type-full-overlap-test # full-module overlap evidence
219tools/type-tlon-test # the real Tlon reader/checker fixture
235tools/type-tlon-test # the real Tlon reader/checker fixture
220tools/type-mark-test # the mark/checker bridge fixture
236tools/type-mark-test # the mark/checker bridge fixture
221tools/type-poke-test # the source-backed poke/API fixture
237tools/type-poke-test # the source-backed poke/API fixture
@@ -230,6 +246,7 @@ tools/type-generic-pattern-test # source-proven recursive pattern guards
230tools/type-deferred-test # source-owned deferred inference guards
246tools/type-deferred-test # source-owned deferred inference guards
231tools/type-deferred-resolver-test # resolver consistency and failure guards
247tools/type-deferred-resolver-test # resolver consistency and failure guards
232tools/type-deferred-context-test # deferred source-order and branch guards
248tools/type-deferred-context-test # deferred source-order and branch guards
249+tools/type-deferred-prepared-test # prepared initializer reports and failure guards
233tools/type-empty-test # empty molds and coverage guards
250tools/type-empty-test # empty molds and coverage guards
234tools/type-cell-branch-test # branch context and rollback guards
251tools/type-cell-branch-test # branch context and rollback guards
235tools/type-positional-face-guards-test # positional sample face guards
252tools/type-positional-face-guards-test # positional sample face guards
@@ -237,12 +254,14 @@ tools/type-qath-guards-test # qath source and unfolding guards
237tools/type-ask-guards-test # ask source and bootstrap guards
254tools/type-ask-guards-test # ask source and bootstrap guards
238tools/type-proj-guards-test # projection evidence and scope guards
255tools/type-proj-guards-test # projection evidence and scope guards
239tools/type-module-scope-test # module and prelude scope fixture
256tools/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
240tools/hoon check-spans-test # prints <<>> when the span checker works
259tools/hoon check-spans-test # prints <<>> when the span checker works
241tools/testdata/selftest # the tools themselves
260tools/testdata/selftest # the tools themselves
242tools/doc-blocks docs/spec # the doc's examples are golden cases
261tools/doc-blocks docs/spec # the doc's examples are golden cases
243tools/ship start
262tools/ship start
244tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
263tools/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
246tools/testdata/ship-selftest
265tools/testdata/ship-selftest
247tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
266tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
248tools/ship check-commit # |commit stores .jibb files
267tools/ship check-commit # |commit stores .jibb files
jibb-dev/lib/jibb.hoon+562−51
@@ -8435,7 +8435,10 @@
8435 =/ traced=iresult $(e val.e)
8435 =/ traced=iresult $(e val.e)
8436 ?: ?=(%| -.traced) traced
8436 ?: ?=(%| -.traced) traced
8437 $(e then.e, state state.p.traced)
8437 $(e then.e, state state.p.traced)
8438+ %tuple
8439+ ?: &(?=(^ defer.state) ?=(^ prelude.state))
8440+ (dg-infer-tuple-items items.e env state)
8438− %tuple (infer-simple-items items.e env state)
8441+ (infer-simple-items items.e env state)
8439 %body
8442 %body
8440 ?~ defs.e $(e final.e)
8443 ?~ defs.e $(e final.e)
8441 =/ local-names=(list term) (global-value-names defs.e)
8444 =/ local-names=(list term) (global-value-names defs.e)
@@ -9241,6 +9244,8 @@
9241 |= [e=expr expected=itype env=ienv state=istate context=span]
9244 |= [e=expr expected=itype env=ienv state=istate context=span]
9242 ^- iresult
9245 ^- iresult
9243 ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9246 ?: &(?=(^ defer.state) ?=(%branch -.e)) (infer-fragment e env state)
9247+ ?: &(?=(^ defer.state) ?=(^ prelude.state) ?=(%tuple -.e))
9248+ (infer-fragment e env state)
9244 ?: ?=(%pair -.e) $(e (pair-as-cell e))
9249 ?: ?=(%pair -.e) $(e (pair-as-cell e))
9245 ?: ?=(%group -.e) $(e inner.e)
9250 ?: ?=(%group -.e) $(e inner.e)
9246 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
9251 ?: &(?=(%body -.e) ?=(~ defs.e)) $(e final.e)
@@ -10232,6 +10237,29 @@
10232 (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
10237 (resolve-groups-core ds molds globals externals surs mark-externals marks jimports reserved-molds at prelude ~)
10233::
10238::
10234
10239
10240++$ iadded-definition
10241+ [env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10242+++ add-supported-result
10243+ |= [d=def result=iresult initial=istate env=ienv checked=(map term def) artifacts=(list iwidth-definition)]
10244+ ^- (unit iadded-definition)
10245+ ?> ?=(%value -.d)
10246+ ?: ?=(%| -.result) ~
10247+ =. state.p.result (promote-restricted-numbers state.p.result env)
10248+ =. state.p.result (default-hole-numbers holes.state.p.result holes.initial state.p.result env !(itype-has-gate (itype-normalize typ.p.result sub.state.p.result)))
10249+ ?^ (unresolved-hole holes.state.p.result holes.initial state.p.result) ~
10250+ ?: (constrained-capitals caps.state.p.result sub.state.p.result) ~
10251+ =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
10252+ ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) ~
10253+ ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) ~
10254+ =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10255+ ?: (gth (lent vars) 26) ~
10256+ =/ finalized=(unit (list iwprojection))
10257+ (width-finalize projections.state.p.result sub.state.p.result vars)
10258+ ?~ finalized ~
10259+ =? artifacts ?=(^ u.finalized)
10260+ [[name.d val.d typ sub.state.p.result (flop u.finalized)] artifacts]
10261+ =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
10262+ `[[[name.d [typ vars]] env] checked artifacts]
10235++ add-supported-defs-core
10263++ add-supported-defs-core
10236 |= [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)])]
10264 |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10237 ^- [env=ienv artifacts=(list iwidth-definition)]
10265 ^- [env=ienv artifacts=(list iwidth-definition)]
@@ -10248,23 +10276,10 @@
10248 =. initial (reserve-def-caps val.d initial)
10276 =. initial (reserve-def-caps val.d initial)
10249 =/ result=iresult (infer-fragment val.d env initial)
10277 =/ result=iresult (infer-fragment val.d env initial)
10250 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10278 =? result ?=(%| -.result) (infer-recursive-gate d env initial)
10251− ?: ?=(%| -.result) $(ds t.ds)
10279+ =/ added=(unit iadded-definition)
10252− =. state.p.result (promote-restricted-numbers state.p.result env)
10280+ (add-supported-result d result initial env checked artifacts)
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)
10281+ ?~ added $(ds t.ds)
10264− =? artifacts ?=(^ u.finalized)
10282+ $(ds t.ds, env env.u.added, checked checked.u.added, artifacts artifacts.u.added)
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)
10268::
10283::
10269++ resolve-groups-core
10284++ resolve-groups-core
10270 |= [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)])]
10285 |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
@@ -11006,7 +11021,14 @@
11006+$ jbundle (list jsource)
11021+$ jbundle (list jsource)
11007+$ jcache (list [at=path iface=ifile])
11022+$ jcache (list [at=path iface=ifile])
11008+$ jfile-result (each [iface=ifile cache=jcache] @t)
11023+$ 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)
11009+$ jimports-result (each [resolved=ijimports cache=jcache] @t)
11029+$ 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)
11010::
11032::
11011:: Written record fields each have their own lexical record scope.
11033:: Written record fields each have their own lexical record scope.
11012+$ written-fields (map term span)
11034+$ written-fields (map term span)
@@ -11279,6 +11301,43 @@
11279 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
11301 (skim defs.mod |=(d=def !&(?=(%mold -.d) =(%poke name.d))))
11280 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
11302 (module-scope-valid mod(defs remaining) prelude-values prelude-molds)
11281::
11303::
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]]
11282++ module-mold-types
11341++ module-mold-types
11283 |= [molds=imolds state=istate]
11342 |= [molds=imolds state=istate]
11284 ^- (each imold-types @t)
11343 ^- (each imold-types @t)
@@ -11375,7 +11434,12 @@
11375 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
11434 =/ plus=ischeme [[%fn [%cell b b] b] ~[0]]
11376 =/ minus=ischeme [[%fn b b] ~[0]]
11435 =/ minus=ischeme [[%fn b b] ~[0]]
11377 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
11436 =/ greater=ischeme [[%fn pair [%flag ~]] ~[0]]
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] ~]
11378− [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
11442+ [~[[%raw-add plus] [%raw-dec minus] [%raw-gth greater] [%raw-trip text-trip] [%raw-tuba text-tuba]] ~ /lib/jibb/primitives/jibb ~ ~ ~ ~ ~]
11379::
11443::
11380++ infer-private-internal
11444++ infer-private-internal
11381 |= [src=@t public-source=@t]
11445 |= [src=@t public-source=@t]
@@ -11627,33 +11691,40 @@
11627++ resolve-jibb-imports
11691++ resolve-jibb-imports
11628 |= [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)]
11692 |= [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)]
11629 ^- jimports-result
11693 ^- 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
11630 ?~ imports [%& [~ cache]]
11701 ?~ imports [%& [~ cache]]
11631 ?. ?=(%jibb -.i.imports) $(imports t.imports)
11702 ?. ?=(%jibb -.i.imports) $(imports t.imports)
11632 =/ at=path (weld path.i.imports `path`~[%jibb])
11703 =/ at=path (weld path.i.imports `path`~[%jibb])
11633 ?: =(at /lib/jibb/internal/jibb)
11704 ?: =(at /lib/jibb/internal/jibb)
11634− [%| 'the prelude internal module is private']
11705+ [%| ['the prelude internal module is private' ~]]
11635 ?: =(at /lib/jibb/primitives/jibb)
11706 ?: =(at /lib/jibb/primitives/jibb)
11636− [%| 'the prelude primitive interface is private']
11707+ [%| ['the prelude primitive interface is private' ~]]
11637 ?: (lien active |=(p=path =(p at)))
11708 ?: (lien active |=(p=path =(p at)))
11638− [%| (crip "import cycle at {(spud at)}")]
11709+ [%| [(crip "import cycle at {(spud at)}") ~]]
11639 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
11710 =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
11640− ?~ found [%| (crip "module source missing: {(spud at)}")]
11711+ ?~ found [%| [(crip "module source missing: {(spud at)}") ~]]
11641− ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
11712+ ?^ t.found [%| [(crip "duplicate module sources: {(spud at)}") ~]]
11642 =/ cached=(unit ifile) (find-jibb-cache at cache)
11713 =/ cached=(unit ifile) (find-jibb-cache at cache)
11643− =/ iface=jfile-result
11714+ =/ iface=jfile-detailed-result
11644 ?^ cached
11715 ?^ cached
11645− ?. =(at.u.cached at) [%| 'cached module identity needs unsupported inference']
11716+ ?. =(at.u.cached at) [%| ['cached module identity needs unsupported inference' ~]]
11646 ?~ graph.u.cached
11717 ?~ graph.u.cached
11647 :: A detached legacy interface has unknown evidence. Rebuild it
11718 :: A detached legacy interface has unknown evidence. Rebuild it
11648 :: against the current graph, without retaining any stale entry.
11719 :: against the current graph, without retaining any stale entry.
11649 =/ clean=jcache (skim cache |=(x=[at=path iface=ifile] !=(at.x at)))
11720 =/ 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)
11651 ?. (request-graph-reusable u.cached source.i.found externals mark-externals modules active prelude-values prelude-molds prelude)
11722 ?. (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' ~]]
11653 [%& [u.cached cache]]
11724 [%& [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)
11655 ?: ?=(%| -.iface) [%| p.iface]
11726 ?: ?=(%| -.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)
11657 ?: ?=(%| -.rest) rest
11728 ?: ?=(%| -.rest) rest
11658 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
11729 [%& [[[face.i.imports iface.p.iface] resolved.p.rest] cache.p.rest]]
11659::
11730::
@@ -12387,20 +12458,334 @@
12387 [env exports file derived.u.poke elaborations.support ~ `src `graph]
12458 [env exports file derived.u.poke elaborations.support ~ `src `graph]
12388 [%& [iface dependencies.ev]]
12459 [%& [iface dependencies.ev]]
12389::
12460::
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+::
12390++ infer-jibb-file
12765++ infer-jibb-file
12391 |= [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)]
12766 |= [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)]
12392 ^- jfile-result
12767 ^- 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
12393 =/ parsed (parse at src)
12776 =/ parsed (parse at src)
12394− ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
12777+ ?: ?=(%| -.parsed) [%| [(crip "module source does not parse: {(spud at)}") ~]]
12395 =/ mod=module p.parsed
12778 =/ mod=module p.parsed
12396 =/ duplicate=(unit idiag) (duplicate-defs defs.mod)
12779 =/ 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)}") ~]]
12398 ?: ?=([%ui %api *] at)
12783 ?: ?=([%ui %api *] at)
12399 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
12784 =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
12400 ?^ iface
12785 ?^ iface
12401 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
12786 =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals])
12402 [%& [checked [[at checked] cache]]]
12787 [%& [checked [[at checked] cache]]]
12403− ?~ prelude [%| (crip "API module needs unsupported inference: {(spud at)}")]
12788+ ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
12404 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
12789 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
12405 =/ narrow=?
12790 =/ narrow=?
12406 ?. ?=([[%mark *] ~] imports.mod) |
12791 ?. ?=([[%mark *] ~] imports.mod) |
@@ -12410,21 +12795,24 @@
12410 ?: narrow
12795 ?: narrow
12411 =/ request=(each ione-request-interface @t)
12796 =/ request=(each ione-request-interface @t)
12412 (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
12797 (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)}") ~]]
12414 =/ checked=ifile iface.p.request
12799 =/ checked=ifile iface.p.request
12415 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
12800 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
12416 =/ multi=(each [iface=ifile cache=jcache] @t)
12801 =/ multi=(each [iface=ifile cache=jcache] @t)
12417 (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
12802 (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)}") ~]]
12419 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
12804 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
12420 ?. (module-scope-valid mod prelude-values prelude-molds)
12805 ?. (module-scope-valid mod prelude-values prelude-molds)
12421 ?: (pending-declared-poke at mod prelude-values prelude-molds)
12806 ?: (pending-declared-poke at mod prelude-values prelude-molds)
12422− [%| (crip "module kind or scope needs unsupported inference: {(spud at)}")]
12807+ [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
12423− [%| (crip "module has conflicting names: {(spud at)}")]
12808+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
12424 =/ vals=(list term) (global-value-names defs.mod)
12809 =/ vals=(list term) (global-value-names defs.mod)
12425− ?: (lien vals |=(n=term =(n %main)))
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)))
12426− [%| (crip "module kind needs unsupported inference: {(spud at)}")]
12814+ [%| [(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)
12815+ =/ js=jimports-detailed-result (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
12428 ?: ?=(%| -.js) [%| p.js]
12816 ?: ?=(%| -.js) [%| p.js]
12429 =/ collected=grec-collected
12817 =/ collected=grec-collected
12430 ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
12818 ?^ imports.mod [(collect-simple-molds defs.mod) *(map term shape)]
@@ -12449,13 +12837,26 @@
12449 ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
12837 ?: (lien molds |=(m=[name=term body=shape] =(%list name.m))) ~
12450 `[at src u.prelude index]
12838 `[at src u.prelude index]
12451 =. grec-index.state index
12839 =. grec-index.state index
12452− =/ mts=(each imold-types @t) (module-mold-types molds state)
12840+ =/ mts=(each imold-types imold-failure) (module-mold-types-detail molds state)
12841+ ?: ?=(%| -.mts)
12453− ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
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]]]
12454 =/ resolution=iresolved
12848 =/ resolution=iresolved
12455 ?~ index
12849 ?~ index
12456 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12850 (resolve-groups defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude)
12457 (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
12851 (resolve-groups-core defs.mod molds globals externals surs mark-externals marks resolved.p.js reserved at prelude index)
12458 =/ env=ienv env.resolution
12852 =/ 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)
12459 =. env
12860 =. env
12460 ?: (module-values-complete defs.mod env) env
12861 ?: (module-values-complete defs.mod env) env
12461 ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env
12862 ?: |(?=([%ui %stores *] at) ?=(^ imports.mod) ?=(^ prelude) ?=(^ prelude-values) ?=(^ prelude-molds)) env
@@ -12467,10 +12868,12 @@
12467 ?: (dg-interface-safe env.u.transaction) env.u.transaction
12868 ?: (dg-interface-safe env.u.transaction) env.u.transaction
12468 env
12869 env
12469 ?. (module-values-complete defs.mod env)
12870 ?. (module-values-complete defs.mod env)
12470− [%| (crip "module definitions need unsupported inference: {(spud at)}")]
12871+ [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
12471 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
12872 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ modules prelude prelude-values prelude-molds externals mark-externals]
12472 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
12873 =/ 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)}") ~]]
12474 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
12877 =/ iface=ifile [env p.mts at ~ artifacts.resolution ~ `src graph]
12475 [%& [iface [[at iface] cache.p.js]]]
12878 [%& [iface [[at iface] cache.p.js]]]
12476::
12879::
@@ -12588,7 +12991,7 @@
12588 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
12991 ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
12589 =/ scope-values=(list term)
12992 =/ scope-values=(list term)
12590 (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
12993 (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)
12592::
12995::
12593:: +golden-types-with-marks: supply declared mark types separately from /sur
12996:: +golden-types-with-marks: supply declared mark types separately from /sur
12594:: entries, as [mark result] with the result from +read-mark:jibb-import.
12997:: entries, as [mark result] with the result from +read-mark:jibb-import.
@@ -12619,6 +13022,10 @@
12619++ golden-types-in-context
13022++ golden-types-in-context
12620 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
13023 |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term) prelude=(unit ifile)]
12621 ^- @t
13024 ^- @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
12622 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
13029 =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
12623 =/ parsed (parse file src)
13030 =/ parsed (parse file src)
12624 ?: ?=(%| -.parsed) (show-error src p.parsed)
13031 ?: ?=(%| -.parsed) (show-error src p.parsed)
@@ -12638,19 +13045,27 @@
12638 =/ eligible=?
13045 =/ eligible=?
12639 ?& ?=(~ imports.p.parsed)
13046 ?& ?=(~ imports.p.parsed)
12640 ?=(~ jimports)
13047 ?=(~ jimports)
12641− ?=(~ prelude)
12642− ?=(~ prelude-values)
12643− ?=(~ reserved-molds)
12644 !?=([%ui %api *] file)
13048 !?=([%ui %api *] file)
12645 !?=([%ui %stores *] file)
13049 !?=([%ui %stores *] file)
12646 !(lien (global-value-names ds) |=(n=term =(n %main)))
13050 !(lien (global-value-names ds) |=(n=term =(n %main)))
12647− (module-scope-valid p.parsed ~ ~)
12648 !(module-values-complete ds env)
13051 !(module-values-complete ds env)
12649 (lte (met 3 src) 65.536)
13052 (lte (met 3 src) 65.536)
12650 (lte (lent ds) 64)
13053 (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+ ==
12652 ==
13064 ==
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)
12654 =. recovered
13069 =. recovered
12655 ?~ transaction ~
13070 ?~ transaction ~
12656 ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
13071 ?. &((module-values-complete ds env.u.transaction) (dg-interface-safe env.u.transaction)) ~
@@ -12936,6 +13351,31 @@
12936 [%& result st(next +(next.st), obligations [ex ey obligations.st])]
13351 [%& result st(next +(next.st), obligations [ex ey obligations.st])]
12937 [%& typ.p.left state.p.right]
13352 [%& typ.p.left state.p.right]
12938::
13353::
13354+:: A direct tuple literal may wait for a later exact result context.
13355+:: Each pending literal retains its source tag and its own fit obligation.
13356+++ dg-infer-tuple-items
13357+ |= [items=(list item) env=ienv state=istate]
13358+ ^- iresult
13359+ ?~ items [%| ["empty cell is not supported by partial inference" ~]]
13360+ =/ head=iresult (infer-fragment val.i.items env state)
13361+ ?: ?=(%| -.head) head
13362+ =/ typ=itype typ.p.head
13363+ =/ st=istate state.p.head
13364+ =/ adjusted=(unit [typ=itype state=istate])
13365+ ?. (dg-owned-arm-literal val.i.items typ tags.st sub.st next.state) `[typ st]
13366+ ?: (gth (lent obligations.st) 63) ~
13367+ =/ pending=itype [%var next.st]
13368+ =/ edge=dgo [typ pending (span-of val.i.items) at.i.items]
13369+ `[pending st(next +(next.st), obligations [edge obligations.st])]
13370+ ?~ adjusted [%| ["deferred tuple context needs unsupported inference" ~]]
13371+ =. typ typ.u.adjusted
13372+ =. st state.u.adjusted
13373+ =. typ ?~(face.i.items typ [%face u.face.i.items typ])
13374+ ?~ t.items [%& typ st]
13375+ =/ tail=iresult $(items t.items, state st)
13376+ ?: ?=(%| -.tail) tail
13377+ [%& [%cell typ typ.p.tail] state.p.tail]
13378+::
12939:: Deferred inference uses only source forms whose successful fit sites are
13379:: Deferred inference uses only source forms whose successful fit sites are
12940:: guarded below; a shared source-node budget bounds this screen.
13380:: guarded below; a shared source-node budget bounds this screen.
12941++ dg-safe-expressions
13381++ dg-safe-expressions
@@ -12945,6 +13385,13 @@
12945 =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
13385 =/ first=(unit @ud) (dg-safe-expression i.todo fuel)
12946 ?~ first ~
13386 ?~ first ~
12947 $(todo t.todo, fuel u.first)
13387 $(todo t.todo, fuel u.first)
13388+++ dg-safe-items
13389+ |= [items=(list item) fuel=@ud]
13390+ ^- (unit @ud)
13391+ ?~ items `fuel
13392+ =/ first=(unit @ud) (dg-safe-expression val.i.items fuel)
13393+ ?~ first ~
13394+ $(items t.items, fuel u.first)
12948++ dg-safe-expression
13395++ dg-safe-expression
12949 |= [e=expr fuel=@ud]
13396 |= [e=expr fuel=@ud]
12950 ^- (unit @ud)
13397 ^- (unit @ud)
@@ -12962,6 +13409,7 @@
12962 $(e final.e, fuel fuel)
13409 $(e final.e, fuel fuel)
12963 %gate $(e body.e, fuel fuel)
13410 %gate $(e body.e, fuel fuel)
12964 %gate-wide $(e body.e, fuel fuel)
13411 %gate-wide $(e body.e, fuel fuel)
13412+ %tuple (dg-safe-items items.e fuel)
12965 %branch
13413 %branch
12966 ?. (dg-boolean-patterns e) ~
13414 ?. (dg-boolean-patterns e) ~
12967 ?> ?=(^ arms.e)
13415 ?> ?=(^ arms.e)
@@ -13101,6 +13549,28 @@
13101 ?: (dg-direct-source val.i.ds 64) &
13549 ?: (dg-direct-source val.i.ds 64) &
13102 $(ds t.ds, fuel (dec fuel))
13550 $(ds t.ds, fuel (dec fuel))
13103::
13551::
13552+++ dg-prepared-source
13553+ |= [e=expr fuel=@ud]
13554+ ^- ?
13555+ ?: (dg-direct-source e fuel) &
13556+ ?: =(0 fuel) |
13557+ ?+ -.e |
13558+ %group $(e inner.e, fuel (dec fuel))
13559+ %gate $(e body.e, fuel (dec fuel))
13560+ %gate-wide $(e body.e, fuel (dec fuel))
13561+ %cast $(e val.e, fuel (dec fuel))
13562+ %body ?~(defs.e $(e final.e, fuel (dec fuel)) |)
13563+ %tuple &
13564+ ==
13565+++ dg-prepared-candidate
13566+ |= [ds=(list def) fuel=@ud]
13567+ ^- ?
13568+ ?~ ds |
13569+ ?: =(0 fuel) |
13570+ ?. ?=(%value -.i.ds) $(ds t.ds, fuel (dec fuel))
13571+ ?: (dg-prepared-source val.i.ds 64) &
13572+ $(ds t.ds, fuel (dec fuel))
13573+::
13104++ dg-interface-safe
13574++ dg-interface-safe
13105 |= [env=ienv]
13575 |= [env=ienv]
13106 ^- ?
13576 ^- ?
@@ -13146,6 +13616,47 @@
13146 (dg-stage defs base base st ~ 64)
13616 (dg-stage defs base base st ~ 64)
13147 ::
13617 ::
13148 [& (transact)]
13618 [& (transact)]
13619+:: The caller supplies the trusted prepared prelude. This transaction is
13620+:: only report evidence; the ordinary module resolver does not publish it.
13621+++ dg-root-prepared
13622+ |= [at=path src=@t prepared=iprelude]
13623+ ^- (unit dgcommit)
13624+ ?: ?=([%ui %api *] at) ~
13625+ ?: ?=([%ui %stores *] at) ~
13626+ ?: (gth (met 3 src) 65.536) ~
13627+ =/ parsed (parse at src)
13628+ ?: ?=(%| -.parsed) ~
13629+ ?^ imports.p.parsed ~
13630+ ?. (module-scope-valid p.parsed values.prepared molds.prepared) ~
13631+ ?^ (duplicate-defs defs.p.parsed) ~
13632+ =/ defs=(list def) defs.p.parsed
13633+ ?: (gth (lent defs) 64) ~
13634+ ?: (lien (global-value-names defs) |=(n=term =(n %main))) ~
13635+ ?. (dg-prepared-candidate defs 64) ~
13636+ =/ local-molds=imolds (collect-simple-molds defs)
13637+ =/ globals=(list term) (weld values.prepared (global-value-names defs))
13638+ =/ iface=ifile iface.prepared
13639+ =/ prelude=(unit ifile) `iface
13640+ =/ resolution=iresolved
13641+ (resolve-groups defs local-molds globals ~ ~ ~ ~ ~ molds.prepared at prelude)
13642+ ?^ grouped.resolution ~
13643+ ?^ artifacts.resolution ~
13644+ =/ base=ienv env.resolution
13645+ =/ templates=ienv
13646+ (turn molds.iface |=(x=[name=term template=ischeme] [name.x template.x]))
13647+ =/ all-env=ienv (weld base (weld values.iface templates))
13648+ =/ free=(unit dgscan) (dg-env all-env ~ 32.768 ~)
13649+ ?~ free ~
13650+ ?^ ids.u.free ~
13651+ =/ all=(unit dgscan) (dg-all-env-ids all-env 32.768 ~)
13652+ ?~ all ~
13653+ =/ fresh=@ud (dg-next-id ids.u.all 0)
13654+ =/ st=istate *istate
13655+ =. st st(next fresh, defer `~, molds local-molds, globals globals, at at, reserved-molds molds.prepared, prelude prelude, top-molds (turn local-molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
13656+ =/ checked-molds=(each imold-types @t) (module-mold-types local-molds st)
13657+ ?: ?=(%| -.checked-molds) ~
13658+ (dg-stage defs base base st ~ 64)
13659+::
13149++ dg-all-env-ids
13660++ dg-all-env-ids
13150 |= [env=ienv fuel=@ud ids=(list @ud)]
13661 |= [env=ienv fuel=@ud ids=(list @ud)]
13151 ^- (unit dgscan)
13662 ^- (unit dgscan)
jibb-dev/lib/jibb/internal.jibb+2
@@ -18,6 +18,8 @@
18:: Private compiler primitive wrappers; execution is a later milestone.
18:: Private compiler primitive wrappers; execution is a later milestone.
19++ add-atom |= args=[A A] (raw-add.core args)
19++ add-atom |= args=[A A] (raw-add.core args)
20++ dec-atom |= atom=A (raw-dec.core atom)
20++ 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)
21
23
22:: Transparent request data. Identity and path fields are writable and do not
24:: Transparent request data. Identity and path fields are writable and do not
23:: prove a schema or watchability. A future executor must bind them to checked
25:: prove a schema or watchability. A future executor must bind them to checked
jibb-dev/lib/jibb/prelude.jibb+132
@@ -373,3 +373,135 @@
373++ late |= second=B |= first=A [first second]
373++ late |= second=B |= first=A [first second]
374
374
375++ succ |= x=A (add x 1)
375++ succ |= x=A (add x 1)
376+
377+++ trip |= value=@t (trip-text.internal value)
378+++ tuba |= values=(list @tD) (tuba-text.internal values)
379+
380+:: UI values are source-level descriptions only. Nested element payloads are
381+:: erased in the nonrecursive union; the public constructors below retain the
382+:: typed composition boundaries. Raw-constructor encapsulation, rendering and
383+:: execution are not established by this slice.
384++$ length
385+ [%chars n=@ud]
386+ [%fill n=@ud]
387+ %shrink
388+
389++$ align
390+ %start
391+ %center
392+ %end
393+
394++$ role
395+ %body
396+ %caption
397+ %label
398+
399++$ tone
400+ %normal
401+ %muted
402+ %accent
403+ %danger
404+
405++$ attr
406+ [%pad %s0]
407+ [%pad %s1]
408+ [%pad %s2]
409+ [%pad %s3]
410+ [%gap %s0]
411+ [%gap %s1]
412+ [%gap %s2]
413+ [%gap %s3]
414+ [%width width=length]
415+ [%align align=align]
416+ [%role role=role]
417+ [%tone tone=tone]
418+
419++$ element |$ [M]
420+ [%row attrs=(list attr) kids=*]
421+ [%column attrs=(list attr) kids=*]
422+ [%wrap attrs=(list attr) kids=*]
423+ [%stack attrs=(list attr) kids=*]
424+ [%el attrs=(list attr) kid=*]
425+ [%para kids=*]
426+ [%text words=@t]
427+ [%heading level=@ud words=@t]
428+ [%each items=*]
429+ [%table columns=* rows=*]
430+ [%image source=qath description=@t]
431+ [%image-unsafe source=[url=@t width=@ud height=@ud] description=@t]
432+ [%link target=qath label=@t]
433+ [%link-unsafe target=@t label=@t]
434+ [%button label=@t message=M]
435+ [%toggle on=? label=@t message=M]
436+ [%field label=@t value=@t reply=$-(@t M)]
437+ [%form message=M kids=*]
438+ [%island payload=*]
439+
440+++ row |= [attrs=(list attr) kids=(list (element M))]
441+ ^- (element M) [%row attrs kids]
442+
443+++ column |= [attrs=(list attr) kids=(list (element M))]
444+ ^- (element M) [%column attrs kids]
445+
446+++ wrap |= [attrs=(list attr) kids=(list (element M))]
447+ ^- (element M) [%wrap attrs kids]
448+
449+++ stack |= [attrs=(list attr) kids=(list (element M))]
450+ ^- (element M) [%stack attrs kids]
451+
452+++ el |= [attrs=(list attr) kid=(element M)]
453+ ^- (element M) [%el attrs kid]
454+
455+++ para |= kids=(list (element M))
456+ ^- (element M) [%para kids]
457+
458+++ text |= words=@t
459+ ^- (element M) [%text words]
460+
461+++ heading |= [level=@ud words=@t]
462+ ^- (element M) [%heading level words]
463+
464+++ each |= items=(list [key=K el=(element M)])
465+ ^- (element M) [%each items]
466+
467+++ table |= [columns=(list [header=@t width=length align=align]) rows=(list [key=K cells=(list (element M))])]
468+ ^- (element M) [%table columns rows]
469+
470+++ image |= [source=qath description=@t]
471+ ^- (element M) [%image source description]
472+
473+++ image-unsafe |= [source=[url=@t width=@ud height=@ud] description=@t]
474+ ^- (element M) [%image-unsafe source description]
475+
476+++ link |= [target=qath label=@t]
477+ ^- (element M) [%link target label]
478+
479+++ link-unsafe |= [target=@t label=@t]
480+ ^- (element M) [%link-unsafe target label]
481+
482+++ button |= [label=@t message=M]
483+ ^- (element M) [%button label message]
484+
485+++ toggle |= [on=? label=@t message=M]
486+ ^- (element M) [%toggle on label message]
487+
488+++ field |= [label=@t value=@t reply=$-(@t M)]
489+ ^- (element M) [%field label value reply]
490+
491+++ form |= [message=M kids=(list (element M))]
492+ ^- (element M) [%form message kids]
493+
494++$ program |$ [D X M]
495+ [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
496+
497+++ program |= [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
498+ ^- (program D X M) [init update view subs]
499+
500+++ island |= [p=(program D X M) data=D]
501+ ^- (element !!) [%island [p data]]
502+
503++$ page |$ [R D]
504+ [load=$-(R (ask D)) view=$-(D (element !!))]
505+
506+++ page |= [load=$-(R (ask D)) view=$-(D (element !!))]
507+ ^- (page R D) [load view]
tests/golden/module-import-cycle/source.jibb+1−1
@@ -1,2 +1,2 @@
1/= a /ui/a
1/= 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 @@
61:11 tight knot a
61:11 tight knot a
72:1 NEWLINE
72:1 NEWLINE
82:1 glyph ++
82:1 glyph ++
9−2:4 name text
9+2:4 name text-value
10−2:9 glyph (
10+2:15 glyph (
11−2:10 tight wing identity.a
11+2:16 tight wing identity.a
12−2:21 str "hi"
12+2:27 str "hi"
13−2:25 tight glyph )
13+2:31 tight glyph )
14−2:26 NEWLINE
14+2:32 NEWLINE
tests/golden/module-import-cycle/tree.txt+3−3
@@ -1,5 +1,5 @@
1(module
1(module
2 (jibb 1:1 a /ui/a)
2 (jibb 1:1 a /ui/a)
3− (value 2:1 text
3+ (value 2:1 text-value
4− (group 2:9
4+ (group 2:15
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
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 @@
1/= lib /ui/lib
1/= lib /ui/lib
2−++ text (identity.lib "hi")
2+++ text-value (identity.lib "hi")
3++ ship (identity.lib ~zod)
3++ ship (identity.lib ~zod)
tests/golden/module-import-identity/tokens.txt+5−5
@@ -6,11 +6,11 @@
61:13 tight knot lib
61:13 tight knot lib
72:1 NEWLINE
72:1 NEWLINE
82:1 glyph ++
82:1 glyph ++
9−2:4 name text
9+2:4 name text-value
10−2:9 glyph (
10+2:15 glyph (
11−2:10 tight wing identity.lib
11+2:16 tight wing identity.lib
12−2:23 str "hi"
12+2:29 str "hi"
13−2:27 tight glyph )
13+2:33 tight glyph )
143:1 NEWLINE
143:1 NEWLINE
153:1 glyph ++
153:1 glyph ++
163:4 name ship
163:4 name ship
tests/golden/module-import-identity/tree.txt+3−3
@@ -1,8 +1,8 @@
1(module
1(module
2 (jibb 1:1 lib /ui/lib)
2 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
3+ (value 2:1 text-value
4− (group 2:9
4+ (group 2:15
5− (call 2:10 (wing 2:10 identity.lib) (str 2:23 "hi"))))
5+ (call 2:16 (wing 2:16 identity.lib) (str 2:29 "hi"))))
6 (value 3:1 ship
6 (value 3:1 ship
7 (group 3:9
7 (group 3:9
8 (call 3:10 (wing 3:10 identity.lib) (lit 3:23 ~zod)))))
8 (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 @@
1partial inference; module not checked
1partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
3++ ship: @p
3++ ship: @p
tests/golden/module-import-transitive/source.jibb+1−1
@@ -1,2 +1,2 @@
1/= a /ui/a
1/= 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 @@
61:11 tight knot a
61:11 tight knot a
72:1 NEWLINE
72:1 NEWLINE
82:1 glyph ++
82:1 glyph ++
9−2:4 name text
9+2:4 name text-value
10−2:9 glyph (
10+2:15 glyph (
11−2:10 tight wing identity.a
11+2:16 tight wing identity.a
12−2:21 str "hi"
12+2:27 str "hi"
13−2:25 tight glyph )
13+2:31 tight glyph )
14−2:26 NEWLINE
14+2:32 NEWLINE
tests/golden/module-import-transitive/tree.txt+3−3
@@ -1,5 +1,5 @@
1(module
1(module
2 (jibb 1:1 a /ui/a)
2 (jibb 1:1 a /ui/a)
3− (value 2:1 text
3+ (value 2:1 text-value
4− (group 2:9
4+ (group 2:15
5− (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
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 @@
1partial inference; module not checked
1partial 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 @@
1/= good /ui/good
1/= 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 @@
61:14 tight knot good
61:14 tight knot good
72:1 NEWLINE
72:1 NEWLINE
82:1 glyph ++
82:1 glyph ++
9−2:4 name text
9+2:4 name text-value
10−2:9 glyph (
10+2:15 glyph (
11−2:10 tight wing identity.good
11+2:16 tight wing identity.good
12−2:24 str "hi"
12+2:30 str "hi"
13−2:28 tight glyph )
13+2:34 tight glyph )
14−2:29 NEWLINE
14+2:35 NEWLINE
tests/golden/module-import-unused-invalid/tree.txt+3−3
@@ -1,5 +1,5 @@
1(module
1(module
2 (jibb 1:1 good /ui/good)
2 (jibb 1:1 good /ui/good)
3− (value 2:1 text
3+ (value 2:1 text-value
4− (group 2:9
4+ (group 2:15
5− (call 2:10 (wing 2:10 identity.good) (str 2:24 "hi")))))
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 @@
1partial inference; module not checked
1partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
tests/golden/types-arithmetic-module/source.jibb+1−1
@@ -1,7 +1,7 @@
1/= math /ui/math
1/= math /ui/math
2++ decimal ^- @ud (sum.math 1 2)
2++ decimal ^- @ud (sum.math 1 2)
3++ hex ^- @ux (sum.math 0x1 0x2)
3++ hex ^- @ux (sum.math 0x1 0x2)
4−++ text ^- @t (alias.math "a" "b")
4+++ text-value ^- @t (alias.math "a" "b")
5++ ship ^- @p (down.math ~zod)
5++ ship ^- @p (down.math ~zod)
6++ reject-bool (sum.math %.y %.n)
6++ reject-bool (sum.math %.y %.n)
7++ reject-down (down.math %.y)
7++ reject-down (down.math %.y)
tests/golden/types-arithmetic-module/tokens.txt+8−8
@@ -26,14 +26,14 @@
263:32 tight glyph )
263:32 tight glyph )
274:1 NEWLINE
274:1 NEWLINE
284:1 glyph ++
284:1 glyph ++
29−4:4 name text
29+4:4 name text-value
30−4:9 glyph ^-
30+4:15 glyph ^-
31−4:12 aura @t
31+4:18 aura @t
32−4:15 glyph (
32+4:21 glyph (
33−4:16 tight wing alias.math
33+4:22 tight wing alias.math
34−4:27 str "a"
34+4:33 str "a"
35−4:31 str "b"
35+4:37 str "b"
36−4:34 tight glyph )
36+4:40 tight glyph )
375:1 NEWLINE
375:1 NEWLINE
385:1 glyph ++
385:1 glyph ++
395:4 name ship
395:4 name ship
tests/golden/types-arithmetic-module/tree.txt+5−5
@@ -10,11 +10,11 @@
10 (aura 3:11 @ux)
10 (aura 3:11 @ux)
11 (group 3:15
11 (group 3:15
12 (call 3:16 (wing 3:16 sum.math) (lit 3:25 0x1) (lit 3:29 0x2)))))
12 (call 3:16 (wing 3:16 sum.math) (lit 3:25 0x1) (lit 3:29 0x2)))))
13− (value 4:1 text
13+ (value 4:1 text-value
14− (cast 4:9
14+ (cast 4:15
15− (aura 4:12 @t)
15+ (aura 4:18 @t)
16− (group 4:15
16+ (group 4:21
17− (call 4:16 (wing 4:16 alias.math) (str 4:27 "a") (str 4:31 "b")))))
17+ (call 4:22 (wing 4:22 alias.math) (str 4:33 "a") (str 4:37 "b")))))
18 (value 5:1 ship
18 (value 5:1 ship
19 (cast 5:9
19 (cast 5:9
20 (aura 5:12 @p)
20 (aura 5:12 @p)
tests/golden/types-arithmetic-module/types.txt+1−1
@@ -1,7 +1,7 @@
1partial inference; module not checked
1partial inference; module not checked
2++ decimal: @ud
2++ decimal: @ud
3++ hex: @ux
3++ hex: @ux
4−++ text: @t
4+++ text-value: @t
5++ ship: @p
5++ ship: @p
6++ reject-bool: call's sample and argument types do not unify
6++ reject-bool: call's sample and argument types do not unify
7/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 ?
7/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 @@
10++ identity |= x
10++ identity |= x
11 ?- x
11 ?- x
12 [a b c] [a b c]
12 [a b c] [a b c]
13−++ text (identity "hi" ~zod %.y)
13+++ text-value (identity "hi" ~zod %.y)
14++ ship (identity ~zod "hi" %.n)
14++ ship (identity ~zod "hi" %.n)
15++ shared |= x=[A A A]
15++ shared |= x=[A A A]
16 ?- x
16 ?- x
tests/golden/types-cell-pattern-schemes/tokens.txt+7−7
@@ -73,13 +73,13 @@
7313:1 DEDENT
7313:1 DEDENT
7413:1 NEWLINE
7413:1 NEWLINE
7513:1 glyph ++
7513:1 glyph ++
76−13:4 name text
76+13:4 name text-value
77−13:9 glyph (
77+13:15 glyph (
78−13:10 tight name identity
78+13:16 tight name identity
79−13:19 str "hi"
79+13:25 str "hi"
80−13:24 lit ~zod
80+13:30 lit ~zod
81−13:29 lit %.y
81+13:35 lit %.y
82−13:32 tight glyph )
82+13:38 tight glyph )
8314:1 NEWLINE
8314:1 NEWLINE
8414:1 glyph ++
8414:1 glyph ++
8514:4 name ship
8514:4 name ship
tests/golden/types-cell-pattern-schemes/tree.txt+3−3
@@ -31,9 +31,9 @@
31 (arm 12:5
31 (arm 12:5
32 (cell 12:5 (bind 12:6 a) (bind 12:8 b) (bind 12:10 c))
32 (cell 12:5 (bind 12:6 a) (bind 12:8 b) (bind 12:10 c))
33 (tuple 12:13 (wing 12:14 a) (wing 12:16 b) (wing 12:18 c)))))))
33 (tuple 12:13 (wing 12:14 a) (wing 12:16 b) (wing 12:18 c)))))))
34− (value 13:1 text
34+ (value 13:1 text-value
35− (group 13:9
35+ (group 13:15
36− (call 13:10 (wing 13:10 identity) (str 13:19 "hi") (lit 13:24 ~zod) (lit 13:29 %.y))))
36+ (call 13:16 (wing 13:16 identity) (str 13:25 "hi") (lit 13:30 ~zod) (lit 13:35 %.y))))
37 (value 14:1 ship
37 (value 14:1 ship
38 (group 14:9
38 (group 14:9
39 (call 14:10 (wing 14:10 identity) (lit 14:19 ~zod) (str 14:24 "hi") (lit 14:29 %.n))))
39 (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
3++ maybe-union: cell pattern subject is not supported by partial inference
3++ maybe-union: cell pattern subject is not supported by partial inference
4++ maybe-list: cell pattern subject is not supported by partial inference
4++ maybe-list: cell pattern subject is not supported by partial inference
5++ identity: $-([A [B C]] [A [B C]])
5++ identity: $-([A [B C]] [A [B C]])
6−++ text: [@t [@p ?]]
6+++ text-value: [@t [@p ?]]
7++ ship: [@p [@t ?]]
7++ ship: [@p [@t ?]]
8++ shared: $-([A [A A]] [A [A A]])
8++ shared: $-([A [A A]] [A [A A]])
9++ wrong: call's sample and argument types do not unify
9++ wrong: call's sample and argument types do not unify
tests/golden/types-generic-result-context/source.jibb+9−9
@@ -10,15 +10,15 @@
10+$ swap |$ [A B] (choice B A)
10+$ swap |$ [A B] (choice B A)
11+$ repeated |$ [A] (choice A A)
11+$ repeated |$ [A] (choice A A)
12+$ phantom |$ [A B] (choice A @p)
12+$ phantom |$ [A B] (choice A @p)
13−++ wrap |= x=A ^- (choice A @p) [%one x]
13+++ wrap-value |= x=A ^- (choice A @p) [%one x]
14−++ wrap-repeat |= x=A ^- (repeated A) [%one x]
14+++ wrap-value-repeat |= x=A ^- (repeated A) [%one x]
15−++ use-msg ^- (choice msg @p) (wrap %idle)
15+++ use-msg ^- (choice msg @p) (wrap-value %idle)
16−++ use-alias ^- (swap @p msg) (wrap %idle)
16+++ use-alias ^- (swap @p msg) (wrap-value %idle)
17−++ use-repeated ^- (repeated msg) (wrap-repeat %idle)
17+++ use-repeated ^- (repeated msg) (wrap-value-repeat %idle)
18−++ use-distinct ^- (choice other @p) (wrap %idle)
18+++ use-distinct ^- (choice other @p) (wrap-value %idle)
19++ independent |= [m=msg n=other]
19++ 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))]
21++ pending
21++ pending
22 ~& %orphan
22 ~& %orphan
23− ^- (choice msg @p) (wrap %idle)
23+ ^- (choice msg @p) (wrap-value %idle)
24−++ wrong-case ^- (choice msg @p) (wrap %absent)
24+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
tests/golden/types-generic-result-context/tokens.txt+65−65
@@ -76,37 +76,37 @@
7612:33 tight glyph )
7612:33 tight glyph )
7713:1 NEWLINE
7713:1 NEWLINE
7813:1 glyph ++
7813:1 glyph ++
79−13:4 name wrap
79+13:4 name wrap-value
80−13:9 glyph |=
80+13:15 glyph |=
81−13:12 name x
81+13:18 name x
82−13:13 tight glyph =
82+13:19 tight glyph =
83−13:14 tight tvar A
83+13:20 tight tvar A
84−13:16 glyph ^-
84+13:22 glyph ^-
85−13:19 glyph (
85+13:25 glyph (
86−13:20 tight name choice
86+13:26 tight name choice
87−13:27 tvar A
87+13:33 tvar A
88−13:29 aura @p
88+13:35 aura @p
89−13:31 tight glyph )
89+13:37 tight glyph )
90−13:33 glyph [
90+13:39 glyph [
91−13:34 tight lit %one
91+13:40 tight lit %one
92−13:39 name x
92+13:45 name x
93−13:40 tight glyph ]
93+13:46 tight glyph ]
9414:1 NEWLINE
9414:1 NEWLINE
9514:1 glyph ++
9514:1 glyph ++
96−14:4 name wrap-repeat
96+14:4 name wrap-value-repeat
97−14:16 glyph |=
97+14:22 glyph |=
98−14:19 name x
98+14:25 name x
99−14:20 tight glyph =
99+14:26 tight glyph =
100−14:21 tight tvar A
100+14:27 tight tvar A
101−14:23 glyph ^-
101+14:29 glyph ^-
102−14:26 glyph (
102+14:32 glyph (
103−14:27 tight name repeated
103+14:33 tight name repeated
104−14:36 tvar A
104+14:42 tvar A
105−14:37 tight glyph )
105+14:43 tight glyph )
106−14:39 glyph [
106+14:45 glyph [
107−14:40 tight lit %one
107+14:46 tight lit %one
108−14:45 name x
108+14:51 name x
109−14:46 tight glyph ]
109+14:52 tight glyph ]
11015:1 NEWLINE
11015:1 NEWLINE
11115:1 glyph ++
11115:1 glyph ++
11215:4 name use-msg
11215:4 name use-msg
@@ -117,9 +117,9 @@
11715:27 aura @p
11715:27 aura @p
11815:29 tight glyph )
11815:29 tight glyph )
11915:31 glyph (
11915:31 glyph (
120−15:32 tight name wrap
120+15:32 tight name wrap-value
121−15:37 lit %idle
121+15:43 lit %idle
122−15:42 tight glyph )
122+15:48 tight glyph )
12316:1 NEWLINE
12316:1 NEWLINE
12416:1 glyph ++
12416:1 glyph ++
12516:4 name use-alias
12516:4 name use-alias
@@ -130,9 +130,9 @@
13016:26 name msg
13016:26 name msg
13116:29 tight glyph )
13116:29 tight glyph )
13216:31 glyph (
13216:31 glyph (
133−16:32 tight name wrap
133+16:32 tight name wrap-value
134−16:37 lit %idle
134+16:43 lit %idle
135−16:42 tight glyph )
135+16:48 tight glyph )
13617:1 NEWLINE
13617:1 NEWLINE
13717:1 glyph ++
13717:1 glyph ++
13817:4 name use-repeated
13817:4 name use-repeated
@@ -142,9 +142,9 @@
14217:30 name msg
14217:30 name msg
14317:33 tight glyph )
14317:33 tight glyph )
14417:35 glyph (
14417:35 glyph (
145−17:36 tight name wrap-repeat
145+17:36 tight name wrap-value-repeat
146−17:48 lit %idle
146+17:54 lit %idle
147−17:53 tight glyph )
147+17:59 tight glyph )
14818:1 NEWLINE
14818:1 NEWLINE
14918:1 glyph ++
14918:1 glyph ++
15018:4 name use-distinct
15018:4 name use-distinct
@@ -155,9 +155,9 @@
15518:34 aura @p
15518:34 aura @p
15618:36 tight glyph )
15618:36 tight glyph )
15718:38 glyph (
15718:38 glyph (
158−18:39 tight name wrap
158+18:39 tight name wrap-value
159−18:44 lit %idle
159+18:50 lit %idle
160−18:49 tight glyph )
160+18:55 tight glyph )
16119:1 NEWLINE
16119:1 NEWLINE
16219:1 glyph ++
16219:1 glyph ++
16319:4 name independent
16319:4 name independent
@@ -180,23 +180,23 @@
18020:20 aura @p
18020:20 aura @p
18120:22 tight glyph )
18120:22 tight glyph )
18220:24 glyph (
18220:24 glyph (
183−20:25 tight name wrap
183+20:25 tight name wrap-value
184−20:30 name m
184+20:36 name m
185−20:31 tight glyph )
186−20:32 tight glyph )
185+20:37 tight glyph )
187−20:34 glyph (
186+20:38 tight glyph )
188−20:35 tight glyph ^-
187+20:40 glyph (
189−20:38 glyph (
188+20:41 tight glyph ^-
189+20:44 glyph (
190−20:39 tight name choice
190+20:45 tight name choice
191−20:46 name other
191+20:52 name other
192−20:52 aura @p
192+20:58 aura @p
193−20:54 tight glyph )
193+20:60 tight glyph )
194−20:56 glyph (
195−20:57 tight name wrap
196−20:62 name n
194+20:62 glyph (
197−20:63 tight glyph )
195+20:63 tight name wrap-value
196+20:74 name n
197+20:75 tight glyph )
198−20:64 tight glyph )
198+20:76 tight glyph )
199−20:65 tight glyph ]
199+20:77 tight glyph ]
20021:1 DEDENT
20021:1 DEDENT
20121:1 NEWLINE
20121:1 NEWLINE
20221:1 glyph ++
20221:1 glyph ++
@@ -212,9 +212,9 @@
21223:20 aura @p
21223:20 aura @p
21323:22 tight glyph )
21323:22 tight glyph )
21423:24 glyph (
21423:24 glyph (
215−23:25 tight name wrap
215+23:25 tight name wrap-value
216−23:30 lit %idle
216+23:36 lit %idle
217−23:35 tight glyph )
217+23:41 tight glyph )
21824:1 DEDENT
21824:1 DEDENT
21924:1 DEDENT
21924:1 DEDENT
22024:1 NEWLINE
22024:1 NEWLINE
@@ -227,7 +227,7 @@
22724:30 aura @p
22724:30 aura @p
22824:32 tight glyph )
22824:32 tight glyph )
22924:34 glyph (
22924:34 glyph (
230−24:35 tight name wrap
230+24:35 tight name wrap-value
231−24:40 lit %absent
231+24:46 lit %absent
232−24:47 tight glyph )
232+24:53 tight glyph )
233−24:48 NEWLINE
233+24:54 NEWLINE
tests/golden/types-generic-result-context/tree.txt+24−24
@@ -21,38 +21,38 @@
21 (mold 12:1 phantom
21 (mold 12:1 phantom
22 (generic 12:12 A B
22 (generic 12:12 A B
23 (apply 12:21 choice (tvar 12:29 A) (aura 12:31 @p))))
23 (apply 12:21 choice (tvar 12:29 A) (aura 12:31 @p))))
24− (value 13:1 wrap
24+ (value 13:1 wrap-value
25− (gate 13:9
25+ (gate 13:15
26− (face 13:12 x (tvar 13:14 A))
26+ (face 13:18 x (tvar 13:20 A))
27− (cast 13:16
27+ (cast 13:22
28− (apply 13:19 choice (tvar 13:27 A) (aura 13:29 @p))
28+ (apply 13:25 choice (tvar 13:33 A) (aura 13:35 @p))
29− (tuple 13:33 (lit 13:34 %one) (wing 13:39 x)))))
29+ (tuple 13:39 (lit 13:40 %one) (wing 13:45 x)))))
30− (value 14:1 wrap-repeat
30+ (value 14:1 wrap-value-repeat
31− (gate 14:16
31+ (gate 14:22
32− (face 14:19 x (tvar 14:21 A))
32+ (face 14:25 x (tvar 14:27 A))
33− (cast 14:23
33+ (cast 14:29
34− (apply 14:26 repeated (tvar 14:36 A))
34+ (apply 14:32 repeated (tvar 14:42 A))
35− (tuple 14:39 (lit 14:40 %one) (wing 14:45 x)))))
35+ (tuple 14:45 (lit 14:46 %one) (wing 14:51 x)))))
36 (value 15:1 use-msg
36 (value 15:1 use-msg
37 (cast 15:12
37 (cast 15:12
38 (apply 15:15 choice (ref 15:23 msg) (aura 15:27 @p))
38 (apply 15:15 choice (ref 15:23 msg) (aura 15:27 @p))
39 (group 15:31
39 (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)))))
41 (value 16:1 use-alias
41 (value 16:1 use-alias
42 (cast 16:14
42 (cast 16:14
43 (apply 16:17 swap (aura 16:23 @p) (ref 16:26 msg))
43 (apply 16:17 swap (aura 16:23 @p) (ref 16:26 msg))
44 (group 16:31
44 (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)))))
46 (value 17:1 use-repeated
46 (value 17:1 use-repeated
47 (cast 17:17
47 (cast 17:17
48 (apply 17:20 repeated (ref 17:30 msg))
48 (apply 17:20 repeated (ref 17:30 msg))
49 (group 17:35
49 (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)))))
51 (value 18:1 use-distinct
51 (value 18:1 use-distinct
52 (cast 18:17
52 (cast 18:17
53 (apply 18:20 choice (ref 18:28 other) (aura 18:34 @p))
53 (apply 18:20 choice (ref 18:28 other) (aura 18:34 @p))
54 (group 18:38
54 (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)))))
56 (value 19:1 independent
56 (value 19:1 independent
57 (gate 19:16
57 (gate 19:16
58 (cell 19:19
58 (cell 19:19
@@ -64,12 +64,12 @@
64 (cast 20:5
64 (cast 20:5
65 (apply 20:8 choice (ref 20:16 msg) (aura 20:20 @p))
65 (apply 20:8 choice (ref 20:16 msg) (aura 20:20 @p))
66 (group 20:24
66 (group 20:24
67− (call 20:25 (wing 20:25 wrap) (wing 20:30 m)))))
67+ (call 20:25 (wing 20:25 wrap-value) (wing 20:36 m)))))
68− (group 20:34
68+ (group 20:40
69− (cast 20:35
69+ (cast 20:41
70− (apply 20:38 choice (ref 20:46 other) (aura 20:52 @p))
70+ (apply 20:44 choice (ref 20:52 other) (aura 20:58 @p))
71− (group 20:56
71+ (group 20:62
72− (call 20:57 (wing 20:57 wrap) (wing 20:62 n)))))))))
72+ (call 20:63 (wing 20:63 wrap-value) (wing 20:74 n)))))))))
73 (value 21:1 pending
73 (value 21:1 pending
74 (body 22:3
74 (body 22:3
75 (trace 22:3
75 (trace 22:3
@@ -78,9 +78,9 @@
78 (cast 23:5
78 (cast 23:5
79 (apply 23:8 choice (ref 23:16 msg) (aura 23:20 @p))
79 (apply 23:8 choice (ref 23:16 msg) (aura 23:20 @p))
80 (group 23:24
80 (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))))))))
82 (value 24:1 wrong-case
82 (value 24:1 wrong-case
83 (cast 24:15
83 (cast 24:15
84 (apply 24:18 choice (ref 24:26 msg) (aura 24:30 @p))
84 (apply 24:18 choice (ref 24:26 msg) (aura 24:30 @p))
85 (group 24:34
85 (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
5+$ swap: not checked
5+$ swap: not checked
6+$ repeated: not checked
6+$ repeated: not checked
7+$ phantom: not checked
7+$ phantom: not checked
8−++ wrap: $-(A (choice A @p))
8+++ wrap-value: $-(A (choice A @p))
9−++ wrap-repeat: $-(A (choice A A))
9+++ wrap-value-repeat: $-(A (choice A A))
10++ use-msg: (choice msg @p)
10++ use-msg: (choice msg @p)
11++ use-alias: (choice msg @p)
11++ use-alias: (choice msg @p)
12++ use-repeated: (choice msg msg)
12++ use-repeated: (choice msg msg)
@@ -15,8 +15,8 @@ partial inference; module not checked
15++ pending: tag needs context in partial inference
15++ pending: tag needs context in partial inference
16++ wrong-case: msg has no case `%absent`
16++ wrong-case: msg has no case `%absent`
17/tests/golden/types-generic-result-context/source.jibb:24:35: expected union
17/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)
19 ^
19 ^
20−/tests/golden/types-generic-result-context/source.jibb:24:40: tag
20+/tests/golden/types-generic-result-context/source.jibb:24:46: tag
21−++ wrong-case ^- (choice msg @p) (wrap %absent)
21+++ wrong-case ^- (choice msg @p) (wrap-value %absent)
22− ^
22+ ^
tests/golden/types-generic-union-escaping/module-trees.txt+4−4
@@ -6,10 +6,10 @@
6/ui/mid.jibb
6/ui/mid.jibb
7(module
7(module
8 (jibb 1:1 base /ui/base)
8 (jibb 1:1 base /ui/base)
9− (value 2:1 text
9+ (value 2:1 text-value
10− (cast 2:9
10+ (cast 2:15
11− (apply 2:12 phantom.base (aura 2:26 @t))
11+ (apply 2:18 phantom.base (aura 2:32 @t))
12− (lit 2:30 %yes)))
12+ (lit 2:36 %yes)))
13 (value 3:1 ship
13 (value 3:1 ship
14 (cast 3:9
14 (cast 3:9
15 (apply 3:12 phantom.base (aura 3:26 @p))
15 (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 @@
1/= base /ui/base
1/= base /ui/base
2−++ text ^- (phantom.base @t) %yes
2+++ text-value ^- (phantom.base @t) %yes
3++ ship ^- (phantom.base @p) %yes
3++ ship ^- (phantom.base @p) %yes
tests/golden/types-generic-union-escaping/source.jibb+1−1
@@ -1,3 +1,3 @@
1/= mid /ui/mid
1/= mid /ui/mid
2−++ text-value text.mid
2+++ text-value text-value.mid
3++ ship-value ship.mid
3++ ship-value ship.mid
tests/golden/types-generic-union-escaping/tokens.txt+1−1
@@ -7,7 +7,7 @@
72:1 NEWLINE
72:1 NEWLINE
82:1 glyph ++
82:1 glyph ++
92:4 name text-value
92:4 name text-value
10−2:15 wing text.mid
10+2:15 wing text-value.mid
113:1 NEWLINE
113:1 NEWLINE
123:1 glyph ++
123:1 glyph ++
133:4 name ship-value
133:4 name ship-value
tests/golden/types-generic-union-escaping/tree.txt+1−1
@@ -1,4 +1,4 @@
1(module
1(module
2 (jibb 1:1 mid /ui/mid)
2 (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))
4 (value 3:1 ship-value (wing 3:15 ship.mid)))
4 (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
2 [%fill n=@ud]
2 [%fill n=@ud]
3 %shrink
3 %shrink
4−+$ attr
4++$ attribute
5− [%width length]
5+ [%width extent]
6 [%gap @tas]
6 [%gap @tas]
7++ number-id |= x=@ud x
7++ number-id |= x=@ud x
8−++ plain ^- attr width+[%fill 1]
8+++ plain ^- attribute width+[%fill 1]
9−++ direct ^- attr [%width [%fill 1]]
9+++ direct ^- attribute [%width [%fill 1]]
10−++ list ^- (list attr) ~[width+[%fill 1]]
10+++ list ^- (list attribute) ~[width+[%fill 1]]
11−++ accept |= value=attr value
11+++ accept |= value=attribute value
12++ call (accept width+[%fill 1])
12++ call (accept width+[%fill 1])
13−++ simple-call ^- attr width+[%fill (number-id 1)]
13+++ simple-call ^- attribute width+[%fill (number-id 1)]
14−++ grouped-call ^- attr width+[%fill ((number-id 1))]
14+++ grouped-call ^- attribute width+[%fill ((number-id 1))]
15−++ cast-call ^- attr width+[%fill (^- @ud (number-id 1))]
15+++ cast-call ^- attribute width+[%fill (^- @ud (number-id 1))]
16−++ nested-call ^- attr width+[%fill (number-id (number-id 1))]
16+++ nested-call ^- attribute width+[%fill (number-id (number-id 1))]
17−++ bad-tag ^- attr width+[%missing 1]
17+++ bad-tag ^- attribute width+[%missing 1]
18−++ bad-number ^- attr width+[%fill "bad"]
18+++ bad-number ^- attribute width+[%fill "bad"]
19++ pending
19++ pending
20 ~& %unrelated
20 ~& %unrelated
21− ^- attr width+[%fill (number-id 1)]
21+ ^- attribute width+[%fill (number-id 1)]
22−++ singleton ^- attr width+%shrink
22+++ singleton ^- attribute width+%shrink
23+$ event
23+$ event
24 [%got value=@t]
24 [%got value=@t]
25 %idle
25 %idle
tests/golden/types-nested-shallow-preserve/tokens.txt+107−107
@@ -1,5 +1,5 @@
11:1 glyph +$
11:1 glyph +$
2−1:4 name length
2+1:4 name extent
32:3 INDENT
32:3 INDENT
42:3 glyph [
42:3 glyph [
52:4 tight lit %fill
52:4 tight lit %fill
@@ -12,11 +12,11 @@
124:1 DEDENT
124:1 DEDENT
134:1 NEWLINE
134:1 NEWLINE
144:1 glyph +$
144:1 glyph +$
15−4:4 name attr
15+4:4 name attribute
165:3 INDENT
165:3 INDENT
175:3 glyph [
175:3 glyph [
185:4 tight lit %width
185:4 tight lit %width
19−5:11 name length
19+5:11 name extent
205:17 tight glyph ]
205:17 tight glyph ]
216:3 NEWLINE
216:3 NEWLINE
226:3 glyph [
226:3 glyph [
@@ -36,49 +36,49 @@
368:1 glyph ++
368:1 glyph ++
378:4 name plain
378:4 name plain
388:10 glyph ^-
388:10 glyph ^-
39−8:13 name attr
39+8:13 name attribute
40−8:18 name width
40+8:23 name width
41−8:23 tight glyph +
41+8:28 tight glyph +
42−8:24 tight glyph [
42+8:29 tight glyph [
43−8:25 tight lit %fill
43+8:30 tight lit %fill
44−8:31 lit 1
44+8:36 lit 1
45−8:32 tight glyph ]
45+8:37 tight glyph ]
469:1 NEWLINE
469:1 NEWLINE
479:1 glyph ++
479:1 glyph ++
489:4 name direct
489:4 name direct
499:11 glyph ^-
499:11 glyph ^-
50−9:14 name attr
50+9:14 name attribute
51−9:19 glyph [
51+9:24 glyph [
52−9:20 tight lit %width
52+9:25 tight lit %width
53−9:27 glyph [
53+9:32 glyph [
54−9:28 tight lit %fill
54+9:33 tight lit %fill
55−9:34 lit 1
55+9:39 lit 1
56−9:35 tight glyph ]
56+9:40 tight glyph ]
57−9:36 tight glyph ]
57+9:41 tight glyph ]
5810:1 NEWLINE
5810:1 NEWLINE
5910:1 glyph ++
5910:1 glyph ++
6010:4 name list
6010:4 name list
6110:9 glyph ^-
6110:9 glyph ^-
6210:12 glyph (
6210:12 glyph (
6310:13 tight name list
6310:13 tight name list
64−10:18 name attr
64+10:18 name attribute
65−10:22 tight glyph )
65+10:27 tight glyph )
66−10:24 glyph ~[
66+10:29 glyph ~[
67−10:26 tight name width
68−10:31 tight glyph +
67+10:31 tight name width
68+10:36 tight glyph +
69−10:32 tight glyph [
69+10:37 tight glyph [
70−10:33 tight lit %fill
70+10:38 tight lit %fill
71−10:39 lit 1
71+10:44 lit 1
72−10:40 tight glyph ]
72+10:45 tight glyph ]
73−10:41 tight glyph ]
73+10:46 tight glyph ]
7411:1 NEWLINE
7411:1 NEWLINE
7511:1 glyph ++
7511:1 glyph ++
7611:4 name accept
7611:4 name accept
7711:11 glyph |=
7711:11 glyph |=
7811:14 name value
7811:14 name value
7911:19 tight glyph =
7911:19 tight glyph =
80−11:20 tight name attr
80+11:20 tight name attribute
81−11:25 name value
81+11:30 name value
8212:1 NEWLINE
8212:1 NEWLINE
8312:1 glyph ++
8312:1 glyph ++
8412:4 name call
8412:4 name call
@@ -95,89 +95,89 @@
9513:1 glyph ++
9513:1 glyph ++
9613:4 name simple-call
9613:4 name simple-call
9713:16 glyph ^-
9713:16 glyph ^-
98−13:19 name attr
98+13:19 name attribute
99−13:24 name width
99+13:29 name width
100−13:29 tight glyph +
100+13:34 tight glyph +
101−13:30 tight glyph [
101+13:35 tight glyph [
102−13:31 tight lit %fill
102+13:36 tight lit %fill
103−13:37 glyph (
103+13:42 glyph (
104−13:38 tight name number-id
104+13:43 tight name number-id
105−13:48 lit 1
105+13:53 lit 1
106−13:49 tight glyph )
106+13:54 tight glyph )
107−13:50 tight glyph ]
107+13:55 tight glyph ]
10814:1 NEWLINE
10814:1 NEWLINE
10914:1 glyph ++
10914:1 glyph ++
11014:4 name grouped-call
11014:4 name grouped-call
11114:17 glyph ^-
11114:17 glyph ^-
112−14:20 name attr
112+14:20 name attribute
113−14:25 name width
113+14:30 name width
114−14:30 tight glyph +
114+14:35 tight glyph +
115−14:31 tight glyph [
115+14:36 tight glyph [
116−14:32 tight lit %fill
116+14:37 tight lit %fill
117−14:38 glyph (
117+14:43 glyph (
118−14:39 tight glyph (
118+14:44 tight glyph (
119−14:40 tight name number-id
119+14:45 tight name number-id
120−14:50 lit 1
120+14:55 lit 1
121−14:51 tight glyph )
121+14:56 tight glyph )
122−14:52 tight glyph )
122+14:57 tight glyph )
123−14:53 tight glyph ]
123+14:58 tight glyph ]
12415:1 NEWLINE
12415:1 NEWLINE
12515:1 glyph ++
12515:1 glyph ++
12615:4 name cast-call
12615:4 name cast-call
12715:14 glyph ^-
12715:14 glyph ^-
128−15:17 name attr
128+15:17 name attribute
129−15:22 name width
129+15:27 name width
130−15:27 tight glyph +
130+15:32 tight glyph +
131−15:28 tight glyph [
131+15:33 tight glyph [
132−15:29 tight lit %fill
132+15:34 tight lit %fill
133−15:35 glyph (
133+15:40 glyph (
134−15:36 tight glyph ^-
134+15:41 tight glyph ^-
135−15:39 aura @ud
135+15:44 aura @ud
136−15:43 glyph (
136+15:48 glyph (
137−15:44 tight name number-id
137+15:49 tight name number-id
138−15:54 lit 1
138+15:59 lit 1
139−15:55 tight glyph )
139+15:60 tight glyph )
140−15:56 tight glyph )
140+15:61 tight glyph )
141−15:57 tight glyph ]
141+15:62 tight glyph ]
14216:1 NEWLINE
14216:1 NEWLINE
14316:1 glyph ++
14316:1 glyph ++
14416:4 name nested-call
14416:4 name nested-call
14516:16 glyph ^-
14516:16 glyph ^-
146−16:19 name attr
146+16:19 name attribute
147−16:24 name width
147+16:29 name width
148−16:29 tight glyph +
148+16:34 tight glyph +
149−16:30 tight glyph [
149+16:35 tight glyph [
150−16:31 tight lit %fill
150+16:36 tight lit %fill
151−16:37 glyph (
151+16:42 glyph (
152−16:38 tight name number-id
152+16:43 tight name number-id
153−16:48 glyph (
153+16:53 glyph (
154−16:49 tight name number-id
154+16:54 tight name number-id
155−16:59 lit 1
155+16:64 lit 1
156−16:60 tight glyph )
156+16:65 tight glyph )
157−16:61 tight glyph )
157+16:66 tight glyph )
158−16:62 tight glyph ]
158+16:67 tight glyph ]
15917:1 NEWLINE
15917:1 NEWLINE
16017:1 glyph ++
16017:1 glyph ++
16117:4 name bad-tag
16117:4 name bad-tag
16217:12 glyph ^-
16217:12 glyph ^-
163−17:15 name attr
163+17:15 name attribute
164−17:20 name width
164+17:25 name width
165−17:25 tight glyph +
165+17:30 tight glyph +
166−17:26 tight glyph [
166+17:31 tight glyph [
167−17:27 tight lit %missing
167+17:32 tight lit %missing
168−17:36 lit 1
168+17:41 lit 1
169−17:37 tight glyph ]
169+17:42 tight glyph ]
17018:1 NEWLINE
17018:1 NEWLINE
17118:1 glyph ++
17118:1 glyph ++
17218:4 name bad-number
17218:4 name bad-number
17318:15 glyph ^-
17318:15 glyph ^-
174−18:18 name attr
174+18:18 name attribute
175−18:23 name width
175+18:28 name width
176−18:28 tight glyph +
176+18:33 tight glyph +
177−18:29 tight glyph [
177+18:34 tight glyph [
178−18:30 tight lit %fill
178+18:35 tight lit %fill
179−18:36 str "bad"
179+18:41 str "bad"
180−18:41 tight glyph ]
180+18:46 tight glyph ]
18119:1 NEWLINE
18119:1 NEWLINE
18219:1 glyph ++
18219:1 glyph ++
18319:4 name pending
18319:4 name pending
@@ -186,26 +186,26 @@
18620:6 lit %unrelated
18620:6 lit %unrelated
18721:5 INDENT
18721:5 INDENT
18821:5 glyph ^-
18821:5 glyph ^-
189−21:8 name attr
189+21:8 name attribute
190−21:13 name width
190+21:18 name width
191−21:18 tight glyph +
191+21:23 tight glyph +
192−21:19 tight glyph [
192+21:24 tight glyph [
193−21:20 tight lit %fill
193+21:25 tight lit %fill
194−21:26 glyph (
194+21:31 glyph (
195−21:27 tight name number-id
195+21:32 tight name number-id
196−21:37 lit 1
196+21:42 lit 1
197−21:38 tight glyph )
197+21:43 tight glyph )
198−21:39 tight glyph ]
198+21:44 tight glyph ]
19922:1 DEDENT
19922:1 DEDENT
20022:1 DEDENT
20022:1 DEDENT
20122:1 NEWLINE
20122:1 NEWLINE
20222:1 glyph ++
20222:1 glyph ++
20322:4 name singleton
20322:4 name singleton
20422:14 glyph ^-
20422:14 glyph ^-
205−22:17 name attr
205+22:17 name attribute
206−22:22 name width
206+22:27 name width
207−22:27 tight glyph +
207+22:32 tight glyph +
208−22:28 tight lit %shrink
208+22:33 tight lit %shrink
20923:1 NEWLINE
20923:1 NEWLINE
21023:1 glyph +$
21023:1 glyph +$
21123:4 name event
21123:4 name event
tests/golden/types-nested-shallow-preserve/tree.txt+61−61
@@ -1,13 +1,13 @@
1(module
1(module
2− (mold 1:1 length
2+ (mold 1:1 extent
3 (union 2:3
3 (union 2:3
4 (cell 2:3
4 (cell 2:3
5 (const 2:4 %fill)
5 (const 2:4 %fill)
6 (face 2:10 n (aura 2:12 @ud)))
6 (face 2:10 n (aura 2:12 @ud)))
7 (const 3:3 %shrink)))
7 (const 3:3 %shrink)))
8− (mold 4:1 attr
8+ (mold 4:1 attribute
9 (union 5:3
9 (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))
11 (cell 6:3 (const 6:4 %gap) (aura 6:9 @tas))))
11 (cell 6:3 (const 6:4 %gap) (aura 6:9 @tas))))
12 (value 7:1 number-id
12 (value 7:1 number-id
13 (gate 7:14
13 (gate 7:14
@@ -15,25 +15,25 @@
15 (wing 7:23 x)))
15 (wing 7:23 x)))
16 (value 8:1 plain
16 (value 8:1 plain
17 (cast 8:10
17 (cast 8:10
18− (ref 8:13 attr)
18+ (ref 8:13 attribute)
19− (pair 8:18 width
19+ (pair 8:23 width
20− (tuple 8:24 (lit 8:25 %fill) (lit 8:31 1)))))
20+ (tuple 8:29 (lit 8:30 %fill) (lit 8:36 1)))))
21 (value 9:1 direct
21 (value 9:1 direct
22 (cast 9:11
22 (cast 9:11
23− (ref 9:14 attr)
23+ (ref 9:14 attribute)
24− (tuple 9:19
24+ (tuple 9:24
25− (lit 9:20 %width)
25+ (lit 9:25 %width)
26− (tuple 9:27 (lit 9:28 %fill) (lit 9:34 1)))))
26+ (tuple 9:32 (lit 9:33 %fill) (lit 9:39 1)))))
27 (value 10:1 list
27 (value 10:1 list
28 (cast 10:9
28 (cast 10:9
29− (apply 10:12 list (ref 10:18 attr))
29+ (apply 10:12 list (ref 10:18 attribute))
30− (list 10:24
30+ (list 10:29
31− (pair 10:26 width
31+ (pair 10:31 width
32− (tuple 10:32 (lit 10:33 %fill) (lit 10:39 1))))))
32+ (tuple 10:37 (lit 10:38 %fill) (lit 10:44 1))))))
33 (value 11:1 accept
33 (value 11:1 accept
34 (gate 11:11
34 (gate 11:11
35− (face 11:14 value (ref 11:20 attr))
35+ (face 11:14 value (ref 11:20 attribute))
36− (wing 11:25 value)))
36+ (wing 11:30 value)))
37 (value 12:1 call
37 (value 12:1 call
38 (group 12:9
38 (group 12:9
39 (call 12:10
39 (call 12:10
@@ -42,69 +42,69 @@
42 (tuple 12:23 (lit 12:24 %fill) (lit 12:30 1))))))
42 (tuple 12:23 (lit 12:24 %fill) (lit 12:30 1))))))
43 (value 13:1 simple-call
43 (value 13:1 simple-call
44 (cast 13:16
44 (cast 13:16
45− (ref 13:19 attr)
45+ (ref 13:19 attribute)
46− (pair 13:24 width
46+ (pair 13:29 width
47− (tuple 13:30
47+ (tuple 13:35
48− (lit 13:31 %fill)
48+ (lit 13:36 %fill)
49− (group 13:37
49+ (group 13:42
50− (call 13:38 (wing 13:38 number-id) (lit 13:48 1)))))))
50+ (call 13:43 (wing 13:43 number-id) (lit 13:53 1)))))))
51 (value 14:1 grouped-call
51 (value 14:1 grouped-call
52 (cast 14:17
52 (cast 14:17
53− (ref 14:20 attr)
53+ (ref 14:20 attribute)
54− (pair 14:25 width
54+ (pair 14:30 width
55− (tuple 14:31
55+ (tuple 14:36
56− (lit 14:32 %fill)
56+ (lit 14:37 %fill)
57− (group 14:38
57+ (group 14:43
58− (group 14:39
58+ (group 14:44
59− (call 14:40 (wing 14:40 number-id) (lit 14:50 1))))))))
59+ (call 14:45 (wing 14:45 number-id) (lit 14:55 1))))))))
60 (value 15:1 cast-call
60 (value 15:1 cast-call
61 (cast 15:14
61 (cast 15:14
62− (ref 15:17 attr)
62+ (ref 15:17 attribute)
63− (pair 15:22 width
63+ (pair 15:27 width
64− (tuple 15:28
64+ (tuple 15:33
65− (lit 15:29 %fill)
65+ (lit 15:34 %fill)
66− (group 15:35
66+ (group 15:40
67− (cast 15:36
67+ (cast 15:41
68− (aura 15:39 @ud)
68+ (aura 15:44 @ud)
69− (group 15:43
69+ (group 15:48
70− (call 15:44 (wing 15:44 number-id) (lit 15:54 1)))))))))
70+ (call 15:49 (wing 15:49 number-id) (lit 15:59 1)))))))))
71 (value 16:1 nested-call
71 (value 16:1 nested-call
72 (cast 16:16
72 (cast 16:16
73− (ref 16:19 attr)
73+ (ref 16:19 attribute)
74− (pair 16:24 width
74+ (pair 16:29 width
75− (tuple 16:30
75+ (tuple 16:35
76− (lit 16:31 %fill)
76+ (lit 16:36 %fill)
77− (group 16:37
77+ (group 16:42
78− (call 16:38
78+ (call 16:43
79− (wing 16:38 number-id)
79+ (wing 16:43 number-id)
80− (group 16:48
80+ (group 16:53
81− (call 16:49 (wing 16:49 number-id) (lit 16:59 1)))))))))
81+ (call 16:54 (wing 16:54 number-id) (lit 16:64 1)))))))))
82 (value 17:1 bad-tag
82 (value 17:1 bad-tag
83 (cast 17:12
83 (cast 17:12
84− (ref 17:15 attr)
84+ (ref 17:15 attribute)
85− (pair 17:20 width
85+ (pair 17:25 width
86− (tuple 17:26 (lit 17:27 %missing) (lit 17:36 1)))))
86+ (tuple 17:31 (lit 17:32 %missing) (lit 17:41 1)))))
87 (value 18:1 bad-number
87 (value 18:1 bad-number
88 (cast 18:15
88 (cast 18:15
89− (ref 18:18 attr)
89+ (ref 18:18 attribute)
90− (pair 18:23 width
90+ (pair 18:28 width
91− (tuple 18:29 (lit 18:30 %fill) (str 18:36 "bad")))))
91+ (tuple 18:34 (lit 18:35 %fill) (str 18:41 "bad")))))
92 (value 19:1 pending
92 (value 19:1 pending
93 (body 20:3
93 (body 20:3
94 (trace 20:3
94 (trace 20:3
95 (lit 20:6 %unrelated)
95 (lit 20:6 %unrelated)
96 (body 21:5
96 (body 21:5
97 (cast 21:5
97 (cast 21:5
98− (ref 21:8 attr)
98+ (ref 21:8 attribute)
99− (pair 21:13 width
99+ (pair 21:18 width
100− (tuple 21:19
100+ (tuple 21:24
101− (lit 21:20 %fill)
101+ (lit 21:25 %fill)
102− (group 21:26
102+ (group 21:31
103− (call 21:27 (wing 21:27 number-id) (lit 21:37 1))))))))))
103+ (call 21:32 (wing 21:32 number-id) (lit 21:42 1))))))))))
104 (value 22:1 singleton
104 (value 22:1 singleton
105 (cast 22:14
105 (cast 22:14
106− (ref 22:17 attr)
106+ (ref 22:17 attribute)
107− (pair 22:22 width (lit 22:28 %shrink))))
107+ (pair 22:27 width (lit 22:33 %shrink))))
108 (mold 23:1 event
108 (mold 23:1 event
109 (union 24:3
109 (union 24:3
110 (cell 24:3
110 (cell 24:3
tests/golden/types-nested-shallow-preserve/types.txt+20−20
@@ -1,32 +1,32 @@
1partial inference; module not checked
1partial inference; module not checked
2−+$ length: cases proven disjoint; mold not checked
2++$ extent: cases proven disjoint; mold not checked
3−+$ attr: cases proven disjoint; mold not checked
3++$ attribute: cases proven disjoint; mold not checked
4++ number-id: $-(@ud @ud)
4++ number-id: $-(@ud @ud)
5−++ plain: attr
5+++ plain: attribute
6−++ direct: attr
6+++ direct: attribute
7−++ list: (list attr)
7+++ list: (list attribute)
8−++ accept: $-(attr attr)
8+++ accept: $-(attribute attribute)
9−++ call: attr
9+++ call: attribute
10−++ simple-call: attr
10+++ simple-call: attribute
11−++ grouped-call: attr
11+++ grouped-call: attribute
12−++ cast-call: attr
12+++ cast-call: attribute
13−++ nested-call: attr
13+++ nested-call: attribute
14++ bad-tag: cast mold and expression type do not unify
14++ bad-tag: cast mold and expression type do not unify
15/tests/golden/types-nested-shallow-preserve/source.jibb:17:15: cast mold
15/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]
17 ^
17 ^
18−/tests/golden/types-nested-shallow-preserve/source.jibb:17:20: expression
18+/tests/golden/types-nested-shallow-preserve/source.jibb:17:25: expression
19−++ bad-tag ^- attr width+[%missing 1]
19+++ bad-tag ^- attribute width+[%missing 1]
20− ^
20+ ^
21++ bad-number: cast mold and expression type do not unify
21++ bad-number: cast mold and expression type do not unify
22/tests/golden/types-nested-shallow-preserve/source.jibb:18:18: cast mold
22/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"]
24 ^
24 ^
25−/tests/golden/types-nested-shallow-preserve/source.jibb:18:23: expression
25+/tests/golden/types-nested-shallow-preserve/source.jibb:18:28: expression
26−++ bad-number ^- attr width+[%fill "bad"]
26+++ bad-number ^- attribute width+[%fill "bad"]
27− ^
27+ ^
28++ pending: tag needs context in partial inference
28++ pending: tag needs context in partial inference
29−++ singleton: attr
29+++ singleton: attribute
30+$ event: cases proven disjoint; mold not checked
30+$ event: cases proven disjoint; mold not checked
31+$ envelope: cases proven disjoint; mold not checked
31+$ envelope: cases proven disjoint; mold not checked
32++ constructor: envelope
32++ constructor: envelope
tests/golden/types-pair-context/source.jibb+14−14
@@ -3,30 +3,30 @@
3 %s1
3 %s1
4 %s2
4 %s2
5 %s3
5 %s3
6−+$ length
6++$ extent
7 [%fill n=@ud]
7 [%fill n=@ud]
8 %shrink
8 %shrink
9−+$ attr
9++$ attribute
10 [%gap spacing]
10 [%gap spacing]
11 [%pad spacing]
11 [%pad spacing]
12− [%width length]
12+ [%width extent]
13−+$ other-attr
13++$ other-attribute
14 [%gap spacing]
14 [%gap spacing]
15 [%pad spacing]
15 [%pad spacing]
16− [%width length]
16+ [%width extent]
17−++ one ^- attr gap+%s2
17+++ one ^- attribute gap+%s2
18−++ equiv ^- attr [%gap %s2]
18+++ equiv ^- attribute [%gap %s2]
19−++ attrs ^- (list attr) ~[gap+%s2 pad+%s3 width+[%fill 1]]
19+++ attributes ^- (list attribute) ~[gap+%s2 pad+%s3 width+[%fill 1]]
20++ gap-structural ^- [@tas @tas] gap+%s2
20++ gap-structural ^- [@tas @tas] gap+%s2
21−++ nested ^- attr width+[%fill 1]
21+++ nested ^- attribute width+[%fill 1]
22−++ mismatch ^- attr gap+%shrink
22+++ mismatch ^- attribute gap+%shrink
23−++ missing ^- attr width+[%oops 1]
23+++ missing ^- attribute width+[%oops 1]
24++ pending gap+%s2
24++ pending gap+%s2
25−++ cross-origin ^- attr ^- other-attr gap+%s2
25+++ cross-origin ^- attribute ^- other-attribute gap+%s2
26++ noun-pair ^- [* *] gap+%s2
26++ noun-pair ^- [* *] gap+%s2
27++ atom-pair ^- [@ta @tas] gap+%s2
27++ atom-pair ^- [@ta @tas] gap+%s2
28++ wrong-head ^- [@ud @tas] gap+%s2
28++ wrong-head ^- [@ud @tas] gap+%s2
29−++ wrong-number ^- attr width+[%fill "hi"]
29+++ wrong-number ^- attribute width+[%fill "hi"]
30++ unrelated
30++ unrelated
31 ~& %dangling
31 ~& %dangling
32− ^- attr gap+%s2
32+ ^- attribute gap+%s2
tests/golden/types-pair-context/tokens.txt+71−71
@@ -11,7 +11,7 @@
116:1 DEDENT
116:1 DEDENT
126:1 NEWLINE
126:1 NEWLINE
136:1 glyph +$
136:1 glyph +$
14−6:4 name length
14+6:4 name extent
157:3 INDENT
157:3 INDENT
167:3 glyph [
167:3 glyph [
177:4 tight lit %fill
177:4 tight lit %fill
@@ -24,7 +24,7 @@
249:1 DEDENT
249:1 DEDENT
259:1 NEWLINE
259:1 NEWLINE
269:1 glyph +$
269:1 glyph +$
27−9:4 name attr
27+9:4 name attribute
2810:3 INDENT
2810:3 INDENT
2910:3 glyph [
2910:3 glyph [
3010:4 tight lit %gap
3010:4 tight lit %gap
@@ -38,12 +38,12 @@
3812:3 NEWLINE
3812:3 NEWLINE
3912:3 glyph [
3912:3 glyph [
4012:4 tight lit %width
4012:4 tight lit %width
41−12:11 name length
41+12:11 name extent
4212:17 tight glyph ]
4212:17 tight glyph ]
4313:1 DEDENT
4313:1 DEDENT
4413:1 NEWLINE
4413:1 NEWLINE
4513:1 glyph +$
4513:1 glyph +$
46−13:4 name other-attr
46+13:4 name other-attribute
4714:3 INDENT
4714:3 INDENT
4814:3 glyph [
4814:3 glyph [
4914:4 tight lit %gap
4914:4 tight lit %gap
@@ -57,48 +57,48 @@
5716:3 NEWLINE
5716:3 NEWLINE
5816:3 glyph [
5816:3 glyph [
5916:4 tight lit %width
5916:4 tight lit %width
60−16:11 name length
60+16:11 name extent
6116:17 tight glyph ]
6116:17 tight glyph ]
6217:1 DEDENT
6217:1 DEDENT
6317:1 NEWLINE
6317:1 NEWLINE
6417:1 glyph ++
6417:1 glyph ++
6517:4 name one
6517:4 name one
6617:8 glyph ^-
6617:8 glyph ^-
67−17:11 name attr
67+17:11 name attribute
68−17:16 name gap
68+17:21 name gap
69−17:19 tight glyph +
69+17:24 tight glyph +
70−17:20 tight lit %s2
70+17:25 tight lit %s2
7118:1 NEWLINE
7118:1 NEWLINE
7218:1 glyph ++
7218:1 glyph ++
7318:4 name equiv
7318:4 name equiv
7418:10 glyph ^-
7418:10 glyph ^-
75−18:13 name attr
75+18:13 name attribute
76−18:18 glyph [
76+18:23 glyph [
77−18:19 tight lit %gap
77+18:24 tight lit %gap
78−18:24 lit %s2
78+18:29 lit %s2
79−18:27 tight glyph ]
79+18:32 tight glyph ]
8019:1 NEWLINE
8019:1 NEWLINE
8119:1 glyph ++
8119:1 glyph ++
82−19:4 name attrs
82+19:4 name attributes
83−19:10 glyph ^-
83+19:15 glyph ^-
84−19:13 glyph (
84+19:18 glyph (
85−19:14 tight name list
85+19:19 tight name list
86−19:19 name attr
86+19:24 name attribute
87−19:23 tight glyph )
87+19:33 tight glyph )
88−19:25 glyph ~[
88+19:35 glyph ~[
89−19:27 tight name gap
89+19:37 tight name gap
90−19:30 tight glyph +
90+19:40 tight glyph +
91−19:31 tight lit %s2
91+19:41 tight lit %s2
92−19:35 name pad
92+19:45 name pad
93−19:38 tight glyph +
94−19:39 tight lit %s3
95−19:43 name width
9619:48 tight glyph +
9319:48 tight glyph +
97−19:49 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:50 tight lit %fill
98+19:60 tight lit %fill
99−19:56 lit 1
99+19:66 lit 1
100−19:57 tight glyph ]
100+19:67 tight glyph ]
101−19:58 tight glyph ]
101+19:68 tight glyph ]
10220:1 NEWLINE
10220:1 NEWLINE
10320:1 glyph ++
10320:1 glyph ++
10420:4 name gap-structural
10420:4 name gap-structural
@@ -114,32 +114,32 @@
11421:1 glyph ++
11421:1 glyph ++
11521:4 name nested
11521:4 name nested
11621:11 glyph ^-
11621:11 glyph ^-
117−21:14 name attr
117+21:14 name attribute
118−21:19 name width
118+21:24 name width
119−21:24 tight glyph +
119+21:29 tight glyph +
120−21:25 tight glyph [
120+21:30 tight glyph [
121−21:26 tight lit %fill
121+21:31 tight lit %fill
122−21:32 lit 1
122+21:37 lit 1
123−21:33 tight glyph ]
123+21:38 tight glyph ]
12422:1 NEWLINE
12422:1 NEWLINE
12522:1 glyph ++
12522:1 glyph ++
12622:4 name mismatch
12622:4 name mismatch
12722:13 glyph ^-
12722:13 glyph ^-
128−22:16 name attr
128+22:16 name attribute
129−22:21 name gap
129+22:26 name gap
130−22:24 tight glyph +
130+22:29 tight glyph +
131−22:25 tight lit %shrink
131+22:30 tight lit %shrink
13223:1 NEWLINE
13223:1 NEWLINE
13323:1 glyph ++
13323:1 glyph ++
13423:4 name missing
13423:4 name missing
13523:12 glyph ^-
13523:12 glyph ^-
136−23:15 name attr
136+23:15 name attribute
137−23:20 name width
137+23:25 name width
138−23:25 tight glyph +
138+23:30 tight glyph +
139−23:26 tight glyph [
139+23:31 tight glyph [
140−23:27 tight lit %oops
140+23:32 tight lit %oops
141−23:33 lit 1
141+23:38 lit 1
142−23:34 tight glyph ]
142+23:39 tight glyph ]
14324:1 NEWLINE
14324:1 NEWLINE
14424:1 glyph ++
14424:1 glyph ++
14524:4 name pending
14524:4 name pending
@@ -150,12 +150,12 @@
15025:1 glyph ++
15025:1 glyph ++
15125:4 name cross-origin
15125:4 name cross-origin
15225:17 glyph ^-
15225:17 glyph ^-
153−25:20 name attr
153+25:20 name attribute
154−25:25 glyph ^-
154+25:30 glyph ^-
155−25:28 name other-attr
155+25:33 name other-attribute
156−25:39 name gap
156+25:49 name gap
157−25:42 tight glyph +
157+25:52 tight glyph +
158−25:43 tight lit %s2
158+25:53 tight lit %s2
15926:1 NEWLINE
15926:1 NEWLINE
16026:1 glyph ++
16026:1 glyph ++
16126:4 name noun-pair
16126:4 name noun-pair
@@ -193,13 +193,13 @@
19329:1 glyph ++
19329:1 glyph ++
19429:4 name wrong-number
19429:4 name wrong-number
19529:17 glyph ^-
19529:17 glyph ^-
196−29:20 name attr
196+29:20 name attribute
197−29:25 name width
197+29:30 name width
198−29:30 tight glyph +
198+29:35 tight glyph +
199−29:31 tight glyph [
199+29:36 tight glyph [
200−29:32 tight lit %fill
200+29:37 tight lit %fill
201−29:38 str "hi"
201+29:43 str "hi"
202−29:42 tight glyph ]
202+29:47 tight glyph ]
20330:1 NEWLINE
20330:1 NEWLINE
20430:1 glyph ++
20430:1 glyph ++
20530:4 name unrelated
20530:4 name unrelated
@@ -208,10 +208,10 @@
20831:6 lit %dangling
20831:6 lit %dangling
20932:5 INDENT
20932:5 INDENT
21032:5 glyph ^-
21032:5 glyph ^-
211−32:8 name attr
211+32:8 name attribute
212−32:13 name gap
212+32:18 name gap
213−32:16 tight glyph +
213+32:21 tight glyph +
214−32:17 tight lit %s2
214+32:22 tight lit %s2
215−32:20 DEDENT
215+32:25 DEDENT
216−32:20 DEDENT
216+32:25 DEDENT
217−32:20 NEWLINE
217+32:25 NEWLINE
tests/golden/types-pair-context/tree.txt+34−34
@@ -1,64 +1,64 @@
1(module
1(module
2 (mold 1:1 spacing
2 (mold 1:1 spacing
3 (union 2:3 (const 2:3 %s0) (const 3:3 %s1) (const 4:3 %s2) (const 5:3 %s3)))
3 (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
5 (union 7:3
5 (union 7:3
6 (cell 7:3
6 (cell 7:3
7 (const 7:4 %fill)
7 (const 7:4 %fill)
8 (face 7:10 n (aura 7:12 @ud)))
8 (face 7:10 n (aura 7:12 @ud)))
9 (const 8:3 %shrink)))
9 (const 8:3 %shrink)))
10− (mold 9:1 attr
10+ (mold 9:1 attribute
11 (union 10:3
11 (union 10:3
12 (cell 10:3 (const 10:4 %gap) (ref 10:9 spacing))
12 (cell 10:3 (const 10:4 %gap) (ref 10:9 spacing))
13 (cell 11:3 (const 11:4 %pad) (ref 11:9 spacing))
13 (cell 11:3 (const 11:4 %pad) (ref 11:9 spacing))
14− (cell 12:3 (const 12:4 %width) (ref 12:11 length))))
14+ (cell 12:3 (const 12:4 %width) (ref 12:11 extent))))
15− (mold 13:1 other-attr
15+ (mold 13:1 other-attribute
16 (union 14:3
16 (union 14:3
17 (cell 14:3 (const 14:4 %gap) (ref 14:9 spacing))
17 (cell 14:3 (const 14:4 %gap) (ref 14:9 spacing))
18 (cell 15:3 (const 15:4 %pad) (ref 15:9 spacing))
18 (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))))
20 (value 17:1 one
20 (value 17:1 one
21 (cast 17:8
21 (cast 17:8
22− (ref 17:11 attr)
22+ (ref 17:11 attribute)
23− (pair 17:16 gap (lit 17:20 %s2))))
23+ (pair 17:21 gap (lit 17:25 %s2))))
24 (value 18:1 equiv
24 (value 18:1 equiv
25 (cast 18:10
25 (cast 18:10
26− (ref 18:13 attr)
26+ (ref 18:13 attribute)
27− (tuple 18:18 (lit 18:19 %gap) (lit 18:24 %s2))))
27+ (tuple 18:23 (lit 18:24 %gap) (lit 18:29 %s2))))
28− (value 19:1 attrs
28+ (value 19:1 attributes
29− (cast 19:10
29+ (cast 19:15
30− (apply 19:13 list (ref 19:19 attr))
30+ (apply 19:18 list (ref 19:24 attribute))
31− (list 19:25
31+ (list 19:35
32− (pair 19:27 gap (lit 19:31 %s2))
32+ (pair 19:37 gap (lit 19:41 %s2))
33− (pair 19:35 pad (lit 19:39 %s3))
33+ (pair 19:45 pad (lit 19:49 %s3))
34− (pair 19:43 width
34+ (pair 19:53 width
35− (tuple 19:49 (lit 19:50 %fill) (lit 19:56 1))))))
35+ (tuple 19:59 (lit 19:60 %fill) (lit 19:66 1))))))
36 (value 20:1 gap-structural
36 (value 20:1 gap-structural
37 (cast 20:19
37 (cast 20:19
38 (cell 20:22 (aura 20:23 @tas) (aura 20:28 @tas))
38 (cell 20:22 (aura 20:23 @tas) (aura 20:28 @tas))
39 (pair 20:34 gap (lit 20:38 %s2))))
39 (pair 20:34 gap (lit 20:38 %s2))))
40 (value 21:1 nested
40 (value 21:1 nested
41 (cast 21:11
41 (cast 21:11
42− (ref 21:14 attr)
42+ (ref 21:14 attribute)
43− (pair 21:19 width
43+ (pair 21:24 width
44− (tuple 21:25 (lit 21:26 %fill) (lit 21:32 1)))))
44+ (tuple 21:30 (lit 21:31 %fill) (lit 21:37 1)))))
45 (value 22:1 mismatch
45 (value 22:1 mismatch
46 (cast 22:13
46 (cast 22:13
47− (ref 22:16 attr)
47+ (ref 22:16 attribute)
48− (pair 22:21 gap (lit 22:25 %shrink))))
48+ (pair 22:26 gap (lit 22:30 %shrink))))
49 (value 23:1 missing
49 (value 23:1 missing
50 (cast 23:12
50 (cast 23:12
51− (ref 23:15 attr)
51+ (ref 23:15 attribute)
52− (pair 23:20 width
52+ (pair 23:25 width
53− (tuple 23:26 (lit 23:27 %oops) (lit 23:33 1)))))
53+ (tuple 23:31 (lit 23:32 %oops) (lit 23:38 1)))))
54 (value 24:1 pending
54 (value 24:1 pending
55 (pair 24:12 gap (lit 24:16 %s2)))
55 (pair 24:12 gap (lit 24:16 %s2)))
56 (value 25:1 cross-origin
56 (value 25:1 cross-origin
57 (cast 25:17
57 (cast 25:17
58− (ref 25:20 attr)
58+ (ref 25:20 attribute)
59− (cast 25:25
59+ (cast 25:30
60− (ref 25:28 other-attr)
60+ (ref 25:33 other-attribute)
61− (pair 25:39 gap (lit 25:43 %s2)))))
61+ (pair 25:49 gap (lit 25:53 %s2)))))
62 (value 26:1 noun-pair
62 (value 26:1 noun-pair
63 (cast 26:14
63 (cast 26:14
64 (cell 26:17 (noun 26:18) (noun 26:20))
64 (cell 26:17 (noun 26:18) (noun 26:20))
@@ -73,14 +73,14 @@
73 (pair 28:29 gap (lit 28:33 %s2))))
73 (pair 28:29 gap (lit 28:33 %s2))))
74 (value 29:1 wrong-number
74 (value 29:1 wrong-number
75 (cast 29:17
75 (cast 29:17
76− (ref 29:20 attr)
76+ (ref 29:20 attribute)
77− (pair 29:25 width
77+ (pair 29:30 width
78− (tuple 29:31 (lit 29:32 %fill) (str 29:38 "hi")))))
78+ (tuple 29:36 (lit 29:37 %fill) (str 29:43 "hi")))))
79 (value 30:1 unrelated
79 (value 30:1 unrelated
80 (body 31:3
80 (body 31:3
81 (trace 31:3
81 (trace 31:3
82 (lit 31:6 %dangling)
82 (lit 31:6 %dangling)
83 (body 32:5
83 (body 32:5
84 (cast 32:5
84 (cast 32:5
85− (ref 32:8 attr)
85+ (ref 32:8 attribute)
86− (pair 32:13 gap (lit 32:17 %s2))))))))
86+ (pair 32:18 gap (lit 32:22 %s2))))))))
tests/golden/types-pair-context/types.txt+19−19
@@ -1,27 +1,27 @@
1partial inference; module not checked
1partial inference; module not checked
2+$ spacing: cases proven disjoint; mold not checked
2+$ spacing: cases proven disjoint; mold not checked
3−+$ length: cases proven disjoint; mold not checked
3++$ extent: cases proven disjoint; mold not checked
4−+$ attr: cases proven disjoint; mold not checked
4++$ attribute: cases proven disjoint; mold not checked
5−+$ other-attr: cases proven disjoint; mold not checked
5++$ other-attribute: cases proven disjoint; mold not checked
6−++ one: attr
6+++ one: attribute
7−++ equiv: attr
7+++ equiv: attribute
8−++ attrs: (list attr)
8+++ attributes: (list attribute)
9++ gap-structural: [@tas @tas]
9++ gap-structural: [@tas @tas]
10−++ nested: attr
10+++ nested: attribute
11++ mismatch: cast mold and expression type do not unify
11++ mismatch: cast mold and expression type do not unify
12/tests/golden/types-pair-context/source.jibb:22:16: cast mold
12/tests/golden/types-pair-context/source.jibb:22:16: cast mold
13−++ mismatch ^- attr gap+%shrink
13+++ mismatch ^- attribute gap+%shrink
14 ^
14 ^
15−/tests/golden/types-pair-context/source.jibb:22:21: expression
15+/tests/golden/types-pair-context/source.jibb:22:26: expression
16−++ mismatch ^- attr gap+%shrink
16+++ mismatch ^- attribute gap+%shrink
17− ^
17+ ^
18++ missing: cast mold and expression type do not unify
18++ missing: cast mold and expression type do not unify
19/tests/golden/types-pair-context/source.jibb:23:15: cast mold
19/tests/golden/types-pair-context/source.jibb:23:15: cast mold
20−++ missing ^- attr width+[%oops 1]
20+++ missing ^- attribute width+[%oops 1]
21 ^
21 ^
22−/tests/golden/types-pair-context/source.jibb:23:20: expression
22+/tests/golden/types-pair-context/source.jibb:23:25: expression
23−++ missing ^- attr width+[%oops 1]
23+++ missing ^- attribute width+[%oops 1]
24− ^
24+ ^
25++ pending: tag needs context in partial inference
25++ pending: tag needs context in partial inference
26++ cross-origin: cast constraint is not supported by partial inference
26++ cross-origin: cast constraint is not supported by partial inference
27++ noun-pair: [* *]
27++ noun-pair: [* *]
@@ -35,9 +35,9 @@ partial inference; module not checked
35 ^
35 ^
36++ wrong-number: cast mold and expression type do not unify
36++ wrong-number: cast mold and expression type do not unify
37/tests/golden/types-pair-context/source.jibb:29:20: cast mold
37/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"]
39 ^
39 ^
40−/tests/golden/types-pair-context/source.jibb:29:25: expression
40+/tests/golden/types-pair-context/source.jibb:29:30: expression
41−++ wrong-number ^- attr width+[%fill "hi"]
41+++ wrong-number ^- attribute width+[%fill "hi"]
42− ^
42+ ^
43++ unrelated: tag needs context in partial inference
43++ unrelated: tag needs context in partial inference
tests/golden/types-partial-aura-family/source.jibb+1−1
@@ -1,7 +1,7 @@
1++ decimal |= x=@ud ^- @u x
1++ decimal |= x=@ud ^- @u x
2++ hex ^- @u 0x1f
2++ hex ^- @u 0x1f
3++ base32 |= x=@uv ^- @u x
3++ base32 |= x=@uv ^- @u x
4−++ text |= x=@tD ^- @t x
4+++ text-value |= x=@tD ^- @t x
5++ narrow |= x=@t ^- @tD x
5++ narrow |= x=@t ^- @tD x
6++ siblings |= x=@ux ^- @ud x
6++ siblings |= x=@ux ^- @ud x
7++ dup |= p=[A A] p
7++ dup |= p=[A A] p
tests/golden/types-partial-aura-family/tokens.txt+8−8
@@ -25,14 +25,14 @@
253:26 name x
253:26 name x
264:1 NEWLINE
264:1 NEWLINE
274:1 glyph ++
274:1 glyph ++
28−4:4 name text
28+4:4 name text-value
29−4:9 glyph |=
29+4:15 glyph |=
30−4:12 name x
30+4:18 name x
31−4:13 tight glyph =
31+4:19 tight glyph =
32−4:14 tight aura @tD
32+4:20 tight aura @tD
33−4:18 glyph ^-
33+4:24 glyph ^-
34−4:21 aura @t
34+4:27 aura @t
35−4:24 name x
35+4:30 name x
365:1 NEWLINE
365:1 NEWLINE
375:1 glyph ++
375:1 glyph ++
385:4 name narrow
385:4 name narrow
tests/golden/types-partial-aura-family/tree.txt+4−4
@@ -9,10 +9,10 @@
9 (gate 3:11
9 (gate 3:11
10 (face 3:14 x (aura 3:16 @uv))
10 (face 3:14 x (aura 3:16 @uv))
11 (cast 3:20 (aura 3:23 @u) (wing 3:26 x))))
11 (cast 3:20 (aura 3:23 @u) (wing 3:26 x))))
12− (value 4:1 text
12+ (value 4:1 text-value
13− (gate 4:9
13+ (gate 4:15
14− (face 4:12 x (aura 4:14 @tD))
14+ (face 4:18 x (aura 4:20 @tD))
15− (cast 4:18 (aura 4:21 @t) (wing 4:24 x))))
15+ (cast 4:24 (aura 4:27 @t) (wing 4:30 x))))
16 (value 5:1 narrow
16 (value 5:1 narrow
17 (gate 5:11
17 (gate 5:11
18 (face 5:14 x (aura 5:16 @t))
18 (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
2++ decimal: $-(@ud @u)
2++ decimal: $-(@ud @u)
3++ hex: @u
3++ hex: @u
4++ base32: $-(@uv @u)
4++ base32: $-(@uv @u)
5−++ text: $-(@tD @t)
5+++ text-value: $-(@tD @t)
6++ narrow: cast mold and expression type do not unify
6++ narrow: cast mold and expression type do not unify
7/tests/golden/types-partial-aura-family/source.jibb:5:22: cast mold has type @tD
7/tests/golden/types-partial-aura-family/source.jibb:5:22: cast mold has type @tD
8++ narrow |= x=@t ^- @tD x
8++ narrow |= x=@t ^- @tD x
tests/golden/types-partial-locals/source.jibb+2−2
@@ -32,9 +32,9 @@
32++ local-mold |= x
32++ local-mold |= x
33 +$ item @t
33 +$ item @t
34 x
34 x
35−++ wrap |= y |=(z y)
35+++ wrap-value |= y |=(z y)
36++ through-global |= x
36++ through-global |= x
37− ++ local (wrap x)
37+ ++ local (wrap-value x)
38 ~& ^- @t (local ~zod)
38 ~& ^- @t (local ~zod)
39 ^- @p (local "hi")
39 ^- @p (local "hi")
40++ nested-shadow |= x
40++ nested-shadow |= x
tests/golden/types-partial-locals/tokens.txt+10−10
@@ -180,13 +180,13 @@
18035:1 DEDENT
18035:1 DEDENT
18135:1 NEWLINE
18135:1 NEWLINE
18235:1 glyph ++
18235:1 glyph ++
183−35:4 name wrap
183+35:4 name wrap-value
184−35:9 glyph |=
184+35:15 glyph |=
185−35:12 name y
185+35:18 name y
186−35:14 glyph |=(
186+35:20 glyph |=(
187−35:17 tight name z
187+35:23 tight name z
188−35:19 name y
188+35:25 name y
189−35:20 tight glyph )
189+35:26 tight glyph )
19036:1 NEWLINE
19036:1 NEWLINE
19136:1 glyph ++
19136:1 glyph ++
19236:4 name through-global
19236:4 name through-global
@@ -196,9 +196,9 @@
19637:3 glyph ++
19637:3 glyph ++
19737:6 name local
19737:6 name local
19837:12 glyph (
19837:12 glyph (
199−37:13 tight name wrap
199+37:13 tight name wrap-value
200−37:18 name x
200+37:24 name x
201−37:19 tight glyph )
201+37:25 tight glyph )
20238:3 NEWLINE
20238:3 NEWLINE
20338:3 glyph ~&
20338:3 glyph ~&
20438:6 glyph ^-
20438:6 glyph ^-
tests/golden/types-partial-locals/tree.txt+5−5
@@ -88,17 +88,17 @@
88 (body 33:3
88 (body 33:3
89 (mold 33:3 item (aura 33:11 @t))
89 (mold 33:3 item (aura 33:11 @t))
90 (wing 34:3 x))))
90 (wing 34:3 x))))
91− (value 35:1 wrap
91+ (value 35:1 wrap-value
92− (gate 35:9
92+ (gate 35:15
93− (bind 35:12 y)
93+ (bind 35:18 y)
94− (gate-wide 35:14 (bind 35:17 z) (wing 35:19 y))))
94+ (gate-wide 35:20 (bind 35:23 z) (wing 35:25 y))))
95 (value 36:1 through-global
95 (value 36:1 through-global
96 (gate 36:19
96 (gate 36:19
97 (bind 36:22 x)
97 (bind 36:22 x)
98 (body 37:3
98 (body 37:3
99 (value 37:3 local
99 (value 37:3 local
100 (group 37:12
100 (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))))
102 (trace 38:3
102 (trace 38:3
103 (cast 38:6
103 (cast 38:6
104 (aura 38:9 @t)
104 (aura 38:9 @t)
tests/golden/types-partial-locals/types.txt+1−1
@@ -21,7 +21,7 @@ partial inference; module not checked
21 ^
21 ^
22++ unused-bad: local definitions need unsupported inference
22++ unused-bad: local definitions need unsupported inference
23++ local-mold: $-(A A)
23++ local-mold: $-(A A)
24−++ wrap: $-(A $-(B A))
24+++ wrap-value: $-(A $-(B A))
25++ through-global: cast mold and expression type do not unify
25++ through-global: cast mold and expression type do not unify
26/tests/golden/types-partial-locals/source.jibb:39:8: cast mold has type @p
26/tests/golden/types-partial-locals/source.jibb:39:8: cast mold has type @p
27 ^- @p (local "hi")
27 ^- @p (local "hi")
tests/golden/types-prelude-bond/source.jibb+1−1
@@ -1,6 +1,6 @@
1++ choose (bond |=(~ "default"))
1++ choose (bond |=(~ "default"))
2++ missing (choose ~)
2++ missing (choose ~)
3++ present (choose `"found")
3++ present (choose `"found")
4−++ wrap |= fallback=$-(~ A) (bond fallback)
4+++ wrap-value |= fallback=$-(~ A) (bond fallback)
5++ choose-ship (bond |=(~ ~zod))
5++ choose-ship (bond |=(~ ~zod))
6++ present-ship (choose-ship `~zod)
6++ present-ship (choose-ship `~zod)
tests/golden/types-prelude-bond/tokens.txt+12−12
@@ -24,18 +24,18 @@
243:28 tight glyph )
243:28 tight glyph )
254:1 NEWLINE
254:1 NEWLINE
264:1 glyph ++
264:1 glyph ++
27−4:4 name wrap
27+4:4 name wrap-value
28−4:9 glyph |=
28+4:15 glyph |=
29−4:12 name fallback
29+4:18 name fallback
30−4:20 tight glyph =
30+4:26 tight glyph =
31−4:21 tight glyph $-(
31+4:27 tight glyph $-(
32−4:24 tight lit ~
32+4:30 tight lit ~
33−4:26 tvar A
33+4:32 tvar A
34−4:27 tight glyph )
34+4:33 tight glyph )
35−4:29 glyph (
35+4:35 glyph (
36−4:30 tight name bond
36+4:36 tight name bond
37−4:35 name fallback
37+4:41 name fallback
38−4:43 tight glyph )
38+4:49 tight glyph )
395:1 NEWLINE
395:1 NEWLINE
405:1 glyph ++
405:1 glyph ++
415:4 name choose-ship
415:4 name choose-ship
tests/golden/types-prelude-bond/tree.txt+6−6
@@ -12,12 +12,12 @@
12 (call 3:13
12 (call 3:13
13 (wing 3:13 choose)
13 (wing 3:13 choose)
14 (unit 3:20 (str 3:21 "found")))))
14 (unit 3:20 (str 3:21 "found")))))
15− (value 4:1 wrap
15+ (value 4:1 wrap-value
16− (gate 4:9
16+ (gate 4:15
17− (face 4:12 fallback
17+ (face 4:18 fallback
18− (fn 4:21 (const 4:24 ~) (tvar 4:26 A)))
18+ (fn 4:27 (const 4:30 ~) (tvar 4:32 A)))
19− (group 4:29
19+ (group 4:35
20− (call 4:30 (wing 4:30 bond) (wing 4:35 fallback)))))
20+ (call 4:36 (wing 4:36 bond) (wing 4:41 fallback)))))
21 (value 5:1 choose-ship
21 (value 5:1 choose-ship
22 (group 5:16
22 (group 5:16
23 (call 5:17
23 (call 5:17
tests/golden/types-prelude-bond/types.txt+1−1
@@ -2,6 +2,6 @@ partial inference; module not checked
2++ choose: $-((unit @t) @t)
2++ choose: $-((unit @t) @t)
3++ missing: @t
3++ missing: @t
4++ present: @t
4++ present: @t
5−++ wrap: $-($-(~ A) $-((unit A) A))
5+++ wrap-value: $-($-(~ A) $-((unit A) A))
6++ choose-ship: $-((unit @p) @p)
6++ choose-ship: $-((unit @p) @p)
7++ present-ship: @p
7++ present-ship: @p
tests/golden/types-prelude-cmd/source.jibb+4−4
@@ -8,9 +8,9 @@
8++ wait ^- (cmd @t) [%wait ~s30 "done"]
8++ wait ^- (cmd @t) [%wait ~s30 "done"]
9++ who ^- (cmd @t) [%who |=(p=@p "done")]
9++ who ^- (cmd @t) [%who |=(p=@p "done")]
10++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
10++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
11−++ wrap |= x=A ^- (cmd A) [%wait ~s30 x]
11+++ wrap-value |= x=A ^- (cmd A) [%wait ~s30 x]
12−++ wrap-text (wrap "hello")
12+++ wrap-value-text (wrap-value "hello")
13−++ wrap-ship (wrap ~zod)
13+++ wrap-value-ship (wrap-value ~zod)
14++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
14++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
15++ commands ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 "done"]]
15++ commands ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 "done"]]
16++ commands-bad ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 ~zod]]
16++ commands-bad ^- (list (cmd @t)) ~[[%go "/home"] [%wait ~s30 ~zod]]
@@ -18,4 +18,4 @@
18 ^- (cmd @t) [%poke p |=(r=@p "done")]
18 ^- (cmd @t) [%poke p |=(r=@p "done")]
19++ wrong-case ^- (cmd @t) %oops
19++ wrong-case ^- (cmd @t) %oops
20++ use-text |= x=(cmd @t) x
20++ 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 @@
13810:46 tight glyph ]
13810:46 tight glyph ]
13911:1 NEWLINE
13911:1 NEWLINE
14011:1 glyph ++
14011:1 glyph ++
141−11:4 name wrap
141+11:4 name wrap-value
142−11:9 glyph |=
142+11:15 glyph |=
143−11:12 name x
143+11:18 name x
144−11:13 tight glyph =
144+11:19 tight glyph =
145−11:14 tight tvar A
145+11:20 tight tvar A
146−11:16 glyph ^-
146+11:22 glyph ^-
147−11:19 glyph (
147+11:25 glyph (
148−11:20 tight name cmd
148+11:26 tight name cmd
149−11:24 tvar A
149+11:30 tvar A
150−11:25 tight glyph )
150+11:31 tight glyph )
151−11:27 glyph [
151+11:33 glyph [
152−11:28 tight lit %wait
152+11:34 tight lit %wait
153−11:34 lit ~s30
153+11:40 lit ~s30
154−11:39 name x
154+11:45 name x
155−11:40 tight glyph ]
155+11:46 tight glyph ]
15612:1 NEWLINE
15612:1 NEWLINE
15712:1 glyph ++
15712:1 glyph ++
158−12:4 name wrap-text
158+12:4 name wrap-value-text
159−12:14 glyph (
159+12:20 glyph (
160−12:15 tight name wrap
160+12:21 tight name wrap-value
161−12:20 str "hello"
161+12:32 str "hello"
162−12:27 tight glyph )
162+12:39 tight glyph )
16313:1 NEWLINE
16313:1 NEWLINE
16413:1 glyph ++
16413:1 glyph ++
165−13:4 name wrap-ship
165+13:4 name wrap-value-ship
166−13:14 glyph (
166+13:20 glyph (
167−13:15 tight name wrap
167+13:21 tight name wrap-value
168−13:20 lit ~zod
168+13:32 lit ~zod
169−13:24 tight glyph )
169+13:36 tight glyph )
17014:1 NEWLINE
17014:1 NEWLINE
17114:1 glyph ++
17114:1 glyph ++
17214:4 name wrong-reply
17214:4 name wrong-reply
@@ -278,8 +278,8 @@
27821:10 glyph (
27821:10 glyph (
27921:11 tight name use-text
27921:11 tight name use-text
28021:20 glyph (
28021:20 glyph (
281−21:21 tight name wrap
281+21:21 tight name wrap-value
282−21:26 lit ~zod
282+21:32 lit ~zod
283−21:30 tight glyph )
283+21:36 tight glyph )
284−21:31 tight glyph )
284+21:37 tight glyph )
285−21:32 NEWLINE
285+21:38 NEWLINE
tests/golden/types-prelude-cmd/tree.txt+13−13
@@ -59,18 +59,18 @@
59 (cast 10:18
59 (cast 10:18
60 (apply 10:21 cmd (aura 10:26 @t))
60 (apply 10:21 cmd (aura 10:26 @t))
61 (tuple 10:30 (lit 10:31 %wait) (lit 10:37 ~s30) (lit 10:42 ~zod))))
61 (tuple 10:30 (lit 10:31 %wait) (lit 10:37 ~s30) (lit 10:42 ~zod))))
62− (value 11:1 wrap
62+ (value 11:1 wrap-value
63− (gate 11:9
63+ (gate 11:15
64− (face 11:12 x (tvar 11:14 A))
64+ (face 11:18 x (tvar 11:20 A))
65− (cast 11:16
65+ (cast 11:22
66− (apply 11:19 cmd (tvar 11:24 A))
66+ (apply 11:25 cmd (tvar 11:30 A))
67− (tuple 11:27 (lit 11:28 %wait) (lit 11:34 ~s30) (wing 11:39 x)))))
67+ (tuple 11:33 (lit 11:34 %wait) (lit 11:40 ~s30) (wing 11:45 x)))))
68− (value 12:1 wrap-text
68+ (value 12:1 wrap-value-text
69− (group 12:14
69+ (group 12:20
70− (call 12:15 (wing 12:15 wrap) (str 12:20 "hello"))))
70+ (call 12:21 (wing 12:21 wrap-value) (str 12:32 "hello"))))
71− (value 13:1 wrap-ship
71+ (value 13:1 wrap-value-ship
72− (group 13:14
72+ (group 13:20
73− (call 13:15 (wing 13:15 wrap) (lit 13:20 ~zod))))
73+ (call 13:21 (wing 13:21 wrap-value) (lit 13:32 ~zod))))
74 (value 14:1 wrong-reply
74 (value 14:1 wrong-reply
75 (cast 14:16
75 (cast 14:16
76 (apply 14:19 cmd (aura 14:24 @t))
76 (apply 14:19 cmd (aura 14:24 @t))
@@ -119,4 +119,4 @@
119 (call 21:11
119 (call 21:11
120 (wing 21:11 use-text)
120 (wing 21:11 use-text)
121 (group 21:20
121 (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
20/tests/golden/types-prelude-cmd/source.jibb:10:30: expression
20/tests/golden/types-prelude-cmd/source.jibb:10:30: expression
21++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
21++ wrong-message ^- (cmd @t) [%wait ~s30 ~zod]
22 ^
22 ^
23−++ wrap: $-(A (cmd A))
23+++ wrap-value: $-(A (cmd A))
24−++ wrap-text: (cmd @t)
24+++ wrap-value-text: (cmd @t)
25−++ wrap-ship: (cmd @p)
25+++ wrap-value-ship: (cmd @p)
26++ wrong-reply: cast mold and expression type do not unify
26++ wrong-reply: cast mold and expression type do not unify
27/tests/golden/types-prelude-cmd/source.jibb:14:19: cast mold
27/tests/golden/types-prelude-cmd/source.jibb:14:19: cast mold
28++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
28++ wrong-reply ^- (cmd @t) [%who |=(p=@p ~zod)]
@@ -49,8 +49,8 @@ partial inference; module not checked
49++ use-text: $-((cmd @t) (cmd @t))
49++ use-text: $-((cmd @t) (cmd @t))
50++ cross: call's sample and argument types do not unify
50++ cross: call's sample and argument types do not unify
51/tests/golden/types-prelude-cmd/source.jibb:21:21: called gate
51/tests/golden/types-prelude-cmd/source.jibb:21:21: called gate
52−++ cross (use-text (wrap ~zod))
52+++ cross (use-text (wrap-value ~zod))
53 ^
53 ^
54−/tests/golden/types-prelude-cmd/source.jibb:21:26: argument has type @p
54+/tests/golden/types-prelude-cmd/source.jibb:21:32: argument has type @p
55−++ cross (use-text (wrap ~zod))
55+++ cross (use-text (wrap-value ~zod))
56− ^
56+ ^
tests/golden/types-prelude-list-alias/source.jibb+1−1
@@ -2,6 +2,6 @@
2++ path-id |= x=path x
2++ path-id |= x=path x
3++ tape-id |= x=tape x
3++ tape-id |= x=tape x
4++ spot-id |= x=spot x
4++ spot-id |= x=spot x
5−++ text |= x=(bag @t) x
5+++ text-value |= x=(bag @t) x
6++ ship |= x=(bag @p) x
6++ ship |= x=(bag @p) x
7++ wrong ^- (bag @t) ~[~zod]
7++ wrong ^- (bag @t) ~[~zod]
tests/golden/types-prelude-list-alias/tokens.txt+9−9
@@ -34,15 +34,15 @@
344:22 name x
344:22 name x
355:1 NEWLINE
355:1 NEWLINE
365:1 glyph ++
365:1 glyph ++
37−5:4 name text
37+5:4 name text-value
38−5:9 glyph |=
38+5:15 glyph |=
39−5:12 name x
39+5:18 name x
40−5:13 tight glyph =
40+5:19 tight glyph =
41−5:14 tight glyph (
41+5:20 tight glyph (
42−5:15 tight name bag
42+5:21 tight name bag
43−5:19 aura @t
43+5:25 aura @t
44−5:21 tight glyph )
44+5:27 tight glyph )
45−5:23 name x
45+5:29 name x
466:1 NEWLINE
466:1 NEWLINE
476:1 glyph ++
476:1 glyph ++
486:4 name ship
486:4 name ship
tests/golden/types-prelude-list-alias/tree.txt+5−5
@@ -14,11 +14,11 @@
14 (gate 4:12
14 (gate 4:12
15 (face 4:15 x (ref 4:17 spot))
15 (face 4:15 x (ref 4:17 spot))
16 (wing 4:22 x)))
16 (wing 4:22 x)))
17− (value 5:1 text
17+ (value 5:1 text-value
18− (gate 5:9
18+ (gate 5:15
19− (face 5:12 x
19+ (face 5:18 x
20− (apply 5:14 bag (aura 5:19 @t)))
20+ (apply 5:20 bag (aura 5:25 @t)))
21− (wing 5:23 x)))
21+ (wing 5:29 x)))
22 (value 6:1 ship
22 (value 6:1 ship
23 (gate 6:9
23 (gate 6:9
24 (face 6:12 x
24 (face 6:12 x
tests/golden/types-prelude-list-alias/types.txt+1−1
@@ -3,7 +3,7 @@ partial inference; module not checked
3++ path-id: $-((list @ta) (list @ta))
3++ path-id: $-((list @ta) (list @ta))
4++ tape-id: $-((list @tD) (list @tD))
4++ tape-id: $-((list @tD) (list @tD))
5++ spot-id: $-([p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]] [p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]])
5++ spot-id: $-([p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]] [p=(list @ta) q=[p=[p=@ q=@] q=[p=@ q=@]]])
6−++ text: $-((list @t) (list @t))
6+++ text-value: $-((list @t) (list @t))
7++ ship: $-((list @p) (list @p))
7++ ship: $-((list @p) (list @p))
8++ wrong: list item does not fit its expected type
8++ wrong: list item does not fit its expected type
9/tests/golden/types-prelude-list-alias/source.jibb:7:13: expected item has type @t
9/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 @@
1/= lib /ui/lib
1/= lib /ui/lib
2−++ text ^- @t (left.lib "hello")
2+++ text-value ^- @t (left.lib "hello")
3++ ship ^- @p (right.lib "hello")
3++ ship ^- @p (right.lib "hello")
tests/golden/types-recursion-scc-import/tokens.txt+7−7
@@ -6,13 +6,13 @@
61:12 tight knot lib
61:12 tight knot lib
72:1 NEWLINE
72:1 NEWLINE
82:1 glyph ++
82:1 glyph ++
9−2:4 name text
9+2:4 name text-value
10−2:9 glyph ^-
10+2:15 glyph ^-
11−2:12 aura @t
11+2:18 aura @t
12−2:15 glyph (
12+2:21 glyph (
13−2:16 tight wing left.lib
13+2:22 tight wing left.lib
14−2:25 str "hello"
14+2:31 str "hello"
15−2:32 tight glyph )
15+2:38 tight glyph )
163:1 NEWLINE
163:1 NEWLINE
173:1 glyph ++
173:1 glyph ++
183:4 name ship
183:4 name ship
tests/golden/types-recursion-scc-import/tree.txt+5−5
@@ -1,10 +1,10 @@
1(module
1(module
2 (jibb 1:1 lib /ui/lib)
2 (jibb 1:1 lib /ui/lib)
3− (value 2:1 text
3+ (value 2:1 text-value
4− (cast 2:9
4+ (cast 2:15
5− (aura 2:12 @t)
5+ (aura 2:18 @t)
6− (group 2:15
6+ (group 2:21
7− (call 2:16 (wing 2:16 left.lib) (str 2:25 "hello")))))
7+ (call 2:22 (wing 2:22 left.lib) (str 2:31 "hello")))))
8 (value 3:1 ship
8 (value 3:1 ship
9 (cast 3:9
9 (cast 3:9
10 (aura 3:12 @p)
10 (aura 3:12 @p)
tests/golden/types-recursion-scc-import/types.txt+1−1
@@ -1,3 +1,3 @@
1partial inference; module not checked
1partial inference; module not checked
2−++ text: @t
2+++ text-value: @t
3++ ship: @p
3++ ship: @p
tests/golden/types-union-finite-context/source.jibb+1−1
@@ -35,7 +35,7 @@
35 * %stay
35 * %stay
36++ binder |= x=input ^- ?
36++ binder |= x=input ^- ?
37 ?- x
37 ?- x
38− [%p flag text] flag
38+ [%p flag words] flag
39 %other %.n
39 %other %.n
40++ unresolved |= x=input ^- (list @t)
40++ unresolved |= x=input ^- (list @t)
41 ~& %pending
41 ~& %pending
tests/golden/types-union-finite-context/tokens.txt+3−3
@@ -244,9 +244,9 @@
24438:5 glyph [
24438:5 glyph [
24538:6 tight lit %p
24538:6 tight lit %p
24638:9 name flag
24638:9 name flag
247−38:14 name text
247+38:14 name words
248−38:18 tight glyph ]
248+38:19 tight glyph ]
249−38:20 name flag
249+38:21 name flag
25039:5 NEWLINE
25039:5 NEWLINE
25139:5 lit %other
25139:5 lit %other
25239:12 lit %.n
25239:12 lit %.n
tests/golden/types-union-finite-context/tree.txt+2−2
@@ -111,8 +111,8 @@
111 (branch 37:3
111 (branch 37:3
112 (wing 37:6 x)
112 (wing 37:6 x)
113 (arm 38:5
113 (arm 38:5
114− (cell 38:5 (lit 38:6 %p) (bind 38:9 flag) (bind 38:14 text))
114+ (cell 38:5 (lit 38:6 %p) (bind 38:9 flag) (bind 38:14 words))
115− (wing 38:20 flag))
115+ (wing 38:21 flag))
116 (arm 39:5 (lit 39:5 %other) (lit 39:12 %.n)))))))
116 (arm 39:5 (lit 39:5 %other) (lit 39:12 %.n)))))))
117 (value 40:1 unresolved
117 (value 40:1 unresolved
118 (gate 40:15
118 (gate 40:15
tests/golden/types-union-nonwing-subject/source.jibb+13−13
@@ -8,24 +8,24 @@
8++ passthrough |= x=input x
8++ passthrough |= x=input x
9++ grouped |= x=input ^- (list @t)
9++ grouped |= x=input ^- (list @t)
10 ?- (x)
10 ?- (x)
11− [%item flag text] ~[text]
11+ [%item flag words] ~[words]
12 %none ~
12 %none ~
13++ call |= x=input ^- (list @t)
13++ call |= x=input ^- (list @t)
14 ?- (local-id x)
14 ?- (local-id x)
15− [%item flag text] ~[text]
15+ [%item flag words] ~[words]
16 %none ~
16 %none ~
17++ nested |= x=input ^- result
17++ nested |= x=input ^- result
18 ?- (local-id (passthrough x))
18 ?- (local-id (passthrough x))
19− [%item flag text] %good
19+ [%item flag words] %good
20 %none %empty
20 %none %empty
21++ finite |= x=input ^- (list @t)
21++ finite |= x=input ^- (list @t)
22 ?- (local-id x)
22 ?- (local-id x)
23− [%item %.y text] ~[text]
23+ [%item %.y words] ~[words]
24− [%item %.n text] ~[]
24+ [%item %.n words] ~[]
25 %none ~
25 %none ~
26++ wrong |= x=input ^- result
26++ wrong |= x=input ^- result
27 ?- (local-id x)
27 ?- (local-id x)
28− [%item flag text] %missing
28+ [%item flag words] %missing
29 %none %empty
29 %none %empty
30++ missing |= x=input ^- (list @t)
30++ missing |= x=input ^- (list @t)
31 ?- (local-id x)
31 ?- (local-id x)
@@ -34,7 +34,7 @@
34 ?- (local-id x)
34 ?- (local-id x)
35 %none ~
35 %none ~
36 %none ~
36 %none ~
37− [%item flag text] ~[text]
37+ [%item flag words] ~[words]
38++ shadow |= x=input ^- result
38++ shadow |= x=input ^- result
39 ?- (local-id x)
39 ?- (local-id x)
40 [%item flag same] %good
40 [%item flag same] %good
@@ -42,19 +42,19 @@
42++ pending |= x=input ^- result
42++ pending |= x=input ^- result
43 ~& %dangling
43 ~& %dangling
44 ?- (local-id x)
44 ?- (local-id x)
45− [%item flag text] %good
45+ [%item flag words] %good
46 %none %empty
46 %none %empty
47++ unknown |= x ^- (list @t)
47++ unknown |= x ^- (list @t)
48 ?- (local-id x)
48 ?- (local-id x)
49− [%item flag text] ~[text]
49+ [%item flag words] ~[words]
50 %none ~
50 %none ~
51++ nonunion |= x=@t ^- (list @t)
51++ nonunion |= x=@t ^- (list @t)
52 ?- (local-id x)
52 ?- (local-id x)
53− [%item flag text] ~[text]
53+ [%item flag words] ~[words]
54 %none ~
54 %none ~
55++ explicit |= [x=input y=A] ^- (list A)
55++ explicit |= [x=input y=A] ^- (list A)
56 ?- (local-id x)
56 ?- (local-id x)
57− [%item flag text] ~["text"]
57+ [%item flag words] ~["text"]
58 %none ~
58 %none ~
59+$ payload |$ [A]
59+$ payload |$ [A]
60 [%present value=A]
60 [%present value=A]
@@ -65,12 +65,12 @@
65 %none ~
65 %none ~
66++ bad-subject |= x=input ^- result
66++ bad-subject |= x=input ^- result
67 ?- (passthrough "wrong")
67 ?- (passthrough "wrong")
68− [%item flag text] %missing
68+ [%item flag words] %missing
69 %none %empty
69 %none %empty
70++ first-of |= [a b] a
70++ first-of |= [a b] a
71++ pending-subject |= x=input ^- result
71++ pending-subject |= x=input ^- result
72 ?- (first-of x %dangling)
72 ?- (first-of x %dangling)
73− [%item flag text] %good
73+ [%item flag words] %good
74 %none %empty
74 %none %empty
75++ duplicate-flag-subject |= x=@t ^- (list @t)
75++ duplicate-flag-subject |= x=@t ^- (list @t)
76 ?- (passthrough x)
76 ?- (passthrough x)
tests/golden/types-union-nonwing-subject/tokens.txt+54−54
@@ -56,11 +56,11 @@
5611:5 glyph [
5611:5 glyph [
5711:6 tight lit %item
5711:6 tight lit %item
5811:12 name flag
5811:12 name flag
59−11:17 name text
59+11:17 name words
60−11:21 tight glyph ]
60+11:22 tight glyph ]
61−11:23 glyph ~[
61+11:24 glyph ~[
62−11:25 tight name text
62+11:26 tight name words
63−11:29 tight glyph ]
63+11:31 tight glyph ]
6412:5 NEWLINE
6412:5 NEWLINE
6512:5 lit %none
6512:5 lit %none
6612:11 lit ~
6612:11 lit ~
@@ -88,11 +88,11 @@
8815:5 glyph [
8815:5 glyph [
8915:6 tight lit %item
8915:6 tight lit %item
9015:12 name flag
9015:12 name flag
91−15:17 name text
91+15:17 name words
92−15:21 tight glyph ]
92+15:22 tight glyph ]
93−15:23 glyph ~[
93+15:24 glyph ~[
94−15:25 tight name text
94+15:26 tight name words
95−15:29 tight glyph ]
95+15:31 tight glyph ]
9616:5 NEWLINE
9616:5 NEWLINE
9716:5 lit %none
9716:5 lit %none
9816:11 lit ~
9816:11 lit ~
@@ -120,9 +120,9 @@
12019:5 glyph [
12019:5 glyph [
12119:6 tight lit %item
12119:6 tight lit %item
12219:12 name flag
12219:12 name flag
123−19:17 name text
123+19:17 name words
124−19:21 tight glyph ]
124+19:22 tight glyph ]
125−19:23 lit %good
125+19:24 lit %good
12620:5 NEWLINE
12620:5 NEWLINE
12720:5 lit %none
12720:5 lit %none
12820:11 lit %empty
12820:11 lit %empty
@@ -150,19 +150,19 @@
15023:5 glyph [
15023:5 glyph [
15123:6 tight lit %item
15123:6 tight lit %item
15223:12 lit %.y
15223:12 lit %.y
153−23:16 name text
153+23:16 name words
154−23:20 tight glyph ]
154+23:21 tight glyph ]
155−23:22 glyph ~[
155+23:23 glyph ~[
156−23:24 tight name text
156+23:25 tight name words
157−23:28 tight glyph ]
157+23:30 tight glyph ]
15824:5 NEWLINE
15824:5 NEWLINE
15924:5 glyph [
15924:5 glyph [
16024:6 tight lit %item
16024:6 tight lit %item
16124:12 lit %.n
16124:12 lit %.n
162−24:16 name text
162+24:16 name words
163−24:20 tight glyph ]
163+24:21 tight glyph ]
164−24:22 glyph ~[
164+24:23 glyph ~[
165−24:24 tight glyph ]
165+24:25 tight glyph ]
16625:5 NEWLINE
16625:5 NEWLINE
16725:5 lit %none
16725:5 lit %none
16825:11 lit ~
16825:11 lit ~
@@ -187,9 +187,9 @@
18728:5 glyph [
18728:5 glyph [
18828:6 tight lit %item
18828:6 tight lit %item
18928:12 name flag
18928:12 name flag
190−28:17 name text
190+28:17 name words
191−28:21 tight glyph ]
191+28:22 tight glyph ]
192−28:23 lit %missing
192+28:24 lit %missing
19329:5 NEWLINE
19329:5 NEWLINE
19429:5 lit %none
19429:5 lit %none
19529:11 lit %empty
19529:11 lit %empty
@@ -246,11 +246,11 @@
24637:5 glyph [
24637:5 glyph [
24737:6 tight lit %item
24737:6 tight lit %item
24837:12 name flag
24837:12 name flag
249−37:17 name text
249+37:17 name words
250−37:21 tight glyph ]
250+37:22 tight glyph ]
251−37:23 glyph ~[
251+37:24 glyph ~[
252−37:25 tight name text
252+37:26 tight name words
253−37:29 tight glyph ]
253+37:31 tight glyph ]
25438:1 DEDENT
25438:1 DEDENT
25538:1 DEDENT
25538:1 DEDENT
25638:1 NEWLINE
25638:1 NEWLINE
@@ -302,9 +302,9 @@
30245:7 glyph [
30245:7 glyph [
30345:8 tight lit %item
30345:8 tight lit %item
30445:14 name flag
30445:14 name flag
305−45:19 name text
305+45:19 name words
306−45:23 tight glyph ]
306+45:24 tight glyph ]
307−45:25 lit %good
307+45:26 lit %good
30846:7 NEWLINE
30846:7 NEWLINE
30946:7 lit %none
30946:7 lit %none
31046:13 lit %empty
31046:13 lit %empty
@@ -331,11 +331,11 @@
33149:5 glyph [
33149:5 glyph [
33249:6 tight lit %item
33249:6 tight lit %item
33349:12 name flag
33349:12 name flag
334−49:17 name text
334+49:17 name words
335−49:21 tight glyph ]
335+49:22 tight glyph ]
336−49:23 glyph ~[
336+49:24 glyph ~[
337−49:25 tight name text
337+49:26 tight name words
338−49:29 tight glyph ]
338+49:31 tight glyph ]
33950:5 NEWLINE
33950:5 NEWLINE
34050:5 lit %none
34050:5 lit %none
34150:11 lit ~
34150:11 lit ~
@@ -363,11 +363,11 @@
36353:5 glyph [
36353:5 glyph [
36453:6 tight lit %item
36453:6 tight lit %item
36553:12 name flag
36553:12 name flag
366−53:17 name text
366+53:17 name words
367−53:21 tight glyph ]
367+53:22 tight glyph ]
368−53:23 glyph ~[
368+53:24 glyph ~[
369−53:25 tight name text
369+53:26 tight name words
370−53:29 tight glyph ]
370+53:31 tight glyph ]
37154:5 NEWLINE
37154:5 NEWLINE
37254:5 lit %none
37254:5 lit %none
37354:11 lit ~
37354:11 lit ~
@@ -400,11 +400,11 @@
40057:5 glyph [
40057:5 glyph [
40157:6 tight lit %item
40157:6 tight lit %item
40257:12 name flag
40257:12 name flag
403−57:17 name text
403+57:17 name words
404−57:21 tight glyph ]
404+57:22 tight glyph ]
405−57:23 glyph ~[
405+57:24 glyph ~[
406−57:25 tight str "text"
406+57:26 tight str "text"
407−57:31 tight glyph ]
407+57:32 tight glyph ]
40858:5 NEWLINE
40858:5 NEWLINE
40958:5 lit %none
40958:5 lit %none
41058:11 lit ~
41058:11 lit ~
@@ -486,9 +486,9 @@
48668:5 glyph [
48668:5 glyph [
48768:6 tight lit %item
48768:6 tight lit %item
48868:12 name flag
48868:12 name flag
489−68:17 name text
489+68:17 name words
490−68:21 tight glyph ]
490+68:22 tight glyph ]
491−68:23 lit %missing
491+68:24 lit %missing
49269:5 NEWLINE
49269:5 NEWLINE
49369:5 lit %none
49369:5 lit %none
49469:11 lit %empty
49469:11 lit %empty
@@ -523,9 +523,9 @@
52373:5 glyph [
52373:5 glyph [
52473:6 tight lit %item
52473:6 tight lit %item
52573:12 name flag
52573:12 name flag
526−73:17 name text
526+73:17 name words
527−73:21 tight glyph ]
527+73:22 tight glyph ]
528−73:23 lit %good
528+73:24 lit %good
52974:5 NEWLINE
52974:5 NEWLINE
53074:5 lit %none
53074:5 lit %none
53174:11 lit %empty
53174:11 lit %empty
tests/golden/types-union-nonwing-subject/tree.txt+26−26
@@ -23,8 +23,8 @@
23 (branch 10:3
23 (branch 10:3
24 (group 10:6 (wing 10:7 x))
24 (group 10:6 (wing 10:7 x))
25 (arm 11:5
25 (arm 11:5
26− (cell 11:5 (lit 11:6 %item) (bind 11:12 flag) (bind 11:17 text))
26+ (cell 11:5 (lit 11:6 %item) (bind 11:12 flag) (bind 11:17 words))
27− (list 11:23 (wing 11:25 text)))
27+ (list 11:24 (wing 11:26 words)))
28 (arm 12:5 (lit 12:5 %none) (lit 12:11 ~)))))))
28 (arm 12:5 (lit 12:5 %none) (lit 12:11 ~)))))))
29 (value 13:1 call
29 (value 13:1 call
30 (gate 13:9
30 (gate 13:9
@@ -36,8 +36,8 @@
36 (group 14:6
36 (group 14:6
37 (call 14:7 (wing 14:7 local-id) (wing 14:16 x)))
37 (call 14:7 (wing 14:7 local-id) (wing 14:16 x)))
38 (arm 15:5
38 (arm 15:5
39− (cell 15:5 (lit 15:6 %item) (bind 15:12 flag) (bind 15:17 text))
39+ (cell 15:5 (lit 15:6 %item) (bind 15:12 flag) (bind 15:17 words))
40− (list 15:23 (wing 15:25 text)))
40+ (list 15:24 (wing 15:26 words)))
41 (arm 16:5 (lit 16:5 %none) (lit 16:11 ~)))))))
41 (arm 16:5 (lit 16:5 %none) (lit 16:11 ~)))))))
42 (value 17:1 nested
42 (value 17:1 nested
43 (gate 17:11
43 (gate 17:11
@@ -52,8 +52,8 @@
52 (group 18:16
52 (group 18:16
53 (call 18:17 (wing 18:17 passthrough) (wing 18:29 x)))))
53 (call 18:17 (wing 18:17 passthrough) (wing 18:29 x)))))
54 (arm 19:5
54 (arm 19:5
55− (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 text))
55+ (cell 19:5 (lit 19:6 %item) (bind 19:12 flag) (bind 19:17 words))
56− (lit 19:23 %good))
56+ (lit 19:24 %good))
57 (arm 20:5 (lit 20:5 %none) (lit 20:11 %empty)))))))
57 (arm 20:5 (lit 20:5 %none) (lit 20:11 %empty)))))))
58 (value 21:1 finite
58 (value 21:1 finite
59 (gate 21:11
59 (gate 21:11
@@ -65,11 +65,11 @@
65 (group 22:6
65 (group 22:6
66 (call 22:7 (wing 22:7 local-id) (wing 22:16 x)))
66 (call 22:7 (wing 22:7 local-id) (wing 22:16 x)))
67 (arm 23:5
67 (arm 23:5
68− (cell 23:5 (lit 23:6 %item) (lit 23:12 %.y) (bind 23:16 text))
68+ (cell 23:5 (lit 23:6 %item) (lit 23:12 %.y) (bind 23:16 words))
69− (list 23:22 (wing 23:24 text)))
69+ (list 23:23 (wing 23:25 words)))
70 (arm 24:5
70 (arm 24:5
71− (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 text))
71+ (cell 24:5 (lit 24:6 %item) (lit 24:12 %.n) (bind 24:16 words))
72− (list 24:22))
72+ (list 24:23))
73 (arm 25:5 (lit 25:5 %none) (lit 25:11 ~)))))))
73 (arm 25:5 (lit 25:5 %none) (lit 25:11 ~)))))))
74 (value 26:1 wrong
74 (value 26:1 wrong
75 (gate 26:10
75 (gate 26:10
@@ -81,8 +81,8 @@
81 (group 27:6
81 (group 27:6
82 (call 27:7 (wing 27:7 local-id) (wing 27:16 x)))
82 (call 27:7 (wing 27:7 local-id) (wing 27:16 x)))
83 (arm 28:5
83 (arm 28:5
84− (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 text))
84+ (cell 28:5 (lit 28:6 %item) (bind 28:12 flag) (bind 28:17 words))
85− (lit 28:23 %missing))
85+ (lit 28:24 %missing))
86 (arm 29:5 (lit 29:5 %none) (lit 29:11 %empty)))))))
86 (arm 29:5 (lit 29:5 %none) (lit 29:11 %empty)))))))
87 (value 30:1 missing
87 (value 30:1 missing
88 (gate 30:12
88 (gate 30:12
@@ -106,8 +106,8 @@
106 (arm 35:5 (lit 35:5 %none) (lit 35:11 ~))
106 (arm 35:5 (lit 35:5 %none) (lit 35:11 ~))
107 (arm 36:5 (lit 36:5 %none) (lit 36:11 ~))
107 (arm 36:5 (lit 36:5 %none) (lit 36:11 ~))
108 (arm 37:5
108 (arm 37:5
109− (cell 37:5 (lit 37:6 %item) (bind 37:12 flag) (bind 37:17 text))
109+ (cell 37:5 (lit 37:6 %item) (bind 37:12 flag) (bind 37:17 words))
110− (list 37:23 (wing 37:25 text))))))))
110+ (list 37:24 (wing 37:26 words))))))))
111 (value 38:1 shadow
111 (value 38:1 shadow
112 (gate 38:11
112 (gate 38:11
113 (face 38:14 x (ref 38:16 input))
113 (face 38:14 x (ref 38:16 input))
@@ -134,8 +134,8 @@
134 (group 44:8
134 (group 44:8
135 (call 44:9 (wing 44:9 local-id) (wing 44:18 x)))
135 (call 44:9 (wing 44:9 local-id) (wing 44:18 x)))
136 (arm 45:7
136 (arm 45:7
137− (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 text))
137+ (cell 45:7 (lit 45:8 %item) (bind 45:14 flag) (bind 45:19 words))
138− (lit 45:25 %good))
138+ (lit 45:26 %good))
139 (arm 46:7 (lit 46:7 %none) (lit 46:13 %empty)))))))))
139 (arm 46:7 (lit 46:7 %none) (lit 46:13 %empty)))))))))
140 (value 47:1 unknown
140 (value 47:1 unknown
141 (gate 47:12
141 (gate 47:12
@@ -147,8 +147,8 @@
147 (group 48:6
147 (group 48:6
148 (call 48:7 (wing 48:7 local-id) (wing 48:16 x)))
148 (call 48:7 (wing 48:7 local-id) (wing 48:16 x)))
149 (arm 49:5
149 (arm 49:5
150− (cell 49:5 (lit 49:6 %item) (bind 49:12 flag) (bind 49:17 text))
150+ (cell 49:5 (lit 49:6 %item) (bind 49:12 flag) (bind 49:17 words))
151− (list 49:23 (wing 49:25 text)))
151+ (list 49:24 (wing 49:26 words)))
152 (arm 50:5 (lit 50:5 %none) (lit 50:11 ~)))))))
152 (arm 50:5 (lit 50:5 %none) (lit 50:11 ~)))))))
153 (value 51:1 nonunion
153 (value 51:1 nonunion
154 (gate 51:13
154 (gate 51:13
@@ -160,8 +160,8 @@
160 (group 52:6
160 (group 52:6
161 (call 52:7 (wing 52:7 local-id) (wing 52:16 x)))
161 (call 52:7 (wing 52:7 local-id) (wing 52:16 x)))
162 (arm 53:5
162 (arm 53:5
163− (cell 53:5 (lit 53:6 %item) (bind 53:12 flag) (bind 53:17 text))
163+ (cell 53:5 (lit 53:6 %item) (bind 53:12 flag) (bind 53:17 words))
164− (list 53:23 (wing 53:25 text)))
164+ (list 53:24 (wing 53:26 words)))
165 (arm 54:5 (lit 54:5 %none) (lit 54:11 ~)))))))
165 (arm 54:5 (lit 54:5 %none) (lit 54:11 ~)))))))
166 (value 55:1 explicit
166 (value 55:1 explicit
167 (gate 55:13
167 (gate 55:13
@@ -175,8 +175,8 @@
175 (group 56:6
175 (group 56:6
176 (call 56:7 (wing 56:7 local-id) (wing 56:16 x)))
176 (call 56:7 (wing 56:7 local-id) (wing 56:16 x)))
177 (arm 57:5
177 (arm 57:5
178− (cell 57:5 (lit 57:6 %item) (bind 57:12 flag) (bind 57:17 text))
178+ (cell 57:5 (lit 57:6 %item) (bind 57:12 flag) (bind 57:17 words))
179− (list 57:23 (str 57:25 "text")))
179+ (list 57:24 (str 57:26 "text")))
180 (arm 58:5 (lit 58:5 %none) (lit 58:11 ~)))))))
180 (arm 58:5 (lit 58:5 %none) (lit 58:11 ~)))))))
181 (mold 59:1 payload
181 (mold 59:1 payload
182 (generic 59:12 A
182 (generic 59:12 A
@@ -211,8 +211,8 @@
211 (group 67:6
211 (group 67:6
212 (call 67:7 (wing 67:7 passthrough) (str 67:19 "wrong")))
212 (call 67:7 (wing 67:7 passthrough) (str 67:19 "wrong")))
213 (arm 68:5
213 (arm 68:5
214− (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 text))
214+ (cell 68:5 (lit 68:6 %item) (bind 68:12 flag) (bind 68:17 words))
215− (lit 68:23 %missing))
215+ (lit 68:24 %missing))
216 (arm 69:5 (lit 69:5 %none) (lit 69:11 %empty)))))))
216 (arm 69:5 (lit 69:5 %none) (lit 69:11 %empty)))))))
217 (value 70:1 first-of
217 (value 70:1 first-of
218 (gate 70:13
218 (gate 70:13
@@ -228,8 +228,8 @@
228 (group 72:6
228 (group 72:6
229 (call 72:7 (wing 72:7 first-of) (wing 72:16 x) (lit 72:18 %dangling)))
229 (call 72:7 (wing 72:7 first-of) (wing 72:16 x) (lit 72:18 %dangling)))
230 (arm 73:5
230 (arm 73:5
231− (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 text))
231+ (cell 73:5 (lit 73:6 %item) (bind 73:12 flag) (bind 73:17 words))
232− (lit 73:23 %good))
232+ (lit 73:24 %good))
233 (arm 74:5 (lit 74:5 %none) (lit 74:11 %empty)))))))
233 (arm 74:5 (lit 74:5 %none) (lit 74:11 %empty)))))))
234 (value 75:1 duplicate-flag-subject
234 (value 75:1 duplicate-flag-subject
235 (gate 75:27
235 (gate 75:27
tests/golden/types-union-nonwing-subject/types.txt+3−3
@@ -11,9 +11,9 @@ partial inference; module not checked
11/tests/golden/types-union-nonwing-subject/source.jibb:26:24: expected union
11/tests/golden/types-union-nonwing-subject/source.jibb:26:24: expected union
12++ wrong |= x=input ^- result
12++ wrong |= x=input ^- result
13 ^
13 ^
14−/tests/golden/types-union-nonwing-subject/source.jibb:28:23: tag
14+/tests/golden/types-union-nonwing-subject/source.jibb:28:24: tag
15− [%item flag text] %missing
15+ [%item flag words] %missing
16− ^
16+ ^
17++ missing: missing union case [%item [flag=? text=@t]]
17++ missing: missing union case [%item [flag=? text=@t]]
18++ dead: branch arm is covered by earlier arms
18++ dead: branch arm is covered by earlier arms
19/tests/golden/types-union-nonwing-subject/source.jibb:36:5: covered arm
19/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 @@
16++ accept |= x=(unit msg) x
16++ accept |= x=(unit msg) x
17++ call (accept `%stay)
17++ call (accept `%stay)
18++ bad-call (accept `%bad)
18++ bad-call (accept `%bad)
19−++ field ^- record [`%go ~[`"hi"]]
19+++ field-value ^- record [`%go ~[`"hi"]]
20−++ field-bad ^- record [`%bad ~[`"hi"]]
20+++ field-value-bad ^- record [`%bad ~[`"hi"]]
21++ mimic-mismatch ^- (mimic @t) `"hi"
21++ mimic-mismatch ^- (mimic @t) `"hi"
22++ without-context `%go
22++ without-context `%go
23++ pending
23++ pending
@@ -31,7 +31,7 @@
31+$ alt
31+$ alt
32 %go
32 %go
33 %stay
33 %stay
34−++ field-wrong-payload ^- record [`%go ~[`~zod]]
34+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
35++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
35++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
36++ wrong-union |= x=alt ^- record [`x ~[`"hi"]]
36++ wrong-union |= x=alt ^- record [`x ~[`"hi"]]
37++ no-field-context |= x=A ^- [a=A] [wrong=x]
37++ no-field-context |= x=A ^- [a=A] [wrong=x]
tests/golden/types-unit-context/tokens.txt+33−33
@@ -169,30 +169,30 @@
16918:26 tight glyph )
16918:26 tight glyph )
17019:1 NEWLINE
17019:1 NEWLINE
17119:1 glyph ++
17119:1 glyph ++
172−19:4 name field
172+19:4 name field-value
173−19:10 glyph ^-
173+19:16 glyph ^-
174−19:13 name record
174+19:19 name record
175−19:20 glyph [
175+19:26 glyph [
176−19:21 tight glyph `
176+19:27 tight glyph `
177−19:22 tight lit %go
177+19:28 tight lit %go
178−19:26 glyph ~[
178+19:32 glyph ~[
179−19:28 tight glyph `
179+19:34 tight glyph `
180−19:29 tight str "hi"
180+19:35 tight str "hi"
181−19:33 tight glyph ]
181+19:39 tight glyph ]
182−19:34 tight glyph ]
182+19:40 tight glyph ]
18320:1 NEWLINE
18320:1 NEWLINE
18420:1 glyph ++
18420:1 glyph ++
185−20:4 name field-bad
185+20:4 name field-value-bad
186−20:14 glyph ^-
186+20:20 glyph ^-
187−20:17 name record
187+20:23 name record
188−20:24 glyph [
188+20:30 glyph [
189−20:25 tight glyph `
189+20:31 tight glyph `
190−20:26 tight lit %bad
190+20:32 tight lit %bad
191−20:31 glyph ~[
191+20:37 glyph ~[
192−20:33 tight glyph `
192+20:39 tight glyph `
193−20:34 tight str "hi"
193+20:40 tight str "hi"
194−20:38 tight glyph ]
194+20:44 tight glyph ]
195−20:39 tight glyph ]
195+20:45 tight glyph ]
19621:1 NEWLINE
19621:1 NEWLINE
19721:1 glyph ++
19721:1 glyph ++
19821:4 name mimic-mismatch
19821:4 name mimic-mismatch
@@ -278,17 +278,17 @@
27834:1 DEDENT
27834:1 DEDENT
27934:1 NEWLINE
27934:1 NEWLINE
28034:1 glyph ++
28034:1 glyph ++
281−34:4 name field-wrong-payload
281+34:4 name field-value-wrong-payload
282−34:24 glyph ^-
282+34:30 glyph ^-
283−34:27 name record
283+34:33 name record
284−34:34 glyph [
284+34:40 glyph [
285−34:35 tight glyph `
285+34:41 tight glyph `
286−34:36 tight lit %go
286+34:42 tight lit %go
287−34:40 glyph ~[
287+34:46 glyph ~[
288−34:42 tight glyph `
288+34:48 tight glyph `
289−34:43 tight lit ~zod
289+34:49 tight lit ~zod
290−34:47 tight glyph ]
290+34:53 tight glyph ]
291−34:48 tight glyph ]
291+34:54 tight glyph ]
29235:1 NEWLINE
29235:1 NEWLINE
29335:1 glyph ++
29335:1 glyph ++
29435:4 name wrong-name
29435:4 name wrong-name
tests/golden/types-unit-context/tree.txt+21−21
@@ -70,20 +70,20 @@
70 (call 18:14
70 (call 18:14
71 (wing 18:14 accept)
71 (wing 18:14 accept)
72 (unit 18:21 (lit 18:22 %bad)))))
72 (unit 18:21 (lit 18:22 %bad)))))
73− (value 19:1 field
73+ (value 19:1 field-value
74− (cast 19:10
74+ (cast 19:16
75− (ref 19:13 record)
75+ (ref 19:19 record)
76− (tuple 19:20
76+ (tuple 19:26
77− (unit 19:21 (lit 19:22 %go))
77+ (unit 19:27 (lit 19:28 %go))
78− (list 19:26
78+ (list 19:32
79− (unit 19:28 (str 19:29 "hi"))))))
79+ (unit 19:34 (str 19:35 "hi"))))))
80− (value 20:1 field-bad
80+ (value 20:1 field-value-bad
81− (cast 20:14
81+ (cast 20:20
82− (ref 20:17 record)
82+ (ref 20:23 record)
83− (tuple 20:24
83+ (tuple 20:30
84− (unit 20:25 (lit 20:26 %bad))
84+ (unit 20:31 (lit 20:32 %bad))
85− (list 20:31
85+ (list 20:37
86− (unit 20:33 (str 20:34 "hi"))))))
86+ (unit 20:39 (str 20:40 "hi"))))))
87 (value 21:1 mimic-mismatch
87 (value 21:1 mimic-mismatch
88 (cast 21:19
88 (cast 21:19
89 (apply 21:22 mimic (aura 21:29 @t))
89 (apply 21:22 mimic (aura 21:29 @t))
@@ -120,13 +120,13 @@
120 (unit 30:29 (str 30:30 "hi")))))
120 (unit 30:29 (str 30:30 "hi")))))
121 (mold 31:1 alt
121 (mold 31:1 alt
122 (union 32:3 (const 32:3 %go) (const 33:3 %stay)))
122 (union 32:3 (const 32:3 %go) (const 33:3 %stay)))
123− (value 34:1 field-wrong-payload
123+ (value 34:1 field-value-wrong-payload
124− (cast 34:24
124+ (cast 34:30
125− (ref 34:27 record)
125+ (ref 34:33 record)
126− (tuple 34:34
126+ (tuple 34:40
127− (unit 34:35 (lit 34:36 %go))
127+ (unit 34:41 (lit 34:42 %go))
128− (list 34:40
128+ (list 34:46
129− (unit 34:42 (lit 34:43 ~zod))))))
129+ (unit 34:48 (lit 34:49 ~zod))))))
130 (value 35:1 wrong-name
130 (value 35:1 wrong-name
131 (cast 35:15
131 (cast 35:15
132 (ref 35:18 record)
132 (ref 35:18 record)
tests/golden/types-unit-context/types.txt+15−15
@@ -43,14 +43,14 @@ partial inference; module not checked
43/tests/golden/types-unit-context/source.jibb:18:22: tag
43/tests/golden/types-unit-context/source.jibb:18:22: tag
44++ bad-call (accept `%bad)
44++ bad-call (accept `%bad)
45 ^
45 ^
46−++ field: [u=(unit msg) xs=(list (unit @t))]
46+++ field-value: [u=(unit msg) xs=(list (unit @t))]
47−++ field-bad: msg has no case `%bad`
47+++ field-value-bad: msg has no case `%bad`
48−/tests/golden/types-unit-context/source.jibb:20:17: expected union
48+/tests/golden/types-unit-context/source.jibb:20:23: expected union
49−++ field-bad ^- record [`%bad ~[`"hi"]]
49+++ field-value-bad ^- record [`%bad ~[`"hi"]]
50− ^
50+ ^
51−/tests/golden/types-unit-context/source.jibb:20:26: tag
51+/tests/golden/types-unit-context/source.jibb:20:32: tag
52−++ field-bad ^- record [`%bad ~[`"hi"]]
52+++ field-value-bad ^- record [`%bad ~[`"hi"]]
53− ^
53+ ^
54++ mimic-mismatch: cast constraint is not supported by partial inference
54++ mimic-mismatch: cast constraint is not supported by partial inference
55++ without-context: tag needs context in partial inference
55++ without-context: tag needs context in partial inference
56++ pending: tag needs context in partial inference
56++ pending: tag needs context in partial inference
@@ -58,13 +58,13 @@ partial inference; module not checked
58++ preserve: $-(A (unit A))
58++ preserve: $-(A (unit A))
59++ force: explicit capital constraints are not supported by partial inference
59++ force: explicit capital constraints are not supported by partial inference
60+$ alt: cases proven disjoint; mold not checked
60+$ alt: cases proven disjoint; mold not checked
61−++ field-wrong-payload: unit payload does not fit its expected type
61+++ field-value-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
62+/tests/golden/types-unit-context/source.jibb:34:33: expected unit payload has type @t
63−++ field-wrong-payload ^- record [`%go ~[`~zod]]
63+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
64− ^
64+ ^
65−/tests/golden/types-unit-context/source.jibb:34:43: payload has type @p
65+/tests/golden/types-unit-context/source.jibb:34:49: payload has type @p
66−++ field-wrong-payload ^- record [`%go ~[`~zod]]
66+++ field-value-wrong-payload ^- record [`%go ~[`~zod]]
67− ^
67+ ^
68++ wrong-name: cast mold and expression type do not unify
68++ wrong-name: cast mold and expression type do not unify
69/tests/golden/types-unit-context/source.jibb:35:18: cast mold
69/tests/golden/types-unit-context/source.jibb:35:18: cast mold
70++ wrong-name ^- record [wrong=`%go xs=~[`"hi"]]
70++ 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 @@
12++ direct-gate-prepared
12++ direct-gate-prepared
13 |= [prelude=@t internal=@t]
13 |= [prelude=@t internal=@t]
14 ^- (unit iprelude:jibb)
14 ^- (unit iprelude:jibb)
15− :: This element is test-only; it does not prescribe a runtime shape.
15+ :: Program and element come from the real prelude; only layout helpers are synthetic.
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'
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'
17 (prepare-prelude-with-internal:jibb (cat 3 prelude extra) internal)
17 (prepare-prelude-with-internal:jibb (cat 3 prelude extra) internal)
18++ direct-gate-source-output
18++ direct-gate-source-output
19 |= [src=@t prepared=(unit iprelude:jibb)]
19 |= [src=@t prepared=(unit iprelude:jibb)]
@@ -23,7 +23,7 @@
23 |= prepared=(unit iprelude:jibb)
23 |= prepared=(unit iprelude:jibb)
24 ^- (list tape)
24 ^- (list tape)
25 ?~ prepared ~["synthetic prelude did not prepare"]
25 ?~ prepared ~["synthetic prelude did not prepare"]
26− =/ src=@t '+$ message\0a %start\0a %stop\0a+$ record [count=@ud label=@t]\0a++ init-record |= input=@t ^- record [count=0 label=input]\0a++ view-record |= state=record ^- (element message) [%node %start]\0a++ subs-record |= state=record ^- (list (sub message)) ~\0a++ update-proj-good |= [msg=message state=record]\0a ^- [record (list (cmd message))]\0a [(proj [count=0 label="projected" extra=%.y]) ~]\0a++ program-projection (program init-record update-proj-good view-record subs-record)\0a'
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'
27 =/ out=jfile-result:jibb (infer-jibb-file:jibb /tests/direct/client/jibb src ~ ~ ~ ~[/tests/direct/client/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
27 =/ out=jfile-result:jibb (infer-jibb-file:jibb /tests/direct/client/jibb src ~ ~ ~ ~[/tests/direct/client/jibb] values.u.prepared molds.u.prepared ~ `iface.u.prepared)
28 ?: ?=(%| -.out) ~["projection-bearing module did not infer"]
28 ?: ?=(%| -.out) ~["projection-bearing module did not infer"]
29 =/ defs=(list iwidth-definition:jibb) (skim elaborations.iface.p.out |=(d=iwidth-definition:jibb =(%update-proj-good name.d)))
29 =/ 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 @@
33 =/ bad-owner=jfile-result:jibb
33 =/ bad-owner=jfile-result:jibb
34 (infer-jibb-file:jibb /ui/tree/jibb owner-negative ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
34 (infer-jibb-file:jibb /ui/tree/jibb owner-negative ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35 =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-negative)
35 =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-negative)
36− =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.owner)
36+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.owner)
37 ?~ mold 'BAD owner mold'
37 ?~ mold 'BAD owner mold'
38 ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
38 ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
39 =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
39 =/ generic=itype:jibb typ.u.mold(args ~[[%var 42]])
tests/lib/jibb-generic-pattern.hoon+1−1
@@ -32,7 +32,7 @@
32 =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-bad)
32 =/ bad-parse=(each module:jibb error:jibb) (parse:jibb /ui/tree/jibb owner-bad)
33 =/ bad=jfile-result:jibb
33 =/ bad=jfile-result:jibb
34 (infer-jibb-file:jibb /ui/tree/jibb owner-bad ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
34 (infer-jibb-file:jibb /ui/tree/jibb owner-bad ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
35− =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %element iface.p.checked)
35+ =/ mold=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree iface.p.checked)
36 ?~ mold 'BAD owner mold'
36 ?~ mold 'BAD owner mold'
37 ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
37 ?. ?=(%grec -.typ.u.mold) 'BAD nominal owner'
38 =/ target=itype:jibb typ.u.mold(args ~[[%atom %t]])
38 =/ 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.
2/+ jibb
2/+ jibb
3/* real-prelude %jibb /lib/jibb/prelude/jibb
3/* real-prelude %jibb /lib/jibb/prelude/jibb
4/* real-internal %jibb /lib/jibb/internal/jibb
4/* real-internal %jibb /lib/jibb/internal/jibb
@@ -42,7 +42,7 @@
42 =/ module=jfile-result:jibb
42 =/ module=jfile-result:jibb
43 (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
43 (infer-jibb-file:jibb /ui/tree/jibb tree ~ ~ ~ ~[/ui/tree/jibb] values.u.prep molds.u.prep ~ `iface.u.prep)
44 ?: ?=(%| -.module) (cat 3 'BAD recursive module: ' p.module)
44 ?: ?=(%| -.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)
46 ?~ scheme 'BAD missing recursive mold'
46 ?~ scheme 'BAD missing recursive mold'
47 ?. ?=(%grec -.typ.u.scheme) 'BAD missing recursive identity'
47 ?. ?=(%grec -.typ.u.scheme) 'BAD missing recursive identity'
48 =/ typ=itype:jibb typ.u.scheme
48 =/ typ=itype:jibb typ.u.scheme
@@ -116,8 +116,8 @@
116 =/ shape-changed=?
116 =/ shape-changed=?
117 ?~ old |
117 ?~ old |
118 ?~ new |
118 ?~ new |
119− =/ a=(unit ischeme:jibb) (find-jibb-mold:jibb %element u.old)
119+ =/ a=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree u.old)
120− =/ b=(unit ischeme:jibb) (find-jibb-mold:jibb %element u.new)
120+ =/ b=(unit ischeme:jibb) (find-jibb-mold:jibb %node-tree u.new)
121 ?~ a |
121 ?~ a |
122 ?~ b |
122 ?~ b |
123 ?. &(?=(%grec -.typ.u.a) ?=(%grec -.typ.u.b)) |
123 ?. &(?=(%grec -.typ.u.a) ?=(%grec -.typ.u.b)) |
tests/lib/jibb-list-alias-guards.hoon+1−1
@@ -4,7 +4,7 @@
4|%
4|%
5++ list-alias-output
5++ list-alias-output
6 ^- @t
6 ^- @t
7− =/ src=@t (crip "++ text |= x=(alias @t) x\0a++ ship |= x=(alias @p) x\0a++ wrong ^- (alias @t) ~[~zod]\0a++ shadow |= x=(list @t)\0a +$ list @t\0a x\0a")
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")
8 =/ canonical=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
8 =/ canonical=@t (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
9 =/ altered=@t (crip "+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
9 =/ altered=@t (crip "+$ list |$ [A] [A A]\0a+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
10 =/ omitted=@t (crip "+$ bag |$ [A] (list A)\0a+$ alias |$ [A] (bag A)\0a")
10 =/ 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 @@
127 =/ bad-cache=jcache:jibb ~[[helper-at mismatched]]
127 =/ bad-cache=jcache:jibb ~[[helper-at mismatched]]
128 =/ wrong (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep bad-cache pre)
128 =/ wrong (infer-jibb-file:jibb client transitive ~ marks bundle ~[client] values.u.prep molds.u.prep bad-cache pre)
129 ?: ?=(%& -.wrong) 'cache key and interface path mismatch accepted'
129 ?: ?=(%& -.wrong) 'cache key and interface path mismatch accepted'
130− =/ old-client=@t '++ text "safe"\0a'
130+ =/ old-client=@t '++ text-value "safe"\0a'
131− =/ dep=@t '/= c /lib/client\0a++ value text.c\0a'
131+ =/ dep=@t '/= c /lib/client\0a++ value text-value.c\0a'
132 =/ root=@t '/= h /lib/helper\0a++ x value.h\0a'
132 =/ root=@t '/= h /lib/helper\0a++ x value.h\0a'
133 =/ cycle-bundle=jbundle:jibb ~[[client old-client] [helper-at dep]]
133 =/ cycle-bundle=jbundle:jibb ~[[client old-client] [helper-at dep]]
134 =/ cycle-legacy=ifile:jibb legacy(source `dep)
134 =/ cycle-legacy=ifile:jibb legacy(source `dep)
tests/lib/jibb-union-source.hoon+1−1
@@ -66,7 +66,7 @@
66 =/ mixed-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb mixed-source)
66 =/ mixed-parsed=(each module:jibb error:jibb) (parse:jibb /tests/empty/jibb mixed-source)
67 ?: ?=(%| -.mixed-parsed) ~[['BAD mixed parse' |]]
67 ?: ?=(%| -.mixed-parsed) ~[['BAD mixed parse' |]]
68 =/ mixed-collected=grec-collected:jibb (grec-collect-molds:jibb defs.p.mixed-parsed)
68 =/ mixed-collected=grec-collected:jibb (grec-collect-molds:jibb defs.p.mixed-parsed)
69− =/ mixed-tree=(unit shape:jibb) (~(get by proofs.mixed-collected) %element)
69+ =/ mixed-tree=(unit shape:jibb) (~(get by proofs.mixed-collected) %node-tree)
70 =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
70 =/ prep=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb public internal)
71 ?~ prep ~[['BAD prepared prelude' |]]
71 ?~ prep ~[['BAD prepared prelude' |]]
72 =/ mixed-result=jfile-result:jibb
72 =/ mixed-result=jfile-result:jibb
tests/lib/jibb.hoon+577−565
@@ -1990,466 +1990,474 @@
1990/* tok-553 %txt /tests/golden/types-prelude-succ/tokens/txt
1990/* tok-553 %txt /tests/golden/types-prelude-succ/tokens/txt
1991/* tre-553 %txt /tests/golden/types-prelude-succ/tree/txt
1991/* tre-553 %txt /tests/golden/types-prelude-succ/tree/txt
1992/* typ-553 %txt /tests/golden/types-prelude-succ/types/txt
1992/* typ-553 %txt /tests/golden/types-prelude-succ/types/txt
1993−/* src-554 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
1993+/* src-554 %jibb /tests/golden/types-prelude-text/source/jibb
1994−/* tok-554 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
1994+/* tok-554 %txt /tests/golden/types-prelude-text/tokens/txt
1995−/* tre-554 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
1995+/* tre-554 %txt /tests/golden/types-prelude-text/tree/txt
1996−/* typ-554 %txt /tests/golden/types-prelude-unit-helpers/types/txt
1996+/* typ-554 %txt /tests/golden/types-prelude-text/types/txt
1997−/* src-555 %jibb /tests/golden/types-prelude-zing/source/jibb
1997+/* src-555 %jibb /tests/golden/types-prelude-ui/source/jibb
1998−/* tok-555 %txt /tests/golden/types-prelude-zing/tokens/txt
1998+/* tok-555 %txt /tests/golden/types-prelude-ui/tokens/txt
1999−/* tre-555 %txt /tests/golden/types-prelude-zing/tree/txt
1999+/* tre-555 %txt /tests/golden/types-prelude-ui/tree/txt
2000−/* typ-555 %txt /tests/golden/types-prelude-zing/types/txt
2000+/* typ-555 %txt /tests/golden/types-prelude-ui/types/txt
2001−/* src-556 %jibb /tests/golden/types-proj-explicit-context/source/jibb
2001+/* src-556 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
2002−/* tok-556 %txt /tests/golden/types-proj-explicit-context/tokens/txt
2002+/* tok-556 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
2003−/* tre-556 %txt /tests/golden/types-proj-explicit-context/tree/txt
2003+/* tre-556 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
2004−/* typ-556 %txt /tests/golden/types-proj-explicit-context/types/txt
2004+/* typ-556 %txt /tests/golden/types-prelude-unit-helpers/types/txt
2005−/* src-557 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
2005+/* src-557 %jibb /tests/golden/types-prelude-zing/source/jibb
2006−/* tok-557 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
2006+/* tok-557 %txt /tests/golden/types-prelude-zing/tokens/txt
2007−/* tre-557 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
2007+/* tre-557 %txt /tests/golden/types-prelude-zing/tree/txt
2008−/* typ-557 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
2008+/* typ-557 %txt /tests/golden/types-prelude-zing/types/txt
2009−/* src-558 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
2009+/* src-558 %jibb /tests/golden/types-proj-explicit-context/source/jibb
2010−/* tok-558 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
2010+/* tok-558 %txt /tests/golden/types-proj-explicit-context/tokens/txt
2011−/* tre-558 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2011+/* tre-558 %txt /tests/golden/types-proj-explicit-context/tree/txt
2012−/* mod-558-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2012+/* typ-558 %txt /tests/golden/types-proj-explicit-context/types/txt
2013−/* typ-558 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2013+/* src-559 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
2014−/* mtre-558 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2014+/* tok-559 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
2015−/* src-559 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2015+/* tre-559 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
2016−/* tok-559 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2016+/* typ-559 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
2017−/* tre-559 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2017+/* src-560 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
2018−/* mod-559-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2018+/* tok-560 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
2019−/* typ-559 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2019+/* tre-560 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2020−/* mtre-559 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2020+/* mod-560-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2021−/* src-560 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2021+/* typ-560 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2022−/* tok-560 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2022+/* mtre-560 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2023−/* tre-560 %txt /tests/golden/types-proj-reserved-local/tree/txt
2023+/* src-561 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2024−/* typ-560 %txt /tests/golden/types-proj-reserved-local/types/txt
2024+/* tok-561 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2025−/* src-561 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2025+/* tre-561 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2026−/* tok-561 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2026+/* mod-561-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2027−/* tre-561 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2027+/* typ-561 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2028−/* typ-561 %txt /tests/golden/types-proj-reserved-local-mold/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-mark-import/source/jibb
2029+/* src-562 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2030−/* tok-562 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2030+/* tok-562 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2031−/* tre-562 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2031+/* tre-562 %txt /tests/golden/types-proj-reserved-local/tree/txt
2032−/* typ-562 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2032+/* typ-562 %txt /tests/golden/types-proj-reserved-local/types/txt
2033−/* src-563 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2033+/* src-563 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2034−/* tok-563 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2034+/* tok-563 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2035−/* tre-563 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2035+/* tre-563 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2036−/* typ-563 %txt /tests/golden/types-proj-reserved-mold/types/txt
2036+/* typ-563 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2037−/* src-564 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2037+/* src-564 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2038−/* tok-564 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2038+/* tok-564 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2039−/* tre-564 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2039+/* tre-564 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2040−/* typ-564 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2040+/* typ-564 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2041−/* src-565 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2041+/* src-565 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2042−/* tok-565 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2042+/* tok-565 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2043−/* tre-565 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2043+/* tre-565 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2044−/* typ-565 %txt /tests/golden/types-proj-reserved-positive/types/txt
2044+/* typ-565 %txt /tests/golden/types-proj-reserved-mold/types/txt
2045−/* src-566 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2045+/* src-566 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2046−/* tok-566 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2046+/* tok-566 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2047−/* tre-566 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2047+/* tre-566 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2048−/* typ-566 %txt /tests/golden/types-proj-reserved-sample/types/txt
2048+/* typ-566 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2049−/* src-567 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2049+/* src-567 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2050−/* tok-567 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2050+/* tok-567 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2051−/* tre-567 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2051+/* tre-567 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2052−/* typ-567 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2052+/* typ-567 %txt /tests/golden/types-proj-reserved-positive/types/txt
2053−/* src-568 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2053+/* src-568 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2054−/* tok-568 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2054+/* tok-568 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2055−/* tre-568 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2055+/* tre-568 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2056−/* typ-568 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2056+/* typ-568 %txt /tests/golden/types-proj-reserved-sample/types/txt
2057−/* src-569 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2057+/* src-569 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2058−/* tok-569 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2058+/* tok-569 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2059−/* tre-569 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2059+/* tre-569 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2060−/* typ-569 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2060+/* typ-569 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2061−/* src-570 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2061+/* src-570 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2062−/* tok-570 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2062+/* tok-570 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2063−/* tre-570 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2063+/* tre-570 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2064−/* typ-570 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2064+/* typ-570 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2065−/* src-571 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2065+/* src-571 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2066−/* tok-571 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2066+/* tok-571 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2067−/* tre-571 %txt /tests/golden/types-proj-reserved-value/tree/txt
2067+/* tre-571 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2068−/* typ-571 %txt /tests/golden/types-proj-reserved-value/types/txt
2068+/* typ-571 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2069−/* src-572 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2069+/* src-572 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2070−/* tok-572 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2070+/* tok-572 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2071−/* tre-572 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2071+/* tre-572 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2072−/* typ-572 %txt /tests/golden/types-proj-single-duplicate/types/txt
2072+/* typ-572 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2073−/* src-573 %jibb /tests/golden/types-proj-single-field/source/jibb
2073+/* src-573 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2074−/* tok-573 %txt /tests/golden/types-proj-single-field/tokens/txt
2074+/* tok-573 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2075−/* tre-573 %txt /tests/golden/types-proj-single-field/tree/txt
2075+/* tre-573 %txt /tests/golden/types-proj-reserved-value/tree/txt
2076−/* typ-573 %txt /tests/golden/types-proj-single-field/types/txt
2076+/* typ-573 %txt /tests/golden/types-proj-reserved-value/types/txt
2077−/* src-574 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2077+/* src-574 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2078−/* tok-574 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2078+/* tok-574 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2079−/* tre-574 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2079+/* tre-574 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2080−/* typ-574 %txt /tests/golden/types-proj-single-sample-face/types/txt
2080+/* typ-574 %txt /tests/golden/types-proj-single-duplicate/types/txt
2081−/* src-575 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2081+/* src-575 %jibb /tests/golden/types-proj-single-field/source/jibb
2082−/* tok-575 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2082+/* tok-575 %txt /tests/golden/types-proj-single-field/tokens/txt
2083−/* tre-575 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2083+/* tre-575 %txt /tests/golden/types-proj-single-field/tree/txt
2084−/* typ-575 %txt /tests/golden/types-proj-single-wrapped/types/txt
2084+/* typ-575 %txt /tests/golden/types-proj-single-field/types/txt
2085−/* src-576 %jibb /tests/golden/types-qath-faces/source/jibb
2085+/* src-576 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2086−/* tok-576 %txt /tests/golden/types-qath-faces/tokens/txt
2086+/* tok-576 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2087−/* tre-576 %txt /tests/golden/types-qath-faces/tree/txt
2087+/* tre-576 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2088−/* typ-576 %txt /tests/golden/types-qath-faces/types/txt
2088+/* typ-576 %txt /tests/golden/types-proj-single-sample-face/types/txt
2089−/* src-577 %jibb /tests/golden/types-qath-holes/source/jibb
2089+/* src-577 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2090−/* tok-577 %txt /tests/golden/types-qath-holes/tokens/txt
2090+/* tok-577 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2091−/* tre-577 %txt /tests/golden/types-qath-holes/tree/txt
2091+/* tre-577 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2092−/* typ-577 %txt /tests/golden/types-qath-holes/types/txt
2092+/* typ-577 %txt /tests/golden/types-proj-single-wrapped/types/txt
2093−/* src-578 %jibb /tests/golden/types-qath-module-identity/source/jibb
2093+/* src-578 %jibb /tests/golden/types-qath-faces/source/jibb
2094−/* tok-578 %txt /tests/golden/types-qath-module-identity/tokens/txt
2094+/* tok-578 %txt /tests/golden/types-qath-faces/tokens/txt
2095−/* tre-578 %txt /tests/golden/types-qath-module-identity/tree/txt
2095+/* tre-578 %txt /tests/golden/types-qath-faces/tree/txt
2096−/* mod-578-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2096+/* typ-578 %txt /tests/golden/types-qath-faces/types/txt
2097−/* mod-578-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2097+/* src-579 %jibb /tests/golden/types-qath-holes/source/jibb
2098−/* mod-578-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2098+/* tok-579 %txt /tests/golden/types-qath-holes/tokens/txt
2099−/* typ-578 %txt /tests/golden/types-qath-module-identity/types/txt
2099+/* tre-579 %txt /tests/golden/types-qath-holes/tree/txt
2100−/* mtre-578 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2100+/* typ-579 %txt /tests/golden/types-qath-holes/types/txt
2101−/* src-579 %jibb /tests/golden/types-qath-recursive/source/jibb
2101+/* src-580 %jibb /tests/golden/types-qath-module-identity/source/jibb
2102−/* tok-579 %txt /tests/golden/types-qath-recursive/tokens/txt
2102+/* tok-580 %txt /tests/golden/types-qath-module-identity/tokens/txt
2103−/* tre-579 %txt /tests/golden/types-qath-recursive/tree/txt
2103+/* tre-580 %txt /tests/golden/types-qath-module-identity/tree/txt
2104−/* typ-579 %txt /tests/golden/types-qath-recursive/types/txt
2104+/* mod-580-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2105−/* src-580 %jibb /tests/golden/types-record-bound-variable/source/jibb
2105+/* mod-580-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2106−/* tok-580 %txt /tests/golden/types-record-bound-variable/tokens/txt
2106+/* mod-580-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2107−/* tre-580 %txt /tests/golden/types-record-bound-variable/tree/txt
2107+/* typ-580 %txt /tests/golden/types-qath-module-identity/types/txt
2108−/* typ-580 %txt /tests/golden/types-record-bound-variable/types/txt
2108+/* mtre-580 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2109−/* src-581 %jibb /tests/golden/types-record-cast-context/source/jibb
2109+/* src-581 %jibb /tests/golden/types-qath-recursive/source/jibb
2110−/* tok-581 %txt /tests/golden/types-record-cast-context/tokens/txt
2110+/* tok-581 %txt /tests/golden/types-qath-recursive/tokens/txt
2111−/* tre-581 %txt /tests/golden/types-record-cast-context/tree/txt
2111+/* tre-581 %txt /tests/golden/types-qath-recursive/tree/txt
2112−/* typ-581 %txt /tests/golden/types-record-cast-context/types/txt
2112+/* typ-581 %txt /tests/golden/types-qath-recursive/types/txt
2113−/* src-582 %jibb /tests/golden/types-record-change/source/jibb
2113+/* src-582 %jibb /tests/golden/types-record-bound-variable/source/jibb
2114−/* tok-582 %txt /tests/golden/types-record-change/tokens/txt
2114+/* tok-582 %txt /tests/golden/types-record-bound-variable/tokens/txt
2115−/* tre-582 %txt /tests/golden/types-record-change/tree/txt
2115+/* tre-582 %txt /tests/golden/types-record-bound-variable/tree/txt
2116−/* typ-582 %txt /tests/golden/types-record-change/types/txt
2116+/* typ-582 %txt /tests/golden/types-record-bound-variable/types/txt
2117−/* src-583 %jibb /tests/golden/types-record-change-generic/source/jibb
2117+/* src-583 %jibb /tests/golden/types-record-cast-context/source/jibb
2118−/* tok-583 %txt /tests/golden/types-record-change-generic/tokens/txt
2118+/* tok-583 %txt /tests/golden/types-record-cast-context/tokens/txt
2119−/* tre-583 %txt /tests/golden/types-record-change-generic/tree/txt
2119+/* tre-583 %txt /tests/golden/types-record-cast-context/tree/txt
2120−/* typ-583 %txt /tests/golden/types-record-change-generic/types/txt
2120+/* typ-583 %txt /tests/golden/types-record-cast-context/types/txt
2121−/* src-584 %jibb /tests/golden/types-record-faces/source/jibb
2121+/* src-584 %jibb /tests/golden/types-record-change/source/jibb
2122−/* tok-584 %txt /tests/golden/types-record-faces/tokens/txt
2122+/* tok-584 %txt /tests/golden/types-record-change/tokens/txt
2123−/* tre-584 %txt /tests/golden/types-record-faces/tree/txt
2123+/* tre-584 %txt /tests/golden/types-record-change/tree/txt
2124−/* typ-584 %txt /tests/golden/types-record-faces/types/txt
2124+/* typ-584 %txt /tests/golden/types-record-change/types/txt
2125−/* src-585 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2125+/* src-585 %jibb /tests/golden/types-record-change-generic/source/jibb
2126−/* tok-585 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2126+/* tok-585 %txt /tests/golden/types-record-change-generic/tokens/txt
2127−/* tre-585 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2127+/* tre-585 %txt /tests/golden/types-record-change-generic/tree/txt
2128−/* typ-585 %txt /tests/golden/types-record-field-edit-separate/types/txt
2128+/* typ-585 %txt /tests/golden/types-record-change-generic/types/txt
2129−/* src-586 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2129+/* src-586 %jibb /tests/golden/types-record-faces/source/jibb
2130−/* tok-586 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2130+/* tok-586 %txt /tests/golden/types-record-faces/tokens/txt
2131−/* tre-586 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2131+/* tre-586 %txt /tests/golden/types-record-faces/tree/txt
2132−/* typ-586 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2132+/* typ-586 %txt /tests/golden/types-record-faces/types/txt
2133−/* src-587 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2133+/* src-587 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2134−/* tok-587 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2134+/* tok-587 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2135−/* tre-587 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2135+/* tre-587 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2136−/* typ-587 %txt /tests/golden/types-record-field-expr-separate/types/txt
2136+/* typ-587 %txt /tests/golden/types-record-field-edit-separate/types/txt
2137−/* src-588 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2137+/* src-588 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2138−/* tok-588 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2138+/* tok-588 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2139−/* tre-588 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2139+/* tre-588 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2140−/* mod-588-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2140+/* typ-588 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2141−/* typ-588 %txt /tests/golden/types-record-field-module-reachable/types/txt
2141+/* src-589 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2142−/* mtre-588 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2142+/* tok-589 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2143−/* src-589 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2143+/* tre-589 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2144−/* tok-589 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2144+/* typ-589 %txt /tests/golden/types-record-field-expr-separate/types/txt
2145−/* tre-589 %txt /tests/golden/types-record-field-module-unused/tree/txt
2145+/* src-590 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2146−/* mod-589-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2146+/* tok-590 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2147−/* mod-589-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2147+/* tre-590 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2148−/* typ-589 %txt /tests/golden/types-record-field-module-unused/types/txt
2148+/* mod-590-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2149−/* mtre-589 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2149+/* typ-590 %txt /tests/golden/types-record-field-module-reachable/types/txt
2150−/* src-590 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2150+/* mtre-590 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2151−/* tok-590 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2151+/* src-591 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2152−/* tre-590 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2152+/* tok-591 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2153−/* typ-590 %txt /tests/golden/types-record-field-nested-mold/types/txt
2153+/* tre-591 %txt /tests/golden/types-record-field-module-unused/tree/txt
2154−/* src-591 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2154+/* mod-591-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2155−/* tok-591 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2155+/* mod-591-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2156−/* tre-591 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2156+/* typ-591 %txt /tests/golden/types-record-field-module-unused/types/txt
2157−/* typ-591 %txt /tests/golden/types-record-field-outer-inner/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-sample-duplicate/source/jibb
2158+/* src-592 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2159−/* tok-592 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2159+/* tok-592 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2160−/* tre-592 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2160+/* tre-592 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2161−/* typ-592 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2161+/* typ-592 %txt /tests/golden/types-record-field-nested-mold/types/txt
2162−/* src-593 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2162+/* src-593 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2163−/* tok-593 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2163+/* tok-593 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2164−/* tre-593 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2164+/* tre-593 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2165−/* typ-593 %txt /tests/golden/types-record-field-separate-molds/types/txt
2165+/* typ-593 %txt /tests/golden/types-record-field-outer-inner/types/txt
2166−/* src-594 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2166+/* src-594 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2167−/* tok-594 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2167+/* tok-594 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2168−/* tre-594 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2168+/* tre-594 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2169−/* typ-594 %txt /tests/golden/types-record-field-unused-mold/types/txt
2169+/* typ-594 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2170−/* src-595 %jibb /tests/golden/types-record-import/source/jibb
2170+/* src-595 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2171−/* tok-595 %txt /tests/golden/types-record-import/tokens/txt
2171+/* tok-595 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2172−/* tre-595 %txt /tests/golden/types-record-import/tree/txt
2172+/* tre-595 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2173−/* mod-595-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2173+/* typ-595 %txt /tests/golden/types-record-field-separate-molds/types/txt
2174−/* typ-595 %txt /tests/golden/types-record-import/types/txt
2174+/* src-596 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2175−/* mtre-595 %txt /tests/golden/types-record-import/module-trees/txt
2175+/* tok-596 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2176−/* src-596 %jibb /tests/golden/types-record-local-scheme/source/jibb
2176+/* tre-596 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2177−/* tok-596 %txt /tests/golden/types-record-local-scheme/tokens/txt
2177+/* typ-596 %txt /tests/golden/types-record-field-unused-mold/types/txt
2178−/* tre-596 %txt /tests/golden/types-record-local-scheme/tree/txt
2178+/* src-597 %jibb /tests/golden/types-record-import/source/jibb
2179−/* typ-596 %txt /tests/golden/types-record-local-scheme/types/txt
2179+/* tok-597 %txt /tests/golden/types-record-import/tokens/txt
2180−/* src-597 %jibb /tests/golden/types-record-nested/source/jibb
2180+/* tre-597 %txt /tests/golden/types-record-import/tree/txt
2181−/* tok-597 %txt /tests/golden/types-record-nested/tokens/txt
2181+/* mod-597-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2182−/* tre-597 %txt /tests/golden/types-record-nested/tree/txt
2182+/* typ-597 %txt /tests/golden/types-record-import/types/txt
2183−/* typ-597 %txt /tests/golden/types-record-nested/types/txt
2183+/* mtre-597 %txt /tests/golden/types-record-import/module-trees/txt
2184−/* src-598 %jibb /tests/golden/types-record-to-tuple/source/jibb
2184+/* src-598 %jibb /tests/golden/types-record-local-scheme/source/jibb
2185−/* tok-598 %txt /tests/golden/types-record-to-tuple/tokens/txt
2185+/* tok-598 %txt /tests/golden/types-record-local-scheme/tokens/txt
2186−/* tre-598 %txt /tests/golden/types-record-to-tuple/tree/txt
2186+/* tre-598 %txt /tests/golden/types-record-local-scheme/tree/txt
2187−/* typ-598 %txt /tests/golden/types-record-to-tuple/types/txt
2187+/* typ-598 %txt /tests/golden/types-record-local-scheme/types/txt
2188−/* src-599 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2188+/* src-599 %jibb /tests/golden/types-record-nested/source/jibb
2189−/* tok-599 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2189+/* tok-599 %txt /tests/golden/types-record-nested/tokens/txt
2190−/* tre-599 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2190+/* tre-599 %txt /tests/golden/types-record-nested/tree/txt
2191−/* typ-599 %txt /tests/golden/types-recursion-scc-failures/types/txt
2191+/* typ-599 %txt /tests/golden/types-record-nested/types/txt
2192−/* src-600 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2192+/* src-600 %jibb /tests/golden/types-record-to-tuple/source/jibb
2193−/* tok-600 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2193+/* tok-600 %txt /tests/golden/types-record-to-tuple/tokens/txt
2194−/* tre-600 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2194+/* tre-600 %txt /tests/golden/types-record-to-tuple/tree/txt
2195−/* typ-600 %txt /tests/golden/types-recursion-scc-groups/types/txt
2195+/* typ-600 %txt /tests/golden/types-record-to-tuple/types/txt
2196−/* src-601 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2196+/* src-601 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2197−/* tok-601 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2197+/* tok-601 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2198−/* tre-601 %txt /tests/golden/types-recursion-scc-import/tree/txt
2198+/* tre-601 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2199−/* mod-601-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2199+/* typ-601 %txt /tests/golden/types-recursion-scc-failures/types/txt
2200−/* typ-601 %txt /tests/golden/types-recursion-scc-import/types/txt
2200+/* src-602 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2201−/* mtre-601 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2201+/* tok-602 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2202−/* src-602 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2202+/* tre-602 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2203−/* tok-602 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2203+/* typ-602 %txt /tests/golden/types-recursion-scc-groups/types/txt
2204−/* tre-602 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2204+/* src-603 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2205−/* mod-602-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2205+/* tok-603 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2206−/* typ-602 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2206+/* tre-603 %txt /tests/golden/types-recursion-scc-import/tree/txt
2207−/* mtre-602 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2207+/* mod-603-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2208−/* src-603 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2208+/* typ-603 %txt /tests/golden/types-recursion-scc-import/types/txt
2209−/* tok-603 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2209+/* mtre-603 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2210−/* tre-603 %txt /tests/golden/types-recursion-scc-local/tree/txt
2210+/* src-604 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2211−/* typ-603 %txt /tests/golden/types-recursion-scc-local/types/txt
2211+/* tok-604 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2212−/* src-604 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2212+/* tre-604 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2213−/* tok-604 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2213+/* mod-604-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2214−/* tre-604 %txt /tests/golden/types-recursion-scc-order/tree/txt
2214+/* typ-604 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2215−/* typ-604 %txt /tests/golden/types-recursion-scc-order/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-shadow/source/jibb
2216+/* src-605 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2217−/* tok-605 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2217+/* tok-605 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2218−/* tre-605 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2218+/* tre-605 %txt /tests/golden/types-recursion-scc-local/tree/txt
2219−/* typ-605 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2219+/* typ-605 %txt /tests/golden/types-recursion-scc-local/types/txt
2220−/* src-606 %jibb /tests/golden/types-recursive-branch/source/jibb
2220+/* src-606 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2221−/* tok-606 %txt /tests/golden/types-recursive-branch/tokens/txt
2221+/* tok-606 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2222−/* tre-606 %txt /tests/golden/types-recursive-branch/tree/txt
2222+/* tre-606 %txt /tests/golden/types-recursion-scc-order/tree/txt
2223−/* typ-606 %txt /tests/golden/types-recursive-branch/types/txt
2223+/* typ-606 %txt /tests/golden/types-recursion-scc-order/types/txt
2224−/* src-607 %jibb /tests/golden/types-recursive-gate/source/jibb
2224+/* src-607 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2225−/* tok-607 %txt /tests/golden/types-recursive-gate/tokens/txt
2225+/* tok-607 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2226−/* tre-607 %txt /tests/golden/types-recursive-gate/tree/txt
2226+/* tre-607 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2227−/* typ-607 %txt /tests/golden/types-recursive-gate/types/txt
2227+/* typ-607 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2228−/* src-608 %jibb /tests/golden/types-recursive-sample/source/jibb
2228+/* src-608 %jibb /tests/golden/types-recursive-branch/source/jibb
2229−/* tok-608 %txt /tests/golden/types-recursive-sample/tokens/txt
2229+/* tok-608 %txt /tests/golden/types-recursive-branch/tokens/txt
2230−/* tre-608 %txt /tests/golden/types-recursive-sample/tree/txt
2230+/* tre-608 %txt /tests/golden/types-recursive-branch/tree/txt
2231−/* typ-608 %txt /tests/golden/types-recursive-sample/types/txt
2231+/* typ-608 %txt /tests/golden/types-recursive-branch/types/txt
2232−/* src-609 %jibb /tests/golden/types-request-normal/source/jibb
2232+/* src-609 %jibb /tests/golden/types-recursive-gate/source/jibb
2233−/* tok-609 %txt /tests/golden/types-request-normal/tokens/txt
2233+/* tok-609 %txt /tests/golden/types-recursive-gate/tokens/txt
2234−/* tre-609 %txt /tests/golden/types-request-normal/tree/txt
2234+/* tre-609 %txt /tests/golden/types-recursive-gate/tree/txt
2235−/* mod-609-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2235+/* typ-609 %txt /tests/golden/types-recursive-gate/types/txt
2236−/* typ-609 %txt /tests/golden/types-request-normal/types/txt
2236+/* src-610 %jibb /tests/golden/types-recursive-sample/source/jibb
2237−/* mark-609-1 %txt /tests/golden/types-request-normal/mar/full/txt
2237+/* tok-610 %txt /tests/golden/types-recursive-sample/tokens/txt
2238−/* mtre-609 %txt /tests/golden/types-request-normal/module-trees/txt
2238+/* tre-610 %txt /tests/golden/types-recursive-sample/tree/txt
2239−/* src-610 %jibb /tests/golden/types-scope-library-poke/source/jibb
2239+/* typ-610 %txt /tests/golden/types-recursive-sample/types/txt
2240−/* tok-610 %txt /tests/golden/types-scope-library-poke/tokens/txt
2240+/* src-611 %jibb /tests/golden/types-request-normal/source/jibb
2241−/* tre-610 %txt /tests/golden/types-scope-library-poke/tree/txt
2241+/* tok-611 %txt /tests/golden/types-request-normal/tokens/txt
2242−/* typ-610 %txt /tests/golden/types-scope-library-poke/types/txt
2242+/* tre-611 %txt /tests/golden/types-request-normal/tree/txt
2243−/* src-611 %jibb /tests/golden/types-scope-root-api/source/jibb
2243+/* mod-611-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2244−/* tok-611 %txt /tests/golden/types-scope-root-api/tokens/txt
2244+/* typ-611 %txt /tests/golden/types-request-normal/types/txt
2245−/* tre-611 %txt /tests/golden/types-scope-root-api/tree/txt
2245+/* mark-611-1 %txt /tests/golden/types-request-normal/mar/full/txt
2246−/* typ-611 %txt /tests/golden/types-scope-root-api/types/txt
2246+/* mtre-611 %txt /tests/golden/types-request-normal/module-trees/txt
2247−/* src-612 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2247+/* src-612 %jibb /tests/golden/types-scope-library-poke/source/jibb
2248−/* tok-612 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2248+/* tok-612 %txt /tests/golden/types-scope-library-poke/tokens/txt
2249−/* tre-612 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2249+/* tre-612 %txt /tests/golden/types-scope-library-poke/tree/txt
2250−/* typ-612 %txt /tests/golden/types-scope-store-duplicate/types/txt
2250+/* typ-612 %txt /tests/golden/types-scope-library-poke/types/txt
2251−/* src-613 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2251+/* src-613 %jibb /tests/golden/types-scope-root-api/source/jibb
2252−/* tok-613 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2252+/* tok-613 %txt /tests/golden/types-scope-root-api/tokens/txt
2253−/* tre-613 %txt /tests/golden/types-scope-store-shadow/tree/txt
2253+/* tre-613 %txt /tests/golden/types-scope-root-api/tree/txt
2254−/* typ-613 %txt /tests/golden/types-scope-store-shadow/types/txt
2254+/* typ-613 %txt /tests/golden/types-scope-root-api/types/txt
2255−/* src-614 %jibb /tests/golden/types-single-case-pattern/source/jibb
2255+/* src-614 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2256−/* tok-614 %txt /tests/golden/types-single-case-pattern/tokens/txt
2256+/* tok-614 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2257−/* tre-614 %txt /tests/golden/types-single-case-pattern/tree/txt
2257+/* tre-614 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2258−/* typ-614 %txt /tests/golden/types-single-case-pattern/types/txt
2258+/* typ-614 %txt /tests/golden/types-scope-store-duplicate/types/txt
2259−/* src-615 %jibb /tests/golden/types-string-interpolation/source/jibb
2259+/* src-615 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2260−/* tok-615 %txt /tests/golden/types-string-interpolation/tokens/txt
2260+/* tok-615 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2261−/* tre-615 %txt /tests/golden/types-string-interpolation/tree/txt
2261+/* tre-615 %txt /tests/golden/types-scope-store-shadow/tree/txt
2262−/* typ-615 %txt /tests/golden/types-string-interpolation/types/txt
2262+/* typ-615 %txt /tests/golden/types-scope-store-shadow/types/txt
2263−/* src-616 %jibb /tests/golden/types-tuple-context/source/jibb
2263+/* src-616 %jibb /tests/golden/types-single-case-pattern/source/jibb
2264−/* tok-616 %txt /tests/golden/types-tuple-context/tokens/txt
2264+/* tok-616 %txt /tests/golden/types-single-case-pattern/tokens/txt
2265−/* tre-616 %txt /tests/golden/types-tuple-context/tree/txt
2265+/* tre-616 %txt /tests/golden/types-single-case-pattern/tree/txt
2266−/* typ-616 %txt /tests/golden/types-tuple-context/types/txt
2266+/* typ-616 %txt /tests/golden/types-single-case-pattern/types/txt
2267−/* src-617 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2267+/* src-617 %jibb /tests/golden/types-string-interpolation/source/jibb
2268−/* tok-617 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2268+/* tok-617 %txt /tests/golden/types-string-interpolation/tokens/txt
2269−/* tre-617 %txt /tests/golden/types-tuple-context-nested/tree/txt
2269+/* tre-617 %txt /tests/golden/types-string-interpolation/tree/txt
2270−/* typ-617 %txt /tests/golden/types-tuple-context-nested/types/txt
2270+/* typ-617 %txt /tests/golden/types-string-interpolation/types/txt
2271−/* src-618 %jibb /tests/golden/types-union-alias/source/jibb
2271+/* src-618 %jibb /tests/golden/types-tuple-context/source/jibb
2272−/* tok-618 %txt /tests/golden/types-union-alias/tokens/txt
2272+/* tok-618 %txt /tests/golden/types-tuple-context/tokens/txt
2273−/* tre-618 %txt /tests/golden/types-union-alias/tree/txt
2273+/* tre-618 %txt /tests/golden/types-tuple-context/tree/txt
2274−/* typ-618 %txt /tests/golden/types-union-alias/types/txt
2274+/* typ-618 %txt /tests/golden/types-tuple-context/types/txt
2275−/* src-619 %jibb /tests/golden/types-union-branch-context/source/jibb
2275+/* src-619 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2276−/* tok-619 %txt /tests/golden/types-union-branch-context/tokens/txt
2276+/* tok-619 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2277−/* tre-619 %txt /tests/golden/types-union-branch-context/tree/txt
2277+/* tre-619 %txt /tests/golden/types-tuple-context-nested/tree/txt
2278−/* typ-619 %txt /tests/golden/types-union-branch-context/types/txt
2278+/* typ-619 %txt /tests/golden/types-tuple-context-nested/types/txt
2279−/* src-620 %jibb /tests/golden/types-union-branch-pending/source/jibb
2279+/* src-620 %jibb /tests/golden/types-union-alias/source/jibb
2280−/* tok-620 %txt /tests/golden/types-union-branch-pending/tokens/txt
2280+/* tok-620 %txt /tests/golden/types-union-alias/tokens/txt
2281−/* tre-620 %txt /tests/golden/types-union-branch-pending/tree/txt
2281+/* tre-620 %txt /tests/golden/types-union-alias/tree/txt
2282−/* typ-620 %txt /tests/golden/types-union-branch-pending/types/txt
2282+/* typ-620 %txt /tests/golden/types-union-alias/types/txt
2283−/* src-621 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2283+/* src-621 %jibb /tests/golden/types-union-branch-context/source/jibb
2284−/* tok-621 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2284+/* tok-621 %txt /tests/golden/types-union-branch-context/tokens/txt
2285−/* tre-621 %txt /tests/golden/types-union-constructor-shape/tree/txt
2285+/* tre-621 %txt /tests/golden/types-union-branch-context/tree/txt
2286−/* typ-621 %txt /tests/golden/types-union-constructor-shape/types/txt
2286+/* typ-621 %txt /tests/golden/types-union-branch-context/types/txt
2287−/* src-622 %jibb /tests/golden/types-union-context-flow/source/jibb
2287+/* src-622 %jibb /tests/golden/types-union-branch-pending/source/jibb
2288−/* tok-622 %txt /tests/golden/types-union-context-flow/tokens/txt
2288+/* tok-622 %txt /tests/golden/types-union-branch-pending/tokens/txt
2289−/* tre-622 %txt /tests/golden/types-union-context-flow/tree/txt
2289+/* tre-622 %txt /tests/golden/types-union-branch-pending/tree/txt
2290−/* typ-622 %txt /tests/golden/types-union-context-flow/types/txt
2290+/* typ-622 %txt /tests/golden/types-union-branch-pending/types/txt
2291−/* src-623 %jibb /tests/golden/types-union-finite/source/jibb
2291+/* src-623 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2292−/* tok-623 %txt /tests/golden/types-union-finite/tokens/txt
2292+/* tok-623 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2293−/* tre-623 %txt /tests/golden/types-union-finite/tree/txt
2293+/* tre-623 %txt /tests/golden/types-union-constructor-shape/tree/txt
2294−/* typ-623 %txt /tests/golden/types-union-finite/types/txt
2294+/* typ-623 %txt /tests/golden/types-union-constructor-shape/types/txt
2295−/* src-624 %jibb /tests/golden/types-union-finite-context/source/jibb
2295+/* src-624 %jibb /tests/golden/types-union-context-flow/source/jibb
2296−/* tok-624 %txt /tests/golden/types-union-finite-context/tokens/txt
2296+/* tok-624 %txt /tests/golden/types-union-context-flow/tokens/txt
2297−/* tre-624 %txt /tests/golden/types-union-finite-context/tree/txt
2297+/* tre-624 %txt /tests/golden/types-union-context-flow/tree/txt
2298−/* typ-624 %txt /tests/golden/types-union-finite-context/types/txt
2298+/* typ-624 %txt /tests/golden/types-union-context-flow/types/txt
2299−/* src-625 %jibb /tests/golden/types-union-finite-generic/source/jibb
2299+/* src-625 %jibb /tests/golden/types-union-finite/source/jibb
2300−/* tok-625 %txt /tests/golden/types-union-finite-generic/tokens/txt
2300+/* tok-625 %txt /tests/golden/types-union-finite/tokens/txt
2301−/* tre-625 %txt /tests/golden/types-union-finite-generic/tree/txt
2301+/* tre-625 %txt /tests/golden/types-union-finite/tree/txt
2302−/* typ-625 %txt /tests/golden/types-union-finite-generic/types/txt
2302+/* typ-625 %txt /tests/golden/types-union-finite/types/txt
2303−/* src-626 %jibb /tests/golden/types-union-finite-limit/source/jibb
2303+/* src-626 %jibb /tests/golden/types-union-finite-context/source/jibb
2304−/* tok-626 %txt /tests/golden/types-union-finite-limit/tokens/txt
2304+/* tok-626 %txt /tests/golden/types-union-finite-context/tokens/txt
2305−/* tre-626 %txt /tests/golden/types-union-finite-limit/tree/txt
2305+/* tre-626 %txt /tests/golden/types-union-finite-context/tree/txt
2306−/* typ-626 %txt /tests/golden/types-union-finite-limit/types/txt
2306+/* typ-626 %txt /tests/golden/types-union-finite-context/types/txt
2307−/* src-627 %jibb /tests/golden/types-union-import/source/jibb
2307+/* src-627 %jibb /tests/golden/types-union-finite-generic/source/jibb
2308−/* tok-627 %txt /tests/golden/types-union-import/tokens/txt
2308+/* tok-627 %txt /tests/golden/types-union-finite-generic/tokens/txt
2309−/* tre-627 %txt /tests/golden/types-union-import/tree/txt
2309+/* tre-627 %txt /tests/golden/types-union-finite-generic/tree/txt
2310−/* mod-627-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2310+/* typ-627 %txt /tests/golden/types-union-finite-generic/types/txt
2311−/* typ-627 %txt /tests/golden/types-union-import/types/txt
2311+/* src-628 %jibb /tests/golden/types-union-finite-limit/source/jibb
2312−/* mtre-627 %txt /tests/golden/types-union-import/module-trees/txt
2312+/* tok-628 %txt /tests/golden/types-union-finite-limit/tokens/txt
2313−/* src-628 %jibb /tests/golden/types-union-local-pending/source/jibb
2313+/* tre-628 %txt /tests/golden/types-union-finite-limit/tree/txt
2314−/* tok-628 %txt /tests/golden/types-union-local-pending/tokens/txt
2314+/* typ-628 %txt /tests/golden/types-union-finite-limit/types/txt
2315−/* tre-628 %txt /tests/golden/types-union-local-pending/tree/txt
2315+/* src-629 %jibb /tests/golden/types-union-import/source/jibb
2316−/* typ-628 %txt /tests/golden/types-union-local-pending/types/txt
2316+/* tok-629 %txt /tests/golden/types-union-import/tokens/txt
2317−/* src-629 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2317+/* tre-629 %txt /tests/golden/types-union-import/tree/txt
2318−/* tok-629 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2318+/* mod-629-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2319−/* tre-629 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2319+/* typ-629 %txt /tests/golden/types-union-import/types/txt
2320−/* typ-629 %txt /tests/golden/types-union-nonwing-subject/types/txt
2320+/* mtre-629 %txt /tests/golden/types-union-import/module-trees/txt
2321−/* src-630 %jibb /tests/golden/types-union-overlap/source/jibb
2321+/* src-630 %jibb /tests/golden/types-union-local-pending/source/jibb
2322−/* tok-630 %txt /tests/golden/types-union-overlap/tokens/txt
2322+/* tok-630 %txt /tests/golden/types-union-local-pending/tokens/txt
2323−/* tre-630 %txt /tests/golden/types-union-overlap/tree/txt
2323+/* tre-630 %txt /tests/golden/types-union-local-pending/tree/txt
2324−/* typ-630 %txt /tests/golden/types-union-overlap/types/txt
2324+/* typ-630 %txt /tests/golden/types-union-local-pending/types/txt
2325−/* src-631 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2325+/* src-631 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2326−/* tok-631 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2326+/* tok-631 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2327−/* tre-631 %txt /tests/golden/types-union-overlap-nested/tree/txt
2327+/* tre-631 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2328−/* typ-631 %txt /tests/golden/types-union-overlap-nested/types/txt
2328+/* typ-631 %txt /tests/golden/types-union-nonwing-subject/types/txt
2329−/* src-632 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2329+/* src-632 %jibb /tests/golden/types-union-overlap/source/jibb
2330−/* tok-632 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2330+/* tok-632 %txt /tests/golden/types-union-overlap/tokens/txt
2331−/* tre-632 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2331+/* tre-632 %txt /tests/golden/types-union-overlap/tree/txt
2332−/* typ-632 %txt /tests/golden/types-union-pattern-result-context/types/txt
2332+/* typ-632 %txt /tests/golden/types-union-overlap/types/txt
2333−/* src-633 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2333+/* src-633 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2334−/* tok-633 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2334+/* tok-633 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2335−/* tre-633 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2335+/* tre-633 %txt /tests/golden/types-union-overlap-nested/tree/txt
2336−/* typ-633 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2336+/* typ-633 %txt /tests/golden/types-union-overlap-nested/types/txt
2337−/* src-634 %jibb /tests/golden/types-union-patterns/source/jibb
2337+/* src-634 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2338−/* tok-634 %txt /tests/golden/types-union-patterns/tokens/txt
2338+/* tok-634 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2339−/* tre-634 %txt /tests/golden/types-union-patterns/tree/txt
2339+/* tre-634 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2340−/* typ-634 %txt /tests/golden/types-union-patterns/types/txt
2340+/* typ-634 %txt /tests/golden/types-union-pattern-result-context/types/txt
2341−/* src-635 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2341+/* src-635 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2342−/* tok-635 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2342+/* tok-635 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2343−/* tre-635 %txt /tests/golden/types-union-patterns-generic/tree/txt
2343+/* tre-635 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2344−/* typ-635 %txt /tests/golden/types-union-patterns-generic/types/txt
2344+/* typ-635 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2345−/* src-636 %jibb /tests/golden/types-union-patterns-import/source/jibb
2345+/* src-636 %jibb /tests/golden/types-union-patterns/source/jibb
2346−/* tok-636 %txt /tests/golden/types-union-patterns-import/tokens/txt
2346+/* tok-636 %txt /tests/golden/types-union-patterns/tokens/txt
2347−/* tre-636 %txt /tests/golden/types-union-patterns-import/tree/txt
2347+/* tre-636 %txt /tests/golden/types-union-patterns/tree/txt
2348−/* mod-636-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2348+/* typ-636 %txt /tests/golden/types-union-patterns/types/txt
2349−/* typ-636 %txt /tests/golden/types-union-patterns-import/types/txt
2349+/* src-637 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2350−/* mtre-636 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2350+/* tok-637 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2351−/* src-637 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2351+/* tre-637 %txt /tests/golden/types-union-patterns-generic/tree/txt
2352−/* tok-637 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2352+/* typ-637 %txt /tests/golden/types-union-patterns-generic/types/txt
2353−/* tre-637 %txt /tests/golden/types-union-phantom-generic/tree/txt
2353+/* src-638 %jibb /tests/golden/types-union-patterns-import/source/jibb
2354−/* typ-637 %txt /tests/golden/types-union-phantom-generic/types/txt
2354+/* tok-638 %txt /tests/golden/types-union-patterns-import/tokens/txt
2355−/* src-638 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2355+/* tre-638 %txt /tests/golden/types-union-patterns-import/tree/txt
2356−/* tok-638 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2356+/* mod-638-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2357−/* tre-638 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2357+/* typ-638 %txt /tests/golden/types-union-patterns-import/types/txt
2358−/* mod-638-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2358+/* mtre-638 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2359−/* mod-638-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2359+/* src-639 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2360−/* typ-638 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2360+/* tok-639 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2361−/* mtre-638 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2361+/* tre-639 %txt /tests/golden/types-union-phantom-generic/tree/txt
2362−/* src-639 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2362+/* typ-639 %txt /tests/golden/types-union-phantom-generic/types/txt
2363−/* tok-639 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2363+/* src-640 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2364−/* tre-639 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2364+/* tok-640 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2365−/* mod-639-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2365+/* tre-640 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2366−/* typ-639 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2366+/* mod-640-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2367−/* mtre-639 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2367+/* mod-640-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2368−/* src-640 %jibb /tests/golden/types-union-print-distinct/source/jibb
2368+/* typ-640 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2369−/* tok-640 %txt /tests/golden/types-union-print-distinct/tokens/txt
2369+/* mtre-640 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2370−/* tre-640 %txt /tests/golden/types-union-print-distinct/tree/txt
2370+/* src-641 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2371−/* mod-640-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2371+/* tok-641 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2372−/* mod-640-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2372+/* tre-641 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2373−/* mod-640-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2373+/* mod-641-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2374−/* typ-640 %txt /tests/golden/types-union-print-distinct/types/txt
2374+/* typ-641 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2375−/* mtre-640 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2375+/* mtre-641 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2376−/* src-641 %jibb /tests/golden/types-union-print-escape/source/jibb
2376+/* src-642 %jibb /tests/golden/types-union-print-distinct/source/jibb
2377−/* tok-641 %txt /tests/golden/types-union-print-escape/tokens/txt
2377+/* tok-642 %txt /tests/golden/types-union-print-distinct/tokens/txt
2378−/* tre-641 %txt /tests/golden/types-union-print-escape/tree/txt
2378+/* tre-642 %txt /tests/golden/types-union-print-distinct/tree/txt
2379−/* typ-641 %txt /tests/golden/types-union-print-escape/types/txt
2379+/* mod-642-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2380−/* src-642 %jibb /tests/golden/types-union-print-local/source/jibb
2380+/* mod-642-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2381−/* tok-642 %txt /tests/golden/types-union-print-local/tokens/txt
2381+/* mod-642-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2382−/* tre-642 %txt /tests/golden/types-union-print-local/tree/txt
2382+/* typ-642 %txt /tests/golden/types-union-print-distinct/types/txt
2383−/* typ-642 %txt /tests/golden/types-union-print-local/types/txt
2383+/* mtre-642 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2384−/* src-643 %jibb /tests/golden/types-union-print-nested/source/jibb
2384+/* src-643 %jibb /tests/golden/types-union-print-escape/source/jibb
2385−/* tok-643 %txt /tests/golden/types-union-print-nested/tokens/txt
2385+/* tok-643 %txt /tests/golden/types-union-print-escape/tokens/txt
2386−/* tre-643 %txt /tests/golden/types-union-print-nested/tree/txt
2386+/* tre-643 %txt /tests/golden/types-union-print-escape/tree/txt
2387−/* typ-643 %txt /tests/golden/types-union-print-nested/types/txt
2387+/* typ-643 %txt /tests/golden/types-union-print-escape/types/txt
2388−/* src-644 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2388+/* src-644 %jibb /tests/golden/types-union-print-local/source/jibb
2389−/* tok-644 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2389+/* tok-644 %txt /tests/golden/types-union-print-local/tokens/txt
2390−/* tre-644 %txt /tests/golden/types-union-print-same-origin/tree/txt
2390+/* tre-644 %txt /tests/golden/types-union-print-local/tree/txt
2391−/* mod-644-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2391+/* typ-644 %txt /tests/golden/types-union-print-local/types/txt
2392−/* typ-644 %txt /tests/golden/types-union-print-same-origin/types/txt
2392+/* src-645 %jibb /tests/golden/types-union-print-nested/source/jibb
2393−/* mtre-644 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2393+/* tok-645 %txt /tests/golden/types-union-print-nested/tokens/txt
2394−/* src-645 %jibb /tests/golden/types-union-print-transitive/source/jibb
2394+/* tre-645 %txt /tests/golden/types-union-print-nested/tree/txt
2395−/* tok-645 %txt /tests/golden/types-union-print-transitive/tokens/txt
2395+/* typ-645 %txt /tests/golden/types-union-print-nested/types/txt
2396−/* tre-645 %txt /tests/golden/types-union-print-transitive/tree/txt
2396+/* src-646 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2397−/* mod-645-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2397+/* tok-646 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2398−/* mod-645-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2398+/* tre-646 %txt /tests/golden/types-union-print-same-origin/tree/txt
2399−/* typ-645 %txt /tests/golden/types-union-print-transitive/types/txt
2399+/* mod-646-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2400−/* mtre-645 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2400+/* typ-646 %txt /tests/golden/types-union-print-same-origin/types/txt
2401−/* src-646 %jibb /tests/golden/types-union-runtime-equality/source/jibb
2401+/* mtre-646 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2402−/* tok-646 %txt /tests/golden/types-union-runtime-equality/tokens/txt
2402+/* src-647 %jibb /tests/golden/types-union-print-transitive/source/jibb
2403−/* tre-646 %txt /tests/golden/types-union-runtime-equality/tree/txt
2403+/* tok-647 %txt /tests/golden/types-union-print-transitive/tokens/txt
2404−/* typ-646 %txt /tests/golden/types-union-runtime-equality/types/txt
2404+/* tre-647 %txt /tests/golden/types-union-print-transitive/tree/txt
2405−/* src-647 %jibb /tests/golden/types-union-singleton/source/jibb
2405+/* mod-647-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2406−/* tok-647 %txt /tests/golden/types-union-singleton/tokens/txt
2406+/* mod-647-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2407−/* tre-647 %txt /tests/golden/types-union-singleton/tree/txt
2407+/* typ-647 %txt /tests/golden/types-union-print-transitive/types/txt
2408−/* typ-647 %txt /tests/golden/types-union-singleton/types/txt
2408+/* mtre-647 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2409−/* src-648 %jibb /tests/golden/types-union-source-alias/source/jibb
2409+/* src-648 %jibb /tests/golden/types-union-runtime-equality/source/jibb
2410−/* tok-648 %txt /tests/golden/types-union-source-alias/tokens/txt
2410+/* tok-648 %txt /tests/golden/types-union-runtime-equality/tokens/txt
2411−/* tre-648 %txt /tests/golden/types-union-source-alias/tree/txt
2411+/* tre-648 %txt /tests/golden/types-union-runtime-equality/tree/txt
2412−/* typ-648 %txt /tests/golden/types-union-source-alias/types/txt
2412+/* typ-648 %txt /tests/golden/types-union-runtime-equality/types/txt
2413−/* src-649 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2413+/* src-649 %jibb /tests/golden/types-union-singleton/source/jibb
2414−/* tok-649 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2414+/* tok-649 %txt /tests/golden/types-union-singleton/tokens/txt
2415−/* tre-649 %txt /tests/golden/types-union-tag-atoms/tree/txt
2415+/* tre-649 %txt /tests/golden/types-union-singleton/tree/txt
2416−/* typ-649 %txt /tests/golden/types-union-tag-atoms/types/txt
2416+/* typ-649 %txt /tests/golden/types-union-singleton/types/txt
2417−/* src-650 %jibb /tests/golden/types-union-tags/source/jibb
2417+/* src-650 %jibb /tests/golden/types-union-source-alias/source/jibb
2418−/* tok-650 %txt /tests/golden/types-union-tags/tokens/txt
2418+/* tok-650 %txt /tests/golden/types-union-source-alias/tokens/txt
2419−/* tre-650 %txt /tests/golden/types-union-tags/tree/txt
2419+/* tre-650 %txt /tests/golden/types-union-source-alias/tree/txt
2420−/* typ-650 %txt /tests/golden/types-union-tags/types/txt
2420+/* typ-650 %txt /tests/golden/types-union-source-alias/types/txt
2421−/* src-651 %jibb /tests/golden/types-union-unresolved/source/jibb
2421+/* src-651 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2422−/* tok-651 %txt /tests/golden/types-union-unresolved/tokens/txt
2422+/* tok-651 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2423−/* tre-651 %txt /tests/golden/types-union-unresolved/tree/txt
2423+/* tre-651 %txt /tests/golden/types-union-tag-atoms/tree/txt
2424−/* typ-651 %txt /tests/golden/types-union-unresolved/types/txt
2424+/* typ-651 %txt /tests/golden/types-union-tag-atoms/types/txt
2425−/* src-652 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2425+/* src-652 %jibb /tests/golden/types-union-tags/source/jibb
2426−/* tok-652 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2426+/* tok-652 %txt /tests/golden/types-union-tags/tokens/txt
2427−/* tre-652 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2427+/* tre-652 %txt /tests/golden/types-union-tags/tree/txt
2428−/* typ-652 %txt /tests/golden/types-union-unresolved-flow/types/txt
2428+/* typ-652 %txt /tests/golden/types-union-tags/types/txt
2429−/* src-653 %jibb /tests/golden/types-unit-construction/source/jibb
2429+/* src-653 %jibb /tests/golden/types-union-unresolved/source/jibb
2430−/* tok-653 %txt /tests/golden/types-unit-construction/tokens/txt
2430+/* tok-653 %txt /tests/golden/types-union-unresolved/tokens/txt
2431−/* tre-653 %txt /tests/golden/types-unit-construction/tree/txt
2431+/* tre-653 %txt /tests/golden/types-union-unresolved/tree/txt
2432−/* typ-653 %txt /tests/golden/types-unit-construction/types/txt
2432+/* typ-653 %txt /tests/golden/types-union-unresolved/types/txt
2433−/* src-654 %jibb /tests/golden/types-unit-context/source/jibb
2433+/* src-654 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2434−/* tok-654 %txt /tests/golden/types-unit-context/tokens/txt
2434+/* tok-654 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2435−/* tre-654 %txt /tests/golden/types-unit-context/tree/txt
2435+/* tre-654 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2436−/* typ-654 %txt /tests/golden/types-unit-context/types/txt
2436+/* typ-654 %txt /tests/golden/types-union-unresolved-flow/types/txt
2437−/* src-655 %jibb /tests/golden/types-unit-patterns/source/jibb
2437+/* src-655 %jibb /tests/golden/types-unit-construction/source/jibb
2438−/* tok-655 %txt /tests/golden/types-unit-patterns/tokens/txt
2438+/* tok-655 %txt /tests/golden/types-unit-construction/tokens/txt
2439−/* tre-655 %txt /tests/golden/types-unit-patterns/tree/txt
2439+/* tre-655 %txt /tests/golden/types-unit-construction/tree/txt
2440−/* typ-655 %txt /tests/golden/types-unit-patterns/types/txt
2440+/* typ-655 %txt /tests/golden/types-unit-construction/types/txt
2441−/* src-656 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2441+/* src-656 %jibb /tests/golden/types-unit-context/source/jibb
2442−/* tok-656 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2442+/* tok-656 %txt /tests/golden/types-unit-context/tokens/txt
2443−/* tre-656 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2443+/* tre-656 %txt /tests/golden/types-unit-context/tree/txt
2444−/* typ-656 %txt /tests/golden/types-value-cycle-shadow/types/txt
2444+/* typ-656 %txt /tests/golden/types-unit-context/types/txt
2445−/* src-657 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2445+/* src-657 %jibb /tests/golden/types-unit-patterns/source/jibb
2446−/* tok-657 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2446+/* tok-657 %txt /tests/golden/types-unit-patterns/tokens/txt
2447−/* tre-657 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2447+/* tre-657 %txt /tests/golden/types-unit-patterns/tree/txt
2448−/* typ-657 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2448+/* typ-657 %txt /tests/golden/types-unit-patterns/types/txt
2449−/* src-658 %jibb /tests/golden/types-value-cycles/source/jibb
2449+/* src-658 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2450−/* tok-658 %txt /tests/golden/types-value-cycles/tokens/txt
2450+/* tok-658 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2451−/* tre-658 %txt /tests/golden/types-value-cycles/tree/txt
2451+/* tre-658 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2452−/* typ-658 %txt /tests/golden/types-value-cycles/types/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
2453=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
2461=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
2454|%
2462|%
2455:: one arm per case
2463:: one arm per case
@@ -3560,216 +3568,220 @@
3560 (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 ~ ~ ~))
3568 (weld (check ~.types-prelude-sub-nested src-552 `tok-552 `tre-552) (check-module-types ~.types-prelude-sub-nested ~[%tests %golden ~.types-prelude-sub-nested %source %jibb] src-552 `typ-552 ~ ~ ~))
3561++ test-types-prelude-succ
3569++ test-types-prelude-succ
3562 (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 ~ ~ ~))
3570 (weld (check ~.types-prelude-succ src-553 `tok-553 `tre-553) (check-module-types ~.types-prelude-succ ~[%tests %golden ~.types-prelude-succ %source %jibb] src-553 `typ-553 ~ ~ ~))
3571+++ test-types-prelude-text
3572+ (weld (check ~.types-prelude-text src-554 `tok-554 `tre-554) (check-module-types ~.types-prelude-text ~[%tests %golden ~.types-prelude-text %source %jibb] src-554 `typ-554 ~ ~ ~))
3573+++ test-types-prelude-ui
3574+ (weld (check ~.types-prelude-ui src-555 `tok-555 `tre-555) (check-module-types ~.types-prelude-ui ~[%tests %golden ~.types-prelude-ui %source %jibb] src-555 `typ-555 ~ ~ ~))
3563++ test-types-prelude-unit-helpers
3575++ 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 ~ ~ ~))
3565++ test-types-prelude-zing
3577++ 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 ~ ~ ~))
3567++ test-types-proj-explicit-context
3579++ 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 ~ ~ ~))
3569++ test-types-proj-nested-no-implicit
3581++ 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 ~ ~ ~))
3571++ test-types-proj-reserved-imported-definition
3583++ 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]]))
3573++ test-types-proj-reserved-jibb-import
3585++ 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]]))
3575++ test-types-proj-reserved-local
3587++ 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 ~ ~ ~))
3577++ test-types-proj-reserved-local-mold
3589++ 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 ~ ~ ~))
3579++ test-types-proj-reserved-mark-import
3591++ 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 ~ ~ ~))
3581++ test-types-proj-reserved-mold
3593++ 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 ~ ~ ~))
3583++ test-types-proj-reserved-pattern
3595++ 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 ~ ~ ~))
3585++ test-types-proj-reserved-positive
3597++ 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 ~ ~ ~))
3587++ test-types-proj-reserved-sample
3599++ 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 ~ ~ ~))
3589++ test-types-proj-reserved-sur-import
3601++ 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 ~ ~ ~))
3591++ test-types-proj-reserved-unused-pattern
3603++ 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 ~ ~ ~))
3593++ test-types-proj-reserved-unused-sample
3605++ 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 ~ ~ ~))
3595++ test-types-proj-reserved-unused-value
3607++ 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 ~ ~ ~))
3597++ test-types-proj-reserved-value
3609++ 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 ~ ~ ~))
3599++ test-types-proj-single-duplicate
3611++ 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 ~ ~ ~))
3601++ test-types-proj-single-field
3613++ 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 ~ ~ ~))
3603++ test-types-proj-single-sample-face
3615++ 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 ~ ~ ~))
3605++ test-types-proj-single-wrapped
3617++ 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 ~ ~ ~))
3607++ test-types-qath-faces
3619++ 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 ~ ~ ~))
3609++ test-types-qath-holes
3621++ 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 ~ ~ ~))
3611++ test-types-qath-module-identity
3623++ 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]]))
3613++ test-types-qath-recursive
3625++ 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 ~ ~ ~))
3615++ test-types-record-bound-variable
3627++ 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))
3617++ test-types-record-cast-context
3629++ 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 ~ ~ ~))
3619++ test-types-record-change
3631++ 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 ~ ~ ~))
3621++ test-types-record-change-generic
3633++ 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 ~ ~ ~))
3623++ test-types-record-faces
3635++ 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))
3625++ test-types-record-field-edit-separate
3637++ 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))
3627++ test-types-record-field-expr-duplicate
3639++ 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))
3629++ test-types-record-field-expr-separate
3641++ 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))
3631++ test-types-record-field-module-reachable
3643++ 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]]))
3633++ test-types-record-field-module-unused
3645++ 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]]))
3635++ test-types-record-field-nested-mold
3647++ 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))
3637++ test-types-record-field-outer-inner
3649++ 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))
3639++ test-types-record-field-sample-duplicate
3651++ 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))
3641++ test-types-record-field-separate-molds
3653++ 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))
3643++ test-types-record-field-unused-mold
3655++ 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))
3645++ test-types-record-import
3657++ 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]]))
3647++ test-types-record-local-scheme
3659++ 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))
3649++ test-types-record-nested
3661++ 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))
3651++ test-types-record-to-tuple
3663++ 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))
3653++ test-types-recursion-scc-failures
3665++ 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 ~ ~ ~))
3655++ test-types-recursion-scc-groups
3667++ 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 ~ ~ ~))
3657++ test-types-recursion-scc-import
3669++ 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]]))
3659++ test-types-recursion-scc-import-bad
3671++ 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]]))
3661++ test-types-recursion-scc-local
3673++ 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 ~ ~ ~))
3663++ test-types-recursion-scc-order
3675++ 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 ~ ~ ~))
3665++ test-types-recursion-scc-shadow
3677++ 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 ~ ~ ~))
3667++ test-types-recursive-branch
3679++ 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 ~ ~ ~))
3669++ test-types-recursive-gate
3681++ 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))
3671++ test-types-recursive-sample
3683++ 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))
3673++ test-types-request-normal
3685++ 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]]))
3675++ test-types-scope-library-poke
3687++ 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 ~ ~ ~))
3677++ test-types-scope-root-api
3689++ 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 ~ ~ ~))
3679++ test-types-scope-store-duplicate
3691++ 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 ~ ~ ~))
3681++ test-types-scope-store-shadow
3693++ 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 ~ ~ ~))
3683++ test-types-single-case-pattern
3695++ 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 ~ ~ ~))
3685++ test-types-string-interpolation
3697++ 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 ~ ~ ~))
3687++ test-types-tuple-context
3699++ 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 ~ ~ ~))
3689++ test-types-tuple-context-nested
3701++ 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 ~ ~ ~))
3691++ test-types-union-alias
3703++ 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))
3693++ test-types-union-branch-context
3705++ 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))
3695++ test-types-union-branch-pending
3707++ 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))
3697++ test-types-union-constructor-shape
3709++ 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))
3699++ test-types-union-context-flow
3711++ 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))
3701++ test-types-union-finite
3713++ 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 ~ ~ ~))
3703++ test-types-union-finite-context
3715++ 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 ~ ~ ~))
3705++ test-types-union-finite-generic
3717++ 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 ~ ~ ~))
3707++ test-types-union-finite-limit
3719++ 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 ~ ~ ~))
3709++ test-types-union-import
3721++ 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]]))
3711++ test-types-union-local-pending
3723++ 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))
3713++ test-types-union-nonwing-subject
3725++ 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 ~ ~ ~))
3715++ test-types-union-overlap
3727++ 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))
3717++ test-types-union-overlap-nested
3729++ 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))
3719++ test-types-union-pattern-result-context
3731++ 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 ~ ~ ~))
3721++ test-types-union-pattern-result-controls
3733++ 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 ~ ~ ~))
3723++ test-types-union-patterns
3735++ 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 ~ ~ ~))
3725++ test-types-union-patterns-generic
3737++ 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 ~ ~ ~))
3727++ test-types-union-patterns-import
3739++ 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]]))
3729++ test-types-union-phantom-generic
3741++ 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))
3731++ test-types-union-polymorphic-identity
3743++ 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]]))
3733++ test-types-union-print-cross-namespace
3745++ 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]]))
3735++ test-types-union-print-distinct
3747++ 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]]))
3737++ test-types-union-print-escape
3749++ 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))
3739++ test-types-union-print-local
3751++ 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))
3741++ test-types-union-print-nested
3753++ 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))
3743++ test-types-union-print-same-origin
3755++ 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]]))
3745++ test-types-union-print-transitive
3757++ 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]]))
3747++ test-types-union-runtime-equality
3759++ 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))
3749++ test-types-union-singleton
3761++ 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))
3751++ test-types-union-source-alias
3763++ 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))
3753++ test-types-union-tag-atoms
3765++ 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))
3755++ test-types-union-tags
3767++ 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))
3757++ test-types-union-unresolved
3769++ 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))
3759++ test-types-union-unresolved-flow
3771++ 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))
3761++ test-types-unit-construction
3773++ 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 ~ ~ ~))
3763++ test-types-unit-context
3775++ 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 ~ ~ ~))
3765++ test-types-unit-patterns
3777++ 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))
3767++ test-types-value-cycle-shadow
3779++ 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 ~ ~ ~))
3769++ test-types-value-cycle-unsupported
3781++ 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 ~ ~ ~))
3771++ test-types-value-cycles
3783++ 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 ~ ~ ~))
3773::
3785::
3774:: +check: run golden:jibb on a case and compare both outputs
3786:: +check: run golden:jibb on a case and compare both outputs
3775::
3787::
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
2+$ message: cases proven disjoint; mold not checked
2+$ message: cases proven disjoint; mold not checked
3++ init: $-(@t @ud)
3++ init: $-(@t @ud)
4++ update: $-([msg=message state=@ud] [@ud (list (cmd message))])
4++ update: $-([msg=message state=@ud] [@ud (list (cmd message))])
5−++ view: $-(@ud [%node item=message])
5+++ view: $-(@ud (element message))
6++ subs: $-(@ud (list (sub message)))
6++ subs: $-(@ud (list (sub message)))
7−++ direct: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
7+++ direct: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
8++ wrong-init: $-(@p @ud)
8++ wrong-init: $-(@p @ud)
9−++ different-data: [init=$-(@p @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
9+++ different-data: [init=$-(@p @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
10++ wrong-update: $-([msg=message state=@p] [@p (list (cmd message))])
10++ wrong-update: $-([msg=message state=@p] [@p (list (cmd message))])
11++ mismatched-model: call constraint is not supported by partial inference
11++ mismatched-model: call constraint is not supported by partial inference
12−++ wrong-view: $-(@p [%node item=message])
12+++ wrong-view: $-(@p (element message))
13++ mismatched-view: call constraint is not supported by partial inference
13++ mismatched-view: call constraint is not supported by partial inference
14++ wrong-subs: $-(@p (list (sub message)))
14++ wrong-subs: $-(@p (list (sub message)))
15++ mismatched-subs: call constraint is not supported by partial inference
15++ mismatched-subs: call constraint is not supported by partial inference
@@ -17,17 +17,17 @@ partial inference; module not checked
17++ wrong-msg-update: $-([msg=other state=@ud] [@ud (list (cmd other))])
17++ wrong-msg-update: $-([msg=other state=@ud] [@ud (list (cmd other))])
18++ mismatched-message: call constraint is not supported by partial inference
18++ mismatched-message: call constraint is not supported by partial inference
19++ pending: tag needs context in partial inference
19++ pending: tag needs context in partial inference
20−++ program-value: $-([init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]] [init=$-(A B) [update=$-([C B] [B (list (cmd C))]) [view=$-(B [%node item=C]) subs=$-(B (list (sub C)))]]])
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)))]]])
21++ update-unfaced: $-([message @ud] [@ud (list (cmd message))])
21++ update-unfaced: $-([message @ud] [@ud (list (cmd message))])
22−++ direct-unfaced: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud [%node item=message]) subs=$-(@ud (list (sub message)))]]]
22+++ direct-unfaced: [init=$-(@t @ud) [update=$-([message @ud] [@ud (list (cmd message))]) [view=$-(@ud (element message)) subs=$-(@ud (list (sub message)))]]]
23+$ record: not checked
23+$ record: not checked
24++ init-record: $-(@t [count=@ud label=@t])
24++ init-record: $-(@t [count=@ud label=@t])
25++ update-record: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
25++ update-record: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
26++ update-record-unfaced: $-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
26++ update-record-unfaced: $-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
27−++ view-record: $-([count=@ud label=@t] [%node item=message])
27+++ view-record: $-([count=@ud label=@t] (element message))
28++ subs-record: $-([count=@ud label=@t] (list (sub message)))
28++ subs-record: $-([count=@ud label=@t] (list (sub message)))
29−++ program-record: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
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] [%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] (element message)) subs=$-([count=@ud label=@t] (list (sub message)))]]]
31++ bad-update-record: $-([msg=message state=[other=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
31++ bad-update-record: $-([msg=message state=[other=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
32++ program-wrong-nested-face: call constraint is not supported by partial inference
32++ program-wrong-nested-face: call constraint is not supported by partial inference
33++ update-pending: tag needs context in partial inference
33++ update-pending: tag needs context in partial inference
@@ -57,8 +57,8 @@ partial inference; module not checked
57 ^
57 ^
58++ unknown-call: $-($-([A B] C) $-([A B] C))
58++ unknown-call: $-($-([A B] C) $-([A B] C))
59++ update-proj-good: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
59++ update-proj-good: $-([msg=message state=[count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))])
60−++ program-projection: [init=$-(@t [count=@ud label=@t]) [update=$-([message [count=@ud label=@t]] [[count=@ud label=@t] (list (cmd message))]) [view=$-([count=@ud label=@t] [%node item=message]) subs=$-([count=@ud label=@t] (list (sub message)))]]]
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 [%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)))]]])
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)))]]])
62++ through-head-alias: call constraint is not supported by partial inference
62++ through-head-alias: call constraint is not supported by partial inference
63++ update-alias: $-([msg=message state=@ud] [@ud (list (cmd message))])
63++ update-alias: $-([msg=message state=@ud] [@ud (list (cmd message))])
64++ through-arg-alias: call constraint is not supported by partial inference
64++ through-arg-alias: call constraint is not supported by partial inference
tests/type-direct-gate/source.txt+3−3
@@ -4,7 +4,7 @@
4++ init |= input=@t ^- @ud 1
4++ init |= input=@t ^- @ud 1
5++ update |= [msg=message state=@ud]
5++ update |= [msg=message state=@ud]
6 ^- [@ud (list (cmd message))] [state ~]
6 ^- [@ud (list (cmd message))] [state ~]
7−++ view |= state=@ud ^- (element message) [%node %start]
7+++ view |= state=@ud ^- (element message) (text "view")
8++ subs |= state=@ud ^- (list (sub message)) ~
8++ subs |= state=@ud ^- (list (sub message)) ~
9++ direct (program init update view subs)
9++ direct (program init update view subs)
10++ wrong-init |= input=@p ^- @ud 1
10++ wrong-init |= input=@p ^- @ud 1
@@ -12,7 +12,7 @@
12++ wrong-update |= [msg=message state=@p]
12++ wrong-update |= [msg=message state=@p]
13 ^- [@p (list (cmd message))] [state ~]
13 ^- [@p (list (cmd message))] [state ~]
14++ mismatched-model (program init wrong-update view subs)
14++ 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")
16++ mismatched-view (program init update wrong-view subs)
16++ mismatched-view (program init update wrong-view subs)
17++ wrong-subs |= state=@p ^- (list (sub message)) ~
17++ wrong-subs |= state=@p ^- (list (sub message)) ~
18++ mismatched-subs (program init update view wrong-subs)
18++ mismatched-subs (program init update view wrong-subs)
@@ -35,7 +35,7 @@
35 ^- [record (list (cmd message))] [state ~]
35 ^- [record (list (cmd message))] [state ~]
36++ update-record-unfaced |= args=[message record]
36++ update-record-unfaced |= args=[message record]
37 ^- [record (list (cmd message))] [[count=0 label=""] ~]
37 ^- [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")
39++ subs-record |= state=record ^- (list (sub message)) ~
39++ subs-record |= state=record ^- (list (sub message)) ~
40++ program-record (program init-record update-record view-record subs-record)
40++ program-record (program init-record update-record view-record subs-record)
41++ program-record-unfaced (program init-record update-record-unfaced view-record subs-record)
41++ 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 @@
6++ ship-event |= x=@t ~zod
6++ ship-event |= x=@t ~zod
7++ via-leaf ^- (alias.via @t) [%text value="x"]
7++ via-leaf ^- (alias.via @t) [%text value="x"]
8++ via-node ^- (alias.via @p) [%node event=ship-event children=~]
8++ via-node ^- (alias.via @p) [%node event=ship-event children=~]
9−++ cross-alias |= x=(alias.via @t) ^- (element.first @t) [%node event=text-event children=~[x]]
9+++ cross-alias |= x=(alias.via @t) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
10−++ cross-owner |= x=(element.again @t) ^- (alias.via @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=(element.second @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) ^- (element.first @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 @@
1/= source /ui/tree
1/= source /ui/tree
2−+$ alias |$ [A] (element.source A)
2++$ alias |$ [A] (node-tree.source A)
3++ identity |= x=(alias A) x
3++ identity |= x=(alias A) x
tests/type-generic-construction/client.txt+20−20
@@ -2,23 +2,23 @@
2/= second /ui/tree-two
2/= second /ui/tree-two
3++ text-event |= value=@t value
3++ text-event |= value=@t value
4++ ship-event |= value=@t ~zod
4++ ship-event |= value=@t ~zod
5−++ leaf ^- (element.first @t) [%text value="hi"]
5+++ leaf ^- (node-tree.first @t) [%text value="hi"]
6−++ ship-leaf ^- (element.first @p) [%text value="hi"]
6+++ ship-leaf ^- (node-tree.first @p) [%text value="hi"]
7−++ node ^- (element.first @t) [%node event=text-event children=~]
7+++ node ^- (node-tree.first @t) [%node event=text-event children=~]
8−++ ship-node ^- (element.first @p) [%node event=ship-event children=~]
8+++ ship-node ^- (node-tree.first @p) [%node event=ship-event children=~]
9−++ nested ^- (element.first @t) [%node event=text-event children=~[[%text value="x"]]]
9+++ nested ^- (node-tree.first @t) [%node event=text-event children=~[[%text value="x"]]]
10−++ wrong-event ^- (element.first @p) [%node event=text-event children=~]
10+++ wrong-event ^- (node-tree.first @p) [%node event=text-event children=~]
11−++ wrong-leaf ^- (element.first @t) [%text value=~zod]
11+++ wrong-leaf ^- (node-tree.first @t) [%text value=~zod]
12−++ wrong-label ^- (element.first @t) [%text other="hi"]
12+++ wrong-label ^- (node-tree.first @t) [%text other="hi"]
13−++ bad-tag ^- (element.first @t) [%missing value="hi"]
13+++ bad-tag ^- (node-tree.first @t) [%missing value="hi"]
14−++ foreign |= x=(element.second @t) ^- (element.first @t) [%node event=text-event children=~[x]]
14+++ foreign |= x=(node-tree.second @t) ^- (node-tree.first @t) [%node event=text-event children=~[x]]
15−++ generic |= event=$-(@t A) ^- (element.first A) [%node event=event children=~]
15+++ generic |= event=$-(@t A) ^- (node-tree.first A) [%node event=event children=~]
16−++ pending |= x=(element.first @t) [%missing x]
16+++ pending |= x=(node-tree.first @t) [%missing x]
17−++ extra ^- (element.first @t) [%text value="hi" extra="bad"]
17+++ extra ^- (node-tree.first @t) [%text value="hi" extra="bad"]
18−++ misplaced ^- (element.first @t) [%text value=~zod]
18+++ misplaced ^- (node-tree.first @t) [%text value=~zod]
19−++ bad-child ^- (element.first @t) [%node event=text-event children=~["bad"]]
19+++ bad-child ^- (node-tree.first @t) [%node event=text-event children=~["bad"]]
20−++ bad-children ^- (element.first @t) [%node event=text-event children="bad"]
20+++ bad-children ^- (node-tree.first @t) [%node event=text-event children="bad"]
21−++ label-swap ^- (element.first @t) [%node children=~ event=text-event]
21+++ label-swap ^- (node-tree.first @t) [%node children=~ event=text-event]
22−++ wrong-nominal |= child=(element.second @p) ^- (element.first @t) [%node event=text-event children=~[child]]
22+++ wrong-nominal |= child=(node-tree.second @p) ^- (node-tree.first @t) [%node event=text-event children=~[child]]
23−++ wrong-argument |= child=(element.first @p) ^- (element.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) ^- (element.first A) [%node event=f children=~[[%text value="x"]]]
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
27partial inference; module not checked
27partial inference; module not checked
28++ text-event: $-(@t @t)
28++ text-event: $-(@t @t)
29++ ship-event: $-(@t @p)
29++ ship-event: $-(@t @p)
30−++ leaf: (element.first @t)
30+++ leaf: (node-tree.first @t)
31−++ ship-leaf: (element.first @p)
31+++ ship-leaf: (node-tree.first @p)
32−++ node: (element.first @t)
32+++ node: (node-tree.first @t)
33−++ ship-node: (element.first @p)
33+++ ship-node: (node-tree.first @p)
34−++ nested: (element.first @t)
34+++ nested: (node-tree.first @t)
35++ wrong-event: recursive mold case does not fit its source shape
35++ wrong-event: recursive mold case does not fit its source shape
36++ wrong-leaf: recursive mold case does not fit its source shape
36++ wrong-leaf: recursive mold case does not fit its source shape
37++ wrong-label: recursive mold case does not fit its source shape
37++ wrong-label: recursive mold case does not fit its source shape
38++ bad-tag: recursive mold constructor has no matching case
38++ bad-tag: recursive mold constructor has no matching case
39++ foreign: list item constraint is not supported by partial inference
39++ 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))
41++ pending: tag needs context in partial inference
41++ pending: tag needs context in partial inference
42++ extra: recursive mold case does not fit its source shape
42++ extra: recursive mold case does not fit its source shape
43++ misplaced: recursive mold case does not fit its source shape
43++ misplaced: recursive mold case does not fit its source shape
@@ -46,20 +46,20 @@ partial inference; module not checked
46++ label-swap: recursive mold case does not fit its source shape
46++ label-swap: recursive mold case does not fit its source shape
47++ wrong-nominal: list item constraint is not supported by partial inference
47++ wrong-nominal: list item constraint is not supported by partial inference
48++ wrong-argument: list item constraint is not supported by partial inference
48++ wrong-argument: list item constraint is not supported by partial inference
49−++ keep-generic: $-($-(@t A) (element.first A))
49+++ keep-generic: $-($-(@t A) (node-tree.first A))
50partial inference; module not checked
50partial inference; module not checked
51++ text-event: $-(@t @t)
51++ text-event: $-(@t @t)
52++ ship-event: $-(@t @p)
52++ ship-event: $-(@t @p)
53++ via-leaf: (alias.via @t)
53++ via-leaf: (alias.via @t)
54++ via-node: (alias.via @p)
54++ via-node: (alias.via @p)
55−++ cross-alias: $-((alias.via @t) (element.first @t))
55+++ cross-alias: $-((alias.via @t) (node-tree.first @t))
56−++ cross-owner: $-((element.again @t) (alias.via @t))
56+++ cross-owner: $-((node-tree.again @t) (alias.via @t))
57++ wrong-owner: list item constraint is not supported by partial inference
57++ wrong-owner: list item constraint is not supported by partial inference
58++ wrong-arg: list item constraint is not supported by partial inference
58++ wrong-arg: list item constraint is not supported by partial inference
59partial inference; module not checked
59partial inference; module not checked
60−++ leaf: (element.first @t)
60+++ leaf: (node-tree.first @t)
61−++ node: (element.first @p)
61+++ node: (node-tree.first @p)
62−++ nested: (element.first @t)
62+++ nested: (node-tree.first @t)
63−++ generic: $-(A (element.first A))
63+++ generic: $-(A (node-tree.first A))
64++ wrong-owner: list item constraint is not supported by partial inference
64++ wrong-owner: list item constraint is not supported by partial inference
65++ wrong-field: recursive mold case needs unsupported inference
65++ wrong-field: recursive mold case needs unsupported inference
tests/type-generic-construction/no-event-client.txt+6−6
@@ -1,8 +1,8 @@
1/= first /ui/tree
1/= first /ui/tree
2/= second /ui/tree-two
2/= second /ui/tree-two
3−++ leaf ^- (element.first @t) [%text value="x"]
3+++ leaf ^- (node-tree.first @t) [%text value="x"]
4−++ node ^- (element.first @p) [%node children=~]
4+++ node ^- (node-tree.first @p) [%node children=~]
5−++ nested ^- (element.first @t) [%node children=~[[%text value="x"]]]
5+++ nested ^- (node-tree.first @t) [%node children=~[[%text value="x"]]]
6−++ generic |= x=A ^- (element.first A) [%node children=~]
6+++ generic |= x=A ^- (node-tree.first A) [%node children=~]
7−++ wrong-owner |= x=(element.second @t) ^- (element.first @t) [%node children=~[x]]
7+++ wrong-owner |= x=(node-tree.second @t) ^- (node-tree.first @t) [%node children=~[x]]
8−++ wrong-field ^- (element.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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7++ text-event |= x=@t x
7++ text-event |= x=@t x
8−++ made-leaf ^- (element @t) [%text value="x"]
8+++ made-leaf ^- (node-tree @t) [%text value="x"]
9−++ made-node ^- (element @t) [%node event=text-event children=~[[%text value="x"]]]
9+++ made-node ^- (node-tree @t) [%node event=text-event children=~[[%text value="x"]]]
10−++ invalid ^- (element @t) [%text value=~zod]
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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7++ text-event |= x=@t x
7++ text-event |= x=@t x
8−++ made-leaf ^- (element @t) [%text value="x"]
8+++ made-leaf ^- (node-tree @t) [%text value="x"]
9−++ made-node ^- (element @t) [%node event=text-event children=~[[%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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node children=(list (element M))]
3+ [%node children=(list (node-tree M))]
4−++ generic-id |= x=(element A) x
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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-pattern/client.txt+48−48
@@ -1,46 +1,46 @@
1/= first /ui/tree
1/= first /ui/tree
2/= second /ui/tree-two
2/= second /ui/tree-two
3/= via /ui/tree-alias
3/= via /ui/tree-alias
4−++ describe |= x=(element.first @t)
4+++ describe |= x=(node-tree.first @t)
5 ?- x
5 ?- x
6 [%text value] value
6 [%text value] value
7 [%node event children] (event "click")
7 [%node event children] (event "click")
8−++ reverse |= x=(element.first @p)
8+++ reverse |= x=(node-tree.first @p)
9 ?- x
9 ?- x
10 [%node event children] (event "click")
10 [%node event children] (event "click")
11 [%text value] ~zod
11 [%text value] ~zod
12−++ generic-children |= x=(element.first A)
12+++ generic-children |= x=(node-tree.first A)
13− ^- (list (element.first A)) ?- x
13+ ^- (list (node-tree.first A)) ?- x
14 [%text value] ~
14 [%text value] ~
15 [%node event kids] kids
15 [%node event kids] kids
16++ alias-children |= x=(alias.via @p)
16++ alias-children |= x=(alias.via @p)
17− ^- (list (element.first @p)) ?- x
17+ ^- (list (node-tree.first @p)) ?- x
18 [%text value] ~
18 [%text value] ~
19 [%node event kids] kids
19 [%node event kids] kids
20−++ rebuild |= x=(element.first @t)
20+++ rebuild |= x=(node-tree.first @t)
21− ^- (element.first @t) ?- x
21+ ^- (node-tree.first @t) ?- x
22 [%text value] [%text value=value]
22 [%text value] [%text value=value]
23 [%node event children] [%node event=event children=children]
23 [%node event children] [%node event=event children=children]
24−++ wrong-return |= x=(element.first @t)
24+++ wrong-return |= x=(node-tree.first @t)
25 ?- x
25 ?- x
26 [%text value] value
26 [%text value] value
27 [%node event kids] ~zod
27 [%node event kids] ~zod
28−++ duplicate |= x=(element.first @t)
28+++ duplicate |= x=(node-tree.first @t)
29 ?- x
29 ?- x
30 [%text a] a
30 [%text a] a
31 [%text b] b
31 [%text b] b
32−++ missing |= x=(element.first @t)
32+++ missing |= x=(node-tree.first @t)
33 ?- x
33 ?- x
34 [%text a] a
34 [%text a] a
35−++ shadow |= x=(element.first @t)
35+++ shadow |= x=(node-tree.first @t)
36 ?- x
36 ?- x
37 [%text x] x
37 [%text x] x
38 [%node event kids] "node"
38 [%node event kids] "node"
39−++ bad-tag |= x=(element.first @t)
39+++ bad-tag |= x=(node-tree.first @t)
40 ?- x
40 ?- x
41 [%text value] value
41 [%text value] value
42 [%other event kids] "node"
42 [%other event kids] "node"
43−++ whole-tail |= x=(element.first @t)
43+++ whole-tail |= x=(node-tree.first @t)
44 ?- x
44 ?- x
45 [%text value] value
45 [%text value] value
46 [%node payload] payload
46 [%node payload] payload
@@ -48,32 +48,32 @@
48 ?- x
48 ?- x
49 [%text value] value
49 [%text value] value
50 [%node event kids] "node"
50 [%node event kids] "node"
51−++ pending |= x=(element.first @t)
51+++ pending |= x=(node-tree.first @t)
52 ?- x
52 ?- x
53 [%text value] [%unrelated value]
53 [%text value] [%unrelated value]
54 [%node event kids] [%unrelated "node"]
54 [%node event kids] [%unrelated "node"]
55−++ dead |= x=(element.first @t)
55+++ dead |= x=(node-tree.first @t)
56 ?- x
56 ?- x
57 [%text a] a
57 [%text a] a
58 [%node event kids] (event "ok")
58 [%node event kids] (event "ok")
59 [%text b] b
59 [%text b] b
60−++ wild |= x=(element.first @t)
60+++ wild |= x=(node-tree.first @t)
61 ?- x
61 ?- x
62 [%text *] "text"
62 [%text *] "text"
63 [%node * *] "node"
63 [%node * *] "node"
64−++ whole-wild |= x=(element.first @t)
64+++ whole-wild |= x=(node-tree.first @t)
65 ?- x
65 ?- x
66 [%text value] value
66 [%text value] value
67 * "other"
67 * "other"
68−++ foreign-children |= x=(element.first @t)
68+++ foreign-children |= x=(node-tree.first @t)
69− ^- (list (element.second @t)) ?- x
69+ ^- (list (node-tree.second @t)) ?- x
70 [%text value] ~
70 [%text value] ~
71 [%node event kids] kids
71 [%node event kids] kids
72−++ wrong-argument |= x=(element.first @t)
72+++ wrong-argument |= x=(node-tree.first @t)
73− ^- (list (element.first @p)) ?- x
73+ ^- (list (node-tree.first @p)) ?- x
74 [%text value] ~
74 [%text value] ~
75 [%node event kids] kids
75 [%node event kids] kids
76−++ nested-child |= x=(element.first @t)
76+++ nested-child |= x=(node-tree.first @t)
77 ?- x
77 ?- x
78 [%text value] value
78 [%text value] value
79 [%node event kids] ?- kids
79 [%node event kids] ?- kids
@@ -81,86 +81,86 @@
81 [item remainder] ?- item
81 [item remainder] ?- item
82 [%text value] value
82 [%text value] value
83 [%node action rest] (action "click")
83 [%node action rest] (action "click")
84−++ duplicate-binder |= x=(element.first @t)
84+++ duplicate-binder |= x=(node-tree.first @t)
85 ?- x
85 ?- x
86 [%text value] value
86 [%text value] value
87 [%node event event] "node"
87 [%node event event] "node"
88−++ target-shadow |= x=(element.first @t)
88+++ target-shadow |= x=(node-tree.first @t)
89 ?- x
89 ?- x
90 [%text value] value
90 [%text value] value
91 [%node event x] "node"
91 [%node event x] "node"
92−++ grouped |= x=(element.first @t)
92+++ grouped |= x=(node-tree.first @t)
93 ?- (x)
93 ?- (x)
94 [%text value] value
94 [%text value] value
95 [%node event kids] (event "click")
95 [%node event kids] (event "click")
96−++ called |= x=(element.first @t)
96+++ called |= x=(node-tree.first @t)
97 ?- (generic-id.first x)
97 ?- (generic-id.first x)
98 [%text value] value
98 [%text value] value
99 [%node event kids] (event "click")
99 [%node event kids] (event "click")
100−++ missing-context |= x=(element.first @t)
100+++ missing-context |= x=(node-tree.first @t)
101 ^- @t ?- x
101 ^- @t ?- x
102 [%text item] item
102 [%text item] item
103−++ missing-node |= x=(element.first @t)
103+++ missing-node |= x=(node-tree.first @t)
104 ?- x
104 ?- x
105 [%node action kids] (action "click")
105 [%node action kids] (action "click")
106−++ single-wild |= x=(element.first @t)
106+++ single-wild |= x=(node-tree.first @t)
107 ?- x
107 ?- x
108 * "all"
108 * "all"
109−++ single-bind |= x=(element.first @t)
109+++ single-bind |= x=(node-tree.first @t)
110 ?- x
110 ?- x
111 all all
111 all all
112−++ polymorphic-source ^- (element.first A) [%text value="source"]
112+++ polymorphic-source ^- (node-tree.first A) [%text value="source"]
113++ polymorphic-match ?- polymorphic-source
113++ polymorphic-match ?- polymorphic-source
114− [%text text] text
114+ [%text words] words
115−++ all |= x=(element.first @t)
115+++ all |= x=(node-tree.first @t)
116 ?- x
116 ?- x
117 * "all"
117 * "all"
118−++ catch-tail |= x=(element.first @t)
118+++ catch-tail |= x=(node-tree.first @t)
119 ?- x
119 ?- x
120 [%text value] value
120 [%text value] value
121 * "node"
121 * "node"
122−++ catch-first-dead |= x=(element.first @t)
122+++ catch-first-dead |= x=(node-tree.first @t)
123 ?- x
123 ?- x
124 * "all"
124 * "all"
125 [%text value] value
125 [%text value] value
126−++ late-dead |= x=(element.first @t)
126+++ late-dead |= x=(node-tree.first @t)
127 ?- x
127 ?- x
128 [%text value] value
128 [%text value] value
129 [%node event kids] (event "click")
129 [%node event kids] (event "click")
130 * "dead"
130 * "dead"
131−++ duplicate-third |= x=(element.first @t)
131+++ duplicate-third |= x=(node-tree.first @t)
132 ?- x
132 ?- x
133 [%text value] value
133 [%text value] value
134 [%node event kids] (event "click")
134 [%node event kids] (event "click")
135 [%text other] other
135 [%text other] other
136−++ nominal-result |= x=(element.first A)
136+++ nominal-result |= x=(node-tree.first A)
137 ?- x
137 ?- x
138 [%text value] x
138 [%text value] x
139 * x
139 * x
140−++ nominal-context |= x=(element.first A)
140+++ nominal-context |= x=(node-tree.first A)
141− ^- (element.first A) ?- x
141+ ^- (node-tree.first A) ?- x
142 [%text value] x
142 [%text value] x
143 * x
143 * x
144−++ forbidden-bind |= x=(element.first @t)
144+++ forbidden-bind |= x=(node-tree.first @t)
145 ?- x
145 ?- x
146 [%text value] value
146 [%text value] value
147 rest rest
147 rest rest
148−++ missing-again |= x=(element.first @t)
148+++ missing-again |= x=(node-tree.first @t)
149 ?- x
149 ?- x
150 [%text value] value
150 [%text value] value
151−++ catch-pending |= x=(element.first @t)
151+++ catch-pending |= x=(node-tree.first @t)
152 ?- x
152 ?- x
153 [%text value] [%unrelated value]
153 [%text value] [%unrelated value]
154 * [%unrelated "node"]
154 * [%unrelated "node"]
155−++ called-all |= x=(element.first @t)
155+++ called-all |= x=(node-tree.first @t)
156 ?- (generic-id.first x)
156 ?- (generic-id.first x)
157 * "all"
157 * "all"
158−++ called-context |= x=(element.first @t)
158+++ called-context |= x=(node-tree.first @t)
159 ^- @t ?- (generic-id.first x)
159 ^- @t ?- (generic-id.first x)
160 * "all"
160 * "all"
161−++ called-nominal |= x=(element.first A)
161+++ called-nominal |= x=(node-tree.first A)
162− ^- (element.first A) ?- (generic-id.first x)
162+ ^- (node-tree.first A) ?- (generic-id.first x)
163 * x
163 * x
164−++ called-missing |= x=(element.first @t)
164+++ called-missing |= x=(node-tree.first @t)
165 ?- (generic-id.first x)
165 ?- (generic-id.first x)
166 [%text value] value
166 [%text value] value
tests/type-generic-pattern/expected.txt+24−24
@@ -23,17 +23,17 @@ zero arm budget declined: ok
23hidden view stays nominally unknown: ok
23hidden view stays nominally unknown: ok
24catch-all keeps fuel and pending state: ok
24catch-all keeps fuel and pending state: ok
25partial inference; module not checked
25partial inference; module not checked
26−++ describe: $-((element.first @t) @t)
26+++ describe: $-((node-tree.first @t) @t)
27−++ reverse: $-((element.first @p) @p)
27+++ reverse: $-((node-tree.first @p) @p)
28−++ generic-children: $-((element.first A) (list (element.first A)))
28+++ generic-children: $-((node-tree.first A) (list (node-tree.first A)))
29−++ alias-children: $-((alias.via @p) (list (element.first @p)))
29+++ alias-children: $-((alias.via @p) (list (node-tree.first @p)))
30−++ rebuild: $-((element.first @t) (element.first @t))
30+++ rebuild: $-((node-tree.first @t) (node-tree.first @t))
31++ wrong-return: union branch result matching needs unsupported inference
31++ wrong-return: union branch result matching needs unsupported inference
32++ duplicate: branch arm is covered by earlier arms
32++ duplicate: branch arm is covered by earlier arms
33/tests/tree/client.jibb:31:5: covered arm
33/tests/tree/client.jibb:31:5: covered arm
34 [%text b] b
34 [%text b] b
35 ^
35 ^
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))]]
37++ shadow: pattern binder shadows a name
37++ shadow: pattern binder shadows a name
38++ bad-tag: branch is not supported by partial inference
38++ bad-tag: branch is not supported by partial inference
39++ whole-tail: branch is not supported by partial inference
39++ whole-tail: branch is not supported by partial inference
@@ -43,23 +43,23 @@ partial inference; module not checked
43/tests/tree/client.jibb:59:5: covered arm
43/tests/tree/client.jibb:59:5: covered arm
44 [%text b] b
44 [%text b] b
45 ^
45 ^
46−++ wild: $-((element.first @t) @t)
46+++ wild: $-((node-tree.first @t) @t)
47−++ whole-wild: $-((element.first @t) @t)
47+++ whole-wild: $-((node-tree.first @t) @t)
48++ foreign-children: union branch result constraint is not supported by partial inference
48++ foreign-children: union branch result constraint is not supported by partial inference
49++ wrong-argument: union branch result constraint is not supported by partial inference
49++ 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)
51++ duplicate-binder: pattern binder shadows a name
51++ duplicate-binder: pattern binder shadows a name
52++ target-shadow: pattern binder shadows a name
52++ target-shadow: pattern binder shadows a name
53−++ grouped: $-((element.first @t) @t)
53+++ grouped: $-((node-tree.first @t) @t)
54−++ called: $-((element.first @t) @t)
54+++ called: $-((node-tree.first @t) @t)
55−++ missing-context: missing union case [%node [event=$-(@t @t) children=(list (element.first @t))]]
55+++ missing-context: missing union case [%node [event=$-(@t @t) children=(list (node-tree.first @t))]]
56++ missing-node: missing union case [%text value=@t]
56++ missing-node: missing union case [%text value=@t]
57−++ single-wild: $-((element.first @t) @t)
57+++ single-wild: $-((node-tree.first @t) @t)
58++ single-bind: branch is not supported by partial inference
58++ single-bind: branch is not supported by partial inference
59−++ polymorphic-source: (element.first A)
59+++ polymorphic-source: (node-tree.first A)
60−++ polymorphic-match: missing union case [%node [event=$-(@t A) children=(list (element.first A))]]
60+++ polymorphic-match: missing union case [%node [event=$-(@t A) children=(list (node-tree.first A))]]
61−++ all: $-((element.first @t) @t)
61+++ all: $-((node-tree.first @t) @t)
62−++ catch-tail: $-((element.first @t) @t)
62+++ catch-tail: $-((node-tree.first @t) @t)
63++ catch-first-dead: branch arm is covered by earlier arms
63++ catch-first-dead: branch arm is covered by earlier arms
64/tests/tree/client.jibb:125:5: covered arm
64/tests/tree/client.jibb:125:5: covered arm
65 [%text value] value
65 [%text value] value
@@ -72,18 +72,18 @@ partial inference; module not checked
72/tests/tree/client.jibb:135:5: covered arm
72/tests/tree/client.jibb:135:5: covered arm
73 [%text other] other
73 [%text other] other
74 ^
74 ^
75−++ nominal-result: $-((element.first A) (element.first A))
75+++ nominal-result: $-((node-tree.first A) (node-tree.first A))
76−++ nominal-context: $-((element.first A) (element.first A))
76+++ nominal-context: $-((node-tree.first A) (node-tree.first A))
77++ forbidden-bind: branch is not supported by partial inference
77++ 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))]]
79++ catch-pending: union branch result matching needs unsupported inference
79++ catch-pending: union branch result matching needs unsupported inference
80++ called-all: branch pattern is not supported by partial inference
80++ called-all: branch pattern is not supported by partial inference
81−++ called-context: $-((element.first @t) @t)
81+++ called-context: $-((node-tree.first @t) @t)
82−++ called-nominal: $-((element.first A) (element.first A))
82+++ called-nominal: $-((node-tree.first A) (node-tree.first A))
83++ called-missing: single-case pattern needs unsupported inference
83++ called-missing: single-case pattern needs unsupported inference
84partial inference; module not checked
84partial inference; module not checked
85−++ words: $-((element.first @t) @t)
85+++ words: $-((node-tree.first @t) @t)
86−++ children: $-((element.first A) (list (element.first A)))
86+++ children: $-((node-tree.first A) (list (node-tree.first A)))
87++ duplicate: branch arm is covered by earlier arms
87++ duplicate: branch arm is covered by earlier arms
88/tests/tree/no-event.jibb:13:5: covered arm
88/tests/tree/no-event.jibb:13:5: covered arm
89 [%text b] b
89 [%text b] b
tests/type-generic-pattern/no-event.txt+5−5
@@ -1,17 +1,17 @@
1/= first /ui/tree
1/= first /ui/tree
2−++ words |= x=(element.first @t)
2+++ words |= x=(node-tree.first @t)
3 ?- x
3 ?- x
4 [%text value] value
4 [%text value] value
5 [%node kids] "node"
5 [%node kids] "node"
6−++ children |= x=(element.first A)
6+++ children |= x=(node-tree.first A)
7− ^- (list (element.first A)) ?- x
7+ ^- (list (node-tree.first A)) ?- x
8 [%text value] ~
8 [%text value] ~
9 [%node kids] kids
9 [%node kids] kids
10−++ duplicate |= x=(element.first @t)
10+++ duplicate |= x=(node-tree.first @t)
11 ?- x
11 ?- x
12 [%text a] a
12 [%text a] a
13 [%text b] b
13 [%text b] b
14−++ nested-pattern |= x=(element.first @t)
14+++ nested-pattern |= x=(node-tree.first @t)
15 ?- x
15 ?- x
16 [%text value] value
16 [%text value] value
17 [%node [first rest]] "node"
17 [%node [first rest]] "node"
tests/type-generic-pattern/owner-bad.txt+11−11
@@ -1,22 +1,22 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7−++ describe |= x=(element @t)
7+++ describe |= x=(node-tree @t)
8 ?- x
8 ?- x
9 [%text value] value
9 [%text value] value
10 [%node event kids] (event "click")
10 [%node event kids] (event "click")
11−++ children |= x=(element A)
11+++ children |= x=(node-tree A)
12− ^- (list (element A)) ?- x
12+ ^- (list (node-tree A)) ?- x
13 [%text value] ~
13 [%text value] ~
14 [%node event kids] kids
14 [%node event kids] kids
15−++ rebuild |= x=(element @t)
15+++ rebuild |= x=(node-tree @t)
16− ^- (element @t) ?- x
16+ ^- (node-tree @t) ?- x
17 [%text value] [%text value=value]
17 [%text value] [%text value=value]
18 [%node event kids] [%node event=event children=kids]
18 [%node event kids] [%node event=event children=kids]
19−++ wrong |= x=(element @t)
19+++ wrong |= x=(node-tree @t)
20 ?- x
20 ?- x
21 [%text value] value
21 [%text value] value
22 [%node event event] "bad"
22 [%node event event] "bad"
tests/type-generic-pattern/owner.txt+10−10
@@ -1,18 +1,18 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7−++ describe |= x=(element @t)
7+++ describe |= x=(node-tree @t)
8 ?- x
8 ?- x
9 [%text value] value
9 [%text value] value
10 [%node event kids] (event "click")
10 [%node event kids] (event "click")
11−++ children |= x=(element A)
11+++ children |= x=(node-tree A)
12− ^- (list (element A)) ?- x
12+ ^- (list (node-tree A)) ?- x
13 [%text value] ~
13 [%text value] ~
14 [%node event kids] kids
14 [%node event kids] kids
15−++ rebuild |= x=(element @t)
15+++ rebuild |= x=(node-tree @t)
16− ^- (element @t) ?- x
16+ ^- (node-tree @t) ?- x
17 [%text value] [%text value=value]
17 [%text value] [%text value=value]
18 [%node event kids] [%node event=event children=kids]
18 [%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
3This shared eval and ship fixture checks a deliberately narrow source-backed
3This shared eval and ship fixture checks a deliberately narrow source-backed
4recursive identity: two distinct tagged cases, a text leaf and a node with a
4recursive identity: two distinct tagged cases, a text leaf and a node with a
5message-producing gate and a list of recursive children. The test-only tree is
5message-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
7check before its interface is published. Same-origin aliases retain identity,
7check before its interface is published. Same-origin aliases retain identity,
8while different origins, unproved casts and broader matching remain unsupported.
8while different origins, unproved casts and broader matching remain unsupported.
9A wrong-aura constructor fails the complete owner check. An opaque recursive type prevents premature numeric defaulting;
9A 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 @@
1/= source /ui/tree
1/= source /ui/tree
2−+$ alias |$ [A] (element.source A)
2++$ alias |$ [A] (node-tree.source A)
3++ identity |= x=(alias A) x
3++ 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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7
7
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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7−++ match |= x=(element @t)
7+++ match |= x=(node-tree @t)
8 ?- x
8 ?- x
9 [%text value] value
9 [%text value] value
10 [%node event event] "node"
10 [%node event event] "node"
tests/type-generic-recursion/bad-mold.txt+5−5
@@ -1,8 +1,8 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7
7
8+$ unused _
8+$ unused _
tests/type-generic-recursion/bad-parameter.txt+5−5
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element @t))]
3+ [%node event=$-(@t M) children=(list (node-tree @t))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
tests/type-generic-recursion/client.txt+6−6
@@ -2,10 +2,10 @@
2/= again /ui/tree
2/= again /ui/tree
3/= second /ui/tree-two
3/= second /ui/tree-two
4/= via /ui/tree-alias
4/= via /ui/tree-alias
5−++ from-first |= x=(element.first @t) x
5+++ from-first |= x=(node-tree.first @t) x
6−++ from-again |= x=(element.again @p) x
6+++ from-again |= x=(node-tree.again @p) x
7−++ same-origin |= x=(element.first @t) ^- (element.again @t) x
7+++ same-origin |= x=(node-tree.first @t) ^- (node-tree.again @t) x
8++ from-alias |= x=(alias.via @t) x
8++ from-alias |= x=(alias.via @t) x
9−++ through-alias |= x=(element.first @t) ^- (alias.via @t) x
9+++ through-alias |= x=(node-tree.first @t) ^- (alias.via @t) x
10−++ different-origin |= x=(element.first @t) ^- (element.second @t) x
10+++ different-origin |= x=(node-tree.first @t) ^- (node-tree.second @t) x
11−++ independent |= [a=(element.first @t) b=(element.first @p)] [(generic-id.first a) (generic-id.first b)]
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
26active import cycle declined: ok
26active import cycle declined: ok
27changed prelude invalidates cache: ok
27changed prelude invalidates cache: ok
28partial inference; module not checked
28partial inference; module not checked
29−++ from-first: $-((element.first @t) (element.first @t))
29+++ from-first: $-((node-tree.first @t) (node-tree.first @t))
30−++ from-again: $-((element.again @p) (element.again @p))
30+++ from-again: $-((node-tree.again @p) (node-tree.again @p))
31−++ same-origin: $-((element.first @t) (element.again @t))
31+++ same-origin: $-((node-tree.first @t) (node-tree.again @t))
32++ from-alias: $-((alias.via @t) (alias.via @t))
32++ 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))
34++ different-origin: cast constraint is not supported by partial inference
34++ different-origin: cast constraint is not supported by partial inference
35−++ independent: $-([a=(element.first @t) b=(element.first @p)] [(element.first @t) (element.first @p)])
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 @@
1+$ list |$ [M] [%fake value=M]
1+$ list |$ [M] [%fake value=M]
2−+$ element |$ [M]
2++$ node-tree |$ [M]
3 [%text value=@t]
3 [%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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7++ shadow |= x=@t
7++ shadow |= x=@t
8− +$ element |$ [M]
8+ +$ node-tree |$ [M]
9 [%different value=@t]
9 [%different value=@t]
10− [%node event=$-(@t M) children=(list (element M))]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
11 x
11 x
tests/type-generic-recursion/local-only.txt+5−5
@@ -1,9 +1,9 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7++ local-only |= x=@t
7++ local-only |= x=@t
8 +$ local-tree |$ [M]
8 +$ local-tree |$ [M]
9 [%text value=@t]
9 [%text value=@t]
tests/type-generic-recursion/local-shadow.txt+7−7
@@ -1,11 +1,11 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
7++ shadow |= x=@t
7++ shadow |= x=@t
8− +$ element |$ [M]
8+ +$ node-tree |$ [M]
9 [%text value=@t]
9 [%text value=@t]
10− [%node event=$-(@t M) children=(list (element M))]
10+ [%node event=$-(@t M) children=(list (node-tree M))]
11 x
11 x
tests/type-generic-recursion/tree-changed.txt+5−5
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%branch event=$-(@t M) children=(list (element M))]
3+ [%branch event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) 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]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4−++ text-id |= x=(element @t) x
4+++ text-id |= x=(node-tree @t) x
5−++ ship-id |= x=(element @p) x
5+++ ship-id |= x=(node-tree @p) x
6−++ generic-id |= x=(element A) x
6+++ generic-id |= x=(node-tree A) x
tests/type-list-alias/expected.txt+4−4
@@ -1,6 +1,6 @@
1canonical
1canonical
2partial inference; module not checked
2partial inference; module not checked
3−++ text: $-((list @t) (list @t))
3+++ text-value: $-((list @t) (list @t))
4++ ship: $-((list @p) (list @p))
4++ ship: $-((list @p) (list @p))
5++ wrong: list item does not fit its expected type
5++ wrong: list item does not fit its expected type
6/ui/test.jibb:3:13: expected item has type @t
6/ui/test.jibb:3:13: expected item has type @t
@@ -12,13 +12,13 @@ partial inference; module not checked
12++ shadow: local molds shadow a name
12++ shadow: local molds shadow a name
13altered
13altered
14partial inference; module not checked
14partial 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
16++ ship: sample mold is not supported by partial inference
16++ ship: sample mold is not supported by partial inference
17++ wrong: cast mold is not supported by partial inference
17++ wrong: cast mold is not supported by partial inference
18++ shadow: sample mold is not supported by partial inference
18++ shadow: sample mold is not supported by partial inference
19omitted
19omitted
20partial inference; module not checked
20partial 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
22++ ship: sample mold is not supported by partial inference
22++ ship: sample mold is not supported by partial inference
23++ wrong: cast mold is not supported by partial inference
23++ wrong: cast mold is not supported by partial inference
24++ shadow: sample mold is not supported by partial inference
24++ shadow: sample mold is not supported by partial inference
@@ -30,7 +30,7 @@ partial inference; module not checked
30prelude source does not parse; module import inference unsupported
30prelude source does not parse; module import inference unsupported
31cyclic
31cyclic
32partial inference; module not checked
32partial 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
34++ ship: sample mold is not supported by partial inference
34++ ship: sample mold is not supported by partial inference
35++ wrong: cast mold is not supported by partial inference
35++ wrong: cast mold is not supported by partial inference
36++ shadow: local molds shadow a name
36++ 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
4+$ model: not checked
4+$ model: not checked
5+$ msg: cases proven disjoint; mold not checked
5+$ msg: cases proven disjoint; mold not checked
6++ init: `~` needs context in partial inference
6++ 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
8++ subs: call constraint is not supported by partial inference
8++ subs: call constraint is not supported by partial inference
9++ view: name is not available to partial inference
9++ 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
11negative API imports
11negative API imports
12missing-mark: rejected
12missing-mark: rejected
13duplicate-mark: rejected
13duplicate-mark: rejected
tests/type-union-source/mixed-source.txt+2−2
@@ -1,6 +1,6 @@
1−+$ element |$ [M]
1++$ node-tree |$ [M]
2 [%text value=@t]
2 [%text value=@t]
3− [%node event=$-(@t M) children=(list (element M))]
3+ [%node event=$-(@t M) children=(list (node-tree M))]
4+$ tagged |$ [A] [%wrapped A]
4+$ tagged |$ [A] [%wrapped A]
5+$ choice
5+$ choice
6 (tagged @t)
6 (tagged @t)
tools/testdata/ship-selftest+27
@@ -316,12 +316,17 @@ def generator_checks(tmp):
316 'tests/lib/jibb-empty.hoon',
316 'tests/lib/jibb-empty.hoon',
317 'tests/lib/jibb-union-source.hoon',
317 'tests/lib/jibb-union-source.hoon',
318 'tests/lib/jibb-union-alias-overlap.hoon',
318 'tests/lib/jibb-union-alias-overlap.hoon',
319+ 'tests/lib/jibb-full-overlap-basic.hoon',
320+ 'tests/lib/jibb-full-overlap-graph.hoon',
319 'tests/lib/jibb-api-evidence.hoon',
321 'tests/lib/jibb-api-evidence.hoon',
320 'tests/lib/jibb-ask-guards.hoon',
322 'tests/lib/jibb-ask-guards.hoon',
321 'tests/lib/jibb-request-guards.hoon',
323 'tests/lib/jibb-request-guards.hoon',
322 'tests/lib/jibb-closed-gate-guards.hoon',
324 'tests/lib/jibb-closed-gate-guards.hoon',
323 'tests/lib/jibb-direct-gate-guards.hoon',
325 'tests/lib/jibb-direct-gate-guards.hoon',
324 'tests/lib/jibb-direct-gate-source.hoon',
326 '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',
325 'tests/lib/jibb-todo-api.hoon',
330 'tests/lib/jibb-todo-api.hoon',
326 'tests/lib/jibb-todo-partial.hoon',
331 'tests/lib/jibb-todo-partial.hoon',
327 'tests/lib/jibb-constructor-fit-guards.hoon',
332 'tests/lib/jibb-constructor-fit-guards.hoon',
@@ -332,6 +337,7 @@ def generator_checks(tmp):
332 'tests/lib/jibb-deferred.hoon',
337 'tests/lib/jibb-deferred.hoon',
333 'tests/lib/jibb-deferred-resolver.hoon',
338 'tests/lib/jibb-deferred-resolver.hoon',
334 'tests/lib/jibb-deferred-context.hoon',
339 'tests/lib/jibb-deferred-context.hoon',
340+ 'tests/lib/jibb-deferred-prepared.hoon',
335 'tests/lib/jibb-cell-branch.hoon'}
341 'tests/lib/jibb-cell-branch.hoon'}
336 <= normal_tests, sorted(normal_tests))
342 <= normal_tests, sorted(normal_tests))
337 check('generic recursion source and golden are assembled',
343 check('generic recursion source and golden are assembled',
@@ -363,6 +369,11 @@ def generator_checks(tmp):
363 {f'tests/type-union-alias-overlap/{name}.txt' for name in (
369 {f'tests/type-union-alias-overlap/{name}.txt' for name in (
364 'positive', 'negative', 'nonzero', 'multi', 'opaque', 'wrong',
370 'positive', 'negative', 'nonzero', 'multi', 'opaque', 'wrong',
365 'duplicate', 'qualified', 'flag-source', 'expected')} <= set(normal.files))
371 'duplicate', 'qualified', 'flag-source', 'expected')} <= set(normal.files))
372+ check('full overlap source fixtures are assembled',
373+ {f'tests/type-full-overlap/{name}.txt' for name in (
374+ 'same', 'zero', 'unsupported', 'precedence', 'duplicate',
375+ 'invalid', 'distinct', 'parent', 'child', 'generic',
376+ 'duplicate-generic', 'expected-basic', 'expected-graph')} <= set(normal.files))
366 check('deferred transaction and resolver sources are assembled',
377 check('deferred transaction and resolver sources are assembled',
367 {'tests/type-deferred/nested-src.txt', 'tests/type-deferred/principal-src.txt',
378 {'tests/type-deferred/nested-src.txt', 'tests/type-deferred/principal-src.txt',
368 'tests/type-deferred/expected.txt', 'tests/type-deferred-resolver/good.txt',
379 'tests/type-deferred/expected.txt', 'tests/type-deferred-resolver/good.txt',
@@ -376,12 +387,28 @@ def generator_checks(tmp):
376 {f'tests/type-deferred-context/{name}.txt' for name in (
387 {f'tests/type-deferred-context/{name}.txt' for name in (
377 'rich', 'plain', 'simple', 'missing', 'wrong', 'duplicate',
388 'rich', 'plain', 'simple', 'missing', 'wrong', 'duplicate',
378 'dangling', 'collision-early', 'collision-late', 'report')} <= set(normal.files))
389 'dangling', 'collision-early', 'collision-late', 'report')} <= set(normal.files))
390+ check('prepared initializer sources and exact reports are assembled',
391+ {f'tests/type-deferred-prepared/{name}.txt' for name in (
392+ 'good', 'tuple-only', 'wrong-unit', 'wrong-draft', 'unrelated-tag',
393+ 'mold-collision', 'no-final-cast', 'no-prelude', 'main',
394+ 'imported', 'expected', 'expected-control', 'expected-tuple-only')} <= set(normal.files))
379 check('cell branch sources are assembled',
395 check('cell branch sources are assembled',
380 {'tests/type-cell-branch/good.txt', 'tests/type-cell-branch/bad.txt'}
396 {'tests/type-cell-branch/good.txt', 'tests/type-cell-branch/bad.txt'}
381 <= set(normal.files))
397 <= set(normal.files))
382 check('direct gate source and golden are assembled',
398 check('direct gate source and golden are assembled',
383 {'tests/type-direct-gate/source.txt', 'tests/type-direct-gate/expected.txt'}
399 {'tests/type-direct-gate/source.txt', 'tests/type-direct-gate/expected.txt'}
384 <= set(normal.files))
400 <= 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))
385 check('todo partial golden and reused sources are assembled',
412 check('todo partial golden and reused sources are assembled',
386 {'tests/type-todo-partial/expected.txt', 'tests/type-gate-free/todo.txt',
413 {'tests/type-todo-partial/expected.txt', 'tests/type-gate-free/todo.txt',
387 'tests/type-api-paths/api.txt'} <= set(normal.files))
414 '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')