on master help sign in
Infer supported library import graphs
commit529736aa425a4d935b595c3622c2bb714376f404 authoriko <mail@iko.soy> dateFri 30 Oct 2026, 18:55 (7 hours ago) parent8b9c9ac
184 files changed+1714−336
README.md+1−1 docs/compiler.md+2−2 docs/development.md+5−3 docs/prelude-inventory.md+2 docs/status.md+9−7 jibb-dev/lib/jibb-import.hoon+21 jibb-dev/lib/jibb.hoon+177−31 jibb-dev/lib/jibb/prelude.jibb+14 tests/golden/module-import-atom-scheme/about.txt+4 tests/golden/module-import-atom-scheme/module-trees.txt+13 tests/golden/module-import-atom-scheme/modules.txt+2 tests/golden/module-import-atom-scheme/modules/ui/base.jibb+3 tests/golden/module-import-atom-scheme/modules/ui/mid.jibb+2 tests/golden/module-import-atom-scheme/source.jibb+4 tests/golden/module-import-atom-scheme/tokens.txt+31 tests/golden/module-import-atom-scheme/tree.txt+13 tests/golden/module-import-atom-scheme/types.txt+10 tests/golden/module-import-cycle/about.txt+4 tests/golden/module-import-cycle/module-trees.txt+16 tests/golden/module-import-cycle/modules.txt+2 tests/golden/module-import-cycle/modules/ui/a.jibb+2 tests/golden/module-import-cycle/modules/ui/b.jibb+2 tests/golden/module-import-cycle/path.txt+1 tests/golden/module-import-cycle/source.jibb+2 tests/golden/module-import-cycle/tokens.txt+14 tests/golden/module-import-cycle/tree.txt+5 tests/golden/module-import-cycle/types.txt+2 tests/golden/module-import-empty/about.txt+4 tests/golden/module-import-empty/modules.txt+1 tests/golden/module-import-empty/source.jibb+2 tests/golden/module-import-empty/tokens.txt+14 tests/golden/module-import-empty/tree.txt+5 tests/golden/module-import-empty/types.txt+2 tests/golden/module-import-face-shadow/about.txt+4 tests/golden/module-import-face-shadow/module-trees.txt+4 tests/golden/module-import-face-shadow/modules.txt+1 tests/golden/module-import-face-shadow/modules/ui/lib.jibb+1 tests/golden/module-import-face-shadow/source.jibb+4 tests/golden/module-import-face-shadow/tokens.txt+19 tests/golden/module-import-face-shadow/tree.txt+8 tests/golden/module-import-face-shadow/types.txt+2 tests/golden/module-import-identity/about.txt+4 tests/golden/module-import-identity/module-trees.txt+4 tests/golden/module-import-identity/modules.txt+1 tests/golden/module-import-identity/modules/ui/lib.jibb+1 tests/golden/module-import-identity/source.jibb+3 tests/golden/module-import-identity/tokens.txt+21 tests/golden/module-import-identity/tree.txt+8 tests/golden/module-import-identity/types.txt+3 tests/golden/module-import-invalid/about.txt+4 tests/golden/module-import-invalid/module-trees.txt+4 tests/golden/module-import-invalid/modules.txt+1 tests/golden/module-import-invalid/modules/ui/lib.jibb+1 tests/golden/module-import-invalid/source.jibb+2 tests/golden/module-import-invalid/tokens.txt+14 tests/golden/module-import-invalid/tree.txt+5 tests/golden/module-import-invalid/types.txt+2 tests/golden/module-import-missing-member/about.txt+4 tests/golden/module-import-missing-member/module-trees.txt+4 tests/golden/module-import-missing-member/modules.txt+1 tests/golden/module-import-missing-member/modules/ui/lib.jibb+1 tests/golden/module-import-missing-member/source.jibb+2 tests/golden/module-import-missing-member/tokens.txt+14 tests/golden/module-import-missing-member/tree.txt+5 tests/golden/module-import-missing-member/types.txt+2 tests/golden/module-import-mold/about.txt+4 tests/golden/module-import-mold/module-trees.txt+3 tests/golden/module-import-mold/modules.txt+1 tests/golden/module-import-mold/modules/ui/lib.jibb+1 tests/golden/module-import-mold/source.jibb+2 tests/golden/module-import-mold/tokens.txt+15 tests/golden/module-import-mold/tree.txt+6 tests/golden/module-import-mold/types.txt+2 tests/golden/module-import-prelude-cross-namespace/about.txt+4 tests/golden/module-import-prelude-cross-namespace/modules.txt+1 tests/golden/module-import-prelude-cross-namespace/source.jibb+1 tests/golden/module-import-prelude-cross-namespace/tokens.txt+7 tests/golden/module-import-prelude-cross-namespace/tree.txt+3 tests/golden/module-import-prelude-cross-namespace/types.txt+2 tests/golden/module-import-prelude-mold-shadow/about.txt+4 tests/golden/module-import-prelude-mold-shadow/modules.txt+1 tests/golden/module-import-prelude-mold-shadow/source.jibb+2 tests/golden/module-import-prelude-mold-shadow/tokens.txt+8 tests/golden/module-import-prelude-mold-shadow/tree.txt+3 tests/golden/module-import-prelude-mold-shadow/types.txt+2 tests/golden/module-import-prelude-sample-shadow/about.txt+4 tests/golden/module-import-prelude-sample-shadow/module-trees.txt+4 tests/golden/module-import-prelude-sample-shadow/modules.txt+1 tests/golden/module-import-prelude-sample-shadow/modules/ui/lib.jibb+1 tests/golden/module-import-prelude-sample-shadow/source.jibb+2 tests/golden/module-import-prelude-sample-shadow/tokens.txt+14 tests/golden/module-import-prelude-sample-shadow/tree.txt+4 tests/golden/module-import-prelude-sample-shadow/types.txt+2 tests/golden/module-import-prelude-value-shadow/about.txt+4 tests/golden/module-import-prelude-value-shadow/module-trees.txt+4 tests/golden/module-import-prelude-value-shadow/modules.txt+1 tests/golden/module-import-prelude-value-shadow/modules/ui/lib.jibb+1 tests/golden/module-import-prelude-value-shadow/source.jibb+2 tests/golden/module-import-prelude-value-shadow/tokens.txt+11 tests/golden/module-import-prelude-value-shadow/tree.txt+3 tests/golden/module-import-prelude-value-shadow/types.txt+2 tests/golden/module-import-root-cycle/about.txt+4 tests/golden/module-import-root-cycle/module-trees.txt+8 tests/golden/module-import-root-cycle/modules.txt+1 tests/golden/module-import-root-cycle/modules/ui/a.jibb+2 tests/golden/module-import-root-cycle/path.txt+1 tests/golden/module-import-root-cycle/source.jibb+2 tests/golden/module-import-root-cycle/tokens.txt+17 tests/golden/module-import-root-cycle/tree.txt+7 tests/golden/module-import-root-cycle/types.txt+2 tests/golden/module-import-root-import-shadow/about.txt+4 tests/golden/module-import-root-import-shadow/imports.txt+1 tests/golden/module-import-root-import-shadow/mar/label.txt+5 tests/golden/module-import-root-import-shadow/marks.txt+1 tests/golden/module-import-root-import-shadow/modules.txt+1 tests/golden/module-import-root-import-shadow/source.jibb+4 tests/golden/module-import-root-import-shadow/sur/fixture.txt+3 tests/golden/module-import-root-import-shadow/tokens.txt+20 tests/golden/module-import-root-import-shadow/tree.txt+7 tests/golden/module-import-root-import-shadow/types.txt+3 tests/golden/module-import-separate-namespaces/about.txt+4 tests/golden/module-import-separate-namespaces/module-trees.txt+5 tests/golden/module-import-separate-namespaces/modules.txt+1 tests/golden/module-import-separate-namespaces/modules/ui/lib.jibb+2 tests/golden/module-import-separate-namespaces/source.jibb+3 tests/golden/module-import-separate-namespaces/tokens.txt+22 tests/golden/module-import-separate-namespaces/tree.txt+9 tests/golden/module-import-separate-namespaces/types.txt+3 tests/golden/module-import-sur-scope/about.txt+4 tests/golden/module-import-sur-scope/imports.txt+1 tests/golden/module-import-sur-scope/module-trees.txt+6 tests/golden/module-import-sur-scope/modules.txt+1 tests/golden/module-import-sur-scope/modules/ui/lib.jibb+1 tests/golden/module-import-sur-scope/source.jibb+4 tests/golden/module-import-sur-scope/sur/fixture.txt+3 tests/golden/module-import-sur-scope/tokens.txt+25 tests/golden/module-import-sur-scope/tree.txt+10 tests/golden/module-import-sur-scope/types.txt+2 tests/golden/module-import-transitive/about.txt+4 tests/golden/module-import-transitive/module-trees.txt+20 tests/golden/module-import-transitive/modules.txt+3 tests/golden/module-import-transitive/modules/ui/a.jibb+2 tests/golden/module-import-transitive/modules/ui/b.jibb+2 tests/golden/module-import-transitive/modules/ui/c.jibb+1 tests/golden/module-import-transitive/path.txt+1 tests/golden/module-import-transitive/source.jibb+2 tests/golden/module-import-transitive/tokens.txt+14 tests/golden/module-import-transitive/tree.txt+5 tests/golden/module-import-transitive/types.txt+2 tests/golden/module-import-unused-invalid/about.txt+4 tests/golden/module-import-unused-invalid/module-trees.txt+8 tests/golden/module-import-unused-invalid/modules.txt+2 tests/golden/module-import-unused-invalid/modules/ui/good.jibb+1 tests/golden/module-import-unused-invalid/modules/ui/unused.jibb+1 tests/golden/module-import-unused-invalid/source.jibb+2 tests/golden/module-import-unused-invalid/tokens.txt+14 tests/golden/module-import-unused-invalid/tree.txt+5 tests/golden/module-import-unused-invalid/types.txt+2 tests/golden/prelude-unit-list-transforms/about.txt+2−2 tests/golden/prelude-unit-list-transforms/source.jibb+14 tests/golden/prelude-unit-list-transforms/tokens.txt+115−7 tests/golden/prelude-unit-list-transforms/tree.txt+54−1 tests/golden/prelude-unit-list-transforms/types.txt+2 tests/golden/types-module-fixtures/about.txt+1−1 tests/golden/types-module-fixtures/types.txt+1−5 tests/golden/types-module-mixed/about.txt+1−1 tests/golden/types-module-mixed/source.jibb−1 tests/golden/types-module-mixed/tokens.txt+11−18 tests/golden/types-module-mixed/tree.txt+7−8 tests/golden/types-module-mixed/types.txt−2 tests/importer/about.txt+2−1 tests/importer/small.txt+9 tests/importer/tree.txt+9 tests/lib/jibb-module-scope.hoon+24 tests/lib/jibb.hoon+378−233 tests/type-module-scope/about.txt+5 tests/type-module-scope/expected.txt+9 tools/golden+21−7 tools/golden_case.py+7 tools/importer-test+1−1 tools/ship+7−3 tools/testdata/selftest+21 tools/testdata/ship-selftest+11−1 tools/type-module-scope-test+31
README.md+1−1
@@ -16,7 +16,7 @@ Milestone 1 of the doc's eight, the parser and the `%jibb` mark, is done; milest
1616
1717## Golden tests
1818
19−Each case, `tests/golden/<case>/`, holds `source.jibb`, `about.txt` (where it comes from, what it tests, the expected outcome), and the expected outputs: `tokens.txt` from the layout pass and `tree.txt` from the parser. A file holds the output plus one trailing newline. A case may also have a `path.txt` specifying its logical `/ui/.../*.jibb` path. An `expect-types:` line in `about.txt` opts it into the provisional `golden-types` checker output in `types.txt`; `--update` creates it. A case can select Hoon molds in `imports.txt` and provide each module in `sur/<module>.txt`, or select marks in `marks.txt` and provide their source in `mar/<name>.txt`. `modules.txt` selects Jibb source fixtures, currently parsed but not typechecked; their trees go in `module-trees.txt`. See [docs/development.md](docs/development.md).
19+Each case, `tests/golden/<case>/`, holds `source.jibb`, `about.txt` (where it comes from, what it tests, the expected outcome), and the expected outputs: `tokens.txt` from the layout pass and `tree.txt` from the parser. A file holds the output plus one trailing newline. A case may also have a `path.txt` specifying its logical `/ui/.../*.jibb` path. An `expect-types:` line in `about.txt` opts it into the provisional `golden-types` checker output in `types.txt`; `--update` creates it. A case can select Hoon molds in `imports.txt` and provide each module in `sur/<module>.txt`, or select marks in `marks.txt` and provide their source in `mar/<name>.txt`. `modules.txt` selects Jibb source fixtures; their trees go in `module-trees.txt`, and the partial checker can resolve a subset of library imports. See [docs/development.md](docs/development.md).
2020
2121Run them without a ship. This needs `urbit` on PATH and Python 3.
2222
docs/compiler.md+2−2
@@ -58,11 +58,11 @@ The core is split into chapters, `+| %name`, in this order:
5858
5959The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, unfaced cells, a two-binder cell pattern, a complete two-arm loobean branch, closed local mold aliases and acyclic forward value references. It instantiates generalized top-level definitions when they are used. Acyclic local value definitions can refer forward and generalize variables that are free of their enclosing environment; captured variables and explicit capitals remain shared. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Recursive local groups, and recursive, generic, union or faced local molds remain unsupported. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, its imports, faces, general patterns, deferred constraints, recursive or generic molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types. The current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
6060
61−The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. Nested `$^`, other nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms and unfaced cells from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts those same shapes from declared mark imports in a separate list. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
61+The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. Nested `$^`, including `$^` in collection arguments, is rejected until its source branches can be checked; other nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms and unfaced cells from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts those same shapes from declared mark imports in a separate list. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; `tools/importer-test` compares the internal projection under eval, and the ship test compares the same golden output. `tools/type-import-test` and `tools/type-mark-test` compare bridge reports under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
6262
6363Callers that have a `/sur` core and a name can use `+read-named`: it checks for a locally declared arm before asking Hoon to evaluate the mold, and reports evaluation failures with the final Hoon trace line. `+read-mold-in` remains available when the caller already has the selected type. The checker currently treats a failed import as unsupported rather than rendering the importer's error.
6464
65−`+golden-types-with-modules` accepts case-local Jibb module sources alongside `/sur` and mark results. It identifies whether each declared `/=` has a supplied source, but does not resolve or typecheck the imported module yet.
65+`+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, exporting supported closed value schemes and simple mold aliases. It reserves names from the supplied prelude, detects missing sources and cycles, and rejects a dependency if its interface cannot be inferred by the fragment. API files, modules with `main`, unsupported definitions and many other features remain outside this subset; the prelude inventory itself is incomplete. The older `+golden-types-with-modules` entry point fails closed for imports because it has no prelude scope. Neither entry point claims the module has been checked.
6666
6767And the design notes:
6868
docs/development.md+5−3
@@ -62,6 +62,7 @@ git clone https://github.com/urbit/tools /root/src/tools
6262| `tools/importer-test` | Compares the partial Hoon importer's diagnostic trees and errors with `tests/importer/tree.txt` under `urbit eval` |
6363| `tools/type-import-test` | Composes the Hoon importer with the partial checker and compares `tests/type-import/expected.txt` under eval |
6464| `tools/type-mark-test` | Checks the partial checker’s mark import boundary against `tests/type-mark/expected.txt` under eval |
65+| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary against `tests/type-module-scope/expected.txt` under eval |
6566| `tools/clay-fixtures` | Syncs `my-app`, builds its example `/sur` files and marks through Clay, checks selected mold and mark projections and the partial checker, and records Ford and mark subject shapes on the fake ship |
6667| `tools/hoon` | Evaluates Hoon with the library in scope, as `tools/hoon '(golden /a/b/jibb (crip "++ main view"))'`; `--cord name=file` binds a file's text, `-f` reads the expression from a file |
6768| `tools/doc-blocks` | Checks the doc's `jibb` blocks against the `doc-*` golden cases: `tools/doc-blocks docs/spec` |
@@ -78,8 +79,9 @@ tools/golden # all cases pass
7879tools/importer-test # Hoon importer fixture projections match
7980tools/type-import-test # importer/checker bridge golden report matches
8081tools/type-mark-test # mark/checker bridge golden report matches
82+tools/type-module-scope-test # module/prelude scope golden report matches
8183tools/hoon check-spans-test # prints <<>>
82−tools/testdata/selftest # 21 checks, 0 failed
84+tools/testdata/selftest # 22 checks, 0 failed
8385tools/doc-blocks docs/spec # every jibb block has its case
8486tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
8587tools/ship test # the cases pass as -test arms on the ship
@@ -88,7 +90,7 @@ tools/ship check-commit # when the mark or the desks changed
8890tools/clay-fixtures # when the my-app Hoon fixtures or importer changed
8991```
9092
91−`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. It also runs the independent `tests/lib/jibb-import.hoon` test against the same importer fixtures and expected diagnostic projection as `tools/importer-test`. The projection is an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` also runs the importer/checker bridge fixture on the ship; `tools/type-import-test` runs the same report under eval. The mark bridge has its own `tests/lib/jibb-mark-bridge.hoon` ship test and `tools/type-mark-test` eval test; both compare the same fixture report.
93+`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. It also runs the independent `tests/lib/jibb-import.hoon` test against the same importer fixtures and expected diagnostic projection as `tools/importer-test`. The projection is an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` also runs the importer/checker bridge fixture on the ship; `tools/type-import-test` runs the same report under eval. The mark bridge has its own `tests/lib/jibb-mark-bridge.hoon` ship test and `tools/type-mark-test` eval test; both compare the same fixture report. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
9294
9395## Golden cases
9496
@@ -100,7 +102,7 @@ A case is a folder `tests/golden/<name>/` holding:
100102- optionally, `path.txt`, the logical `/ui/.../*.jibb` path to pass to the compiler; the source remains `source.jibb`.
101103- optionally, an `expect-types:` line in `about.txt` opts the case into `+golden-types`; `types.txt` holds its output plus one newline and `--update` creates it. A `types.txt` also opts in when the line is absent. This interface is provisional while the checker is under construction.
102104- optionally, `imports.txt` selects Hoon `/sur` molds, one `module mold` pair per line. Each module's source goes in `sur/<module>.txt` and is compiled against zuse by both runners. `marks.txt` selects marks, one name per line, with source in `mar/<name>.txt`; both kinds may be supplied together. The reader results go to the partial checker, and a type output is required. Both runners reconstruct fixture text from `%txt` lines and identify the fixture if its compilation crashes; a crash fails the case without discarding its successful parse output. These fixtures currently handle only sources without Ford imports.
103−- optionally, `modules.txt` lists logical `/ui/.../*.jibb` paths, one per line. The corresponding sources live below the case's `modules/ui/` directory. Both runners parse each source at its logical path and compare the combined `module-trees.txt`; `--update` writes that output. A case with type output also supplies these sources to the partial checker, which reports Jibb module imports as unsupported; it does not resolve or typecheck them yet.
105+- optionally, `modules.txt` lists logical `/ui/.../*.jibb` paths, one per line. The corresponding sources live below the case's `modules/ui/` directory. Both runners parse each source at its logical path and compare the combined `module-trees.txt`; `--update` writes that output. A case with type output also supplies these sources and the vendored prelude source to the partial module checker, so it can reserve prelude names. The file opts in even when it lists no sources; use a comment such as `# no module fixtures` for an empty bundle, since zero-byte `%txt` fixtures do not sync reliably on the ship. Blank lines and comment lines are ignored. The checker is partial; its output says what it did and did not check.
104106
105107A zero-byte mark fixture currently fails ship synchronization validation after commit. Use a newline-only fixture to test an empty Hoon source on the ship.
106108
docs/prelude-inventory.md+2
@@ -43,6 +43,8 @@ The following is an audit of the Hoon 135 bodies, not a completed Jibb interface
4343
4444`snoc`, `lure`, `fand`, `find`, `flop`, `gulf`, `homo`, `join`, `bake`, `lent`, `levy`, `lien`, `limo`, `murn`, `oust`, `reap`, `rear`, `reel`, `roll`, `scag`, `skid`, `skim`, `skip`, `slag`, `snag`, `snip`, `sort`, `spin`, `spun`, `swag`, `turn`, `weld`, `snap`, `into`, `welp`, `zing`.
4545
46+The current prelude writes `snoc`, `lure`, `flop`, `reel`, `roll`, `skim`, `skip`, `turn` and `weld`. The folds take an explicit initial value as the Prelude table specifies. These implementations still need checker and backend validation.
47+
4648## 2c
4749
4850`bex`, `can`, `cat`, `cut`, `end`, `fil`, `hew`, `lsh`, `met`, `rap`, `rep`, `rev`, `rig`, `rip`, `rsh`, `run`, `rut`, `sew`, `swp`, `xeb`, `fe`.
docs/status.md+9−7
@@ -19,7 +19,7 @@ On 2026-10-30, @iko decided that Jibb drops `$?`, so a `+$` takes a union's case
1919
2020## Milestone 2: in progress
2121
22−The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms and unfaced cells from `/sur` molds and marks into inference. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, and direct `$^` unions whose cases can be proved disjoint. Ambiguous recursive origins fail closed; nested `$^`, other nested ordered maps, general union disjointness and complete import integration remain unfinished. Jibb module sources can be supplied to the partial checker, which does not yet resolve them. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, and simple acyclic local mold aliases. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive local groups, more complex local molds, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; its golden fixtures include three real Tlon files. The prelude currently has only a few functions, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
22+The repository spec records the subsequent type-system and prelude decisions; those changes also need synchronization to the Claude document. An initial inference fragment and a standalone Hoon type reader are being tested. The fragment explicitly reports that it does not check a module; partial bridges pass selected Hoon atoms and unfaced cells from `/sur` molds and marks into inference. The reader handles mark samples, recursive molds whose origins can be verified through Ford imports, nested collections, direct ordered maps, certain ordered-map fields, and direct `$^` unions whose cases can be proved disjoint. Ambiguous recursive origins fail closed; nested `$^`, other nested ordered maps, general union disjointness and complete import integration remain unfinished. The partial checker resolves a subset of ordinary library imports in dependency order using supplied Jibb sources and the current prelude names, and detects missing sources and cycles. It does not yet check API or kind semantics, and the prelude inventory is incomplete. The inference fragment supports unrestricted `@`, selected one-way widenings including aura-family ancestors, generalized atom constraints arising from explicit capitals or bare sample binders, acyclic local value definitions with captures, and simple acyclic local mold aliases. Unfixed decimal literals default to `@ud` in gate-free inferred types; recursive local groups, more complex local molds, other constraint cases and defaulting inside gate types still need work. Collection recognition checks the originating core and fails closed on shadows or unsupported Ford subject shapes; its golden fixtures include three real Tlon files. The prelude currently has only a few functions, and [prelude-inventory.md](prelude-inventory.md) is a source audit, not the complete inventory or signatures. The milestone remains unfinished.
2323
2424## Milestone 1: parser and mark
2525
@@ -37,9 +37,9 @@ What the plan asks for, and where it is:
3737
3838Besides the plan's list:
3939
40−- 417 golden cases: 201 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
41−- The 417-case corpus passed under `urbit eval` in 22.2 s. The fake ship passed all 421 tests, including the importer, importer/checker and mark/checker bridges, and unification checks, with 19.5 s for sync and 16.6 s for tests. The importer golden compares 81 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.
42−- `tools/testdata/selftest` (21 checks) and `tools/testdata/ship-selftest` test the tools themselves.
40+- 435 golden cases: 219 that parse and 216 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
41+- The 435-case corpus passed under `urbit eval` in 25.7 s. The fake ship passed all 440 tests, including the importer, importer/checker and mark/checker bridges, module scope and unification checks, with 20.3 s for sync and 27.3 s for tests. The importer golden compares 90 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.
42+- `tools/testdata/selftest` (22 checks) and `tools/testdata/ship-selftest` test the tools themselves.
4343- 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.
4444- 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).
4545
@@ -63,23 +63,25 @@ Besides the plan's list:
6363| bd37989 | 2026-10-30 | Read mark samples and test partial mark imports; reject unproven nested `$^`; preserve atom constraints through aliases |
6464| 2d5deb2 | 2026-10-30 | Default gate-free decimal types, validate named Hoon mold lookup, and isolate fixture failures |
6565| 1b7dbae | 2026-10-30 | Infer acyclic local definitions and parse case-local Jibb module fixtures |
66−| This change | 2026-10-30 | Preserve recursive import origins, infer simple local molds, and supply Jibb module sources to the partial checker |
66+| 8b9c9ac | 2026-10-30 | Preserve recursive import origins, infer simple local molds, and supply Jibb module sources to the partial checker |
67+| This change | 2026-10-30 | Infer supported library import graphs and guard nested Hoon `$^` in collections |
6768
6869## Checking it
6970
7071On a machine set up as [development.md](development.md) says:
7172
7273```
73−tools/golden # 417 cases under urbit eval
74+tools/golden # 435 cases under urbit eval
7475tools/importer-test # the Hoon importer fixture projection
7576tools/type-import-test # the importer/checker bridge fixture
7677tools/type-mark-test # the mark/checker bridge fixture
78+tools/type-module-scope-test # module and prelude scope fixture
7779tools/hoon check-spans-test # prints <<>> when the span checker works
7880tools/testdata/selftest # the tools themselves
7981tools/doc-blocks docs/spec # the doc's examples are golden cases
8082tools/ship start
8183tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
82−tools/ship test # the same 417 cases as -test arms on the ship
84+tools/ship test # the same 435 cases as -test arms on the ship
8385tools/testdata/ship-selftest
8486tools/ship check-commit # |commit stores .jibb files
8587tools/clay-fixtures # example /sur files and marks build through Clay
jibb-dev/lib/jibb-import.hoon+21
@@ -372,6 +372,16 @@
372372:: checked for disjointness. The tested axis follows the field path;
373373:: tracking that path distinguishes a nested $^ from an ordinary $@.
374374:: Other Hoon code can look the same, so some valid molds may be rejected.
375+:: Collection argument syntax retains $^ as %bckt, before Hoon
376+:: reduces the resulting type and can collapse overlapping cases. Until
377+:: argument-level disjointness is checked, reject those source forms.
378+++ has-spec-cell-union
379+ |= h=*
380+ ^- ?
381+ ?@ h |
382+ ?: ?=([%bckt ^ ^] h) &
383+ |($(h -.h) $(h +.h))
384+::
375385++ has-cell-union
376386 |= h=hoon
377387 ^- ?
@@ -643,6 +653,8 @@
643653 [%fork (sort cases |=(pair=[imported imported] (dor -.pair +.pair)))]
644654 [%hint *] $(typ q.typ)
645655 [%hold *]
656+ ?: &(?=([%tsls [%note * *] *] q.typ) (has-spec-cell-union q.typ))
657+ [%bad 'a Hoon $^ union needs a source-level disjointness check']
646658 =/ named=(unit term) (match-signature q.typ sig)
647659 ?^ named
648660 =/ name u.named
@@ -1010,6 +1022,15 @@
10101022 (crip "gate: {(show-result (sample %gate-test))}")
10111023 (crip "vase: {(show-result vase)}")
10121024 (crip "failed-branch: {(show-result (read-mold %external %bad bad-branch-fixture))}")
1025+ (crip "list-bckt-field: {(show-result (sample %list-bckt-field))}")
1026+ (crip "list-noun-overlap: {(show-result (sample %list-noun-overlap))}")
1027+ (crip "list-null-overlap: {(show-result (sample %list-null-overlap))}")
1028+ (crip "list-nested-atom-cell: {(show-result (sample %list-nested-atom-cell))}")
1029+ (crip "list-nested-valid-cell: {(show-result (sample %list-nested-valid-cell))}")
1030+ (crip "list-nested-invalid-cell: {(show-result (sample %list-nested-invalid-cell))}")
1031+ (crip "map-nested-invalid-cell: {(show-result (sample %map-nested-invalid-cell))}")
1032+ (crip "set-direct-invalid-cell: {(show-result (sample %set-direct-invalid-cell))}")
1033+ (crip "map-key-invalid-cell: {(show-result (sample %map-key-invalid-cell))}")
10131034 (crip "nested-atom-cell: {(show-result (sample %nested-atom-cell))}")
10141035 (crip "nested-valid-cell: {(show-result (sample %nested-valid-cell))}")
10151036 (crip "nested-invalid-cell: {(show-result (sample %nested-invalid-cell))}")
jibb-dev/lib/jibb.hoon+177−31
@@ -4859,13 +4859,16 @@
48594859::
48604860+$ ischeme [typ=itype vars=(list @ud)]
48614861+$ ienv (list [name=term scheme=ischeme])
4862++$ imold-types (list [name=term typ=itype])
4863++$ ifile [values=ienv molds=imold-types]
4864++$ ijimports (list [face=term interface=ifile])
48624865+$ icaps (list [name=@t id=@ud])
48634866+$ imolds (list [name=term body=shape])
48644867:: A caller supplies the exact noun returned by +read-mold:jibb-import.
48654868:: This core has no Ford dependencies; unrecognized payloads fail closed.
48664869+$ iexternals (list [module=term name=term result=*])
48674870+$ imark-externals (list [mark=term result=*])
4868−+$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) active=(list term) in-mold=?]
4871++$ istate [next=@ud sub=isub caps=icaps binders=(list @ud) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) active=(list term) in-mold=?]
48694872+$ idiag [msg=tape sites=(list [at=span note=tape])]
48704873+$ iresult (each [typ=itype state=istate] idiag)
48714874+$ isample-result (each [typ=itype env=ienv state=istate] tape)
@@ -5104,6 +5107,22 @@
51045107 ?. ?=(%& -.result) ~
51055108 (import-to-itype +.result)
51065109::
5110+++ find-jibb-interface
5111+ |= [face=term imports=ijimports]
5112+ ^- (unit ifile)
5113+ ?~ imports ~
5114+ ?: =(face face.i.imports) `interface.i.imports
5115+ $(imports t.imports)
5116+::
5117+++ find-jibb-mold
5118+ |= [name=term iface=ifile]
5119+ ^- (unit itype)
5120+ =/ ms=imold-types molds.iface
5121+ |-
5122+ ?~ ms ~
5123+ ?: =(name name.i.ms) `typ.i.ms
5124+ $(ms t.ms)
5125+::
51075126++ infer-simple-shape
51085127 |= [sh=shape state=istate]
51095128 ^- (unit [typ=itype state=istate])
@@ -5124,6 +5143,11 @@
51245143 =/ n=term i.names.sh
51255144 ?^ t.names.sh
51265145 ?^ t.t.names.sh ~
5146+ =/ iface=(unit ifile) (find-jibb-interface i.t.names.sh jimports.state)
5147+ ?^ iface
5148+ =/ found=(unit itype) (find-jibb-mold n u.iface)
5149+ ?~ found ~
5150+ `[u.found state]
51275151 =/ found=(unit itype)
51285152 (find-imported-mold i.t.names.sh n externals.state surs.state)
51295153 ?~ found ~
@@ -5239,6 +5263,7 @@
52395263 ?. (unique-value-name n names) |
52405264 ?: (lien molds.state |=(m=[name=term body=shape] =(n name.m))) |
52415265 ?: (lien marks.state |=(m=term =(n m))) |
5266+ ?: (lien reserved-molds.state |=(m=term =(n m))) |
52425267 ?: (lien surs.state |=(m=term =(n m))) |
52435268 $(locals t.locals)
52445269::
@@ -5297,7 +5322,14 @@
52975322 [%& [%atom %t] state]
52985323 %wing
52995324 ?~ names.e [%| ["empty wing" ~]]
5300− ?^ t.names.e [%| ["field access is not supported by partial inference" ~]]
5325+ ?^ t.names.e
5326+ ?^ t.t.names.e [%| ["field access is not supported by partial inference" ~]]
5327+ =/ iface=(unit ifile) (find-jibb-interface i.t.names.e jimports.state)
5328+ ?~ iface [%| ["field access is not supported by partial inference" ~]]
5329+ =/ member=(unit ischeme) (ienv-lookup i.names.e values.u.iface)
5330+ ?~ member [%| ["module member is not available to partial inference" ~]]
5331+ =/ instance=[typ=itype state=istate] (instantiate-scheme u.member state)
5332+ [%& typ.instance state.instance]
53015333 =/ scheme=(unit ischeme) (ienv-lookup i.names.e env)
53025334 ?~ scheme [%| ["name is not available to partial inference" ~]]
53035335 =/ instance=[typ=itype state=istate] (instantiate-scheme u.scheme state)
@@ -5598,14 +5630,14 @@
55985630 |
55995631::
56005632++ add-supported-defs
5601− |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term)]
5633+ |= [ds=(list def) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term)]
56025634 ^- ienv
56035635 ?~ ds env
56045636 =/ d=def i.ds
56055637 ?: ?=(%mold -.d) $(ds t.ds)
56065638 ?. (unique-value-name name.d globals) $(ds t.ds)
56075639 ?^ (ienv-lookup name.d env) $(ds t.ds)
5608− =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks ~ |])
5640+ =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ |])
56095641 ?: ?=(%| -.result) $(ds t.ds)
56105642 ?: (constrained-capitals caps.state.p.result sub.state.p.result) $(ds t.ds)
56115643 =/ typ=itype (default-decimals (itype-normalize typ.p.result sub.state.p.result))
@@ -5615,11 +5647,11 @@
56155647 $(ds t.ds, env [[name.d [typ vars]] env])
56165648::
56175649++ resolve-supported-defs
5618− |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term)]
5650+ |= [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)]
56195651 ^- ienv
56205652 =/ env=ienv ~
56215653 |-
5622− =/ next=ienv (add-supported-defs ds env molds globals externals surs mark-externals marks)
5654+ =/ next=ienv (add-supported-defs ds env molds globals externals surs mark-externals marks jimports reserved-molds)
56235655 ?: =(next env) env
56245656 $(env next)
56255657::
@@ -5807,33 +5839,141 @@
58075839 ^- @t
58085840 (golden-types-with-marks file src externals ~)
58095841::
5810−:: +golden-types-with-modules: record supplied Jibb sources separately.
5811−:: Module imports are not resolved yet; neither supplied nor missing
5812−:: source makes the partial report a checked module.
5842+:: A supplied module is addressed by its logical /ui/.../name/jibb path.
5843+:: Interfaces are closed inference schemes, never raw source shapes.
5844+:: Recursive modules, APIs, derived gates and unsupported definitions do
5845+:: not yield an interface. The reachable graph is checked before the root.
5846+::
5847++$ jsource [at=path source=@t]
5848++$ jbundle (list jsource)
5849++$ jfile-result (each ifile @t)
5850++$ jimports-result (each ijimports @t)
5851+::
5852+++ import-binding-names
5853+ |= imports=(list import)
5854+ ^- (list term)
5855+ ?~ imports ~
5856+ =/ n=term
5857+ ?- -.i.imports
5858+ %jibb face.i.imports
5859+ %sur name.i.imports
5860+ %mark mark.i.imports
5861+ ==
5862+ [n $(imports t.imports)]
5863+::
5864+++ module-scope-valid
5865+ |= [mod=module prelude-values=(list term) prelude-molds=(list term)]
5866+ ^- ?
5867+ =/ imported=(list term) (import-binding-names imports.mod)
5868+ =/ vals=(list term) (global-value-names defs.mod)
5869+ =/ molds=imolds (collect-simple-molds defs.mod)
5870+ =/ mold-names=(list term) (turn molds |=(m=[name=term body=shape] name.m))
5871+ ?. %+ levy imported
5872+ |= n=term
5873+ &((unique-value-name n imported) !(lien vals |=(v=term =(n v))) !(lien mold-names |=(m=term =(n m))) !(lien prelude-values |=(v=term =(n v))) !(lien prelude-molds |=(m=term =(n m))))
5874+ |
5875+ ?. (levy vals |=(n=term &((unique-value-name n vals) !(lien prelude-values |=(v=term =(n v)))))) |
5876+ (levy mold-names |=(n=term &((unique-value-name n mold-names) !(lien prelude-molds |=(m=term =(n m))))))
5877+::
5878+++ module-mold-types
5879+ |= [molds=imolds state=istate]
5880+ ^- (each imold-types @t)
5881+ ?~ molds [%& ~]
5882+ =/ m=[name=term body=shape] i.molds
5883+ =/ t=(unit [typ=itype state=istate])
5884+ (infer-simple-shape body.m state(active [name.m active.state], in-mold &))
5885+ ?~ t [%| 'module mold needs unsupported inference']
5886+ ?: ?=(^ (itype-vars typ.u.t)) [%| 'module mold has unsupported variables']
5887+ =/ rest=(each imold-types @t) $(molds t.molds)
5888+ ?: ?=(%| -.rest) rest
5889+ [%& [[name.m typ.u.t] p.rest]]
5890+::
5891+++ module-values-complete
5892+ |= [ds=(list def) env=ienv]
5893+ ^- ?
5894+ ?~ ds &
5895+ ?: ?=(%mold -.i.ds) $(ds t.ds)
5896+ ?~ (ienv-lookup name.i.ds env) |
5897+ $(ds t.ds)
5898+::
5899+++ resolve-jibb-imports
5900+ |= [imports=(list import) externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term)]
5901+ ^- jimports-result
5902+ ?~ imports [%& ~]
5903+ ?. ?=(%jibb -.i.imports) $(imports t.imports)
5904+ =/ at=path (weld path.i.imports `path`~[%jibb])
5905+ ?: (lien active |=(p=path =(p at)))
5906+ [%| (crip "import cycle at {(spud at)}")]
5907+ =/ found=jbundle (skim modules |=(m=jsource =(at at.m)))
5908+ ?~ found [%| (crip "module source missing: {(spud at)}")]
5909+ ?^ t.found [%| (crip "duplicate module sources: {(spud at)}")]
5910+ =/ iface=jfile-result (infer-jibb-file at source.i.found externals mark-externals modules [at active] prelude-values prelude-molds)
5911+ ?: ?=(%| -.iface) [%| p.iface]
5912+ =/ rest=jimports-result $(imports t.imports)
5913+ ?: ?=(%| -.rest) rest
5914+ [%& [[face.i.imports p.iface] p.rest]]
5915+::
5916+++ infer-jibb-file
5917+ |= [at=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle active=(list path) prelude-values=(list term) prelude-molds=(list term)]
5918+ ^- jfile-result
5919+ ?: ?=([%ui %api *] at) [%| (crip "API module needs unsupported inference: {(spud at)}")]
5920+ =/ parsed (parse at src)
5921+ ?: ?=(%| -.parsed) [%| (crip "module source does not parse: {(spud at)}")]
5922+ =/ mod=module p.parsed
5923+ ?. (module-scope-valid mod prelude-values prelude-molds) [%| (crip "module has conflicting names: {(spud at)}")]
5924+ =/ vals=(list term) (global-value-names defs.mod)
5925+ ?: (lien vals |=(n=term =(n %main)))
5926+ [%| (crip "module kind needs unsupported inference: {(spud at)}")]
5927+ =/ js=jimports-result (resolve-jibb-imports imports.mod externals mark-externals modules active prelude-values prelude-molds)
5928+ ?: ?=(%| -.js) [%| p.js]
5929+ =/ molds=imolds (collect-simple-molds defs.mod)
5930+ =/ globals=(list term) (weld prelude-values (weld (import-binding-names imports.mod) vals))
5931+ =/ surs=(list term) (collect-sur-imports imports.mod)
5932+ =/ marks=(list term) (collect-mark-imports imports.mod)
5933+ =/ reserved=(list term) (weld prelude-molds (turn p.js |=(j=[face=term interface=ifile] face.j)))
5934+ =/ state=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks p.js reserved ~ |]
5935+ =/ mts=(each imold-types @t) (module-mold-types molds state)
5936+ ?: ?=(%| -.mts) [%| (crip "{(trip p.mts)}: {(spud at)}")]
5937+ =/ env=ienv (resolve-supported-defs defs.mod molds globals externals surs mark-externals marks p.js reserved)
5938+ ?. (module-values-complete defs.mod env)
5939+ [%| (crip "module definitions need unsupported inference: {(spud at)}")]
5940+ [%& [env p.mts]]
5941+::
5942+:: +golden-types-with-modules fails closed for imports without prelude
5943+:: scope. +golden-types-with-prelude resolves supported library graphs;
5944+:: its report remains partial and unreachable sources are not examined.
58135945::
58145946++ golden-types-with-modules
5815− |= [file=path src=@t externals=iexternals mark-externals=imark-externals modules=(list [at=path source=@t])]
5947+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle]
58165948 ^- @t
58175949 =/ parsed (parse file src)
58185950 ?: ?=(%| -.parsed) (show-error src p.parsed)
5819− =/ report=@t (golden-types-with-marks file src externals mark-externals)
5820− =/ imports=(list import) imports.p.parsed
5821− =/ lines=(list @t) ~
5822− |-
5823− ?~ imports
5824− ?~ lines report
5825− (of-wain:format [report (flop lines)])
5826− ?. ?=(%jibb -.i.imports) $(imports t.imports)
5827− =/ at=path (weld path.i.imports `path`~[%jibb])
5828− =/ found=(list [at=path source=@t])
5829− (skim modules |=(m=[at=path source=@t] =(at at.m)))
5830− =/ status=tape
5831− ?~ found "source missing"
5832− ?^ t.found "duplicate sources"
5833− "source supplied"
5834− =/ line=@t
5835− (crip "/= {(trip face.i.imports)} {(spud path.i.imports)}: {status}; module import is not supported by partial inference")
5836− $(imports t.imports, lines [line lines])
5951+ ?: (lien imports.p.parsed |=(i=import ?=(%jibb -.i)))
5952+ 'partial inference; module not checked\0aprelude source missing; module import inference unsupported'
5953+ (golden-types-with-marks file src externals mark-externals)
5954+::
5955+:: The caller supplies the actual prelude source. Its current names are
5956+:: reserved, but its incomplete inventory and types are not checked here.
5957+::
5958+++ golden-types-with-prelude
5959+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals modules=jbundle prelude-source=@t]
5960+ ^- @t
5961+ =/ parsed (parse file src)
5962+ ?: ?=(%| -.parsed) (show-error src p.parsed)
5963+ ?: =(0 prelude-source) 'partial inference; module not checked\0aprelude source missing; module import inference unsupported'
5964+ =/ prelude (parse /lib/jibb/prelude/jibb prelude-source)
5965+ ?: ?=(%| -.prelude) 'partial inference; module not checked\0aprelude source does not parse; module import inference unsupported'
5966+ =/ prelude-values=(list term) (global-value-names defs.p.prelude)
5967+ =/ prelude-molds=(list term)
5968+ (turn (collect-simple-molds defs.p.prelude) |=(m=[name=term body=shape] name.m))
5969+ ?. (module-scope-valid p.parsed prelude-values prelude-molds)
5970+ 'partial inference; module not checked\0amodule has conflicting names'
5971+ =/ js=jimports-result
5972+ (resolve-jibb-imports imports.p.parsed externals mark-externals modules ~[file] prelude-values prelude-molds)
5973+ ?: ?=(%| -.js) (of-wain:format ~['partial inference; module not checked' p.js])
5974+ =/ scope-values=(list term)
5975+ (weld prelude-values (weld (collect-sur-imports imports.p.parsed) (collect-mark-imports imports.p.parsed)))
5976+ (golden-types-in-context file src externals mark-externals p.js scope-values prelude-molds)
58375977::
58385978:: +golden-types-with-marks: supply declared mark types separately from /sur
58395979:: entries, as [mark result] with the result from +read-mark:jibb-import.
@@ -5842,14 +5982,20 @@
58425982++ golden-types-with-marks
58435983 |= [file=path src=@t externals=iexternals mark-externals=imark-externals]
58445984 ^- @t
5985+ (golden-types-in-context file src externals mark-externals ~ ~ ~)
5986+::
5987+++ golden-types-in-context
5988+ |= [file=path src=@t externals=iexternals mark-externals=imark-externals jimports=ijimports prelude-values=(list term) reserved-molds=(list term)]
5989+ ^- @t
5990+ =. reserved-molds (weld reserved-molds (turn jimports |=(j=[face=term interface=ifile] face.j)))
58455991 =/ parsed (parse file src)
58465992 ?: ?=(%| -.parsed) (show-error src p.parsed)
58475993 =/ ds=(list def) defs.p.parsed
58485994 =/ molds=imolds (collect-simple-molds ds)
5849− =/ globals=(list term) (global-value-names ds)
5995+ =/ globals=(list term) (weld prelude-values (weld (turn jimports |=(j=[face=term interface=ifile] face.j)) (global-value-names ds)))
58505996 =/ surs=(list term) (collect-sur-imports imports.p.parsed)
58515997 =/ marks=(list term) (collect-mark-imports imports.p.parsed)
5852− =/ env=ienv (resolve-supported-defs ds molds globals externals surs mark-externals marks)
5998+ =/ env=ienv (resolve-supported-defs ds molds globals externals surs mark-externals marks jimports reserved-molds)
58535999 =/ lines=(list @t) ~
58546000 |-
58556001 ?~ ds (of-wain:format ['partial inference; module not checked' (flop lines)])
@@ -5858,7 +6004,7 @@
58586004 $(ds t.ds, lines [(show-partial-mold file src d molds) lines])
58596005 ?. (unique-value-name name.d globals)
58606006 $(ds t.ds, lines [(crip "++ {(trip name.d)}: name already in scope") lines])
5861− =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks ~ |])
6007+ =/ result=iresult (infer-fragment val.d env [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ |])
58626008 ?: ?=(%| -.result)
58636009 $(ds t.ds, lines [(show-inference-diagnostic file src name.d p.result) lines])
58646010 ?: (constrained-capitals caps.state.p.result sub.state.p.result)
jibb-dev/lib/jibb/prelude.jibb+14
@@ -195,3 +195,17 @@
195195 ?- (predicate item)
196196 %.y (skip rest predicate)
197197 %.n [item (skip rest predicate)]
198+
199+++ roll |= args=[(list A) B $-([A B] B)]
200+ ?- args
201+ [xs start combine]
202+ ?- xs
203+ ~ start
204+ [item rest] (roll rest (combine item start) combine)
205+
206+++ reel |= args=[(list A) B $-([A B] B)]
207+ ?- args
208+ [xs start combine]
209+ ?- xs
210+ ~ start
211+ [item rest] (combine item (reel rest start combine))
tests/golden/module-import-atom-scheme/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; type variables are generalized per `++`.
2+tests: An exported atom-constrained gate re-exported by an intermediate module is instantiated independently for @p and @t and rejects a cell.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-atom-scheme/module-trees.txtnew file+13
@@ -0,0 +1,13 @@
1+/ui/mid.jibb
2+(module
3+ (jibb 1:1 base /ui/base)
4+ (value 2:1 alias (wing 2:10 keep.base)))
5+/ui/base.jibb
6+(module
7+ (value 1:1 keep
8+ (gate 1:9
9+ (bind 1:12 x)
10+ (body 2:3
11+ (trace 2:3
12+ (cast 2:6 (aura 2:9 @) (wing 2:11 x))
13+ (body 3:5 (wing 3:5 x)))))))
tests/golden/module-import-atom-scheme/modules.txtnew file+2
@@ -0,0 +1,2 @@
1+/ui/mid.jibb
2+/ui/base.jibb
tests/golden/module-import-atom-scheme/modules/ui/base.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ keep |= x
2+ ~& ^- @ x
3+ x
tests/golden/module-import-atom-scheme/modules/ui/mid.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= base /ui/base
2+++ alias keep.base
tests/golden/module-import-atom-scheme/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+/= mid /ui/mid
2+++ ship (alias.mid ~zod)
3+++ text-value (alias.mid "hello")
4+++ bad (alias.mid [~zod "hi"])
tests/golden/module-import-atom-scheme/tokens.txtnew file+31
@@ -0,0 +1,31 @@
1+1:1 glyph /=
2+1:5 name mid
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot mid
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name ship
10+2:9 glyph (
11+2:10 tight wing alias.mid
12+2:20 lit ~zod
13+2:24 tight glyph )
14+3:1 NEWLINE
15+3:1 glyph ++
16+3:4 name text-value
17+3:15 glyph (
18+3:16 tight wing alias.mid
19+3:26 str "hello"
20+3:33 tight glyph )
21+4:1 NEWLINE
22+4:1 glyph ++
23+4:4 name bad
24+4:8 glyph (
25+4:9 tight wing alias.mid
26+4:19 glyph [
27+4:20 tight lit ~zod
28+4:25 str "hi"
29+4:29 tight glyph ]
30+4:30 tight glyph )
31+4:31 NEWLINE
tests/golden/module-import-atom-scheme/tree.txtnew file+13
@@ -0,0 +1,13 @@
1+(module
2+ (jibb 1:1 mid /ui/mid)
3+ (value 2:1 ship
4+ (group 2:9
5+ (call 2:10 (wing 2:10 alias.mid) (lit 2:20 ~zod))))
6+ (value 3:1 text-value
7+ (group 3:15
8+ (call 3:16 (wing 3:16 alias.mid) (str 3:26 "hello"))))
9+ (value 4:1 bad
10+ (group 4:8
11+ (call 4:9
12+ (wing 4:9 alias.mid)
13+ (tuple 4:19 (lit 4:20 ~zod) (str 4:25 "hi"))))))
tests/golden/module-import-atom-scheme/types.txtnew file+10
@@ -0,0 +1,10 @@
1+partial inference; module not checked
2+++ ship: @p
3+++ text-value: @t
4+++ bad: call's sample and argument types do not unify
5+/tests/golden/module-import-atom-scheme/source.jibb:4:9: called gate has type $-(A A) where A is an atom
6+++ bad (alias.mid [~zod "hi"])
7+ ^
8+/tests/golden/module-import-atom-scheme/source.jibb:4:19: argument has type [@p @t]
9+++ bad (alias.mid [~zod "hi"])
10+ ^
tests/golden/module-import-cycle/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: A cycle between supplied modules is reported without recursing forever.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-cycle/module-trees.txtnew file+16
@@ -0,0 +1,16 @@
1+/ui/a.jibb
2+(module
3+ (jibb 1:1 b /ui/b)
4+ (value 2:1 identity
5+ (gate-wide 2:13
6+ (bind 2:16 x)
7+ (group 2:18
8+ (call 2:19 (wing 2:19 identity.b) (wing 2:30 x))))))
9+/ui/b.jibb
10+(module
11+ (jibb 1:1 a /ui/a)
12+ (value 2:1 identity
13+ (gate-wide 2:13
14+ (bind 2:16 x)
15+ (group 2:18
16+ (call 2:19 (wing 2:19 identity.a) (wing 2:30 x))))))
tests/golden/module-import-cycle/modules.txtnew file+2
@@ -0,0 +1,2 @@
1+/ui/a.jibb
2+/ui/b.jibb
tests/golden/module-import-cycle/modules/ui/a.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= b /ui/b
2+++ identity |=(x (identity.b x))
tests/golden/module-import-cycle/modules/ui/b.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= a /ui/a
2+++ identity |=(x (identity.a x))
tests/golden/module-import-cycle/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/main.jibb
tests/golden/module-import-cycle/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= a /ui/a
2+++ text (identity.a "hi")
tests/golden/module-import-cycle/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name a
3+1:7 glyph /
4+1:8 tight knot ui
5+1:10 tight glyph /
6+1:11 tight knot a
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name text
10+2:9 glyph (
11+2:10 tight wing identity.a
12+2:21 str "hi"
13+2:25 tight glyph )
14+2:26 NEWLINE
tests/golden/module-import-cycle/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 a /ui/a)
3+ (value 2:1 text
4+ (group 2:9
5+ (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
tests/golden/module-import-cycle/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+import cycle at /ui/a/jibb
tests/golden/module-import-empty/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: An explicit empty source bundle reports the missing imported module.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-empty/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/module-import-empty/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ x (identity.lib "hi")
tests/golden/module-import-empty/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name x
10+2:6 glyph (
11+2:7 tight wing identity.lib
12+2:20 str "hi"
13+2:24 tight glyph )
14+2:25 NEWLINE
tests/golden/module-import-empty/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 x
4+ (group 2:6
5+ (call 2:7 (wing 2:7 identity.lib) (str 2:20 "hi")))))
tests/golden/module-import-empty/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module source missing: /ui/lib/jibb
tests/golden/module-import-face-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; type variables are generalized per `++`.
2+tests: A body-local mold cannot shadow an imported module face.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-face-shadow/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate-wide 1:13 (bind 1:16 x) (wing 1:18 x))))
tests/golden/module-import-face-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-face-shadow/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |=(x x)
tests/golden/module-import-face-shadow/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+/= lib /ui/lib
2+++ f |= x
3+ +$ lib @t
4+ x
tests/golden/module-import-face-shadow/tokens.txtnew file+19
@@ -0,0 +1,19 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name f
10+2:6 glyph |=
11+2:9 name x
12+3:3 INDENT
13+3:3 glyph +$
14+3:6 name lib
15+3:10 aura @t
16+4:3 NEWLINE
17+4:3 name x
18+4:4 DEDENT
19+4:4 NEWLINE
tests/golden/module-import-face-shadow/tree.txtnew file+8
@@ -0,0 +1,8 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 f
4+ (gate 2:6
5+ (bind 2:9 x)
6+ (body 3:3
7+ (mold 3:3 lib (aura 3:10 @t))
8+ (wing 4:3 x)))))
tests/golden/module-import-face-shadow/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ f: local molds shadow a name
tests/golden/module-import-identity/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: An imported identity is instantiated independently for a cord and a ship.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-identity/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate-wide 1:13 (bind 1:16 x) (wing 1:18 x))))
tests/golden/module-import-identity/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-identity/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |=(x x)
tests/golden/module-import-identity/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+/= lib /ui/lib
2+++ text (identity.lib "hi")
3+++ ship (identity.lib ~zod)
tests/golden/module-import-identity/tokens.txtnew file+21
@@ -0,0 +1,21 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name text
10+2:9 glyph (
11+2:10 tight wing identity.lib
12+2:23 str "hi"
13+2:27 tight glyph )
14+3:1 NEWLINE
15+3:1 glyph ++
16+3:4 name ship
17+3:9 glyph (
18+3:10 tight wing identity.lib
19+3:23 lit ~zod
20+3:27 tight glyph )
21+3:28 NEWLINE
tests/golden/module-import-identity/tree.txtnew file+8
@@ -0,0 +1,8 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 text
4+ (group 2:9
5+ (call 2:10 (wing 2:10 identity.lib) (str 2:23 "hi"))))
6+ (value 3:1 ship
7+ (group 3:9
8+ (call 3:10 (wing 3:10 identity.lib) (lit 3:23 ~zod)))))
tests/golden/module-import-identity/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2+++ text: @t
3+++ ship: @p
tests/golden/module-import-invalid/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: A malformed imported module is reported at its logical path.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-invalid/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/lib.jibb
2+/ui/lib.jibb:1:10: expected a mold, on its line or a deeper one, found the end of the file
3++$ broken
4+ ^
tests/golden/module-import-invalid/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-invalid/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1++$ broken
tests/golden/module-import-invalid/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ x (identity.lib "hi")
tests/golden/module-import-invalid/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name x
10+2:6 glyph (
11+2:7 tight wing identity.lib
12+2:20 str "hi"
13+2:24 tight glyph )
14+2:25 NEWLINE
tests/golden/module-import-invalid/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 x
4+ (group 2:6
5+ (call 2:7 (wing 2:7 identity.lib) (str 2:20 "hi")))))
tests/golden/module-import-invalid/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module source does not parse: /ui/lib/jibb
tests/golden/module-import-missing-member/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: A missing member of a supplied module is reported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-missing-member/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate-wide 1:13 (bind 1:16 x) (wing 1:18 x))))
tests/golden/module-import-missing-member/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-missing-member/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |=(x x)
tests/golden/module-import-missing-member/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ x (absent.lib "hi")
tests/golden/module-import-missing-member/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name x
10+2:6 glyph (
11+2:7 tight wing absent.lib
12+2:18 str "hi"
13+2:22 tight glyph )
14+2:23 NEWLINE
tests/golden/module-import-missing-member/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 x
4+ (group 2:6
5+ (call 2:7 (wing 2:7 absent.lib) (str 2:18 "hi")))))
tests/golden/module-import-missing-member/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ x: module member is not available to partial inference
tests/golden/module-import-mold/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: A simple named mold exported by an imported module is used in a sample.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-mold/module-trees.txtnew file+3
@@ -0,0 +1,3 @@
1+/ui/lib.jibb
2+(module
3+ (mold 1:1 title (aura 1:10 @t)))
tests/golden/module-import-mold/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-mold/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1++$ title @t
tests/golden/module-import-mold/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ identity |= x=title.lib x
tests/golden/module-import-mold/tokens.txtnew file+15
@@ -0,0 +1,15 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name identity
10+2:13 glyph |=
11+2:16 name x
12+2:17 tight glyph =
13+2:18 tight wing title.lib
14+2:28 name x
15+2:29 NEWLINE
tests/golden/module-import-mold/tree.txtnew file+6
@@ -0,0 +1,6 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 identity
4+ (gate 2:13
5+ (face 2:16 x (ref 2:18 title.lib))
6+ (wing 2:28 x))))
tests/golden/module-import-mold/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ identity: $-(@t @t)
tests/golden/module-import-prelude-cross-namespace/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; molds and values have separate namespaces.
2+tests: A value may share the prelude mold `list` name because the namespaces are separate.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-prelude-cross-namespace/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/module-import-prelude-cross-namespace/source.jibbnew file+1
@@ -0,0 +1 @@
1+++ list |=(x x)
tests/golden/module-import-prelude-cross-namespace/tokens.txtnew file+7
@@ -0,0 +1,7 @@
1+1:1 glyph ++
2+1:4 name list
3+1:9 glyph |=(
4+1:12 tight name x
5+1:14 name x
6+1:15 tight glyph )
7+1:16 NEWLINE
tests/golden/module-import-prelude-cross-namespace/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (value 1:1 list
3+ (gate-wide 1:9 (bind 1:12 x) (wing 1:14 x))))
tests/golden/module-import-prelude-cross-namespace/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ list: $-(A A)
tests/golden/module-import-prelude-mold-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; molds and values have separate namespaces.
2+tests: A root mold cannot shadow the prelude mold `list`, even with no imports.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-prelude-mold-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no modules
tests/golden/module-import-prelude-mold-shadow/source.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ list @t
2+++ x 1
tests/golden/module-import-prelude-mold-shadow/tokens.txtnew file+8
@@ -0,0 +1,8 @@
1+1:1 glyph +$
2+1:4 name list
3+1:9 aura @t
4+2:1 NEWLINE
5+2:1 glyph ++
6+2:4 name x
7+2:6 lit 1
8+2:7 NEWLINE
tests/golden/module-import-prelude-mold-shadow/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (mold 1:1 list (aura 1:9 @t))
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-prelude-mold-shadow/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names
tests/golden/module-import-prelude-sample-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; molds and values have separate namespaces.
2+tests: A gate sample cannot shadow the prelude value `same`.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-prelude-sample-shadow/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate-wide 1:13 (bind 1:16 x) (wing 1:18 x))))
tests/golden/module-import-prelude-sample-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-prelude-sample-shadow/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |=(x x)
tests/golden/module-import-prelude-sample-shadow/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ f |=(same same)
tests/golden/module-import-prelude-sample-shadow/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name f
10+2:6 glyph |=(
11+2:9 tight name same
12+2:14 name same
13+2:18 tight glyph )
14+2:19 NEWLINE
tests/golden/module-import-prelude-sample-shadow/tree.txtnew file+4
@@ -0,0 +1,4 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 f
4+ (gate-wide 2:6 (bind 2:9 same) (wing 2:14 same))))
tests/golden/module-import-prelude-sample-shadow/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ f: sample shadows a name
tests/golden/module-import-prelude-value-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; molds and values have separate namespaces.
2+tests: An imported value cannot shadow the prelude value `same`.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-prelude-value-shadow/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 same
4+ (gate-wide 1:9 (bind 1:12 x) (wing 1:14 x))))
tests/golden/module-import-prelude-value-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-prelude-value-shadow/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ same |=(x x)
tests/golden/module-import-prelude-value-shadow/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ x 1
tests/golden/module-import-prelude-value-shadow/tokens.txtnew file+11
@@ -0,0 +1,11 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name x
10+2:6 lit 1
11+2:7 NEWLINE
tests/golden/module-import-prelude-value-shadow/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-prelude-value-shadow/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names: /ui/lib/jibb
tests/golden/module-import-root-cycle/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: A cycle back to the root uses its explicit logical path.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-root-cycle/module-trees.txtnew file+8
@@ -0,0 +1,8 @@
1+/ui/a.jibb
2+(module
3+ (jibb 1:1 main /ui/main)
4+ (value 2:1 identity
5+ (gate-wide 2:13
6+ (bind 2:16 x)
7+ (group 2:18
8+ (call 2:19 (wing 2:19 identity.main) (wing 2:33 x))))))
tests/golden/module-import-root-cycle/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/a.jibb
tests/golden/module-import-root-cycle/modules/ui/a.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= main /ui/main
2+++ identity |=(x (identity.main x))
tests/golden/module-import-root-cycle/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/main.jibb
tests/golden/module-import-root-cycle/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= a /ui/a
2+++ identity |=(x (identity.a x))
tests/golden/module-import-root-cycle/tokens.txtnew file+17
@@ -0,0 +1,17 @@
1+1:1 glyph /=
2+1:5 name a
3+1:7 glyph /
4+1:8 tight knot ui
5+1:10 tight glyph /
6+1:11 tight knot a
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name identity
10+2:13 glyph |=(
11+2:16 tight name x
12+2:18 glyph (
13+2:19 tight wing identity.a
14+2:30 name x
15+2:31 tight glyph )
16+2:32 tight glyph )
17+2:33 NEWLINE
tests/golden/module-import-root-cycle/tree.txtnew file+7
@@ -0,0 +1,7 @@
1+(module
2+ (jibb 1:1 a /ui/a)
3+ (value 2:1 identity
4+ (gate-wide 2:13
5+ (bind 2:16 x)
6+ (group 2:18
7+ (call 2:19 (wing 2:19 identity.a) (wing 2:30 x))))))
tests/golden/module-import-root-cycle/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+import cycle at /ui/main/jibb
tests/golden/module-import-root-import-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included".
2+tests: Samples in the root module cannot shadow names declared by `/-` or `/%`; an explicit empty Jibb module bundle opts into module-aware checking.
3+expect: parses
4+expect-types: partial inference reports each shadowing sample
tests/golden/module-import-root-import-shadow/imports.txtnew file+1
@@ -0,0 +1 @@
1+fixture title
tests/golden/module-import-root-import-shadow/mar/label.txtnew file+5
@@ -0,0 +1,5 @@
1+|_ a=@t
2+++ grab |% ++ noun @t --
3+++ grow |% ++ noun a --
4+++ grad %noun
5+--
tests/golden/module-import-root-import-shadow/marks.txtnew file+1
@@ -0,0 +1 @@
1+label
tests/golden/module-import-root-import-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+# no module fixtures
tests/golden/module-import-root-import-shadow/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+/- fixture
2+/% %label
3+++ shadow-sur |=(fixture fixture)
4+++ shadow-mark |=(label label)
tests/golden/module-import-root-import-shadow/sur/fixture.txtnew file+3
@@ -0,0 +1,3 @@
1+|%
2++$ title @t
3+--
tests/golden/module-import-root-import-shadow/tokens.txtnew file+20
@@ -0,0 +1,20 @@
1+1:1 glyph /-
2+1:5 name fixture
3+2:1 NEWLINE
4+2:1 glyph /%
5+2:5 lit %label
6+3:1 NEWLINE
7+3:1 glyph ++
8+3:4 name shadow-sur
9+3:15 glyph |=(
10+3:18 tight name fixture
11+3:26 name fixture
12+3:33 tight glyph )
13+4:1 NEWLINE
14+4:1 glyph ++
15+4:4 name shadow-mark
16+4:16 glyph |=(
17+4:19 tight name label
18+4:25 name label
19+4:30 tight glyph )
20+4:31 NEWLINE
tests/golden/module-import-root-import-shadow/tree.txtnew file+7
@@ -0,0 +1,7 @@
1+(module
2+ (sur 1:1 fixture)
3+ (mark 2:1 %label)
4+ (value 3:1 shadow-sur
5+ (gate-wide 3:15 (bind 3:18 fixture) (wing 3:26 fixture)))
6+ (value 4:1 shadow-mark
7+ (gate-wide 4:16 (bind 4:19 label) (wing 4:25 label))))
tests/golden/module-import-root-import-shadow/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2+++ shadow-sur: sample shadows a name
3+++ shadow-mark: sample shadows a name
tests/golden/module-import-separate-namespaces/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "No name may shadow one already in scope, imports and the prelude included"; molds and values have separate namespaces.
2+tests: A mold and a value may share a name because their namespaces are separate.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-separate-namespaces/module-trees.txtnew file+5
@@ -0,0 +1,5 @@
1+/ui/lib.jibb
2+(module
3+ (mold 1:1 thing (aura 1:10 @t))
4+ (value 2:1 thing
5+ (gate-wide 2:10 (bind 2:13 x) (wing 2:15 x))))
tests/golden/module-import-separate-namespaces/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-separate-namespaces/modules/ui/lib.jibbnew file+2
@@ -0,0 +1,2 @@
1++$ thing @t
2+++ thing |=(x x)
tests/golden/module-import-separate-namespaces/source.jibbnew file+3
@@ -0,0 +1,3 @@
1+/= lib /ui/lib
2+++ f |= x=thing.lib x
3+++ y (thing.lib "hi")
tests/golden/module-import-separate-namespaces/tokens.txtnew file+22
@@ -0,0 +1,22 @@
1+1:1 glyph /=
2+1:5 name lib
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name f
10+2:6 glyph |=
11+2:9 name x
12+2:10 tight glyph =
13+2:11 tight wing thing.lib
14+2:21 name x
15+3:1 NEWLINE
16+3:1 glyph ++
17+3:4 name y
18+3:6 glyph (
19+3:7 tight wing thing.lib
20+3:17 str "hi"
21+3:21 tight glyph )
22+3:22 NEWLINE
tests/golden/module-import-separate-namespaces/tree.txtnew file+9
@@ -0,0 +1,9 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 f
4+ (gate 2:6
5+ (face 2:9 x (ref 2:11 thing.lib))
6+ (wing 2:21 x)))
7+ (value 3:1 y
8+ (group 3:6
9+ (call 3:7 (wing 3:7 thing.lib) (str 3:17 "hi")))))
tests/golden/module-import-separate-namespaces/types.txtnew file+3
@@ -0,0 +1,3 @@
1+partial inference; module not checked
2+++ f: $-(@t @t)
3+++ y: @t
tests/golden/module-import-sur-scope/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: A module may not see the root module’s Hoon import without declaring it.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-sur-scope/imports.txtnew file+1
@@ -0,0 +1 @@
1+fixture title
tests/golden/module-import-sur-scope/module-trees.txtnew file+6
@@ -0,0 +1,6 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 identity
4+ (gate 1:13
5+ (face 1:16 x (ref 1:18 title.fixture))
6+ (wing 1:32 x))))
tests/golden/module-import-sur-scope/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-import-sur-scope/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |= x=title.fixture x
tests/golden/module-import-sur-scope/source.jibbnew file+4
@@ -0,0 +1,4 @@
1+/- fixture
2+/= lib /ui/lib
3+++ root |= x=title.fixture x
4+++ imported (identity.lib "hi")
tests/golden/module-import-sur-scope/sur/fixture.txtnew file+3
@@ -0,0 +1,3 @@
1+|%
2++$ title @t
3+--
tests/golden/module-import-sur-scope/tokens.txtnew file+25
@@ -0,0 +1,25 @@
1+1:1 glyph /-
2+1:5 name fixture
3+2:1 NEWLINE
4+2:1 glyph /=
5+2:5 name lib
6+2:9 glyph /
7+2:10 tight knot ui
8+2:12 tight glyph /
9+2:13 tight knot lib
10+3:1 NEWLINE
11+3:1 glyph ++
12+3:4 name root
13+3:9 glyph |=
14+3:12 name x
15+3:13 tight glyph =
16+3:14 tight wing title.fixture
17+3:28 name x
18+4:1 NEWLINE
19+4:1 glyph ++
20+4:4 name imported
21+4:13 glyph (
22+4:14 tight wing identity.lib
23+4:27 str "hi"
24+4:31 tight glyph )
25+4:32 NEWLINE
tests/golden/module-import-sur-scope/tree.txtnew file+10
@@ -0,0 +1,10 @@
1+(module
2+ (sur 1:1 fixture)
3+ (jibb 2:1 lib /ui/lib)
4+ (value 3:1 root
5+ (gate 3:9
6+ (face 3:12 x (ref 3:14 title.fixture))
7+ (wing 3:28 x)))
8+ (value 4:1 imported
9+ (group 4:13
10+ (call 4:14 (wing 4:14 identity.lib) (str 4:27 "hi")))))
tests/golden/module-import-sur-scope/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module definitions need unsupported inference: /ui/lib/jibb
tests/golden/module-import-transitive/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: Imported modules use a transitive, explicitly supplied A-to-B-to-C dependency chain.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-transitive/module-trees.txtnew file+20
@@ -0,0 +1,20 @@
1+/ui/a.jibb
2+(module
3+ (jibb 1:1 b /ui/b)
4+ (value 2:1 identity
5+ (gate-wide 2:13
6+ (bind 2:16 x)
7+ (group 2:18
8+ (call 2:19 (wing 2:19 identity.b) (wing 2:30 x))))))
9+/ui/b.jibb
10+(module
11+ (jibb 1:1 c /ui/c)
12+ (value 2:1 identity
13+ (gate-wide 2:13
14+ (bind 2:16 x)
15+ (group 2:18
16+ (call 2:19 (wing 2:19 identity.c) (wing 2:30 x))))))
17+/ui/c.jibb
18+(module
19+ (value 1:1 identity
20+ (gate-wide 1:13 (bind 1:16 x) (wing 1:18 x))))
tests/golden/module-import-transitive/modules.txtnew file+3
@@ -0,0 +1,3 @@
1+/ui/a.jibb
2+/ui/b.jibb
3+/ui/c.jibb
tests/golden/module-import-transitive/modules/ui/a.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= b /ui/b
2+++ identity |=(x (identity.b x))
tests/golden/module-import-transitive/modules/ui/b.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= c /ui/c
2+++ identity |=(x (identity.c x))
tests/golden/module-import-transitive/modules/ui/c.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |=(x x)
tests/golden/module-import-transitive/path.txtnew file+1
@@ -0,0 +1 @@
1+/ui/main.jibb
tests/golden/module-import-transitive/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= a /ui/a
2+++ text (identity.a "hi")
tests/golden/module-import-transitive/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name a
3+1:7 glyph /
4+1:8 tight knot ui
5+1:10 tight glyph /
6+1:11 tight knot a
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name text
10+2:9 glyph (
11+2:10 tight wing identity.a
12+2:21 str "hi"
13+2:25 tight glyph )
14+2:26 NEWLINE
tests/golden/module-import-transitive/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 a /ui/a)
3+ (value 2:1 text
4+ (group 2:9
5+ (call 2:10 (wing 2:10 identity.a) (str 2:21 "hi")))))
tests/golden/module-import-transitive/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ text: @t
tests/golden/module-import-unused-invalid/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: `/=` imports a Jibb module; import cycles are errors.
2+tests: An unused malformed fixture is parsed in module-trees but must not invalidate import inference.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-unused-invalid/module-trees.txtnew file+8
@@ -0,0 +1,8 @@
1+/ui/good.jibb
2+(module
3+ (value 1:1 identity
4+ (gate-wide 1:13 (bind 1:16 x) (wing 1:18 x))))
5+/ui/unused.jibb
6+/ui/unused.jibb:1:10: expected a mold, on its line or a deeper one, found the end of the file
7++$ broken
8+ ^
tests/golden/module-import-unused-invalid/modules.txtnew file+2
@@ -0,0 +1,2 @@
1+/ui/good.jibb
2+/ui/unused.jibb
tests/golden/module-import-unused-invalid/modules/ui/good.jibbnew file+1
@@ -0,0 +1 @@
1+++ identity |=(x x)
tests/golden/module-import-unused-invalid/modules/ui/unused.jibbnew file+1
@@ -0,0 +1 @@
1++$ broken
tests/golden/module-import-unused-invalid/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= good /ui/good
2+++ text (identity.good "hi")
tests/golden/module-import-unused-invalid/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:5 name good
3+1:10 glyph /
4+1:11 tight knot ui
5+1:13 tight glyph /
6+1:14 tight knot good
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name text
10+2:9 glyph (
11+2:10 tight wing identity.good
12+2:24 str "hi"
13+2:28 tight glyph )
14+2:29 NEWLINE
tests/golden/module-import-unused-invalid/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 good /ui/good)
3+ (value 2:1 text
4+ (group 2:9
5+ (call 2:10 (wing 2:10 identity.good) (str 2:24 "hi")))))
tests/golden/module-import-unused-invalid/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+++ text: @t
tests/golden/prelude-unit-list-transforms/about.txt+2−2
@@ -1,4 +1,4 @@
1−source: Overview, Prelude: "The exported inventory includes all names from the Hoon library sections listed below, excluding the groups explicitly left out"; Hoon 2a includes `drop`, `bind`, `biff`, `both` and `clef`, and 2b includes `skim` and `skip`.
2−tests: The complete current prelude parses, including unit-to-list conversion, unit mapping and flat mapping, two ways to combine units, and the complementary list filters. Both filters retain the order of their selected items.
1+source: Overview, Prelude: "The exported inventory includes all names from the Hoon library sections listed below, excluding the groups explicitly left out"; Hoon 2a includes `drop`, `bind`, `biff`, `both` and `clef`, and 2b includes `skim`, `skip`, `roll` and `reel`. Folds take an explicit start.
2+tests: The complete current prelude parses, including unit-to-list conversion, unit mapping and flat mapping, two ways to combine units, complementary list filters, and left and right folds. The filters retain the order of their selected items.
33expect: parses
44expect-types: a partial inference report, not a checked module; unit and list gate typing is not complete
tests/golden/prelude-unit-list-transforms/source.jibb+14
@@ -195,3 +195,17 @@
195195 ?- (predicate item)
196196 %.y (skip rest predicate)
197197 %.n [item (skip rest predicate)]
198+
199+++ roll |= args=[(list A) B $-([A B] B)]
200+ ?- args
201+ [xs start combine]
202+ ?- xs
203+ ~ start
204+ [item rest] (roll rest (combine item start) combine)
205+
206+++ reel |= args=[(list A) B $-([A B] B)]
207+ ?- args
208+ [xs start combine]
209+ ?- xs
210+ ~ start
211+ [item rest] (combine item (reel rest start combine))
tests/golden/prelude-unit-list-transforms/tokens.txt+115−7
@@ -1200,10 +1200,118 @@
12001200197:34 name predicate
12011201197:43 tight glyph )
12021202197:44 tight glyph ]
1203−197:45 DEDENT
1204−197:45 DEDENT
1205−197:45 DEDENT
1206−197:45 DEDENT
1207−197:45 DEDENT
1208−197:45 DEDENT
1209−197:45 NEWLINE
1203+199:1 DEDENT
1204+199:1 DEDENT
1205+199:1 DEDENT
1206+199:1 DEDENT
1207+199:1 DEDENT
1208+199:1 DEDENT
1209+199:1 NEWLINE
1210+199:1 glyph ++
1211+199:4 name roll
1212+199:9 glyph |=
1213+199:12 name args
1214+199:16 tight glyph =
1215+199:17 tight glyph [
1216+199:18 tight glyph (
1217+199:19 tight name list
1218+199:24 tvar A
1219+199:25 tight glyph )
1220+199:27 tvar B
1221+199:29 glyph $-(
1222+199:32 tight glyph [
1223+199:33 tight tvar A
1224+199:35 tvar B
1225+199:36 tight glyph ]
1226+199:38 tvar B
1227+199:39 tight glyph )
1228+199:40 tight glyph ]
1229+200:3 INDENT
1230+200:3 glyph ?-
1231+200:6 name args
1232+201:5 INDENT
1233+201:5 glyph [
1234+201:6 tight name xs
1235+201:9 name start
1236+201:15 name combine
1237+201:22 tight glyph ]
1238+202:7 INDENT
1239+202:7 glyph ?-
1240+202:10 name xs
1241+203:9 INDENT
1242+203:9 lit ~
1243+203:11 name start
1244+204:9 NEWLINE
1245+204:9 glyph [
1246+204:10 tight name item
1247+204:15 name rest
1248+204:19 tight glyph ]
1249+204:21 glyph (
1250+204:22 tight name roll
1251+204:27 name rest
1252+204:32 glyph (
1253+204:33 tight name combine
1254+204:41 name item
1255+204:46 name start
1256+204:51 tight glyph )
1257+204:53 name combine
1258+204:60 tight glyph )
1259+206:1 DEDENT
1260+206:1 DEDENT
1261+206:1 DEDENT
1262+206:1 DEDENT
1263+206:1 NEWLINE
1264+206:1 glyph ++
1265+206:4 name reel
1266+206:9 glyph |=
1267+206:12 name args
1268+206:16 tight glyph =
1269+206:17 tight glyph [
1270+206:18 tight glyph (
1271+206:19 tight name list
1272+206:24 tvar A
1273+206:25 tight glyph )
1274+206:27 tvar B
1275+206:29 glyph $-(
1276+206:32 tight glyph [
1277+206:33 tight tvar A
1278+206:35 tvar B
1279+206:36 tight glyph ]
1280+206:38 tvar B
1281+206:39 tight glyph )
1282+206:40 tight glyph ]
1283+207:3 INDENT
1284+207:3 glyph ?-
1285+207:6 name args
1286+208:5 INDENT
1287+208:5 glyph [
1288+208:6 tight name xs
1289+208:9 name start
1290+208:15 name combine
1291+208:22 tight glyph ]
1292+209:7 INDENT
1293+209:7 glyph ?-
1294+209:10 name xs
1295+210:9 INDENT
1296+210:9 lit ~
1297+210:11 name start
1298+211:9 NEWLINE
1299+211:9 glyph [
1300+211:10 tight name item
1301+211:15 name rest
1302+211:19 tight glyph ]
1303+211:21 glyph (
1304+211:22 tight name combine
1305+211:30 name item
1306+211:35 glyph (
1307+211:36 tight name reel
1308+211:41 name rest
1309+211:46 name start
1310+211:52 name combine
1311+211:59 tight glyph )
1312+211:60 tight glyph )
1313+211:61 DEDENT
1314+211:61 DEDENT
1315+211:61 DEDENT
1316+211:61 DEDENT
1317+211:61 NEWLINE
tests/golden/prelude-unit-list-transforms/tree.txt+54−1
@@ -504,4 +504,57 @@
504504 (tuple 197:17
505505 (wing 197:18 item)
506506 (group 197:23
507− (call 197:24 (wing 197:24 skip) (wing 197:29 rest) (wing 197:34 predicate))))))))))))))))
507+ (call 197:24 (wing 197:24 skip) (wing 197:29 rest) (wing 197:34 predicate)))))))))))))))
508+ (value 199:1 roll
509+ (gate 199:9
510+ (face 199:12 args
511+ (cell 199:17
512+ (apply 199:18 list (tvar 199:24 A))
513+ (tvar 199:27 B)
514+ (fn 199:29
515+ (cell 199:32 (tvar 199:33 A) (tvar 199:35 B))
516+ (tvar 199:38 B))))
517+ (body 200:3
518+ (branch 200:3
519+ (wing 200:6 args)
520+ (arm 201:5
521+ (cell 201:5 (bind 201:6 xs) (bind 201:9 start) (bind 201:15 combine))
522+ (body 202:7
523+ (branch 202:7
524+ (wing 202:10 xs)
525+ (arm 203:9 (lit 203:9 ~) (wing 203:11 start))
526+ (arm 204:9
527+ (cell 204:9 (bind 204:10 item) (bind 204:15 rest))
528+ (group 204:21
529+ (call 204:22
530+ (wing 204:22 roll)
531+ (wing 204:27 rest)
532+ (group 204:32
533+ (call 204:33 (wing 204:33 combine) (wing 204:41 item) (wing 204:46 start)))
534+ (wing 204:53 combine)))))))))))
535+ (value 206:1 reel
536+ (gate 206:9
537+ (face 206:12 args
538+ (cell 206:17
539+ (apply 206:18 list (tvar 206:24 A))
540+ (tvar 206:27 B)
541+ (fn 206:29
542+ (cell 206:32 (tvar 206:33 A) (tvar 206:35 B))
543+ (tvar 206:38 B))))
544+ (body 207:3
545+ (branch 207:3
546+ (wing 207:6 args)
547+ (arm 208:5
548+ (cell 208:5 (bind 208:6 xs) (bind 208:9 start) (bind 208:15 combine))
549+ (body 209:7
550+ (branch 209:7
551+ (wing 209:10 xs)
552+ (arm 210:9 (lit 210:9 ~) (wing 210:11 start))
553+ (arm 211:9
554+ (cell 211:9 (bind 211:10 item) (bind 211:15 rest))
555+ (group 211:21
556+ (call 211:22
557+ (wing 211:22 combine)
558+ (wing 211:30 item)
559+ (group 211:35
560+ (call 211:36 (wing 211:36 reel) (wing 211:41 rest) (wing 211:46 start) (wing 211:52 combine))))))))))))))
tests/golden/prelude-unit-list-transforms/types.txt+2
@@ -46,3 +46,5 @@ partial inference; module not checked
4646++ clef: sample mold is not supported by partial inference
4747++ skim: sample mold is not supported by partial inference
4848++ skip: sample mold is not supported by partial inference
49+++ roll: sample mold is not supported by partial inference
50+++ reel: sample mold is not supported by partial inference
tests/golden/types-module-fixtures/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Overview, worked example 2: the published page imports its API and card component with `/=`.
2−tests: The case carries two Jibb module sources at their logical paths; both runners parse and compare their trees and supply them to partial inference. Module import resolution and typing remain unsupported.
2+tests: The case carries two Jibb module sources at their logical paths; both runners parse and compare their trees and supply them to partial inference. The API module needs unsupported inference.
33expect: parses
44expect-types: a partial report that does not claim module checking
tests/golden/types-module-fixtures/types.txt+1−5
@@ -1,6 +1,2 @@
11partial inference; module not checked
2−++ main: multiple arguments are not supported by partial inference
3−++ load: sample mold is not supported by partial inference
4−++ view: sample mold is not supported by partial inference
5−/= api /ui/api/blog: source supplied; module import is not supported by partial inference
6−/= card /ui/components/card: source supplied; module import is not supported by partial inference
2+API module needs unsupported inference: /ui/api/blog/jibb
tests/golden/types-module-mixed/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Imports: `/-` imports Hoon molds, `/%` imports a mark type and `/=` imports a Jibb module.
2−tests: The partial checker receives a Hoon mold, a mark and one Jibb module source together; it can infer the two supported Hoon types but reports Jibb module resolution unsupported for both the supplied source and the missing source.
2+tests: The partial checker receives a Hoon mold, a mark and a Jibb library module together; it infers the two supported Hoon types without claiming the module is fully checked.
33expect: parses
44expect-types: a partial report; Jibb module import resolution is unsupported
tests/golden/types-module-mixed/source.jibb−1
@@ -1,6 +1,5 @@
11/- fixture
22/% %label
33/= extra /ui/helper
4−/= missing /ui/missing
54++ label-id |= x=label x
65++ title-id |= x=title.fixture x
tests/golden/types-module-mixed/tokens.txt+11−18
@@ -11,26 +11,19 @@
11113:14 tight glyph /
12123:15 tight knot helper
13134:1 NEWLINE
14−4:1 glyph /=
15−4:5 name missing
16−4:13 glyph /
17−4:14 tight knot ui
18−4:16 tight glyph /
19−4:17 tight knot missing
14+4:1 glyph ++
15+4:4 name label-id
16+4:13 glyph |=
17+4:16 name x
18+4:17 tight glyph =
19+4:18 tight name label
20+4:24 name x
20215:1 NEWLINE
21225:1 glyph ++
22−5:4 name label-id
23+5:4 name title-id
23245:13 glyph |=
24255:16 name x
25265:17 tight glyph =
26−5:18 tight name label
27−5:24 name x
28−6:1 NEWLINE
29−6:1 glyph ++
30−6:4 name title-id
31−6:13 glyph |=
32−6:16 name x
33−6:17 tight glyph =
34−6:18 tight wing title.fixture
35−6:32 name x
36−6:33 NEWLINE
27+5:18 tight wing title.fixture
28+5:32 name x
29+5:33 NEWLINE
tests/golden/types-module-mixed/tree.txt+7−8
@@ -2,12 +2,11 @@
22 (sur 1:1 fixture)
33 (mark 2:1 %label)
44 (jibb 3:1 extra /ui/helper)
5− (jibb 4:1 missing /ui/missing)
6− (value 5:1 label-id
5+ (value 4:1 label-id
6+ (gate 4:13
7+ (face 4:16 x (ref 4:18 label))
8+ (wing 4:24 x)))
9+ (value 5:1 title-id
710 (gate 5:13
8− (face 5:16 x (ref 5:18 label))
9− (wing 5:24 x)))
10− (value 6:1 title-id
11− (gate 6:13
12− (face 6:16 x (ref 6:18 title.fixture))
13− (wing 6:32 x))))
11+ (face 5:16 x (ref 5:18 title.fixture))
12+ (wing 5:32 x))))
tests/golden/types-module-mixed/types.txt−2
@@ -1,5 +1,3 @@
11partial inference; module not checked
22++ label-id: $-(@t @t)
33++ title-id: $-(@t @t)
4−/= extra /ui/helper: source supplied; module import is not supported by partial inference
5−/= missing /ui/missing: source missing; module import is not supported by partial inference
tests/importer/about.txt+2−1
@@ -3,7 +3,8 @@ recursion, and unsupported forms. `shadow.txt` checks local generator
33shadowing and missing provenance. `shadow-static.txt` checks that a local
44list shadow alongside a nested ordered map is rejected. Static sibling
55collections and dependent sibling molds are tested separately. Nested `$^`
6−cases fail closed, while nested `$@` cases remain supported. `ford.txt`
6+cases and `$^` in collection arguments fail closed before Hoon can
7+collapse overlapping branches; nested `$@` cases remain supported. `ford.txt`
78checks a synthetic imported subject and selected mold; other cases check
89transitive imports, named mold lookup, missing names, shadowing, unprovenanced
910recursive holds, malformed
tests/importer/small.txt+9
@@ -26,6 +26,15 @@
2626+$ signed @sd
2727+$ float @rd
2828+$ gate-test $-(@ud @ud)
29++$ list-bckt-field (list [bckt=@ud value=@t])
30++$ list-noun-overlap (list $^(* @ud))
31++$ list-null-overlap (list $^(~ @ud))
32++$ list-nested-atom-cell (list [id=@ud value=$@(@ud [a=@ud b=@t])])
33++$ list-nested-valid-cell (list [id=@ud value=$^(@ud [a=@ud b=@t])])
34++$ list-nested-invalid-cell (list [id=@ud value=$^(@ud @ud)])
35++$ map-nested-invalid-cell (map @ud [id=@ud value=$^(@ud @ud)])
36++$ set-direct-invalid-cell (set $^(@ud @ud))
37++$ map-key-invalid-cell (map $^(@ud @ud) @t)
2938+$ nested-atom-cell [left=$@(@ud [a=@ud b=@t]) right=$@(@t [c=@ud d=@t])]
3039+$ nested-valid-cell [id=@ud value=$^(@ud [a=@ud b=@t])]
3140+$ nested-invalid-cell [id=@ud value=$^(@ud @ud)]
tests/importer/tree.txt+9
@@ -46,6 +46,15 @@ float: error: signed and float auras cannot be imported
4646gate: error: cores and gates cannot be imported
4747vase: error: vases cannot be imported
4848failed-branch: error: a Hoon $^ union needs a source-level disjointness check
49+list-bckt-field: (list [bckt=@ud value=@t])
50+list-noun-overlap: error: a Hoon $^ union needs a source-level disjointness check
51+list-null-overlap: error: a Hoon $^ union needs a source-level disjointness check
52+list-nested-atom-cell: (list [id=@ud value=(union [a=@ud b=@t] @ud)])
53+list-nested-valid-cell: error: a Hoon $^ union needs a source-level disjointness check
54+list-nested-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
55+map-nested-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
56+set-direct-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
57+map-key-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
4958nested-atom-cell: [left=(union [a=@ud b=@t] @ud) right=(union [c=@ud d=@t] @t)]
5059nested-valid-cell: error: a Hoon $^ union needs a source-level disjointness check
5160nested-invalid-cell: error: a Hoon $^ union needs a source-level disjointness check
tests/lib/jibb-module-scope.hoonnew file+24
@@ -0,0 +1,24 @@
1+:: Exercise supplied prelude scope and fail-closed module imports.
2+/+ jibb
3+/* expected %txt /tests/type-module-scope/expected/txt
4+|%
5+++ test-module-scope
6+ ^- tang
7+ ?~ expected ~[leaf+"module scope expected output is missing"]
8+ =/ got scope-output
9+ ?. =((to-wain:format (cat 3 got '\0a')) expected)
10+ ~[leaf+"module scope output differs from tests/type-module-scope/expected.txt"]
11+ ~
12+++ scope-output
13+ ^- @t
14+ =/ source=@t (crip "/= dep /ui/dep\0a++ identity |= x=value.dep x\0a++ atom mold.dep\0a")
15+ =/ dep=@t (crip "+$ value @t\0a++ mold ~zod\0a")
16+ =/ prelude=@t (crip "++ value |= x x\0a+$ mold @t\0a")
17+ =/ fixtures=(list [at=path source=@t]) ~[[~[%ui %dep %jibb] dep]]
18+ =/ okay (golden-types-with-prelude:jibb /ui/main/jibb source ~ ~ fixtures prelude)
19+ =/ empty (golden-types-with-prelude:jibb /ui/main/jibb source ~ ~ fixtures '')
20+ =/ bad (golden-types-with-prelude:jibb /ui/main/jibb source ~ ~ fixtures (crip "+$"))
21+ =/ conflict=@t (crip "/= value /ui/dep\0a++ identity |= x x\0a")
22+ =/ collision (golden-types-with-prelude:jibb /ui/main/jibb conflict ~ ~ fixtures prelude)
23+ (of-wain:format ~[okay empty bad collision])
24+--
tests/lib/jibb.hoon+378−233
@@ -20,6 +20,7 @@
2020:: catch an expected file without its final newline.
2121::
2222/+ jibb, jibb-import
23+/* prelude-source %jibb /lib/jibb/prelude/jibb
2324/* src-1 %jibb /tests/golden/doc-core-02-update/source/jibb
2425/* tok-1 %txt /tests/golden/doc-core-02-update/tokens/txt
2526/* tre-1 %txt /tests/golden/doc-core-02-update/tree/txt
@@ -1141,194 +1142,302 @@
11411142/* tre-373 %txt /tests/golden/module-fixture-eof/tree/txt
11421143/* mod-373-1 %jibb /tests/golden/module-fixture-eof/modules/ui/incomplete/jibb
11431144/* mtre-373 %txt /tests/golden/module-fixture-eof/module-trees/txt
1144−/* src-374 %jibb /tests/golden/prelude-1c-structural/source/jibb
1145−/* tok-374 %txt /tests/golden/prelude-1c-structural/tokens/txt
1146−/* tre-374 %txt /tests/golden/prelude-1c-structural/tree/txt
1147−/* typ-374 %txt /tests/golden/prelude-1c-structural/types/txt
1148−/* src-375 %jibb /tests/golden/prelude-3g-basic/source/jibb
1149−/* tok-375 %txt /tests/golden/prelude-3g-basic/tokens/txt
1150−/* tre-375 %txt /tests/golden/prelude-3g-basic/tree/txt
1151−/* typ-375 %txt /tests/golden/prelude-3g-basic/types/txt
1152−/* src-376 %jibb /tests/golden/prelude-3g-like/source/jibb
1153−/* tok-376 %txt /tests/golden/prelude-3g-like/tokens/txt
1154−/* tre-376 %txt /tests/golden/prelude-3g-like/tree/txt
1155−/* typ-376 %txt /tests/golden/prelude-3g-like/types/txt
1156−/* src-377 %jibb /tests/golden/prelude-3g-structural/source/jibb
1157−/* tok-377 %txt /tests/golden/prelude-3g-structural/tokens/txt
1158−/* tre-377 %txt /tests/golden/prelude-3g-structural/tree/txt
1159−/* typ-377 %txt /tests/golden/prelude-3g-structural/types/txt
1160−/* src-378 %jibb /tests/golden/prelude-core-functions/source/jibb
1161−/* tok-378 %txt /tests/golden/prelude-core-functions/tokens/txt
1162−/* tre-378 %txt /tests/golden/prelude-core-functions/tree/txt
1163−/* typ-378 %txt /tests/golden/prelude-core-functions/types/txt
1164−/* src-379 %jibb /tests/golden/prelude-list-helpers/source/jibb
1165−/* tok-379 %txt /tests/golden/prelude-list-helpers/tokens/txt
1166−/* tre-379 %txt /tests/golden/prelude-list-helpers/tree/txt
1167−/* typ-379 %txt /tests/golden/prelude-list-helpers/types/txt
1168−/* src-380 %jibb /tests/golden/prelude-list-unit/source/jibb
1169−/* tok-380 %txt /tests/golden/prelude-list-unit/tokens/txt
1170−/* tre-380 %txt /tests/golden/prelude-list-unit/tree/txt
1171−/* typ-380 %txt /tests/golden/prelude-list-unit/types/txt
1172−/* src-381 %jibb /tests/golden/prelude-unit-list-transforms/source/jibb
1173−/* tok-381 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1174−/* tre-381 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1175−/* typ-381 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1176−/* src-382 %jibb /tests/golden/types-import-mark/source/jibb
1177−/* tok-382 %txt /tests/golden/types-import-mark/tokens/txt
1178−/* tre-382 %txt /tests/golden/types-import-mark/tree/txt
1179−/* typ-382 %txt /tests/golden/types-import-mark/types/txt
1180−/* imp-382-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1181−/* mark-382-1 %txt /tests/golden/types-import-mark/mar/label/txt
1182−/* src-383 %jibb /tests/golden/types-import-missing-mold/source/jibb
1183−/* tok-383 %txt /tests/golden/types-import-missing-mold/tokens/txt
1184−/* tre-383 %txt /tests/golden/types-import-missing-mold/tree/txt
1185−/* typ-383 %txt /tests/golden/types-import-missing-mold/types/txt
1186−/* imp-383-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1187−/* src-384 %jibb /tests/golden/types-import-sur/source/jibb
1188−/* tok-384 %txt /tests/golden/types-import-sur/tokens/txt
1189−/* tre-384 %txt /tests/golden/types-import-sur/tree/txt
1190−/* typ-384 %txt /tests/golden/types-import-sur/types/txt
1191−/* imp-384-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1192−/* imp-384-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1193−/* src-385 %jibb /tests/golden/types-module-fixtures/source/jibb
1194−/* tok-385 %txt /tests/golden/types-module-fixtures/tokens/txt
1195−/* tre-385 %txt /tests/golden/types-module-fixtures/tree/txt
1196−/* mod-385-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1197−/* mod-385-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1198−/* typ-385 %txt /tests/golden/types-module-fixtures/types/txt
1199−/* mtre-385 %txt /tests/golden/types-module-fixtures/module-trees/txt
1200−/* src-386 %jibb /tests/golden/types-module-mixed/source/jibb
1201−/* tok-386 %txt /tests/golden/types-module-mixed/tokens/txt
1202−/* tre-386 %txt /tests/golden/types-module-mixed/tree/txt
1203−/* mod-386-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1204−/* typ-386 %txt /tests/golden/types-module-mixed/types/txt
1205−/* imp-386-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1206−/* mark-386-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1207−/* mtre-386 %txt /tests/golden/types-module-mixed/module-trees/txt
1208−/* src-387 %jibb /tests/golden/types-partial-apply/source/jibb
1209−/* tok-387 %txt /tests/golden/types-partial-apply/tokens/txt
1210−/* tre-387 %txt /tests/golden/types-partial-apply/tree/txt
1211−/* typ-387 %txt /tests/golden/types-partial-apply/types/txt
1212−/* src-388 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1213−/* tok-388 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1214−/* tre-388 %txt /tests/golden/types-partial-atom-alias/tree/txt
1215−/* typ-388 %txt /tests/golden/types-partial-atom-alias/types/txt
1216−/* src-389 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1217−/* tok-389 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1218−/* tre-389 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1219−/* typ-389 %txt /tests/golden/types-partial-atom-constraint/types/txt
1220−/* src-390 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1221−/* tok-390 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1222−/* tre-390 %txt /tests/golden/types-partial-atom-widening/tree/txt
1223−/* typ-390 %txt /tests/golden/types-partial-atom-widening/types/txt
1224−/* src-391 %jibb /tests/golden/types-partial-aura/source/jibb
1225−/* tok-391 %txt /tests/golden/types-partial-aura/tokens/txt
1226−/* tre-391 %txt /tests/golden/types-partial-aura/tree/txt
1227−/* typ-391 %txt /tests/golden/types-partial-aura/types/txt
1228−/* src-392 %jibb /tests/golden/types-partial-aura-family/source/jibb
1229−/* tok-392 %txt /tests/golden/types-partial-aura-family/tokens/txt
1230−/* tre-392 %txt /tests/golden/types-partial-aura-family/tree/txt
1231−/* typ-392 %txt /tests/golden/types-partial-aura-family/types/txt
1232−/* src-393 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1233−/* tok-393 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1234−/* tre-393 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1235−/* typ-393 %txt /tests/golden/types-partial-aura-generalization/types/txt
1236−/* src-394 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1237−/* tok-394 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1238−/* tre-394 %txt /tests/golden/types-partial-bare-atom/tree/txt
1239−/* typ-394 %txt /tests/golden/types-partial-bare-atom/types/txt
1240−/* src-395 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1241−/* tok-395 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1242−/* tre-395 %txt /tests/golden/types-partial-branch-widening/tree/txt
1243−/* typ-395 %txt /tests/golden/types-partial-branch-widening/types/txt
1244−/* src-396 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1245−/* tok-396 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1246−/* tre-396 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1247−/* typ-396 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1248−/* src-397 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1249−/* tok-397 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1250−/* tre-397 %txt /tests/golden/types-partial-decimal-default/tree/txt
1251−/* typ-397 %txt /tests/golden/types-partial-decimal-default/types/txt
1252−/* src-398 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1253−/* tok-398 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1254−/* tre-398 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1255−/* typ-398 %txt /tests/golden/types-partial-dependency-chain/types/txt
1256−/* src-399 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1257−/* tok-399 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1258−/* tre-399 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1259−/* typ-399 %txt /tests/golden/types-partial-explicit-capital/types/txt
1260−/* src-400 %jibb /tests/golden/types-partial-forward/source/jibb
1261−/* tok-400 %txt /tests/golden/types-partial-forward/tokens/txt
1262−/* tre-400 %txt /tests/golden/types-partial-forward/tree/txt
1263−/* typ-400 %txt /tests/golden/types-partial-forward/types/txt
1264−/* src-401 %jibb /tests/golden/types-partial-generalization/source/jibb
1265−/* tok-401 %txt /tests/golden/types-partial-generalization/tokens/txt
1266−/* tre-401 %txt /tests/golden/types-partial-generalization/tree/txt
1267−/* typ-401 %txt /tests/golden/types-partial-generalization/types/txt
1268−/* src-402 %jibb /tests/golden/types-partial-identity/source/jibb
1269−/* tok-402 %txt /tests/golden/types-partial-identity/tokens/txt
1270−/* tre-402 %txt /tests/golden/types-partial-identity/tree/txt
1271−/* typ-402 %txt /tests/golden/types-partial-identity/types/txt
1272−/* src-403 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1273−/* tok-403 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1274−/* tre-403 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1275−/* typ-403 %txt /tests/golden/types-partial-independent-atoms/types/txt
1276−/* src-404 %jibb /tests/golden/types-partial-local-molds/source/jibb
1277−/* tok-404 %txt /tests/golden/types-partial-local-molds/tokens/txt
1278−/* tre-404 %txt /tests/golden/types-partial-local-molds/tree/txt
1279−/* typ-404 %txt /tests/golden/types-partial-local-molds/types/txt
1280−/* src-405 %jibb /tests/golden/types-partial-locals/source/jibb
1281−/* tok-405 %txt /tests/golden/types-partial-locals/tokens/txt
1282−/* tre-405 %txt /tests/golden/types-partial-locals/tree/txt
1283−/* typ-405 %txt /tests/golden/types-partial-locals/types/txt
1284−/* src-406 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1285−/* tok-406 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1286−/* tre-406 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1287−/* typ-406 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1288−/* src-407 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1289−/* tok-407 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1290−/* tre-407 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1291−/* typ-407 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1292−/* src-408 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1293−/* tok-408 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1294−/* tre-408 %txt /tests/golden/types-partial-mold-composite/tree/txt
1295−/* typ-408 %txt /tests/golden/types-partial-mold-composite/types/txt
1296−/* src-409 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1297−/* tok-409 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1298−/* tre-409 %txt /tests/golden/types-partial-mold-forward/tree/txt
1299−/* typ-409 %txt /tests/golden/types-partial-mold-forward/types/txt
1300−/* src-410 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1301−/* tok-410 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1302−/* tre-410 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1303−/* typ-410 %txt /tests/golden/types-partial-mold-recursive/types/txt
1304−/* src-411 %jibb /tests/golden/types-partial-occurs/source/jibb
1305−/* tok-411 %txt /tests/golden/types-partial-occurs/tokens/txt
1306−/* tre-411 %txt /tests/golden/types-partial-occurs/tree/txt
1307−/* typ-411 %txt /tests/golden/types-partial-occurs/types/txt
1308−/* src-412 %jibb /tests/golden/types-partial-projection/source/jibb
1309−/* tok-412 %txt /tests/golden/types-partial-projection/tokens/txt
1310−/* tre-412 %txt /tests/golden/types-partial-projection/tree/txt
1311−/* typ-412 %txt /tests/golden/types-partial-projection/types/txt
1312−/* src-413 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1313−/* tok-413 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1314−/* tre-413 %txt /tests/golden/types-partial-shadow-global/tree/txt
1315−/* typ-413 %txt /tests/golden/types-partial-shadow-global/types/txt
1316−/* src-414 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1317−/* tok-414 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1318−/* tre-414 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1319−/* typ-414 %txt /tests/golden/types-partial-shared-tvar/types/txt
1320−/* src-415 %jibb /tests/golden/types-partial-union-cases/source/jibb
1321−/* tok-415 %txt /tests/golden/types-partial-union-cases/tokens/txt
1322−/* tre-415 %txt /tests/golden/types-partial-union-cases/tree/txt
1323−/* typ-415 %txt /tests/golden/types-partial-union-cases/types/txt
1324−/* src-416 %jibb /tests/golden/types-partial-union-edges/source/jibb
1325−/* tok-416 %txt /tests/golden/types-partial-union-edges/tokens/txt
1326−/* tre-416 %txt /tests/golden/types-partial-union-edges/tree/txt
1327−/* typ-416 %txt /tests/golden/types-partial-union-edges/types/txt
1328−/* src-417 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1329−/* tok-417 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1330−/* tre-417 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1331−/* typ-417 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1145+/* src-374 %jibb /tests/golden/module-import-atom-scheme/source/jibb
1146+/* tok-374 %txt /tests/golden/module-import-atom-scheme/tokens/txt
1147+/* tre-374 %txt /tests/golden/module-import-atom-scheme/tree/txt
1148+/* mod-374-1 %jibb /tests/golden/module-import-atom-scheme/modules/ui/mid/jibb
1149+/* mod-374-2 %jibb /tests/golden/module-import-atom-scheme/modules/ui/base/jibb
1150+/* typ-374 %txt /tests/golden/module-import-atom-scheme/types/txt
1151+/* mtre-374 %txt /tests/golden/module-import-atom-scheme/module-trees/txt
1152+/* src-375 %jibb /tests/golden/module-import-cycle/source/jibb
1153+/* tok-375 %txt /tests/golden/module-import-cycle/tokens/txt
1154+/* tre-375 %txt /tests/golden/module-import-cycle/tree/txt
1155+/* mod-375-1 %jibb /tests/golden/module-import-cycle/modules/ui/a/jibb
1156+/* mod-375-2 %jibb /tests/golden/module-import-cycle/modules/ui/b/jibb
1157+/* typ-375 %txt /tests/golden/module-import-cycle/types/txt
1158+/* mtre-375 %txt /tests/golden/module-import-cycle/module-trees/txt
1159+/* src-376 %jibb /tests/golden/module-import-empty/source/jibb
1160+/* tok-376 %txt /tests/golden/module-import-empty/tokens/txt
1161+/* tre-376 %txt /tests/golden/module-import-empty/tree/txt
1162+/* typ-376 %txt /tests/golden/module-import-empty/types/txt
1163+/* src-377 %jibb /tests/golden/module-import-face-shadow/source/jibb
1164+/* tok-377 %txt /tests/golden/module-import-face-shadow/tokens/txt
1165+/* tre-377 %txt /tests/golden/module-import-face-shadow/tree/txt
1166+/* mod-377-1 %jibb /tests/golden/module-import-face-shadow/modules/ui/lib/jibb
1167+/* typ-377 %txt /tests/golden/module-import-face-shadow/types/txt
1168+/* mtre-377 %txt /tests/golden/module-import-face-shadow/module-trees/txt
1169+/* src-378 %jibb /tests/golden/module-import-identity/source/jibb
1170+/* tok-378 %txt /tests/golden/module-import-identity/tokens/txt
1171+/* tre-378 %txt /tests/golden/module-import-identity/tree/txt
1172+/* mod-378-1 %jibb /tests/golden/module-import-identity/modules/ui/lib/jibb
1173+/* typ-378 %txt /tests/golden/module-import-identity/types/txt
1174+/* mtre-378 %txt /tests/golden/module-import-identity/module-trees/txt
1175+/* src-379 %jibb /tests/golden/module-import-invalid/source/jibb
1176+/* tok-379 %txt /tests/golden/module-import-invalid/tokens/txt
1177+/* tre-379 %txt /tests/golden/module-import-invalid/tree/txt
1178+/* mod-379-1 %jibb /tests/golden/module-import-invalid/modules/ui/lib/jibb
1179+/* typ-379 %txt /tests/golden/module-import-invalid/types/txt
1180+/* mtre-379 %txt /tests/golden/module-import-invalid/module-trees/txt
1181+/* src-380 %jibb /tests/golden/module-import-missing-member/source/jibb
1182+/* tok-380 %txt /tests/golden/module-import-missing-member/tokens/txt
1183+/* tre-380 %txt /tests/golden/module-import-missing-member/tree/txt
1184+/* mod-380-1 %jibb /tests/golden/module-import-missing-member/modules/ui/lib/jibb
1185+/* typ-380 %txt /tests/golden/module-import-missing-member/types/txt
1186+/* mtre-380 %txt /tests/golden/module-import-missing-member/module-trees/txt
1187+/* src-381 %jibb /tests/golden/module-import-mold/source/jibb
1188+/* tok-381 %txt /tests/golden/module-import-mold/tokens/txt
1189+/* tre-381 %txt /tests/golden/module-import-mold/tree/txt
1190+/* mod-381-1 %jibb /tests/golden/module-import-mold/modules/ui/lib/jibb
1191+/* typ-381 %txt /tests/golden/module-import-mold/types/txt
1192+/* mtre-381 %txt /tests/golden/module-import-mold/module-trees/txt
1193+/* src-382 %jibb /tests/golden/module-import-prelude-cross-namespace/source/jibb
1194+/* tok-382 %txt /tests/golden/module-import-prelude-cross-namespace/tokens/txt
1195+/* tre-382 %txt /tests/golden/module-import-prelude-cross-namespace/tree/txt
1196+/* typ-382 %txt /tests/golden/module-import-prelude-cross-namespace/types/txt
1197+/* src-383 %jibb /tests/golden/module-import-prelude-mold-shadow/source/jibb
1198+/* tok-383 %txt /tests/golden/module-import-prelude-mold-shadow/tokens/txt
1199+/* tre-383 %txt /tests/golden/module-import-prelude-mold-shadow/tree/txt
1200+/* typ-383 %txt /tests/golden/module-import-prelude-mold-shadow/types/txt
1201+/* src-384 %jibb /tests/golden/module-import-prelude-sample-shadow/source/jibb
1202+/* tok-384 %txt /tests/golden/module-import-prelude-sample-shadow/tokens/txt
1203+/* tre-384 %txt /tests/golden/module-import-prelude-sample-shadow/tree/txt
1204+/* mod-384-1 %jibb /tests/golden/module-import-prelude-sample-shadow/modules/ui/lib/jibb
1205+/* typ-384 %txt /tests/golden/module-import-prelude-sample-shadow/types/txt
1206+/* mtre-384 %txt /tests/golden/module-import-prelude-sample-shadow/module-trees/txt
1207+/* src-385 %jibb /tests/golden/module-import-prelude-value-shadow/source/jibb
1208+/* tok-385 %txt /tests/golden/module-import-prelude-value-shadow/tokens/txt
1209+/* tre-385 %txt /tests/golden/module-import-prelude-value-shadow/tree/txt
1210+/* mod-385-1 %jibb /tests/golden/module-import-prelude-value-shadow/modules/ui/lib/jibb
1211+/* typ-385 %txt /tests/golden/module-import-prelude-value-shadow/types/txt
1212+/* mtre-385 %txt /tests/golden/module-import-prelude-value-shadow/module-trees/txt
1213+/* src-386 %jibb /tests/golden/module-import-root-cycle/source/jibb
1214+/* tok-386 %txt /tests/golden/module-import-root-cycle/tokens/txt
1215+/* tre-386 %txt /tests/golden/module-import-root-cycle/tree/txt
1216+/* mod-386-1 %jibb /tests/golden/module-import-root-cycle/modules/ui/a/jibb
1217+/* typ-386 %txt /tests/golden/module-import-root-cycle/types/txt
1218+/* mtre-386 %txt /tests/golden/module-import-root-cycle/module-trees/txt
1219+/* src-387 %jibb /tests/golden/module-import-root-import-shadow/source/jibb
1220+/* tok-387 %txt /tests/golden/module-import-root-import-shadow/tokens/txt
1221+/* tre-387 %txt /tests/golden/module-import-root-import-shadow/tree/txt
1222+/* typ-387 %txt /tests/golden/module-import-root-import-shadow/types/txt
1223+/* imp-387-1 %txt /tests/golden/module-import-root-import-shadow/sur/fixture/txt
1224+/* mark-387-1 %txt /tests/golden/module-import-root-import-shadow/mar/label/txt
1225+/* src-388 %jibb /tests/golden/module-import-separate-namespaces/source/jibb
1226+/* tok-388 %txt /tests/golden/module-import-separate-namespaces/tokens/txt
1227+/* tre-388 %txt /tests/golden/module-import-separate-namespaces/tree/txt
1228+/* mod-388-1 %jibb /tests/golden/module-import-separate-namespaces/modules/ui/lib/jibb
1229+/* typ-388 %txt /tests/golden/module-import-separate-namespaces/types/txt
1230+/* mtre-388 %txt /tests/golden/module-import-separate-namespaces/module-trees/txt
1231+/* src-389 %jibb /tests/golden/module-import-sur-scope/source/jibb
1232+/* tok-389 %txt /tests/golden/module-import-sur-scope/tokens/txt
1233+/* tre-389 %txt /tests/golden/module-import-sur-scope/tree/txt
1234+/* mod-389-1 %jibb /tests/golden/module-import-sur-scope/modules/ui/lib/jibb
1235+/* typ-389 %txt /tests/golden/module-import-sur-scope/types/txt
1236+/* imp-389-1 %txt /tests/golden/module-import-sur-scope/sur/fixture/txt
1237+/* mtre-389 %txt /tests/golden/module-import-sur-scope/module-trees/txt
1238+/* src-390 %jibb /tests/golden/module-import-transitive/source/jibb
1239+/* tok-390 %txt /tests/golden/module-import-transitive/tokens/txt
1240+/* tre-390 %txt /tests/golden/module-import-transitive/tree/txt
1241+/* mod-390-1 %jibb /tests/golden/module-import-transitive/modules/ui/a/jibb
1242+/* mod-390-2 %jibb /tests/golden/module-import-transitive/modules/ui/b/jibb
1243+/* mod-390-3 %jibb /tests/golden/module-import-transitive/modules/ui/c/jibb
1244+/* typ-390 %txt /tests/golden/module-import-transitive/types/txt
1245+/* mtre-390 %txt /tests/golden/module-import-transitive/module-trees/txt
1246+/* src-391 %jibb /tests/golden/module-import-unused-invalid/source/jibb
1247+/* tok-391 %txt /tests/golden/module-import-unused-invalid/tokens/txt
1248+/* tre-391 %txt /tests/golden/module-import-unused-invalid/tree/txt
1249+/* mod-391-1 %jibb /tests/golden/module-import-unused-invalid/modules/ui/good/jibb
1250+/* mod-391-2 %jibb /tests/golden/module-import-unused-invalid/modules/ui/unused/jibb
1251+/* typ-391 %txt /tests/golden/module-import-unused-invalid/types/txt
1252+/* mtre-391 %txt /tests/golden/module-import-unused-invalid/module-trees/txt
1253+/* src-392 %jibb /tests/golden/prelude-1c-structural/source/jibb
1254+/* tok-392 %txt /tests/golden/prelude-1c-structural/tokens/txt
1255+/* tre-392 %txt /tests/golden/prelude-1c-structural/tree/txt
1256+/* typ-392 %txt /tests/golden/prelude-1c-structural/types/txt
1257+/* src-393 %jibb /tests/golden/prelude-3g-basic/source/jibb
1258+/* tok-393 %txt /tests/golden/prelude-3g-basic/tokens/txt
1259+/* tre-393 %txt /tests/golden/prelude-3g-basic/tree/txt
1260+/* typ-393 %txt /tests/golden/prelude-3g-basic/types/txt
1261+/* src-394 %jibb /tests/golden/prelude-3g-like/source/jibb
1262+/* tok-394 %txt /tests/golden/prelude-3g-like/tokens/txt
1263+/* tre-394 %txt /tests/golden/prelude-3g-like/tree/txt
1264+/* typ-394 %txt /tests/golden/prelude-3g-like/types/txt
1265+/* src-395 %jibb /tests/golden/prelude-3g-structural/source/jibb
1266+/* tok-395 %txt /tests/golden/prelude-3g-structural/tokens/txt
1267+/* tre-395 %txt /tests/golden/prelude-3g-structural/tree/txt
1268+/* typ-395 %txt /tests/golden/prelude-3g-structural/types/txt
1269+/* src-396 %jibb /tests/golden/prelude-core-functions/source/jibb
1270+/* tok-396 %txt /tests/golden/prelude-core-functions/tokens/txt
1271+/* tre-396 %txt /tests/golden/prelude-core-functions/tree/txt
1272+/* typ-396 %txt /tests/golden/prelude-core-functions/types/txt
1273+/* src-397 %jibb /tests/golden/prelude-list-helpers/source/jibb
1274+/* tok-397 %txt /tests/golden/prelude-list-helpers/tokens/txt
1275+/* tre-397 %txt /tests/golden/prelude-list-helpers/tree/txt
1276+/* typ-397 %txt /tests/golden/prelude-list-helpers/types/txt
1277+/* src-398 %jibb /tests/golden/prelude-list-unit/source/jibb
1278+/* tok-398 %txt /tests/golden/prelude-list-unit/tokens/txt
1279+/* tre-398 %txt /tests/golden/prelude-list-unit/tree/txt
1280+/* typ-398 %txt /tests/golden/prelude-list-unit/types/txt
1281+/* src-399 %jibb /tests/golden/prelude-unit-list-transforms/source/jibb
1282+/* tok-399 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1283+/* tre-399 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1284+/* typ-399 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1285+/* src-400 %jibb /tests/golden/types-import-mark/source/jibb
1286+/* tok-400 %txt /tests/golden/types-import-mark/tokens/txt
1287+/* tre-400 %txt /tests/golden/types-import-mark/tree/txt
1288+/* typ-400 %txt /tests/golden/types-import-mark/types/txt
1289+/* imp-400-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1290+/* mark-400-1 %txt /tests/golden/types-import-mark/mar/label/txt
1291+/* src-401 %jibb /tests/golden/types-import-missing-mold/source/jibb
1292+/* tok-401 %txt /tests/golden/types-import-missing-mold/tokens/txt
1293+/* tre-401 %txt /tests/golden/types-import-missing-mold/tree/txt
1294+/* typ-401 %txt /tests/golden/types-import-missing-mold/types/txt
1295+/* imp-401-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1296+/* src-402 %jibb /tests/golden/types-import-sur/source/jibb
1297+/* tok-402 %txt /tests/golden/types-import-sur/tokens/txt
1298+/* tre-402 %txt /tests/golden/types-import-sur/tree/txt
1299+/* typ-402 %txt /tests/golden/types-import-sur/types/txt
1300+/* imp-402-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1301+/* imp-402-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1302+/* src-403 %jibb /tests/golden/types-module-fixtures/source/jibb
1303+/* tok-403 %txt /tests/golden/types-module-fixtures/tokens/txt
1304+/* tre-403 %txt /tests/golden/types-module-fixtures/tree/txt
1305+/* mod-403-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1306+/* mod-403-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1307+/* typ-403 %txt /tests/golden/types-module-fixtures/types/txt
1308+/* mtre-403 %txt /tests/golden/types-module-fixtures/module-trees/txt
1309+/* src-404 %jibb /tests/golden/types-module-mixed/source/jibb
1310+/* tok-404 %txt /tests/golden/types-module-mixed/tokens/txt
1311+/* tre-404 %txt /tests/golden/types-module-mixed/tree/txt
1312+/* mod-404-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1313+/* typ-404 %txt /tests/golden/types-module-mixed/types/txt
1314+/* imp-404-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1315+/* mark-404-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1316+/* mtre-404 %txt /tests/golden/types-module-mixed/module-trees/txt
1317+/* src-405 %jibb /tests/golden/types-partial-apply/source/jibb
1318+/* tok-405 %txt /tests/golden/types-partial-apply/tokens/txt
1319+/* tre-405 %txt /tests/golden/types-partial-apply/tree/txt
1320+/* typ-405 %txt /tests/golden/types-partial-apply/types/txt
1321+/* src-406 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1322+/* tok-406 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1323+/* tre-406 %txt /tests/golden/types-partial-atom-alias/tree/txt
1324+/* typ-406 %txt /tests/golden/types-partial-atom-alias/types/txt
1325+/* src-407 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1326+/* tok-407 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1327+/* tre-407 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1328+/* typ-407 %txt /tests/golden/types-partial-atom-constraint/types/txt
1329+/* src-408 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1330+/* tok-408 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1331+/* tre-408 %txt /tests/golden/types-partial-atom-widening/tree/txt
1332+/* typ-408 %txt /tests/golden/types-partial-atom-widening/types/txt
1333+/* src-409 %jibb /tests/golden/types-partial-aura/source/jibb
1334+/* tok-409 %txt /tests/golden/types-partial-aura/tokens/txt
1335+/* tre-409 %txt /tests/golden/types-partial-aura/tree/txt
1336+/* typ-409 %txt /tests/golden/types-partial-aura/types/txt
1337+/* src-410 %jibb /tests/golden/types-partial-aura-family/source/jibb
1338+/* tok-410 %txt /tests/golden/types-partial-aura-family/tokens/txt
1339+/* tre-410 %txt /tests/golden/types-partial-aura-family/tree/txt
1340+/* typ-410 %txt /tests/golden/types-partial-aura-family/types/txt
1341+/* src-411 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1342+/* tok-411 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1343+/* tre-411 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1344+/* typ-411 %txt /tests/golden/types-partial-aura-generalization/types/txt
1345+/* src-412 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1346+/* tok-412 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1347+/* tre-412 %txt /tests/golden/types-partial-bare-atom/tree/txt
1348+/* typ-412 %txt /tests/golden/types-partial-bare-atom/types/txt
1349+/* src-413 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1350+/* tok-413 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1351+/* tre-413 %txt /tests/golden/types-partial-branch-widening/tree/txt
1352+/* typ-413 %txt /tests/golden/types-partial-branch-widening/types/txt
1353+/* src-414 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1354+/* tok-414 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1355+/* tre-414 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1356+/* typ-414 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1357+/* src-415 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1358+/* tok-415 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1359+/* tre-415 %txt /tests/golden/types-partial-decimal-default/tree/txt
1360+/* typ-415 %txt /tests/golden/types-partial-decimal-default/types/txt
1361+/* src-416 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1362+/* tok-416 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1363+/* tre-416 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1364+/* typ-416 %txt /tests/golden/types-partial-dependency-chain/types/txt
1365+/* src-417 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1366+/* tok-417 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1367+/* tre-417 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1368+/* typ-417 %txt /tests/golden/types-partial-explicit-capital/types/txt
1369+/* src-418 %jibb /tests/golden/types-partial-forward/source/jibb
1370+/* tok-418 %txt /tests/golden/types-partial-forward/tokens/txt
1371+/* tre-418 %txt /tests/golden/types-partial-forward/tree/txt
1372+/* typ-418 %txt /tests/golden/types-partial-forward/types/txt
1373+/* src-419 %jibb /tests/golden/types-partial-generalization/source/jibb
1374+/* tok-419 %txt /tests/golden/types-partial-generalization/tokens/txt
1375+/* tre-419 %txt /tests/golden/types-partial-generalization/tree/txt
1376+/* typ-419 %txt /tests/golden/types-partial-generalization/types/txt
1377+/* src-420 %jibb /tests/golden/types-partial-identity/source/jibb
1378+/* tok-420 %txt /tests/golden/types-partial-identity/tokens/txt
1379+/* tre-420 %txt /tests/golden/types-partial-identity/tree/txt
1380+/* typ-420 %txt /tests/golden/types-partial-identity/types/txt
1381+/* src-421 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1382+/* tok-421 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1383+/* tre-421 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1384+/* typ-421 %txt /tests/golden/types-partial-independent-atoms/types/txt
1385+/* src-422 %jibb /tests/golden/types-partial-local-molds/source/jibb
1386+/* tok-422 %txt /tests/golden/types-partial-local-molds/tokens/txt
1387+/* tre-422 %txt /tests/golden/types-partial-local-molds/tree/txt
1388+/* typ-422 %txt /tests/golden/types-partial-local-molds/types/txt
1389+/* src-423 %jibb /tests/golden/types-partial-locals/source/jibb
1390+/* tok-423 %txt /tests/golden/types-partial-locals/tokens/txt
1391+/* tre-423 %txt /tests/golden/types-partial-locals/tree/txt
1392+/* typ-423 %txt /tests/golden/types-partial-locals/types/txt
1393+/* src-424 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1394+/* tok-424 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1395+/* tre-424 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1396+/* typ-424 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1397+/* src-425 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1398+/* tok-425 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1399+/* tre-425 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1400+/* typ-425 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1401+/* src-426 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1402+/* tok-426 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1403+/* tre-426 %txt /tests/golden/types-partial-mold-composite/tree/txt
1404+/* typ-426 %txt /tests/golden/types-partial-mold-composite/types/txt
1405+/* src-427 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1406+/* tok-427 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1407+/* tre-427 %txt /tests/golden/types-partial-mold-forward/tree/txt
1408+/* typ-427 %txt /tests/golden/types-partial-mold-forward/types/txt
1409+/* src-428 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1410+/* tok-428 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1411+/* tre-428 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1412+/* typ-428 %txt /tests/golden/types-partial-mold-recursive/types/txt
1413+/* src-429 %jibb /tests/golden/types-partial-occurs/source/jibb
1414+/* tok-429 %txt /tests/golden/types-partial-occurs/tokens/txt
1415+/* tre-429 %txt /tests/golden/types-partial-occurs/tree/txt
1416+/* typ-429 %txt /tests/golden/types-partial-occurs/types/txt
1417+/* src-430 %jibb /tests/golden/types-partial-projection/source/jibb
1418+/* tok-430 %txt /tests/golden/types-partial-projection/tokens/txt
1419+/* tre-430 %txt /tests/golden/types-partial-projection/tree/txt
1420+/* typ-430 %txt /tests/golden/types-partial-projection/types/txt
1421+/* src-431 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1422+/* tok-431 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1423+/* tre-431 %txt /tests/golden/types-partial-shadow-global/tree/txt
1424+/* typ-431 %txt /tests/golden/types-partial-shadow-global/types/txt
1425+/* src-432 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1426+/* tok-432 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1427+/* tre-432 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1428+/* typ-432 %txt /tests/golden/types-partial-shared-tvar/types/txt
1429+/* src-433 %jibb /tests/golden/types-partial-union-cases/source/jibb
1430+/* tok-433 %txt /tests/golden/types-partial-union-cases/tokens/txt
1431+/* tre-433 %txt /tests/golden/types-partial-union-cases/tree/txt
1432+/* typ-433 %txt /tests/golden/types-partial-union-cases/types/txt
1433+/* src-434 %jibb /tests/golden/types-partial-union-edges/source/jibb
1434+/* tok-434 %txt /tests/golden/types-partial-union-edges/tokens/txt
1435+/* tre-434 %txt /tests/golden/types-partial-union-edges/tree/txt
1436+/* typ-434 %txt /tests/golden/types-partial-union-edges/types/txt
1437+/* src-435 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1438+/* tok-435 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1439+/* tre-435 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1440+/* typ-435 %txt /tests/golden/types-partial-unresolved-tag/types/txt
13321441|%
13331442:: one arm per case
13341443::
@@ -2078,94 +2187,130 @@
20782187 (check ~.lex-tight-wing-ok-1 src-372 `tok-372 `tre-372)
20792188++ test-module-fixture-eof
20802189 (weld (check ~.module-fixture-eof src-373 `tok-373 `tre-373) (check-module-trees ~.module-fixture-eof `mtre-373 ~[['/ui/incomplete.jibb' ~[~.ui ~.incomplete ~.jibb] mod-373-1]]))
2190+++ test-module-import-atom-scheme
2191+ (weld (weld (check ~.module-import-atom-scheme src-374 `tok-374 `tre-374) (check-module-types ~.module-import-atom-scheme ~[%tests %golden ~.module-import-atom-scheme %source %jibb] src-374 `typ-374 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-374-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-374-2]])) (check-module-trees ~.module-import-atom-scheme `mtre-374 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-374-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-374-2]]))
2192+++ test-module-import-cycle
2193+ (weld (weld (check-at ~.module-import-cycle ~[~.ui ~.main ~.jibb] src-375 `tok-375 `tre-375) (check-module-types ~.module-import-cycle ~[~.ui ~.main ~.jibb] src-375 `typ-375 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-375-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-375-2]])) (check-module-trees ~.module-import-cycle `mtre-375 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-375-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-375-2]]))
2194+++ test-module-import-empty
2195+ (weld (check ~.module-import-empty src-376 `tok-376 `tre-376) (check-module-types ~.module-import-empty ~[%tests %golden ~.module-import-empty %source %jibb] src-376 `typ-376 ~ ~ ~))
2196+++ test-module-import-face-shadow
2197+ (weld (weld (check ~.module-import-face-shadow src-377 `tok-377 `tre-377) (check-module-types ~.module-import-face-shadow ~[%tests %golden ~.module-import-face-shadow %source %jibb] src-377 `typ-377 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-377-1]])) (check-module-trees ~.module-import-face-shadow `mtre-377 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-377-1]]))
2198+++ test-module-import-identity
2199+ (weld (weld (check ~.module-import-identity src-378 `tok-378 `tre-378) (check-module-types ~.module-import-identity ~[%tests %golden ~.module-import-identity %source %jibb] src-378 `typ-378 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-378-1]])) (check-module-trees ~.module-import-identity `mtre-378 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-378-1]]))
2200+++ test-module-import-invalid
2201+ (weld (weld (check ~.module-import-invalid src-379 `tok-379 `tre-379) (check-module-types ~.module-import-invalid ~[%tests %golden ~.module-import-invalid %source %jibb] src-379 `typ-379 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-379-1]])) (check-module-trees ~.module-import-invalid `mtre-379 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-379-1]]))
2202+++ test-module-import-missing-member
2203+ (weld (weld (check ~.module-import-missing-member src-380 `tok-380 `tre-380) (check-module-types ~.module-import-missing-member ~[%tests %golden ~.module-import-missing-member %source %jibb] src-380 `typ-380 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-380-1]])) (check-module-trees ~.module-import-missing-member `mtre-380 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-380-1]]))
2204+++ test-module-import-mold
2205+ (weld (weld (check ~.module-import-mold src-381 `tok-381 `tre-381) (check-module-types ~.module-import-mold ~[%tests %golden ~.module-import-mold %source %jibb] src-381 `typ-381 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-381-1]])) (check-module-trees ~.module-import-mold `mtre-381 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-381-1]]))
2206+++ test-module-import-prelude-cross-namespace
2207+ (weld (check ~.module-import-prelude-cross-namespace src-382 `tok-382 `tre-382) (check-module-types ~.module-import-prelude-cross-namespace ~[%tests %golden ~.module-import-prelude-cross-namespace %source %jibb] src-382 `typ-382 ~ ~ ~))
2208+++ test-module-import-prelude-mold-shadow
2209+ (weld (check ~.module-import-prelude-mold-shadow src-383 `tok-383 `tre-383) (check-module-types ~.module-import-prelude-mold-shadow ~[%tests %golden ~.module-import-prelude-mold-shadow %source %jibb] src-383 `typ-383 ~ ~ ~))
2210+++ test-module-import-prelude-sample-shadow
2211+ (weld (weld (check ~.module-import-prelude-sample-shadow src-384 `tok-384 `tre-384) (check-module-types ~.module-import-prelude-sample-shadow ~[%tests %golden ~.module-import-prelude-sample-shadow %source %jibb] src-384 `typ-384 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-384-1]])) (check-module-trees ~.module-import-prelude-sample-shadow `mtre-384 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-384-1]]))
2212+++ test-module-import-prelude-value-shadow
2213+ (weld (weld (check ~.module-import-prelude-value-shadow src-385 `tok-385 `tre-385) (check-module-types ~.module-import-prelude-value-shadow ~[%tests %golden ~.module-import-prelude-value-shadow %source %jibb] src-385 `typ-385 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-385-1]])) (check-module-trees ~.module-import-prelude-value-shadow `mtre-385 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-385-1]]))
2214+++ test-module-import-root-cycle
2215+ (weld (weld (check-at ~.module-import-root-cycle ~[~.ui ~.main ~.jibb] src-386 `tok-386 `tre-386) (check-module-types ~.module-import-root-cycle ~[~.ui ~.main ~.jibb] src-386 `typ-386 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-386-1]])) (check-module-trees ~.module-import-root-cycle `mtre-386 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-386-1]]))
2216+++ test-module-import-root-import-shadow
2217+ (weld (check ~.module-import-root-import-shadow src-387 `tok-387 `tre-387) (check-module-types ~.module-import-root-import-shadow ~[%tests %golden ~.module-import-root-import-shadow %source %jibb] src-387 `typ-387 ~[[%fixture %title imp-387-1]] ~[[%label mark-387-1]] ~))
2218+++ test-module-import-separate-namespaces
2219+ (weld (weld (check ~.module-import-separate-namespaces src-388 `tok-388 `tre-388) (check-module-types ~.module-import-separate-namespaces ~[%tests %golden ~.module-import-separate-namespaces %source %jibb] src-388 `typ-388 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-388-1]])) (check-module-trees ~.module-import-separate-namespaces `mtre-388 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-388-1]]))
2220+++ test-module-import-sur-scope
2221+ (weld (weld (check ~.module-import-sur-scope src-389 `tok-389 `tre-389) (check-module-types ~.module-import-sur-scope ~[%tests %golden ~.module-import-sur-scope %source %jibb] src-389 `typ-389 ~[[%fixture %title imp-389-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-389-1]])) (check-module-trees ~.module-import-sur-scope `mtre-389 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-389-1]]))
2222+++ test-module-import-transitive
2223+ (weld (weld (check-at ~.module-import-transitive ~[~.ui ~.main ~.jibb] src-390 `tok-390 `tre-390) (check-module-types ~.module-import-transitive ~[~.ui ~.main ~.jibb] src-390 `typ-390 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-390-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-390-2] ['/ui/c.jibb' ~[~.ui ~.c ~.jibb] mod-390-3]])) (check-module-trees ~.module-import-transitive `mtre-390 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-390-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-390-2] ['/ui/c.jibb' ~[~.ui ~.c ~.jibb] mod-390-3]]))
2224+++ test-module-import-unused-invalid
2225+ (weld (weld (check ~.module-import-unused-invalid src-391 `tok-391 `tre-391) (check-module-types ~.module-import-unused-invalid ~[%tests %golden ~.module-import-unused-invalid %source %jibb] src-391 `typ-391 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-391-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-391-2]])) (check-module-trees ~.module-import-unused-invalid `mtre-391 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-391-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-391-2]]))
20812226++ test-prelude-1c-structural
2082− (weld (check ~.prelude-1c-structural src-374 `tok-374 `tre-374) (check-types ~.prelude-1c-structural ~[%tests %golden ~.prelude-1c-structural %source %jibb] src-374 `typ-374))
2227+ (weld (check ~.prelude-1c-structural src-392 `tok-392 `tre-392) (check-types ~.prelude-1c-structural ~[%tests %golden ~.prelude-1c-structural %source %jibb] src-392 `typ-392))
20832228++ test-prelude-3g-basic
2084− (weld (check ~.prelude-3g-basic src-375 `tok-375 `tre-375) (check-types ~.prelude-3g-basic ~[%tests %golden ~.prelude-3g-basic %source %jibb] src-375 `typ-375))
2229+ (weld (check ~.prelude-3g-basic src-393 `tok-393 `tre-393) (check-types ~.prelude-3g-basic ~[%tests %golden ~.prelude-3g-basic %source %jibb] src-393 `typ-393))
20852230++ test-prelude-3g-like
2086− (weld (check ~.prelude-3g-like src-376 `tok-376 `tre-376) (check-types ~.prelude-3g-like ~[%tests %golden ~.prelude-3g-like %source %jibb] src-376 `typ-376))
2231+ (weld (check ~.prelude-3g-like src-394 `tok-394 `tre-394) (check-types ~.prelude-3g-like ~[%tests %golden ~.prelude-3g-like %source %jibb] src-394 `typ-394))
20872232++ test-prelude-3g-structural
2088− (weld (check ~.prelude-3g-structural src-377 `tok-377 `tre-377) (check-types ~.prelude-3g-structural ~[%tests %golden ~.prelude-3g-structural %source %jibb] src-377 `typ-377))
2233+ (weld (check ~.prelude-3g-structural src-395 `tok-395 `tre-395) (check-types ~.prelude-3g-structural ~[%tests %golden ~.prelude-3g-structural %source %jibb] src-395 `typ-395))
20892234++ test-prelude-core-functions
2090− (weld (check ~.prelude-core-functions src-378 `tok-378 `tre-378) (check-types ~.prelude-core-functions ~[%tests %golden ~.prelude-core-functions %source %jibb] src-378 `typ-378))
2235+ (weld (check ~.prelude-core-functions src-396 `tok-396 `tre-396) (check-types ~.prelude-core-functions ~[%tests %golden ~.prelude-core-functions %source %jibb] src-396 `typ-396))
20912236++ test-prelude-list-helpers
2092− (weld (check ~.prelude-list-helpers src-379 `tok-379 `tre-379) (check-types ~.prelude-list-helpers ~[%tests %golden ~.prelude-list-helpers %source %jibb] src-379 `typ-379))
2237+ (weld (check ~.prelude-list-helpers src-397 `tok-397 `tre-397) (check-types ~.prelude-list-helpers ~[%tests %golden ~.prelude-list-helpers %source %jibb] src-397 `typ-397))
20932238++ test-prelude-list-unit
2094− (weld (check ~.prelude-list-unit src-380 `tok-380 `tre-380) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-380 `typ-380))
2239+ (weld (check ~.prelude-list-unit src-398 `tok-398 `tre-398) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-398 `typ-398))
20952240++ test-prelude-unit-list-transforms
2096− (weld (check ~.prelude-unit-list-transforms src-381 `tok-381 `tre-381) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-381 `typ-381))
2241+ (weld (check ~.prelude-unit-list-transforms src-399 `tok-399 `tre-399) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-399 `typ-399))
20972242++ test-types-import-mark
2098− (weld (check ~.types-import-mark src-382 `tok-382 `tre-382) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-382 `typ-382 ~[[%fixture %title imp-382-1]] ~[[%label mark-382-1]]))
2243+ (weld (check ~.types-import-mark src-400 `tok-400 `tre-400) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-400 `typ-400 ~[[%fixture %title imp-400-1]] ~[[%label mark-400-1]]))
20992244++ test-types-import-missing-mold
2100− (weld (check ~.types-import-missing-mold src-383 `tok-383 `tre-383) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-383 `typ-383 ~[[%fixture %missing imp-383-1]]))
2245+ (weld (check ~.types-import-missing-mold src-401 `tok-401 `tre-401) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-401 `typ-401 ~[[%fixture %missing imp-401-1]]))
21012246++ test-types-import-sur
2102− (weld (check ~.types-import-sur src-384 `tok-384 `tre-384) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-384 `typ-384 ~[[%fixture %title imp-384-1] [%fixture %pair imp-384-2]]))
2247+ (weld (check ~.types-import-sur src-402 `tok-402 `tre-402) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-402 `typ-402 ~[[%fixture %title imp-402-1] [%fixture %pair imp-402-2]]))
21032248++ test-types-module-fixtures
2104− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-385 `tok-385 `tre-385) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-385 `typ-385 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-385-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-385-2]])) (check-module-trees ~.types-module-fixtures `mtre-385 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-385-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-385-2]]))
2249+ (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-403 `tok-403 `tre-403) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-403 `typ-403 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-403-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-403-2]])) (check-module-trees ~.types-module-fixtures `mtre-403 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-403-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-403-2]]))
21052250++ test-types-module-mixed
2106− (weld (weld (check ~.types-module-mixed src-386 `tok-386 `tre-386) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-386 `typ-386 ~[[%fixture %title imp-386-1]] ~[[%label mark-386-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-386-1]])) (check-module-trees ~.types-module-mixed `mtre-386 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-386-1]]))
2251+ (weld (weld (check ~.types-module-mixed src-404 `tok-404 `tre-404) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-404 `typ-404 ~[[%fixture %title imp-404-1]] ~[[%label mark-404-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-404-1]])) (check-module-trees ~.types-module-mixed `mtre-404 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-404-1]]))
21072252++ test-types-partial-apply
2108− (weld (check ~.types-partial-apply src-387 `tok-387 `tre-387) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-387 `typ-387))
2253+ (weld (check ~.types-partial-apply src-405 `tok-405 `tre-405) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-405 `typ-405))
21092254++ test-types-partial-atom-alias
2110− (weld (check ~.types-partial-atom-alias src-388 `tok-388 `tre-388) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-388 `typ-388))
2255+ (weld (check ~.types-partial-atom-alias src-406 `tok-406 `tre-406) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-406 `typ-406))
21112256++ test-types-partial-atom-constraint
2112− (weld (check ~.types-partial-atom-constraint src-389 `tok-389 `tre-389) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-389 `typ-389))
2257+ (weld (check ~.types-partial-atom-constraint src-407 `tok-407 `tre-407) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-407 `typ-407))
21132258++ test-types-partial-atom-widening
2114− (weld (check ~.types-partial-atom-widening src-390 `tok-390 `tre-390) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-390 `typ-390))
2259+ (weld (check ~.types-partial-atom-widening src-408 `tok-408 `tre-408) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-408 `typ-408))
21152260++ test-types-partial-aura
2116− (weld (check ~.types-partial-aura src-391 `tok-391 `tre-391) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-391 `typ-391))
2261+ (weld (check ~.types-partial-aura src-409 `tok-409 `tre-409) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-409 `typ-409))
21172262++ test-types-partial-aura-family
2118− (weld (check ~.types-partial-aura-family src-392 `tok-392 `tre-392) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-392 `typ-392))
2263+ (weld (check ~.types-partial-aura-family src-410 `tok-410 `tre-410) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-410 `typ-410))
21192264++ test-types-partial-aura-generalization
2120− (weld (check ~.types-partial-aura-generalization src-393 `tok-393 `tre-393) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-393 `typ-393))
2265+ (weld (check ~.types-partial-aura-generalization src-411 `tok-411 `tre-411) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-411 `typ-411))
21212266++ test-types-partial-bare-atom
2122− (weld (check ~.types-partial-bare-atom src-394 `tok-394 `tre-394) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-394 `typ-394))
2267+ (weld (check ~.types-partial-bare-atom src-412 `tok-412 `tre-412) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-412 `typ-412))
21232268++ test-types-partial-branch-widening
2124− (weld (check ~.types-partial-branch-widening src-395 `tok-395 `tre-395) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-395 `typ-395))
2269+ (weld (check ~.types-partial-branch-widening src-413 `tok-413 `tre-413) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-413 `typ-413))
21252270++ test-types-partial-conflicting-sites
2126− (weld (check ~.types-partial-conflicting-sites src-396 `tok-396 `tre-396) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-396 `typ-396))
2271+ (weld (check ~.types-partial-conflicting-sites src-414 `tok-414 `tre-414) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-414 `typ-414))
21272272++ test-types-partial-decimal-default
2128− (weld (check ~.types-partial-decimal-default src-397 `tok-397 `tre-397) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-397 `typ-397))
2273+ (weld (check ~.types-partial-decimal-default src-415 `tok-415 `tre-415) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-415 `typ-415))
21292274++ test-types-partial-dependency-chain
2130− (weld (check ~.types-partial-dependency-chain src-398 `tok-398 `tre-398) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-398 `typ-398))
2275+ (weld (check ~.types-partial-dependency-chain src-416 `tok-416 `tre-416) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-416 `typ-416))
21312276++ test-types-partial-explicit-capital
2132− (weld (check ~.types-partial-explicit-capital src-399 `tok-399 `tre-399) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-399 `typ-399))
2277+ (weld (check ~.types-partial-explicit-capital src-417 `tok-417 `tre-417) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-417 `typ-417))
21332278++ test-types-partial-forward
2134− (weld (check ~.types-partial-forward src-400 `tok-400 `tre-400) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-400 `typ-400))
2279+ (weld (check ~.types-partial-forward src-418 `tok-418 `tre-418) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-418 `typ-418))
21352280++ test-types-partial-generalization
2136− (weld (check ~.types-partial-generalization src-401 `tok-401 `tre-401) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-401 `typ-401))
2281+ (weld (check ~.types-partial-generalization src-419 `tok-419 `tre-419) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-419 `typ-419))
21372282++ test-types-partial-identity
2138− (weld (check ~.types-partial-identity src-402 `tok-402 `tre-402) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-402 `typ-402))
2283+ (weld (check ~.types-partial-identity src-420 `tok-420 `tre-420) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-420 `typ-420))
21392284++ test-types-partial-independent-atoms
2140− (weld (check ~.types-partial-independent-atoms src-403 `tok-403 `tre-403) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-403 `typ-403))
2285+ (weld (check ~.types-partial-independent-atoms src-421 `tok-421 `tre-421) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-421 `typ-421))
21412286++ test-types-partial-local-molds
2142− (weld (check ~.types-partial-local-molds src-404 `tok-404 `tre-404) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-404 `typ-404))
2287+ (weld (check ~.types-partial-local-molds src-422 `tok-422 `tre-422) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-422 `typ-422))
21432288++ test-types-partial-locals
2144− (weld (check ~.types-partial-locals src-405 `tok-405 `tre-405) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-405 `typ-405))
2289+ (weld (check ~.types-partial-locals src-423 `tok-423 `tre-423) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-423 `typ-423))
21452290++ test-types-partial-many-atom-constraints
2146− (weld (check ~.types-partial-many-atom-constraints src-406 `tok-406 `tre-406) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-406 `typ-406))
2291+ (weld (check ~.types-partial-many-atom-constraints src-424 `tok-424 `tre-424) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-424 `typ-424))
21472292++ test-types-partial-mold-bare-aura
2148− (weld (check ~.types-partial-mold-bare-aura src-407 `tok-407 `tre-407) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-407 `typ-407))
2293+ (weld (check ~.types-partial-mold-bare-aura src-425 `tok-425 `tre-425) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-425 `typ-425))
21492294++ test-types-partial-mold-composite
2150− (weld (check ~.types-partial-mold-composite src-408 `tok-408 `tre-408) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-408 `typ-408))
2295+ (weld (check ~.types-partial-mold-composite src-426 `tok-426 `tre-426) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-426 `typ-426))
21512296++ test-types-partial-mold-forward
2152− (weld (check ~.types-partial-mold-forward src-409 `tok-409 `tre-409) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-409 `typ-409))
2297+ (weld (check ~.types-partial-mold-forward src-427 `tok-427 `tre-427) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-427 `typ-427))
21532298++ test-types-partial-mold-recursive
2154− (weld (check ~.types-partial-mold-recursive src-410 `tok-410 `tre-410) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-410 `typ-410))
2299+ (weld (check ~.types-partial-mold-recursive src-428 `tok-428 `tre-428) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-428 `typ-428))
21552300++ test-types-partial-occurs
2156− (weld (check ~.types-partial-occurs src-411 `tok-411 `tre-411) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-411 `typ-411))
2301+ (weld (check ~.types-partial-occurs src-429 `tok-429 `tre-429) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-429 `typ-429))
21572302++ test-types-partial-projection
2158− (weld (check ~.types-partial-projection src-412 `tok-412 `tre-412) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-412 `typ-412))
2303+ (weld (check ~.types-partial-projection src-430 `tok-430 `tre-430) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-430 `typ-430))
21592304++ test-types-partial-shadow-global
2160− (weld (check ~.types-partial-shadow-global src-413 `tok-413 `tre-413) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-413 `typ-413))
2305+ (weld (check ~.types-partial-shadow-global src-431 `tok-431 `tre-431) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-431 `typ-431))
21612306++ test-types-partial-shared-tvar
2162− (weld (check ~.types-partial-shared-tvar src-414 `tok-414 `tre-414) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-414 `typ-414))
2307+ (weld (check ~.types-partial-shared-tvar src-432 `tok-432 `tre-432) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-432 `typ-432))
21632308++ test-types-partial-union-cases
2164− (weld (check ~.types-partial-union-cases src-415 `tok-415 `tre-415) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-415 `typ-415))
2309+ (weld (check ~.types-partial-union-cases src-433 `tok-433 `tre-433) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-433 `typ-433))
21652310++ test-types-partial-union-edges
2166− (weld (check ~.types-partial-union-edges src-416 `tok-416 `tre-416) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-416 `typ-416))
2311+ (weld (check ~.types-partial-union-edges src-434 `tok-434 `tre-434) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-434 `typ-434))
21672312++ test-types-partial-unresolved-tag
2168− (weld (check ~.types-partial-unresolved-tag src-417 `tok-417 `tre-417) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-417 `typ-417))
2313+ (weld (check ~.types-partial-unresolved-tag src-435 `tok-435 `tre-435) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-435 `typ-435))
21692314::
21702315:: +check: run golden:jibb on a case and compare both outputs
21712316::
@@ -2327,5 +2472,5 @@
23272472 [name.fixture (read-mark:jibb-import name.fixture cor)]
23282473 =/ sources=(list [path=path source=@t])
23292474 (turn modules |=(item=[label=@t at=path source=@t] [at.item source.item]))
2330− (golden-types-with-modules:jibb at src external mark-external sources)
2475+ (golden-types-with-prelude:jibb at src external mark-external sources prelude-source)
23312476--
tests/type-module-scope/about.txtnew file+5
@@ -0,0 +1,5 @@
1+The partial Jibb module interface is available only with a parseable prelude
2+source. Names from the prelude occupy separate value and mold namespaces;
3+import faces cannot shadow either. This synthetic prelude exercises a value
4+whose name is used as an imported mold and a mold whose name is used as an
5+imported value. Empty and malformed prelude sources fail closed.
tests/type-module-scope/expected.txtnew file+9
@@ -0,0 +1,9 @@
1+partial inference; module not checked
2+++ identity: $-(@t @t)
3+++ atom: @p
4+partial inference; module not checked
5+prelude source missing; module import inference unsupported
6+partial inference; module not checked
7+prelude source does not parse; module import inference unsupported
8+partial inference; module not checked
9+module has conflicting names
tools/golden+21−7
@@ -55,7 +55,7 @@ HARNESS = r""":: The harness tools/golden writes after the library. It runs
5555 ==
5656::
5757++ run
58− |= [name=@t metadata=[logical=(unit path) check=? imports=(list [module=term mold=term source=@t]) marks=(list [name=term source=@t]) modules=(list [label=@t at=path source=@t])] src=@t]
58+ |= [name=@t metadata=[logical=(unit path) check=? imports=(list [module=term mold=term source=@t]) marks=(list [name=term source=@t]) module-check=? modules=(list [label=@t at=path source=@t])] src=@t]
5959 ^- @t
6060 =/ at=path ?~(logical.metadata (file name) u.logical.metadata)
6161 =/ parsed (mule |.((golden:lib at src)))
@@ -96,6 +96,7 @@ HARNESS = r""":: The harness tools/golden writes after the library. It runs
9696 (rap 3 ~[(crip (a-co:co (met 3 b))) ':' b ','])
9797{import-helper}
9898{module-helper}
99+{prelude-helper}
99100--
100101"""
101102
@@ -161,6 +162,7 @@ class Case:
161162 self.imports = golden_case.sur_imports(folder)
162163 self.marks = golden_case.mark_imports(folder)
163164 self.modules = golden_case.module_fixtures(folder)
165+ self.want_modules = golden_case.wants_modules(folder)
164166 except ValueError as e:
165167 raise ue.ToolError(str(e))
166168 self.want_types = golden_case.wants_types(folder)
@@ -218,10 +220,11 @@ def run_lines(case):
218220 source = '(rap 3 `(list @t)`~[%s])' % ' '.join(ue.cord_literal(p) for p in parts)
219221 fixtures.append('[%s %s %s]' % (ue.cord_literal(logical.encode()), at, source))
220222 modules = '~[' + ' '.join(fixtures) + ']' if fixtures else '~'
221− out = [' %%^ run %s [%s %s %s %s %s]' % (
223+ out = [' %%^ run %s [%s %s %s %s %s %s]' % (
222224 ue.cord_literal(case.name.encode()),
223225 '`' + case.logical_path if case.logical_path else '~',
224− '%.y' if case.want_types else '%.n', imports, marks, modules),
226+ '%.y' if case.want_types else '%.n', imports, marks,
227+ '%.y' if case.want_modules else '%.n', modules),
225228 ' %- text',
226229 ' :~ ' + ue.cord_literal(lines[0])]
227230 out += [' ' + ue.cord_literal(line) for line in lines[1:]]
@@ -235,7 +238,7 @@ def golden_program(lib_path, cases):
235238 imported = any(c.imports or c.marks for c in cases)
236239 has_marks = any(c.marks for c in cases)
237240 has_modules = any(c.modules for c in cases)
238− has_module_types = any(c.modules and c.want_types for c in cases)
241+ has_module_types = any(c.want_modules and c.want_types for c in cases)
239242 harness = HARNESS
240243 if imported:
241244 reader = ue.read_text(os.path.join(ue.ROOT, 'jibb-dev', 'lib', 'jibb-import.hoon'))
@@ -252,15 +255,26 @@ def golden_program(lib_path, cases):
252255 surs = '(import-types imports.metadata)' if imported else '~'
253256 marks = '(import-marks marks.metadata)' if imported else '~'
254257 modules = '(turn modules.metadata |=(item=[label=@t at=path source=@t] [at.item source.item]))'
255− types_value = ('?~(modules.metadata %s (golden-types-with-modules:lib '
256− 'at src %s %s %s))' % (types_value, surs, marks, modules))
258+ types_value = ('?:(module-check.metadata (golden-types-with-prelude:lib '
259+ 'at src %s %s %s prelude-source) %s)' % (surs, marks, modules, types_value))
257260 types_expr = '?:(check.metadata %s \'\')' % types_value
261+ prelude_helper = ''
262+ if has_module_types:
263+ prelude_path = os.path.join(ue.ROOT, 'jibb-dev', 'lib', 'jibb', 'prelude.jibb')
264+ try:
265+ with open(prelude_path, 'rb') as f:
266+ parts = ue.cord_pieces(f.read())
267+ except OSError as e:
268+ raise ue.ToolError('cannot read the Jibb prelude %s: %s' % (prelude_path, e))
269+ prelude_helper = "++ prelude-source\n ^- @t\n (rap 3 `(list @t)`~[%s])\n" % (
270+ ' '.join(ue.cord_literal(p) for p in parts))
258271 prog.add(harness.replace('{count}', str(len(cases)))
259272 .replace('{runs}', runs)
260273 .replace('{types-expr}', types_expr if any(c.want_types for c in cases) else "''")
261274 .replace('{import-helper}', IMPORT_HELPER if imported else '')
262275 .replace('{modules-expr}', '(module-trees modules.metadata)' if has_modules else "''")
263− .replace('{module-helper}', MODULE_HELPER if has_modules else ''),
276+ .replace('{module-helper}', MODULE_HELPER if has_modules else '')
277+ .replace('{prelude-helper}', prelude_helper),
264278 '(harness)', 'harness')
265279 return prog
266280
tools/golden_case.py+7
@@ -115,6 +115,8 @@ def module_fixtures(folder):
115115 out, seen = [], set()
116116 for number, line in enumerate(lines, 1):
117117 logical = line[:-1] if line.endswith('\n') else line
118+ if not logical.strip() or logical.lstrip().startswith('#'):
119+ continue
118120 where = '%s:%d' % (filename, number)
119121 hoon_path = ui_path(logical, where)
120122 if logical in seen:
@@ -125,3 +127,8 @@ def module_fixtures(folder):
125127 seen.add(logical)
126128 out.append((logical, hoon_path, fixture))
127129 return out
130+
131+
132+def wants_modules(folder):
133+ """A manifest, even without sources, opts into module import checking."""
134+ return os.path.isfile(os.path.join(folder, 'modules.txt'))
tools/importer-test+1−1
@@ -34,4 +34,4 @@ if result.stdout != expected:
3434 result.stdout.decode().splitlines(keepends=True),
3535 fromfile='expected tree.txt', tofile='actual types'))
3636 sys.exit(1)
37−print('importer golden: 81 projections passed')
37+print('importer golden: 90 projections passed')
tools/ship+7−3
@@ -1069,11 +1069,14 @@ def generate_tests(golden):
10691069 has_imports |= bool(sur or marks)
10701070 has_marks |= bool(marks)
10711071 has_modules |= bool(modules)
1072− has_module_types |= bool(modules and golden_case.wants_types(folder))
1072+ has_module_types |= bool(golden_case.wants_modules(folder) and
1073+ golden_case.wants_types(folder))
10731074 except ValueError as e:
10741075 raise Unable(str(e))
10751076 lines = [fill(TESTS_HEADER, SOURCE=show(golden)).rstrip('\n'),
10761077 '/+ jibb, jibb-import' if has_imports or has_module_types else '/+ jibb']
1078+ if has_module_types:
1079+ lines.append('/* prelude-source %jibb /lib/jibb/prelude/jibb')
10771080 arms = []
10781081 for i, ((name, folder), arm) in enumerate(
10791082 zip(cases, arm_names([c[0] for c in cases])), 1):
@@ -1086,6 +1089,7 @@ def generate_tests(golden):
10861089 imports = golden_case.sur_imports(folder)
10871090 marks = golden_case.mark_imports(folder)
10881091 modules = golden_case.module_fixtures(folder)
1092+ want_modules = golden_case.wants_modules(folder)
10891093 except ValueError as e:
10901094 raise Unable(str(e))
10911095 args = ['~.%s' % name]
@@ -1113,7 +1117,7 @@ def generate_tests(golden):
11131117 else:
11141118 expected_types = '~'
11151119 path = logical or '~[%%tests %%golden ~.%s %%source %%jibb]' % name
1116− if modules:
1120+ if want_modules:
11171121 fixtures = []
11181122 for j, (module, mold, _) in enumerate(imports, 1):
11191123 face = 'imp-%d-%d' % (i, j)
@@ -1282,7 +1286,7 @@ def generate_tests(golden):
12821286 [name.fixture (read-mark:jibb-import name.fixture cor)]
12831287 =/ sources=(list [path=path source=@t])
12841288 (turn modules |=(item=[label=@t at=path source=@t] [at.item source.item]))
1285− (golden-types-with-modules:jibb at src external mark-external sources)
1289+ (golden-types-with-prelude:jibb at src external mark-external sources prelude-source)
12861290'''
12871291 return '\n'.join(lines) + '\n' + TESTS_HELPERS.replace('\n--\n', '\n' + types_helper + '--\n')
12881292
tools/testdata/selftest+21
@@ -317,6 +317,27 @@ def check_module_fixtures(c, tmp):
317317 c.expect(status == 2 and 'no fixture' in out, 'missing module: ' + out)
318318
319319
320+def check_empty_module_bundle(c, tmp):
321+ cases = copy_cases(tmp)
322+ folder = os.path.join(cases, 'basic')
323+ with open(os.path.join(folder, 'modules.txt'), 'w') as f:
324+ f.write('# no modules\n')
325+ with open(os.path.join(folder, 'about.txt'), 'a') as f:
326+ f.write('expect-types: test module input\n')
327+ lib, _ = stub_with(tmp, 'module-stub.hoon', '--',
328+ "++ golden-types-with-prelude\n"
329+ " |= [file=path src=@t surs=* marks=* modules=* prelude=@t]\n"
330+ " ^- @t\n"
331+ " ?~(prelude 'missing prelude' ?~(modules 'empty module bundle' 'unexpected modules'))\n"
332+ "--")
333+ status, out = golden('--dir', cases, '--lib', lib, '--case', 'basic', '--update')
334+ actual = read(os.path.join(folder, 'types.txt'))
335+ c.expect(status == 0 and actual == b'empty module bundle\n',
336+ 'empty bundle should reach module checker: %d %r\n%s' % (status, actual, out))
337+ c.expect(not os.path.exists(os.path.join(folder, 'module-trees.txt')),
338+ 'empty bundle should not require a fixture tree output')
339+
340+
320341def check_fixture_crash_isolated(c, tmp):
321342 """A bad Hoon fixture must not hide the Jibb parse or other cases."""
322343 original = os.path.join(ROOT, 'tests', 'golden', 'types-import-mark')
tools/testdata/ship-selftest+11−1
@@ -170,9 +170,19 @@ def generator_checks(tmp):
170170 out = ship.generate_tests(module_cases)
171171 check('Jibb module sources are also supplied to the partial checker',
172172 '(check-module-types ~.main' in out and
173− '(golden-types-with-modules:jibb at src external mark-external sources)' in out and
173+ '/* prelude-source %jibb /lib/jibb/prelude/jibb' in out and
174+ '(golden-types-with-prelude:jibb at src external mark-external sources prelude-source)' in out and
174175 "['/ui/card.jibb' ~[~.ui ~.card ~.jibb] mod-1-1]" in out and
175176 'src-1 `typ-1 ~ ~ ~[[' in out and '~[]' not in out, out)
177+ with open(os.path.join(folder, 'modules.txt'), 'w') as f:
178+ f.write('# no module fixtures\n')
179+ out = ship.generate_tests(module_cases)
180+ check('an empty module bundle still opts into module checking',
181+ '(check-module-types ~.main' in out and
182+ 'src-1 `typ-1 ~ ~ ~)' in out and
183+ '(check-module-trees ~.main' not in out and '~[]' not in out, out)
184+ with open(os.path.join(folder, 'modules.txt'), 'w') as f:
185+ f.write('/ui/card.jibb\n')
176186 os.makedirs(os.path.join(folder, 'sur'))
177187 os.makedirs(os.path.join(folder, 'mar'))
178188 with open(os.path.join(folder, 'sur', 'fixture.txt'), 'w') as f:
tools/type-module-scope-testnew file+31
@@ -0,0 +1,31 @@
1+#!/usr/bin/env python3
2+"""Compare the module/prelude scope report under urbit eval."""
3+
4+from pathlib import Path
5+import difflib
6+import subprocess
7+import sys
8+import tempfile
9+
10+root = Path(__file__).resolve().parent.parent
11+fixture = root / 'tests/type-module-scope/expected.txt'
12+tests = (root / 'tests/lib/jibb-module-scope.hoon').read_text()
13+tests = tests[tests.index('\n|%\n') + 1:]
14+expression = ('=/ jibb .\n=/ expected=wain (to-wain:format expected-text)\n'
15+ '=/ suite\n' + tests + '\nscope-output:suite\n')
16+with tempfile.TemporaryDirectory(prefix='jibb-module-scope-') as tmp:
17+ program = Path(tmp) / 'scope.hoon'
18+ program.write_text(expression)
19+ result = subprocess.run([str(root / 'tools/hoon'), '--raw', '-f', str(program),
20+ '--cord', 'expected-text=' + str(fixture)],
21+ stdout=subprocess.PIPE)
22+if result.returncode:
23+ sys.exit(result.returncode)
24+expected = fixture.read_bytes()
25+if result.stdout != expected:
26+ sys.stderr.writelines(difflib.unified_diff(
27+ expected.decode().splitlines(keepends=True),
28+ result.stdout.decode().splitlines(keepends=True),
29+ fromfile='expected.txt', tofile='actual types'))
30+ sys.exit(1)
31+print('module/prelude scope golden passed')