on master help sign in
270 files changed+7294−5322
since splitsnapshots
unifiedsplit
.github/workflows/check.yml+22 .gitignore+5 LICENSE+21 README.md+25−4 docs/README.md+4−3 docs/compiler.md+19−11 docs/development.md+29−76 docs/open-questions.md+4−50 docs/prelude-inventory.md+1−1 docs/reviews/2026-11-02-syntax-review.md+488 docs/spec/decisions.md+164−90 docs/status.md+11−6 flake.lock+41 flake.nix+192 jibb-dev/lib/jibb.hoon+805−367 my-app/desk.docket-0+1−1 tests/golden/module-import-api-derived-clash/about.txt+4 tests/golden/module-import-api-derived-clash/mar/full.txt+5 tests/golden/module-import-api-derived-clash/marks.txt+1 tests/golden/module-import-api-derived-clash/module-trees.txt+8 tests/golden/module-import-api-derived-clash/modules.txt+1 tests/golden/module-import-api-derived-clash/modules/ui/api/demo.jibb+5 tests/golden/module-import-api-derived-clash/source.jibb+2 tests/golden/module-import-api-derived-clash/tokens.txt+13 tests/golden/module-import-api-derived-clash/tree.txt+3 tests/golden/module-import-api-derived-clash/types.txt+8 tests/golden/module-import-api-import-error/about.txt+4 tests/golden/module-import-api-import-error/mar/full.txt+5 tests/golden/module-import-api-import-error/marks.txt+1 tests/golden/module-import-api-import-error/module-trees.txt+48 tests/golden/module-import-api-import-error/modules.txt+2 tests/golden/module-import-api-import-error/modules/ui/api/demo.jibb+5 tests/golden/module-import-api-import-error/modules/ui/stores/cart.jibb+12 tests/golden/module-import-api-import-error/source.jibb+2 tests/golden/module-import-api-import-error/tokens.txt+13 tests/golden/module-import-api-import-error/tree.txt+3 tests/golden/module-import-api-import-error/types.txt+8 tests/golden/module-import-api-mark-prelude-value/about.txt+4 tests/golden/module-import-api-mark-prelude-value/mar/same.txt+5 tests/golden/module-import-api-mark-prelude-value/marks.txt+1 tests/golden/module-import-api-mark-prelude-value/module-trees.txt+4 tests/golden/module-import-api-mark-prelude-value/modules.txt+1 tests/golden/module-import-api-mark-prelude-value/modules/ui/api/demo.jibb+2 tests/golden/module-import-api-mark-prelude-value/source.jibb+2 tests/golden/module-import-api-mark-prelude-value/tokens.txt+13 tests/golden/module-import-api-mark-prelude-value/tree.txt+3 tests/golden/module-import-api-mark-prelude-value/types.txt+2 tests/golden/module-import-api-mark-value/about.txt+4 tests/golden/module-import-api-mark-value/mar/full.txt+5 tests/golden/module-import-api-mark-value/marks.txt+1 tests/golden/module-import-api-mark-value/module-trees.txt+5 tests/golden/module-import-api-mark-value/modules.txt+1 tests/golden/module-import-api-mark-value/modules/ui/api/demo.jibb+3 tests/golden/module-import-api-mark-value/source.jibb+2 tests/golden/module-import-api-mark-value/tokens.txt+13 tests/golden/module-import-api-mark-value/tree.txt+3 tests/golden/module-import-api-mark-value/types.txt+2 tests/golden/module-import-api-nested-path/about.txt+4 tests/golden/module-import-api-nested-path/mar/full.txt+5 tests/golden/module-import-api-nested-path/marks.txt+1 tests/golden/module-import-api-nested-path/module-trees.txt+4 tests/golden/module-import-api-nested-path/modules.txt+1 tests/golden/module-import-api-nested-path/modules/ui/api/foo/bar.jibb+2 tests/golden/module-import-api-nested-path/source.jibb+2 tests/golden/module-import-api-nested-path/tokens.txt+15 tests/golden/module-import-api-nested-path/tree.txt+3 tests/golden/module-import-api-nested-path/types.txt+2 tests/golden/module-import-api-paths-mark-value/about.txt+4 tests/golden/module-import-api-paths-mark-value/mar/full.txt+5 tests/golden/module-import-api-paths-mark-value/mar/other.txt+5 tests/golden/module-import-api-paths-mark-value/marks.txt+2 tests/golden/module-import-api-paths-mark-value/module-trees.txt+7 tests/golden/module-import-api-paths-mark-value/modules.txt+1 tests/golden/module-import-api-paths-mark-value/modules/ui/api/demo.jibb+5 tests/golden/module-import-api-paths-mark-value/source.jibb+2 tests/golden/module-import-api-paths-mark-value/tokens.txt+13 tests/golden/module-import-api-paths-mark-value/tree.txt+3 tests/golden/module-import-api-paths-mark-value/types.txt+2 tests/golden/module-import-api-paths-scope-conflict/about.txt+4 tests/golden/module-import-api-paths-scope-conflict/mar/full.txt+5 tests/golden/module-import-api-paths-scope-conflict/marks.txt+1 tests/golden/module-import-api-paths-scope-conflict/module-trees.txt+6 tests/golden/module-import-api-paths-scope-conflict/modules.txt+1 tests/golden/module-import-api-paths-scope-conflict/modules/ui/api/demo.jibb+3 tests/golden/module-import-api-paths-scope-conflict/source.jibb+2 tests/golden/module-import-api-paths-scope-conflict/tokens.txt+13 tests/golden/module-import-api-paths-scope-conflict/tree.txt+3 tests/golden/module-import-api-paths-scope-conflict/types.txt+2 tests/golden/module-import-api-poke-clash/about.txt+4 tests/golden/module-import-api-poke-clash/mar/full.txt+5 tests/golden/module-import-api-poke-clash/marks.txt+1 tests/golden/module-import-api-poke-clash/module-trees.txt+5 tests/golden/module-import-api-poke-clash/modules.txt+1 tests/golden/module-import-api-poke-clash/modules/ui/api/demo.jibb+3 tests/golden/module-import-api-poke-clash/source.jibb+2 tests/golden/module-import-api-poke-clash/tokens.txt+13 tests/golden/module-import-api-poke-clash/tree.txt+3 tests/golden/module-import-api-poke-clash/types.txt+8 tests/golden/module-import-api-poke-reason/about.txt+4 tests/golden/module-import-api-poke-reason/module-trees.txt+3 tests/golden/module-import-api-poke-reason/modules.txt+1 tests/golden/module-import-api-poke-reason/modules/ui/api/demo.jibb+1 tests/golden/module-import-api-poke-reason/source.jibb+2 tests/golden/module-import-api-poke-reason/tokens.txt+13 tests/golden/module-import-api-poke-reason/tree.txt+3 tests/golden/module-import-api-poke-reason/types.txt+2 tests/golden/module-import-api-request-reason/about.txt+4 tests/golden/module-import-api-request-reason/mar/full.txt+5 tests/golden/module-import-api-request-reason/marks.txt+1 tests/golden/module-import-api-request-reason/module-trees.txt+7 tests/golden/module-import-api-request-reason/modules.txt+1 tests/golden/module-import-api-request-reason/modules/ui/api/demo.jibb+4 tests/golden/module-import-api-request-reason/source.jibb+2 tests/golden/module-import-api-request-reason/tokens.txt+21 tests/golden/module-import-api-request-reason/tree.txt+9 tests/golden/module-import-api-request-reason/types.txt+2 tests/golden/module-import-api-scope-conflict/about.txt+4 tests/golden/module-import-api-scope-conflict/mar/full.txt+5 tests/golden/module-import-api-scope-conflict/marks.txt+1 tests/golden/module-import-api-scope-conflict/module-trees.txt+11 tests/golden/module-import-api-scope-conflict/modules.txt+2 tests/golden/module-import-api-scope-conflict/modules/ui/api/demo.jibb+3 tests/golden/module-import-api-scope-conflict/modules/ui/lib.jibb+1 tests/golden/module-import-api-scope-conflict/source.jibb+2 tests/golden/module-import-api-scope-conflict/tokens.txt+13 tests/golden/module-import-api-scope-conflict/tree.txt+3 tests/golden/module-import-api-scope-conflict/types.txt+2 tests/golden/module-import-store-derived-clash/about.txt+4 tests/golden/module-import-store-derived-clash/module-trees.txt+40 tests/golden/module-import-store-derived-clash/modules.txt+1 tests/golden/module-import-store-derived-clash/modules/ui/stores/cart.jibb+12 tests/golden/module-import-store-derived-clash/source.jibb+2 tests/golden/module-import-store-derived-clash/tokens.txt+13 tests/golden/module-import-store-derived-clash/tree.txt+3 tests/golden/module-import-store-derived-clash/types.txt+8 tests/golden/module-import-store-face-clash/about.txt+4 tests/golden/module-import-store-face-clash/module-trees.txt+40 tests/golden/module-import-store-face-clash/modules.txt+1 tests/golden/module-import-store-face-clash/modules/ui/stores/cart.jibb+12 tests/golden/module-import-store-face-clash/source.jibb+2 tests/golden/module-import-store-face-clash/tokens.txt+13 tests/golden/module-import-store-face-clash/tree.txt+3 tests/golden/module-import-store-face-clash/types.txt+8 tests/golden/module-import-sur-scope/types.txt+1−1 tests/golden/module-missing-value-cycle/about.txt+4 tests/golden/module-missing-value-cycle/module-trees.txt+21 tests/golden/module-missing-value-cycle/modules.txt+1 tests/golden/module-missing-value-cycle/modules/ui/lib.jibb+4 tests/golden/module-missing-value-cycle/source.jibb+2 tests/golden/module-missing-value-cycle/tokens.txt+14 tests/golden/module-missing-value-cycle/tree.txt+5 tests/golden/module-missing-value-cycle/types.txt+2 tests/golden/module-missing-value-sample-shadow/about.txt+4 tests/golden/module-missing-value-sample-shadow/module-trees.txt+15 tests/golden/module-missing-value-sample-shadow/modules.txt+1 tests/golden/module-missing-value-sample-shadow/modules/ui/lib.jibb+3 tests/golden/module-missing-value-sample-shadow/source.jibb+2 tests/golden/module-missing-value-sample-shadow/tokens.txt+14 tests/golden/module-missing-value-sample-shadow/tree.txt+5 tests/golden/module-missing-value-sample-shadow/types.txt+4 tests/golden/types-cell-branch-context/types.txt+1−1 tests/golden/types-hole-module-boundary/types.txt+1−1 tests/golden/types-list-patterns/about.txt+1−1 tests/golden/types-list-patterns/source.jibb+4 tests/golden/types-list-patterns/tokens.txt+241−215 tests/golden/types-list-patterns/tree.txt+121−110 tests/golden/types-list-patterns/types.txt+1 tests/golden/types-local-capitals/about.txt+1−1 tests/golden/types-local-capitals/types.txt+7−1 tests/golden/types-local-error-call/about.txt+4 tests/golden/types-local-error-call/source.jibb+27 tests/golden/types-local-error-call/tokens.txt+171 tests/golden/types-local-error-call/tree.txt+82 tests/golden/types-local-error-call/types.txt+33 tests/golden/types-local-error-cast/about.txt+4 tests/golden/types-local-error-cast/source.jibb+56 tests/golden/types-local-error-cast/tokens.txt+339 tests/golden/types-local-error-cast/tree.txt+151 tests/golden/types-local-error-cast/types.txt+54 tests/golden/types-local-error-forward/about.txt+4 tests/golden/types-local-error-forward/source.jibb+26 tests/golden/types-local-error-forward/tokens.txt+157 tests/golden/types-local-error-forward/tree.txt+69 tests/golden/types-local-error-forward/types.txt+8 tests/golden/types-local-error-order/about.txt+4 tests/golden/types-local-error-order/source.jibb+80 tests/golden/types-local-error-order/tokens.txt+588 tests/golden/types-local-error-order/tree.txt+269 tests/golden/types-local-error-order/types.txt+12 tests/golden/types-local-recursive/about.txt+1−1 tests/golden/types-local-recursive/types.txt+15−3 tests/golden/types-many-variables/about.txt+4 tests/golden/types-many-variables/source.jibb+6 tests/golden/types-many-variables/tokens.txt+266 tests/golden/types-many-variables/tree.txt+26 tests/golden/types-many-variables/types.txt+13 tests/golden/types-module-fixtures/types.txt+1−1 tests/golden/types-partial-branch-widening/about.txt+1−1 tests/golden/types-partial-branch-widening/source.jibb+55 tests/golden/types-partial-branch-widening/tokens.txt+358−18 tests/golden/types-partial-branch-widening/tree.txt+164−14 tests/golden/types-partial-branch-widening/types.txt+16−3 tests/golden/types-partial-forward/about.txt+1−1 tests/golden/types-partial-forward/source.jibb+3−1 tests/golden/types-partial-forward/tokens.txt+10−2 tests/golden/types-partial-forward/tree.txt+3−1 tests/golden/types-partial-forward/types.txt+2 tests/golden/types-prelude-arithmetic/about.txt+1−1 tests/golden/types-prelude-arithmetic/types.txt+7−1 tests/golden/types-prelude-sub/types.txt+1−1 tests/golden/types-prelude-ui/types.txt+1−1 tests/golden/types-recursion-scc-import-bad/types.txt+1−1 tests/golden/types-recursion-scc-local/about.txt+1−1 tests/golden/types-recursion-scc-local/types.txt+1−1 tests/golden/types-recursive-branch/types.txt+4−4 tests/golden/types-recursive-gate/types.txt+2−2 tests/golden/types-union-finite-generic/about.txt+1−1 tests/golden/types-union-finite-generic/types.txt+7−1 tests/golden/types-union-finite/about.txt+1−1 tests/golden/types-union-finite/source.jibb+7 tests/golden/types-union-finite/tokens.txt+210−163 tests/golden/types-union-finite/tree.txt+99−78 tests/golden/types-union-finite/types.txt+3−2 tests/golden/types-union-patterns-generic/about.txt+1−1 tests/golden/types-union-patterns-generic/types.txt+7−1 tests/lib/jibb-api-paths.hoon+39−2 tests/lib/jibb-bridge.hoon+5−2 tests/lib/jibb-deferred.hoon+14−8 tests/lib/jibb-full-overlap-basic.hoon+63−16 tests/lib/jibb-hole-guards.hoon+3−3 tests/lib/jibb-program-init.hoon+33−5 tests/lib/jibb-program-update.hoon+1−1 tests/lib/jibb-proj-guards.hoon+3−3 tests/lib/jibb-theme.hoon+1−1 tests/lib/jibb-todo-full.hoon+9 tests/lib/jibb.hoon−4000 tests/type-api-paths/about.txt+1−1 tests/type-api-paths/expected.txt+17−2 tests/type-deferred/expected.txt+3−2 tests/type-full-overlap/about.txt+1−1 tests/type-full-overlap/atoms.txt+4 tests/type-full-overlap/expected-basic.txt+7 tests/type-full-overlap/flag.txt+4 tests/type-full-overlap/nested.txt+4 tests/type-full-overlap/order.txt+7 tests/type-import/about.txt+4−2 tests/type-import/expected.txt+15−5 tests/type-import/source.txt+1 tests/type-poke/about.txt+5−2 tests/type-poke/expected.txt+11−5 tests/type-program-main/about.txt+1−1 tests/type-program-main/initializer-alias.txt+11 tests/type-program-main/initializer-nested-branch.txt+24 tests/type-program-main/initializer-open-update.txt+10 tests/type-program-main/initializer-open-view.txt+11 tests/type-program-main/initializer-pun.txt+11 tests/type-todo-full/about.txt+1−1 tests/type-todo-full/cast-init.txt+43 tools/check+384 tools/hoon+8−2 tools/ship+24 tools/testdata/clay-fixtures-selftest+3−1 tools/testdata/selftest+6 tools/testdata/ship-selftest+4−1 tools/type-full-overlap-test+1−1 tools/type-program-init-test+8−2 tools/type-todo-full-test+8−1 tools/urbit_eval.py+7−3 vendor/LICENSE-urbit.txt+21 vendor/SOURCES.txt+3−1
.github/workflows/check.ymlnew file+22
@@ -0,0 +1,22 @@
1+# The eval checks on every push to master and every pull request:
2+# the flake builds the desks and runs `tools/check --group eval` in the
3+# Nix sandbox (see flake.nix). The ship checks need a fake ~zod and run
4+# before pushing, as docs/development.md says.
5+name: check
6+
7+on:
8+ push:
9+ branches: [master]
10+ pull_request:
11+ workflow_dispatch:
12+
13+jobs:
14+ eval:
15+ name: desks and eval checks
16+ runs-on: ubuntu-latest
17+ timeout-minutes: 120
18+ steps:
19+ - uses: actions/checkout@v4
20+ - uses: cachix/install-nix-action@v31
21+ - name: Build the desks and run the eval checks
22+ run: nix build --print-build-logs .#checks.x86_64-linux.desks .#checks.x86_64-linux.eval
.gitignore+5
@@ -1,2 +1,7 @@
11__pycache__/
22*.pyc
3+result
4+result-*
5+
6+# Generated by tools/ship gen-tests; desk assembly regenerates it.
7+/tests/lib/jibb.hoon
LICENSEnew file+21
@@ -0,0 +1,21 @@
1+MIT License
2+
3+Copyright (c) 2026 the Jibb authors
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
README.md+25−4
@@ -1,6 +1,6 @@
11# Jibb
22
3−Jibb is a UI language for Urbit: a Hoon dialect with an indentation layout. Its design doc, [Jibb — an Elm-architecture UI language for Urbit](https://claude.ai/artifact/DMBr48qzi5z8hcwn2ccPBv), is the spec, and where this code and the doc disagree, the doc wins.
3+Jibb is a UI language for Urbit: a Hoon dialect with an indentation layout. Its design doc, [Jibb — an Elm-architecture UI language for Urbit](https://claude.ai/artifact/DMBr48qzi5z8hcwn2ccPBv), is the spec. Its copy in [docs/spec/](docs/spec/) records decisions the doc doesn't have yet, so until the doc is synced, that copy wins where it and the doc differ, and where this code and the spec disagree, the spec wins.
44
55Milestone 1 of the doc's eight, the parser and the `%jibb` mark, is done; milestone 2, types and prelude, is in progress. The type checker and Hoon importer are partial. [docs/](docs/) holds a copy of the doc's tabs, the status of each milestone, the open questions, a development guide, a map of the compiler, and the brief for milestone 2.
66
@@ -11,9 +11,26 @@ Milestone 1 of the doc's eight, the parser and the `%jibb` mark, is done; milest
1111- `my-app/`: an example app desk built from the doc's worked examples.
1212- `vendor/`: pinned copies of the base-dev and landscape files the desks need.
1313- `tests/`: golden cases in `golden/<case>/`, and on-ship tests for the `-test` thread in `lib/jibb.hoon`.
14−- `tools/`: dev tooling: `golden`, `hoon` and `doc-blocks`, with their self-test in `testdata/`, and `ship`.
14+- `tools/`: dev tooling: `golden`, `hoon` and `doc-blocks`, with their self-test in `testdata/`, `ship`, and `check`, which runs every check.
1515- `docs/`: the doc's tabs as Markdown in `spec/`, the status, the open questions, the development guide, the compiler's map, and briefs for milestones in `prompts/`.
1616
17+## Building and checking with Nix
18+
19+The flake (`flake.nix`, pinned by `flake.lock`) builds the desks and runs every check, with vere 4.6, Python 3, click and the brass pill pinned:
20+
21+```
22+nix build # result/my-app, result/jibb, result/jibb-dev: the desks
23+nix flake check # every check: the eval group and, on Linux, the ship group on a fresh fake ~zod
24+nix develop # a shell with urbit, python3 and click, for running the tools by hand
25+nix build .#fakezod # a freshly booted fake ~zod pier (Linux)
26+```
27+
28+Jibb has no native binary: what it ships is desks, Hoon and Jibb source that a ship builds. So `nix build` writes the three desks exactly as `tools/ship sync` would commit them (it runs `tools/ship assemble`), and compiles `jibb.hoon` and `jibb-import.hoon` under `urbit eval` to check that they build.
29+
30+`nix flake check` builds that too, then runs `tools/check --group eval` and, on Linux, `tools/check --group ship` against a copy of a fake ~zod it boots from the pill. Everything runs in the Nix sandbox without network, so a check can't pass because of something on your machine. Each group is one build; a failure prints the failing checks' output, and a passing build keeps every check's log in its output. On four CPUs it took about 20 minutes, the two groups building side by side: 18 minutes for the eval group, most of it `type-todo-full-test`, and 10 for the ship group. To run a single check, use `nix develop -c tools/check <name>` (see [docs/development.md](docs/development.md#before-pushing)).
31+
32+Limits: the ship checks need Linux, since `tools/ship` finds the ship's processes in `/proc`, so on macOS `nix flake check` runs only the eval group. Only `x86_64-linux` has been tried; the flake also declares `aarch64-linux` and `aarch64-darwin`, the other platforms nixpkgs builds vere for.
33+
1734## Golden tests
1835
1936Each 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).
@@ -67,6 +84,10 @@ tools/doc-blocks Grammar.md Overview.md Core-language.md # fresh exports
6784
6885It matches each labelled block to the case whose `source.jibb` is the block's text plus a newline, and lists the blocks no case holds, each with a diff against the closest unmatched case, and the `doc-*` cases no block holds. Pass every tab with Jibb blocks, or the other tabs' cases count as stale. The exit status is 0 when every block has a case and every case a block, 1 when one doesn't, and 2 when the check can't run, for example because no block is labelled `jibb`.
6986
87+## Licence
88+
89+Jibb is under the MIT licence, in [LICENSE](LICENSE). Two kinds of files in it are other people's, under their own MIT licences: the files in `vendor/` are copies from urbit/urbit, whose licence is in [vendor/LICENSE-urbit.txt](vendor/LICENSE-urbit.txt), and the Tlon `/sur` files that `tests/` uses as importer fixtures come from tloncorp/tlon-apps, whose licence is in [tests/importer/tlon-license.txt](tests/importer/tlon-license.txt).
90+
7091## Fake ship
7192
7293`tools/ship` runs the desks on a fake `~zod` at `/root/urbit/zod` (`--pier` or `$JIBB_PIER`). It needs Python 3 and click (`/root/src/tools/pkg/click/click`, or `--click`). The ship runs in the background, logging to `/root/urbit/zod.log`.
@@ -78,7 +99,7 @@ tools/ship log # the end of its log
7899tools/ship stop
79100```
80101
81−`tools/ship sync <desk>` assembles a desk from the repo's folders, creates it if it's missing (as `|new-desk` does), mounts it, deletes from the desk through Clay the files the repo doesn't have, makes the mount hold exactly the repo's files, runs `|commit` and waits until the desk matches the repo, checking every file. If Clay rejects the commit, it prints Clay's error, which the log doesn't show.
102+`tools/ship assemble --out <dir> [<desk> ...]` writes the desks' files to `<dir>/<desk>` as sync assembles them, without a ship; `nix build` uses it. `tools/ship sync <desk>` assembles a desk from the repo's folders, creates it if it's missing (as `|new-desk` does), mounts it, deletes from the desk through Clay the files the repo doesn't have, makes the mount hold exactly the repo's files, runs `|commit` and waits until the desk matches the repo, checking every file. If Clay rejects the commit, it prints Clay's error, which the log doesn't show.
82103
83104| Desk | Assembled from |
84105| --- | --- |
@@ -86,7 +107,7 @@ tools/ship stop
86107| `jibb` | `vendor/*`, then `jibb` |
87108| `jibb-dev` | `vendor/*`, then `jibb-dev`, then `tests/`, with `tests/lib/jibb.hoon` generated, and `jibb/sys.kelvin` |
88109
89−The `jibb-dev` desk runs the golden cases on the ship, as `-test` arms. `tools/ship gen-tests` writes `tests/lib/jibb.hoon` from `tests/golden`: for each case it imports `source.jibb`, `tokens.txt` and `tree.txt` with `/*`, and its `test-` arm compares `golden:jibb` with them. Cases opted into `types.txt` also compare the partial inference output. Don't edit that file; `--check` says whether it's up to date. `tools/ship test` regenerates it, syncs the desk and runs `-test /=jibb-dev=/tests`, printing each case's OK, FAILED or CRASHED and the reason. It exits 0 only when every case passes.
110+The `jibb-dev` desk runs the golden cases on the ship, as `-test` arms. `tools/ship gen-tests` writes `tests/lib/jibb.hoon` from `tests/golden`: for each case it imports `source.jibb`, `tokens.txt` and `tree.txt` with `/*`, and its `test-` arm compares `golden:jibb` with them. Cases opted into `types.txt` also compare the partial inference output. The file is generated, not committed (review question 32): desk assembly writes it afresh, and `.gitignore` lists it. `tools/ship test` regenerates it, syncs the desk and runs `-test /=jibb-dev=/tests`, printing each case's OK, FAILED or CRASHED and the reason. It exits 0 only when every case passes.
90111
91112```
92113tools/ship test # the library and tests/golden
docs/README.md+4−3
@@ -6,7 +6,7 @@ The current full-module checker also has a narrow static/data-page slice, docume
66
77| File | What it holds |
88| --- | --- |
9−| [spec/](spec/) | The doc's tabs, as Markdown |
9+| [spec/](spec/) | The doc's tabs, as Markdown, with decisions the doc doesn't have yet; until the doc is synced, this copy is the spec |
1010| [status.md](status.md) | The eight milestones, what milestone 1 built, and how to check it |
1111| [open-questions.md](open-questions.md) | Questions still open: the plan's, the grammar's, and those milestone 2 raises |
1212| [development.md](development.md) | Setting up a machine, the ground rules, the checks to run before pushing |
@@ -16,6 +16,7 @@ The current full-module checker also has a narrow static/data-page slice, docume
1616| [prompts/drop-union-rune.md](prompts/drop-union-rune.md) | The completed brief for dropping `$?`, as decided on 2026-10-30, before milestone 2 |
1717| [reviews/2026-11-02-repo-review.md](reviews/2026-11-02-repo-review.md) | A review of the whole repository on 2026-11-02: bugs, gaps and simplifications, each checked by a second reviewer |
1818| [reviews/2026-11-02-questions.md](reviews/2026-11-02-questions.md) | The 45 decisions that review raises, with options and recommendations |
19+| [reviews/2026-11-02-syntax-review.md](reviews/2026-11-02-syntax-review.md) | A review of Jibb's syntax on 2026-11-02: 15 verified proposals with before and after examples, what to keep, and questions for @iko |
1920
2021## The spec
2122
@@ -26,14 +27,14 @@ The current full-module checker also has a narrow static/data-page slice, docume
2627| [spec/overview.md](spec/overview.md) | Jibb — an Elm-architecture UI language for Urbit: the language, the stages, the mark, the host, worked examples |
2728| [spec/grammar.md](spec/grammar.md) | Grammar: lexical rules, literals, runes, imports, modules, molds, tag resolution, patterns, the EBNF |
2829| [spec/core-language.md](spec/core-language.md) | Core language: the untyped language between the checker and both backends |
29−| [spec/decisions.md](spec/decisions.md) | Decisions: every choice, with the date it was made |
30+| [spec/decisions.md](spec/decisions.md) | Decisions: every choice, with the date it was made and whether the doc has it yet, and the settled milestone 2 questions |
3031| [spec/implementation-plan.md](spec/implementation-plan.md) | Implementation plan: the eight milestones, ground rules, architecture, risks, open questions |
3132
3233The doc has a sixth tab, "Loom on Urbit", which is empty, so it has no file.
3334
3435The overview's pipeline diagram, "Jibb pipeline · source to browser in three stages", is embedded content, so the export holds only a placeholder line for it under Architecture. The doc shows it.
3536
36−The two copies can diverge. Sync the repository decisions to the Claude document before refreshing this copy, then export each tab as Markdown again (in a Claude session, the Claude Docs connector's `export` gives each tab's Markdown), replace the files, and run:
37+The two copies can diverge, and until they are synced, this copy wins (review question 42). Sync the repository decisions to the Claude document before refreshing this copy: the rows that decisions.md's Synced column marks No or Check, and its settled milestone 2 questions. Then export each tab as Markdown again (in a Claude session, the Claude Docs connector's `export` gives each tab's Markdown), replace the files, and run:
3738
3839```
3940git diff docs/spec # what changed in the doc
docs/compiler.md+19−11
@@ -56,7 +56,9 @@ The core is split into chapters, `+| %name`, in this order:
5656| `%span-check` | `+check-spans`, which `+golden` runs on every tree, and `+check-spans-test` |
5757| `%type-inference` | The initial inference fragment and its unification helpers; not yet a module type checker |
5858
59−The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a cell pattern of two or more binders, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals, even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. Some proven non-gate value cycles are diagnosed; other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. Literal heads compare by their runtime noun, so `|=%$` can construct an explicit null-, loobean-zero- or term-zero-headed case. Equal heads with distinct payloads can be selected when exactly one payload fit is proven; unknown or ambiguous alternatives remain unsupported. Unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. Generic unions declared directly inside a body and recursive molds outside the source-proven slices described below remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample while retaining its origin, generic arguments and faces. Unnamed, pending-tag, recursive, unknown-atom and variable-bound union origins remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types and the source-bound gate-sample proof below. For a single recursive gate outside a group, the reporting path repeats inference rather than instantiating its generalized interface inside its own body; a group report uses its stored schemes. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
59+The inference fragment supports fixed auras, unrestricted `@`, one-way widening into it and toward aura-family ancestors, generic variables and gates, faced and unfaced cells, cell sample binders, known record field reads, a cell pattern of two or more binders, a complete two-arm loobean branch, a complete two-arm unit-shaped branch, closed local mold aliases and acyclic forward value references. For a supported single syntactic top-level recursive gate, the checker infers the sample first and uses that exact sample, including its field faces, in a monomorphic self placeholder. The completed body must unify with the placeholder before the gate is generalized; incompatible recursive arguments can report the call and argument sites. Uses of generalized top-level definitions instantiate their schemes independently. For a complete loobean branch with one direct self-call arm, the checker can infer the other arm independently and use its closed, fully resolved type to seed the recursive result; it then checks the whole body. Open or pending base types do not seed the result, and other branch shapes still depend on the existing partial inference. A supported single local recursive gate also uses a monomorphic self reference while its body is checked, then generalizes variables free of its enclosing environment; captured variables remain shared. Acyclic local value definitions can refer forward. When the remaining local definitions stop making progress and no cyclic group applies, the earliest of them whose definite error no order of the siblings could change reports it; otherwise the generic message remains. A definite error names sites, except an uncertain type hole, which names its site but is unsupported. A sibling can change another's result through a type variable the locals share, such as one in an untyped sample of the enclosing gate: a sibling's cast of the sample to `!!` makes every cast of it fit. So the error of a local that names no sibling and nothing whose type has a shared variable always counts. Another local's error counts only if no sibling had bound or refined a shared variable when it was tried and every other waiting definition also failed with sites, since one that waits without them, on a checker limit, a pending tag or its own nested stall, might in another order constrain the shared variable. In that case every definition is inferred against the same state in every order. A definition that infers but is then rejected as unsupported, such as for an uncertain type hole or a capital forced to a concrete type, reports its own message. Errors found while a cyclic group is inferred together are dropped, so a mutual group whose error comes after the call to its partner keeps the generic message. The checker collects written capitals per `++` before inference, excluding nested definitions: a capital used in an enclosing definition is shared with its locals, even when written later, while a capital introduced only in a local definition is generalized there. Sibling locals can introduce independent capitals with the same spelling; generic mold parameters keep their own scope. Top-level groups of syntactic gates are inferred together with monomorphic placeholders and shared substitutions, then generalized only after the whole group checks; downstream uses and library interfaces instantiate those schemes independently. A dependency graph identifies groups with two iterative depth-first passes; its conservative local-reference edges can reject otherwise valid programs. Top-level definitions are inferred in the order of the same graph's components, dependencies first, so a chain of forward references resolves in one pass; the checker repeats passes while one adds a definition, as a fallback. Supported local mutually recursive gate groups also use shared monomorphic placeholders and generalize only after the group checks, preserving captured outer variables. Some proven non-gate value cycles are diagnosed; other mixed gate/value cycles, polymorphic recursion, unresolved literal constraints and unresolved branch joins remain unsupported. Acyclic simple local mold aliases can also refer forward, and are scoped to the body, not its gate's sample. Nonrecursive generic aliases of supported molds can be applied at exact arity, including locally and through library interfaces; their parameters are lexical. Closed, provably disjoint nonrecursive unions and tagged single-case molds support contextual term values, `~` and `|=%tag` constructors. Literal heads compare by their runtime noun, so `|=%$` can construct an explicit null-, loobean-zero- or term-zero-headed case. Equal heads with distinct payloads can be selected when exactly one payload fit is proven; unknown or ambiguous alternatives remain unsupported. Unresolved tags and nulls remain pending, with distinct partial-inference diagnostics. Nonrecursive top-level generic union molds with provably disjoint cases also support contextual tags and constructors at exact arity; their arguments are retained through generalization and supported library interfaces. Nonrecursive generic aliases can reorder, repeat or omit parameters while preserving a supported union’s origin, including through local scopes and library interfaces. Generic unions declared directly inside a body and recursive molds outside the source-proven slices described below remain unsupported. A directly known named union can instantiate an unconstrained generic gate sample while retaining its origin, generic arguments and faces. Unnamed, pending-tag, recursive, unknown-atom and variable-bound union origins remain unsupported. A value with type variable `A` can fit a field whose type is that same `A`, including in generic union payloads and nested or repeated record fields. A differing-variable face constraint remains unsupported. When inference forces two distinct explicitly written capitals equal, it reports both source sites; forcing a capital to a concrete type remains unsupported in this fragment. It can infer and generalize atom constraints arising from explicit capitals or bare sample binders, preserve those constraints through aliases, instantiate them independently, and print multiple constraints. Unresolved decimal variables default to `@ud` for inferred types without gates; defaulting inside gate types and other constraint cases remain incomplete. It does not yet check a module, complete imports, general patterns, general deferred constraints, recursive molds, dependency cycles or most errors with both conflicting excerpts. Definite cast and call mismatches, incompatible branches and overlapping union cases report both sites and excerpts. Concrete branch results can join at an explicitly present parent aura or `@`. Some known tuple and record positions acquire matching faces; other variable-dependent face merges, general branch tag context and ambiguous call-result propagation remain unsupported; function compatibility involving nested `@` and variable-dependent joins remain unsupported except for equal types and the source-bound gate-sample proof below. For a single recursive gate outside a group, the reporting path repeats inference rather than instantiating its generalized interface inside its own body; a group report uses its stored schemes. This adds work, and the current dependency pass can take quadratic time on long forward chains; the milestone's speed target remains unverified. A separate conservative pass reports unions whose cases are provably disjoint or overlapping and leaves other cases unresolved; it does not claim the mold is checked. Unsupported forms are reported as such, and the partial output says the module has not been checked.
60+
61+Uncontextual `?-` branches share one result join across loobean, unit, list and known-union folds. They first unify the arm types and retain the resulting substitution, including gate-free constraints. If unification fails, they widen only to an explicitly present parent aura or unrestricted `@`; sibling auras do not acquire a guessed common parent. Multi-arm union folds first unify as a group; if that fails, they select an explicitly present atom parent independently of arm order and bind variables to that final parent. Explicit `@` accepts atom singletons and restricted atom variables. Deferred boolean branches try the same join before their pending-literal fallback.
6062
6163A direct unshadowed prelude call can use checked source layouts when a positional argument is a directly named, already inferred root gate. For two-slot function samples, the checker can match a named update against an unnamed generic gate sample without confusing a binder face with a nested record face. Both explicitly named slots must agree; source boundaries are evidence for this fit, not a call-arity rule. The source gate and prelude annotation must be available from their checked bindings. Local or dynamic gates, aliases without direct evidence, recursive or SCC placeholder bodies, other sample shapes and unresolved call-sample variables remain unsupported by this proof. Ordinary inference remains the fallback.
6264
@@ -66,18 +68,22 @@ Before the empty-capital optimization below, single sequential eval runs includi
6668
6769Restricted-number promotion only applies to written capital variables. If none are present, it returns immediately instead of traversing the environment. In one startup-inclusive pair of runs on 2,000 independent gates, output was byte-identical and user CPU fell from 71.67 to 38.26 seconds; wall time was 72.80 versus 51.66 seconds while other checks were running. This does not establish a bound for dependent modules or a complete-checker benchmark.
6870
69−A bounded source proof can also establish distinct literal heads when a union case is a one-hop application of a uniquely resolved local generic mold. It compares literal runtime nouns and checks the original mold normally before publishing an interface. The same source proof improves the partial report, which still says the mold is not checked. The new proof declines nested or qualified applications, opaque references, recursive-index states, holes and deferred obligations; other valid unions can remain unsupported. A 256-node source budget and a separate 256-entry inherited-state budget apply per attempt. They do not bound the existing pairwise union pass, parsing, atom or name sizes, or downstream checking. Prepared interfaces and inference state remain trusted inputs. `tools/type-union-source-test` and the shared ship guard exercise source resolution, reporting, rollback and these bounds. A separate positive witness can identify overlap in two-field, literal-headed cases when a unique one-hop local, one-parameter generic alias is applied to a concrete primitive payload. It compares the literal noun values and proves the payloads have a shared noun, so an empty or unknown payload is not a witness. The partial report identifies both original case sites. `infer-jibb-file-detailed` returns structured overlap evidence for the first failed mold, including the originating path, exact source, mold name and both case spans. Ordinary Jibb imports preserve a child’s evidence through source and cache checks; the legacy `infer-jibb-file` API remains a text-result adapter and renders both excerpts. Specialized API and prepared-prelude paths retain their existing generic or text-only error boundaries. This witness uses a shared 256-node source/pair budget per attempt; generic-wrapper parameter validation has a separate 256-entry cap. An unsupported earlier case may hide a later overlap. Existing pairwise union analysis, parsing, atom and name sizes, source-excerpt rendering, and downstream checking remain outside these budgets. `tools/type-union-alias-overlap-test` checks the source proof and partial report; `tools/type-full-overlap-test` checks the detailed and legacy full-module paths, source attribution and cache behavior.
71+A bounded source proof can also establish distinct literal heads when a union case is a one-hop application of a uniquely resolved local generic mold. It compares literal runtime nouns and checks the original mold normally before publishing an interface. The same source proof improves the partial report, which still says the mold is not checked. The new proof declines nested or qualified applications, opaque references, recursive-index states, holes and deferred obligations; other valid unions can remain unsupported. A 256-node source budget and a separate 256-entry inherited-state budget apply per attempt. They do not bound the existing pairwise union pass, parsing, atom or name sizes, or downstream checking. Prepared interfaces and inference state remain trusted inputs. `tools/type-union-source-test` and the shared ship guard exercise source resolution, reporting, rollback and these bounds. A separate positive witness can identify overlap in two-field, literal-headed cases when a unique one-hop local, one-parameter generic alias is applied to a concrete primitive payload. It compares the literal noun values and proves the payloads have a shared noun, so an empty or unknown payload is not a witness. The partial report identifies both original case sites. The partial report and the full module check find overlaps with one helper, `mold-overlap-witness`: it takes the first overlapping pair from the pairwise projection, which covers atoms, `?` and literal constants, and nested literal-headed cells, and tries this source witness only when no pair overlaps and some pair stays unknown. A projected overlap is therefore named even when the source witness would prove an earlier pair. For the same union both paths name the same pair, but the full check attaches evidence only when that union is the first mold whose inference fails and its generic parameters are valid; an earlier failing mold, including one that refers to the union, and a union with duplicate or too many parameters keep the generic error. `infer-jibb-file-detailed` returns structured overlap evidence for the first failed mold, including the originating path, exact source, mold name and both case spans. Ordinary Jibb imports preserve a child’s evidence through source and cache checks; the legacy `infer-jibb-file` API remains a text-result adapter and renders both excerpts. Specialized API and prepared-prelude paths retain their existing generic or text-only error boundaries. This witness uses a shared 256-node source/pair budget per attempt; generic-wrapper parameter validation has a separate 256-entry cap. An unsupported earlier case may hide a later overlap. The pairwise projection has no budget: the full check runs it before inferring a union's cases, and once more, to find the pair, on a failed union mold whose generic parameters are valid. Parsing, atom and name sizes, source-excerpt rendering, and downstream checking also remain outside these budgets. `tools/type-union-alias-overlap-test` checks the source proof and partial report; `tools/type-full-overlap-test` checks the detailed and legacy full-module paths, source attribution and cache behavior.
7072
7173A single-arm cell pattern can bind two or more positions, with its last binder capturing the remaining tail. Duplicate and shadowed names are rejected. A definite non-cell spine fails; an intermediate union or collection that might contain a cell remains unsupported. For a known non-union cell, a separate one-arm rule also accepts structured patterns, including nested literal and wildcard positions, when the existing coverage proof establishes the whole pattern. It binds payloads with their original types and checks result context; unknown, partially covered, union or recursive spines stay unsupported.
7274
7375String interpolation infers its pieces in order and preserves substitutions and pending constraints. A piece with a known atom aura, unrestricted `@`, or a tape `(list @tD)` is accepted; an isolated decimal literal takes its normal `@ud` default. A known cell reports that it needs a printer, and an explicitly generic atom asks for an aura at its use site. Loobeans, term singletons, non-tape collections, open types and a type fixed only later remain unsupported in this fragment.
7476
77+The Hoon bridge translates imported `(unit T)` to the canonical public `unit` union when the prepared template validates as the standard mold. Without that template it retains the older opaque collection behavior. Conversion recurses through imported unions and collection arguments, and API path/diff/poke analysis uses the same prepared reader. The fixtures prove identity, `fall`, `need`, casts, union- and list-nested `need`, canonical unit-typed API full/diff marks, and a canonical direct-poke export while leaving no-prelude output unchanged.
78+
7579The Hoon bridge translates imported `*` as the any-noun type, directly or within supported nonrecursive cells. The reader may still decline a disjoint tagged union with a noun payload, and recursive imports containing `*` remain unsupported. It accepts an exact fork of the two loobean singletons as `?`, and each singleton separately as `%.y` or `%.n`, including inside supported faced cells. Contextual loobean literals specialize against a matching singleton by noun, including a proven singleton in a direct union; named loobean singletons do not silently widen to a distinct aura. Open `%f`, other values, and other forks containing loobean singletons remain unsupported; recursive Hoon molds containing flags can also fail closed.
7680
7781A bare tag that provably matches no case of a known union reports the union and tag sites. This covers casts, single-argument calls, contextual unit payloads, list items and supported branch arms, including unnamed imported unions. For syntactic tuples, ordered fit replay can identify a missing tag in a nested position; an earlier mismatch or uncertainty stops the replay instead of guessing. Existing tags whose shape or payload does not fit retain the ordinary mismatch; unresolved tags stay pending.
7882
7983A change can replace uniquely named fields on a fully known, faced record spine, including through a nested wing. Replacements receive the field type as context, substitutions and pending constraints are retained, and the resulting type remains the original record. Missing fields, empty changes and definite replacement mismatches report sites; the expected-type site is the edit, since the original field declaration location is not retained. Unknown or partly unfaced spines, ambiguous fields and repeated edits remain unsupported. A cast to a known record also supplies field context to a tuple or record initializer, including nested list and union fields. The expected-type site is the cast mold; the original field declaration location is not retained. Isolated cart-style `init` and `update` expressions infer in this fragment. The complete cart-store source fails closed because store kind and declaration scope are not yet checked.
8084
85+Nested labels of the three public re-exports are normalized recursively to `ask`, `qath` and `raw-poke`, so prepared records and instantiated types do not expose their private `.internal` suffixes. Other private names remain private.
86+
8187For supported closed unions, the type printer keeps the union’s origin separate from its displayed name. It prints an in-scope name such as `msg` or `msg.lib`, including in records and gates; an accessible imported nongeneric alias may name a transitive union. A nongeneric body-local union that escapes its scope, or an origin without an accessible name, prints its cases separated by spaces, parenthesized when nested. That case-list form is print-only. A supported generic union prints its name and all arguments, including unused arguments; when its name is unavailable, the partial printer reports that limitation instead of dropping its arguments. Two faces for the same imported origin remain compatible; compatibility between distinct union origins, including in gate types, remains unsupported. Some comparisons of generic union arguments also remain unsupported rather than deciding equality or mismatch. The Hoon bridge also translates some imported unnamed unions into this representation; unsupported cases remain errors.
8288
8389Multi-argument calls form one right-nested sample: `f a b c` supplies `[a [b c]]`, with the last argument able to be a cell itself. The fragment fits the complete sample, preserving known faces and shared variables. Known sample positions can provide list or union context to arguments; unknown sample shapes use ordinary inference and some contextual forms remain unsupported. For a definite mismatch, the diagnostic points to a specific argument when it can establish which one failed; otherwise it reports the combined sample.
@@ -112,7 +118,7 @@ In single startup-inclusive runs of eight Hoon reads, a benign three-case union
112118
113119The partial report can diagnose certain non-gate value dependency cycles, including cycles through gates. It requires an explicit atom or loobean result cast and a syntactically proven dependency group with unshadowed simple samples; it identifies the value and a dependency site. Untyped results, branches, nested definitions, qualified wings and complex samples remain unsupported. The proof constructs an additional dependency graph. One 24-case recursive/generic eval run took 19.7 s with it and 18.6 s before it, including startup; these single runs do not isolate the graph cost.
114120
115−The source-backed `+api-path-analysis-source` is a separate partial analysis, not an API check: it resolves reachable Jibb imports and declared mark graphs and returns path and scry segments, full and diff mark identities and their types. It also checks derived-name collisions. Full and diff payloads must be direct declared mark names; typed scry parameters must be a same-name, same-aura subset of the watch parameters, and unknown or duplicate segment binders fail closed. It creates no request gates. The caller must pass a trusted prepared prelude and unchanged source-aware reader results.
121+The source-backed `+api-path-analysis-source` is a separate partial analysis, not an API check: it resolves reachable Jibb imports and declared mark graphs and returns path and scry segments, full and diff mark identities and their types. It also checks derived-name collisions and reports a clash as a definite error at both sites. Full and diff payloads must be direct declared mark names; typed scry parameters must be a same-name, same-aura subset of the watch parameters, and unknown or duplicate segment binders fail closed. It creates no request gates. The caller must pass a trusted prepared prelude and unchanged source-aware reader results.
116122
117123`+api-path-evidence-source` retains that analysis with the API source, complete prepared prelude (including reserved names), supplied reader results and resolved Jibb dependency cache. `+api-path-watchability` classifies a unique declaration as watchable or not watchable, or reports unknown when evidence is absent or ambiguous. The artifact and reader results are trusted host inputs; the host must bind them to the source versions used later. This is declaration evidence, not proof about an arbitrary request value, a checked API module, a runtime validator or an island watch.
118124
@@ -120,7 +126,7 @@ For a unique supported declaration, `+api-request-parts` retains that evidence w
120126
121127`+api-support-analysis-source` additionally infers supported ordinary API molds and values, resolves every declared mark, and retains their source, dependency and path evidence. Unsupported helpers or marks fail closed. An unused `/-` core is not independently validated, ordinary definitions that need derived gates remain unsupported, and this result is not a checked API interface or an exported request.
122128
123−The ordinary import resolver can infer derived request-gate types for multiple supported API paths. A case may take one typed path parameter before its reply gate, or one diff fold after the reply; a case with both, multiple parameters or diffs, or a separate scry path remains unsupported. Each reply maps the full mark type to a fresh `M` and the request result is `(ask M)`. Checked ordinary API values and molds, declared mark molds and a supported generic poke command helper are exported too. Every selected `/sur` core must have a directly used, successfully read mold; unselected core bindings are not independently validated, and Jibb module imports remain unsupported in this API fragment. The unchanged todo API fits this fragment.
129+The ordinary import resolver can infer derived request-gate types for multiple supported API paths. A case may take one typed path parameter before its reply gate, or one diff fold after the reply; a case with both, multiple parameters or diffs, or a separate scry path remains unsupported. Each reply maps the full mark type to a fresh `M` and the request result is `(ask M)`. Checked ordinary API values and molds, declared mark molds and a supported generic poke command helper are exported too. Every selected `/sur` core must have a directly used, successfully read mold; unselected core bindings are not independently validated, and Jibb module imports remain unsupported in this API fragment. An API module outside the fragment fails with the reason its check gave: without `+$ paths`, the poke-only check's, such as `API poke mark %todo-action has no reader result`; otherwise its request constructor's, such as `request paths need unsupported inference`. A failing Jibb import reports its own error, as it does for other modules. A derived `poke` or request name that clashes with a definition, an import face, a prelude value or another derived name is a definite error showing where the name is derived and what it clashes with; `+api-path-analysis-source` and the path evidence entries report it the same way. Only names that surely exist are checked: `poke` when the module declares `+$ poke`, and the case names of a `+$ paths` that reads as path cases. Two cases with the same name do not read as path cases, so that clash stays unsupported, as does a case named `proj`, a reserved name. A name conflict among an API's imports and ordinary definitions reports `module has conflicting names`, as in other modules; a `/%` mark names a mold, so it conflicts only with another mark or mold, and a mark beside a value of the same name, such as a request, is not a conflict. The unchanged todo API fits this fragment.
124130
125131A call whose direct result is a known named generic union can receive a matching same-origin, same-arity result context before its arguments are inferred. This retains the ordered generic arguments and existing capital checks; pending tags, recursive or variable-bound origins and unrestricted atom cases remain conservative. Constructor fitting reports unsupported when an unresolved or opaque case could contain the requested tagged head. It keeps definite missing-case errors for proven nonmatching cases, including an explicitly atom-only faced head. The real todo callback `|=%got` can infer when an `(ask msg)` result context fixes its message union; the uncontextualized call remains unsupported.
126132
@@ -136,11 +142,13 @@ The same post-inference, post-request-graph kind boundary accepts a static `main
136142
137143A store `main` is recognized only as a direct, unqualified `(store init update)` call with two simple wing arguments, modulo grouping, independently of its directory. Its module must declare exactly one ordinary `state` mold and one ordinary, nongeneric local `+$ poke` action mold. Both remain in ordinary mold/value inference and are exported. `+store-main-closed` checks the canonical closed store main, exact init/state equality, and an invariant `$-([action state] state)` update after erasing only the two outer binder faces. It deliberately performs no gate-free-state check. The direct form can recover a missing main from checked components; aliases and hand-built records cannot.
138144
139−The store interface adds a derived `$-([action $-((unit @t) M)] (cmd M))` poke helper and a generic `$-($-(state M) (ask M))` state request after validating the exact internal `raw-poke`, canonical `cmd`, standard `unit` and `ask` representations. Derived names must not collide with values, imports or other derived names. Store request certificates are distinct from API certificates and retain the exact store path, source, state and action identities across graph merges. `+derived-store-request-member` requires the selected interface's unique state member and action constructor to match freshly derived canonical schemes and the same certificate to occur in both interface and consumer graphs. Store state is watchable by definition only after those checks; page loads continue to accept API evidence alone. Multi-action declarations, lowering and execution are outside this slice.
145+The store interface adds a derived `$-([action $-((unit @t) M)] (cmd M))` poke helper and a generic `$-($-(state M) (ask M))` state request after validating the exact internal `raw-poke`, canonical `cmd`, standard `unit` and `ask` representations. Derived names must not collide with values, imports or other derived names. Once the store's `state` and `poke` molds are unique and nongeneric and `main`'s `store` is the prelude's builder, such a collision is a definite error, reported before other scope conflicts, showing the mold the name derives from and the clashing definition or import face. Store request certificates are distinct from API certificates and retain the exact store path, source, state and action identities across graph merges. `+derived-store-request-member` requires the selected interface's unique state member and action constructor to match freshly derived canonical schemes and the same certificate to occur in both interface and consumer graphs. Store state is watchable by definition only after those checks; page loads continue to accept API evidence alone. Multi-action declarations, lowering and execution are outside this slice.
146+
147+When only that program's initializer and `main` are unresolved, one transactional retry checks the initializer, which must be a direct gate with a closed, tag-free written sample, against the program's closed model. Update's written two-item sample gives the model when it can be read. Otherwise main's own source-backed program fit gives it: update, view and subs are instantiated above the greatest variable ID in the module and prelude and fitted together against the prelude `program` sample, with the initializer an open variable. Only the initializer's data may stay open, a replay of the fit must not change the substitution, and the model must come out closed and tag-free. So an update written `|= =input`, `|= in=input` or generic in its model, and a view and subs with generic samples, still let the initializer check. The body is inferred with the model as context; a body that context inference cannot take, such as a branch over a nested call's union, is inferred ordinarily as a whole gate instead, and its sample must fit the written one. The product and whole-gate fits, pending-tag and finalization checks, and a fresh ordinary `main` inference must all succeed before the ordinary kind and graph checks publish anything. This one path replaced a separate retry for bodies ending in null and a gate that took only a null sample (review question 8), so any body and any closed sample of a direct gate check the same way. The fresh `main` inference is what checks that the four components agree: an initializer that fits update's model while view uses another message passes recovery, and `main` then rejects the program. Aliased mains or initializers, non-main libraries, simultaneously unresolved subscriptions and unrelated pending tags decline.
140148
141−When only that program's initializer and `main` are unresolved, a bounded transactional retry can derive the initializer's expected gate from the resolved update, view and subscription components. It instantiates all schemes above the greatest variable ID in the module and prelude, reuses the source-backed positional fit and stable replay, and leaves only the initializer's data variable open. The named initializer must be a direct gate whose transparent body is a tuple ending in null. Its own sample fixes data; ordinary inference, product and whole-gate fits, pending-tag and finalization checks, and a fresh ordinary `main` inference must all succeed before the ordinary kind and graph checks publish anything. Aliases, non-main libraries, simultaneous unresolved subscriptions, nonempty subscriptions and unrelated pending tags decline.
149+Ordinary inference runs for every component before recovery, so a keyed view no longer causes an already-valid initializer to be skipped. Recovery is a fallback for unresolved components, not a replacement for definitions that check normally. The regression's initializer is a gate under a `^-` cast to its full type. Ordinary inference checks it, but recovery, which takes only a direct gate, cannot, so the fixture fails if a keyed view ever skips ordinary inference again.
142150
143−A component-local recovery sequence handles a recognized direct program whose context-dependent definitions cannot resolve ordinarily. Update first derives its result from its inferred two-slot sample and canonical `cmd`/`list` templates. Subscription recovery then checks the same message/model relation and the canonical fourth slot. A narrow keyed-view proof finds exactly one direct `each (turn xs mapper)` site, derives the mapper from the actual `each` and `turn` schemes, and recovers the view before the existing initializer and ordinary `main` retries. Every recovered scheme must be closed and freshly allocated above the current environment and prelude IDs. A source screen skips doomed ordinary attempts only for this keyed shape and never skips final `main` inference; non-gate views and aliases decline without crashing. Final publication still requires all module definitions, the program-mold and gate-free checks, and request-value watchability.
151+A component-local recovery sequence handles a recognized direct program whose context-dependent definitions cannot resolve ordinarily. Update first derives its result from its inferred two-slot sample and canonical `cmd`/`list` templates. Subscription recovery then checks the same message/model relation and the canonical fourth slot. A narrow keyed-view proof finds exactly one direct `each (turn xs mapper)` site, derives the mapper from the actual `each` and `turn` schemes, and recovers the view before the existing initializer and ordinary `main` retries. Every recovered scheme must be closed and freshly allocated above the current environment and prelude IDs. That bound comes from one unbudgeted pass over the environment and prelude schemes, which treats named recursive types as leaves and declines only when a scheme still holds an unresolved literal tag. Non-gate views and aliases decline without crashing. Final publication still requires all module definitions, the program-mold and gate-free checks, and request-value watchability.
144152
145153Canonical `element` composition has two tightly scoped accommodations. Recursive result context is allowed only when every recursive side has the prepared prelude's `element` origin. When ordinary list-item fitting fails, an `element` target may instead prove its message argument invariantly or select one exact literal case with a full payload fit; a successful ordinary fit always takes precedence. This covers the unchanged todo's union controls and raw constructors without opening those paths to other unions. `tools/type-todo-full-test` checks the byte-identical island through both full APIs, the exact closed `main` type, structural downstream import, and model/message/mapper/watch rejection controls. It does not execute Jibb or implement runtime watching.
146154
@@ -154,7 +162,7 @@ The supplied prelude is parsed into a **partial interface**: all names actually
154162
155163The prepared interface includes the source-backed UI molds and constructors, the full nonrecursive `element` union, and the exact `program` and `page` records and builders. Its element union erases nested child, keyed-item and table payloads to `*`, while public constructor schemes retain typed composition and independent key parameters. `types-prelude-ui` checks those schemes and selected valid and invalid compositions. A child-message mismatch currently fails closed as an unsupported list-item constraint rather than a definite mismatch diagnostic. Raw-constructor encapsulation, duplicate-attribute checks, rendering, navigation, storage and execution remain outside this slice.
156164
157−The Grammar's buttons example has a shared full-check fixture. Without `add-button`, `labelled` and `wide` export their exact generic `(element A)` and `(list attr)` schemes through detailed and legacy inference. The ordinary call fit handles this by unifying a variable actual argument with the body of an expected faced slot, rather than putting the sample face on the argument's type. With the unchanged `add-button`, final incompleteness triggers a diagnostic-only retry bounded to 64 missing definitions. A pending tag retains its literal span, so the error says that nothing fixes the union of `%add` at the literal and includes its source excerpt. Other incomplete modules keep the generic error, and successful modules never run the retry. This checks types only; it does not render or execute buttons.
165+The Grammar's buttons example has a shared full-check fixture. Without `add-button`, `labelled` and `wide` export their exact generic `(element A)` and `(list attr)` schemes through detailed and legacy inference. The ordinary call fit handles this by unifying a variable actual argument with the body of an expected faced slot, rather than putting the sample face on the argument's type. With the unchanged `add-button`, final incompleteness triggers a diagnostic-only retry bounded to 64 missing definitions. A pending tag retains its literal span, so the error says that nothing fixes the union of `%add` at the literal and includes its source excerpt. Otherwise, when a missing value is a gate whose own sample has the name of a top-level value, import face or prelude value, the error is that the sample shadows a name, shown at the sample: with `++ user |= x=@t (helper x)` and `++ helper |= user=@t user`, it is `helper`'s sample `user`. Other incomplete modules keep the generic error, which names one missing value: the first whose module dependencies all resolved. When every missing value waits on another, it follows the first value each waits on, from the first missing value, until a value repeats, and names that value. The walk is over the syntactic dependency graph, which ignores binders: a local binder with a top-level value's name, such as a cell-sample item or a nested gate's sample, reads as a dependency on that value. The named value lies on a cycle of that graph but may only call into the value that failed; with `++ helper |= x=@t |= user=@t user` instead, it names `user`, and the shadowing is not reported. Successful modules never run the retry. This checks types only; it does not render or execute buttons.
158166
159167The prepared interface also includes the exact documented `theme` mold. Full checking covers the unchanged real `/ui/theme.jibb`, its exact exported record and a structural downstream import, with dark absent/present and field/type rejection controls. The documented present dark record uses explicit backtick unit syntax, as the Decisions tab records; there is no theme-specific inference exception. This is type checking only: contrast validation, theme rendering and routing remain unimplemented.
160168
@@ -210,15 +218,15 @@ Note 4 has examples of each.
210218
211219## Speed
212220
213−Starting `urbit eval` and building the library takes about 8 s. A 2,000-line module of 400 definitions then parses in about a second. Loops over definitions, arms, lines and items are tail calls, so a long module grows no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (note 3).
221+Starting `urbit eval` and building the library takes about 27 s, or 24 s without `!:` (`tools/hoon --no-debug`), measured on 2026-11-02. Every timing in this document was measured with `!:`, which the dev tools add so errors have positions, and which makes checker work 2.2 to 2.6 times slower than on a ship; the comparisons hold, but the absolute figures overstate a ship's time. A 2,000-line module of 400 definitions then parses in about a second. Loops over definitions, arms, lines and items are tail calls, so a long module grows no stack; nesting costs a few stack frames a level, and 100,000 nested brackets still parse (note 3).
214222
215−The experimental deferred constructor path can close a small import-free library transaction when ordinary resolution stalls. It retries definitions whose earlier attempts failed from their original states, retaining only successful attempts. A transaction with at most 64 definitions makes at most 4,096 attempts; it stops after a pass with no progress. This bounds the new attempt count, not each attempt's parsing, type walks or ordinary inference. Deferred definitions are restricted to simple one-component wings, literals, static strings, gates, transparent groups and empty bodies, calls, casts and a restricted boolean branch. Each successful call or cast fit must have exactly equal normalized operands so later substitutions cannot invalidate a face check. A multi-argument call also needs closed argument, sample and product types because positional face checks depend on slot boundaries and whether the result can be a cell. Other fits fail closed. A 512-node screen bounds visited expression nodes and a separate 512-node scan bounds each stability check; neither bounds mold shapes, string-piece checks, parsing, normalization, lookup, or total repeated inference. It accepts only a direct constructor callback with a closed input, records its pending fit under the source-owned inference state, and generalizes each definition against the live environment and pending constraints. Before publication it discharges and replays every edge, rejects unresolved tags or changed replay state, and checks that all molds and values are complete. The reporter reads the committed schemes for definitions added by the transaction. API and store paths, `main`, prepared-prelude recovery, imports, recursive groups, unresolved holes or written capitals, and new projection actions remain outside this full-module path. `%grec` in the constraint or freshness scan is conservatively unsupported. This is not an island-kind, runtime, or watchability check.
223+The experimental deferred constructor path can close a small import-free library transaction when ordinary resolution stalls. It retries definitions whose earlier attempts failed from their original states, retaining only successful attempts. A transaction with at most 64 definitions makes at most 4,096 attempts; it stops after a pass with no progress. This bounds the new attempt count, not each attempt's parsing, type walks or ordinary inference. Deferred definitions are restricted to simple one-component wings, literals, static strings, gates, transparent groups and empty bodies, calls, casts and a restricted boolean branch. Each successful call or cast fit must have exactly equal normalized operands so later substitutions cannot invalidate a face check. A multi-argument call also needs closed argument, sample and product types because positional face checks depend on slot boundaries and whether the result can be a cell. Other fits fail closed. A 512-node screen bounds visited expression nodes and a separate 512-node scan bounds each stability check; neither bounds mold shapes, string-piece checks, parsing, normalization, lookup, or total repeated inference. It accepts only a direct constructor callback with a closed input, records its pending fit under the source-owned inference state, and generalizes each definition against the live environment and pending constraints. Before publication it discharges and replays every edge, rejects unresolved tags or changed replay state, and checks that all molds and values are complete. The reporter reads the committed schemes for definitions added by the transaction. API and store paths, `main`, prepared-prelude recovery, imports, recursive groups, unresolved holes or written capitals, and new projection actions remain outside this full-module path. `%grec` in the constraint scan is conservatively unsupported. This is not an island-kind, runtime, or watchability check.
216224
217225An expected cell type can supply context to both arms of a loobean branch. This slice first retains any ordinary inference that already fits. Otherwise it retries from the original state only when a syntax screen excludes nested branches, casts, gates and local bodies, and a substitution screen excludes structural bindings. Both arms must fit, their normalized results and the expected type must be closed, their result types must match, and both fits must replay without changing the final substitution or fresh-ID counter. A successful retry retains the original arm type and its written faces; a failed retry returns the original inference result. The source and substitution screens each visit at most 512 entries. This permits at most one extra attempt for an eligible branch; the screens do not bound preexisting inference, type walks, list construction, or work across separate analyses.
218226
219227In an isolated diagnostic with the real todo API and reader inputs, this cell context allowed the original update body to infer when its result type was written explicitly and experimental source-defined text helpers were supplied. The unchanged island still needs those text helpers, an actual source-backed `program` and UI interface, context propagation across definitions, island-kind checking and watchability proof. This branch change itself provides no runtime implementation or watchability evidence.
220228
221−A deferred boolean branch must use both distinct literal loobean patterns. Its subject is unified with `?`; the arms are inferred in source order without contextual retry. Equal normalized arm types are retained directly. When both written arms are direct literals that each created their own unbound pending tag, the checker can instead retain two source-owned fit obligations to a shared, monomorphic result variable. A later definition may close that variable; replay uses the ordinary literal fit, requires a closed atomic target or a union of direct constant/cell cases, and rejects faced targets and faced union cases. It replays all edges under the final substitution without adding bindings or fresh IDs. This does not support deferred list literals, union-pattern reachability, arbitrary branch expressions or prepared-prelude/imported modules. It does not establish request watchability.
229+A deferred boolean branch must use both distinct literal loobean patterns. Its subject is unified with `?`; the arms are inferred in source order without contextual retry. The shared unification-first result join applies before the pending-literal fallback. When both written arms are direct literals that each created their own unbound pending tag, the checker can instead retain two source-owned fit obligations to a shared, monomorphic result variable. A later definition may close that variable; replay uses the ordinary literal fit, requires a closed atomic target or a union of direct constant/cell cases, and rejects faced targets and faced union cases. It replays all edges under the final substitution without adding bindings or fresh IDs. This does not support deferred list literals, union-pattern reachability, arbitrary branch expressions or prepared-prelude/imported modules. It does not establish request watchability.
222230
223231With the caller's unchanged prepared prelude, the partial report can also recover a narrow import-free, non-main ordinary library initializer. A direct tuple literal may retain one source-owned fit obligation for each newly created pending literal until a later exact result cast closes them. A separate bounded candidate screen admits a direct tuple even without a constructor call. The prepared transaction requires exact agreement among the supplied interface, value inventory and reserved molds, and retains the API, store, import and `main` exclusions. It only adds recovered entries to the partial report: the ordinary full-module resolver does not publish them. Wrong unit or draft fields, unrelated pending tags and mold-name collisions fail closed; without the later final cast, the initializer remains not checked. This does not add list-literal deferral or import-aware recovery.
224232
docs/development.md+29−76
@@ -6,13 +6,13 @@ How to work on Jibb: the rules the plan sets, how to set up a machine, and what
66
77From the plan's Setup and ground rules, and from @iko:
88
9−- **The doc wins.** Where code and doc disagree, the doc stands until it changes. [spec/](spec/) is a snapshot; the doc itself is the authority.
9+- **The spec wins.** Where code and spec disagree, the spec stands until it changes. Until the Claude doc is synced with the repository's decisions, the spec is the copy in [spec/](spec/); the Synced column in [spec/decisions.md](spec/decisions.md) shows which rows the doc has.
1010- **Language changes are agreed first** and recorded in the Decisions tab, before the code changes.
1111- **Questions go to @iko**, as comments on the doc, on the words they're about. While one is open, follow the most likely reading, mark it "(doc question)" in the library's notes, and list it in [open-questions.md](open-questions.md). Where an error points is not a doc question: the library's section 2.0 settles it.
1212- **Every Jibb code block in the doc is a golden test**, and each stage's output is printed and compared. The doc labels its Jibb blocks `jibb`; `tools/doc-blocks` checks that each has its case.
1313- **Each milestone ends with its checks passing on a fake ship**, not only under `urbit eval`.
1414- **Push straight to `master`.** @iko reviews work in the project's chat, not in pull requests, so there are none. Run the checks below first.
15−- **Keep docs/ current**: [status.md](status.md) when a milestone moves, [open-questions.md](open-questions.md) when a question is settled or found.
15+- **Keep docs/ current**: [status.md](status.md) when a milestone moves, [open-questions.md](open-questions.md) when a question is found, and [spec/decisions.md](spec/decisions.md) when one is settled: it moves there.
1616
1717The source-backed generic-union guard can be run under eval with `tools/type-union-source-test`; its `test-union-source` arm is also assembled for the fake ship. It checks a bounded partial inference slice, not general union completeness. `tools/type-union-alias-overlap-test` exercises the separate positive overlap witness and its shared ship test arm. `tools/type-full-overlap-test` checks structured full-module overlap evidence and the legacy error text under eval; both of its test arms are assembled for the fake ship.
1818
@@ -20,7 +20,17 @@ The source-backed generic-union guard can be run under eval with `tools/type-uni
2020
2121The tools need Python 3 and `urbit` (vere) on `PATH`; the ship tools also need a fake `~zod` and click. Everything so far ran with vere 4.6 on Linux.
2222
23−On a usual machine:
23+With Nix (and flakes), `nix develop` gives a shell with vere 4.6, Python 3 and click, as the flake pins them, and sets `$JIBB_CLICK`. `nix build .#fakezod` boots a fake `~zod` from the pinned brass pill in about half a minute; copy it to where `tools/ship` expects it:
24+
25+```
26+mkdir -p /root/urbit
27+cp -r "$(nix build .#fakezod --no-link --print-out-paths)" /root/urbit/zod
28+chmod -R u+w /root/urbit/zod
29+```
30+
31+`nix flake check` needs neither step, since it boots a ship of its own; see the [README](../README.md#building-and-checking-with-nix).
32+
33+Without Nix, on a usual machine:
2434
25351. Install vere as [docs.urbit.org](https://docs.urbit.org) says, and get a brass pill.
26362. Boot a fake ship where `tools/ship` expects it, or point `--pier` or `$JIBB_PIER` elsewhere. Booting takes a few minutes:
@@ -31,7 +41,7 @@ On a usual machine:
31413. Get click, the command-line client for a ship's `conn.sock`, from [urbit/tools](https://github.com/urbit/tools), at `/root/src/tools/pkg/click/click` or wherever `--click` or `$JIBB_CLICK` says.
32424. Optionally, clone [urbit/urbit](https://github.com/urbit/urbit) to read Arvo's source. `vendor/SOURCES.txt` names the commit the vendored files come from.
3343
34−In a Claude cloud container, the network blocks urbit.org, bootstrap.urbit.org, nixos.org's installer and GitHub's release downloads. This worked on 2026-10-29, and has to be redone in each new container:
44+In a Claude cloud container, the network blocks urbit.org, bootstrap.urbit.org, nixos.org's installer and GitHub's release downloads. When Nix is already installed, as it was on 2026-11-02, the flake does all of the below: it fetches nixpkgs from channels.nixos.org, click with git and the pill from media.githubusercontent.com, which the network allows. Otherwise, this worked on 2026-10-29, and has to be redone in each new container:
3545
3646```
3747# Nix, single-user
@@ -60,6 +70,7 @@ git clone https://github.com/urbit/tools /root/src/tools
6070
6171| Tool | What it does |
6272| --- | --- |
73+| `tools/check` | Runs every check in this table, or a group (`--group eval` or `ship`), or some by name: see [Before pushing](#before-pushing) |
6374| `tools/golden` | Runs the golden cases under `urbit eval`: every case, or those matching `--case`; `--update` rewrites the expected outputs; `--show` prints them |
6475| `tools/importer-test` | Compares the partial Hoon importer's diagnostic trees and errors with `tests/importer/tree.txt` under `urbit eval` |
6576| `tools/type-import-default-test` | Compares default-wrapped union source proofs and adversarial cases under eval; the same golden runs on the ship |
@@ -100,7 +111,7 @@ git clone https://github.com/urbit/tools /root/src/tools
100111| `tools/type-program-update-test` | Checks transactional direct-program update result recovery, union/boolean context, exact exported/imported types and fail-closed boundaries under eval and on the ship |
101112| `tools/type-program-watch-test` | Checks direct singleton request-value watchability against merged real-todo evidence, exact types/imports and rejection boundaries under eval and on the ship |
102113| `tools/type-store-test` | Checks the unchanged cart/basket through detailed and legacy inference, exact store/derived schemes, malformed-prelude guards, structural imports, source-bound state watch evidence and rejection guards under eval and on the ship |
103−| `tools/type-todo-full-test` | Fully checks the byte-identical todo island through real readers, exact main type, structural downstream import and rejection controls under eval and on the ship |
114+| `tools/type-todo-full-test` | Fully checks the byte-identical todo island and an ordinary call-bodied annotated-initializer variant through real readers, exact main types, structural downstream import and rejection controls under eval and on the ship |
104115| `tools/type-closed-gate-guards-test` | Checks closed gate sample labels and face uncertainty under eval and on the ship |
105116| `tools/type-constructor-fit-guards-test` | Checks constructor-case uncertainty and known mismatches under eval and on the ship |
106117| `tools/type-nested-union-guards-test` | Checks nested tagged-union case selection and uncertainty under eval and on the ship |
@@ -114,88 +125,30 @@ git clone https://github.com/urbit/tools /root/src/tools
114125| `tools/type-arithmetic-guards-test` | Runs restricted atom-variable, unification and projection guards under eval and on the ship |
115126| `tools/type-module-scope-test` | Checks the partial module checker’s prelude boundary and duplicate-source rejection against `tests/type-module-scope/expected.txt` under eval |
116127| `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 |
117−| `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 |
128+| `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; `--no-debug` leaves out `!:`, which gives errors their positions but makes the checker 2.2 to 2.6 times slower than on a ship, for timings |
118129| `tools/doc-blocks` | Checks the doc's `jibb` blocks against the `doc-*` golden cases: `tools/doc-blocks docs/spec` |
119−| `tools/ship` | Runs the fake ship: `start`, `stop`, `status`, `log`, `sync <desk>`, `test`, `gen-tests`, `check-commit`, `scry`, `hoon`, `run`, `poke`, `commit`, `mount`, `unmount` |
130+| `tools/ship` | Runs the fake ship: `start`, `stop`, `status`, `log`, `sync <desk>`, `assemble --out <dir>` (no ship needed), `test`, `gen-tests`, `check-commit`, `scry`, `hoon`, `run`, `poke`, `commit`, `mount`, `unmount` |
120131| `tools/testdata/selftest` | Tests `tools/golden` and `tools/hoon` against a stub library, and `tools/doc-blocks` against Markdown it writes |
121132| `tools/testdata/ship-selftest` | Tests `tools/ship`'s test generator and runner against a stub library on the ship |
122133| `tools/testdata/clay-fixtures-selftest` | Tests temporary Clay fixture cleanup and signal handling without a ship |
123134
124−`tools/golden` starts `urbit eval` once and builds the library, which takes about 8 s, then runs every case under `mule`, so a crash fails only its own case.
135+`tools/golden` starts `urbit eval` once and builds the library, which takes about 27 s, then runs every case under `mule`, so a crash fails only its own case.
125136
126137## Before pushing
127138
128139```
129−tools/golden # all cases pass
130−tools/golden --case types-prelude-ui # exact UI/program/page schemes and composition
131−tools/importer-test # Hoon importer fixture projections match
132−tools/type-import-default-test # default-wrapped source proofs match
133−tools/type-import-test # importer/checker bridge golden report matches
134−tools/type-import-overlap-test # source-aware Hoon overlap and provenance controls
135−tools/type-import-structural-test # nested and multi-case Hoon overlap controls
136−tools/type-union-source-test # local generic-alias union guards
137−tools/type-union-alias-overlap-test # local generic-alias overlap diagnostics
138−tools/type-full-overlap-test # full-module overlap evidence
139−tools/type-tlon-test # real Tlon importer/checker report matches
140−tools/type-import-diagnostic-test # direct structured reader diagnostics match
141−tools/type-mark-test # mark/checker bridge golden report matches
142−tools/type-poke-test # source-backed poke/API bridge report matches
143−tools/type-api-paths-test # partial API path analysis report matches
144−tools/type-api-evidence-test # API declaration evidence guards pass
145−tools/type-hole-guards-test # hole defaulting and API guards pass
146−tools/type-list-alias-test # prelude list-alias guards pass
147−tools/type-generic-alias-test # generic union alias guards pass
148−tools/type-positional-face-guards-test # positional sample face guards pass
149−tools/type-qath-guards-test # qath source and unfolding guards pass
150−tools/type-todo-partial-test # unchanged todo partial report and reader failure controls
151−tools/type-todo-api-test # real todo API partial inference and reader guards pass
152−tools/type-direct-gate-test # direct gate source and provenance guards pass
153−tools/type-page-main-test # static/data pages, exact types, imports and rejection guards pass
154−tools/type-buttons-test # documented buttons schemes and exact pending-tag error
155−tools/type-doc-examples-test # remaining doc fragments fully check in context
156−tools/type-theme-test # real theme, exact type, structural import and rejection guards pass
157−tools/type-program-main-test # closed program-main interface and rejection guards pass
158−tools/type-program-init-test # transactional direct-program initializer context guards pass
159−tools/type-program-update-test # transactional direct-program update context guards pass
160−tools/type-program-watch-test # direct request-value watchability guards pass
161−tools/type-store-test # unchanged cart/basket, store evidence and rejection guards pass
162−tools/type-todo-full-test # byte-identical full todo, downstream import and rejection guards pass
163−tools/type-generic-recursion-test # source-backed recursive identities and provenance
164−tools/type-generic-construction-test # source-backed recursive construction and bounds
165−tools/type-generic-pattern-test # source-backed recursive patterns and bounds
166−tools/type-deferred-test # source-owned deferred inference guards
167−tools/type-deferred-resolver-test # resolver consistency and failure guards
168−tools/type-deferred-context-test # deferred source-order and branch guards
169−tools/type-deferred-prepared-test # prepared initializer reports and failure guards
170−tools/type-cell-branch-test # contextual branch rollback and bounds
171−tools/type-closed-gate-guards-test # closed gate fit guards pass
172−tools/type-constructor-fit-guards-test # constructor fit guards pass
173−tools/type-nested-union-guards-test # nested union selector guards pass
174−tools/type-empty-test # empty mold and uninhabited-case guards pass
175−tools/type-gate-free-guards-test # bounded gate-free classifier guards pass
176−tools/type-gate-free-source-test # real todo mold analysis and source guards pass
177−tools/type-sub-guards-test # subscription source guards pass
178−tools/type-ask-guards-test # ask source and bootstrap guards pass
179−tools/type-request-guards-test # request evidence and cache guards pass
180−tools/type-proj-guards-test # projection evidence and scope guards pass
181−tools/type-arithmetic-guards-test # arithmetic constraint guards pass
182−tools/type-module-scope-test # module/prelude scope golden report matches
183−tools/hoon check-spans-test # prints <<>>
184−tools/hoon itype-unify-test # type-unification controls pass
185−tools/hoon -f tools/testdata/zing-hoon-reference.hoon # Hoon translation agrees on four inputs
186−tools/hoon -f tools/testdata/lead-late-hoon-reference.hoon # Hoon translation agrees on selected inputs
187−tools/hoon -f tools/testdata/succ-hoon-reference.hoon # Hoon translation agrees on selected inputs
188−tools/testdata/selftest # 22 checks, 0 failed
189−tools/doc-blocks docs/spec # every jibb block has its case
190−tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
191−tools/ship test # the cases pass as -test arms on the ship
192−tools/testdata/ship-selftest # when tools/ship changed
193−tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
194−tools/ship check-commit # when the mark or the desks changed
195−tools/clay-fixtures # builds example fixtures and real Tlon notes through Clay
140+tools/check # every check; it exits 0 only when all pass
141+tools/check --group eval # only the checks that need no ship, as CI runs them
142+nix flake check # the same checks in the Nix sandbox, on a fresh fake ~zod
196143```
197144
198−`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs, so commit the regenerated file. Sync preflights and splits large deletion lists into bounded click requests, waiting for each Clay revision; a failure stops later batches. The ship self-test exercises this when switching from the full desk to a smaller fixture desk. 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. `tests/lib/jibb-tlon-bridge.hoon` and `tools/type-tlon-test` run the real Tlon presence reader/checker fixture on both. The structured reader diagnostics have their own `tests/lib/jibb-import-diagnostic.hoon` ship test and `tools/type-import-diagnostic-test` eval test. 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-poke-bridge.hoon` and `tools/type-poke-test` share the source-backed prelude and poke-only API fixture. `tests/lib/jibb-api-paths.hoon` and `tools/type-api-paths-test` share partial path analysis over the real todo marks; this does not generate request interfaces. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
145+`tools/check` runs every check the repo has. Their one list is `CHECKS` in the script, so a new check goes there, as well as in the table above; `tools/check --list` prints it with each check's command. The eval group, the 62 checks that need only `urbit` and Python, runs several at a time (`-j`, by default one per CPU), the slowest first. The ship group, `ship-selftest`, `ship-test`, `check-commit` and `clay-fixtures`, then runs one check at a time on the ship `tools/ship` talks to; `tools/check` starts it if it isn't running and stops it again afterwards. Name checks, or globs, to run only those: `tools/check golden 'type-todo-*'`. A failing check's output follows its FAIL line; `-v` prints every check's output, and `--logs DIR` keeps it all.
146+
147+CI, [.github/workflows/check.yml](../.github/workflows/check.yml), builds the desks and runs the eval group through the flake on every push to `master` and every pull request. It doesn't run the ship group, so run that before pushing.
148+
149+`ship-selftest` matters most when `tools/ship` changed, and `check-commit` when the mark or the desks changed, but `tools/check` runs both every time. The self-test leaves fixture files on the `jibb-dev` desk, and `ship-test`, which runs after it, puts the real ones back.
150+
151+`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs. The file is ignored by git, since desk assembly always regenerates it. Sync preflights and splits large deletion lists into bounded click requests, waiting for each Clay revision; a failure stops later batches. The ship self-test exercises this when switching from the full desk to a smaller fixture desk. 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. `tests/lib/jibb-tlon-bridge.hoon` and `tools/type-tlon-test` run the real Tlon presence reader/checker fixture on both. The structured reader diagnostics have their own `tests/lib/jibb-import-diagnostic.hoon` ship test and `tools/type-import-diagnostic-test` eval test. 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-poke-bridge.hoon` and `tools/type-poke-test` share the source-backed prelude and poke-only API fixture. `tests/lib/jibb-api-paths.hoon` and `tools/type-api-paths-test` share partial path analysis over the real todo marks; this does not generate request interfaces. `tests/lib/jibb-module-scope.hoon` and `tools/type-module-scope-test` compare the prelude scope report on the ship and under eval.
199152
200153## Golden cases
201154
docs/open-questions.md+4−50
@@ -1,6 +1,6 @@
11# Open questions
22
3−Questions the doc doesn't settle yet, as of 2026-10-30. Language questions belong to the doc's author, @iko: the plan says they go "as comments on the doc, on the words they're about", and a change to the language is "agreed first and recorded in Decisions". When one is settled, record it there, change the code if needed, and remove it here.
3+Questions the doc doesn't settle yet, as of 2026-11-02. Language questions belong to the doc's author, @iko: the plan says they go "as comments on the doc, on the words they're about", and a change to the language is "agreed first and recorded in Decisions". When one is settled, record it there, change the code if needed, and move it from here to [Decisions](spec/decisions.md), which holds the settled ones.
44
55## The plan's open questions
66
@@ -14,57 +14,13 @@ From [spec/implementation-plan.md](spec/implementation-plan.md), Open questions:
1414| Are the proposed loop rules adopted, along with no overlays in v1? | Milestone 6 |
1515| What do controls look like by default: buttons, toggles and fields, with their focus and disabled states? | Milestone 6 |
1616
17−On 2026-10-30, @iko adopted gate-free `eq` arguments and map and set keys, treating gates as opaque when distinguishing union cases, and rejecting a non-gate value that depends on itself even through a gate. The checker infers and generalizes the gate-free constraint. @iko also said jetted prelude functions may take gates.
18−
1917## Questions milestone 2 raises
2018
21−Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking it against the doc's examples, and building the checker. The numbering is retained so existing references stay valid. Question 3 remains open; the field-order detail in question 32 is being clarified. The other questions are settled.
22−
23−1. **Settled: how the prelude identifies jetted functions.** On 2026-10-30, @iko said the prelude functions have working Jibb implementations, and the compiler recognizes their shapes and uses the Hoon versions so jets can fire.
24−2. **Settled: how the prelude keeps helpers private.** On 2026-10-30, @iko chose a separate internal prelude module imported by the prelude, without exposing the imported helpers.
25−3. **The prelude's inventory.** On 2026-10-30, @iko chose to include all names from the listed Hoon library sections, excluding groups the spec explicitly leaves out. All of 3g is included; its Hoon `tone` is exposed as `tone.hoon`, distinct from the styling type. Hoon 1c `step` is exposed as `step.hoon`, leaving the Grammar example's `step` name available. On 2026-10-30, @iko also approved `%$` as a term literal and pattern, so Jibb can write the `%$` case of Hoon `coin`. For parsing sections 4j and 4l, only the explicitly listed `slav` and `slaw` are included; other parser helpers are left out. Jibb's `not` negates a loobean, and Hoon's bitwise `not` is exposed as `not.bit`. @iko also agreed to specifying the complete exported inventory in the doc, building its types and gates needed by the examples in milestone 2, and doing native implementations in milestone 3. Prelude unions such as spaces, roles and tones need names that other modules cannot shadow. The actual inventory and signatures still need to be specified.
26−4. **Settled: a capital in a local `++`.** On 2026-10-30, @iko said it shares the enclosing `++`'s variable of that name if the enclosing `++` also uses it; otherwise the local `++` introduces and generalizes its own variable. For example, `++ inner |= y=A y` shares `A` with an enclosing gate whose sample is `x=A`, but generalizes its own `A` if the enclosing `++` does not use `A`. A different type uses a different capital. The Grammar and Decisions record this alongside the earlier aura rules.
27−5. **Settled: cells of no items or one.** On 2026-10-30, @iko said a single-item cell is the value and `[]` is an error. The theme's `dark=[tones=[…]]`, a record of one field, must still check.
28−6. **Settled: a change with no items.** On 2026-10-30, @iko said `m()` is an error. The parser still accepts it; the checker needs to reject it and add a golden case.
29−7. **Settled: the doc's blocks that aren't whole modules.** On 2026-10-30, @iko agreed to check each in its intended context: the `cmd` and `sub` definitions as prelude source, the Core language tab's `update` inside the todo island, and the Grammar's imports example against fixture files.
30−8. **Settled: tuples and records.** On 2026-10-30, @iko agreed that an unnamed position can unify with a faced position and take its face; two different explicit faces still conflict. The Grammar and Decisions record this rule.
31−9. **Settled: values where `*` is expected.** On 2026-10-30, @iko said `*` is the noun type, not a type variable; generic positions use proper type variables. A value already known to be `@ud` can be passed where `*` is expected. The `each` and `table` signatures use `key=K`.
32−10. **Settled: navigation commands.** On 2026-10-30, @iko chose separate declarations for application paths and unchecked cords, with `link-unsafe`, `image-unsafe` and `go-unsafe` for the unchecked forms. `image-unsafe` takes a sized URL record. Both navigation declarations produce `[%go url=@t]`; `go` converts the application path to a cord including the app's base path.
33−11. **Settled: stores and derived gates.** On 2026-11-01, @iko said a store's local `+$ poke` is an ordinary action mold and the runtime envelope is `raw-poke`; a derived name clashes with an import face; and an island watching a request whose case has a separate `scry=` path has a type error. The todo API's request is renamed `todo-by-id` so it does not clash with `/- todo`. The checker must account for the fact that a store's kind is determined by the type of `main`.
34−12. **Settled: how to print a union without a name.** On 2026-10-30, @iko said to print its cases separated by spaces, as `%approve %deny`. This is print-only, not Jibb syntax.
35−13. **Settled: how to print type constraints.** On 2026-10-30, @iko chose `$-([A A] A) where A is an atom` for an atom constraint and `$-([A A] ?) where A contains no gates` for a gate-free constraint. Multiple clauses are comma-separated, as `where A is an atom, B contains no gates`.
36−14. **Settled: how the prelude implements foundational operations.** On 2026-10-30, @iko chose private low-level primitives in the internal prelude module, with the public foundational gates implemented in Jibb on top of them.
37−15. **Settled: unrestricted atoms and shared auras.** On 2026-10-30, @iko said `@` means any atom, independently at each occurrence, so Hoon `dime` and `pint` keep their bare-`@` fields. A specific atom such as `@ud` fits where `@` is expected; an `@` value needs a check to fit `@ud`. Shared atom types use one capital, with the atom constraint inferred from its body, as for `add` taking `[A A]` and returning `A`.
38−16. **Settled: loobeans in union disjointness.** On 2026-10-30, @iko said `?` counts as its two atoms, `%.y` and `%.n`: it is disjoint from any cell and overlaps the constants 0 and 1.
39−17. **Settled: empty cases in union disjointness.** On 2026-10-30, @iko said `!!` is disjoint from every case. A cell containing an empty position at any depth is itself empty and is also disjoint from every case.
40−18. **Settled: the value gate `like`.** On 2026-10-31, @iko chose a gate `(like convert result)` that maps the product of an existing `(like A)` result with `convert=$-(A B)`, yielding `(like B)` while preserving its position and remaining input. An absent result stays absent. The `(like A)` mold remains available in the separate mold namespace. Hoon's wet `+like` instead builds a gate that constructs a result from an input noun; the chosen Jibb value gate is an adaptation of that behavior.
41−19. **Settled: Hoon aura families and `step.hoon`.** On 2026-10-30, @iko chose `step.hoon` for Hoon 1c `step`, avoiding a clash with the Grammar example's `step`, and chose one-way widening across Hoon aura families: for example, `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. The `step.hoon` group representation is not implemented yet.
42−20. **Settled: the type of `clap`.** On 2026-10-30, @iko chose one shared value type for both units and the combining gate. If either unit is absent, `clap` returns the other; if both are present, it applies the gate to their values and wraps the result.
43−21. **Settled: duplicate faces in imported Hoon records.** On 2026-10-30, @iko chose to reject an imported Hoon record with duplicate field names where its type is used. Hoon permits `[a=@ud a=@t]` and picks the first `a`; Jibb rejects it.
44−22. **Settled: overlapping imported `$%` and `$?` cases.** On 2026-10-30, @iko confirmed that the general union disjointness rule rejects imported `$%` and `$?` cases that overlap as nouns where the type is used, as it does for `$^`. The importer rejects recognizable overlaps and fails closed when it cannot verify them.
45−23. **Settled: converging explicit capitals.** On 2026-10-30, @iko chose that a body cannot force two separately written capitals to be equal. For `++ repeated |= x=(choice A A) x`, `++ f |= x=(choice A B) (repeated x)` is an error; use `A` in both positions when the type must be shared. This also applies across local captures and within generic mold applications.
46−
47−24. **Settled: how the internal prelude provides `raw-poke`.** On 2026-11-01, @iko chose to define `raw-poke` in the source-backed private internal prelude module and re-export it through the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values, while derived API/store `poke` helpers return commands. This settles `raw-poke`; it does not decide the representation of `ask` or `qath`.
48−
49−25. **Settled: how the prelude provides `ask` and `qath`.** On 2026-10-31, @iko chose ordinary transparent types defined in the internal prelude and re-exported normally, as for `raw-poke`. Callers may construct and inspect their values.
50−
51−26. **Settled: the `step` example's `at` binder.** On 2026-10-31, @iko chose to rename the `describe` pattern binder to `sent-at`, keeping Hoon's `at` in the prelude and the no-shadowing rule.
52−
53−27. **Settled: duplicate fields in a Jibb-written record.** On 2026-10-31, @iko chose to reject duplicate field names, as for imported Hoon records.
19+Found while writing [prompts/milestone-2.md](prompts/milestone-2.md), checking it against the doc's examples, and building the checker. Question 3 remains open, and the field-order detail in question 32. The others are settled and are in [Decisions](spec/decisions.md#settled-milestone-2-questions), which keeps their numbers, so existing references stay valid.
5420
55−28. **Settled: arithmetic on loobeans.** On 2026-10-31, @iko chose to reject loobean operands for arithmetic. Comparison may still accept loobeans and returns `?`. The checker needs to retain this constraint through inference, generalization and instantiation before it exports `add` or `dec`.
21+**3. The prelude's inventory.** On 2026-10-30, @iko chose to include all names from the listed Hoon library sections, excluding groups the spec explicitly leaves out. All of 3g is included; its Hoon `tone` is exposed as `tone.hoon`, distinct from the styling type. Hoon 1c `step` is exposed as `step.hoon`, leaving the Grammar example's `step` name available. On 2026-10-30, @iko also approved `%$` as a term literal and pattern, so Jibb can write the `%$` case of Hoon `coin`. For parsing sections 4j and 4l, only the explicitly listed `slav` and `slaw` are included; other parser helpers are left out. Jibb's `not` negates a loobean, and Hoon's bitwise `not` is exposed as `not.bit`. @iko also agreed to specifying the complete exported inventory in the doc, building its types and gates needed by the examples in milestone 2, and doing native implementations in milestone 3. Prelude unions such as spaces, roles and tones need names that other modules cannot shadow. The actual inventory and signatures still need to be specified.
5622
57−29. **Settled: printing the arithmetic atom constraint.** On 2026-10-31, @iko chose `where A is an atom other than ?` for a generic arithmetic type whose atom variable excludes loobeans.
58−
59−30. **Settled: a hole inferred as a generic variable.** On 2026-10-31, @iko said a hole resolved to an explicitly written type variable counts as inferred: in `++ id |= x=A ^- _ x`, the result hole is `A`. Named molds must determine their own holes without constraints from later uses; an unconstrained hole is an error.
60−
61−31. **Settled: uses of a value with a hole.** On 2026-10-31, @iko said a value definition must determine its own holes; another definition's use cannot fix an otherwise unresolved hole. For example, `++ id |= x=_ x` remains an error even if a later definition calls `id` with a cord.
62−
63−32. **Partly settled: type-directed record projection.** On 2026-10-31, @iko chose an explicit `(proj record)` whose expected result type selects the fields. There is no automatic projection, and `proj` is reserved against definitions and imports. The result contains exactly the fields of its expected type. Whether the result may reorder fields from the source remains open.
64−
65−33. **Settled: watching a request with unknown provenance.** On 2026-10-31, @iko said an island may watch a request only if the checker proves it watchable at compile time. An unknown request, including one built or passed through a gate without sufficient evidence, is rejected rather than deferred to a runtime check.
66−
67−34. **Settled: constructors and equal noun literals.** On 2026-10-31, @iko said expressions with the same runtime representation count as equal, and cases that cannot be distinguished at runtime are rejected at compile time. Thus `|=%$` matches a case headed by `%$`, `%.y` or `~`: each is the noun 0. Cases with equal heads and overlapping payloads cannot coexist in a union.
23+**32. Partly settled: type-directed record projection.** On 2026-10-31, @iko chose an explicit `(proj record)` whose expected result type selects the fields. There is no automatic projection, and `proj` is reserved against definitions and imports. The result contains exactly the fields of its expected type. Whether the result may reorder fields from the source remains open.
6824
6925## Review rulings waiting for @iko
7026
@@ -85,8 +41,6 @@ The [2026-11-02 review](reviews/2026-11-02-repo-review.md) raised these language
8541| [27](reviews/2026-11-02-questions.md) | Should the `%jibb` mark keep dropping the final newline on a `%txt` round trip? | Keep it, like `%hoon` | A61 |
8642| [28](reviews/2026-11-02-questions.md) | Should the printer flatten `[a [b c]]` and print named molds by name, such as `theme`? | Yes | A136 |
8743
88−Question 25, when to build `eq` and the gate-free constraint, is settled: @iko's commit 0858191 adds `eq` and infers the constraint.
89−
9044## Grammar questions never put to the doc's author
9145
9246In milestone 1 the parser met about thirty places where the doc could be read more than one way. Twelve went to @iko on 2026-10-30 and are rows of the Decisions tab. These were not asked. For each, the parser follows the reading below, and some are marked "(doc question)" in the library's notes. None changes what a valid program means, except where a reading makes something an error.
docs/prelude-inventory.md+1−1
@@ -158,7 +158,7 @@ The following shapes can be written as Jibb declarations once their referenced p
158158 [%2 p=(list tank)]
159159```
160160
161−The compiler-result `tone.hoon` has the three cases listed above; the qualified name is a prelude group member, not a `+$` identifier containing a dot. Question 15 in [open-questions.md](open-questions.md) records @iko's decision that `@` is an unrestricted atom, resolving the `dime` and `pint` mismatch. The source-backed value form of `like` maps an existing result's product. Supported calls infer in the partial checker; complete checking and backend validation for `like` and `wonk` remain outstanding.
161+The compiler-result `tone.hoon` has the three cases listed above; the qualified name is a prelude group member, not a `+$` identifier containing a dot. Question 15 in [Decisions](spec/decisions.md#settled-milestone-2-questions) records @iko's decision that `@` is an unrestricted atom, resolving the `dime` and `pint` mismatch. The source-backed value form of `like` maps an existing result's product. Supported calls infer in the partial checker; complete checking and backend validation for `like` and `wonk` remain outstanding.
162162
163163## 4a
164164
docs/reviews/2026-11-02-syntax-review.mdnew file+488
@@ -0,0 +1,488 @@
1+# Syntax review, 2026-11-02
2+
3+A review of Jibb's syntax at [`0858191`](https://github.com/iko-soy/jibb/commit/0858191ab08738c4da5c6d84f00492e629564e73), asked for in the project chat: how can the syntax be improved for readability, consistency, ambiguity and ergonomics? Every proposal here is a proposal. Under the ground rules, a language change is agreed by @iko and recorded in [decisions.md](../spec/decisions.md) before the code changes, and the spec text is @iko's too. Nothing in the implementation was changed.
4+
5+How it was done: five reviewers each read the spec, the prelude, the example desk and the parser's design notes through one lens (readability, consistency, ambiguity, ergonomics for Hoon and Elm programmers, and growth). Their 28 proposals, and 11 of my own, were merged into 22. Three verifiers then tried to refute each one, mostly by running the snippet through the real parser and partial checker (`tools/golden --dir <folder> --show` under urbit eval, vere 4.6), and by checking Hoon's behaviour with `urbit eval`. 15 survived, most of them revised; 7 were dropped. [How to rerun a probe](#how-to-rerun-a-probe) is at the end.
6+
7+This review does not restate the language rulings that [the repository review](2026-11-02-questions.md) raised (questions 16 to 28, now listed in [open-questions.md](../open-questions.md) under "Review rulings waiting for @iko"). Where a proposal extends one of them, it says so. Proposals here are numbered S1 to S15 so they don't collide with those numbers. "Review question N" means a question in that file, and "open question N" means item N of [open-questions.md](../open-questions.md).
8+
9+## Summary
10+
11+- **The syntax is in good shape.** Open brackets without closers, tightness as the one disambiguator, one exhaustive `?-`, named unions, `|=%tag` constructors and named changes all read well, and nearly every slip the reviewers tried gets an error at the right character. The [keep list](#what-to-keep) says what not to change.
12+- **Three changes would help most, and each needs @iko.** Gates whose parameters are named differently can't fit each other today, which is why the prelude writes 27 gates as `|= args=[…]` followed by a one-arm `?-` ([S1](#s1-let-gates-with-differently-named-parameters-fit-each-other)). A cast or trace can't be followed by its expression at the same depth, as Hoon's tall form does, so every one adds an indentation level ([S2](#s2-let-a-bodys-last---or--take-the-rest-of-the-body-at-the-same-depth)). And no binder may reuse a prelude name, so `text`, `head`, `row`, `max` and soon about 110 more everyday words can't name a local ([S3](#s3-let-local-binders-reuse-prelude-value-names)).
13+- **Two literal and pattern rules accept code that is almost certainly wrong.** A bare decimal fits any aura, so `[%every 1 |=%tick]` is a timer of 1/2^64 s and `(text 5)` renders a control byte ([S4](#s4-let-a-bare-decimal-fit-only-ud-and-its-ancestors)). A tag written without its `%` in the last arm silently becomes a catch-all ([S5](#s5-reject-a-pattern-name-that-spells-one-of-the-subjects-tags)).
14+- **Much can be done without changing the language.** Better messages for Hoon and Elm habits ([S9](#s9-name-the-hoon-or-elm-habit-behind-each-likely-slip)), an EBNF that says what the parser accepts ([S10](#s10-make-the-ebnf-say-what-the-parser-accepts)), and a canonical layout for casts ([S13](#s13-put-a-cast-whose-expression-takes-deeper-lines-at-the-end-of-its-line)).
15+
16+## The proposals at a glance
17+
18+Links in the "Today" column go to the code at `0858191`.
19+
20+| # | Proposal | Today | Proposed | Language change? | Touches | Benefit |
21+| --- | --- | --- | --- | --- | --- | --- |
22+| [S1](#s1-let-gates-with-differently-named-parameters-fit-each-other) | Gates with differently named parameters fit each other | `~[lth2 lte2]` and `(turn pairs \|=([k v] k))` are type errors; the prelude uses unfaced `args=` ([prelude.jibb:52](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L52-L58)) | Sample names label a gate but are ignored when two gate types unify | Yes, a typing rule | [decisions.md:33](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L33), [open question 8](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L30) | High |
23+| [S2](#s2-let-a-bodys-last---or--take-the-rest-of-the-body-at-the-same-depth) | Hoon's backstep for a body's last `^-`, `~&` or `\|=` | `^- @ud` above `n` at the same depth is an error ([grammar.md:54](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L54)) | The rest of the body at the same depth is the rune's last child | Yes, layout | [grammar.md:54, :61](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L54-L61) | High |
24+| [S3](#s3-let-local-binders-reuse-prelude-value-names) | Local binders may reuse prelude value names | `[%typed text]` is "pattern binder shadows a name" ([todo-list.jibb:18](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/todo-list.jibb#L18)) | Samples, pattern binders and local `++` may hide a prelude value | Yes, scope | [decisions.md:11](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L11), [open question 26](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L51) | High |
25+| [S4](#s4-let-a-bare-decimal-fit-only-ud-and-its-ancestors) | A bare decimal fits only `@ud`, `@u`, `@` and `*` | `^- @dr 30`, `^- @p 0`, `(text 5)` check ([grammar.md:167](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L167)) | Other auras take their own literals: `~s30`, `~zod`, `"5"` | Yes, literals | [grammar.md:21](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L21); extends review question 16 | Medium |
26+| [S5](#s5-reject-a-pattern-name-that-spells-one-of-the-subjects-tags) | A pattern name that spells a case's tag is an error | `stop` for `%stop` in the last arm checks as a catch-all | "`stop` binds a name, but s can be the case %stop here" | Yes, a checker rule | [grammar.md:184](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L184) | Medium |
27+| [S6](#s6-let-a-changes-item-name-a-wing) | A change's item may name a wing | `m(open.cart=x)` is "expected a named item" | `m(open.cart=x)`, as Hoon's `m(open.cart x)` | Yes, small | [decisions.md:11](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L11) | Low |
28+| [S7](#s7-allow-type-variables-longer-than-one-letter) | Type variables longer than one letter | `(program D X M)`; `Msg` is a lexer error ([grammar.md:286](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L286)) | `(program Data Model Msg)`, printed as written | Yes, lexer and printer | [parser reading 11](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L85) | Low |
29+| [S8](#s8-catch-a-route-segment-that-should-have-been-a-value) | Catch a route segment that should have been a value | `%/blog/slug.p` is the literal text "slug.p" | An error at milestone 4's route check, for two narrow cases | Yes, milestone 4 | [decisions.md:83](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L83) | Low |
30+| [S9](#s9-name-the-hoon-or-elm-habit-behind-each-likely-slip) | Messages that name the Hoon or Elm habit | `(a == b)` is blamed on the closer `==`; `True` is "found `T`" | "Jibb has no operators: write (eq a b)" and so on | No, messages | [grammar.md:68](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L68-L82) | High |
31+| [S10](#s10-make-the-ebnf-say-what-the-parser-accepts) | The EBNF says what the parser accepts | No `sample` rule; `change` allows unnamed items; `knot` may be empty ([grammar.md:221](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L221-L289)) | Productions for samples, edits, line kinds, knots and imports | No, spec text | [parser readings 1-5](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L75-L79) | High |
32+| [S11](#s11-say-which-deeper-lines-are-allowed) | Say which deeper lines are allowed | "a deeper line continues the line above" ([grammar.md:9](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L9)), though a call never continues | List what takes deeper lines; say an opener's line splits on spaces | No, spec text | [decisions.md:42](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L42) | Medium |
33+| [S12](#s12-say-that-cell-patterns-nest-and-flatten-the-prelude-later) | Say that cell patterns nest; flatten the prelude later | "not lists or pairs" reads as "no nesting"; `hunt` uses four `?-`s ([prelude.jibb:203](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L203-L214)) | Pattern rows such as `[[~ a] [~ b]]`; one `?-` once the checker can | No | [grammar.md:184](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L184) | Medium |
34+| [S13](#s13-put-a-cast-whose-expression-takes-deeper-lines-at-the-end-of-its-line) | Canonical place for a cast | `^- @ud` alone below `\|=` pushes the body right ([prelude.jibb:376](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L376-L380)) | `++ lent \|= xs=(list A) ^- @ud`, body below | No, layout convention | [decisions.md:97](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L97) | Medium |
35+| [S14](#s14-pin-down-the-spellings-the-formatter-writes) | Spellings the formatter writes | `(text …)` beside `field …` on open-list lines; `align=align` beside `=msg` | One spelling each; alignment stays the writer's | No, layout convention | [decisions.md:16, :97](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L16) | Low |
36+| [S15](#s15-name-the-fields-when-the-examples-build-a-model) | Name the fields when the examples build a model | `[[~ %.n] ""]` ([basket.jibb:15](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/basket.jibb#L15)) | `[cart=[items=~ open=%.n] note=""]` | No, examples | none | Low |
37+
38+Seven proposals were dropped after verification; [the dropped table](#considered-and-dropped) gives each reason.
39+
40+## Language changes
41+
42+Each of these needs @iko's agreement before any code changes.
43+
44+### S1. Let gates with differently named parameters fit each other
45+
46+**Problem.** A cell sample's names become faces of the gate's type: `|= [a=A b=B]` and `|= [a b]` both give `$-([a=A b=B] …)`. Faces are part of record types, and two different faces don't unify ([decisions.md:33](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L33), [settled open question 8](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L30)). So a gate's parameter names are part of its interface. Two comparators named differently can't share a list, a lambda over Hoon's `[p= q=]` pairs can't be passed to `turn`, and renaming a parameter is a breaking type change. Hoon ignores faces when it nests types, so Hoon programmers don't expect this.
47+
48+The prelude works around it. 30 of its gates take an unfaced `args=[…]` or `gates=[…]` sample, and 27 then open a one-arm `?-` whose only job is to name the parts ([prelude.jibb:33, 45, 53 and 24 more](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L52-L58)). That costs two lines and two indentation levels per gate, and reads as a branch where nothing branches. Meanwhile the element constructors and the spec's examples face their samples (`|= [=msg m=model]`), so the prelude and the spec teach two styles, and about 110 inventory gates are still to be written.
49+
50+There are two separate causes, and they need separate fixes:
51+
52+1. A capital takes a face. `(hunt lth2 `1 `2)` fails because `lth2`'s type `$-([x=A y=A] ?)` meets `hunt`'s slot `$-([A A] ?)`, and the capital `A` takes `x=` from one position and `y=` from the other. [Open question 8](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L30) says only that an unnamed position takes a face; it doesn't say whether a capital does.
53+2. The decided rule itself. `~[lth2 lte2]` and `(turn pairs |=([k v] k))` fail because two explicit faces meet.
54+
55+**Evidence** (probes with the prelude loaded):
56+
57+```
58+++ lth2 |= [x=A y=A] (gth y x)
59+++ lte2 |= [a=A b=A] (not (gth a b))
60+++ pickers ~[lth2 lte2] :: list items do not have compatible types
61+++ use-hunt (hunt lth2 `1 `2) :: argument has type $-([x=A y=A] ?)
62+++ c2 ^- $-([A A] ?) lth2 :: cast mold and expression type do not unify
63+++ pairs ^- (list [p=@t q=@ud]) ~[["a" 1]]
64+++ keys (turn pairs |=([k v] k)) :: argument has type $-([k=A v=B] A)
65+```
66+
67+In Hoon, `^- $-([x=@ y=@] @) |=([a=@ b=@] a)` and `(turn ~(tap by m) |=([k=@t v=@ud] k))` both compile. A faced gate already fits a concrete unfaced slot in Jibb, as `^- $-([@ud @ud] @ud) sum` does, so the failures are confined to the two causes above.
68+
69+**Before**, [prelude.jibb:52-58](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L52-L58):
70+
71+```
72+++ turn |= args=[(list A) $-(A B)]
73+ ?- args
74+ [xs f]
75+ ^- (list B)
76+ ?- xs
77+ ~ ~
78+ [item rest] [(f item) (turn rest f)]
79+```
80+
81+**After.** Step 1 settles a reading and reopens nothing: a face belongs to its position, and a capital binds only the type under it, so `[A A]` fits `[x=@ y=@]`. Step 2 is the ruling: the names a cell sample binds, faced or bare, are the gate's labels. They bind in the body, print in its type, check a direct call's argument and feed `proj` and route binding, which reads `load`'s own labels. They are ignored when the gate's type unifies with another type and never flow into a capital, and labels that differ where two gate types meet are dropped.
82+
83+```
84+++ pickers ~[lth2 lte2] :: (list $-([A A] ?))
85+++ use-hunt (hunt lth2 `1 `2) :: (unit @ud), step 1
86+++ keys (turn pairs |=([k v] k)) :: (list @t), step 2
87+(sum [p=1 q=2]) :: still an error: a direct call checks labels
88+
89+:: after step 2, the prelude can name its parameters (with S13's cast placement):
90+++ turn |= [xs=(list A) f=$-(A B)] ^- (list B)
91+ ?- xs
92+ ~ ~
93+ [item rest] [(f item) (turn rest f)]
94+```
95+
96+**Compatibility.** Only errors become meaning, except that step 1 changes some printed types: `(diff-slot lth2)` prints `$-([A A] ?)` where it printed `$-([x=A y=A] ?)`. Data records keep today's rule: `[hi=10 lo=0]` where `[lo=@ud hi=@ud]` is expected stays an error. A scratch rewrite of the whole prelude with S1, S12 and S13, in syntax that parses today, went from 431 to 347 code lines and from a deepest indent of 16 to 8; S1 accounts for about 54 of the 84 lines.
97+
98+**Parser.** None. `+read-sample` already tells binders, faces and molds apart ([jibb.hoon:3772](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb.hoon#L3772-L3800)). The checker records faces per position (step 1) and keeps a gate's labels apart from its sample type (step 2).
99+
100+**Touches.** Step 2 reopens [decisions.md:33](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L33) and settled open question 8 (both 2026-10-30) for gate samples only. It stays consistent with Sample names (:19), `proj` (:41) and Routing (:92).
101+
102+**Alternatives.** (b) Make a cell sample's names pure binders, out of the type altogether, as `n` in `|= n=@ud` already is. It is simpler, but it breaks `(f (proj wider))` into a faced sample, which checks today, and loses parameter names in printed types such as `button`'s. (c) Keep the rule and the `args=` idiom, and only make the error say that just the faces differ.
103+
104+### S2. Let a body's last `^-`, `~&` or `|=` take the rest of the body at the same depth
105+
106+**Problem.** A tall rune's last child sits on its line or deeper ([grammar.md:54](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L54), and `~&` "runs the body below", [:61](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L61)). So every cast or trace whose expression goes below adds an indentation level. Adding one `~& msg` while debugging, with the one debugging rune Jibb keeps, re-indents every line below it, and removing it re-indents them again. Hoon programmers write `|= a=@`, `^- @ud` and `~& x` each on its own line with what follows at the same column. In Jibb that is an error.
107+
108+**Evidence.** `++ f |= n=@ud` above `^- @ud` and `n` at the same depth gives "expected an expression, or a body on deeper lines, found a line at the same depth"; the `~&` version gives "expected `~&`'s body on deeper lines". Ten of the prelude's casts sit alone on their line ([prelude.jibb:47, 55, 108, 158, 260, 271, 297, 323, 377, 395](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L157-L161)). Eleven more sit on a `?-` arm's line, where the next same-depth line must stay the next arm, so this rule doesn't change them.
109+
110+**Before**, [todo-list.jibb:16-25](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/todo-list.jibb#L16-L25) with a trace added, and [prelude.jibb:163-167](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L163-L167):
111+
112+```
113+++ update |= [=msg m=model]
114+ ~& msg
115+ ?- msg
116+ [%typed t]
117+ …
118+
119+++ bond |= fallback=$-(~ A)
120+ |= maybe=(unit A)
121+ ?- maybe
122+ ~ (fallback ~)
123+ [~ value] value
124+```
125+
126+**After:**
127+
128+```
129+++ update |= [=msg m=model]
130+ ~& msg :: insert or delete this one line; nothing else moves
131+ ?- msg
132+ [%typed t]
133+ …
134+
135+++ bond |= fallback=$-(~ A)
136+ |= maybe=(unit A)
137+ ?- maybe
138+ ~ (fallback ~)
139+ [~ value] value
140+```
141+
142+The rule, for grammar.md's Runes: a body's final line may be a tall `^-`, `~&` or `|=`, or a chain of them such as `^- @ud ~& x`. When that line ends where the innermost rune's last child goes, the rest of the body at the same depth is that child: first its local `++` and `+$`, then its expression. It does not apply on a `?-` arm's line, on a line of an open bracket, after a bracket opened earlier on the line, at the top level, or to a definition's own expression: `++ inner |= y=@ud` above `(inner x)` stays an error.
143+
144+**Compatibility.** Only errors become meaning: a NEWLINE right after a body's final expression is always an error today. Of the golden corpus, only `lex-rune-layout-bad-3` flips, and its about.txt already calls the form "as Hoon's tall form would put it". The other cases that fail on "a line at the same depth" are at the top level, on arms, on definitions or in brackets, and keep their errors.
145+
146+**Parser.** Small, with no backtracking. The body loop already knows it has reached the final expression when the next token isn't `++` or `+$`. After a rune's head the next token is an expression start, INDENT (today's body) or NEWLINE (the new case). A "final line of a body, nothing open before" flag passes down the chain of runes on that line.
147+
148+**Touches.** grammar.md:54 and :61 and the EBNF's `rune`, for a body's final line only. No decisions row requires a deeper body. The formatter's one canonical layout ([decisions.md:97](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L97)) has to make this flat form canonical, or the "nothing else moves" benefit is lost.
149+
150+**Alternatives.** `^-` and `~&` only, leaving `|=`. Or no language change at all: [S13](#s13-put-a-cast-whose-expression-takes-deeper-lines-at-the-end-of-its-line) puts a cast on its `|=` line, which removes most of the cast drift today but does nothing for `~&`.
151+
152+### S3. Let local binders reuse prelude value names
153+
154+**Problem.** No name may shadow one in scope, "imports and the prelude included" ([grammar.md:101](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L101)). The prelude has 75 top-level values, and the inventory decision adds about 110 more, many of them everyday words: `at`, `end`, `cut`, `min`, `max`, `find`, `sort`, `trim`, `test`, `year`, `head`, `tail`, `in`, `by`, `to`. The element gates take `text`, `row`, `field`, `link`, `form` and `table`. So the natural name for a binder is often forbidden: the field `text=@t` is bound as `t` ([todo-list.jibb:18](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/todo-list.jibb#L18)), 13 golden sources name a value `text-value`, and [settled open question 26](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L51) renamed the grammar example's `at` to `sent-at`. Every name the prelude adds later can break code that bound it. The messages don't say which name clashed with what.
155+
156+**Evidence** (prelude loaded): `[%typed text] text` gives "pattern binder shadows a name"; `|= row=@ud row` gives "sample shadows a name"; a local `++ head 1` gives "local definitions shadow a name"; golden case [module-import-prelude-sample-shadow](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/tests/golden/module-import-prelude-sample-shadow/source.jibb) rejects `|=(same same)`.
157+
158+**Before** and **after**:
159+
160+```
161+:: today
162+ ?- msg
163+ [%typed t]
164+ ?- (gth (lent (tuba (trip t))) 80)
165+ %.y [m(draft=t error=`"Too long") ~]
166+
167+:: proposed
168+ ?- msg
169+ [%typed text]
170+ ?- (gth (lent (tuba (trip text))) 80)
171+ %.y [m(draft=text error=`"Too long") ~]
172+
173+++ text "hi" :: still an error, now naming both sides:
174+ :: "`text` is the prelude gate text; a top-level name can't reuse it"
175+```
176+
177+The rule, for grammar.md:101: "No name may shadow one already in scope, with one exception: a sample, a pattern binder or a local `++` may reuse the name of a prelude value, which that scope then can't name. Top-level names, import faces and molds never shadow the prelude, and nothing shadows an import face or a name the module defines. `proj` stays reserved."
178+
179+**Compatibility.** Only errors become meaning; no valid program binds a prelude name today. Inside a scope that hides a prelude gate, using that gate is an error, and the message should name the hidden gate.
180+
181+**Parser.** None. The lowering renames such binders, since [core-language.md](../spec/core-language.md) assumes prelude names are never hidden; it already generates `_` names.
182+
183+**Touches.** The Syntax row ([decisions.md:11](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L11)) for local binders, and settled open question 26, which @iko decided on 2026-10-31 with the inventory decision already made. The new evidence is the size of that inventory. Decide it together with [S5](#s5-reject-a-pattern-name-that-spells-one-of-the-subjects-tags): today `add` written for `%add` happens to be caught as a shadowing error, and under S3 it would need S5 to be caught.
184+
185+**Not affected by S3.** The prelude's own `toggle |= [on=? …]` ([prelude.jibb:513](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L513)) will collide if `on` is ever defined in the prelude, because a module can't shadow its own names; rename the face then.
186+
187+**Alternatives.** Let a module's top-level names shadow the prelude too: rejected, since a top-level `++ text` would hide the element gate in the whole module and Jibb has no qualifier to reach it. Or keep the rule and only improve the message.
188+
189+### S4. Let a bare decimal fit only `@ud` and its ancestors
190+
191+**Problem.** A bare decimal takes "any aura by context" ([grammar.md:21](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L21), [:167](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L167)). So a number written where a duration, date, ship or cord is expected compiles with a meaning nobody intends: `[%every 1 |=%tick]` fires every 1/2^64 s, `[%wait 30 %done]` waits about nothing, `(text 5)` renders the byte 0x05 and `^- @p 0` is `~zod`. Hoon rejects all of these (`mint-nice -need.@dr -have.@ud`), and "Literals: exactly Hoon's" ([decisions.md:12](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L12)) points the same way. Once review question 16 lands, `%1.000` fits only its own aura family, and `1.000` would be the looser of the two.
192+
193+**Evidence.** `^- @dr 30`, `^- @p 0`, `^- @t 5` and `^- (element !!) (text 5)` all check today. No source in my-app, jibb-dev or the docs relies on it.
194+
195+**After:**
196+
197+```
198+++ subs |= m=model
199+ ~[[%every ~s1 |=%tick]] :: [%every 1 |=%tick]: "1 is a @ud; a duration is written ~s1"
200+++ note (text "5") :: (text 5): "5 is a @ud; text is written \"5\""
201+++ bump |= x=A (add x 1) :: unchanged: generic over its aura, so (bump ~s1) checks
202+```
203+
204+The rule, for grammar.md:21 and :167: a decimal is `@ud`, and also fits `@u`, `@` and `*`, as in Hoon. Where its `++` is generic over its aura it stays generic, as decisions.md:33 already says. Other auras take their own literals: `~s30`, `~2026.1.1`, `~zod`, `"5"`, `0x1`.
205+
206+**Compatibility.** Some programs that check today become errors. In the corpus only [types-partial-aura](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/tests/golden/types-partial-aura/source.jibb#L2) flips: `^- @ux 1`, which Hoon also rejects, becomes `0x1`. If @iko would rather keep `^- @ux 1`, allowing `@ux` and `@uv` is a stated deviation from Hoon.
207+
208+**Parser.** None. In the checker, the decimal constraint against a concrete atom ([jibb.hoon:4909-4914](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb.hoon#L4909-L4914)) accepts only `ud`, `u` and the empty aura.
209+
210+**Touches.** grammar.md:21, :162 and :167. It extends review question 16 (a) to bare decimals without restating it.
211+
212+### S5. Reject a pattern name that spells one of the subject's tags
213+
214+**Problem.** A bare name in a pattern always binds ([grammar.md:184](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L184)), so a tag written without its `%` becomes a catch-all. In any arm but the last, review question 22's dead-arm error catches it. In the last arm it checks, and from then on it silently takes every case later added to the union, which switches off the exhaustiveness check that [decisions.md:30](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L30) relies on. In Hoon a bare `stop` in a `?-` arm is not a binder, so Hoon programmers expect an error.
215+
216+**Evidence.** grammar.md's own `step` example with `stop` for `%stop` as its last arm checks as `$-(step @t)`. `[typed t]` for `[%typed t]` checks too.
217+
218+**Before** and **after**, [grammar.md:210-216](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L210-L216) with one `%` dropped:
219+
220+```
221+++ describe |= s=step
222+ ?- s
223+ [%move %left n] "left {n}"
224+ [%move %right n] "right {n}"
225+ [t %draft] t
226+ [t %sent sent-at] t
227+ stop "stop"
228+:: today: accepted; binds stop and catches everything left
229+:: proposed: "`stop` binds a name, but s can be the case %stop here; write %stop, or * for a catch-all"
230+```
231+
232+The rule, a new sentence in Patterns: "A bare name in a pattern is an error where the subject's type at that position is a union, or a one-case mold, with a case whose constant there is the term that name spells. Positions typed by an aura, `*`, a type variable or a container's element are unaffected, so `[t %draft] t` still binds `t`, and `x` is still a catch-all on a `@tas` subject." The limit to union positions matters: under review questions 16 and 17 every name spells a constant that a `@tas` or `@t` position can hold.
233+
234+**Compatibility.** Only adds errors, and no golden, prelude, my-app or doc arm is affected. **Parser.** None; the exhaustiveness check already computes the remaining cases' constants. **Touches.** A type-directed rule, which [decisions.md:32](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L32) welcomes if the Grammar tab lists it.
235+
236+### S6. Let a change's item name a wing
237+
238+**Problem.** A change's items are single names, so updating a field of a nested record repeats the path, and a Hoon programmer's `m(open.cart x)` gets "expected a named item, found `open.cart`", which is wrong in spirit since the item is named. Hoon's `%=` takes wings: `=/ m [a=[b=1 c=2] d=3] m(b.a 5)` gives `[a=[b=5 c=2] d=3]`.
239+
240+```
241+:: today, synthetic: nothing in the repository writes a nested change yet
242+++ toggle-open |= m=model
243+ m(cart=cart.m(open=(not open.cart.m)))
244+
245+:: proposed
246+++ toggle-open |= m=model
247+ m(open.cart=(not open.cart.m))
248+```
249+
250+The rule: a change's item, inline or on a line of an open change, is `name=value` or `wing=value`, read through record fields only. Every value is computed from the original record, and two items that name the same field, or one inside the other, are an error. Tuples, samples and patterns keep plain names.
251+
252+**Compatibility.** Only errors become meaning: a wing followed tight by `=` parses nowhere today. [lex-tight-change-bad-5](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/tests/golden/lex-tight-change-bad-5/source.jibb) flips. **Parser.** Still LL(2); the lexer already emits the wing token. **Touches.** The Syntax row ("changes take one or more record items") and parser reading 4. The benefit is low: Elm has no nested update either, and no code here needs one yet. Whatever is decided, the message for `m(a.b 1)` should say "expected `=` right after `a.b`" (part of [S9](#s9-name-the-hoon-or-elm-habit-behind-each-likely-slip)).
253+
254+### S7. Allow type variables longer than one letter
255+
256+**Problem.** A type variable is one capital ([grammar.md:286](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L286)), so the architecture's molds read `(program D X M)`, with `X` for the model because `M` is taken, and the prose has to decode them. Hoon names `|$` parameters with words. The one-letter rule is the parser's own [reading 11](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L85), never put to @iko.
257+
258+```
259+:: today, prelude.jibb:531-532; ++ id |= x=Msg x is "a type variable is one capital letter"
260++$ program |$ [D X M]
261+ [init=$-(D X) update=$-([M X] [X (list (cmd M))]) view=$-(X (element M)) subs=$-(X (list (sub M)))]
262+
263+:: proposed
264++$ program |$ [Data Model Msg]
265+ [ init=$-(Data Model)
266+ update=$-([Msg Model] [Model (list (cmd Msg))])
267+ view=$-(Model (element Msg))
268+ subs=$-(Model (list (sub Msg)))
269+```
270+
271+`typevar = upper { lower | digit }`, so `Msg` and `T2` are variables and `AB` stays an error. Only a lexer error becomes meaning ([jibb.hoon:1357-1361](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb.hoon#L1357-L1361)), and single capitals stay valid.
272+
273+Two conditions. The printer must print written names: today `program`'s `D X M` print as `A B C` ([types-prelude-ui/types.txt:22](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/tests/golden/types-prelude-ui/types.txt#L22)), so without that the names never reach an error message. And the spec should say plainly that capitalized names are variables and lowercase names are molds, the reverse of Elm, where `Msg` is a concrete type. The benefit is low: my-app writes one type variable in all.
274+
275+### S8. Catch a route segment that should have been a value
276+
277+**Problem.** A value goes into an application path in parentheses, `%/blog/(slug.p)`. A bare segment is a knot, and knots may hold dots, so `%/blog/slug.p` is the literal text "slug.p" and types as `qath` with no complaint. With `/ui/blog/_slug.jibb` present, milestone 4's route check as designed would accept it, and every card would link to one post. `%/blog/{slug}` is caught, but the message doesn't say how to put a value in a path.
278+
279+**After**, at milestone 4's route check and for a `@ta` or `@tas` parameter only: `%/blog/slug.p` is an error when it reads as a wing of a local binding ("write (slug.p) for its value, or (~.slug.p) for the text"), and `%/blog/slug` when it is the parameter's own name. Ordinary words stay literal links, since the prelude makes nearly every word a name in scope. The `{` message can improve now: "a segment's value goes in parentheses, as %/blog/(slug)".
280+
281+**Touches.** Refines [decisions.md:83](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L83) and :92. Low value until milestone 4.
282+
283+## No language change
284+
285+These change messages, spec text, examples or the formatter's choices. The spec text is still @iko's, but none of them changes what a program means.
286+
287+### S9. Name the Hoon or Elm habit behind each likely slip
288+
289+**Problem.** Jibb's messages for the Hoon forms grammar.md names as left out are good. The next most likely slips get messages that blame another construct, or say nothing useful. Each new message is chosen where the parser or lexer already fails, using tokens it already holds, so LL(2) and the no-backtracking rule are untouched.
290+
291+| Written | Today | Proposed message |
292+| --- | --- | --- |
293+| `(a == b)` | "the closer `==` is left out: indentation covers it" | "Jibb has no operators: write (eq a b)"; likewise `+`, `-`, `<`, `>`, `\|>`, `&&` |
294+| `?- -.a` | "a name starts with a letter, and Jibb has no operators" | "`-.a` is left out: write (head a), or switch on a itself with arms such as [%add n]"; `+.a` gets `(tail a)` |
295+| `(~(get by m) "a")` | "expected a space between items, found `(`" | "`~(arm door …)` is left out: call the group's gate, as (get.by m \"a\")" |
296+| `True` | "expected an expression, found `T`" | "names are lowercase: the loobeans are %.y and %.n, null is ~" |
297+| `[x :: xs]` | an error two lines later about a shallower line | "the `::` at 2:6 begins a comment: a list's head and tail are [x xs]" |
298+| `b=2 c=3` on a line of an open `[` | "`name=value` goes in a cell", though it is in one | "a bracket open at the end of its line takes one item per line" |
299+| `-- note` | "the closer `--` is left out" | "comments start with `::`" |
300+| `+(n)`, `$:`, `$@`, `$~`, `=\|`, `^+`, `` `@ud`x `` | generic messages | `(succ n)`; a record; a `+$` with cases; no defaults; `^-` with a mold or `_`; `^- @ud x` |
301+| `\x -> …`, `{ m \| … }`, `f(x)`, `_` in a pattern | generic messages | `\|=(x …)`; `m(note="x")`; `(f x)`; `*` |
302+| `(lent "abc")`; a shadowing binder | a type mismatch; "pattern binder shadows a name" | "a string is a cord; (trip \"abc\") is its tape"; "binder `text` shadows the prelude's `text`" |
303+
304+**Compatibility.** Error text only, plus a one-bit layout flag on a token followed by a comment, used only for the `[x :: xs]` message. The golden `tree.txt` files of the affected `lex-*`, `inline-leftout-*` and types cases change.
305+
306+### S10. Make the EBNF say what the parser accepts
307+
308+**Problem.** The tree-sitter grammar and the formatter ([decisions.md:96-97](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L96-L97)) will be written from the EBNF, and grammar.md calls itself "the syntax the compiler accepts". In several places the EBNF and the parser disagree, and every mismatch below was reproduced:
309+
310+- Samples: `rune = "|=" field …` reuses `field`, so a bare name in a sample reads as a mold reference, but it binds ([decisions.md:19](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L19)), at any depth, while inside a faced mold such as `p=[a b]` the same names are molds. A cell sample's `[` closes on its line.
311+- `change` uses `item`, whose name is optional, though every item and every line of an open change must be named.
312+- `group` and `list` share `line = [ name "=" ] expr`, but their lines take no `name=`.
313+- `knot` may be empty, so the EBNF admits `//` and a trailing `/`; `/` alone is the empty path, which `pathlit` doesn't admit.
314+- `/%` takes any `term`, but only `%name` works; a `/=` path needs a segment.
315+
316+**After** ([grammar.md:221-289](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L221-L289)):
317+
318+```
319+import = "/-" name | "/%" "%" name | "/=" name "/" knot { "/" knot } ;
320+change = wing "(" edit { edit } ")" | wing "(" { edit } elines ; (* "(" tight after the wing; m() is an error, review question 19 *)
321+edit = name "=" operand ;
322+elines = INDENT name "=" expr { NEWLINE name "=" expr } DEDENT ;
323+group = "(" expr ")" | "(" { operand } xlines ;
324+list = "~[" { operand } "]" | "~[" { operand } xlines ;
325+tuple = "[" item { item } "]" | "[" { item } ilines ; (* [] is an error, review question 19 *)
326+item = [ name "=" ] operand ;
327+xlines = INDENT expr { NEWLINE expr } DEDENT ; (* lines take no name= *)
328+ilines = INDENT [ name "=" ] expr { NEWLINE [ name "=" ] expr } DEDENT ;
329+sample = name (* one name, no ".": binds, at any depth *)
330+ | name "=" mold | "=" name (* a name inside the mold is a mold *)
331+ | "[" sample { sample } "]" (* a cell of samples; closes on its line *)
332+ | mold ; (* any other mold, never a lone name or "[":
333+ binds nothing, as |= ~ or |= post.blog *)
334+gate = "|=(" sample operand ")" ;
335+rune = "|=" sample ( expr | body ) | … ;
336+pathlit = "/" | "/" knot { "/" knot } ;
337+pathmold = "/" | "/" segment { "/" segment } ;
338+knot = kchar { kchar } ;
339+kchar = lower | digit | "-" | "." | "~" | "_" ;
340+```
341+
342+The prose changes with it: grammar.md:58 adds that a sample may be a bare name, which binds, or another mold, which binds nothing, as `|= ~`; :66 says `|=(sample operand)`. `[]` and `m()` follow review question 19's answer; the parser still accepts both until that lands. `~[]` stays valid (see [the dropped table](#considered-and-dropped)).
343+
344+**Touches.** No decided row. It writes [parser readings 1 to 5](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/open-questions.md?plain=1#L75-L79) into the spec, which @iko should confirm. If S6 lands, `edit` becomes `( name | wing ) "=" operand`.
345+
346+### S11. Say which deeper lines are allowed
347+
348+**Problem.** [grammar.md:9](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L9) says "a deeper line continues the line above", which suggests a call can continue onto a deeper line. It can't: `f a` above a deeper `b` is "expected the end of the line, found a deeper line". Separately, the same text reads differently on an opener's line and on a deeper line. `~[heading 2 "Todos"` holds three items, while `text "a"` on a deeper line is one call; `[label=trim " x " n=1]` has three items, while `label=trim " x "` on a deeper line means `label=(trim " x ")`. grammar.md:44 explains this for lists only.
349+
350+**After**, grammar.md:9: "**Indentation is structure**: a block of deeper lines belongs to the line above it: to the last bracket that line leaves open at its end, to the body of the last rune or `++` on it, to `?-`'s arms, to an arm's body, or to a `+$`'s cases. A deeper line that nothing on the line above takes is an error, so a call never continues onto a deeper line. Returning to an earlier indentation closes every block since."
351+
352+And to Open brackets (grammar.md:11): "On the opener's line, spaces separate items, so `~[text "a"` holds two items. In an expression's open bracket each deeper line is one whole item: `text "a"` there is `(text "a")`, `label=trim " x "` is `label=(trim " x ")`, and under a `(` alone the first deeper line is the head. A mold's open bracket takes exactly one field or mold per deeper line." Also rename [lex-call-open-bad-1](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/tests/golden/lex-call-open-bad-1/about.txt), which parses, as its about.txt says.
353+
354+### S12. Say that cell patterns nest, and flatten the prelude later
355+
356+**Problem.** Eight prelude gates nest a `?-` inside another `?-`'s arm, to look at two values or one list cell ahead: `both`, `clap`, `hunt`, `mate`, `clef`, `join`, `snip` and `rear`. `hunt` needs four `?-`s for one decision. The EBNF already allows nested cell patterns, but the spec shows none, and "not lists or pairs" ([grammar.md:184](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/grammar.md?plain=1#L184)) reads as if cells don't nest. The partial checker doesn't support nested or list-refining patterns yet, which is why the prelude was written this way.
357+
358+**Now**, in grammar.md's Patterns: "… ships, loobeans and `~`, and cells of patterns, which nest; not `~[…]` lists or `a+b` pairs." Add the rows `[[~ a] [~ b]]` (a pair of present units) and `[x ~]` (a list of one item), and a note: over `[(unit A) (unit A)]`, `[~ b]` means "the first is null", not "a present unit", so keep every position visible, as `[* ~ b]`.
359+
360+**Later**, once the checker supports nested patterns along with review questions 5 and 22 ([prelude.jibb:203-214](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L203-L214) and [:331-337](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L331-L337)):
361+
362+```
363+:: today
364+++ hunt |= args=[$-([A A] ?) (unit A) (unit A)]
365+ ?- args
366+ [choose first second] ^- (unit A)
367+ ?- first
368+ ~ second
369+ [~ a]
370+ ?- second
371+ ~ first
372+ [~ b]
373+ ?- (choose a b)
374+ %.y first
375+ %.n second
376+
377+:: later
378+++ hunt |= args=[$-([A A] ?) (unit A) (unit A)] ^- (unit A)
379+ ?- args
380+ [* ~ second] second
381+ [* first ~] first
382+ [choose [~ a] [~ b]]
383+ ?- (choose a b)
384+ %.y `a
385+ %.n `b
386+```
387+
388+Both versions parse today; the flat one gets "branch is not supported by partial inference", so the prelude must wait or it stops checking.
389+
390+### S13. Put a cast whose expression takes deeper lines at the end of its line
391+
392+**Problem.** Eight prelude gates put `^- T` alone on the line below `|=`, and two arms do the same, so each pushes its body one level right. The spec's examples already write casts on the line they belong to (`++ theme ^- theme`, `++ id |= x=A ^- _ x`), and Hoon programmers read `|= a=@ ^- @` as one header. The formatter's "one canonical layout" doesn't say where a cast goes.
393+
394+```
395+:: today, prelude.jibb:376-380
396+++ lent |= xs=(list A)
397+ ^- @ud
398+ ?- xs
399+ ~ 0
400+ [item rest] (add 1 (lent rest))
401+
402+:: proposed
403+++ lent |= xs=(list A) ^- @ud
404+ ?- xs
405+ ~ 0
406+ [item rest] (add 1 (lent rest))
407+
408+:: unchanged: a cast and its expression that fit on one line stay below the |=
409+++ row |= [attrs=(list attr) kids=(list (element M))]
410+ ^- (element M) [%row attrs kids]
411+```
412+
413+For grammar.md:60: "A cast whose expression takes the deeper lines goes at the end of the line it belongs to, the `|=`, `++` or arm line; a cast whose expression fits on its own line goes on the line below with it." Both layouts parse to the same meaning today. If [S2](#s2-let-a-bodys-last---or--take-the-rest-of-the-body-at-the-same-depth) lands, the formatter must pick between this and the flat form; S13 can be adopted in the prelude now.
414+
415+### S14. Pin down the spellings the formatter writes
416+
417+**Problem.** The spec's code mixes equivalent spellings side by side, which suggests they differ: `(text …)` lines beside unparenthesized `field …` lines in one open list ([basket.jibb:29-32](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/basket.jibb#L29-L32)); `align=align` ([prelude.jibb:443-445](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb/prelude.jibb#L443-L445)) where the spec teaches `=msg`; a cast's body indented 2 deeper in some places and 4 in others. Each pair parses to the same thing.
418+
419+**After**, for grammar.md's Spacing: "The formatter writes one layout, except for runs of spaces. It drops parentheses around an unfaced whole line of an open list or group, writes `name=name` as `=name` in molds and samples, and indents a body two spaces deeper than the line it continues. Spaces for alignment and import gaps stay as written." Dropping alignment was considered and not proposed: it would reopen [decisions.md:16](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L16) on diff-noise grounds alone. Whether a null-sample `load` is written wide, `|=(~ …)`, or tall is left to @iko; the spec uses both.
420+
421+### S15. Name the fields when the examples build a model
422+
423+**Problem.** The examples build models and state as bare tuples that take their faces from the expected type: `[[~ %.n] ""]` ([basket.jibb:15](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/basket.jibb#L15)), `[~ %.n]` ([cart.jibb:8](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/stores/cart.jibb#L8)), `[ts "" ~]` ([todo-list.jibb:14](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/my-app/ui/todo-list.jibb#L14)). A reader of basket.jibb needs stores/cart.jibb open to learn what `[~ %.n]` means.
424+
425+```
426+++ init |= ~
427+ [cart=[items=~ open=%.n] note=""]
428+++ init ^- state [items=~ open=%.n]
429+++ init |= ts=(list item.todo)
430+ [todos=ts draft="" error=~]
431+```
432+
433+The faced form checks to the same type, and a misnamed field (`opened=`) becomes a definite error. These are the spec's teaching examples, so the matching doc blocks and `doc-*` golden sources change with them.
434+
435+## Considered and dropped
436+
437+| Proposal | Why it was dropped |
438+| --- | --- |
439+| Reject a bare sample name that also names a mold in scope (`\|= [n=@ud item]` binds a value named `item`) | It rejects natural code that checks today, such as `\|=(item item)` beside `+$ item` and `\|=(path …)` with the prelude's `path`, and every new prelude mold would break more. The typed spellings `=item` and `it=item` already exist. |
440+| Name the fields in patterns, `[%acked err=e]` | Opt-in, so it doesn't protect the positional arms that have the hazard; the probed real arms fail at the next use rather than silently; and it reopens Binding patterns ([decisions.md:55](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/docs/spec/decisions.md?plain=1#L55)). Hoon-style narrowing conflicts with Refinement types: none. A checker message naming the rest a binder took is enough if the hazard shows up. |
441+| Let a cell sample's `[` be left open | Only two prelude lines need it, `++ program` can take `p=(program D X M)` instead, and in an open `(turn xs` the same layout would read two ways. |
442+| Let a call continue its arguments onto deeper lines | A call followed by deeper lines already means a `~&` body or `?-` arms; mis-indented list items would become calls instead of layout errors; and the decided form `(field "New todo"` with deeper arguments costs only one `(`. S11 fixes the prose that suggested it. |
443+| Let patterns take `` `x `` and `gap+s` | A second spelling for every unit and pair pattern, and the existing hints already name the one accepted spelling. |
444+| Puns in tuples and changes, `[=draft]`, `m(=draft)` | The corpus has no expression `name=name` outside two test sources, and Hoon has no expression pun either (`[=a =b]` fails under urbit eval). |
445+| Reject `~[]`, as `[]` is rejected | `~[]` is the only empty list that types without context, `(list A)`, while a bare `~` asks for a `^-`; 38 golden uses rely on it. Instead, grammar.md's Literals table could say so. |
446+
447+Five of these seven were my own candidates; the verification refuted them.
448+
449+## What to keep
450+
451+The reviewers agreed on these strengths, and the proposals above are built not to disturb them.
452+
453+- **Open brackets with no closers**, plus the several-open-brackets rule: `column ~[gap+%s2] ~[` with one item per line reads like elm-ui without commas or closers, adding an item is a one-line diff, and every mis-nesting the reviewers tried failed to parse or failed to type.
454+- **Tightness as the one disambiguator, with an error for every slip**: `m(note=t)` is a change and `m (note t)` a call, `|=%got` a constructor and `|= %got` a gate, and `gap+%s2` binds tighter than a call, so attribute lists need no parentheses.
455+- **`|=%tag` constructors**: Elm's constructor-as-function with nothing to write, and a bare tag is always a value, so a tag never silently becomes a reply gate.
456+- **Named changes**, `m(draft="" error=~)`: Elm's record update in Hoon's shape, untouched when the model grows.
457+- **One exhaustive `?-`**, loobeans included, with no operators and so no precedence or dangling else. When a union gains a case, every `?-` that must handle it is flagged.
458+- **`+$` with cases below as the only union syntax**, so every union has a name and `+$ msg` reads like an Elm type declaration.
459+- **Left-out Hoon runes fail at the exact character** with the reason and the Jibb form to write ([inline-leftout-* cases](https://github.com/iko-soy/jibb/tree/0858191ab08738c4da5c6d84f00492e629564e73/tests/golden)).
460+- **Separate mold and value namespaces**, with one `.` for fields, imports and prelude groups, so `todos.todo` can be a mold and a request, and an imported module's growth never collides with the importer's names.
461+- **Hoon's literals exactly**, strings only `"…"` and always cords, and `{…}` holding a whole expression, so `"{lent xs} items"` needs no parentheses.
462+- **Rune bodies must be deeper, and a deeper line nothing takes is an error**, so structure never drifts silently. S2 is a narrow exception where no other parse is possible.
463+- **The LL(2) parser over layout tokens** never backtracks and puts each error at the first character that can't continue ([jibb.hoon:405-415](https://github.com/iko-soy/jibb/blob/0858191ab08738c4da5c6d84f00492e629564e73/jibb-dev/lib/jibb.hoon#L405-L415)); the layout pass works by column alone, so a tree-sitter scanner needs only an indent stack.
464+
465+## Questions for @iko
466+
467+In priority order. Each would be recorded in decisions.md before any code changes.
468+
469+1. **S1**: (a) Does a capital bind only the type under a face, so `[A A]` fits `[x=@ y=@]`? (b) Are a gate's sample names ignored when two gate types unify, reopening decisions.md:33 and open question 8 for gate samples only?
470+2. **S2**: May a body's last `^-`, `~&` or `|=` take the rest of the body at the same depth, with the flat form canonical?
471+3. **S3**: May samples, pattern binders and local `++` reuse prelude value names, reopening settled open question 26? Decide with S5.
472+4. **S4**: Does a bare decimal fit only `@ud`, `@u`, `@` and `*`, as in Hoon?
473+5. **S5**: Is a pattern name that spells a case's tag at a union position an error?
474+6. **S7**: May type variables be words such as `Msg`, with the printer keeping written names?
475+7. **S6**: May a change's item name a wing?
476+8. **S10 and S11**: Do the EBNF and the indentation prose take the wording above, confirming the parser's readings 1 to 5?
477+9. **S12, S13 and S14**: May the spec show nested patterns, and does the canonical layout put casts and spellings as proposed?
478+10. **S8**, at milestone 4: should the route check catch the two narrow segment slips?
479+
480+## How to rerun a probe
481+
482+Every claim above came from a probe like this, run at `0858191`:
483+
484+1. Make a folder with one subfolder per case, holding `source.jibb` and an `about.txt` of the four lines `source: probe`, `tests: x`, `expect: unclear`, `expect-types: probe`.
485+2. For prelude-aware type reports, start the source with `/= lib /ui/lib`, add a `modules.txt` holding `/ui/lib.jibb`, and a `modules/ui/lib.jibb` holding `++ identity |=(x x)`. Without an import, the partial checker doesn't load the prelude.
486+3. Run `tools/golden --dir <folder> --show`. It prints each case's tokens, its tree or parse error, and the partial type report.
487+
488+"Not supported by partial inference" in a report is a checker gap, not a verdict on the syntax.
docs/spec/decisions.md+164−90
@@ -6,96 +6,170 @@ The choices behind the Language tab, made on 2026-10-23; a later date marks a re
66
77## Decisions
88
9−| Decision | Choice | Status |
10−| --- | --- | --- |
11−| Syntax | Hoon's runes as keywords, and its literals; wide forms only for `\|=` and `$-`; changes take one or more record items, as `m(draft="x")`, so `m()` is an error; `.` reads fields, imports and prelude groups; no name may shadow another | Decided 2026-10-30 |
12−| Literals | Exactly Hoon's, including `%$` as a term literal and pattern: `1000` is an error, `~2026.2.31` is `~2026.3.3`, and years BC and sub-second groups are dates; `print-date`'s minute form is not a literal | Decided 2026-10-30 |
13−| Cells | A single-item cell `[a]` is `a`; an empty `[]` is an error, in expressions and molds | Decided 2026-10-30 |
14−| Numeric terms | `%` and a decimal as Hoon writes it: `%1.000`; `%1000` and `%007` are errors | Decided 2026-10-30 |
15−| Strings | Hoon's escapes: `\\`, `\"`, `\{`, and `\` with two lowercase hex digits; a string and each `{…}` close on the line they open; `::` in a string is text | Decided 2026-10-30 |
16−| Spacing | Style, kept by the formatter: one or more spaces between items, and spaces allowed after an opener, before a closer and at the end of a line; faces, puns and typed path segments take no spaces; a rune is followed by one | Decided 2026-10-30 |
17−| Path literals | `/posts/~zod` is an expression: `pathlit` is an operand | Decided 2026-10-30 |
18−| Crash | `!!` is an operand, so `f !!` and `~[!!]` need no parentheses | Decided 2026-10-30 |
19−| Sample names | Every bare name in a sample binds, at any depth: `\|= [a=@ b]` binds `a` and `b` | Decided 2026-10-30 |
20−| Local definitions | At the start of any body: a gate's, an arm's, a `^-`'s, a `~&`'s or a `++`'s | Decided 2026-10-30 |
21−| Value cycles | A non-gate value that depends on itself, even through a gate, is an error; mutually recursive gates are allowed | Decided 2026-10-30 |
22−| Open molds | A mold's `[` and `(` may be left open at line end, one field or mold per deeper line; a `(` keeps the mold's name on its first line | Decided 2026-10-30 |
23−| Open groups | A `(` alone at line end puts the call's head on the first deeper line | Decided 2026-10-30 |
24−| Several open brackets | The deeper lines go to the last bracket, or the last rune's body, left open on a line, and the brackets before it close with it: `(column ~ ~[` needs no `)` | Decided 2026-10-30 |
25−| Jibb code blocks | Labelled `jibb` in this doc; each is a golden test | Decided 2026-10-30 |
26−| Definitions | `++` for values, `+$` for molds; no `=/` | Decided |
27−| Unions | No `$?`: a `+$` with its cases on the lines below is a union, so every union written in Jibb has a name; one case is just that mold; a mold that isn't a union counts as a union of one case for tags and `\|=%tag`; a generic's `\|$` comes right after the `+$`'s name; tags anywhere; constructor heads and case disjointness compare literal noun values regardless of spelling, so `%$`, `%.y` and `~` are equal and overlapping cases are errors; cases differ as nouns, with `?` treated as the two atoms `%.y` and `%.n`, disjoint from cells and overlapping constants 0 and 1, and `!!` or any cell with an empty position disjoint from every case; a tag literal or `~` waits for its union, and an unresolved one is an error | Decided 2026-10-31 |
28−| Printed unnamed unions | Print the cases separated by spaces, as `%approve %deny`; this is print-only, not Jibb syntax | Decided 2026-10-30 |
29−| Printed type constraints | Print an atom constraint as `$-([A A] A) where A is an atom`, an arithmetic atom constraint as `where A is an atom other than ?`, and a gate-free constraint as `$-([A A] ?) where A contains no gates`; separate multiple clauses with commas, as `where A is an atom, B contains no gates` | Decided 2026-10-31 |
30−| Branching | `?-` only, loobeans included; exhaustive, with explicit catch-alls; covered arms are errors; failures say `!!` | Decided 2026-10-29 |
31−| Equality and negation | The gates `eq` and `not`, with Hoon's bitwise `not` exposed as `not.bit`; `eq`'s arguments and map and set keys contain no gates, even nested; the checker infers and generalizes that constraint; union matching never inspects a gate to distinguish cases | Decided 2026-10-30 |
32−| Special rules | No built-ins; type-directed rules are welcome, each listed in the Grammar tab | Decided 2026-10-29 |
33−| Inference | Hindley–Milner with aura variables; `@` is any atom, a specific atom fits `@` and a more specific aura fits an ancestor in its Hoon aura family, but each reverse needs a check, and repeated atom-constrained capitals give the same type; a number takes `@ud` only where its `++` isn't generic over its aura; distinct specific auras remain distinct; faces are part of record types, and an unnamed position can take a face but two different faces don't unify; principal types | Decided 2026-10-30 |
34−| Effects | The library unions `cmd` and `sub`; `raw-poke`, `ask` and `qath` are transparent types defined in the internal prelude and re-exported normally; derived gates and `pure` also construct requests; islands read agents only by watching; replies get full state, and diffs take a fold; timers carry the time; `%who` gives the owner's `@p`; nacks reach replies as text | Decided 2026-11-01 |
35−| Poke representation | The source-backed private internal prelude module defines `raw-poke`, and the public prelude re-exports it as an ordinary transparent type. A store's local `poke` action remains an ordinary mold; derived helpers produce the runtime envelope | Decided 2026-11-01 |
36−| Agent APIs | `/ui/api/<agent>.jibb` with `+$ poke` and `+$ paths`, over the agent's mark types; a case is a name, a path and a type, with `(facts full diff …)` for diffs, told apart by mark; an optional scry path, for pages; an island may watch a request only when the checker proves it is watchable, so a separate scry path or unknown watchability is an error; typed segments by aura | Decided 2026-10-31 |
37−| Mark names | Any name: `/%` names types after marks, and constructors poke with their type's mark; no alias marks | Decided 2026-10-26 |
38−| Derived gates | API files and stores give a generic `poke` command helper taking an action and reply, and a checked request per path or store state; clashing names are errors, including a derived name that clashes with an import face | Decided 2026-11-01 |
39−| Hoon types | A fixed translation table; `map`, `set`, `qeu`, `jar`, `jug` by name; `mop` as `(mop K V)`, read with `on`; imported `$%`, `$?` and `$^` cases must differ as nouns, and records with duplicate field names are errors where used; unused molds skipped | Decided 2026-10-30 |
40−| Record fields | Duplicate field names in a Jibb-written record are an error, as they are in an imported Hoon record | Decided 2026-10-31 |
41−| Record projection | The explicit type-directed operation `proj` takes a record and uses its expected result type to select its fields; no projection is inserted automatically. `proj` is reserved and cannot be defined or imported under that name. The result has exactly the fields declared by its type | Decided 2026-10-31 |
42−| Layout | Indentation; juxtaposed calls; a bracket open at line end takes one item per line, with no closer | Decided |
43−| Elements | Ordinary gates; containers take attribute lists; `stack` switches at `wide`; `el` adds attributes and wins; headings 1 to 6; `form` sends on Enter, the innermost when nested; `image` from an application path, sized from the file, or a sized URL; no focus control for now | Decided 2026-10-29 |
44−| Long calls | One argument per line inside parentheses | Decided |
45−| Inline gates | Hoon's wide form; the mold may be inferred; a bare sample name binds; `\|=%got` is a case's constructor, typed by the gate expected; a bare tag is always a value | Decided 2026-10-29 |
46−| Empty mold | `!!`, with no values; the expression has any type; pages are `(element !!)`, which keeps islands out of islands | Decided 2026-10-29 |
47−| Noun mold | `*` is the noun type, not a type variable; use a capital for a generic type; a value of a more specific noun type can be used where `*` is expected | Decided 2026-10-30 |
48−| Type variables | Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name if the enclosing `++` also uses it; otherwise it is introduced and generalized locally; a different type takes a different capital; a body cannot force distinct capitals to be equal, so a shared type uses the same capital; one used where an atom is required gains an inferred atom constraint, and cannot be fixed to a more specific type in its body | Decided 2026-10-30 |
49−| Partial type annotations | `_` may appear wherever a mold may appear and marks that part of the type for inference; a hole inferred as a named type variable is resolved; an unconstrained hole is an error, and a named mold or value definition must determine its own holes without constraints from later uses | Decided 2026-10-31 |
50−| Loobean mold | `?`, switched with `?-` | Decided 2026-10-26 |
51−| Defaults | None | Decided |
52−| Modules | Records, not cores | Decided |
53−| Kinds | The type of `main`: `(element !!)`, `(page R D)`, `(program D X M)` or `(store S)`; other names by file kind, in the Grammar tab | Decided 2026-10-29 |
54−| Type identity | Recursive molds by name and module | Decided 2026-10-29 |
55−| Binding patterns | In `?-` arms; the last position binds the rest | Decided 2026-10-29 |
56−| Text | Strings are written only as `"…"` and are always cords; tapes come from `trip`; `{…}` prints by aura, a bare `@` as `@ud`, and an atom whose aura its `++` is generic over is an error; `print-date` prints Urbit-style to the minute in the theme's zone, from jibb-dev's zone table; numbers keep Hoon's form | Decided 2026-10-30 |
57−| Auras | Specific auras stay distinct; `@` is any atom, a more specific aura fits an ancestor in its Hoon aura family one way, with the reverse requiring a check, and shared atom-constrained type variables preserve the same aura | Decided 2026-10-30 |
58−| Loobean arithmetic | Arithmetic rejects loobean operands; comparison may accept them and returns `?` | Decided 2026-10-31 |
59−| Crashes | As in Hoon; an island keeps its model and shows the standard notice; a failing page, or one rendering a control outside an island, gets Jibb's error page; no render limit, so an endless render stalls the ship | Decided 2026-10-29 |
60−| Refinement types | None | Decided |
61−| Imports | `/-`, `/%` (a mark's type, with no face) and `/=`; no `/+`; cycles are errors | Decided 2026-10-29 |
62−| Hoon marks for Jibb types | None: wire types are the agent's marks, and Jibb's own types never cross | Decided 2026-10-26 |
63−| Core language | A small untyped core language between the checker and both backends: Nock's operations on nouns plus a lambda calculus with names; one sample per call; s-expressions as its text form; a reference interpreter in Hoon; three rules in its tab still proposed | Decided |
64−| Stages | By kind: pages without data at commit, with data in the host, islands and stores in the browser; never inferred | Decided 2026-10-29 |
65−| Page loading | `load` maps route parameters, `~` for none, to one `ask` or `pure`; pages render per request from a fresh scry of the path, or of its case's scry path; nothing is watched or kept | Decided 2026-10-29 |
66−| Compile targets | Nock on the ship, JavaScript in the browser | Decided |
67−| Optimizer | Basic lowering; holes later | Decided 2026-10-29 |
68−| Island `update` | In the browser; returns the model and a list of commands, which the runtime processes one at a time in list order | Decided 2026-11-02 |
69−| Island `init` | Takes the page's data, returns the model | Decided 2026-10-29 |
70−| Island rendering | `view` re-runs on model changes; a keyed diff patches the DOM; holes later | Decided 2026-10-29 |
71−| Data crossing to the browser | No gates in island data or models | Decided 2026-10-29 |
72−| Inputs | A message per input event, none mid-composition; controls reset to the latest view after every event; fields read-only until the island starts | Decided 2026-10-29 |
73−| Transactions | None; one poke per command | Decided |
74−| Reloads | Restart from the model the page is served with | Decided 2026-10-29 |
75−| Shared state | Stores: browser agents written like API files, with `state`, a local `+$ poke` action mold and `(store init update)`; derived gates provide the generic `poke` command helper and state requests; one per page | Decided 2026-11-01 |
76−| Store builder | `+$ store |$ [S] [init=S update=*]`, with `++ store |= [init=S update=$-([A S] S)] ^- (store S) [init update]`: the builder checks action `A`, while `main` exposes only state `S`; the store kind check verifies `A` against the poke declaration | Decided 2026-11-01 |
77−| Subscriptions | By agent and path, shared per page; the first fact is full state, so no paths that need a scry path | Decided 2026-10-29 |
78−| Apps | One island under a catch-all route, given the path by `pure`; `%url` delivers the path on every change; in-section links act as `go`; focus moves to the first heading | Decided 2026-10-29 |
79−| Layout vocabulary | Jibb's elements and theme tokens; the stylesheet comes from the theme alone; chars and fill are inline; `[%fill n]` below 1 counts as 1 | Decided 2026-10-29 |
80−| Responsive layout | `stack` switches at the theme's `wide` | Decided 2026-10-29 |
81−| Theme | A prelude mold with every token required: spaces, five tones with `normal` and `background`, language, zone, `wide`, and an optional static font; optional values such as dark tones use explicit backtick unit syntax; 4.5:1 contrast enforced | Decided 2026-11-01 |
82−| Dark mode | Hand-written dark tones under `dark`, used when the reader prefers dark | Decided 2026-10-27 |
83−| Links | All text escaped; in-app links are application paths, as `%/blog/(slug)`, with no query or fragment, checked at compile time against routes and static files; paths and unchecked `https`, `mailto` and `tel` URLs and root-relative cords such as `"/apps/groups"` have separate declarations; `link-unsafe`, `image-unsafe` and `go-unsafe` are the unchecked forms; both navigation declarations produce `[%go url=@t]`, with `go` converting the path to a cord including the app's base path; other cords render as text; a CSP on every page | Decided 2026-10-30 |
84−| Data layer | Hoon's nouns: units, treaps, loobeans | Decided |
85−| Prelude | Hoon's standard library regrouped: all names from the listed sections except explicitly excluded groups, including all of 3g, with Hoon's `tone` exposed as `tone.hoon` and Hoon's 1c `step` as `step.hoon`; arithmetic over aura variables, units, lists, maps, sets, queues, ordered maps, function helpers, text, atom printing, a zoned date printer, time and data molds; folds take a start; jetted functions have working Jibb implementations, whose shapes the compiler recognizes to use the Hoon versions, and may take gates; private helpers and low-level primitives live in a separate internal module imported without exposing them, with public foundational gates implemented in Jibb on those primitives; `clap` takes two units of the same type and a combining gate over that type; no signed or float gates, or parser gates outside 3g except `slav` and `slaw`; signed or float auras are errors | Decided 2026-10-30 |
86−| `like` | The `(like A)` mold remains available; the value gate `like` maps the product of an existing `(like A)` with a gate `$-(A B)`, preserving the position and remaining input, and returns `(like B)` | Decided 2026-10-31 |
87−| Wire format | Noun channels; Jibb's own noun codec in the browser | Decided 2026-10-29 |
88−| Hosting | One thin host agent on `%jibb` binds, caches and serves every Jibb desk; each desk vendors jibb-dev, names its base path in docket's `site+`, and builds and renders with its own copy through fixed entry points; install `%jibb` first; app agents stay plain Hoon; pokes only from the ship | Decided 2026-10-29 |
89−| Private pages | Served by the host per request and never cached; non-owners go to the login page | Decided 2026-10-29 |
90−| Cache | Eyre holds only the hashed assets, all public; the host serves every page; a desk's entries are cleared on suspend or uninstall, and all by `-jibb!clear` | Decided 2026-10-29 |
91−| Static files | Under `/ui/static/`, committed, at hashed immutable URLs; referenced by application path, so a missing file fails to compile, and images are sized from the file; no large media, since Clay keeps every version and the cache ignores `Range` | Decided 2026-10-29 |
92−| Routing | A literal beats a parameter, which beats a catch-all; parameters bind to `load`'s sample by name; `@ta` and `@tas` raw, other auras as Hoon prints them | Decided 2026-10-29 |
93−| Linking | Folder convention; the mark stores text; the host runs each desk's own compiler; modules cached by their own and their imports' hashes | Decided 2026-10-29 |
94−| Access | Every page is private to the owner; public pages come in a later version | Decided 2026-10-29 |
95−| Tests | `test-…` arms under `/ui/tests`, run by `-jibb!test`; the JavaScript side and differential tests under Node from jibb-dev | Decided 2026-10-29 |
96−| Editor support | Tree-sitter grammar | Decided |
97−| Formatter | One canonical layout | Decided |
98−| Name | Jibb | Decided |
9+Until the Claude doc is synced with this copy, this copy is the spec (review question 42). Synced says whether the doc's Decisions tab has the row as written here. A row decided by 2026-10-29 or undated was in the doc when `spec/` was copied from it on 2026-10-30, and is unchanged. A row decided on or after 2026-10-31 is only here. A row of 2026-10-30 says Check: the copy had that day's answers to the 12 grammar questions, but other rows of that day were added or edited here afterwards ([docs/README.md](../README.md#the-spec)), and nobody has compared them with the doc yet.
10+
11+| Decision | Choice | Status | Synced |
12+| --- | --- | --- | --- |
13+| Syntax | Hoon's runes as keywords, and its literals; wide forms only for `\|=` and `$-`; changes take one or more record items, as `m(draft="x")`, so `m()` is an error; `.` reads fields, imports and prelude groups; no name may shadow another | Decided 2026-10-30 | Check |
14+| Literals | Exactly Hoon's, including `%$` as a term literal and pattern: `1000` is an error, `~2026.2.31` is `~2026.3.3`, and years BC and sub-second groups are dates; `print-date`'s minute form is not a literal | Decided 2026-10-30 | Check |
15+| Cells | A single-item cell `[a]` is `a`; an empty `[]` is an error, in expressions and molds | Decided 2026-10-30 | Check |
16+| Numeric terms | `%` and a decimal as Hoon writes it: `%1.000`; `%1000` and `%007` are errors | Decided 2026-10-30 | Check |
17+| Strings | Hoon's escapes: `\\`, `\"`, `\{`, and `\` with two lowercase hex digits; a string and each `{…}` close on the line they open; `::` in a string is text | Decided 2026-10-30 | Check |
18+| Spacing | Style, kept by the formatter: one or more spaces between items, and spaces allowed after an opener, before a closer and at the end of a line; faces, puns and typed path segments take no spaces; a rune is followed by one | Decided 2026-10-30 | Check |
19+| Path literals | `/posts/~zod` is an expression: `pathlit` is an operand | Decided 2026-10-30 | Check |
20+| Crash | `!!` is an operand, so `f !!` and `~[!!]` need no parentheses | Decided 2026-10-30 | Check |
21+| Sample names | Every bare name in a sample binds, at any depth: `\|= [a=@ b]` binds `a` and `b` | Decided 2026-10-30 | Check |
22+| Local definitions | At the start of any body: a gate's, an arm's, a `^-`'s, a `~&`'s or a `++`'s | Decided 2026-10-30 | Check |
23+| Value cycles | A non-gate value that depends on itself, even through a gate, is an error; mutually recursive gates are allowed | Decided 2026-10-30 | Check |
24+| Open molds | A mold's `[` and `(` may be left open at line end, one field or mold per deeper line; a `(` keeps the mold's name on its first line | Decided 2026-10-30 | Check |
25+| Open groups | A `(` alone at line end puts the call's head on the first deeper line | Decided 2026-10-30 | Check |
26+| Several open brackets | The deeper lines go to the last bracket, or the last rune's body, left open on a line, and the brackets before it close with it: `(column ~ ~[` needs no `)` | Decided 2026-10-30 | Check |
27+| Jibb code blocks | Labelled `jibb` in this doc; each is a golden test | Decided 2026-10-30 | Check |
28+| Definitions | `++` for values, `+$` for molds; no `=/` | Decided | Yes |
29+| Unions | No `$?`: a `+$` with its cases on the lines below is a union, so every union written in Jibb has a name; one case is just that mold; a mold that isn't a union counts as a union of one case for tags and `\|=%tag`; a generic's `\|$` comes right after the `+$`'s name; tags anywhere; constructor heads and case disjointness compare literal noun values regardless of spelling, so `%$`, `%.y` and `~` are equal and overlapping cases are errors; cases differ as nouns, with `?` treated as the two atoms `%.y` and `%.n`, disjoint from cells and overlapping constants 0 and 1, and `!!` or any cell with an empty position disjoint from every case; a tag literal or `~` waits for its union, and an unresolved one is an error | Decided 2026-10-31 | No |
30+| Printed unnamed unions | Print the cases separated by spaces, as `%approve %deny`; this is print-only, not Jibb syntax | Decided 2026-10-30 | Check |
31+| Printed type constraints | Print an atom constraint as `$-([A A] A) where A is an atom`, an arithmetic atom constraint as `where A is an atom other than ?`, and a gate-free constraint as `$-([A A] ?) where A contains no gates`; separate multiple clauses with commas, as `where A is an atom, B contains no gates` | Decided 2026-10-31 | No |
32+| Branching | `?-` only, loobeans included; exhaustive, with explicit catch-alls; covered arms are errors; failures say `!!` | Decided 2026-10-29 | Yes |
33+| Equality and negation | The gates `eq` and `not`, with Hoon's bitwise `not` exposed as `not.bit`; `eq`'s arguments and map and set keys contain no gates, even nested; the checker infers and generalizes that constraint; union matching never inspects a gate to distinguish cases | Decided 2026-10-30 | Check |
34+| Special rules | No built-ins; type-directed rules are welcome, each listed in the Grammar tab | Decided 2026-10-29 | Yes |
35+| Inference | Hindley–Milner with aura variables; `@` is any atom, a specific atom fits `@` and a more specific aura fits an ancestor in its Hoon aura family, but each reverse needs a check, and repeated atom-constrained capitals give the same type; a number takes `@ud` only where its `++` isn't generic over its aura; distinct specific auras remain distinct; faces are part of record types, and an unnamed position can take a face but two different faces don't unify; principal types | Decided 2026-10-30 | Check |
36+| Effects | The library unions `cmd` and `sub`; `raw-poke`, `ask` and `qath` are transparent types defined in the internal prelude and re-exported normally; derived gates and `pure` also construct requests; islands read agents only by watching; replies get full state, and diffs take a fold; timers carry the time; `%who` gives the owner's `@p`; nacks reach replies as text | Decided 2026-11-01 | No |
37+| Poke representation | The source-backed private internal prelude module defines `raw-poke`, and the public prelude re-exports it as an ordinary transparent type. A store's local `poke` action remains an ordinary mold; derived helpers produce the runtime envelope | Decided 2026-11-01 | No |
38+| Agent APIs | `/ui/api/<agent>.jibb` with `+$ poke` and `+$ paths`, over the agent's mark types; a case is a name, a path and a type, with `(facts full diff …)` for diffs, told apart by mark; an optional scry path, for pages; an island may watch a request only when the checker proves it is watchable, so a separate scry path or unknown watchability is an error; typed segments by aura | Decided 2026-10-31 | No |
39+| Mark names | Any name: `/%` names types after marks, and constructors poke with their type's mark; no alias marks | Decided 2026-10-26 | Yes |
40+| Derived gates | API files and stores give a generic `poke` command helper taking an action and reply, and a checked request per path or store state; clashing names are errors, including a derived name that clashes with an import face | Decided 2026-11-01 | No |
41+| Hoon types | A fixed translation table; `map`, `set`, `qeu`, `jar`, `jug` by name; `mop` as `(mop K V)`, read with `on`; imported `$%`, `$?` and `$^` cases must differ as nouns, and records with duplicate field names are errors where used; unused molds skipped | Decided 2026-10-30 | Check |
42+| Record fields | Duplicate field names in a Jibb-written record are an error, as they are in an imported Hoon record | Decided 2026-10-31 | No |
43+| Record projection | The explicit type-directed operation `proj` takes a record and uses its expected result type to select its fields; no projection is inserted automatically. `proj` is reserved and cannot be defined or imported under that name. The result has exactly the fields declared by its type | Decided 2026-10-31 | No |
44+| Layout | Indentation; juxtaposed calls; a bracket open at line end takes one item per line, with no closer | Decided | Yes |
45+| Elements | Ordinary gates; containers take attribute lists; `stack` switches at `wide`; `el` adds attributes and wins; headings 1 to 6; `form` sends on Enter, the innermost when nested; `image` from an application path, sized from the file, or a sized URL; no focus control for now | Decided 2026-10-29 | Yes |
46+| Long calls | One argument per line inside parentheses | Decided | Yes |
47+| Inline gates | Hoon's wide form; the mold may be inferred; a bare sample name binds; `\|=%got` is a case's constructor, typed by the gate expected; a bare tag is always a value | Decided 2026-10-29 | Yes |
48+| Empty mold | `!!`, with no values; the expression has any type; pages are `(element !!)`, which keeps islands out of islands | Decided 2026-10-29 | Yes |
49+| Noun mold | `*` is the noun type, not a type variable; use a capital for a generic type; a value of a more specific noun type can be used where `*` is expected | Decided 2026-10-30 | Check |
50+| Type variables | Capitals, generalized per `++`; a capital in a local `++` shares the enclosing `++`'s variable of that name if the enclosing `++` also uses it; otherwise it is introduced and generalized locally; a different type takes a different capital; a body cannot force distinct capitals to be equal, so a shared type uses the same capital; one used where an atom is required gains an inferred atom constraint, and cannot be fixed to a more specific type in its body | Decided 2026-10-30 | Check |
51+| Partial type annotations | `_` may appear wherever a mold may appear and marks that part of the type for inference; a hole inferred as a named type variable is resolved; an unconstrained hole is an error, and a named mold or value definition must determine its own holes without constraints from later uses | Decided 2026-10-31 | No |
52+| Loobean mold | `?`, switched with `?-` | Decided 2026-10-26 | Yes |
53+| Defaults | None | Decided | Yes |
54+| Modules | Records, not cores | Decided | Yes |
55+| Kinds | The type of `main`: `(element !!)`, `(page R D)`, `(program D X M)` or `(store S)`; other names by file kind, in the Grammar tab | Decided 2026-10-29 | Yes |
56+| Type identity | Recursive molds by name and module | Decided 2026-10-29 | Yes |
57+| Binding patterns | In `?-` arms; the last position binds the rest | Decided 2026-10-29 | Yes |
58+| Text | Strings are written only as `"…"` and are always cords; tapes come from `trip`; `{…}` prints by aura, a bare `@` as `@ud`, and an atom whose aura its `++` is generic over is an error; `print-date` prints Urbit-style to the minute in the theme's zone, from jibb-dev's zone table; numbers keep Hoon's form | Decided 2026-10-30 | Check |
59+| Auras | Specific auras stay distinct; `@` is any atom, a more specific aura fits an ancestor in its Hoon aura family one way, with the reverse requiring a check, and shared atom-constrained type variables preserve the same aura | Decided 2026-10-30 | Check |
60+| Loobean arithmetic | Arithmetic rejects loobean operands; comparison may accept them and returns `?` | Decided 2026-10-31 | No |
61+| Crashes | As in Hoon; an island keeps its model and shows the standard notice; a failing page, or one rendering a control outside an island, gets Jibb's error page; no render limit, so an endless render stalls the ship | Decided 2026-10-29 | Yes |
62+| Refinement types | None | Decided | Yes |
63+| Imports | `/-`, `/%` (a mark's type, with no face) and `/=`; no `/+`; cycles are errors | Decided 2026-10-29 | Yes |
64+| Hoon marks for Jibb types | None: wire types are the agent's marks, and Jibb's own types never cross | Decided 2026-10-26 | Yes |
65+| Core language | A small untyped core language between the checker and both backends: Nock's operations on nouns plus a lambda calculus with names; one sample per call; s-expressions as its text form; a reference interpreter in Hoon; three rules in its tab still proposed | Decided | Yes |
66+| Stages | By kind: pages without data at commit, with data in the host, islands and stores in the browser; never inferred | Decided 2026-10-29 | Yes |
67+| Page loading | `load` maps route parameters, `~` for none, to one `ask` or `pure`; pages render per request from a fresh scry of the path, or of its case's scry path; nothing is watched or kept | Decided 2026-10-29 | Yes |
68+| Compile targets | Nock on the ship, JavaScript in the browser | Decided | Yes |
69+| Optimizer | Basic lowering; holes later | Decided 2026-10-29 | Yes |
70+| Island `update` | In the browser; returns the model and a list of commands, which the runtime processes one at a time in list order | Decided 2026-11-02 | No |
71+| Island `init` | Takes the page's data, returns the model | Decided 2026-10-29 | Yes |
72+| Island rendering | `view` re-runs on model changes; a keyed diff patches the DOM; holes later | Decided 2026-10-29 | Yes |
73+| Data crossing to the browser | No gates in island data or models | Decided 2026-10-29 | Yes |
74+| Inputs | A message per input event, none mid-composition; controls reset to the latest view after every event; fields read-only until the island starts | Decided 2026-10-29 | Yes |
75+| Transactions | None; one poke per command | Decided | Yes |
76+| Reloads | Restart from the model the page is served with | Decided 2026-10-29 | Yes |
77+| Shared state | Stores: browser agents written like API files, with `state`, a local `+$ poke` action mold and `(store init update)`; derived gates provide the generic `poke` command helper and state requests; one per page | Decided 2026-11-01 | No |
78+| Store builder | `+$ store |$ [S] [init=S update=*]`, with `++ store |= [init=S update=$-([A S] S)] ^- (store S) [init update]`: the builder checks action `A`, while `main` exposes only state `S`; the store kind check verifies `A` against the poke declaration | Decided 2026-11-01 | No |
79+| Subscriptions | By agent and path, shared per page; the first fact is full state, so no paths that need a scry path | Decided 2026-10-29 | Yes |
80+| Apps | One island under a catch-all route, given the path by `pure`; `%url` delivers the path on every change; in-section links act as `go`; focus moves to the first heading | Decided 2026-10-29 | Yes |
81+| Layout vocabulary | Jibb's elements and theme tokens; the stylesheet comes from the theme alone; chars and fill are inline; `[%fill n]` below 1 counts as 1 | Decided 2026-10-29 | Yes |
82+| Responsive layout | `stack` switches at the theme's `wide` | Decided 2026-10-29 | Yes |
83+| Theme | A prelude mold with every token required: spaces, five tones with `normal` and `background`, language, zone, `wide`, and an optional static font; optional values such as dark tones use explicit backtick unit syntax; 4.5:1 contrast enforced | Decided 2026-11-01 | No |
84+| Dark mode | Hand-written dark tones under `dark`, used when the reader prefers dark | Decided 2026-10-27 | Yes |
85+| Links | All text escaped; in-app links are application paths, as `%/blog/(slug)`, with no query or fragment, checked at compile time against routes and static files; paths and unchecked `https`, `mailto` and `tel` URLs and root-relative cords such as `"/apps/groups"` have separate declarations; `link-unsafe`, `image-unsafe` and `go-unsafe` are the unchecked forms; both navigation declarations produce `[%go url=@t]`, with `go` converting the path to a cord including the app's base path; other cords render as text; a CSP on every page | Decided 2026-10-30 | Check |
86+| Data layer | Hoon's nouns: units, treaps, loobeans | Decided | Yes |
87+| Prelude | Hoon's standard library regrouped: all names from the listed sections except explicitly excluded groups, including all of 3g, with Hoon's `tone` exposed as `tone.hoon` and Hoon's 1c `step` as `step.hoon`; arithmetic over aura variables, units, lists, maps, sets, queues, ordered maps, function helpers, text, atom printing, a zoned date printer, time and data molds; folds take a start; jetted functions have working Jibb implementations, whose shapes the compiler recognizes to use the Hoon versions, and may take gates; private helpers and low-level primitives live in a separate internal module imported without exposing them, with public foundational gates implemented in Jibb on those primitives; `clap` takes two units of the same type and a combining gate over that type; no signed or float gates, or parser gates outside 3g except `slav` and `slaw`; signed or float auras are errors | Decided 2026-10-30 | Check |
88+| `like` | The `(like A)` mold remains available; the value gate `like` maps the product of an existing `(like A)` with a gate `$-(A B)`, preserving the position and remaining input, and returns `(like B)` | Decided 2026-10-31 | No |
89+| Wire format | Noun channels; Jibb's own noun codec in the browser | Decided 2026-10-29 | Yes |
90+| Hosting | One thin host agent on `%jibb` binds, caches and serves every Jibb desk; each desk vendors jibb-dev, names its base path in docket's `site+`, and builds and renders with its own copy through fixed entry points; install `%jibb` first; app agents stay plain Hoon; pokes only from the ship | Decided 2026-10-29 | Yes |
91+| Private pages | Served by the host per request and never cached; non-owners go to the login page | Decided 2026-10-29 | Yes |
92+| Cache | Eyre holds only the hashed assets, all public; the host serves every page; a desk's entries are cleared on suspend or uninstall, and all by `-jibb!clear` | Decided 2026-10-29 | Yes |
93+| Static files | Under `/ui/static/`, committed, at hashed immutable URLs; referenced by application path, so a missing file fails to compile, and images are sized from the file; no large media, since Clay keeps every version and the cache ignores `Range` | Decided 2026-10-29 | Yes |
94+| Routing | A literal beats a parameter, which beats a catch-all; parameters bind to `load`'s sample by name; `@ta` and `@tas` raw, other auras as Hoon prints them | Decided 2026-10-29 | Yes |
95+| Linking | Folder convention; the mark stores text; the host runs each desk's own compiler; modules cached by their own and their imports' hashes | Decided 2026-10-29 | Yes |
96+| Access | Every page is private to the owner; public pages come in a later version | Decided 2026-10-29 | Yes |
97+| Tests | `test-…` arms under `/ui/tests`, run by `-jibb!test`; the JavaScript side and differential tests under Node from jibb-dev | Decided 2026-10-29 | Yes |
98+| Editor support | Tree-sitter grammar | Decided | Yes |
99+| Formatter | One canonical layout | Decided | Yes |
100+| Name | Jibb | Decided | Yes |
101+
102+## Settled milestone 2 questions
103+
104+Kept only in this copy. These were open questions in [open-questions.md](../open-questions.md) until @iko settled them; the rows above record each choice, and the questions keep their numbers there, so references to them stay valid. Questions 3 and 32 are still open there.
105+
106+On 2026-10-30, @iko adopted gate-free `eq` arguments and map and set keys, treating gates as opaque when distinguishing union cases, and rejecting a non-gate value that depends on itself even through a gate. The checker infers and generalizes the gate-free constraint. @iko also said jetted prelude functions may take gates.
107+
108+**1. Settled: how the prelude identifies jetted functions.** On 2026-10-30, @iko said the prelude functions have working Jibb implementations, and the compiler recognizes their shapes and uses the Hoon versions so jets can fire.
109+
110+**2. Settled: how the prelude keeps helpers private.** On 2026-10-30, @iko chose a separate internal prelude module imported by the prelude, without exposing the imported helpers.
111+
112+**4. Settled: a capital in a local `++`.** On 2026-10-30, @iko said it shares the enclosing `++`'s variable of that name if the enclosing `++` also uses it; otherwise the local `++` introduces and generalizes its own variable. For example, `++ inner |= y=A y` shares `A` with an enclosing gate whose sample is `x=A`, but generalizes its own `A` if the enclosing `++` does not use `A`. A different type uses a different capital. The Grammar and Decisions record this alongside the earlier aura rules.
113+
114+**5. Settled: cells of no items or one.** On 2026-10-30, @iko said a single-item cell is the value and `[]` is an error. The theme's `dark=[tones=[…]]`, a record of one field, must still check.
115+
116+**6. Settled: a change with no items.** On 2026-10-30, @iko said `m()` is an error. The parser still accepts it; the checker needs to reject it and add a golden case.
117+
118+**7. Settled: the doc's blocks that aren't whole modules.** On 2026-10-30, @iko agreed to check each in its intended context: the `cmd` and `sub` definitions as prelude source, the Core language tab's `update` inside the todo island, and the Grammar's imports example against fixture files.
119+
120+**8. Settled: tuples and records.** On 2026-10-30, @iko agreed that an unnamed position can unify with a faced position and take its face; two different explicit faces still conflict. The Grammar and Decisions record this rule.
121+
122+**9. Settled: values where `*` is expected.** On 2026-10-30, @iko said `*` is the noun type, not a type variable; generic positions use proper type variables. A value already known to be `@ud` can be passed where `*` is expected. The `each` and `table` signatures use `key=K`.
123+
124+**10. Settled: navigation commands.** On 2026-10-30, @iko chose separate declarations for application paths and unchecked cords, with `link-unsafe`, `image-unsafe` and `go-unsafe` for the unchecked forms. `image-unsafe` takes a sized URL record. Both navigation declarations produce `[%go url=@t]`; `go` converts the application path to a cord including the app's base path.
125+
126+**11. Settled: stores and derived gates.** On 2026-11-01, @iko said a store's local `+$ poke` is an ordinary action mold and the runtime envelope is `raw-poke`; a derived name clashes with an import face; and an island watching a request whose case has a separate `scry=` path has a type error. The todo API's request is renamed `todo-by-id` so it does not clash with `/- todo`. The checker must account for the fact that a store's kind is determined by the type of `main`.
127+
128+**12. Settled: how to print a union without a name.** On 2026-10-30, @iko said to print its cases separated by spaces, as `%approve %deny`. This is print-only, not Jibb syntax.
129+
130+**13. Settled: how to print type constraints.** On 2026-10-30, @iko chose `$-([A A] A) where A is an atom` for an atom constraint and `$-([A A] ?) where A contains no gates` for a gate-free constraint. Multiple clauses are comma-separated, as `where A is an atom, B contains no gates`.
131+
132+**14. Settled: how the prelude implements foundational operations.** On 2026-10-30, @iko chose private low-level primitives in the internal prelude module, with the public foundational gates implemented in Jibb on top of them.
133+
134+**15. Settled: unrestricted atoms and shared auras.** On 2026-10-30, @iko said `@` means any atom, independently at each occurrence, so Hoon `dime` and `pint` keep their bare-`@` fields. A specific atom such as `@ud` fits where `@` is expected; an `@` value needs a check to fit `@ud`. Shared atom types use one capital, with the atom constraint inferred from its body, as for `add` taking `[A A]` and returning `A`.
135+
136+**16. Settled: loobeans in union disjointness.** On 2026-10-30, @iko said `?` counts as its two atoms, `%.y` and `%.n`: it is disjoint from any cell and overlaps the constants 0 and 1.
137+
138+**17. Settled: empty cases in union disjointness.** On 2026-10-30, @iko said `!!` is disjoint from every case. A cell containing an empty position at any depth is itself empty and is also disjoint from every case.
139+
140+**18. Settled: the value gate `like`.** On 2026-10-31, @iko chose a gate `(like convert result)` that maps the product of an existing `(like A)` result with `convert=$-(A B)`, yielding `(like B)` while preserving its position and remaining input. An absent result stays absent. The `(like A)` mold remains available in the separate mold namespace. Hoon's wet `+like` instead builds a gate that constructs a result from an input noun; the chosen Jibb value gate is an adaptation of that behavior.
141+
142+**19. Settled: Hoon aura families and `step.hoon`.** On 2026-10-30, @iko chose `step.hoon` for Hoon 1c `step`, avoiding a clash with the Grammar example's `step`, and chose one-way widening across Hoon aura families: for example, `@ud` and `@ux` fit `@u`, and `@tD` fits `@t`. The reverse needs a check. The `step.hoon` group representation is not implemented yet.
143+
144+**20. Settled: the type of `clap`.** On 2026-10-30, @iko chose one shared value type for both units and the combining gate. If either unit is absent, `clap` returns the other; if both are present, it applies the gate to their values and wraps the result.
145+
146+**21. Settled: duplicate faces in imported Hoon records.** On 2026-10-30, @iko chose to reject an imported Hoon record with duplicate field names where its type is used. Hoon permits `[a=@ud a=@t]` and picks the first `a`; Jibb rejects it.
147+
148+**22. Settled: overlapping imported `$%` and `$?` cases.** On 2026-10-30, @iko confirmed that the general union disjointness rule rejects imported `$%` and `$?` cases that overlap as nouns where the type is used, as it does for `$^`. The importer rejects recognizable overlaps and fails closed when it cannot verify them.
149+
150+**23. Settled: converging explicit capitals.** On 2026-10-30, @iko chose that a body cannot force two separately written capitals to be equal. For `++ repeated |= x=(choice A A) x`, `++ f |= x=(choice A B) (repeated x)` is an error; use `A` in both positions when the type must be shared. This also applies across local captures and within generic mold applications.
151+
152+**24. Settled: how the internal prelude provides `raw-poke`.** On 2026-11-01, @iko chose to define `raw-poke` in the source-backed private internal prelude module and re-export it through the public prelude as an ordinary transparent type. Ordinary modules can construct and inspect its values, while derived API/store `poke` helpers return commands. This settles `raw-poke`; it does not decide the representation of `ask` or `qath`.
153+
154+**25. Settled: how the prelude provides `ask` and `qath`.** On 2026-10-31, @iko chose ordinary transparent types defined in the internal prelude and re-exported normally, as for `raw-poke`. Callers may construct and inspect their values.
155+
156+**26. Settled: the `step` example's `at` binder.** On 2026-10-31, @iko chose to rename the `describe` pattern binder to `sent-at`, keeping Hoon's `at` in the prelude and the no-shadowing rule.
157+
158+**27. Settled: duplicate fields in a Jibb-written record.** On 2026-10-31, @iko chose to reject duplicate field names, as for imported Hoon records.
159+
160+**28. Settled: arithmetic on loobeans.** On 2026-10-31, @iko chose to reject loobean operands for arithmetic. Comparison may still accept loobeans and returns `?`. The checker needs to retain this constraint through inference, generalization and instantiation before it exports `add` or `dec`.
161+
162+**29. Settled: printing the arithmetic atom constraint.** On 2026-10-31, @iko chose `where A is an atom other than ?` for a generic arithmetic type whose atom variable excludes loobeans.
163+
164+**30. Settled: a hole inferred as a generic variable.** On 2026-10-31, @iko said a hole resolved to an explicitly written type variable counts as inferred: in `++ id |= x=A ^- _ x`, the result hole is `A`. Named molds must determine their own holes without constraints from later uses; an unconstrained hole is an error.
165+
166+**31. Settled: uses of a value with a hole.** On 2026-10-31, @iko said a value definition must determine its own holes; another definition's use cannot fix an otherwise unresolved hole. For example, `++ id |= x=_ x` remains an error even if a later definition calls `id` with a cord.
167+
168+**33. Settled: watching a request with unknown provenance.** On 2026-10-31, @iko said an island may watch a request only if the checker proves it watchable at compile time. An unknown request, including one built or passed through a gate without sufficient evidence, is rejected rather than deferred to a runtime check.
169+
170+**34. Settled: constructors and equal noun literals.** On 2026-10-31, @iko said expressions with the same runtime representation count as equal, and cases that cannot be distinguished at runtime are rejected at compile time. Thus `|=%$` matches a case headed by `%$`, `%.y` or `~`: each is the noun 0. Cases with equal heads and overlapping payloads cannot coexist in a union.
171+
172+Review question 25, when to build `eq` and the gate-free constraint, is settled: @iko's commit 0858191 adds `eq` and infers the constraint.
99173
100174## Checked against the kernel
101175
docs/status.md+11−6
@@ -51,13 +51,19 @@ A separate source-backed analysis can prove one named mold gate-free, report a d
5151
5252The partial checker can also match a directly named, checked root gate against a generic gate sample in a direct, unshadowed source-backed prelude call. It uses the written two-slot sample layouts to preserve nested record faces, then requires the complete call samples to be closed and tag-free and repeats the fit under the final substitution. The proof falls back to existing inference for unavailable or ambiguous source layouts, local or dynamic gates, aliases, recursive placeholders and open generic caller types. It preserves written-capital checks and projection evidence; it does not add `program`, check islands or prove request watchability. Prepared prelude source and interface remain a trusted pair.
5353
54−A narrow full-module path now checks direct four-wing `(program init update view subs)` definitions named `main`. It requires the canonical prepared `program` value and mold, reuses ordinary source-backed program fitting, and publishes only after all ordinary module and request-graph checks. The inferred `main` must be closed and invariantly match the instantiated `program` mold. Initializer data and model must be closed and gate-free with `%yes` verdicts inside a shared 256-node budget. `subs` may syntactically return null through transparent forms, or one direct imported request watch after the request graph merges. The latter is only an unfaced two-item `[%watch (case.face |=%callback)]` singleton: the imported member must have the exact plain derived-request scheme, a unique merged request must match the API path and both case names and occur in the interface's own graph, the API source must be identical, and scry, diffs and parameters must be absent. Pure or hand-built values, helpers, aliases, re-exports, typed paths, folds, multiple watches and unknown or ambiguous evidence remain rejected. Checked interfaces retain source evidence and support ordinary downstream imports; no program execution or runtime watching is claimed. A transactional extension can recover a direct initializer whose transparent tuple body ends in null when update, view and subs are already resolved. It derives the expected gate through the ordinary positional program fit with fresh IDs and stable replay, then re-infers the actual initializer and `main` under all ordinary finalization and kind checks. Non-main libraries, aliases, nonempty or simultaneously unresolved subscriptions, and unrelated pending tags remain rejected.
54+A narrow full-module path now checks direct four-wing `(program init update view subs)` definitions named `main`. It requires the canonical prepared `program` value and mold, reuses ordinary source-backed program fitting, and publishes only after all ordinary module and request-graph checks. The inferred `main` must be closed and invariantly match the instantiated `program` mold. Initializer data and model must be closed and gate-free with `%yes` verdicts inside a shared 256-node budget. `subs` may syntactically return null through transparent forms, or one direct imported request watch after the request graph merges. The latter is only an unfaced two-item `[%watch (case.face |=%callback)]` singleton: the imported member must have the exact plain derived-request scheme, a unique merged request must match the API path and both case names and occur in the interface's own graph, the API source must be identical, and scry, diffs and parameters must be absent. Pure or hand-built values, helpers, aliases, re-exports, typed paths, folds, multiple watches and unknown or ambiguous evidence remain rejected. Checked interfaces retain source evidence and support ordinary downstream imports; no program execution or runtime watching is claimed. A transactional extension can recover a direct initializer when update, view and subs are already resolved: it infers the initializer against the closed model that update's two-item sample, or else main's own program fit, establishes, then re-infers `main` under all ordinary finalization and kind checks. Any body and closed sample of a direct gate check this way; a body that context inference cannot take is inferred ordinarily as a whole gate. An update sample written as one faced mold, a pun, a named mold or generic in the model, and generic view and subs samples, also check. Non-main libraries, aliased mains or initializers, simultaneously unresolved subscriptions and unrelated pending tags remain rejected.
5555
5656Static and direct data-page `main` checking now completes the unchanged about page, blog index and todo index through the real Hoon readers. Static generic element mains specialize to closed canonical `(element !!)`; direct pages require a closed invariant `page` type and a direct plain derived-request load. Page loads reuse the strict source/member/evidence identity checks used by program watches, rejecting aliases, indirect/hand-built/pure/unknown requests, typed paths, diffs and store paths. The shared eval and ship fixture asserts exact main types and structural downstream imports. Rendering, runtime loading and request execution remain unimplemented.
5757
5858The prelude now has the approved `store` mold and action-checking builder. The runtime envelope is the transparent `raw-poke`; a store's local `+$ poke` remains its ordinary action mold throughout inference. Direct two-wing store mains require closed state and action molds, exact init/state and update relations, and no gate-free-state restriction. Stores export those molds plus derived generic `poke` command and state-request gates. The command helper checks the canonical `raw-poke`, `cmd` and `unit` shapes, takes an action and reply, and returns `(cmd M)` directly. Separate source-bound store certificates prove only the actual imported state member watchable; API evidence checks and page-load rejection remain intact. The unchanged cart and basket pass detailed and legacy checking with exact mains, derived schemes and structural imports, including non-keyed view and null-sample initializer recovery. Multi-action declarations, lowering and runtime execution remain unsupported.
5959
60−The component-local program recovery now covers update, subscriptions, one direct keyed `each`/`turn` mapper and its view, then the existing initializer and ordinary `main` path. Each recovered scheme is closed and freshly allocated; a keyed source screen avoids repeated doomed ordinary attempts without skipping final `main`, and non-gate views decline safely. Canonical `element` recursion and exact singleton-case list fits are narrowly guarded, with successful ordinary fits taking precedence. The byte-identical unchanged todo now passes both detailed and legacy full-module checks with an exact closed `main` type and structural downstream import. Wrong models, messages, results, mappers, keys, aliases, non-gate views and watches fail closed. This is static checking only: no Jibb execution or runtime watching is claimed.
60+Keyed programs no longer skip ordinary component inference: an annotated initializer that checks normally is accepted, with recovery reserved for definitions that still need it. The todo fixture's initializer is a gate cast to its full type, which only ordinary inference accepts, so it fails if the skip returns; it checks through detailed and legacy inference, including on the ship.
61+
62+Imported Hoon `(unit T)` now converts to the validated canonical prelude `unit` when that template is supplied, instead of remaining an incompatible collection. Conversion recurses through imported unions and collections, and API path/diff/poke analysis uses the same prepared reader. The fixtures prove identity, `fall`, `need`, `(unit @t)` casts, union- and list-nested matching, canonical unit-typed API full/diff marks and a canonical direct-poke export while preserving the no-prelude compatibility report and wrong-collection rejection. Nested public re-export labels also remain `ask`, `qath` and `raw-poke` instead of leaking their private `.internal` suffixes into printed types.
63+
64+Uncontextual `?-` result joining now uses one rule for loobean, unit, list and known-union branches: unify and retain substitutions first, then widen only to an explicitly present parent aura or `@`. Multi-arm folds select an explicitly present parent independently of arm order and bind variables to that final parent; deferred boolean branches retain their pending-literal fallback, and sibling auras remain distinct without a present common parent. Valid recursive local branches that were rejected by the old per-kind screens now infer, while pending tags and distinct type variables retain definite diagnostics.
65+
66+The component-local program recovery now covers update, subscriptions, one direct keyed `each`/`turn` mapper and its view, then the existing initializer and ordinary `main` path. Each recovered scheme is closed and freshly allocated; non-gate views decline safely. Canonical `element` recursion and exact singleton-case list fits are narrowly guarded, with successful ordinary fits taking precedence. The byte-identical unchanged todo now passes both detailed and legacy full-module checks with an exact closed `main` type and structural downstream import. Wrong models, messages, results, mappers, keys, aliases, non-gate views and watches fail closed. This is static checking only: no Jibb execution or runtime watching is claimed.
6167
6268The API path analyzer can retain its source, complete prepared prelude, reader results and resolved dependencies as evidence, and classify a unique declaration as watchable, not watchable or unknown. This remains declaration evidence rather than proof about an arbitrary request value. The narrow direct-program check above composes it with final value syntax, resolved imports and merged evidence for one plain request. Prepared artifacts and reader results remain trusted host inputs.
6369
@@ -113,11 +119,11 @@ What the plan asks for, and where it is:
113119
114120Besides the plan's list:
115121
116−- 660 golden cases: 440 that parse and 220 that fail, each failure at a stated line and column. One failing case has an unclear expectation (corpus question 3). The newer type-output cases exercise only the partial inference fragment. Each case's `about.txt` quotes the doc's words it tests.
117−- The 660-case corpus passed under `urbit eval` in 108.0 s while other checks were running. The fake ship passed all 717 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 111.2 s and the ship's `-test` run took 316.7 s. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
122+- 689 golden cases: 460 that parse and 229 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.
123+- The 689-case corpus passed under `urbit eval` in 107.0 s while other checks were running. The fake ship passed all 746 tests, including the source-overlap, structural-overlap, generic-union source and alias-overlap, full-module overlap, deferred-context, generic-recursion, generic-construction, generic-pattern, deferred-inference, empty-mold and cell-branch fixtures, importer, importer/checker and mark/checker bridges, module scope, unification, hole, qath, ask, default-wrapper importer, projection, arithmetic, generic-alias, positional-face, API-evidence, request, closed-gate, todo API, constructor, sub, nested-union, gate-free and direct-gate guards and the unchanged todo report. Desk sync took 111.2 s and the ship's `-test` run took 316.7 s. The importer golden compares 221 projections; `tools/clay-fixtures` builds the example Hoon fixtures through Clay, checks a recursive Ford import's origin, and passes Clay-built types through the Clay-built importer and partial checker.
118124- `tools/testdata/selftest` (22 checks), `tools/testdata/ship-selftest` and `tools/testdata/clay-fixtures-selftest` test the tools themselves; the last checks temporary Clay fixture cleanup and signal handling without a ship.
119125- 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.
120−- 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).
126+- Speed: starting `urbit eval` and building the library takes about 27 s with the dev tools' `!:`, and 24 s without it (`tools/hoon --no-debug`). 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).
121127
122128### History
123129
@@ -286,7 +292,6 @@ tools/hoon check-spans-test # prints <<>> when the span checker works
286292tools/testdata/selftest # the tools themselves
287293tools/doc-blocks docs/spec # the doc's examples are golden cases
288294tools/ship start
289−tools/ship gen-tests --check # tests/lib/jibb.hoon is up to date
290295tools/ship test # the same 660 cases as -test arms on the ship
291296tools/testdata/ship-selftest
292297tools/testdata/clay-fixtures-selftest # scratch fixture cleanup without a ship
flake.locknew file+41
@@ -0,0 +1,41 @@
1+{
2+ "nodes": {
3+ "nixpkgs": {
4+ "locked": {
5+ "lastModified": 1793540411,
6+ "narHash": "sha256-us2GRWGXbOQpN1blyJGvmdx+g4bv9GoFYq5iiOHRiZ8=",
7+ "rev": "0bb2eedc20e4739f29e8045034f2828ad7054f8f",
8+ "type": "tarball",
9+ "url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1106360.0bb2eedc20e4/nixexprs.tar.xz"
10+ },
11+ "original": {
12+ "type": "tarball",
13+ "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
14+ }
15+ },
16+ "root": {
17+ "inputs": {
18+ "nixpkgs": "nixpkgs",
19+ "urbit-tools": "urbit-tools"
20+ }
21+ },
22+ "urbit-tools": {
23+ "flake": false,
24+ "locked": {
25+ "lastModified": 1750452841,
26+ "narHash": "sha256-2IoU8tGR92g8SaoDZdMxbzh2VLr/63XUCbrPS3nestg=",
27+ "ref": "refs/heads/master",
28+ "rev": "c9c91ce142cfe85edbed320138f21c7213aceaab",
29+ "revCount": 19,
30+ "type": "git",
31+ "url": "https://github.com/urbit/tools"
32+ },
33+ "original": {
34+ "type": "git",
35+ "url": "https://github.com/urbit/tools"
36+ }
37+ }
38+ },
39+ "root": "root",
40+ "version": 7
41+}
flake.nixnew file+192
@@ -0,0 +1,192 @@
1+{
2+ description = "Jibb, a UI language for Urbit: its desks, and the repo's checks";
3+
4+ inputs = {
5+ # A channel tarball rather than github:NixOS/nixpkgs, so the flake
6+ # also fetches where GitHub's archive downloads are blocked, as in a
7+ # Claude cloud container. flake.lock pins the exact release.
8+ # nixos-unstable has vere 4.6, which the tools were written against.
9+ nixpkgs.url = "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz";
10+ # click, which tools/ship formats its requests to the ship with.
11+ urbit-tools = {
12+ url = "git+https://github.com/urbit/tools";
13+ flake = false;
14+ };
15+ };
16+
17+ outputs = { self, nixpkgs, urbit-tools }:
18+ let
19+ # The platforms nixpkgs builds vere for.
20+ systems = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
21+ forSystems = f: nixpkgs.lib.genAttrs systems
22+ (system: f nixpkgs.legacyPackages.${system});
23+ inherit (nixpkgs) lib;
24+ fs = lib.fileset;
25+
26+ # What the desks are assembled from, and the tools that assemble
27+ # them and compile their libraries.
28+ deskFiles = fs.unions [
29+ ./jibb
30+ ./jibb-dev
31+ ./my-app
32+ ./vendor
33+ ./tests
34+ ./tools/ship
35+ ./tools/golden_case.py
36+ ./tools/hoon
37+ ./tools/urbit_eval.py
38+ ./tools/noun.py
39+ ];
40+ # What the checks read: the desks' files, the tools and the doc's
41+ # tabs, but not the other docs, so editing those reruns nothing.
42+ checkFiles = fs.unions [ deskFiles ./tools ./docs/spec ];
43+ source = fileset: fs.toSource { root = ./.; inherit fileset; };
44+
45+ perSystem = pkgs:
46+ let
47+ inherit (pkgs) python3 urbit;
48+ isLinux = pkgs.stdenv.hostPlatform.isLinux;
49+
50+ click = pkgs.stdenvNoCC.mkDerivation {
51+ pname = "click";
52+ version = "0-unstable-${builtins.substring 0 8 urbit-tools.lastModifiedDate}";
53+ src = urbit-tools;
54+ nativeBuildInputs = [ pkgs.makeWrapper ];
55+ buildInputs = [ pkgs.bash ];
56+ installPhase = ''
57+ runHook preInstall
58+ # click runs click-format from its own folder.
59+ install -Dm755 -t $out/libexec/click \
60+ pkg/click/click pkg/click/click-format
61+ makeWrapper $out/libexec/click/click $out/bin/click \
62+ --prefix PATH : ${lib.makeBinPath [ pkgs.coreutils pkgs.gnused ]} \
63+ --prefix PATH : ${pkgs.netcat}/bin
64+ runHook postInstall
65+ '';
66+ meta = {
67+ description = "Thin client for a running Urbit ship's conn.sock";
68+ homepage = "https://github.com/urbit/tools";
69+ license = lib.licenses.mit;
70+ mainProgram = "click";
71+ };
72+ };
73+
74+ # The brass pill from the urbit/urbit commit vendor/ is copied
75+ # from (vendor/SOURCES.txt). GitHub serves it from Git LFS.
76+ pill = pkgs.fetchurl {
77+ name = "brass.pill";
78+ url = "https://media.githubusercontent.com/media/urbit/urbit/50c7f5239610fc72263df7aa99b4d171cfe9d408/bin/brass.pill";
79+ hash = "sha256-tLq9FOnxrL20IbPDHCFe5jetZpG344K5nG/YmR5iNwg=";
80+ };
81+
82+ # A freshly booted fake ~zod: the pier itself. Booting takes
83+ # about half a minute; the ship checks start a copy of it.
84+ fakezod = pkgs.runCommand "fakezod" {
85+ nativeBuildInputs = [ urbit ];
86+ } ''
87+ urbit -F zod -B ${pill} -t -x -c zod
88+ test -d zod/.urb/log
89+ mv zod $out
90+ '';
91+
92+ # The desks, as tools/ship assembles them for the ship:
93+ # $out/my-app, $out/jibb and $out/jibb-dev, the test desk. The
94+ # check phase compiles the two libraries under urbit eval.
95+ desks = pkgs.stdenvNoCC.mkDerivation {
96+ # No version in the name, so a commit that changes no desk
97+ # file reuses the last build.
98+ name = "jibb-desks";
99+ src = source deskFiles;
100+ nativeBuildInputs = [ python3 ];
101+ nativeCheckInputs = [ urbit ];
102+ dontConfigure = true;
103+ buildPhase = ''
104+ runHook preBuild
105+ patchShebangs tools > /dev/null
106+ tools/ship assemble --out desks
107+ runHook postBuild
108+ '';
109+ doCheck = true;
110+ checkPhase = ''
111+ runHook preCheck
112+ for lib in jibb jibb-import; do
113+ echo "compiling $lib.hoon"
114+ tools/hoon --lib desks/jibb-dev/lib/$lib.hoon '~'
115+ done
116+ runHook postCheck
117+ '';
118+ installPhase = ''
119+ runHook preInstall
120+ mv desks $out
121+ runHook postInstall
122+ '';
123+ # The files are the desks' as they are: nothing to patch.
124+ dontFixup = true;
125+ meta = {
126+ description = "The Jibb desks: my-app, jibb and jibb-dev";
127+ platforms = systems;
128+ };
129+ };
130+
131+ # A check: tools/check run on the repo with the given arguments.
132+ check = name: args: extra: pkgs.stdenvNoCC.mkDerivation ({
133+ name = "jibb-check-${name}";
134+ src = source checkFiles;
135+ nativeBuildInputs = [ python3 urbit ];
136+ dontConfigure = true;
137+ dontInstall = true;
138+ dontFixup = true;
139+ buildPhase = ''
140+ runHook preBuild
141+ patchShebangs tools > /dev/null
142+ mkdir $out
143+ tools/check ${args} --logs $out
144+ runHook postBuild
145+ '';
146+ } // extra);
147+
148+ # Every check that needs only urbit and Python, at once.
149+ evalChecks = check "eval" "--group eval -j $NIX_BUILD_CORES" { };
150+
151+ # The checks that need a ship, on a writable copy of fakezod.
152+ shipChecks = check "ship" "--group ship" {
153+ preBuild = ''
154+ cp -r ${fakezod} $TMPDIR/zod
155+ chmod -R u+w $TMPDIR/zod
156+ export JIBB_PIER=$TMPDIR/zod
157+ export JIBB_CLICK=${lib.getExe click}
158+ '';
159+ # A failed run shows the end of the ship's log too.
160+ failureHook = ''
161+ echo "the end of the ship's log, $TMPDIR/zod.log:"
162+ tail -n 100 $TMPDIR/zod.log || true
163+ '';
164+ };
165+ in
166+ {
167+ packages = {
168+ inherit desks click;
169+ default = desks;
170+ } // lib.optionalAttrs isLinux { inherit fakezod; };
171+
172+ checks = {
173+ inherit desks;
174+ eval = evalChecks;
175+ } // lib.optionalAttrs isLinux { ship = shipChecks; };
176+
177+ devShells.default = pkgs.mkShell {
178+ packages = [ python3 urbit click ];
179+ # tools/ship looks for click here; the pier stays
180+ # /root/urbit/zod unless $JIBB_PIER says otherwise.
181+ JIBB_CLICK = lib.getExe click;
182+ };
183+ };
184+
185+ all = forSystems perSystem;
186+ in
187+ {
188+ packages = lib.mapAttrs (_: s: s.packages) all;
189+ checks = lib.mapAttrs (_: s: s.checks) all;
190+ devShells = lib.mapAttrs (_: s: s.devShells) all;
191+ };
192+}
jibb-dev/lib/jibb.hoon+805−367
@@ -5131,10 +5131,84 @@
51315131 ?: (aura-prefix aura.a aura.b) `a
51325132 ?: (aura-prefix aura.b aura.a) `b
51335133 ~
5134− ?: &(?=(%any-atom -.a) |(?=(%atom -.b) ?=(%flag -.b))) `a
5135− ?: &(?=(%any-atom -.b) |(?=(%atom -.a) ?=(%flag -.a))) `b
5134+ ?: &(?=(%any-atom -.a) |(?=(%atom -.b) ?=(%flag -.b) ?=(%const -.b) ?=(%avar -.b) ?=(%rvar -.b) ?=(%nvar -.b) ?=(%rnvar -.b))) `a
5135+ ?: &(?=(%any-atom -.b) |(?=(%atom -.a) ?=(%flag -.a) ?=(%const -.a) ?=(%avar -.a) ?=(%rvar -.a) ?=(%nvar -.a) ?=(%rnvar -.a))) `b
51365136 ~
51375137::
5138+++ itype-branch-join
5139+ |= [a=itype b=itype sub=isub]
5140+ ^- (unit [typ=itype sub=isub])
5141+ =/ unified=(unit isub) (itype-unify a b sub)
5142+ ?^ unified `[(itype-normalize a u.unified) u.unified]
5143+ =/ common=(unit itype) (itype-concrete-join a b sub)
5144+ ?~ common ~
5145+ `[u.common sub]
5146+::
5147+++ itype-branch-join-with
5148+ |= [candidate=itype types=(list itype) sub=isub]
5149+ ^- (unit [typ=itype sub=isub])
5150+ ?~ types `[(itype-normalize candidate sub) sub]
5151+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join candidate i.types sub)
5152+ ?~ joined ~
5153+ $(candidate typ.u.joined, types t.types, sub sub.u.joined)
5154+::
5155+++ itype-branch-unify-list
5156+ |= [types=(list itype) sub=isub]
5157+ ^- (unit [typ=itype sub=isub])
5158+ ?~ types ~
5159+ =/ candidate=itype i.types
5160+ =/ rest=(list itype) t.types
5161+ |-
5162+ ?~ rest `[(itype-normalize candidate sub) sub]
5163+ =/ unified=(unit isub) (itype-unify candidate i.rest sub)
5164+ ?~ unified ~
5165+ $(candidate (itype-normalize candidate u.unified), rest t.rest, sub u.unified)
5166+::
5167+++ itype-branch-any-atom
5168+ |= [types=(list itype) sub=isub]
5169+ ^- (unit itype)
5170+ ?~ types ~
5171+ =/ typ=itype (itype-walk i.types sub)
5172+ ?: ?=(%any-atom -.typ) `typ
5173+ $(types t.types)
5174+::
5175+++ itype-branch-atom-parent
5176+ |= [candidate=itype types=(list itype) sub=isub]
5177+ ^- (unit itype)
5178+ ?~ types `candidate
5179+ =/ typ=itype (itype-walk i.types sub)
5180+ ?. ?=(%atom -.typ) $(types t.types)
5181+ =/ joined=(unit itype) (itype-concrete-join candidate typ sub)
5182+ ?~ joined ~
5183+ $(candidate u.joined, types t.types)
5184+::
5185+++ itype-branch-atom-candidates
5186+ |= [candidates=(list itype) types=(list itype) sub=isub]
5187+ ^- (unit itype)
5188+ ?~ candidates ~
5189+ =/ candidate=itype (itype-walk i.candidates sub)
5190+ ?. ?=(%atom -.candidate) $(candidates t.candidates)
5191+ =/ parent=(unit itype) (itype-branch-atom-parent candidate types sub)
5192+ ?^ parent parent
5193+ $(candidates t.candidates)
5194+::
5195+++ itype-branch-parent
5196+ |= [types=(list itype) sub=isub]
5197+ ^- (unit itype)
5198+ =/ unrestricted=(unit itype) (itype-branch-any-atom types sub)
5199+ ?^ unrestricted unrestricted
5200+ (itype-branch-atom-candidates types types sub)
5201+::
5202+++ itype-branch-join-list
5203+ |= [types=(list itype) sub=isub]
5204+ ^- (unit [typ=itype sub=isub])
5205+ ?~ types ~
5206+ =/ unified=(unit [typ=itype sub=isub]) (itype-branch-unify-list types sub)
5207+ ?^ unified unified
5208+ =/ parent=(unit itype) (itype-branch-parent types sub)
5209+ ?~ parent ~
5210+ (itype-branch-join-with u.parent types sub)
5211+::
51385212:: Unifying an already-bound tuple with a faced position would need to
51395213:: update the bound type. Until substitutions can retain that information,
51405214:: variable-dependent face merges stay unresolved.
@@ -6099,9 +6173,13 @@
60996173 ?~ work ~
61006174 ?: (hole-known [%var id.i.work] state) $(work t.work)
61016175 ?: (hole-uncertain [%var id.i.work] state)
6102− `["type hole needs unsupported inference" ~[[at.i.work "type hole"]]]
6176+ `[uncertain-hole-msg ~[[at.i.work "type hole"]]]
61036177 `["type hole needs a determined type" ~[[at.i.work "unresolved type hole"]]]
61046178::
6179+:: +uncertain-hole-msg: unsupported, though it names the hole's site
6180+::
6181+++ uncertain-hole-msg "type hole needs unsupported inference"
6182+::
61056183++ itype-vars
61066184 |= t=itype
61076185 ^- (list @ud)
@@ -6449,6 +6527,11 @@
64496527++ import-to-itype
64506528 |= node=*
64516529 ^- (unit itype)
6530+ (import-to-itype-standard node ~)
6531+::
6532+++ import-to-itype-standard
6533+ |= [node=* standard=(unit ischeme)]
6534+ ^- (unit itype)
64526535 ?@ node ~
64536536 ?+ -.node ~
64546537 %noun ?:(=(node [%noun ~]) `[%noun ~] ~)
@@ -6490,18 +6573,24 @@
64906573 ?: |(=(%map name) =(%mop name) =(%jar name) =(%jug name)) 2
64916574 0
64926575 ?: =(arity 0) ~
6493− =/ args=(unit (list itype)) (import-to-itypes +>.node)
6576+ =/ args=(unit (list itype)) (import-to-itypes-standard +>.node standard)
64946577 ?~ args ~
64956578 ?. =(arity (lent u.args)) ~
64966579 =/ keyed=(unit [types=(list itype) sub=isub]) (itype-collection-keys name u.args ~)
64976580 ?~ keyed ~
6581+ ?: =(%unit name)
6582+ ?. ?=([* ~] types.u.keyed) ~
6583+ ?~ standard `[%collection name types.u.keyed]
6584+ ?. (standard-unit-template u.standard /lib/jibb/prelude/jibb) ~
6585+ =/ nil=itype [%const [%null %n 0 '~']]
6586+ `[%union ~[nil [%cell nil [%face %u i.types.u.keyed]]] `[/lib/jibb/prelude/jibb %unit] `%unit types.u.keyed]
64986587 `[%collection name types.u.keyed]
64996588 %fork
65006589 :: Hoon's ordinary ? mold is the fork of its two %f singletons.
65016590 =/ raw=* +.node
65026591 ?: |(=(raw ~[[%atom %f `0] [%atom %f `1]]) =(raw ~[[%atom %f `1] [%atom %f `0]]))
65036592 `[%flag ~]
6504− =/ cases=(unit (list itype)) (import-to-itypes raw)
6593+ =/ cases=(unit (list itype)) (import-to-itypes-standard raw standard)
65056594 ?~ cases ~
65066595 ?~ u.cases ~
65076596 ?~ t.u.cases ~
@@ -6541,10 +6630,15 @@
65416630++ import-to-itypes
65426631 |= nodes=*
65436632 ^- (unit (list itype))
6633+ (import-to-itypes-standard nodes ~)
6634+::
6635+++ import-to-itypes-standard
6636+ |= [nodes=* standard=(unit ischeme)]
6637+ ^- (unit (list itype))
65446638 ?@ nodes ?:(=(nodes 0) `~ ~)
6545− =/ first (import-to-itype -.nodes)
6639+ =/ first (import-to-itype-standard -.nodes standard)
65466640 ?~ first ~
6547− =/ rest $(nodes +.nodes)
6641+ =/ rest $(nodes +.nodes, standard standard)
65486642 ?~ rest ~
65496643 `[u.first u.rest]
65506644::
@@ -6571,9 +6665,10 @@
65716665 ?. (levy t.cases |=(t=itype =(%disjoint (union-relate first (import-type-pattern t))))) |
65726666 $(cases t.cases)
65736667::
6574−++ find-imported-mold
6575− |= [module=term name=term externals=iexternals surs=(list term)]
6668+++ find-imported-mold-prelude
6669+ |= [module=term name=term externals=iexternals surs=(list term) prelude=ifile]
65766670 ^- (unit itype)
6671+ =/ standard=(unit ischeme) (find-jibb-mold %unit prelude)
65776672 ?. (lien surs |=(n=term =(n module))) ~
65786673 =/ found=iexternals
65796674 (skim externals |=(e=[module=term name=term result=*] &(=(module module.e) =(name name.e))))
@@ -6584,13 +6679,17 @@
65846679 ?. ?=(%& -.result) ~
65856680 =/ node=* +.result
65866681 ?. (imported-faces-valid node) ~
6587− ?@ node (import-to-itype node)
6588− ?: ?=(%ref -.node) (import-to-itype node)
6682+ ?@ node (import-to-itype-standard node standard)
6683+ ?: ?=(%ref -.node) (import-to-itype-standard node standard)
65896684 =/ pattern=(unit irec-pattern) (rec-pattern node module name)
6590− ?~ pattern (import-to-itype node)
6591− ?. has.u.pattern (import-to-itype node)
6685+ ?~ pattern (import-to-itype-standard node standard)
6686+ ?. has.u.pattern (import-to-itype-standard node standard)
65926687 `[%recursive module name `(crip "{(trip name)}.{(trip module)}")]
6593−
6688+::
6689+++ find-imported-mold
6690+ |= [module=term name=term externals=iexternals surs=(list term)]
6691+ ^- (unit itype)
6692+ (find-imported-mold-prelude module name externals surs *ifile)
65946693::
65956694++ collect-sur-imports
65966695 |= imports=(list import)
@@ -6608,9 +6707,10 @@
66086707 [mark.i.imports $(imports t.imports)]
66096708 $(imports t.imports)
66106709::
6611−++ find-imported-mark
6612− |= [name=term externals=imark-externals marks=(list term)]
6710+++ find-imported-mark-prelude
6711+ |= [name=term externals=imark-externals marks=(list term) prelude=ifile]
66136712 ^- (unit itype)
6713+ =/ standard=(unit ischeme) (find-jibb-mold %unit prelude)
66146714 ?. (unique-value-name name marks) ~
66156715 =/ found=imark-externals
66166716 (skim externals |=(e=[mark=term result=*] =(name mark.e)))
@@ -6620,7 +6720,12 @@
66206720 ?@ result ~
66216721 ?. ?=(%& -.result) ~
66226722 ?. (imported-faces-valid +.result) ~
6623− (import-to-itype +.result)
6723+ (import-to-itype-standard +.result standard)
6724+::
6725+++ find-imported-mark
6726+ |= [name=term externals=imark-externals marks=(list term)]
6727+ ^- (unit itype)
6728+ (find-imported-mark-prelude name externals marks *ifile)
66246729::
66256730++ find-jibb-interface
66266731 |= [face=term imports=ijimports]
@@ -7035,12 +7140,12 @@
70357140 ?^ vars.u.found ~
70367141 `[(itype-in-import typ.u.found u.iface i.t.names.sh prelude.state) state]
70377142 =/ found=(unit itype)
7038− (find-imported-mold i.t.names.sh n externals.state surs.state)
7143+ (find-imported-mold-prelude i.t.names.sh n externals.state surs.state ?~(prelude.state *ifile u.prelude.state))
70397144 ?~ found ~
70407145 `[u.found state]
70417146 ?: (lien marks.state |=(x=term =(x n)))
70427147 ?^ (find-simple-mold n molds.state) ~
7043− =/ imported=(unit itype) (find-imported-mark n mark-externals.state marks.state)
7148+ =/ imported=(unit itype) (find-imported-mark-prelude n mark-externals.state marks.state ?~(prelude.state *ifile u.prelude.state))
70447149 ?~ imported ~
70457150 `[u.imported state]
70467151 ?: (lien active.state |=(x=term =(x n))) ~
@@ -7406,10 +7511,115 @@
74067511 ^- istate
74077512 (reserve-cap-sites (scope-expr e) state)
74087513::
7514+:: +definite-diag: whether a failure is an error in the program itself
7515+::
7516+:: A definite error names the sites that conflict. A form partial
7517+:: inference does not support names none, and neither does a name
7518+:: that is not inferred yet, such as a sibling that waits for a later
7519+:: pass. An uncertain hole is the one unsupported result with a site.
7520+::
7521+++ definite-diag
7522+ |= diag=idiag
7523+ ^- ?
7524+ ?~ sites.diag |
7525+ !=(msg.diag uncertain-hole-msg)
7526+::
7527+:: +shared-types: what a body's shared variables resolve to
7528+::
7529+:: The variables free in env or in the enclosing capitals, such as an
7530+:: enclosing gate's untyped sample, are shared by all of the body's
7531+:: locals. A local keeps monomorphic only the variables that these
7532+:: resolve to; it generalizes the rest, which each use renames.
7533+::
7534+++ shared-types
7535+ |= [env=ienv caps=icaps sub=isub]
7536+ ^- (list [id=@ud typ=itype])
7537+ %+ turn
7538+ (unique-type-vars (weld (free-env-vars env sub) (free-cap-vars caps sub)))
7539+ |=(id=@ud [id (itype-normalize [%var id] sub)])
7540+::
7541+:: +shared-moved: whether a sibling bound or refined a shared variable
7542+::
7543+:: A sibling that infers can constrain a shared variable and so turn
7544+:: another local's failure into a success: +itype-fit accepts any type
7545+:: it can prove empty, so after `^- !! x` every cast of x fits. Such a
7546+:: failure can depend on the order siblings are tried in. A variable
7547+:: that a sibling keeps monomorphic occurs in what a shared variable
7548+:: resolves to, so constraining it moves a shared variable too. A
7549+:: substitution only grows, so when none moved, every sibling inferred
7550+:: so far, and the local, ran against the entry state and generalized
7551+:: schemes alone.
7552+::
7553+++ shared-moved
7554+ |= [shared=(list [id=@ud typ=itype]) sub=isub]
7555+ ^- ?
7556+ (lien shared |=([id=@ud typ=itype] !=(typ (itype-normalize [%var id] sub))))
7557+::
7558+:: +closed-local: whether a local cannot see any shared variable
7559+::
7560+:: A local that names no sibling, itself included, no name whose type
7561+:: had a free variable when the body was entered, and no enclosing
7562+:: capital that did, is inferred from generalized schemes and known
7563+:: types alone. What its siblings do cannot change its result, so its
7564+:: error is its own in any order. +sub is the substitution on entry,
7565+:: since a sibling may since have bound such a variable. The names are
7566+:: syntactic and ignore binders, so this errs closed.
7567+::
7568+++ closed-local
7569+ |= [d=def siblings=(list term) env=ienv caps=icaps sub=isub]
7570+ ^- ?
7571+ ?. ?=(%value -.d) |
7572+ =/ deps=(list term) (dependency-expr val.d)
7573+ ?: (lien deps |=(n=term |(=(n name.d) (lien siblings |=(s=term =(s n)))))) |
7574+ ?: %+ lien deps
7575+ |= n=term
7576+ =/ sc=(unit ischeme) (ienv-lookup n env)
7577+ ?~ sc |
7578+ ?=(^ (free-env-vars ~[[n u.sc]] sub))
7579+ |
7580+ %+ levy (scope-expr val.d)
7581+ |= site=icap-site
7582+ =/ id=(unit @ud) (icap-lookup name.site caps)
7583+ ?~ id &
7584+ ?=(~ (itype-vars (itype-normalize [%var u.id] sub)))
7585+::
7586+:: +infer-local-defs: infer a body's local values in dependency order
7587+::
7588+:: A definition that fails, or whose type is still pending, waits for
7589+:: the next pass, since it may refer to a sibling inferred later. When
7590+:: a pass makes no progress and no cyclic group applies, report the
7591+:: definite error of the earliest waiting definition, if no order of
7592+:: the siblings could change it; otherwise the message stays generic.
7593+::
7594+:: A failure counts only if it names its sites. The failure of a
7595+:: local that sees no shared variable (+closed-local) is its own. Any
7596+:: other failure counts only if no shared variable had moved when it
7597+:: was tried, and, when the body has shared variables, every other
7598+:: waiting definition also failed with sites: one that waits without
7599+:: them, on a checker limit, a pending tag or its own nested stall,
7600+:: might in another order, or once supported, constrain a shared
7601+:: variable and so let the failing local pass. When all of them failed
7602+:: with sites and none moved a shared variable, the state is the same
7603+:: in every order. With no shared variables, each local is inferred
7604+:: from generalized schemes alone.
7605+::
7606+:: A cyclic group's own errors are not kept. A definition that infers
7607+:: but is then unsupported reports that at once: a failure recorded
7608+:: earlier in the pass may still pass on a retry, once a sibling has
7609+:: constrained a shared variable.
7610+::
74097611++ infer-local-defs
74107612 |= [ds=(list def) env=ienv state=istate]
74117613 ^- ilocal-result
7614+ =/ shared=(list [id=@ud typ=itype]) (shared-types env caps.state sub.state)
74127615 =/ remaining=(list def) ~
7616+ =/ siblings=(list term) (global-value-names ds)
7617+ =/ entry=isub sub.state
7618+ :: this pass's failures with sites that are closed or were tried before
7619+ :: any shared variable moved, newest first; and whether a definition
7620+ :: waits without sites
7621+ =/ failures=(list [diag=idiag closed=?]) ~
7622+ =/ blocked=? |
74137623 =/ progressed=? |
74147624 |-
74157625 ?~ ds
@@ -7419,16 +7629,35 @@
74197629 =/ groups=icomponents (graph-components pending (global-value-names pending))
74207630 =/ grouped=(unit [rest=(list def) env=ienv state=istate])
74217631 (try-local-group pending groups env state)
7422− ?~ grouped [%| ["local definitions need unsupported inference" ~]]
7423− $(ds rest.u.grouped, remaining ~, env env.u.grouped, state state.u.grouped, progressed |)
7424− $(ds (flop remaining), remaining ~, progressed |)
7632+ ?~ grouped
7633+ =/ sure=(list [diag=idiag closed=?])
7634+ ?: |(?=(~ shared) !blocked) failures
7635+ (skim failures |=([diag=idiag closed=?] closed))
7636+ ?^ sure [%| diag:(rear sure)]
7637+ [%| ["local definitions need unsupported inference" ~]]
7638+ $(ds rest.u.grouped, remaining ~, failures ~, blocked |, env env.u.grouped, state state.u.grouped, progressed |)
7639+ $(ds (flop remaining), remaining ~, failures ~, blocked |, progressed |)
74257640 =/ d=def i.ds
74267641 ?> ?=(%value -.d)
74277642 =/ local-state=istate (reserve-def-caps val.d state)
7428− =/ inferred=iresult (infer-fragment val.d env local-state)
7429− =/ retried=? ?=(%| -.inferred)
7430− =? inferred retried (infer-recursive-gate d env local-state)
7431− ?: ?=(%| -.inferred) $(ds t.ds, remaining [d remaining])
7643+ =/ plain=iresult (infer-fragment val.d env local-state)
7644+ =/ inferred=iresult
7645+ ?: ?=(%& -.plain) plain
7646+ (infer-recursive-gate d env local-state)
7647+ ?: ?=(%| -.inferred)
7648+ :: For a value that is not a gate the retry only says so; keep the
7649+ :: first failure unless the retry found a definite error.
7650+ =/ failure=idiag
7651+ ?: ?=(%& -.plain) p.inferred
7652+ ?: (definite-diag p.inferred) p.inferred
7653+ p.plain
7654+ ?. (definite-diag failure) $(ds t.ds, remaining [d remaining], blocked &)
7655+ =/ closed=? (closed-local d siblings env caps.state entry)
7656+ =? failures |(closed !(shared-moved shared sub.state))
7657+ [[failure closed] failures]
7658+ $(ds t.ds, remaining [d remaining])
7659+ :: Only the deferred transaction adds obligations, and it keeps no
7660+ :: failure reason. Obligations from a local are a checker limit.
74327661 ?: !=(obligations.state.p.inferred obligations.state) [%| ["deferred local definition needs unsupported inference" ~]]
74337662 =. state.p.inferred (promote-restricted-numbers state.p.inferred env)
74347663 =. state.p.inferred (default-hole-numbers holes.state.p.inferred holes.state state.p.inferred env !(itype-has-gate (itype-normalize typ.p.inferred sub.state.p.inferred)))
@@ -7442,9 +7671,9 @@
74427671 [%| ["explicit capital constraints are not supported by partial inference" ~]]
74437672 =/ typ=itype (itype-normalize typ.p.inferred sub.state.p.inferred)
74447673 ?: |((pending-tags tags.state.p.inferred sub.state.p.inferred) (itype-has-tag typ))
7445− $(ds t.ds, remaining [d remaining])
7674+ $(ds t.ds, remaining [d remaining], blocked &)
74467675 ?: (unsupported-atom-vars typ caps.state.p.inferred binders.state.p.inferred sub.state.p.inferred)
7447− $(ds t.ds, remaining [d remaining])
7676+ $(ds t.ds, remaining [d remaining], blocked &)
74487677 =/ free=(list @ud)
74497678 (weld (free-env-vars env sub.state.p.inferred) (free-cap-vars caps.state sub.state.p.inferred))
74507679 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
@@ -7797,9 +8026,9 @@
77978026 (infer-union-context val.y typ.u.expected ?:(first-empty extended env) state.p.left context.u.expected)
77988027 ?: ?=(%| -.right) right
77998028 ?^ expected [%& typ.u.expected state.p.right]
7800− =/ joined=(unit isub) (itype-unify typ.p.left typ.p.right sub.state.p.right)
8029+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join typ.p.left typ.p.right sub.state.p.right)
78018030 ?~ joined [%| ["list branch results need unsupported inference" ~]]
7802− [%& typ.p.left state.p.right(sub u.joined)]
8031+ [%& typ.u.joined state.p.right(sub sub.u.joined)]
78038032::
78048033++ infer-unit-branch
78058034 |= [e=expr env=ienv state=istate expected=(unit [typ=itype context=span])]
@@ -7841,9 +8070,9 @@
78418070 (infer-union-context val.y typ.u.expected ?:(first-empty extended env) state.p.left context.u.expected)
78428071 ?: ?=(%| -.right) right
78438072 ?^ expected [%& typ.u.expected state.p.right]
7844− =/ joined=(unit isub) (itype-unify typ.p.left typ.p.right sub.state.p.right)
8073+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join typ.p.left typ.p.right sub.state.p.right)
78458074 ?~ joined [%| ["unit branch results need unsupported inference" ~]]
7846− [%& typ.p.left state.p.right(sub u.joined)]
8075+ [%& typ.u.joined state.p.right(sub sub.u.joined)]
78478076::
78488077:: Infer pieces in order, retaining their substitutions and pending tags.
78498078:: A bare decimal literal has no outside type constraint, so it takes its
@@ -7989,13 +8218,14 @@
79898218 =/ remaining=(list itype) cases
79908219 =/ arms=(list arm) arms.e
79918220 =/ st=istate state.p.subject
7992− =/ answer=(unit itype) ~
8221+ =/ results=(list itype) ~
79938222 |-
79948223 ?~ arms
79958224 ?^ remaining
79968225 `[%| ["missing union case {(show-itype i.remaining sub.st)}" ~]]
7997− ?~ answer `[%| ["empty union branch is not supported by partial inference" ~]]
7998− `[%& u.answer st]
8226+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join-list (flop results) sub.st)
8227+ ?~ joined `[%| ["union branch result matching needs unsupported inference" ~]]
8228+ `[%& typ.u.joined st(sub sub.u.joined)]
79998229 =/ a=arm i.arms
80008230 ?: (lien remaining |=(c=itype =(%unknown (union-pattern pat.a c))))
80018231 ~
@@ -8011,9 +8241,7 @@
80118241 =/ body=iresult (infer-fragment val.a u.bound st)
80128242 ?: ?=(%| -.body) `body
80138243 =/ result=itype (itype-normalize typ.p.body sub.state.p.body)
8014− =/ mismatch=? ?~(answer | !=((itype-normalize u.answer sub.state.p.body) result))
8015− ?: mismatch `[%| ["union branch result matching needs unsupported inference" ~]]
8016− $(arms t.arms, remaining (skim remaining |=(c=itype !=(%full (union-pattern pat.a c)))), st state.p.body, answer `result)
8244+ $(arms t.arms, remaining (skim remaining |=(c=itype !=(%full (union-pattern pat.a c)))), st state.p.body, results [result results])
80178245::
80188246++ infer-known-union-context-whole
80198247 |= [e=expr expected=itype env=ienv subject=iresult context=span]
@@ -8076,14 +8304,16 @@
80768304 =/ remaining=(list ifinite) cases
80778305 =/ arms=(list arm) arms.e
80788306 =/ st=istate state.p.subject
8079− =/ answer=(unit itype) ~
8307+ =/ results=(list itype) ~
80808308 |-
80818309 ?~ arms
80828310 ?^ remaining
80838311 [%| ["missing union case {(show-itype part.i.remaining sub.st)}" ~]]
8084− ?~ answer [%| ["empty union branch is not supported by partial inference" ~]]
8085− ?~ expected [%& u.answer st]
8086− [%& typ.u.expected st]
8312+ ?~ results [%| ["empty union branch is not supported by partial inference" ~]]
8313+ ?^ expected [%& typ.u.expected st]
8314+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join-list (flop results) sub.st)
8315+ ?~ joined [%| ["union branch result matching needs unsupported inference" ~]]
8316+ [%& typ.u.joined st(sub sub.u.joined)]
80878317 =/ a=arm i.arms
80888318 ?: (lien remaining |=(c=ifinite =(%unknown (union-pattern pat.a part.c))))
80898319 [%| ["partial union pattern is not supported by partial inference" ~]]
@@ -8111,11 +8341,9 @@
81118341 [%| ["union branch arm does not fit its expected type" ~[[context.u.expected "expected type"] [(span-of val.a) "branch arm"]]]]
81128342 ?: (itype-has-tag (itype-normalize typ.u.expected sub.fit))
81138343 [%| ["union branch result needs context in partial inference" ~]]
8114− $(arms t.arms, remaining (skim remaining |=(c=ifinite !=(%full (union-pattern pat.a part.c)))), st state.p.body(sub sub.fit, next next.fit), answer `typ.u.expected)
8344+ $(arms t.arms, remaining (skim remaining |=(c=ifinite !=(%full (union-pattern pat.a part.c)))), st state.p.body(sub sub.fit, next next.fit), results [typ.p.body results])
81158345 =/ result=itype (itype-normalize typ.p.body sub.state.p.body)
8116− =/ mismatch=? ?~(answer | !=((itype-normalize u.answer sub.state.p.body) result))
8117− ?: mismatch [%| ["union branch result matching needs unsupported inference" ~]]
8118− $(arms t.arms, remaining (skim remaining |=(c=ifinite !=(%full (union-pattern pat.a part.c)))), st state.p.body, answer `result)
8346+ $(arms t.arms, remaining (skim remaining |=(c=ifinite !=(%full (union-pattern pat.a part.c)))), st state.p.body, results [result results])
81198347::
81208348:: Prove a one-arm record pattern covers a known, non-union subject.
81218349:: Variable or partial matches stay unsupported; binding uses the same
@@ -8688,22 +8916,18 @@
86888916 ?: ?=(%| -.right) right
86898917 =/ ltype=itype (itype-normalize typ.p.left sub.state.p.right)
86908918 =/ rtype=itype (itype-normalize typ.p.right sub.state.p.right)
8691− ?: &(!=(ltype rtype) |(?=(^ (itype-vars ltype)) ?=(^ (itype-vars rtype))) |((itype-has-fixed-atom ltype) (itype-has-fixed-atom rtype)))
8692− [%| ["branch widening is not supported by partial inference" ~]]
8693− =/ joined=(unit isub) (itype-unify typ.p.left typ.p.right sub.state.p.right)
8919+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join typ.p.left typ.p.right sub.state.p.right)
86948920 ?~ joined
86958921 ?: |((itype-has-recursive ltype) (itype-has-recursive rtype))
86968922 [%| ["recursive branch matching is not supported by partial inference" ~]]
86978923 ?: |((itype-has-tag ltype) (itype-has-tag rtype) (itype-has-union ltype) (itype-has-union rtype))
86988924 [%| ["branch tag or union context is not supported by partial inference" ~]]
8699− =/ common=(unit itype) (itype-concrete-join typ.p.left typ.p.right sub.state.p.right)
8700− ?^ common [%& u.common state.p.right]
87018925 ?: |((itype-has-face typ.p.left sub.state.p.right) (itype-has-face typ.p.right sub.state.p.right))
87028926 [%| ["record branch matching is not supported by partial inference" ~]]
87038927 ?: |((itype-has-any-atom typ.p.left sub.state.p.right) (itype-has-any-atom typ.p.right sub.state.p.right) (itype-family-related typ.p.left typ.p.right sub.state.p.right))
87048928 [%| ["branch widening is not supported by partial inference" ~]]
87058929 [%| ["branch arms have incompatible types" ~[[(span-of val.x) (site-type-note "first arm" typ.p.left sub.state.p.right)] [(span-of val.y) (site-type-note "second arm" typ.p.right sub.state.p.right)]]]]
8706− [%& typ.p.left state.p.right(sub u.joined)]
8930+ [%& typ.u.joined state.p.right(sub sub.u.joined)]
87078931 %cast
87088932 =/ target=(unit [typ=itype state=istate]) (infer-simple-shape shape.e state)
87098933 ?~ target
@@ -9804,7 +10028,6 @@
980410028 ?: |(?=(%var -.normalized) ?=(%fvar -.normalized) ?=(%avar -.normalized) ?=(%rvar -.normalized) (itype-has-nvar normalized) (itype-has-tag normalized) (itype-has-union normalized)) label
980510029 ?: (itype-has-hidden-recursive normalized) label
980610030 =/ vars=(list @ud) (unique-type-vars (itype-vars normalized))
9807− ?: (gth (lent vars) 26) label
980810031 =/ printable=itype (canonical-itype normalized vars)
980910032 "{label} has type {(show-itype printable ~)}{(show-atom-constraint printable)}"
981010033::
@@ -9968,9 +10191,10 @@
996810191 $(vars t.vars)
996910192::
997010193:: Build the supported part of the value environment in dependency order.
9971−:: Each pass adds successful definitions. Forward references become
9972−:: available on a later pass; unsupported syntax does not enter the
9973−:: environment. Generalized definitions are closed, so a use instantiates
10194+:: Each pass adds successful definitions, visiting them dependencies first
10195+:: (+dependency-order), so a forward reference usually resolves in the
10196+:: first pass; any that do not are retried on a later pass. Unsupported
10197+:: syntax does not enter the environment. Generalized definitions are closed, so a use instantiates
997410198:: its variables afresh.
997510199::
997610200++ global-value-names
@@ -10278,7 +10502,6 @@
1027810502 =/ free=(list @ud) (weld (free-env-vars env sub.state) (free-cap-vars caps.outer sub.state))
1027910503 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
1028010504 =. vars (skim vars |=(n=@ud !(lien free |=(f=@ud =(f n)))))
10281− ?: (gth (lent vars) 26) [%| ["recursive group needs too many type variables" ~]]
1028210505 =/ rest=(each ienv idiag) $(entries t.entries)
1028310506 ?: ?=(%| -.rest) rest
1028410507 [%& [[name.entry [typ vars]] p.rest]]
@@ -10325,11 +10548,6 @@
1032510548 =. entry entry(source src, target dst)
1032610549 `[entry u.rest]
1032710550::
10328−++ add-supported-defs
10329− |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition)]
10330− ^- [env=ienv artifacts=(list iwidth-definition)]
10331− (add-supported-defs-core ds all-defs checked heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts ~)
10332−::
1033310551
1033410552+$ iresolved [env=ienv grouped=(list term) artifacts=(list iwidth-definition)]
1033510553+$ iadj (map term (list term))
@@ -10462,7 +10680,6 @@
1046210680 ?: |((pending-tags tags.state.p.result sub.state.p.result) (itype-has-tag typ)) ~
1046310681 ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result) ~
1046410682 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
10465− ?: (gth (lent vars) 26) ~
1046610683 =/ finalized=(unit (list iwprojection))
1046710684 (width-finalize projections.state.p.result sub.state.p.result vars)
1046810685 ?~ finalized ~
@@ -10471,12 +10688,11 @@
1047110688 =? checked |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) (~(put by checked) name.d d)
1047210689 `[[[name.d [typ vars]] env] checked artifacts]
1047310690++ add-supported-defs-core
10474− |= [ds=(list def) all-defs=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
10691+ |= [ds=(list def) checked=(map term def) heads=(unit igate-prelude-evidence) env=ienv molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile) artifacts=(list iwidth-definition) index=(unit [at=path source=@t prelude=ifile shapes=(map term shape)])]
1047510692 ^- [env=ienv artifacts=(list iwidth-definition)]
1047610693 ?~ ds [env artifacts]
1047710694 =/ d=def i.ds
1047810695 ?: ?=(%mold -.d) $(ds t.ds)
10479− ?: (lien (program-recovery-names all-defs) |=(n=term =(n name.d))) $(ds t.ds)
1048010696 ?. (unique-value-name name.d globals) $(ds t.ds)
1048110697 ?^ (ienv-lookup name.d env) $(ds t.ds)
1048210698 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
@@ -10529,15 +10745,38 @@
1052910745 =/ components=icomponents (graph-components ds names)
1053010746 =/ top=(list term) (turn molds |=(m=[name=term body=shape] name.m))
1053110747 =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude)
10748+ =/ ordered=(list def) (dependency-order ds components)
1053210749 |-
1053310750 =/ next=[env=ienv artifacts=(list iwidth-definition)]
10534− (add-supported-defs-core ds ds (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts index)
10751+ (add-supported-defs-core ordered (direct-checked-gates ds env) heads env molds globals externals surs mark-externals marks jimports reserved-molds at prelude artifacts index)
1053510752 =/ initial=istate [0 ~ ~ ~ molds globals externals surs mark-externals marks jimports reserved-molds ~ ~ ~ | at top prelude ~ 256 ~ ~ ~ ~ ~ ~]
1053610753 =. grec-index.initial index
1053710754 =/ out=iresolved (add-groups ds components graph env.next grouped artifacts.next initial)
1053810755 ?: =(env env.out) out
1053910756 $(env env.out, grouped grouped.out, artifacts artifacts.out)
1054010757::
10758+:: +dependency-order: the value definitions, dependencies first
10759+::
10760+:: +graph-components lists the components dependencies first, so one
10761+:: pass of +add-supported-defs-core in this order resolves a forward
10762+:: chain that would otherwise take a pass per link; the fixpoint above
10763+:: stays as the fallback (review question 12). Members of a component
10764+:: keep their source order. Definitions in no component (molds, and
10765+:: every value when duplicate names leave no components) follow in
10766+:: source order.
10767+::
10768+++ dependency-order
10769+ |= [ds=(list def) components=icomponents]
10770+ ^- (list def)
10771+ =/ ranked=(list def)
10772+ %- zing
10773+ %+ turn components
10774+ |= component=(list term)
10775+ (skim ds |=(d=def &(?=(%value -.d) (lien component |=(n=term =(n name.d))))))
10776+ =/ members=(list term) (zing components)
10777+ =/ named=ivisited (graph-nameset members ~)
10778+ (weld ranked (skip ds |=(d=def &(?=(%value -.d) (~(has by named) name.d)))))
10779+::
1054110780++ resolve-supported-defs
1054210781 |= [ds=(list def) molds=imolds globals=(list term) externals=iexternals surs=(list term) mark-externals=imark-externals marks=(list term) jimports=ijimports reserved-molds=(list term) at=path prelude=(unit ifile)]
1054310782 ^- ienv
@@ -11046,6 +11285,22 @@
1104611285 [at.first at.second (union-relate a (project-union-mold second molds ~))]
1104711286 (weld pairs $(cases t.cases))
1104811287::
11288+:: The partial report and the full module check share one overlap proof,
11289+:: so for the same union both name the same pair. The caller passes the
11290+:: projected .pairs, which the partial report reads again. The projection
11291+:: proves atoms, flags and nested literal cells, and its first overlap is
11292+:: named even when the source slice would prove an earlier pair. The
11293+:: source slice is tried only when some pair is unknown, for its one-hop
11294+:: generic applications. A missing witness does not mean the cases are
11295+:: disjoint.
11296+++ mold-overlap-witness
11297+ |= [cases=(list shape) pairs=(list upair) molds=imolds]
11298+ ^- (unit upair)
11299+ =/ overlapping=(list upair) (skim pairs |=(p=upair =(%overlap relation.p)))
11300+ ?^ overlapping `i.overlapping
11301+ ?. (lien pairs |=(p=upair =(%unknown relation.p))) ~
11302+ (union-source-overlap cases molds 256)
11303+::
1104911304:: A closed structural mold supplies no equation to determine a hole.
1105011305:: Applications, references, unbound capitals and unions are unproved.
1105111306++ simple-mold-hole
@@ -11185,14 +11440,9 @@
1118511440 =? sh ?=(%generic -.sh) body.sh
1118611441 ?. ?=(%union -.sh) (crip "+$ {(trip name.d)}: not checked")
1118711442 =/ pairs=(list upair) (union-pairs cases.sh molds)
11188− =/ overlapping=(list upair) (skim pairs |=(p=upair =(%overlap relation.p)))
11189− =. overlapping
11190− ?^ overlapping overlapping
11191− ?. (lien pairs |=(p=upair =(%unknown relation.p))) ~
11192− =/ witness=(unit upair) (union-source-overlap cases.sh molds 256)
11193− ?~(witness ~ ~[u.witness])
11194− ?^ overlapping
11195− =/ p=upair i.overlapping
11443+ =/ witness=(unit upair) (mold-overlap-witness cases.sh pairs molds)
11444+ ?^ witness
11445+ =/ p=upair u.witness
1119611446 =/ summary=@t (crip "+$ {(trip name.d)}: overlapping cases; mold not checked")
1119711447 =/ first=@t (show-error src [file line.beg.first.p col.beg.first.p "first union case"])
1119811448 =/ second=@t (show-error src [file line.beg.second.p col.beg.second.p "overlapping case"])
@@ -11216,6 +11466,7 @@
1121611466 (of-wain:format [summary excerpts])
1121711467::
1121811468:: Both written field sites are shown in the source that declares them.
11469+:: A store's derived-name clash shows its two sites the same way.
1121911470++ show-duplicate-fields
1122011471 |= [file=path src=@t diagnostic=idiag]
1122111472 ^- @t
@@ -11543,7 +11794,8 @@
1154311794 ?. valid ~
1154411795 =? sh ?=(%generic -.sh) body.sh
1154511796 ?. ?=(%union -.sh) ~
11546− (union-source-overlap cases.sh molds 256)
11797+ :: A failed inference keeps no projection, so it is computed once more.
11798+ (mold-overlap-witness cases.sh (union-pairs cases.sh molds) molds)
1154711799++ module-mold-types-detail
1154811800 |= [molds=imolds state=istate]
1154911801 ^- (each imold-types imold-failure)
@@ -11615,9 +11867,38 @@
1161511867 ?. ?=(%tvar -.i.args.tail) |
1161611868 =(var name.i.args.tail)
1161711869::
11870+++ prelude-public-label
11871+ |= label=@t
11872+ ^- (unit @t)
11873+ ?: =(label 'ask.internal') `'ask'
11874+ ?: =(label 'qath.internal') `'qath'
11875+ ?: =(label 'raw-poke.internal') `'raw-poke'
11876+ `label
11877+::
11878+++ prelude-label-nested
11879+ |= typ=itype
11880+ ^- itype
11881+ ?- -.typ
11882+ %union
11883+ =/ label=(unit @t) ?~(label.typ ~ (prelude-public-label u.label.typ))
11884+ [%union (turn cases.typ |=(c=itype (prelude-label-nested c))) origin.typ label (turn args.typ |=(c=itype (prelude-label-nested c)))]
11885+ %grec
11886+ =/ label=(unit @t) ?~(label.typ ~ (prelude-public-label u.label.typ))
11887+ typ(label label, args (turn args.typ |=(c=itype (prelude-label-nested c))))
11888+ %jrec
11889+ =/ label=(unit @t) ?~(label.typ ~ (prelude-public-label u.label.typ))
11890+ typ(label label)
11891+ %collection [%collection name.typ (turn args.typ |=(c=itype (prelude-label-nested c)))]
11892+ %face [%face name.typ $(typ body.typ)]
11893+ %fn [%fn $(typ sample.typ) $(typ product.typ)]
11894+ %cell [%cell $(typ hed.typ) $(typ tal.typ)]
11895+ * typ
11896+ ==
11897+::
1161811898++ prelude-label
1161911899 |= [typ=itype name=term vars=(list @ud)]
1162011900 ^- itype
11901+ =. typ (prelude-label-nested typ)
1162111902 ?: ?=(%jrec -.typ) typ(label `name)
1162211903 ?: ?=(%grec -.typ)
1162311904 ?. (identity-union-parameters vars args.typ) typ(label ~)
@@ -11838,6 +12119,74 @@
1183812119 ?~ (ienv-lookup name.i.ds env) |
1183912120 $(ds t.ds)
1184012121::
12122+:: Names the value a failed full check stops at, for its message only. A
12123+:: value whose module dependencies all resolved failed on its own, so the
12124+:: first such missing value is named. Otherwise every missing value waits
12125+:: on another, so following the first one each waits on, from the first
12126+:: missing value, reaches a value twice, which is named. The walk is over
12127+:: the syntactic dependency graph: dependency-expr ignores binders, so a
12128+:: sample or other local binder with a top-level value's name reads as a
12129+:: dependency on it. The named value is on a cycle of that graph, but may
12130+:: only call into the value that failed, as when a binder in that value
12131+:: shadows the named one. It claims no error in the named value.
12132+++ module-missing-value
12133+ |= [ds=(list def) env=ienv]
12134+ ^- (unit term)
12135+ =/ missing=(list term)
12136+ %+ murn ds
12137+ |= d=def
12138+ ?. ?=(%value -.d) ~
12139+ ?^ (ienv-lookup name.d env) ~
12140+ `name.d
12141+ ?~ missing ~
12142+ =/ pending=ivisited (graph-nameset missing ~)
12143+ =/ roots=(list term)
12144+ %+ murn ds
12145+ |= d=def
12146+ ?. ?=(%value -.d) ~
12147+ ?~ (~(get by pending) name.d) ~
12148+ =/ deps=(list term) (dependency-expr val.d)
12149+ ?. (levy deps |=(n=term |(=(n name.d) ?=(~ (~(get by pending) n))))) ~
12150+ `name.d
12151+ ?^ roots `i.roots
12152+ =/ seen=ivisited ~
12153+ =/ here=term i.missing
12154+ |-
12155+ ?^ (~(get by seen) here) `here
12156+ =/ next=(list term)
12157+ %- zing
12158+ %+ turn ds
12159+ |= d=def
12160+ ?. ?=(%value -.d) ~
12161+ ?. =(here name.d) ~
12162+ (skim (dependency-expr val.d) |=(n=term &(!=(n here) ?=(^ (~(get by pending) n)))))
12163+ ?~ next `here
12164+ $(seen (~(put by seen) here &), here i.next)
12165+::
12166+:: Finds the first missing value that is a gate whose own sample has the
12167+:: name of a value in scope. Partial inference rejects that sample ("sample
12168+:: shadows a name"), and it is an error (grammar, Modules). Mark names name
12169+:: molds and are left out, as are cell samples and binders deeper in the
12170+:: value.
12171+++ module-sample-shadow
12172+ |= [ds=(list def) env=ienv values=(list term)]
12173+ ^- (unit [name=term at=span])
12174+ ?~ ds ~
12175+ ?. ?=(%value -.i.ds) $(ds t.ds)
12176+ ?^ (ienv-lookup name.i.ds env) $(ds t.ds)
12177+ =/ e=expr val.i.ds
12178+ ?. ?=(?(%gate %gate-wide) -.e) $(ds t.ds)
12179+ =/ s=sample sample.e
12180+ =/ name=(unit term)
12181+ ?+ -.s ~
12182+ %bind `name.s
12183+ %face `name.s
12184+ %pun `name.s
12185+ ==
12186+ ?~ name $(ds t.ds)
12187+ ?. (lien values |=(n=term =(n u.name))) $(ds t.ds)
12188+ `[u.name at.s]
12189+::
1184112190:: Cache only completed interfaces for this invocation. The source bundle,
1184212191:: imported Hoon types and prelude are fixed for the whole graph. Check the
1184312192:: active path and duplicate sources before consulting it, so a cache hit
@@ -12108,27 +12457,66 @@
1210812457 =/ outer=(list term) (weld prelude-values (weld (global-value-names defs.mod) (api-import-faces imports.mod)))
1210912458 (levy derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x))))))
1211012459::
12460+:: The definite error behind some failures of the check above. An API
12461+:: exports `poke` when it declares `+$ poke`, and a request per case of a
12462+:: `+$ paths` that reads as path cases; these names surely exist, so a clash
12463+:: among them or with the module's scope is an error (grammar, Modules). A
12464+:: reserved `proj` stays unsupported, as in the check above.
12465+++ api-derived-clash
12466+ |= [mod=module prelude-values=(list term)]
12467+ ^- (unit idiag)
12468+ =/ declared=(list term) (collect-mark-imports imports.mod)
12469+ =/ declarations=(list def)
12470+ (skim defs.mod |=(d=def &(?=(%mold -.d) =(%paths name.d))))
12471+ =/ cases=(list [name=term at=span note=tape])
12472+ ?. ?=([* ~] declarations) ~
12473+ =/ decl=def i.declarations
12474+ ?> ?=(%mold -.decl)
12475+ =/ paths=(unit (list iapi-path)) (api-path-declaration shape.decl declared)
12476+ ?~ paths ~
12477+ (turn u.paths |=(p=iapi-path [name.p at.p "`{(trip name.p)}` is derived from this path case"]))
12478+ =/ pokes=(list def)
12479+ (skim defs.mod |=(d=def &(?=(%mold -.d) =(%poke name.d))))
12480+ =/ derived=(list [name=term at=span note=tape])
12481+ ?. ?=([* ~] pokes) cases
12482+ (snoc cases [%poke at.i.pokes "`poke` is derived from this mold"])
12483+ =/ names=(list term) (turn derived |=(x=[name=term at=span note=tape] name.x))
12484+ =/ outer=(list term) (weld prelude-values (weld (global-value-names defs.mod) (api-import-faces imports.mod)))
12485+ =/ clashes=(list term)
12486+ %+ skip names
12487+ |= n=term
12488+ ?| =(n %proj)
12489+ &((unique-value-name n names) !(lien outer |=(x=term =(n x))))
12490+ ==
12491+ ?~ clashes ~
12492+ =/ sites=(list [at=span note=tape])
12493+ %+ murn derived
12494+ |= x=[name=term at=span note=tape]
12495+ ?. =(i.clashes name.x) ~
12496+ `[at.x note.x]
12497+ `(derived-name-clash "API" i.clashes sites mod)
12498+::
1211112499:: Analysis only. Successful external entries must be unchanged results
1211212500:: produced for the declared marks; no request interface is produced.
1211312501+$ iapi-mark-type [name=term typ=itype]
1211412502+$ iapi-path-typed [path=iapi-path full=itype diffs=(list iapi-mark-type)]
1211512503++ api-diff-types
12116− |= [names=(list term) externals=imark-externals declared=(list term)]
12504+ |= [names=(list term) externals=imark-externals declared=(list term) prelude=ifile]
1211712505 ^- (unit (list iapi-mark-type))
1211812506 ?~ names `~
12119− =/ typ=(unit itype) (find-imported-mark i.names externals declared)
12507+ =/ typ=(unit itype) (find-imported-mark-prelude i.names externals declared prelude)
1212012508 ?~ typ ~
1212112509 =/ tail=(unit (list iapi-mark-type)) $(names t.names)
1212212510 ?~ tail ~
1212312511 `[[i.names u.typ] u.tail]
1212412512::
1212512513++ api-path-types
12126− |= [paths=(list iapi-path) externals=imark-externals declared=(list term)]
12514+ |= [paths=(list iapi-path) externals=imark-externals declared=(list term) prelude=ifile]
1212712515 ^- (unit (list iapi-path-typed))
1212812516 ?~ paths `~
12129− =/ full=(unit itype) (find-imported-mark full.i.paths externals declared)
12517+ =/ full=(unit itype) (find-imported-mark-prelude full.i.paths externals declared prelude)
1213012518 ?~ full ~
12131− =/ diffs=(unit (list iapi-mark-type)) (api-diff-types diffs.i.paths externals declared)
12519+ =/ diffs=(unit (list iapi-mark-type)) (api-diff-types diffs.i.paths externals declared prelude)
1213212520 ?~ diffs ~
1213312521 =/ tail=(unit (list iapi-path-typed)) $(paths t.paths)
1213412522 ?~ tail ~
@@ -12148,7 +12536,7 @@
1214812536 `~[u.name]
1214912537::
1215012538++ api-path-analysis
12151− |= [mod=module externals=imark-externals prelude-values=(list term) prelude-molds=(list term)]
12539+ |= [mod=module externals=imark-externals prelude-values=(list term) prelude-molds=(list term) prelude=ifile]
1215212540 ^- (unit (list iapi-path-typed))
1215312541 ?: (lien defs.mod def-has-hole) ~
1215412542 ?^ (duplicate-defs defs.mod) ~
@@ -12171,7 +12559,7 @@
1217112559 ?~ paths ~
1217212560 =/ derived-pokes=(list term) ?~(pokes ~ ~[%poke])
1217312561 ?. (api-derived-names-valid u.paths derived-pokes mod prelude-values) ~
12174− (api-path-types u.paths externals declared)
12562+ (api-path-types u.paths externals declared prelude)
1217512563::
1217612564:: Source/graph entry for path analysis only. The returned paths retain
1217712565:: reader-derived mark types and import resolution has checked reachable
@@ -12185,12 +12573,16 @@
1218512573 =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
1218612574 ?^ duplicate [%| (show-duplicate-fields file src u.duplicate)]
1218712575 ?~ prepared [%| 'API path analysis needs the prepared prelude']
12576+ =/ public=ifile iface.u.prepared
12577+ :: The analysis below would call a derived-name clash unsupported.
12578+ =/ clash=(unit idiag) (api-derived-clash p.parsed values.u.prepared)
12579+ ?^ clash [%| (show-duplicate-fields file src u.clash)]
1218812580 =/ prelude=(unit ifile) `iface.u.prepared
1218912581 =/ deps=jimports-result
1219012582 (resolve-jibb-imports imports.p.parsed externals marks modules ~[file] values.u.prepared molds.u.prepared ~ prelude)
1219112583 ?: ?=(%| -.deps) [%| p.deps]
1219212584 =/ paths=(unit (list iapi-path-typed))
12193− (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared)
12585+ (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared public)
1219412586 ?~ paths [%| 'API path declaration needs unsupported analysis']
1219512587 [%& u.paths]
1219612588::
@@ -12210,12 +12602,15 @@
1221012602 =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
1221112603 ?^ duplicate [%| (show-duplicate-fields file src u.duplicate)]
1221212604 ?~ prepared [%| 'API path evidence needs the prepared prelude']
12605+ :: The analysis below would call a derived-name clash unsupported.
12606+ =/ clash=(unit idiag) (api-derived-clash p.parsed values.u.prepared)
12607+ ?^ clash [%| (show-duplicate-fields file src u.clash)]
1221312608 =/ public=ifile iface.u.prepared
1221412609 =/ deps=jimports-result
1221512610 (resolve-jibb-imports imports.p.parsed externals marks modules ~[file] values.u.prepared molds.u.prepared ~ `public)
1221612611 ?: ?=(%| -.deps) [%| p.deps]
1221712612 =/ paths=(unit (list iapi-path-typed))
12218− (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared)
12613+ (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared public)
1221912614 ?~ paths [%| 'API path declaration needs unsupported analysis']
1222012615 [%& [file src u.prepared externals marks cache.p.deps u.paths]]
1222112616:: Graph-aware variant preserves the caller active stack and cache.
@@ -12231,12 +12626,15 @@
1223112626 =/ duplicate=(unit idiag) (duplicate-defs defs.p.parsed)
1223212627 ?^ duplicate [%| (show-duplicate-fields file src u.duplicate)]
1223312628 ?~ prepared [%| 'API path evidence needs the prepared prelude']
12629+ :: The analysis below would call a derived-name clash unsupported.
12630+ =/ clash=(unit idiag) (api-derived-clash p.parsed values.u.prepared)
12631+ ?^ clash [%| (show-duplicate-fields file src u.clash)]
1223412632 =/ public=ifile iface.u.prepared
1223512633 =/ deps=jimports-result
1223612634 (resolve-jibb-imports imports.p.parsed externals marks modules active values.u.prepared molds.u.prepared cache `public)
1223712635 ?: ?=(%| -.deps) [%| p.deps]
1223812636 =/ paths=(unit (list iapi-path-typed))
12239− (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared)
12637+ (api-path-analysis p.parsed marks values.u.prepared molds.u.prepared public)
1224012638 ?~ paths [%| 'API path declaration needs unsupported analysis']
1224112639 [%& [file src u.prepared externals marks cache.p.deps u.paths]]
1224212640::
@@ -12323,7 +12721,7 @@
1232312721 =/ vals=(list term) (global-value-names ordinary)
1232412722 ?: (lien vals |=(n=term =(n %main))) [%| 'API module kind needs unsupported inference']
1232512723 =/ declared=(list term) (collect-mark-imports imports.mod)
12326− =/ mark-types=(unit (list iapi-mark-type)) (api-diff-types declared marks declared)
12724+ =/ mark-types=(unit (list iapi-mark-type)) (api-diff-types declared marks declared iface.prep)
1232712725 ?~ mark-types [%| 'API declared marks need unsupported inference']
1232812726 =/ prelude=(unit ifile) `iface.prep
1232912727 =/ deps=jimports-result
@@ -12357,7 +12755,7 @@
1235712755 =/ vals=(list term) (global-value-names ordinary)
1235812756 ?: (lien vals |=(n=term =(n %main))) [%| 'API module kind needs unsupported inference']
1235912757 =/ declared=(list term) (collect-mark-imports imports.mod)
12360− =/ mark-types=(unit (list iapi-mark-type)) (api-diff-types declared marks declared)
12758+ =/ mark-types=(unit (list iapi-mark-type)) (api-diff-types declared marks declared iface.prep)
1236112759 ?~ mark-types [%| 'API declared marks need unsupported inference']
1236212760 =/ prelude=(unit ifile) `iface.prep
1236312761 =/ deps=jimports-result
@@ -12558,10 +12956,10 @@
1255812956 [%& [support u.parts interface]]
1255912957::
1256012958++ api-mark-exports
12561− |= [marks=(list term) all=(list term) externals=imark-externals]
12959+ |= [marks=(list term) all=(list term) externals=imark-externals prelude=ifile]
1256212960 ^- imold-types
1256312961 ?~ marks ~
12564− =/ t=(unit itype) (find-imported-mark i.marks externals all)
12962+ =/ t=(unit itype) (find-imported-mark-prelude i.marks externals all prelude)
1256512963 ?~ t $(marks t.marks)
1256612964 [[i.marks [u.t ~]] $(marks t.marks)]
1256712965::
@@ -12570,38 +12968,54 @@
1257012968++ api-poke-interface
1257112969 |= [at=path mod=module mark-externals=imark-externals prelude-values=(list term) prelude-molds=(list term) prelude=(unit ifile)]
1257212970 ^- (unit ifile)
12573− ?: (lien defs.mod def-has-hole) ~
12574− ?. ?=([%ui %api @ %jibb ~] at) ~
12575− ?^ (duplicate-defs defs.mod) ~
12576− ?~ prelude ~
12577− ?. =(at.u.prelude /lib/jibb/prelude/jibb) ~
12971+ =/ out=(each ifile @t)
12972+ (api-poke-interface-result at mod mark-externals prelude-values prelude-molds prelude)
12973+ ?:(?=(%& -.out) `p.out ~)
12974+::
12975+:: The same check, naming the part that stopped it. Each reason says which
12976+:: part is outside this fragment and claims no error in the module, except
12977+:: duplicate definitions, an error the full check reports first, as for
12978+:: other modules.
12979+++ api-poke-interface-result
12980+ |= [at=path mod=module mark-externals=imark-externals prelude-values=(list term) prelude-molds=(list term) prelude=(unit ifile)]
12981+ ^- (each ifile @t)
12982+ ?: (lien defs.mod def-has-hole) [%| 'API holes need unsupported inference']
12983+ ?. ?=([%ui %api @ %jibb ~] at) [%| 'API path evidence requires /ui/api/<agent>.jibb']
12984+ ?^ (duplicate-defs defs.mod) [%| 'API has duplicate definitions']
12985+ ?~ prelude [%| 'API poke prelude needs unsupported inference']
12986+ ?. =(at.u.prelude /lib/jibb/prelude/jibb) [%| 'API poke prelude needs unsupported inference']
1257812987 =/ poke=(unit ischeme) (find-jibb-mold %raw-poke u.prelude)
12579− ?~ poke ~
12580− ?. ?=(%union -.typ.u.poke) ~
12581− ?^ vars.u.poke ~
12988+ ?~ poke [%| 'API poke prelude needs unsupported inference']
12989+ ?. ?=(%union -.typ.u.poke) [%| 'API poke prelude needs unsupported inference']
12990+ ?^ vars.u.poke [%| 'API poke prelude needs unsupported inference']
1258212991 =/ compatible=?
1258312992 %+ lien cases.typ.u.poke
1258412993 |= c=itype
1258512994 ?=([%cell [%const [%term %tas %agent *]] [%cell [%face %agent [%atom %tas]] [%cell [%face %mark [%atom %tas]] [%face %payload [%noun ~]]]]] c)
12586− ?. compatible ~
12587− ?. (module-scope-valid mod(defs ~) prelude-values prelude-molds) ~
12588− ?. (levy imports.mod |=(i=import ?=(%mark -.i))) ~
12589− =/ marks=(list term) (collect-mark-imports imports.mod)
12590− ?. ?=([@ ~] marks) ~
12995+ ?. compatible [%| 'API poke prelude needs unsupported inference']
12996+ :: Definitions come before imports so that a module with more than a
12997+ :: `+$ poke` is not described by its imports.
1259112998 =/ ds=(list def) defs.mod
12592− ?. ?=([[%mold *] ~] ds) ~
12593− ?. =(%poke name.i.ds) ~
12999+ ?. ?=([[%mold *] ~] ds) [%| 'poke-only API definitions need unsupported inference']
13000+ ?. =(%poke name.i.ds) [%| 'poke-only API definitions need unsupported inference']
13001+ ?. (module-scope-valid mod(defs ~) prelude-values prelude-molds) [%| 'API import scope needs unsupported inference']
13002+ ?. (levy imports.mod |=(i=import ?=(%mark -.i))) [%| 'poke-only API imports need unsupported inference']
13003+ =/ marks=(list term) (collect-mark-imports imports.mod)
13004+ ?. ?=([@ ~] marks) [%| 'poke-only API mark imports need unsupported inference']
1259413005 =/ sh=shape shape.i.ds
12595− ?. ?=([%ref *] sh) ~
12596− ?. ?=([@ ~] names.sh) ~
13006+ ?. ?=([%ref *] sh) [%| 'API poke mold needs unsupported inference']
13007+ ?. ?=([@ ~] names.sh) [%| 'API poke mold needs unsupported inference']
1259713008 =/ n=term i.names.sh
12598− ?. (unique-value-name n marks) ~
12599− ?: |((lien prelude-values |=(x=term =(n x))) (lien prelude-molds |=(x=term =(n x)))) ~
12600− =/ mark=(unit itype) (find-imported-mark n mark-externals marks)
12601− ?~ mark ~
13009+ ?. (unique-value-name n marks) [%| 'API poke mold needs unsupported inference']
13010+ ?: |((lien prelude-values |=(x=term =(n x))) (lien prelude-molds |=(x=term =(n x)))) [%| 'API poke mold needs unsupported inference']
13011+ =/ results=@ud (lent (skim mark-externals |=(e=[mark=term result=*] =(n mark.e))))
13012+ ?: =(0 results) [%| (crip "API poke mark %{(trip n)} has no reader result")]
13013+ ?. =(1 results) [%| (crip "API poke mark %{(trip n)} has duplicate reader results")]
13014+ =/ mark=(unit itype) (find-imported-mark-prelude n mark-externals marks u.prelude)
13015+ ?~ mark [%| 'API poke mark reader result needs unsupported inference']
1260213016 =/ sc=(unit ischeme) (derived-poke-command-scheme u.prelude u.mark)
12603− ?~ sc ~
12604− `[~[[%poke u.sc]] (api-mark-exports marks marks mark-externals) at ~[[n i.t.t.at n]] ~ ~ ~ ~]
13017+ ?~ sc [%| 'API poke command needs unsupported inference']
13018+ [%& [~[[%poke u.sc]] (api-mark-exports marks marks mark-externals u.prelude) at ~[[n i.t.t.at n]] ~ ~ ~ ~]]
1260513019::
1260613020:: Source-proven ordinary helpers validate each selected /sur dependency.
1260713021:: Unused or less direct cores remain unsupported by this first interface.
@@ -12826,30 +13240,73 @@
1282613240 `[u.init u.update]
1282713241::
1282813242+$ istore-declaration [action=term defs=(list def)]
13243+:: A failure carries a diagnostic only when it is a definite error of the
13244+:: source; every other failure is unsupported and carries none.
1282913245++ store-declaration
1283013246 |= [mod=module prelude-values=(list term) prelude-molds=(list term)]
12831− ^- (unit istore-declaration)
13247+ ^- (each istore-declaration (unit idiag))
1283213248 =/ ds=(list def) defs.mod
1283313249 =/ pokes=(list def)
1283413250 (skim ds |=(d=def &(?=(%mold -.d) =(%poke name.d))))
12835− ?. ?=([* ~] pokes) ~
13251+ ?. ?=([* ~] pokes) [%| ~]
1283613252 =/ states=(list def)
1283713253 (skim ds |=(d=def &(?=(%mold -.d) =(%state name.d))))
12838− ?. ?=([* ~] states) ~
13254+ ?. ?=([* ~] states) [%| ~]
1283913255 =/ poke=def i.pokes
1284013256 =/ state=def i.states
1284113257 ?> &(?=(%mold -.poke) ?=(%mold -.state))
12842− ?: ?=(%generic -.shape.state) ~
12843− ?: ?=(%generic -.shape.poke) ~
13258+ ?: ?=(%generic -.shape.state) [%| ~]
13259+ ?: ?=(%generic -.shape.poke) [%| ~]
1284413260 =/ action=term %poke
1284513261 =/ ordinary=(list def) ds
12846− ?. (module-scope-valid mod prelude-values prelude-molds) ~
1284713262 =/ derived=(list term) ~[%state action]
12848− ?: (lien derived |=(n=term =(n %proj))) ~
13263+ ?: (lien derived |=(n=term =(n %proj))) [%| ~]
1284913264 =/ outer=(list term)
1285013265 (weld prelude-values (weld (global-value-names ordinary) (api-import-faces imports.mod)))
12851− ?. (levy derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x)))))) ~
12852− `[action ordinary]
13266+ =/ clashes=(list term)
13267+ (skip derived |=(n=term &((unique-value-name n derived) !(lien outer |=(x=term =(n x))))))
13268+ :: main's `store` is the prelude's builder when the prelude declares it and
13269+ :: nothing local takes the name. Only then do the derived names surely
13270+ :: exist, and then a clash is an error even where the scope also fails, as
13271+ :: for an import face that clashes with both a derived name and its mold.
13272+ =/ builder=?
13273+ ?& (lien prelude-values |=(x=term =(x %store)))
13274+ !(lien (global-value-names ds) |=(x=term =(x %store)))
13275+ !(lien (import-binding-names imports.mod) |=(x=term =(x %store)))
13276+ ==
13277+ ?: &(?=(^ clashes) builder (lien outer |=(x=term =(x i.clashes))))
13278+ =/ from=span ?:(=(%state i.clashes) at.state at.poke)
13279+ =/ derived=[at=span note=tape] [from "`{(trip i.clashes)}` is derived from this mold"]
13280+ [%| `(derived-name-clash "store" i.clashes ~[derived] mod)]
13281+ ?. (module-scope-valid mod prelude-values prelude-molds) [%| ~]
13282+ ?^ clashes [%| ~]
13283+ [%& [action ordinary]]
13284+::
13285+:: A store or API exports names derived from its declarations, and a
13286+:: clashing derived name is an error (grammar, Modules). Show where the name
13287+:: is derived and the definition, import face or other derived name it
13288+:: clashes with; a prelude name has no site in the module.
13289+++ derived-name-clash
13290+ |= [kind=tape n=term derived=(list [at=span note=tape]) mod=module]
13291+ ^- idiag
13292+ =/ values=(list span)
13293+ (murn defs.mod |=(d=def ?.(&(?=(%value -.d) =(n name.d)) ~ `at.d)))
13294+ =/ faces=(list span)
13295+ %+ murn imports.mod
13296+ |= i=import
13297+ ?- -.i
13298+ %mark ~
13299+ %sur ?.(=(n name.i) ~ `at.i)
13300+ %jibb ?.(=(n face.i) ~ `at.i)
13301+ ==
13302+ =/ head=tape "{kind} derived name `{(trip n)}` clashes with"
13303+ ?^ values
13304+ ["{head} a definition" (weld derived ~[[i.values "clashing definition"]])]
13305+ ?^ faces
13306+ ["{head} an import face" (weld derived ~[[i.faces "clashing import face"]])]
13307+ ?: ?=([* * *] derived)
13308+ ["{head} another derived name" derived]
13309+ ["{head} a prelude name" derived]
1285313310::
1285413311++ program-empty-null
1285513312 |= e=expr
@@ -12881,21 +13338,6 @@
1288113338 %body ?~(defs.e $(e final.e) e)
1288213339 * e
1288313340 ==
12884−++ program-init-tuple-null
12885− |= d=def
12886− ^- ?
12887− ?. ?=(%value -.d) |
12888− ?. |(?=(%gate -.val.d) ?=(%gate-wide -.val.d)) |
12889− =/ body=expr
12890− ?- -.val.d
12891− %gate body.val.d
12892− %gate-wide body.val.d
12893− * !!
12894− ==
12895− =. body (program-transparent body)
12896− ?. ?=(%tuple -.body) |
12897− ?~ items.body |
12898− (program-empty-null val:(rear items.body))
1289913341::
1290013342:: Recover only the update of an already recognized direct program main.
1290113343:: Its written sample determines the message/model relationship; the canonical
@@ -12935,10 +13377,10 @@
1293513377 (~(put by (direct-checked-gates ds env)) update.parts update-def)
1293613378 =/ templates=ienv
1293713379 (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
12938− =/ scanned=(unit dgscan)
12939− (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
12940− ?~ scanned ~
12941− =. next.initial (dg-next-id ids.u.scanned 0)
13380+ =/ fresh=(unit @ud)
13381+ (ienv-fresh-id (weld env (weld values.u.prelude.initial templates)))
13382+ ?~ fresh ~
13383+ =. next.initial u.fresh
1294213384 =/ update-state=istate (reserve-def-caps val.update-def initial)
1294313385 =/ sam=isample-result (infer-sample u.written-update env update-state)
1294413386 ?: ?=(%| -.sam) ~
@@ -13097,10 +13539,10 @@
1309713539 =/ checked=(map term def) (direct-checked-gates ds env)
1309813540 =/ templates=ienv
1309913541 (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13100− =/ scanned=(unit dgscan)
13101− (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13102− ?~ scanned ~
13103− =. next.initial (dg-next-id ids.u.scanned 0)
13542+ =/ fresh=(unit @ud)
13543+ (ienv-fresh-id (weld env (weld values.u.prelude.initial templates)))
13544+ ?~ fresh ~
13545+ =. next.initial u.fresh
1310413546 =/ subs-state=istate (reserve-def-caps val.subs-def initial)
1310513547 =/ sam=isample-result (infer-sample u.written-subs env subs-state)
1310613548 ?: ?=(%| -.sam) ~
@@ -13186,48 +13628,6 @@
1318613628 ?~ mapper ~
1318713629 `[xs u.mapper]
1318813630::
13189−++ program-recovery-names
13190− |= ds=(list def)
13191− ^- (list term)
13192− =/ main=(unit def) (program-main-def ds)
13193− ?~ main ~
13194− =/ parts=(unit [init=term update=term view=term subs=term])
13195− (program-main-parts u.main)
13196− ?~ parts ~
13197− =/ views=(list def)
13198− (skim ds |=(d=def &(?=(%value -.d) =(view.u.parts name.d))))
13199− ?. ?=([* ~] views) ~
13200− =/ view-def=def i.views
13201− ?> ?=(%value -.view-def)
13202− =/ written=(unit sample) (direct-gate-sample view-def)
13203− ?~ written ~
13204− =/ body=expr
13205− ?- -.val.view-def
13206− %gate body.val.view-def
13207− %gate-wide body.val.view-def
13208− * !!
13209− ==
13210− =/ sites=(unit (list iview-site)) (program-view-sites body ~)
13211− ?~ sites ~
13212− ?. ?=([* ~] u.sites) ~
13213− =/ mapper=term mapper.i.u.sites
13214− =/ components=(list term)
13215− :~ init.u.parts
13216− update.u.parts
13217− view.u.parts
13218− subs.u.parts
13219− ==
13220− ?: (lien components |=(n=term =(n mapper))) ~
13221− =/ mappers=(list def)
13222− (skim ds |=(d=def &(?=(%value -.d) =(mapper name.d))))
13223− ?. ?=([* ~] mappers) ~
13224− :~ init.u.parts
13225− update.u.parts
13226− view.u.parts
13227− subs.u.parts
13228− mapper
13229− ==
13230−::
1323113631++ program-sample-binders
1323213632 |= sam=sample
1323313633 ^- (list term)
@@ -13490,10 +13890,10 @@
1349013890 =/ checked=(map term def) (direct-checked-gates ds env)
1349113891 =/ templates=ienv
1349213892 (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13493− =/ scanned=(unit dgscan)
13494− (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13495− ?~ scanned ~
13496− =. next.initial (dg-next-id ids.u.scanned 0)
13893+ =/ fresh=(unit @ud)
13894+ (ienv-fresh-id (weld env (weld values.u.prelude.initial templates)))
13895+ ?~ fresh ~
13896+ =. next.initial u.fresh
1349713897 =/ view-state=istate (reserve-def-caps val.view-def initial)
1349813898 =/ sam=isample-result (infer-sample u.written-view env view-state)
1349913899 ?: ?=(%| -.sam) ~
@@ -13604,10 +14004,10 @@
1360414004 =/ checked=(map term def) (direct-checked-gates ds env)
1360514005 =/ templates=ienv
1360614006 (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13607− =/ scanned=(unit dgscan)
13608− (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13609− ?~ scanned ~
13610− =. next.initial (dg-next-id ids.u.scanned 0)
14007+ =/ fresh=(unit @ud)
14008+ (ienv-fresh-id (weld env (weld values.u.prelude.initial templates)))
14009+ ?~ fresh ~
14010+ =. next.initial u.fresh
1361114011 =/ view-state=istate (reserve-def-caps val.view-def initial)
1361214012 =/ sam=isample-result (infer-sample u.written-view env view-state)
1361314013 ?: ?=(%| -.sam) ~
@@ -13754,21 +14154,89 @@
1375414154 ?. ?=(~ (itype-vars typ.u.recovered)) ~
1375514155 `[env.u.added grouped.resolution artifacts.u.added]
1375614156::
13757−++ program-init-null-sample
13758− |= d=def
13759− ^- ?
13760− =/ written=(unit sample) (direct-gate-sample d)
13761− ?~ written |
13762− ?. ?=(%bare -.u.written) |
13763− =/ sh=shape shape.u.written
13764− ?. ?=(%const -.sh) |
13765− =(%null form.lit.sh)
13766−::
13767−:: The tuple-ending-null initializer retry above intentionally keeps its own
13768−:: boundary. A direct null-sample initializer can instead receive the closed
13769−:: model already established by update, view and subscriptions.
14157+:: The model a direct program's initializer must produce. Update's written
14158+:: two-item sample gives it when it can be read. Otherwise main's own program
14159+:: fit does: update, view and subs are fitted together against the prelude
14160+:: program's sample, as main's call will fit them, with the initializer an
14161+:: open variable. Only the initializer's data may stay open, a replay of the
14162+:: fit must not move, and the model must come out closed and tag-free.
14163+++ program-init-model
14164+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) env=ienv program=ischeme program-def=def initial=istate]
14165+ ^- (unit itype)
14166+ =/ relation=(unit [message=itype model=itype])
14167+ (program-update-relation update.parts ds env)
14168+ ?^ relation `model.u.relation
14169+ =/ args=(unit (list expr)) (program-main-args main)
14170+ ?~ args ~
14171+ =/ written=(unit sample) (direct-gate-sample program-def)
14172+ ?~ written ~
14173+ ?. ?=(%cell -.u.written) ~
14174+ ?~ items.u.written ~
14175+ =/ update=(unit ischeme) (ienv-lookup update.parts env)
14176+ =/ view=(unit ischeme) (ienv-lookup view.parts env)
14177+ =/ subs=(unit ischeme) (ienv-lookup subs.parts env)
14178+ ?~ update ~
14179+ ?~ view ~
14180+ ?~ subs ~
14181+ =/ instance=[typ=itype state=istate] (instantiate-scheme program initial)
14182+ ?. ?=(%fn -.typ.instance) ~
14183+ ?. ?=(%cell -.sample.typ.instance) ~
14184+ =/ expected-init=(unit itype)
14185+ (direct-slot-body hed.sample.typ.instance (direct-sample-name i.items.u.written))
14186+ ?~ expected-init ~
14187+ ?. ?=(%fn -.u.expected-init) ~
14188+ ?. ?=(%var -.sample.u.expected-init) ~
14189+ =/ data=@ud id.sample.u.expected-init
14190+ =/ init-var=itype [%var next.state.instance]
14191+ =/ up=[typ=itype state=istate]
14192+ (instantiate-scheme u.update state.instance(next +(next.state.instance)))
14193+ =/ vw=[typ=itype state=istate] (instantiate-scheme u.view state.up)
14194+ =/ sb=[typ=itype state=istate] (instantiate-scheme u.subs state.vw)
14195+ =/ st=istate state.sb
14196+ =/ actual=itype [%cell init-var [%cell typ.up [%cell typ.vw typ.sb]]]
14197+ =/ fit=ifit
14198+ (direct-positional-fit u.args items.u.written actual sample.typ.instance env st sub.st next.st)
14199+ ?. ?=(%ok -.fit) ~
14200+ =/ actual-final=itype (itype-normalize actual sub.fit)
14201+ =/ expected-final=itype (itype-normalize sample.typ.instance sub.fit)
14202+ =/ open=(list @ud)
14203+ (unique-type-vars (weld (itype-vars actual-final) (itype-vars expected-final)))
14204+ ?. (levy open |=(n=@ud =(data n))) ~
14205+ ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
14206+ =/ replay=ifit
14207+ (direct-positional-fit u.args items.u.written actual sample.typ.instance env st sub.fit next.fit)
14208+ ?. ?=(%ok -.replay) ~
14209+ ?. &(=(sub.fit sub.replay) =(next.fit next.replay)) ~
14210+ =/ expected=itype (itype-normalize u.expected-init sub.fit)
14211+ ?. ?=(%fn -.expected) ~
14212+ ?^ (itype-vars product.expected) ~
14213+ `product.expected
14214+::
14215+:: The product of an initializer inferred ordinarily, as a whole gate with no
14216+:: expected type, for a body that context inference cannot take, such as a
14217+:: branch over a nested call's union. Its sample must fit the written one.
14218+++ program-init-ordinary
14219+ |= [init-def=def env=ienv sample=itype state=istate]
14220+ ^- iresult
14221+ ?> ?=(%value -.init-def)
14222+ =/ gate=iresult (infer-fragment val.init-def env state)
14223+ =? gate ?=(%| -.gate) (infer-recursive-gate init-def env state)
14224+ ?: ?=(%| -.gate) gate
14225+ ?. ?=(%fn -.typ.p.gate) [%| ["initializer is not a gate" ~]]
14226+ =/ fit=ifit
14227+ (itype-fit sample.typ.p.gate sample sub.state.p.gate next.state.p.gate)
14228+ ?. ?=(%ok -.fit) [%| ["initializer sample differs" ~]]
14229+ [%& product.typ.p.gate state.p.gate(sub sub.fit, next next.fit)]
14230+::
14231+:: Recover a direct program's initializer once update, view and
14232+:: subscriptions are resolved: its body is inferred against their closed
14233+:: model (+program-init-model), under its own closed written sample. This one
14234+:: path replaced a separate retry for bodies ending in null and a gate that
14235+:: took only a null sample, so any body and any closed sample check the same
14236+:: way (review question 8). The fresh ordinary main inference afterwards
14237+:: checks that all four components agree.
1377014238++ program-plain-init-context
13771− |= [parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
14239+ |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
1377214240 ^- (unit iresolved)
1377314241 =/ env=ienv env.resolution
1377414242 ?^ (ienv-lookup %main env) ~
@@ -13776,15 +14244,11 @@
1377614244 ?~ (ienv-lookup update.parts env) ~
1377714245 ?~ (ienv-lookup view.parts env) ~
1377814246 ?~ (ienv-lookup subs.parts env) ~
13779− =/ relation=(unit [message=itype model=itype])
13780− (program-update-relation update.parts ds env)
13781− ?~ relation ~
1378214247 =/ inits=(list def)
1378314248 (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
1378414249 ?. ?=([* ~] inits) ~
1378514250 =/ init-def=def i.inits
1378614251 ?> ?=(%value -.init-def)
13787− ?. (program-init-null-sample init-def) ~
1378814252 =/ written=(unit sample) (direct-gate-sample init-def)
1378914253 ?~ written ~
1379014254 =/ body=expr
@@ -13794,141 +14258,44 @@
1379414258 * !!
1379514259 ==
1379614260 ?~ prelude.initial ~
13797− ?~ (ienv-lookup %program values.u.prelude.initial) ~
14261+ =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
14262+ ?~ program ~
1379814263 =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
1379914264 ?~ heads ~
13800− ?~ (~(get by gates.u.heads) %program) ~
14265+ =/ program-def=(unit def) (~(get by gates.u.heads) %program)
14266+ ?~ program-def ~
1380114267 =/ checked=(map term def) (direct-checked-gates ds env)
1380214268 =/ templates=ienv
1380314269 (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13804− =/ scanned=(unit dgscan)
13805− (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13806− ?~ scanned ~
13807− =. next.initial (dg-next-id ids.u.scanned 0)
14270+ =/ fresh=(unit @ud)
14271+ (ienv-fresh-id (weld env (weld values.u.prelude.initial templates)))
14272+ ?~ fresh ~
14273+ =. next.initial u.fresh
14274+ =/ model=(unit itype)
14275+ %: program-init-model
14276+ main parts ds env u.program u.program-def
14277+ initial(gate-defs checked, head-evidence heads)
14278+ ==
14279+ ?~ model ~
1380814280 =/ init-state=istate (reserve-def-caps val.init-def initial)
1380914281 =/ sam=isample-result (infer-sample u.written env init-state)
1381014282 ?: ?=(%| -.sam) ~
1381114283 ?. ?=(~ (itype-vars typ.p.sam)) ~
1381214284 ?: (itype-has-tag typ.p.sam) ~
1381314285 =/ st=istate state.p.sam(gate-defs checked, head-evidence heads)
14286+ =/ contextual=iresult
14287+ (infer-call-context-arg body u.model env.p.sam st (span-of body))
1381414288 =/ inferred=iresult
13815− (infer-call-context-arg body model.u.relation env.p.sam st (span-of body))
14289+ ?: ?=(%& -.contextual) contextual
14290+ (program-init-ordinary init-def env typ.p.sam init-state(gate-defs checked, head-evidence heads))
1381614291 ?: ?=(%| -.inferred) ~
1381714292 =/ product-fit=ifit
13818− (itype-fit typ.p.inferred model.u.relation sub.state.p.inferred next.state.p.inferred)
14293+ (itype-fit typ.p.inferred u.model sub.state.p.inferred next.state.p.inferred)
1381914294 ?. ?=(%ok -.product-fit) ~
1382014295 =/ merged-product=itype
13821− (itype-merge-faces typ.p.inferred model.u.relation sub.product-fit)
14296+ (itype-merge-faces typ.p.inferred u.model sub.product-fit)
1382214297 =/ actual-cast=itype [%fn typ.p.sam merged-product]
13823− =/ closed=itype [%fn typ.p.sam model.u.relation]
13824− =/ cast=ifit
13825− (itype-fit actual-cast closed sub.product-fit next.product-fit)
13826− ?. ?=(%ok -.cast) ~
13827− =/ merged=itype (itype-merge-faces actual-cast closed sub.cast)
13828− =/ adjusted=iresult
13829− [%& merged state.p.inferred(sub sub.cast, next next.cast)]
13830− =/ added=(unit iadded-definition)
13831− (add-supported-result init-def adjusted init-state env checked artifacts.resolution)
13832− ?~ added ~
13833− =/ recovered=(unit ischeme) (ienv-lookup init.parts env.u.added)
13834− ?~ recovered ~
13835− ?. ?=(~ vars.u.recovered) ~
13836− ?. ?=(~ (itype-vars typ.u.recovered)) ~
13837− `[env.u.added grouped.resolution artifacts.u.added]
13838−::
13839−:: Recover only the initializer of an already recognized direct program main.
13840−:: The derived call is evidence for an ordinary init/main retry, never an
13841−:: interface to publish on its own. Any failure returns the original resolution.
13842−++ program-init-context
13843− |= [main=def parts=[init=term update=term view=term subs=term] ds=(list def) resolution=iresolved initial=istate]
13844− ^- (unit iresolved)
13845− =/ env=ienv env.resolution
13846− ?^ (ienv-lookup %main env) ~
13847− ?^ (ienv-lookup init.parts env) ~
13848− =/ update=(unit ischeme) (ienv-lookup update.parts env)
13849− =/ view=(unit ischeme) (ienv-lookup view.parts env)
13850− =/ subs=(unit ischeme) (ienv-lookup subs.parts env)
13851− ?~ update ~
13852− ?~ view ~
13853− ?~ subs ~
13854− =/ inits=(list def)
13855− (skim ds |=(d=def &(?=(%value -.d) =(init.parts name.d))))
13856− ?. ?=([* ~] inits) ~
13857− =/ init-def=def i.inits
13858− ?> ?=(%value -.init-def)
13859− ?. (program-init-tuple-null init-def) ~
13860− =/ args=(unit (list expr)) (program-main-args main)
13861− ?~ args ~
13862− ?~ prelude.initial ~
13863− =/ program=(unit ischeme) (ienv-lookup %program values.u.prelude.initial)
13864− ?~ program ~
13865− =/ heads=(unit igate-prelude-evidence) (direct-prelude-evidence ds prelude.initial)
13866− ?~ heads ~
13867− =/ written=(unit def) (~(get by gates.u.heads) %program)
13868− ?~ written ~
13869− =/ written-sample=(unit sample) (direct-gate-sample u.written)
13870− ?~ written-sample ~
13871− ?. ?=(%cell -.u.written-sample) ~
13872− ?~ items.u.written-sample ~
13873− =/ checked=(map term def) (direct-checked-gates ds env)
13874− =/ templates=ienv
13875− (turn molds.u.prelude.initial |=(x=[name=term template=ischeme] [name.x template.x]))
13876− =/ scanned=(unit dgscan)
13877− (dg-all-env-ids (weld env (weld values.u.prelude.initial templates)) 32.768 ~)
13878− ?~ scanned ~
13879− =. next.initial (dg-next-id ids.u.scanned 0)
13880− =/ instance=[typ=itype state=istate] (instantiate-scheme u.program initial)
13881− ?. ?=(%fn -.typ.instance) ~
13882− ?. ?=(%cell -.sample.typ.instance) ~
13883− =/ expected-init=(unit itype)
13884− (direct-slot-body hed.sample.typ.instance (direct-sample-name i.items.u.written-sample))
13885− ?~ expected-init ~
13886− ?. ?=(%fn -.u.expected-init) ~
13887− ?. ?=(%var -.sample.u.expected-init) ~
13888− =/ data=@ud id.sample.u.expected-init
13889− =/ init-var=itype [%var next.state.instance]
13890− =/ st=istate state.instance(next +(next.state.instance))
13891− =/ up=[typ=itype state=istate] (instantiate-scheme u.update st)
13892− =/ vw=[typ=itype state=istate] (instantiate-scheme u.view state.up)
13893− =/ sb=[typ=itype state=istate] (instantiate-scheme u.subs state.vw)
13894− =. st state.sb(gate-defs checked, head-evidence heads)
13895− =/ actual=itype [%cell init-var [%cell typ.up [%cell typ.vw typ.sb]]]
13896− =/ fit=ifit
13897− (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.st next.st)
13898− ?. ?=(%ok -.fit) ~
13899− =/ actual-final=itype (itype-normalize actual sub.fit)
13900− =/ expected-final=itype (itype-normalize sample.typ.instance sub.fit)
13901− =/ open=(list @ud)
13902− (unique-type-vars (weld (itype-vars actual-final) (itype-vars expected-final)))
13903− ?. (levy open |=(n=@ud =(data n))) ~
13904− ?: |((itype-has-tag actual-final) (itype-has-tag expected-final)) ~
13905− =/ replay=ifit
13906− (direct-positional-fit u.args items.u.written-sample actual sample.typ.instance env st sub.fit next.fit)
13907− ?. ?=(%ok -.replay) ~
13908− ?. &(=(sub.fit sub.replay) =(next.fit next.replay)) ~
13909− =/ expected=itype (itype-normalize u.expected-init sub.fit)
13910− ?. ?=(%fn -.expected) ~
13911− =. st st(sub sub.fit, next next.fit)
13912− =/ init-state=istate (reserve-def-caps val.init-def st)
13913− =/ inferred=iresult (infer-fragment val.init-def env init-state)
13914− =? inferred ?=(%| -.inferred) (infer-recursive-gate init-def env init-state)
13915− ?: ?=(%| -.inferred) ~
13916− ?. ?=(%fn -.typ.p.inferred) ~
13917− ?^ (itype-vars sample.typ.p.inferred) ~
13918− =/ data-fit=ifit
13919− (itype-fit sample.typ.p.inferred sample.expected sub.state.p.inferred next.state.p.inferred)
13920− ?. ?=(%ok -.data-fit) ~
13921− =/ closed=itype (itype-normalize expected sub.data-fit)
13922− ?. ?=(%fn -.closed) ~
13923− :: Resolve the ordinary tuple cast first, then check the complete gate.
13924− :: General function fit remains unchanged; only this recovered candidate
13925− :: receives the derived result context before its whole-type cast fit.
13926− =/ product-fit=ifit
13927− (itype-fit product.typ.p.inferred product.closed sub.data-fit next.data-fit)
13928− ?. ?=(%ok -.product-fit) ~
13929− =/ product=itype
13930− (itype-merge-faces product.typ.p.inferred product.closed sub.product-fit)
13931− =/ actual-cast=itype [%fn sample.typ.p.inferred product]
14298+ =/ closed=itype [%fn typ.p.sam u.model]
1393214299 =/ cast=ifit
1393314300 (itype-fit actual-cast closed sub.product-fit next.product-fit)
1393414301 ?. ?=(%ok -.cast) ~
@@ -13967,7 +14334,7 @@
1396714334 ?~ error ~
1396814335 ?. ?=(%union -.typ.u.raw) ~
1396914336 =/ poke-case=itype
13970− [%cell [%const [%term %tas %poke '%poke']] [%cell [%face %p typ.u.raw(label `'raw-poke.internal')] [%face %reply [%fn u.error [%var m]]]]]
14337+ [%cell [%const [%term %tas %poke '%poke']] [%cell [%face %p typ.u.raw(label `'raw-poke')] [%face %reply [%fn u.error [%var m]]]]]
1397114338 =/ go-case=itype
1397214339 [%cell [%const [%term %tas %go '%go']] [%face %url [%atom %t]]]
1397314340 =/ wait-case=itype
@@ -14111,7 +14478,7 @@
1411114478 ?~ heads resolution
1411214479 =/ checked=(map term def) (direct-checked-gates ds env.resolution)
1411314480 =/ completed=[env=ienv artifacts=(list iwidth-definition)]
14114− (add-supported-defs-core ~[main] ds checked heads env.resolution molds.initial globals.initial externals.initial surs.initial mark-externals.initial marks.initial jimports.initial reserved-molds.initial at.initial prelude.initial artifacts.resolution grec-index.initial)
14481+ (add-supported-defs-core ~[main] checked heads env.resolution molds.initial globals.initial externals.initial surs.initial mark-externals.initial marks.initial jimports.initial reserved-molds.initial at.initial prelude.initial artifacts.resolution grec-index.initial)
1411514482 [env.completed grouped.resolution artifacts.completed]
1411614483::
1411714484:: A static main may retain a generic element message in its ordinary
@@ -14299,12 +14666,48 @@
1429914666 ?: &(?=([%ui %api *] at) ?=(^ (program-main-def defs.mod)))
1430014667 [%| [(crip "module kind needs unsupported inference: {(spud at)}") ~]]
1430114668 ?: ?=([%ui %api *] at)
14302− =/ iface=(unit ifile) (api-poke-interface at mod mark-externals prelude-values prelude-molds prelude)
14303− ?^ iface
14304− =/ checked=ifile u.iface(source `src, graph `[(silt `(list path)`~[at]) ~ ~ modules prelude prelude-values prelude-molds externals mark-externals])
14669+ =/ poke=(each ifile @t)
14670+ (api-poke-interface-result at mod mark-externals prelude-values prelude-molds prelude)
14671+ ?: ?=(%& -.poke)
14672+ =/ iface=ifile p.poke
14673+ =/ checked=ifile iface(source `src, graph `[(silt `(list path)`~[at]) ~ ~ modules prelude prelude-values prelude-molds externals mark-externals])
1430514674 [%& [checked [[at checked] cache]]]
14675+ :: A clashing derived name is an error wherever the checks below stop.
14676+ =/ clash=(unit idiag)
14677+ ?. ?=([%ui %api @ %jibb ~] at) ~
14678+ (api-derived-clash mod prelude-values)
14679+ ?^ clash [%| [(show-duplicate-fields at src u.clash) ~]]
14680+ :: So is a name conflict in its scope, reported as for other modules.
14681+ :: `+$ paths` and `+$ poke` are declarations, not molds (overview), and
14682+ :: a `/%` mark names a mold, so it conflicts only with another mark or
14683+ :: mold: `/% %todos` beside the request `todos` is the usual API.
14684+ =/ ordinary=(list def)
14685+ (skim defs.mod |=(d=def !&(?=(%mold -.d) |(=(%paths name.d) =(%poke name.d)))))
14686+ =/ marks=(list term) (collect-mark-imports imports.mod)
14687+ =/ mold-names=(list term)
14688+ (turn (collect-simple-molds ordinary) |=(m=[name=term body=shape] name.m))
14689+ =/ faces=(list import) (skip imports.mod |=(i=import ?=(%mark -.i)))
14690+ ?. ?& (module-scope-valid mod(defs ordinary, imports faces) prelude-values prelude-molds)
14691+ %+ levy marks
14692+ |= n=term
14693+ ?& (unique-value-name n marks)
14694+ !(lien mold-names |=(m=term =(m n)))
14695+ !(lien prelude-molds |=(m=term =(m n)))
14696+ ==
14697+ ==
14698+ [%| [(crip "module has conflicting names: {(spud at)}") ~]]
1430614699 ?~ prelude [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
1430714700 =/ prepared=iprelude [u.prelude prelude-values prelude-molds]
14701+ :: A failing Jibb import gives its own error, which may be definite, as
14702+ :: it does for other modules; the constructors below would only wrap it.
14703+ :: They resolve the same imports again, from the interfaces cached here.
14704+ =/ js=jimports-detailed-result
14705+ (resolve-jibb-imports-detailed imports.mod externals mark-externals modules active prelude-values prelude-molds cache prelude)
14706+ ?: ?=(%| -.js) [%| p.js]
14707+ :: Without `+$ paths` only the poke-only interface applies; keep its reason.
14708+ ?. (lien defs.mod |=(d=def &(?=(%mold -.d) =(%paths name.d))))
14709+ [%| [(crip "API module needs unsupported inference: {(spud at)}: {(trip p.poke)}") ~]]
14710+ :: Each constructor names the part that stopped it; keep that reason.
1430814711 =/ narrow=?
1430914712 ?. ?=([[%mark *] ~] imports.mod) |
1431014713 ?. ?=([[%mold *] ~] defs.mod) |
@@ -14312,13 +14715,13 @@
1431214715 !?=(%union -.shape.i.defs.mod)
1431314716 ?: narrow
1431414717 =/ request=(each ione-request-interface @t)
14315− (one-request-interface-graph at src externals mark-externals modules active cache `prepared)
14316− ?: ?=(%| -.request) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
14718+ (one-request-interface-graph at src externals mark-externals modules active cache.p.js `prepared)
14719+ ?: ?=(%| -.request) [%| [(crip "API module needs unsupported inference: {(spud at)}: {(trip p.request)}") ~]]
1431714720 =/ checked=ifile iface.p.request
1431814721 [%& [checked [[at checked] dependencies.paths.support.p.request]]]
1431914722 =/ multi=(each [iface=ifile cache=jcache] @t)
14320− (multi-request-interface-graph at src externals mark-externals modules active cache `prepared)
14321− ?: ?=(%| -.multi) [%| [(crip "API module needs unsupported inference: {(spud at)}") ~]]
14723+ (multi-request-interface-graph at src externals mark-externals modules active cache.p.js `prepared)
14724+ ?: ?=(%| -.multi) [%| [(crip "API module needs unsupported inference: {(spud at)}: {(trip p.multi)}") ~]]
1432214725 [%& [iface.p.multi [[at iface.p.multi] cache.p.multi]]]
1432314726 =/ main=(unit def) (program-main-def defs.mod)
1432414727 =/ main-parts=(unit [init=term update=term view=term subs=term])
@@ -14327,8 +14730,12 @@
1432714730 ?~(main ~ (page-main-parts u.main))
1432814731 =/ store-parts=(unit [init=term update=term])
1432914732 ?~(main ~ (store-main-parts u.main))
14733+ =/ declaration=(each istore-declaration (unit idiag))
14734+ ?~(store-parts [%| ~] (store-declaration mod prelude-values prelude-molds))
14735+ =/ clash=(unit idiag) ?:(?=(%| -.declaration) p.declaration ~)
14736+ ?^ clash [%| [(show-duplicate-fields at src u.clash) ~]]
1433014737 =/ declared=(unit istore-declaration)
14331− ?~(store-parts ~ (store-declaration mod prelude-values prelude-molds))
14738+ ?:(?=(%| -.declaration) ~ `p.declaration)
1433214739 ?: &(?=(^ store-parts) ?=(~ declared))
1433314740 [%| [(crip "module kind or scope needs unsupported inference: {(spud at)}") ~]]
1433414741 ?: &(?=([%ui %stores *] at) ?=(^ main) ?=(~ store-parts))
@@ -14392,11 +14799,8 @@
1439214799 ?^(viewed ~ (program-plain-view-context u.main-parts ds with-keyed-view state))
1439314800 =/ with-view=iresolved ?~(plain-view with-keyed-view u.plain-view)
1439414801 =/ initialized=(unit iresolved)
14395− (program-init-context u.main u.main-parts ds with-view state)
14396− =/ with-initialized=iresolved ?~(initialized with-view u.initialized)
14397− =/ plain-init=(unit iresolved)
14398− ?^(initialized ~ (program-plain-init-context u.main-parts ds with-initialized state))
14399− =/ components=iresolved ?~(plain-init with-initialized u.plain-init)
14802+ (program-plain-init-context u.main u.main-parts ds with-view state)
14803+ =/ components=iresolved ?~(initialized with-view u.initialized)
1440014804 (program-main-context u.main ds components state)
1440114805 =. env env.recovered
1440214806 =. artifacts.resolution artifacts.recovered
@@ -14417,7 +14821,15 @@
1441714821 =/ pending=(unit [at=span msg=tape]) (module-pending-tag required env state 64)
1441814822 ?^ pending
1441914823 [%| [(show-error src [at line.beg.at.u.pending col.beg.at.u.pending msg.u.pending]) ~]]
14420− [%| [(crip "module definitions need unsupported inference: {(spud at)}") ~]]
14824+ :: A shadowing sample is an error, so it comes before any named value.
14825+ =/ values=(list term) (weld prelude-values (weld (api-import-faces imports.mod) vals))
14826+ =/ shadow=(unit [name=term at=span]) (module-sample-shadow required env values)
14827+ ?^ shadow
14828+ =/ msg=tape "sample `{(trip name.u.shadow)}` shadows a name already in scope"
14829+ [%| [(show-error src [at line.beg.at.u.shadow col.beg.at.u.shadow msg]) ~]]
14830+ =/ missing=(unit term) (module-missing-value required env)
14831+ =/ named=tape ?~(missing "" ": ++ {(trip u.missing)}")
14832+ [%| [(crip "module definitions need unsupported inference: {(spud at)}{named}") ~]]
1442114833 =/ initial=irequest-graph [(silt `(list path)`~[at]) ~ ~ modules prelude prelude-values prelude-molds externals mark-externals]
1442214834 =/ graph=(unit irequest-graph) (request-graph-merge resolved.p.js initial (add 1 (lent resolved.p.js)))
1442314835 ?~ graph [%| ['module request evidence needs unsupported inference' ~]]
@@ -14727,8 +15139,6 @@
1472715139 ?: (unsupported-atom-vars typ caps.state.p.result binders.state.p.result sub.state.p.result)
1472815140 $(ds t.ds, lines [(crip "++ {(trip name.d)}: unresolved aura-variable inference") lines])
1472915141 =/ vars=(list @ud) (unique-type-vars (itype-vars typ))
14730− ?: (gth (lent vars) 26)
14731− $(ds t.ds, lines [(crip "++ {(trip name.d)}: too many variables for partial printer") lines])
1473215142 ?~ (width-finalize projections.state.p.result sub.state.p.result vars)
1473315143 $(ds t.ds, lines [(crip "++ {(trip name.d)}: record projection elaboration needs unsupported inference") lines])
1473415144 =/ printable=itype (canonical-itype typ vars)
@@ -14920,6 +15330,8 @@
1492015330 ?: ?=(%| -.left) left
1492115331 =/ right=iresult (infer-fragment val.y env state.p.left)
1492215332 ?: ?=(%| -.right) right
15333+ =/ joined=(unit [typ=itype sub=isub]) (itype-branch-join typ.p.left typ.p.right sub.state.p.right)
15334+ ?^ joined [%& typ.u.joined state.p.right(sub sub.u.joined)]
1492315335 ?. (dg-stable-fit typ.p.left typ.p.right sub.state.p.right)
1492415336 =/ st=istate state.p.right
1492515337 ?. (dg-owned-arm-literal val.x typ.p.left tags.st sub.st next.state)
@@ -15164,7 +15576,6 @@
1516415576 ?~ env &
1516515577 =/ sc=ischeme scheme.i.env
1516615578 ?: |((itype-has-hidden-recursive typ.sc) (itype-has-hidden-generic typ.sc)) |
15167− ?: (gth (lent vars.sc) 26) |
1516815579 $(env t.env)
1516915580:: Parse status and the transaction result come from the same source parse.
1517015581+$ dgparse [parsed=? result=(unit dgcommit)]
@@ -15193,9 +15604,9 @@
1519315604 =/ free=(unit dgscan) (dg-env base ~ 32.768 ~)
1519415605 ?~ free ~
1519515606 ?^ ids.u.free ~
15196− =/ all=(unit dgscan) (dg-all-env-ids base 32.768 ~)
15607+ =/ all=(unit @ud) (ienv-fresh-id base)
1519715608 ?~ all ~
15198− =/ fresh=@ud (dg-next-id ids.u.all 0)
15609+ =/ fresh=@ud u.all
1519915610 =/ st=istate *istate
1520015611 =. st st(next fresh, defer `~, molds molds, globals globals, at at, top-molds (turn molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
1520115612 =/ checked-molds=(each imold-types @t) (module-mold-types molds st)
@@ -15235,33 +15646,60 @@
1523515646 =/ free=(unit dgscan) (dg-env all-env ~ 32.768 ~)
1523615647 ?~ free ~
1523715648 ?^ ids.u.free ~
15238− =/ all=(unit dgscan) (dg-all-env-ids all-env 32.768 ~)
15649+ =/ all=(unit @ud) (ienv-fresh-id all-env)
1523915650 ?~ all ~
15240− =/ fresh=@ud (dg-next-id ids.u.all 0)
15651+ =/ fresh=@ud u.all
1524115652 =/ st=istate *istate
1524215653 =. st st(next fresh, defer `~, molds local-molds, globals globals, at at, reserved-molds molds.prepared, prelude prelude, top-molds (turn local-molds |=(m=[name=term body=shape] name.m)), in-mold |, jrec-fuel 256)
1524315654 =/ checked-molds=(each imold-types @t) (module-mold-types local-molds st)
1524415655 ?: ?=(%| -.checked-molds) ~
1524515656 (dg-stage defs base base st ~ 64)
1524615657::
15247−++ dg-all-env-ids
15248− |= [env=ienv fuel=@ud ids=(list @ud)]
15249− ^- (unit dgscan)
15250− ?~ env `[ids fuel]
15251− ?: =(0 fuel) ~
15658+:: +ienv-fresh-id: one above the largest type variable or tag ID in env
15659+::
15660+:: One pass over every ID in env's schemes, quantified or free, so a
15661+:: variable numbered from it captures none of them. A %recursive or
15662+:: %jrec type names its mold and holds no variable, so it is a leaf,
15663+:: and the pass is linear in the size of the types, with no budget.
15664+:: A scheme that still holds an unresolved tag declines.
15665+::
15666+++ ienv-fresh-id
15667+ |= env=ienv
15668+ ^- (unit @ud)
15669+ =/ top=@ud 0
15670+ |-
15671+ ?~ env `+(top)
1525215672 =/ sc=ischeme scheme.i.env
1525315673 ?: (itype-has-tag typ.sc) ~
15254− =/ raw=(unit dgscan) (dg-scan ~[typ.sc] ~ (dec fuel) ids)
15255− ?~ raw ~
15256− =/ quant=(unit dgscan) (dg-scan-ids vars.sc ~ fuel.u.raw ids.u.raw)
15257− ?~ quant ~
15258− $(env t.env, fuel fuel.u.quant, ids ids.u.quant)
15674+ $(env t.env, top (itype-max-id typ.sc (max top (roll vars.sc max))))
15675+::
15676+:: +itype-max-id: the largest variable or tag ID in t, or top
1525915677::
15260−++ dg-next-id
15261− |= [ids=(list @ud) largest=@ud]
15678+++ itype-max-id
15679+ |= [t=itype top=@ud]
15680+ ^- @ud
15681+ ?- -.t
15682+ %var (max top id.t)
15683+ %fvar (max top id.t)
15684+ %avar (max top id.t)
15685+ %rvar (max top id.t)
15686+ %nvar (max top id.t)
15687+ %rnvar (max top id.t)
15688+ %tag (max top id.t)
15689+ ?(%atom %any-atom %flag %noun %empty %const %recursive %jrec) top
15690+ %collection (itype-max-ids args.t top)
15691+ %grec (itype-max-ids args.t top)
15692+ %union (itype-max-ids args.t (itype-max-ids cases.t top))
15693+ %face $(t body.t)
15694+ %fn $(t sample.t, top $(t product.t))
15695+ %cell $(t hed.t, top $(t tal.t))
15696+ ==
15697+::
15698+++ itype-max-ids
15699+ |= [ts=(list itype) top=@ud]
1526215700 ^- @ud
15263− ?~ ids +(largest)
15264− $(ids t.ids, largest (max largest i.ids))
15701+ ?~ ts top
15702+ $(ts t.ts, top (itype-max-id i.ts top))
1526515703::
1526615704++ dg-eligible-ctor
1526715705 |= [e=expr head=itype actual=itype expected=itype state=istate]
my-app/desk.docket-0+1−1
@@ -3,6 +3,6 @@
33 color+0x17.734f
44 version+[0 1 0]
55 website+''
6− license+''
6+ license+'MIT'
77 site+/apps/my-app
88==
tests/golden/module-import-api-derived-clash/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "An API module, `/ui/api/<agent>.jibb`, also exports derived gates: ... a request per `paths` case ... Clashing derived names are errors, including a derived name that clashes with an import face."
2+tests: An imported API whose `++ plain` clashes with the request derived from its `%plain` path case is rejected with a definite error at the path case and the definition, not as unsupported path analysis.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-derived-clash/mar/full.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-api-derived-clash/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-derived-clash/module-trees.txtnew file+8
@@ -0,0 +1,8 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mold 2:1 paths
5+ (union 3:3
6+ (cell 3:3 (const 3:4 %plain) (path 3:11 /plain) (ref 3:18 full))
7+ (cell 4:3 (const 4:4 %other) (path 4:11 /other) (ref 4:18 full))))
8+ (value 5:1 plain (lit 5:10 5)))
tests/golden/module-import-api-derived-clash/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-derived-clash/modules/ui/api/demo.jibbnew file+5
@@ -0,0 +1,5 @@
1+/% %full
2++$ paths
3+ [%plain /plain full]
4+ [%other /other full]
5+++ plain 5
tests/golden/module-import-api-derived-clash/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-derived-clash/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-derived-clash/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-derived-clash/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+API derived name `plain` clashes with a definition
3+/ui/api/demo.jibb:3:3: `plain` is derived from this path case
4+ [%plain /plain full]
5+ ^
6+/ui/api/demo.jibb:5:1: clashing definition
7+++ plain 5
8+^
tests/golden/module-import-api-import-error/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "a store exports a generic `poke` command helper and a `state` request. Clashing derived names are errors, including a derived name that clashes with an import face."
2+tests: An imported API imports a store whose own `++ state` clashes with its derived `state` request. The store's definite error is reported as itself, at both sites, as for other importing modules, not as the API's unsupported inference.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-import-error/mar/full.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-api-import-error/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-import-error/module-trees.txtnew file+48
@@ -0,0 +1,48 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (jibb 2:1 cart /ui/stores/cart)
5+ (mold 3:1 paths
6+ (union 4:3
7+ (cell 4:3 (const 4:4 %plain) (path 4:11 /plain) (ref 4:18 full))
8+ (cell 5:3 (const 5:4 %other) (path 5:11 /other) (ref 5:18 full)))))
9+/ui/stores/cart.jibb
10+(module
11+ (mold 1:1 state
12+ (cell 1:10
13+ (face 1:11 items
14+ (apply 1:17 list (aura 1:23 @t)))
15+ (face 1:27 open (flag 1:32))))
16+ (mold 2:1 poke
17+ (union 3:3
18+ (cell 3:3
19+ (const 3:4 %add)
20+ (face 3:9 item (aura 3:14 @t)))
21+ (const 4:3 %toggle)))
22+ (value 6:1 main
23+ (group 6:9
24+ (call 6:10 (wing 6:10 store) (wing 6:16 init) (wing 6:21 update))))
25+ (value 7:1 init
26+ (cast 7:9
27+ (ref 7:12 state)
28+ (tuple 7:18 (lit 7:19 ~) (lit 7:21 %.n))))
29+ (value 8:1 update
30+ (gate 8:11
31+ (cell 8:14
32+ (face 8:15 a (ref 8:17 poke))
33+ (face 8:22 s (ref 8:24 state)))
34+ (body 9:3
35+ (branch 9:3
36+ (wing 9:6 a)
37+ (arm 10:5
38+ (cell 10:5 (lit 10:6 %add) (bind 10:11 item))
39+ (change 10:18 s
40+ (edit 10:20 items
41+ (tuple 10:26 (wing 10:27 item) (wing 10:32 items.s)))))
42+ (arm 11:5
43+ (lit 11:5 %toggle)
44+ (change 11:18 s
45+ (edit 11:20 open
46+ (group 11:25
47+ (call 11:26 (wing 11:26 not) (wing 11:30 open.s))))))))))
48+ (value 12:1 state (lit 12:10 5)))
tests/golden/module-import-api-import-error/modules.txtnew file+2
@@ -0,0 +1,2 @@
1+/ui/api/demo.jibb
2+/ui/stores/cart.jibb
tests/golden/module-import-api-import-error/modules/ui/api/demo.jibbnew file+5
@@ -0,0 +1,5 @@
1+/% %full
2+/= cart /ui/stores/cart
3++$ paths
4+ [%plain /plain full]
5+ [%other /other full]
tests/golden/module-import-api-import-error/modules/ui/stores/cart.jibbnew file+12
@@ -0,0 +1,12 @@
1++$ state [items=(list @t) open=?]
2++$ poke
3+ [%add item=@t]
4+ %toggle
5+
6+++ main (store init update)
7+++ init ^- state [~ %.n]
8+++ update |= [a=poke s=state]
9+ ?- a
10+ [%add item] s(items=[item items.s])
11+ %toggle s(open=(not open.s))
12+++ state 5
tests/golden/module-import-api-import-error/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-import-error/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-import-error/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-import-error/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+store derived name `state` clashes with a definition
3+/ui/stores/cart.jibb:1:1: `state` is derived from this mold
4++$ state [items=(list @t) open=?]
5+^
6+/ui/stores/cart.jibb:12:1: clashing definition
7+++ state 5
8+^
tests/golden/module-import-api-mark-prelude-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Molds and values have separate namespaces, told apart by position: `todo-action.todo` is a mold, `poke.todo` its command helper, and `todos.todo` a mold and a request."
2+tests: An imported poke-only API whose mark is named `same`, like the prelude value. A mark names a mold, so this is not a name conflict; the poke-only check reports its import scope as unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-mark-prelude-value/mar/same.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-api-mark-prelude-value/marks.txtnew file+1
@@ -0,0 +1 @@
1+same
tests/golden/module-import-api-mark-prelude-value/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %same)
4+ (mold 2:1 poke (ref 2:9 same)))
tests/golden/module-import-api-mark-prelude-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-mark-prelude-value/modules/ui/api/demo.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %same
2++$ poke same
tests/golden/module-import-api-mark-prelude-value/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-mark-prelude-value/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-mark-prelude-value/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-mark-prelude-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+API module needs unsupported inference: /ui/api/demo/jibb: API import scope needs unsupported inference
tests/golden/module-import-api-mark-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Molds and values have separate namespaces, told apart by position: `todo-action.todo` is a mold, `poke.todo` its command helper, and `todos.todo` a mold and a request."
2+tests: An imported poke-only API whose mark `full` names a mold, beside a value `++ full`. The two names are in separate namespaces, so this is not a name conflict; the poke-only check stops at the extra value, which it does not support.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-mark-value/mar/full.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-api-mark-value/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-mark-value/module-trees.txtnew file+5
@@ -0,0 +1,5 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mold 2:1 poke (ref 2:9 full))
5+ (value 3:1 full (lit 3:9 5)))
tests/golden/module-import-api-mark-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-mark-value/modules/ui/api/demo.jibbnew file+3
@@ -0,0 +1,3 @@
1+/% %full
2++$ poke full
3+++ full 5
tests/golden/module-import-api-mark-value/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-mark-value/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-mark-value/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-mark-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+API module needs unsupported inference: /ui/api/demo/jibb: poke-only API definitions need unsupported inference
tests/golden/module-import-api-nested-path/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "An API module, `/ui/api/<agent>.jibb`, also exports derived gates".
2+tests: An imported module at `/ui/api/foo/bar.jibb` with only `+$ poke full` is outside the poke-only fragment because of its path. It fails with the specific reason that API path evidence requires `/ui/api/<agent>.jibb`, the reason a module at that path that declares `+$ paths` gives too.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-nested-path/mar/full.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-api-nested-path/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-nested-path/module-trees.txtnew file+4
@@ -0,0 +1,4 @@
1+/ui/api/foo/bar.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mold 2:1 poke (ref 2:9 full)))
tests/golden/module-import-api-nested-path/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/foo/bar.jibb
tests/golden/module-import-api-nested-path/modules/ui/api/foo/bar.jibbnew file+2
@@ -0,0 +1,2 @@
1+/% %full
2++$ poke full
tests/golden/module-import-api-nested-path/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/foo/bar
2+++ x 1
tests/golden/module-import-api-nested-path/tokens.txtnew file+15
@@ -0,0 +1,15 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot foo
9+1:19 tight glyph /
10+1:20 tight knot bar
11+2:1 NEWLINE
12+2:1 glyph ++
13+2:4 name x
14+2:6 lit 1
15+2:7 NEWLINE
tests/golden/module-import-api-nested-path/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/foo/bar)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-nested-path/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+API module needs unsupported inference: /ui/api/foo/bar/jibb: API path evidence requires /ui/api/<agent>.jibb
tests/golden/module-import-api-paths-mark-value/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Molds and values have separate namespaces, told apart by position: `todo-action.todo` is a mold, `poke.todo` its command helper, and `todos.todo` a mold and a request."
2+tests: An imported API with `+$ paths` whose mark `other` names a mold, beside a value `++ other`. This is not a name conflict; the path declaration with a value beside it is unsupported.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-paths-mark-value/mar/full.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-api-paths-mark-value/mar/other.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-api-paths-mark-value/marks.txtnew file+2
@@ -0,0 +1,2 @@
1+full
2+other
tests/golden/module-import-api-paths-mark-value/module-trees.txtnew file+7
@@ -0,0 +1,7 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mark 2:1 %other)
5+ (mold 3:1 paths
6+ (cell 4:3 (const 4:4 %plain) (path 4:11 /plain) (ref 4:18 full)))
7+ (value 5:1 other (lit 5:10 5)))
tests/golden/module-import-api-paths-mark-value/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-paths-mark-value/modules/ui/api/demo.jibbnew file+5
@@ -0,0 +1,5 @@
1+/% %full
2+/% %other
3++$ paths
4+ [%plain /plain full]
5+++ other 5
tests/golden/module-import-api-paths-mark-value/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-paths-mark-value/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-paths-mark-value/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-paths-mark-value/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+API module needs unsupported inference: /ui/api/demo/jibb: API path declaration needs unsupported analysis
tests/golden/module-import-api-paths-scope-conflict/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: An imported API that declares `+$ paths` imports the mark `full` twice. As in other modules, the conflict is reported as conflicting names, not as a path declaration that needs unsupported analysis.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-paths-scope-conflict/mar/full.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-api-paths-scope-conflict/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-paths-scope-conflict/module-trees.txtnew file+6
@@ -0,0 +1,6 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mark 2:1 %full)
5+ (mold 3:1 paths
6+ (cell 3:10 (const 3:11 %plain) (path 3:18 /plain) (ref 3:25 full))))
tests/golden/module-import-api-paths-scope-conflict/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-paths-scope-conflict/modules/ui/api/demo.jibbnew file+3
@@ -0,0 +1,3 @@
1+/% %full
2+/% %full
3++$ paths [%plain /plain full]
tests/golden/module-import-api-paths-scope-conflict/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-paths-scope-conflict/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-paths-scope-conflict/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-paths-scope-conflict/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names: /ui/api/demo/jibb
tests/golden/module-import-api-poke-clash/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "An API module, `/ui/api/<agent>.jibb`, also exports derived gates: a generic `poke` command helper ... Clashing derived names are errors, including a derived name that clashes with an import face."
2+tests: An imported API whose `++ poke` clashes with the helper derived from its `+$ poke` is rejected with a definite error at the mold and the definition. The API has no `+$ paths`, so no path declaration is blamed.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-poke-clash/mar/full.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-api-poke-clash/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-poke-clash/module-trees.txtnew file+5
@@ -0,0 +1,5 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mold 2:1 poke (ref 2:9 full))
5+ (value 3:1 poke (str 3:9 "bad")))
tests/golden/module-import-api-poke-clash/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-poke-clash/modules/ui/api/demo.jibbnew file+3
@@ -0,0 +1,3 @@
1+/% %full
2++$ poke full
3+++ poke "bad"
tests/golden/module-import-api-poke-clash/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-poke-clash/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-poke-clash/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-poke-clash/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+API derived name `poke` clashes with a definition
3+/ui/api/demo.jibb:2:1: `poke` is derived from this mold
4++$ poke full
5+^
6+/ui/api/demo.jibb:3:1: clashing definition
7+++ poke "bad"
8+^
tests/golden/module-import-api-poke-reason/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Imports: "`/%` names a type after its mark, so it takes no face"; Modules: an API module exports "a generic `poke` command helper, adding the agent and mark".
2+tests: An imported API with only `+$ poke full` and no `/%` import is outside the poke-only fragment, which needs one `/%` mark import. It fails with that check's reason after the module's path; the module has no `+$ paths`, so no path declaration is blamed.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-poke-reason/module-trees.txtnew file+3
@@ -0,0 +1,3 @@
1+/ui/api/demo.jibb
2+(module
3+ (mold 1:1 poke (ref 1:9 full)))
tests/golden/module-import-api-poke-reason/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-poke-reason/modules/ui/api/demo.jibbnew file+1
@@ -0,0 +1 @@
1++$ poke full
tests/golden/module-import-api-poke-reason/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-poke-reason/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-poke-reason/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-poke-reason/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+API module needs unsupported inference: /ui/api/demo/jibb: poke-only API mark imports need unsupported inference
tests/golden/module-import-api-request-reason/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: docs/spec/overview.md, Agent APIs: "A path case is a request name, a path and a type."
2+tests: A path case with two typed parameters is outside the request fragment, so the imported API fails with the reason its request constructor gave, `request paths need unsupported inference`, after the module's path.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-request-reason/mar/full.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-api-request-reason/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-request-reason/module-trees.txtnew file+7
@@ -0,0 +1,7 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (mold 2:1 paths
5+ (union 3:3
6+ (cell 3:3 (const 3:4 %plain) (path 3:11 /plain) (ref 3:18 full))
7+ (cell 4:3 (const 4:4 %pair) (path 4:10 /pair/[a=@ud]/[b=@ud]) (ref 4:32 full)))))
tests/golden/module-import-api-request-reason/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/api/demo.jibb
tests/golden/module-import-api-request-reason/modules/ui/api/demo.jibbnew file+4
@@ -0,0 +1,4 @@
1+/% %full
2++$ paths
3+ [%plain /plain full]
4+ [%pair /pair/[a=@ud]/[b=@ud] full]
tests/golden/module-import-api-request-reason/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ cord (plain.api |=(x=@t "ok"))
tests/golden/module-import-api-request-reason/tokens.txtnew file+21
@@ -0,0 +1,21 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name cord
12+2:9 glyph (
13+2:10 tight wing plain.api
14+2:20 glyph |=(
15+2:23 tight name x
16+2:24 tight glyph =
17+2:25 tight aura @t
18+2:28 str "ok"
19+2:32 tight glyph )
20+2:33 tight glyph )
21+2:34 NEWLINE
tests/golden/module-import-api-request-reason/tree.txtnew file+9
@@ -0,0 +1,9 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 cord
4+ (group 2:9
5+ (call 2:10
6+ (wing 2:10 plain.api)
7+ (gate-wide 2:20
8+ (face 2:23 x (aura 2:25 @t))
9+ (str 2:28 "ok"))))))
tests/golden/module-import-api-request-reason/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+API module needs unsupported inference: /ui/api/demo/jibb: request paths need unsupported inference
tests/golden/module-import-api-scope-conflict/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: An imported API with only `+$ poke full` gives a Jibb import the face `same`, which shadows the prelude value `same`. The poke-only check stops there, and the conflict is reported as conflicting names, as in other modules, not as unsupported inference.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-api-scope-conflict/mar/full.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-api-scope-conflict/marks.txtnew file+1
@@ -0,0 +1 @@
1+full
tests/golden/module-import-api-scope-conflict/module-trees.txtnew file+11
@@ -0,0 +1,11 @@
1+/ui/api/demo.jibb
2+(module
3+ (mark 1:1 %full)
4+ (jibb 2:1 same /ui/lib)
5+ (mold 3:1 poke (ref 3:9 full)))
6+/ui/lib.jibb
7+(module
8+ (value 1:1 safe
9+ (gate 1:9
10+ (face 1:12 x (aura 1:14 @t))
11+ (wing 1:17 x))))
tests/golden/module-import-api-scope-conflict/modules.txtnew file+2
@@ -0,0 +1,2 @@
1+/ui/api/demo.jibb
2+/ui/lib.jibb
tests/golden/module-import-api-scope-conflict/modules/ui/api/demo.jibbnew file+3
@@ -0,0 +1,3 @@
1+/% %full
2+/= same /ui/lib
3++$ poke full
tests/golden/module-import-api-scope-conflict/modules/ui/lib.jibbnew file+1
@@ -0,0 +1 @@
1+++ safe |= x=@t x
tests/golden/module-import-api-scope-conflict/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= api /ui/api/demo
2+++ x 1
tests/golden/module-import-api-scope-conflict/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name api
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot api
7+1:15 tight glyph /
8+1:16 tight knot demo
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name x
12+2:6 lit 1
13+2:7 NEWLINE
tests/golden/module-import-api-scope-conflict/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 api /ui/api/demo)
3+ (value 2:1 x (lit 2:6 1)))
tests/golden/module-import-api-scope-conflict/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module has conflicting names: /ui/api/demo/jibb
tests/golden/module-import-store-derived-clash/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "a store exports a generic `poke` command helper and a `state` request. Clashing derived names are errors, including a derived name that clashes with an import face."
2+tests: An imported store whose own `++ state` clashes with its derived `state` request is rejected with a definite error at both sites, not as unsupported inference.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-store-derived-clash/module-trees.txtnew file+40
@@ -0,0 +1,40 @@
1+/ui/stores/cart.jibb
2+(module
3+ (mold 1:1 state
4+ (cell 1:10
5+ (face 1:11 items
6+ (apply 1:17 list (aura 1:23 @t)))
7+ (face 1:27 open (flag 1:32))))
8+ (mold 2:1 poke
9+ (union 3:3
10+ (cell 3:3
11+ (const 3:4 %add)
12+ (face 3:9 item (aura 3:14 @t)))
13+ (const 4:3 %toggle)))
14+ (value 6:1 main
15+ (group 6:9
16+ (call 6:10 (wing 6:10 store) (wing 6:16 init) (wing 6:21 update))))
17+ (value 7:1 init
18+ (cast 7:9
19+ (ref 7:12 state)
20+ (tuple 7:18 (lit 7:19 ~) (lit 7:21 %.n))))
21+ (value 8:1 update
22+ (gate 8:11
23+ (cell 8:14
24+ (face 8:15 a (ref 8:17 poke))
25+ (face 8:22 s (ref 8:24 state)))
26+ (body 9:3
27+ (branch 9:3
28+ (wing 9:6 a)
29+ (arm 10:5
30+ (cell 10:5 (lit 10:6 %add) (bind 10:11 item))
31+ (change 10:18 s
32+ (edit 10:20 items
33+ (tuple 10:26 (wing 10:27 item) (wing 10:32 items.s)))))
34+ (arm 11:5
35+ (lit 11:5 %toggle)
36+ (change 11:18 s
37+ (edit 11:20 open
38+ (group 11:25
39+ (call 11:26 (wing 11:26 not) (wing 11:30 open.s))))))))))
40+ (value 12:1 state (lit 12:10 5)))
tests/golden/module-import-store-derived-clash/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/stores/cart.jibb
tests/golden/module-import-store-derived-clash/modules/ui/stores/cart.jibbnew file+12
@@ -0,0 +1,12 @@
1++$ state [items=(list @t) open=?]
2++$ poke
3+ [%add item=@t]
4+ %toggle
5+
6+++ main (store init update)
7+++ init ^- state [~ %.n]
8+++ update |= [a=poke s=state]
9+ ?- a
10+ [%add item] s(items=[item items.s])
11+ %toggle s(open=(not open.s))
12+++ state 5
tests/golden/module-import-store-derived-clash/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= cart /ui/stores/cart
2+++ cart-main main.cart
tests/golden/module-import-store-derived-clash/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name cart
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot stores
7+1:19 tight glyph /
8+1:20 tight knot cart
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name cart-main
12+2:14 wing main.cart
13+2:23 NEWLINE
tests/golden/module-import-store-derived-clash/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 cart /ui/stores/cart)
3+ (value 2:1 cart-main (wing 2:14 main.cart)))
tests/golden/module-import-store-derived-clash/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+store derived name `state` clashes with a definition
3+/ui/stores/cart.jibb:1:1: `state` is derived from this mold
4++$ state [items=(list @t) open=?]
5+^
6+/ui/stores/cart.jibb:12:1: clashing definition
7+++ state 5
8+^
tests/golden/module-import-store-face-clash/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "a store exports a generic `poke` command helper and a `state` request. Clashing derived names are errors, including a derived name that clashes with an import face."
2+tests: An imported store whose `/-` face clashes with its derived `poke` helper is rejected with a definite error at the mold and the import, not as unsupported inference, although the face also clashes with the `poke` mold.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-import-store-face-clash/module-trees.txtnew file+40
@@ -0,0 +1,40 @@
1+/ui/stores/cart.jibb
2+(module
3+ (sur 1:1 poke)
4+ (mold 2:1 state
5+ (cell 2:10
6+ (face 2:11 items
7+ (apply 2:17 list (aura 2:23 @t)))
8+ (face 2:27 open (flag 2:32))))
9+ (mold 3:1 poke
10+ (union 4:3
11+ (cell 4:3
12+ (const 4:4 %add)
13+ (face 4:9 item (aura 4:14 @t)))
14+ (const 5:3 %toggle)))
15+ (value 7:1 main
16+ (group 7:9
17+ (call 7:10 (wing 7:10 store) (wing 7:16 init) (wing 7:21 update))))
18+ (value 8:1 init
19+ (cast 8:9
20+ (ref 8:12 state)
21+ (tuple 8:18 (lit 8:19 ~) (lit 8:21 %.n))))
22+ (value 9:1 update
23+ (gate 9:11
24+ (cell 9:14
25+ (face 9:15 a (ref 9:17 poke))
26+ (face 9:22 s (ref 9:24 state)))
27+ (body 10:3
28+ (branch 10:3
29+ (wing 10:6 a)
30+ (arm 11:5
31+ (cell 11:5 (lit 11:6 %add) (bind 11:11 item))
32+ (change 11:18 s
33+ (edit 11:20 items
34+ (tuple 11:26 (wing 11:27 item) (wing 11:32 items.s)))))
35+ (arm 12:5
36+ (lit 12:5 %toggle)
37+ (change 12:18 s
38+ (edit 12:20 open
39+ (group 12:25
40+ (call 12:26 (wing 12:26 not) (wing 12:30 open.s)))))))))))
tests/golden/module-import-store-face-clash/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/stores/cart.jibb
tests/golden/module-import-store-face-clash/modules/ui/stores/cart.jibbnew file+12
@@ -0,0 +1,12 @@
1+/- poke
2++$ state [items=(list @t) open=?]
3++$ poke
4+ [%add item=@t]
5+ %toggle
6+
7+++ main (store init update)
8+++ init ^- state [~ %.n]
9+++ update |= [a=poke s=state]
10+ ?- a
11+ [%add item] s(items=[item items.s])
12+ %toggle s(open=(not open.s))
tests/golden/module-import-store-face-clash/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= cart /ui/stores/cart
2+++ cart-main main.cart
tests/golden/module-import-store-face-clash/tokens.txtnew file+13
@@ -0,0 +1,13 @@
1+1:1 glyph /=
2+1:4 name cart
3+1:9 glyph /
4+1:10 tight knot ui
5+1:12 tight glyph /
6+1:13 tight knot stores
7+1:19 tight glyph /
8+1:20 tight knot cart
9+2:1 NEWLINE
10+2:1 glyph ++
11+2:4 name cart-main
12+2:14 wing main.cart
13+2:23 NEWLINE
tests/golden/module-import-store-face-clash/tree.txtnew file+3
@@ -0,0 +1,3 @@
1+(module
2+ (jibb 1:1 cart /ui/stores/cart)
3+ (value 2:1 cart-main (wing 2:14 main.cart)))
tests/golden/module-import-store-face-clash/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+store derived name `poke` clashes with an import face
3+/ui/stores/cart.jibb:3:1: `poke` is derived from this mold
4++$ poke
5+^
6+/ui/stores/cart.jibb:1:1: clashing import face
7+/- poke
8+^
tests/golden/module-import-sur-scope/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−module definitions need unsupported inference: /ui/lib/jibb
2+module definitions need unsupported inference: /ui/lib/jibb: ++ identity
tests/golden/module-missing-value-cycle/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Runes: "Gates may call themselves and their siblings; other values can't depend on themselves, even through a gate"; Modules: "Names may refer to each other in any order."
2+tests: Every missing value of the imported library waits on another: `user` calls into the failing `left`/`right` cycle without being on it. The generic error follows those waits from `user` until a value repeats and names `++ left`, a cycle member, not `++ user`. It claims no error in the named value.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-missing-value-cycle/module-trees.txtnew file+21
@@ -0,0 +1,21 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 user
4+ (gate 1:9
5+ (face 1:12 x (aura 1:14 @t))
6+ (group 1:17
7+ (call 1:18 (wing 1:18 left) (wing 1:23 x)))))
8+ (value 2:1 left
9+ (gate 2:9
10+ (face 2:12 x (aura 2:14 @t))
11+ (group 2:17
12+ (call 2:18 (wing 2:18 right) (wing 2:24 x)))))
13+ (value 3:1 right
14+ (gate 3:10
15+ (face 3:13 y (aura 3:15 @p))
16+ (group 3:18
17+ (call 3:19 (wing 3:19 left) (wing 3:24 y)))))
18+ (value 4:1 safe
19+ (gate 4:9
20+ (face 4:12 x (aura 4:14 @t))
21+ (wing 4:17 x))))
tests/golden/module-missing-value-cycle/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-missing-value-cycle/modules/ui/lib.jibbnew file+4
@@ -0,0 +1,4 @@
1+++ user |= x=@t (left x)
2+++ left |= x=@t (right x)
3+++ right |= y=@p (left y)
4+++ safe |= x=@t x
tests/golden/module-missing-value-cycle/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ use (safe.lib "hello")
tests/golden/module-missing-value-cycle/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:4 name lib
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name use
10+2:8 glyph (
11+2:9 tight wing safe.lib
12+2:18 str "hello"
13+2:25 tight glyph )
14+2:26 NEWLINE
tests/golden/module-missing-value-cycle/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 use
4+ (group 2:8
5+ (call 2:9 (wing 2:9 safe.lib) (str 2:18 "hello")))))
tests/golden/module-missing-value-cycle/types.txtnew file+2
@@ -0,0 +1,2 @@
1+partial inference; module not checked
2+module definitions need unsupported inference: /ui/lib/jibb: ++ left
tests/golden/module-missing-value-sample-shadow/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Names may refer to each other in any order, and no name may shadow one already in scope, imports and the prelude included."
2+tests: In the imported library, `helper`'s sample `user` shadows the top-level `user`, which calls `helper`. The error is that sample, shown at it, not a generic error naming `++ user`, which a walk over dependencies that ignore binders would reach.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/module-missing-value-sample-shadow/module-trees.txtnew file+15
@@ -0,0 +1,15 @@
1+/ui/lib.jibb
2+(module
3+ (value 1:1 user
4+ (gate 1:9
5+ (face 1:12 x (aura 1:14 @t))
6+ (group 1:17
7+ (call 1:18 (wing 1:18 helper) (wing 1:25 x)))))
8+ (value 2:1 helper
9+ (gate 2:11
10+ (face 2:14 user (aura 2:19 @t))
11+ (wing 2:22 user)))
12+ (value 3:1 safe
13+ (gate 3:9
14+ (face 3:12 x (aura 3:14 @t))
15+ (wing 3:17 x))))
tests/golden/module-missing-value-sample-shadow/modules.txtnew file+1
@@ -0,0 +1 @@
1+/ui/lib.jibb
tests/golden/module-missing-value-sample-shadow/modules/ui/lib.jibbnew file+3
@@ -0,0 +1,3 @@
1+++ user |= x=@t (helper x)
2+++ helper |= user=@t user
3+++ safe |= x=@t x
tests/golden/module-missing-value-sample-shadow/source.jibbnew file+2
@@ -0,0 +1,2 @@
1+/= lib /ui/lib
2+++ use (safe.lib "hello")
tests/golden/module-missing-value-sample-shadow/tokens.txtnew file+14
@@ -0,0 +1,14 @@
1+1:1 glyph /=
2+1:4 name lib
3+1:8 glyph /
4+1:9 tight knot ui
5+1:11 tight glyph /
6+1:12 tight knot lib
7+2:1 NEWLINE
8+2:1 glyph ++
9+2:4 name use
10+2:8 glyph (
11+2:9 tight wing safe.lib
12+2:18 str "hello"
13+2:25 tight glyph )
14+2:26 NEWLINE
tests/golden/module-missing-value-sample-shadow/tree.txtnew file+5
@@ -0,0 +1,5 @@
1+(module
2+ (jibb 1:1 lib /ui/lib)
3+ (value 2:1 use
4+ (group 2:8
5+ (call 2:9 (wing 2:9 safe.lib) (str 2:18 "hello")))))
tests/golden/module-missing-value-sample-shadow/types.txtnew file+4
@@ -0,0 +1,4 @@
1+partial inference; module not checked
2+/ui/lib.jibb:2:14: sample `user` shadows a name already in scope
3+++ helper |= user=@t user
4+ ^
tests/golden/types-cell-branch-context/types.txt+1−1
@@ -7,5 +7,5 @@ partial inference; module not checked
77++ named: $-(? [name=@t place=(unit @t)])
88++ wrong: branch tag or union context is not supported by partial inference
99++ different: branch tag or union context is not supported by partial inference
10−++ open: branch widening is not supported by partial inference
10+++ open: branch tag or union context is not supported by partial inference
1111++ waiting: branch tag or union context is not supported by partial inference
tests/golden/types-hole-module-boundary/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−module definitions need unsupported inference: /ui/lib/jibb
2+module definitions need unsupported inference: /ui/lib/jibb: ++ id
tests/golden/types-list-patterns/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; "A name in a pattern always binds anew". Modules: no name may shadow an in-scope name.
2−tests: Both orders of an exhaustive list branch bind the head and tail with their respective types; unsupported subjects or patterns, conflicting binders, and unrelated unresolved tags fail closed; a nonempty arm of `(list !!)` is unreachable.
2+tests: Both orders of an exhaustive list branch bind the head and tail with their respective types; uncontextual results unify and then widen to an explicitly present parent aura; unsupported subjects or patterns, conflicting binders, and unrelated unresolved tags fail closed; a nonempty arm of `(list !!)` is unreachable.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-list-patterns/source.jibb+4
@@ -9,6 +9,10 @@
99 ?- xs
1010 [item rest] rest
1111 ~ !!
12+++ parent |= xs=(list @t)
13+ ?- xs
14+ ~ 0x1f
15+ [item rest] ^- @u 0x1f
1216++ with-context |= xs=(list @t)
1317 ^- msg
1418 ?- xs
tests/golden/types-list-patterns/tokens.txt+241−215
@@ -60,69 +60,71 @@
606012:1 DEDENT
616112:1 NEWLINE
626212:1 glyph ++
63−12:4 name with-context
64−12:17 glyph |=
65−12:20 name xs
66−12:22 tight glyph =
67−12:23 tight glyph (
68−12:24 tight name list
69−12:29 aura @t
70−12:31 tight glyph )
63+12:4 name parent
64+12:11 glyph |=
65+12:14 name xs
66+12:16 tight glyph =
67+12:17 tight glyph (
68+12:18 tight name list
69+12:23 aura @t
70+12:25 tight glyph )
717113:3 INDENT
72−13:3 glyph ^-
73−13:6 name msg
72+13:3 glyph ?-
73+13:6 name xs
747414:5 INDENT
75−14:5 glyph ?-
76−14:8 name xs
77−15:7 INDENT
78−15:7 lit ~
79−15:9 lit %empty
80−16:7 NEWLINE
81−16:7 glyph [
82−16:8 tight name item
83−16:13 name rest
84−16:17 tight glyph ]
85−16:19 glyph [
86−16:20 tight lit %item
87−16:26 name item
88−16:30 tight glyph ]
89−17:1 DEDENT
90−17:1 DEDENT
91−17:1 DEDENT
92−17:1 NEWLINE
93−17:1 glyph ++
94−17:4 name shadow
95−17:11 glyph |=
96−17:14 name xs
97−17:16 tight glyph =
98−17:17 tight glyph (
99−17:18 tight name list
100−17:23 aura @t
101−17:25 tight glyph )
102−18:3 INDENT
103−18:3 glyph ?-
104−18:6 name xs
105−19:5 INDENT
106−19:5 lit ~
107−19:7 glyph !!
108−20:5 NEWLINE
109−20:5 glyph [
110−20:6 tight name xs
111−20:9 name rest
112−20:13 tight glyph ]
113−20:15 name xs
75+14:5 lit ~
76+14:7 lit 0x1f
77+15:5 NEWLINE
78+15:5 glyph [
79+15:6 tight name item
80+15:11 name rest
81+15:15 tight glyph ]
82+15:17 glyph ^-
83+15:20 aura @u
84+15:23 lit 0x1f
85+16:1 DEDENT
86+16:1 DEDENT
87+16:1 NEWLINE
88+16:1 glyph ++
89+16:4 name with-context
90+16:17 glyph |=
91+16:20 name xs
92+16:22 tight glyph =
93+16:23 tight glyph (
94+16:24 tight name list
95+16:29 aura @t
96+16:31 tight glyph )
97+17:3 INDENT
98+17:3 glyph ^-
99+17:6 name msg
100+18:5 INDENT
101+18:5 glyph ?-
102+18:8 name xs
103+19:7 INDENT
104+19:7 lit ~
105+19:9 lit %empty
106+20:7 NEWLINE
107+20:7 glyph [
108+20:8 tight name item
109+20:13 name rest
110+20:17 tight glyph ]
111+20:19 glyph [
112+20:20 tight lit %item
113+20:26 name item
114+20:30 tight glyph ]
115+21:1 DEDENT
11411621:1 DEDENT
11511721:1 DEDENT
11611821:1 NEWLINE
11711921:1 glyph ++
118−21:4 name duplicate
119−21:14 glyph |=
120−21:17 name xs
121−21:19 tight glyph =
122−21:20 tight glyph (
123−21:21 tight name list
124−21:26 aura @t
125−21:28 tight glyph )
120+21:4 name shadow
121+21:11 glyph |=
122+21:14 name xs
123+21:16 tight glyph =
124+21:17 tight glyph (
125+21:18 tight name list
126+21:23 aura @t
127+21:25 tight glyph )
12612822:3 INDENT
12712922:3 glyph ?-
12813022:6 name xs
@@ -131,17 +133,22 @@
13113323:7 glyph !!
13213424:5 NEWLINE
13313524:5 glyph [
134−24:6 tight name item
135−24:11 name item
136−24:15 tight glyph ]
137−24:17 name item
136+24:6 tight name xs
137+24:9 name rest
138+24:13 tight glyph ]
139+24:15 name xs
13814025:1 DEDENT
13914125:1 DEDENT
14014225:1 NEWLINE
14114325:1 glyph ++
142−25:4 name unknown
143−25:12 glyph |=
144−25:15 name xs
144+25:4 name duplicate
145+25:14 glyph |=
146+25:17 name xs
147+25:19 tight glyph =
148+25:20 tight glyph (
149+25:21 tight name list
150+25:26 aura @t
151+25:28 tight glyph )
14515226:3 INDENT
14615326:3 glyph ?-
14715426:6 name xs
@@ -151,18 +158,16 @@
15115828:5 NEWLINE
15215928:5 glyph [
15316028:6 tight name item
154−28:11 name rest
161+28:11 name item
15516228:15 tight glyph ]
15616328:17 name item
15716429:1 DEDENT
15816529:1 DEDENT
15916629:1 NEWLINE
16016729:1 glyph ++
161−29:4 name not-list
162−29:13 glyph |=
163−29:16 name xs
164−29:18 tight glyph =
165−29:19 tight aura @t
168+29:4 name unknown
169+29:12 glyph |=
170+29:15 name xs
16617130:3 INDENT
16717230:3 glyph ?-
16817330:6 name xs
@@ -179,181 +184,202 @@
17918433:1 DEDENT
18018533:1 NEWLINE
18118633:1 glyph ++
182−33:4 name missing
183−33:12 glyph |=
184−33:15 name xs
185−33:17 tight glyph =
186−33:18 tight glyph (
187−33:19 tight name list
188−33:24 aura @t
189−33:26 tight glyph )
187+33:4 name not-list
188+33:13 glyph |=
189+33:16 name xs
190+33:18 tight glyph =
191+33:19 tight aura @t
19019234:3 INDENT
19119334:3 glyph ?-
19219434:6 name xs
19319535:5 INDENT
19419635:5 lit ~
19519735:7 glyph !!
196−36:1 DEDENT
197−36:1 DEDENT
198−36:1 NEWLINE
199−36:1 glyph ++
200−36:4 name invalid
201−36:12 glyph |=
202−36:15 name xs
203−36:17 tight glyph =
204−36:18 tight glyph (
205−36:19 tight name list
206−36:24 aura @t
207−36:26 tight glyph )
208−37:3 INDENT
209−37:3 glyph ?-
210−37:6 name xs
211−38:5 INDENT
212−38:5 lit ~
213−38:7 glyph !!
214−39:5 NEWLINE
215−39:5 glyph [
216−39:6 tight lit %tag
217−39:11 name rest
218−39:15 tight glyph ]
219−39:17 name rest
198+36:5 NEWLINE
199+36:5 glyph [
200+36:6 tight name item
201+36:11 name rest
202+36:15 tight glyph ]
203+36:17 name item
204+37:1 DEDENT
205+37:1 DEDENT
206+37:1 NEWLINE
207+37:1 glyph ++
208+37:4 name missing
209+37:12 glyph |=
210+37:15 name xs
211+37:17 tight glyph =
212+37:18 tight glyph (
213+37:19 tight name list
214+37:24 aura @t
215+37:26 tight glyph )
216+38:3 INDENT
217+38:3 glyph ?-
218+38:6 name xs
219+39:5 INDENT
220+39:5 lit ~
221+39:7 glyph !!
22022240:1 DEDENT
22122340:1 DEDENT
22222440:1 NEWLINE
22322540:1 glyph ++
224−40:4 name unresolved
225−40:15 glyph |=
226−40:18 name xs
227−40:20 tight glyph =
228−40:21 tight glyph (
229−40:22 tight name list
230−40:27 aura @t
231−40:29 tight glyph )
226+40:4 name invalid
227+40:12 glyph |=
228+40:15 name xs
229+40:17 tight glyph =
230+40:18 tight glyph (
231+40:19 tight name list
232+40:24 aura @t
233+40:26 tight glyph )
23223441:3 INDENT
23323541:3 glyph ?-
23423641:6 name xs
23523742:5 INDENT
23623842:5 lit ~
237−42:7 lit %empty
239+42:7 glyph !!
23824043:5 NEWLINE
23924143:5 glyph [
240−43:6 tight name item
242+43:6 tight lit %tag
24124343:11 name rest
24224443:15 tight glyph ]
243−43:17 lit %more
245+43:17 name rest
24424644:1 DEDENT
24524744:1 DEDENT
24624844:1 NEWLINE
24724944:1 glyph ++
248−44:4 name duplicate-arm
249−44:18 glyph |=
250−44:21 name xs
251−44:23 tight glyph =
252−44:24 tight glyph (
253−44:25 tight name list
254−44:30 aura @t
255−44:32 tight glyph )
250+44:4 name unresolved
251+44:15 glyph |=
252+44:18 name xs
253+44:20 tight glyph =
254+44:21 tight glyph (
255+44:22 tight name list
256+44:27 aura @t
257+44:29 tight glyph )
25625845:3 INDENT
25725945:3 glyph ?-
25826045:6 name xs
25926146:5 INDENT
26026246:5 lit ~
261−46:7 glyph !!
263+46:7 lit %empty
26226447:5 NEWLINE
263−47:5 lit ~
264−47:7 glyph !!
265−48:5 NEWLINE
266−48:5 glyph [
267−48:6 tight name item
268−48:11 name rest
269−48:15 tight glyph ]
270−48:17 name item
271−49:1 DEDENT
272−49:1 DEDENT
273−49:1 NEWLINE
274−49:1 glyph ++
275−49:4 name unrelated
276−49:14 glyph |=
277−49:17 name xs
278−49:19 tight glyph =
279−49:20 tight glyph (
280−49:21 tight name list
281−49:26 aura @t
282−49:28 tight glyph )
283−50:3 INDENT
284−50:3 glyph ~&
285−50:6 lit %pending
286−51:5 INDENT
287−51:5 glyph ?-
288−51:8 name xs
289−52:7 INDENT
290−52:7 lit ~
291−52:9 glyph !!
292−53:7 NEWLINE
293−53:7 glyph [
294−53:8 tight name item
295−53:13 name rest
296−53:17 tight glyph ]
297−53:19 name item
298−54:1 DEDENT
299−54:1 DEDENT
300−54:1 DEDENT
301−54:1 NEWLINE
302−54:1 glyph ++
303−54:4 name empty-elements
304−54:19 glyph |=
305−54:22 name xs
306−54:24 tight glyph =
307−54:25 tight glyph (
308−54:26 tight name list
309−54:31 glyph !!
310−54:33 tight glyph )
311−55:3 INDENT
312−55:3 glyph ?-
313−55:6 name xs
314−56:5 INDENT
315−56:5 lit ~
316−56:7 glyph !!
317−57:5 NEWLINE
318−57:5 glyph [
319−57:6 tight name item
320−57:11 name rest
321−57:15 tight glyph ]
322−57:17 name item
265+47:5 glyph [
266+47:6 tight name item
267+47:11 name rest
268+47:15 tight glyph ]
269+47:17 lit %more
270+48:1 DEDENT
271+48:1 DEDENT
272+48:1 NEWLINE
273+48:1 glyph ++
274+48:4 name duplicate-arm
275+48:18 glyph |=
276+48:21 name xs
277+48:23 tight glyph =
278+48:24 tight glyph (
279+48:25 tight name list
280+48:30 aura @t
281+48:32 tight glyph )
282+49:3 INDENT
283+49:3 glyph ?-
284+49:6 name xs
285+50:5 INDENT
286+50:5 lit ~
287+50:7 glyph !!
288+51:5 NEWLINE
289+51:5 lit ~
290+51:7 glyph !!
291+52:5 NEWLINE
292+52:5 glyph [
293+52:6 tight name item
294+52:11 name rest
295+52:15 tight glyph ]
296+52:17 name item
297+53:1 DEDENT
298+53:1 DEDENT
299+53:1 NEWLINE
300+53:1 glyph ++
301+53:4 name unrelated
302+53:14 glyph |=
303+53:17 name xs
304+53:19 tight glyph =
305+53:20 tight glyph (
306+53:21 tight name list
307+53:26 aura @t
308+53:28 tight glyph )
309+54:3 INDENT
310+54:3 glyph ~&
311+54:6 lit %pending
312+55:5 INDENT
313+55:5 glyph ?-
314+55:8 name xs
315+56:7 INDENT
316+56:7 lit ~
317+56:9 glyph !!
318+57:7 NEWLINE
319+57:7 glyph [
320+57:8 tight name item
321+57:13 name rest
322+57:17 tight glyph ]
323+57:19 name item
324+58:1 DEDENT
32332558:1 DEDENT
32432658:1 DEDENT
32532758:1 NEWLINE
326−58:1 glyph +$
327−58:4 name maybe
328+58:1 glyph ++
329+58:4 name empty-elements
330+58:19 glyph |=
331+58:22 name xs
332+58:24 tight glyph =
333+58:25 tight glyph (
334+58:26 tight name list
335+58:31 glyph !!
336+58:33 tight glyph )
32833759:3 INDENT
329−59:3 lit ~
330−60:3 NEWLINE
331−60:3 glyph [
332−60:4 tight lit ~
333−60:6 name value
334−60:11 tight glyph =
335−60:12 tight aura @t
336−60:14 tight glyph ]
337−61:1 DEDENT
338−61:1 NEWLINE
339−61:1 glyph ++
340−61:4 name unit-shape
341−61:15 glyph |=
342−61:18 name xs
343−61:20 tight glyph =
344−61:21 tight name maybe
345−62:3 INDENT
346−62:3 glyph ?-
347−62:6 name xs
348−63:5 INDENT
349−63:5 lit ~
350−63:7 glyph !!
351−64:5 NEWLINE
352−64:5 glyph [
353−64:6 tight name item
354−64:11 name rest
355−64:15 tight glyph ]
356−64:17 name item
357−64:21 DEDENT
358−64:21 DEDENT
359−64:21 NEWLINE
338+59:3 glyph ?-
339+59:6 name xs
340+60:5 INDENT
341+60:5 lit ~
342+60:7 glyph !!
343+61:5 NEWLINE
344+61:5 glyph [
345+61:6 tight name item
346+61:11 name rest
347+61:15 tight glyph ]
348+61:17 name item
349+62:1 DEDENT
350+62:1 DEDENT
351+62:1 NEWLINE
352+62:1 glyph +$
353+62:4 name maybe
354+63:3 INDENT
355+63:3 lit ~
356+64:3 NEWLINE
357+64:3 glyph [
358+64:4 tight lit ~
359+64:6 name value
360+64:11 tight glyph =
361+64:12 tight aura @t
362+64:14 tight glyph ]
363+65:1 DEDENT
364+65:1 NEWLINE
365+65:1 glyph ++
366+65:4 name unit-shape
367+65:15 glyph |=
368+65:18 name xs
369+65:20 tight glyph =
370+65:21 tight name maybe
371+66:3 INDENT
372+66:3 glyph ?-
373+66:6 name xs
374+67:5 INDENT
375+67:5 lit ~
376+67:7 glyph !!
377+68:5 NEWLINE
378+68:5 glyph [
379+68:6 tight name item
380+68:11 name rest
381+68:15 tight glyph ]
382+68:17 name item
383+68:21 DEDENT
384+68:21 DEDENT
385+68:21 NEWLINE
tests/golden/types-list-patterns/tree.txt+121−110
@@ -27,55 +27,56 @@
2727 (cell 10:5 (bind 10:6 item) (bind 10:11 rest))
2828 (wing 10:17 rest))
2929 (arm 11:5 (lit 11:5 ~) (crash 11:7))))))
30− (value 12:1 with-context
31− (gate 12:17
32− (face 12:20 xs
33− (apply 12:23 list (aura 12:29 @t)))
30+ (value 12:1 parent
31+ (gate 12:11
32+ (face 12:14 xs
33+ (apply 12:17 list (aura 12:23 @t)))
3434 (body 13:3
35− (cast 13:3
36− (ref 13:6 msg)
37− (body 14:5
38− (branch 14:5
39− (wing 14:8 xs)
40− (arm 15:7 (lit 15:7 ~) (lit 15:9 %empty))
41− (arm 16:7
42− (cell 16:7 (bind 16:8 item) (bind 16:13 rest))
43− (tuple 16:19 (lit 16:20 %item) (wing 16:26 item)))))))))
44− (value 17:1 shadow
45− (gate 17:11
46− (face 17:14 xs
47− (apply 17:17 list (aura 17:23 @t)))
48− (body 18:3
49− (branch 18:3
50− (wing 18:6 xs)
51− (arm 19:5 (lit 19:5 ~) (crash 19:7))
52− (arm 20:5
53− (cell 20:5 (bind 20:6 xs) (bind 20:9 rest))
54− (wing 20:15 xs))))))
55− (value 21:1 duplicate
56− (gate 21:14
57− (face 21:17 xs
58− (apply 21:20 list (aura 21:26 @t)))
35+ (branch 13:3
36+ (wing 13:6 xs)
37+ (arm 14:5 (lit 14:5 ~) (lit 14:7 0x1f))
38+ (arm 15:5
39+ (cell 15:5 (bind 15:6 item) (bind 15:11 rest))
40+ (cast 15:17 (aura 15:20 @u) (lit 15:23 0x1f)))))))
41+ (value 16:1 with-context
42+ (gate 16:17
43+ (face 16:20 xs
44+ (apply 16:23 list (aura 16:29 @t)))
45+ (body 17:3
46+ (cast 17:3
47+ (ref 17:6 msg)
48+ (body 18:5
49+ (branch 18:5
50+ (wing 18:8 xs)
51+ (arm 19:7 (lit 19:7 ~) (lit 19:9 %empty))
52+ (arm 20:7
53+ (cell 20:7 (bind 20:8 item) (bind 20:13 rest))
54+ (tuple 20:19 (lit 20:20 %item) (wing 20:26 item)))))))))
55+ (value 21:1 shadow
56+ (gate 21:11
57+ (face 21:14 xs
58+ (apply 21:17 list (aura 21:23 @t)))
5959 (body 22:3
6060 (branch 22:3
6161 (wing 22:6 xs)
6262 (arm 23:5 (lit 23:5 ~) (crash 23:7))
6363 (arm 24:5
64− (cell 24:5 (bind 24:6 item) (bind 24:11 item))
65− (wing 24:17 item))))))
66− (value 25:1 unknown
67− (gate 25:12
68− (bind 25:15 xs)
64+ (cell 24:5 (bind 24:6 xs) (bind 24:9 rest))
65+ (wing 24:15 xs))))))
66+ (value 25:1 duplicate
67+ (gate 25:14
68+ (face 25:17 xs
69+ (apply 25:20 list (aura 25:26 @t)))
6970 (body 26:3
7071 (branch 26:3
7172 (wing 26:6 xs)
7273 (arm 27:5 (lit 27:5 ~) (crash 27:7))
7374 (arm 28:5
74− (cell 28:5 (bind 28:6 item) (bind 28:11 rest))
75+ (cell 28:5 (bind 28:6 item) (bind 28:11 item))
7576 (wing 28:17 item))))))
76− (value 29:1 not-list
77− (gate 29:13
78− (face 29:16 xs (aura 29:19 @t))
77+ (value 29:1 unknown
78+ (gate 29:12
79+ (bind 29:15 xs)
7980 (body 30:3
8081 (branch 30:3
8182 (wing 30:6 xs)
@@ -83,86 +84,96 @@
8384 (arm 32:5
8485 (cell 32:5 (bind 32:6 item) (bind 32:11 rest))
8586 (wing 32:17 item))))))
86− (value 33:1 missing
87− (gate 33:12
88− (face 33:15 xs
89− (apply 33:18 list (aura 33:24 @t)))
87+ (value 33:1 not-list
88+ (gate 33:13
89+ (face 33:16 xs (aura 33:19 @t))
9090 (body 34:3
9191 (branch 34:3
9292 (wing 34:6 xs)
93− (arm 35:5 (lit 35:5 ~) (crash 35:7))))))
94− (value 36:1 invalid
95− (gate 36:12
96− (face 36:15 xs
97− (apply 36:18 list (aura 36:24 @t)))
98− (body 37:3
99− (branch 37:3
100− (wing 37:6 xs)
101− (arm 38:5 (lit 38:5 ~) (crash 38:7))
102− (arm 39:5
103− (cell 39:5 (lit 39:6 %tag) (bind 39:11 rest))
104− (wing 39:17 rest))))))
105− (value 40:1 unresolved
106− (gate 40:15
107− (face 40:18 xs
108− (apply 40:21 list (aura 40:27 @t)))
93+ (arm 35:5 (lit 35:5 ~) (crash 35:7))
94+ (arm 36:5
95+ (cell 36:5 (bind 36:6 item) (bind 36:11 rest))
96+ (wing 36:17 item))))))
97+ (value 37:1 missing
98+ (gate 37:12
99+ (face 37:15 xs
100+ (apply 37:18 list (aura 37:24 @t)))
101+ (body 38:3
102+ (branch 38:3
103+ (wing 38:6 xs)
104+ (arm 39:5 (lit 39:5 ~) (crash 39:7))))))
105+ (value 40:1 invalid
106+ (gate 40:12
107+ (face 40:15 xs
108+ (apply 40:18 list (aura 40:24 @t)))
109109 (body 41:3
110110 (branch 41:3
111111 (wing 41:6 xs)
112− (arm 42:5 (lit 42:5 ~) (lit 42:7 %empty))
112+ (arm 42:5 (lit 42:5 ~) (crash 42:7))
113113 (arm 43:5
114− (cell 43:5 (bind 43:6 item) (bind 43:11 rest))
115− (lit 43:17 %more))))))
116− (value 44:1 duplicate-arm
117− (gate 44:18
118− (face 44:21 xs
119− (apply 44:24 list (aura 44:30 @t)))
114+ (cell 43:5 (lit 43:6 %tag) (bind 43:11 rest))
115+ (wing 43:17 rest))))))
116+ (value 44:1 unresolved
117+ (gate 44:15
118+ (face 44:18 xs
119+ (apply 44:21 list (aura 44:27 @t)))
120120 (body 45:3
121121 (branch 45:3
122122 (wing 45:6 xs)
123− (arm 46:5 (lit 46:5 ~) (crash 46:7))
124− (arm 47:5 (lit 47:5 ~) (crash 47:7))
125− (arm 48:5
126− (cell 48:5 (bind 48:6 item) (bind 48:11 rest))
127− (wing 48:17 item))))))
128− (value 49:1 unrelated
129− (gate 49:14
130− (face 49:17 xs
131− (apply 49:20 list (aura 49:26 @t)))
132− (body 50:3
133− (trace 50:3
134− (lit 50:6 %pending)
135− (body 51:5
136− (branch 51:5
137− (wing 51:8 xs)
138− (arm 52:7 (lit 52:7 ~) (crash 52:9))
139− (arm 53:7
140− (cell 53:7 (bind 53:8 item) (bind 53:13 rest))
141− (wing 53:19 item))))))))
142− (value 54:1 empty-elements
143− (gate 54:19
144− (face 54:22 xs
145− (apply 54:25 list (void 54:31)))
146− (body 55:3
147− (branch 55:3
148− (wing 55:6 xs)
149− (arm 56:5 (lit 56:5 ~) (crash 56:7))
150− (arm 57:5
151− (cell 57:5 (bind 57:6 item) (bind 57:11 rest))
152− (wing 57:17 item))))))
153− (mold 58:1 maybe
154− (union 59:3
155− (const 59:3 ~)
156− (cell 60:3
157− (const 60:4 ~)
158− (face 60:6 value (aura 60:12 @t)))))
159− (value 61:1 unit-shape
160− (gate 61:15
161− (face 61:18 xs (ref 61:21 maybe))
162− (body 62:3
163− (branch 62:3
164− (wing 62:6 xs)
165− (arm 63:5 (lit 63:5 ~) (crash 63:7))
166− (arm 64:5
167− (cell 64:5 (bind 64:6 item) (bind 64:11 rest))
168− (wing 64:17 item)))))))
123+ (arm 46:5 (lit 46:5 ~) (lit 46:7 %empty))
124+ (arm 47:5
125+ (cell 47:5 (bind 47:6 item) (bind 47:11 rest))
126+ (lit 47:17 %more))))))
127+ (value 48:1 duplicate-arm
128+ (gate 48:18
129+ (face 48:21 xs
130+ (apply 48:24 list (aura 48:30 @t)))
131+ (body 49:3
132+ (branch 49:3
133+ (wing 49:6 xs)
134+ (arm 50:5 (lit 50:5 ~) (crash 50:7))
135+ (arm 51:5 (lit 51:5 ~) (crash 51:7))
136+ (arm 52:5
137+ (cell 52:5 (bind 52:6 item) (bind 52:11 rest))
138+ (wing 52:17 item))))))
139+ (value 53:1 unrelated
140+ (gate 53:14
141+ (face 53:17 xs
142+ (apply 53:20 list (aura 53:26 @t)))
143+ (body 54:3
144+ (trace 54:3
145+ (lit 54:6 %pending)
146+ (body 55:5
147+ (branch 55:5
148+ (wing 55:8 xs)
149+ (arm 56:7 (lit 56:7 ~) (crash 56:9))
150+ (arm 57:7
151+ (cell 57:7 (bind 57:8 item) (bind 57:13 rest))
152+ (wing 57:19 item))))))))
153+ (value 58:1 empty-elements
154+ (gate 58:19
155+ (face 58:22 xs
156+ (apply 58:25 list (void 58:31)))
157+ (body 59:3
158+ (branch 59:3
159+ (wing 59:6 xs)
160+ (arm 60:5 (lit 60:5 ~) (crash 60:7))
161+ (arm 61:5
162+ (cell 61:5 (bind 61:6 item) (bind 61:11 rest))
163+ (wing 61:17 item))))))
164+ (mold 62:1 maybe
165+ (union 63:3
166+ (const 63:3 ~)
167+ (cell 64:3
168+ (const 64:4 ~)
169+ (face 64:6 value (aura 64:12 @t)))))
170+ (value 65:1 unit-shape
171+ (gate 65:15
172+ (face 65:18 xs (ref 65:21 maybe))
173+ (body 66:3
174+ (branch 66:3
175+ (wing 66:6 xs)
176+ (arm 67:5 (lit 67:5 ~) (crash 67:7))
177+ (arm 68:5
178+ (cell 68:5 (bind 68:6 item) (bind 68:11 rest))
179+ (wing 68:17 item)))))))
tests/golden/types-list-patterns/types.txt+1
@@ -2,6 +2,7 @@ partial inference; module not checked
22+$ msg: cases proven disjoint; mold not checked
33++ first-item: $-((list @t) @t)
44++ rest-items: $-((list @t) (list @t))
5+++ parent: $-((list @t) @u)
56++ with-context: $-((list @t) msg)
67++ shadow: pattern binder shadows a name
78++ duplicate: pattern binder shadows a name
tests/golden/types-local-capitals/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Molds: "A capital in a local `++` shares the enclosing `++`'s variable of the same name if the enclosing `++` also uses it; otherwise the local `++` introduces and generalizes its own variable."
2−tests: A recursive local gate captures a capital in its enclosing sample; a bare local binder generalizes independently. Local-only capitals generalize independently, including across sibling and nested definitions; a capital used later in the enclosing body is shared. Generic mold parameters keep their own scope. Atom constraints and distinct-capital errors retain their source sites. Recursive self aliases remain monomorphic and unresolved tags remain pending.
2+tests: A recursive local gate captures a capital in its enclosing sample; a bare local binder generalizes independently. Local-only capitals generalize independently, including across sibling and nested definitions; a capital used later in the enclosing body is shared. Generic mold parameters keep their own scope. Atom constraints and distinct-capital errors retain their source sites. Recursive self aliases remain monomorphic, so incompatible calls through one report the call and argument sites, and unresolved tags remain pending.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-local-capitals/types.txt+7−1
@@ -3,7 +3,13 @@ partial inference; module not checked
33++ later: explicit capital constraints are not supported by partial inference
44++ captured: $-(A A)
55++ implicit: $-(A @p)
6−++ local-mono: local definitions need unsupported inference
6+++ local-mono: call's sample and argument types do not unify
7+/tests/golden/types-local-capitals/source.jibb:27:8: called gate has type $-(@t A)
8+ (alias ~zod)
9+ ^
10+/tests/golden/types-local-capitals/source.jibb:27:14: argument has type @p
11+ (alias ~zod)
12+ ^
713++ fresh: $-(@t @t)
814++ captured-acyclic: $-(A A)
915++ implicit-capture: $-(@t @t)
tests/golden/types-local-error-call/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Implementation plan, Risks: "Each error names both conflicting sites, with excerpts"; Grammar, Runes: "local names at the start of any body (a gate's, an arm's, a `^-`'s, a `~&`'s or a `++`'s), visible to each other and the final expression".
2+tests: a definite call mismatch inside a local `++` reports the gate and argument sites, as the same call does at top level: calling a top-level gate, a local gate defined earlier, and a top-level gate from inside a local gate's body. When a later sibling's cast fixes the untyped sample's type before a waiting call is retried, the generic message remains, since sibling order can then change the outcome: the site blamed, or, with a gate whose sample is `!!`, whether the body is accepted at all, as it is when that gate comes first.
3+expect: parses
4+expect-types: a partial inference report, not a checked module
tests/golden/types-local-error-call/source.jibbnew file+27
@@ -0,0 +1,27 @@
1+++ inc |= n=@ud n
2+++ top (inc %.y)
3+++ local |= x=@t
4+ ++ bad (inc %.y)
5+ x
6+++ local-gate |= x=@t
7+ ++ twice |= y=@ud (inc y)
8+ ++ bad (twice x)
9+ bad
10+++ in-gate |= x=@t
11+ ++ bump |= y=@t (inc y)
12+ (bump x)
13+++ blame-order |= x
14+ ++ a (c x)
15+ ++ b ^- @ud x
16+ ++ c |= y=@t y
17+ a
18+++ blame-empty |= x
19+ ++ a (c x)
20+ ++ b ^- @ud x
21+ ++ c |= y=!! y
22+ a
23+++ blame-empty-c-first |= x
24+ ++ c |= y=!! y
25+ ++ a (c x)
26+ ++ b ^- @ud x
27+ a
tests/golden/types-local-error-call/tokens.txtnew file+171
@@ -0,0 +1,171 @@
1+1:1 glyph ++
2+1:4 name inc
3+1:8 glyph |=
4+1:11 name n
5+1:12 tight glyph =
6+1:13 tight aura @ud
7+1:17 name n
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name top
11+2:8 glyph (
12+2:9 tight name inc
13+2:13 lit %.y
14+2:16 tight glyph )
15+3:1 NEWLINE
16+3:1 glyph ++
17+3:4 name local
18+3:10 glyph |=
19+3:13 name x
20+3:14 tight glyph =
21+3:15 tight aura @t
22+4:3 INDENT
23+4:3 glyph ++
24+4:6 name bad
25+4:10 glyph (
26+4:11 tight name inc
27+4:15 lit %.y
28+4:18 tight glyph )
29+5:3 NEWLINE
30+5:3 name x
31+6:1 DEDENT
32+6:1 NEWLINE
33+6:1 glyph ++
34+6:4 name local-gate
35+6:15 glyph |=
36+6:18 name x
37+6:19 tight glyph =
38+6:20 tight aura @t
39+7:3 INDENT
40+7:3 glyph ++
41+7:6 name twice
42+7:12 glyph |=
43+7:15 name y
44+7:16 tight glyph =
45+7:17 tight aura @ud
46+7:21 glyph (
47+7:22 tight name inc
48+7:26 name y
49+7:27 tight glyph )
50+8:3 NEWLINE
51+8:3 glyph ++
52+8:6 name bad
53+8:10 glyph (
54+8:11 tight name twice
55+8:17 name x
56+8:18 tight glyph )
57+9:3 NEWLINE
58+9:3 name bad
59+10:1 DEDENT
60+10:1 NEWLINE
61+10:1 glyph ++
62+10:4 name in-gate
63+10:12 glyph |=
64+10:15 name x
65+10:16 tight glyph =
66+10:17 tight aura @t
67+11:3 INDENT
68+11:3 glyph ++
69+11:6 name bump
70+11:11 glyph |=
71+11:14 name y
72+11:15 tight glyph =
73+11:16 tight aura @t
74+11:19 glyph (
75+11:20 tight name inc
76+11:24 name y
77+11:25 tight glyph )
78+12:3 NEWLINE
79+12:3 glyph (
80+12:4 tight name bump
81+12:9 name x
82+12:10 tight glyph )
83+13:1 DEDENT
84+13:1 NEWLINE
85+13:1 glyph ++
86+13:4 name blame-order
87+13:16 glyph |=
88+13:19 name x
89+14:3 INDENT
90+14:3 glyph ++
91+14:6 name a
92+14:8 glyph (
93+14:9 tight name c
94+14:11 name x
95+14:12 tight glyph )
96+15:3 NEWLINE
97+15:3 glyph ++
98+15:6 name b
99+15:8 glyph ^-
100+15:11 aura @ud
101+15:15 name x
102+16:3 NEWLINE
103+16:3 glyph ++
104+16:6 name c
105+16:8 glyph |=
106+16:11 name y
107+16:12 tight glyph =
108+16:13 tight aura @t
109+16:16 name y
110+17:3 NEWLINE
111+17:3 name a
112+18:1 DEDENT
113+18:1 NEWLINE
114+18:1 glyph ++
115+18:4 name blame-empty
116+18:16 glyph |=
117+18:19 name x
118+19:3 INDENT
119+19:3 glyph ++
120+19:6 name a
121+19:8 glyph (
122+19:9 tight name c
123+19:11 name x
124+19:12 tight glyph )
125+20:3 NEWLINE
126+20:3 glyph ++
127+20:6 name b
128+20:8 glyph ^-
129+20:11 aura @ud
130+20:15 name x
131+21:3 NEWLINE
132+21:3 glyph ++
133+21:6 name c
134+21:8 glyph |=
135+21:11 name y
136+21:12 tight glyph =
137+21:13 tight glyph !!
138+21:16 name y
139+22:3 NEWLINE
140+22:3 name a
141+23:1 DEDENT
142+23:1 NEWLINE
143+23:1 glyph ++
144+23:4 name blame-empty-c-first
145+23:24 glyph |=
146+23:27 name x
147+24:3 INDENT
148+24:3 glyph ++
149+24:6 name c
150+24:8 glyph |=
151+24:11 name y
152+24:12 tight glyph =
153+24:13 tight glyph !!
154+24:16 name y
155+25:3 NEWLINE
156+25:3 glyph ++
157+25:6 name a
158+25:8 glyph (
159+25:9 tight name c
160+25:11 name x
161+25:12 tight glyph )
162+26:3 NEWLINE
163+26:3 glyph ++
164+26:6 name b
165+26:8 glyph ^-
166+26:11 aura @ud
167+26:15 name x
168+27:3 NEWLINE
169+27:3 name a
170+27:4 DEDENT
171+27:4 NEWLINE
tests/golden/types-local-error-call/tree.txtnew file+82
@@ -0,0 +1,82 @@
1+(module
2+ (value 1:1 inc
3+ (gate 1:8
4+ (face 1:11 n (aura 1:13 @ud))
5+ (wing 1:17 n)))
6+ (value 2:1 top
7+ (group 2:8
8+ (call 2:9 (wing 2:9 inc) (lit 2:13 %.y))))
9+ (value 3:1 local
10+ (gate 3:10
11+ (face 3:13 x (aura 3:15 @t))
12+ (body 4:3
13+ (value 4:3 bad
14+ (group 4:10
15+ (call 4:11 (wing 4:11 inc) (lit 4:15 %.y))))
16+ (wing 5:3 x))))
17+ (value 6:1 local-gate
18+ (gate 6:15
19+ (face 6:18 x (aura 6:20 @t))
20+ (body 7:3
21+ (value 7:3 twice
22+ (gate 7:12
23+ (face 7:15 y (aura 7:17 @ud))
24+ (group 7:21
25+ (call 7:22 (wing 7:22 inc) (wing 7:26 y)))))
26+ (value 8:3 bad
27+ (group 8:10
28+ (call 8:11 (wing 8:11 twice) (wing 8:17 x))))
29+ (wing 9:3 bad))))
30+ (value 10:1 in-gate
31+ (gate 10:12
32+ (face 10:15 x (aura 10:17 @t))
33+ (body 11:3
34+ (value 11:3 bump
35+ (gate 11:11
36+ (face 11:14 y (aura 11:16 @t))
37+ (group 11:19
38+ (call 11:20 (wing 11:20 inc) (wing 11:24 y)))))
39+ (group 12:3
40+ (call 12:4 (wing 12:4 bump) (wing 12:9 x))))))
41+ (value 13:1 blame-order
42+ (gate 13:16
43+ (bind 13:19 x)
44+ (body 14:3
45+ (value 14:3 a
46+ (group 14:8
47+ (call 14:9 (wing 14:9 c) (wing 14:11 x))))
48+ (value 15:3 b
49+ (cast 15:8 (aura 15:11 @ud) (wing 15:15 x)))
50+ (value 16:3 c
51+ (gate 16:8
52+ (face 16:11 y (aura 16:13 @t))
53+ (wing 16:16 y)))
54+ (wing 17:3 a))))
55+ (value 18:1 blame-empty
56+ (gate 18:16
57+ (bind 18:19 x)
58+ (body 19:3
59+ (value 19:3 a
60+ (group 19:8
61+ (call 19:9 (wing 19:9 c) (wing 19:11 x))))
62+ (value 20:3 b
63+ (cast 20:8 (aura 20:11 @ud) (wing 20:15 x)))
64+ (value 21:3 c
65+ (gate 21:8
66+ (face 21:11 y (void 21:13))
67+ (wing 21:16 y)))
68+ (wing 22:3 a))))
69+ (value 23:1 blame-empty-c-first
70+ (gate 23:24
71+ (bind 23:27 x)
72+ (body 24:3
73+ (value 24:3 c
74+ (gate 24:8
75+ (face 24:11 y (void 24:13))
76+ (wing 24:16 y)))
77+ (value 25:3 a
78+ (group 25:8
79+ (call 25:9 (wing 25:9 c) (wing 25:11 x))))
80+ (value 26:3 b
81+ (cast 26:8 (aura 26:11 @ud) (wing 26:15 x)))
82+ (wing 27:3 a)))))
tests/golden/types-local-error-call/types.txtnew file+33
@@ -0,0 +1,33 @@
1+partial inference; module not checked
2+++ inc: $-(@ud @ud)
3+++ top: call's sample and argument types do not unify
4+/tests/golden/types-local-error-call/source.jibb:2:9: called gate has type $-(@ud @ud)
5+++ top (inc %.y)
6+ ^
7+/tests/golden/types-local-error-call/source.jibb:2:13: argument has type ?
8+++ top (inc %.y)
9+ ^
10+++ local: call's sample and argument types do not unify
11+/tests/golden/types-local-error-call/source.jibb:4:11: called gate has type $-(@ud @ud)
12+ ++ bad (inc %.y)
13+ ^
14+/tests/golden/types-local-error-call/source.jibb:4:15: argument has type ?
15+ ++ bad (inc %.y)
16+ ^
17+++ local-gate: call's sample and argument types do not unify
18+/tests/golden/types-local-error-call/source.jibb:8:11: called gate has type $-(@ud @ud)
19+ ++ bad (twice x)
20+ ^
21+/tests/golden/types-local-error-call/source.jibb:8:17: argument has type @t
22+ ++ bad (twice x)
23+ ^
24+++ in-gate: call's sample and argument types do not unify
25+/tests/golden/types-local-error-call/source.jibb:11:20: called gate has type $-(@ud @ud)
26+ ++ bump |= y=@t (inc y)
27+ ^
28+/tests/golden/types-local-error-call/source.jibb:11:24: argument has type @t
29+ ++ bump |= y=@t (inc y)
30+ ^
31+++ blame-order: local definitions need unsupported inference
32+++ blame-empty: local definitions need unsupported inference
33+++ blame-empty-c-first: $-(!! !!)
tests/golden/types-local-error-cast/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Implementation plan, Risks: "Each error names both conflicting sites, with excerpts"; Grammar, Runes: "local names at the start of any body (a gate's, an arm's, a `^-`'s, a `~&`'s or a `++`'s), visible to each other and the final expression".
2+tests: a definite cast mismatch inside a local `++` reports the mold and expression sites, as the same cast does at top level: in a local value, in a later sibling that an earlier one waits on, after a local gate's self-call, in a nested body, and beside a sibling that uses the untyped sample without constraining it. A later sibling that infers but is then unsupported, because it forces an explicit capital to a concrete type or leaves an uncertain type hole, reports its own unsupported message, even after an earlier mismatch: a sibling's cast of the untyped sample to `!!` makes every cast of it fit, so an earlier failure can pass on a retry. When a sibling has constrained the untyped sample before the definitions stall, a mismatch that another order accepts keeps the generic message.
3+expect: parses
4+expect-types: a partial inference report, not a checked module
tests/golden/types-local-error-cast/source.jibbnew file+56
@@ -0,0 +1,56 @@
1+++ top ^- @t %.y
2+++ local |= x=@t
3+ ++ flag ^- @t %.y
4+ x
5+++ waiting |= x=@t
6+ ++ first (second x)
7+ ++ second |= y=@t ^- @ud y
8+ first
9+++ after-self |= x=@t
10+ ++ recur |= y=@t
11+ ?- %.y
12+ %.y (recur y)
13+ %.n ^- @ud y
14+ (recur x)
15+++ nested |= x=@t
16+ ++ outer |= y=@t
17+ ++ inner ^- @p y
18+ inner
19+ (outer x)
20+++ mask-capital |= x=A
21+ ++ a ^- @ud "s"
22+ ++ b ^- @t x
23+ x
24+++ mask-after-progress |= x=A
25+ ++ a ^- @ud "s"
26+ ++ ok x
27+ ++ b ^- @t x
28+ x
29+++ same |= [a=A b=A] a
30+++ mask-hole |= x
31+ ++ a ^- @ud "s"
32+ ++ b ^- _ (same x 1)
33+ ^- @ux x
34+++ captured |= x
35+ ++ a ^- @ud "s"
36+ ++ b x
37+ a
38+++ empty-mask |= x
39+ ++ a [(^- @ux x) (^- @t x)]
40+ ++ g ^- !! x
41+ ++ d |= y=B ^- @t y
42+ a
43+++ empty-ok |= x
44+ ++ a [(^- @ux x) (^- @t x)]
45+ ++ g ^- !! x
46+ a
47+++ empty-stall |= x
48+ ++ a ^- @ux x
49+ ++ b ^- @t x
50+ ++ g ^- !! x
51+ a
52+++ empty-stall-g-first |= x
53+ ++ g ^- !! x
54+ ++ a ^- @ux x
55+ ++ b ^- @t x
56+ a
tests/golden/types-local-error-cast/tokens.txtnew file+339
@@ -0,0 +1,339 @@
1+1:1 glyph ++
2+1:4 name top
3+1:8 glyph ^-
4+1:11 aura @t
5+1:14 lit %.y
6+2:1 NEWLINE
7+2:1 glyph ++
8+2:4 name local
9+2:10 glyph |=
10+2:13 name x
11+2:14 tight glyph =
12+2:15 tight aura @t
13+3:3 INDENT
14+3:3 glyph ++
15+3:6 name flag
16+3:11 glyph ^-
17+3:14 aura @t
18+3:17 lit %.y
19+4:3 NEWLINE
20+4:3 name x
21+5:1 DEDENT
22+5:1 NEWLINE
23+5:1 glyph ++
24+5:4 name waiting
25+5:12 glyph |=
26+5:15 name x
27+5:16 tight glyph =
28+5:17 tight aura @t
29+6:3 INDENT
30+6:3 glyph ++
31+6:6 name first
32+6:12 glyph (
33+6:13 tight name second
34+6:20 name x
35+6:21 tight glyph )
36+7:3 NEWLINE
37+7:3 glyph ++
38+7:6 name second
39+7:13 glyph |=
40+7:16 name y
41+7:17 tight glyph =
42+7:18 tight aura @t
43+7:21 glyph ^-
44+7:24 aura @ud
45+7:28 name y
46+8:3 NEWLINE
47+8:3 name first
48+9:1 DEDENT
49+9:1 NEWLINE
50+9:1 glyph ++
51+9:4 name after-self
52+9:15 glyph |=
53+9:18 name x
54+9:19 tight glyph =
55+9:20 tight aura @t
56+10:3 INDENT
57+10:3 glyph ++
58+10:6 name recur
59+10:12 glyph |=
60+10:15 name y
61+10:16 tight glyph =
62+10:17 tight aura @t
63+11:5 INDENT
64+11:5 glyph ?-
65+11:8 lit %.y
66+12:7 INDENT
67+12:7 lit %.y
68+12:11 glyph (
69+12:12 tight name recur
70+12:18 name y
71+12:19 tight glyph )
72+13:7 NEWLINE
73+13:7 lit %.n
74+13:11 glyph ^-
75+13:14 aura @ud
76+13:18 name y
77+14:3 DEDENT
78+14:3 DEDENT
79+14:3 NEWLINE
80+14:3 glyph (
81+14:4 tight name recur
82+14:10 name x
83+14:11 tight glyph )
84+15:1 DEDENT
85+15:1 NEWLINE
86+15:1 glyph ++
87+15:4 name nested
88+15:11 glyph |=
89+15:14 name x
90+15:15 tight glyph =
91+15:16 tight aura @t
92+16:3 INDENT
93+16:3 glyph ++
94+16:6 name outer
95+16:12 glyph |=
96+16:15 name y
97+16:16 tight glyph =
98+16:17 tight aura @t
99+17:5 INDENT
100+17:5 glyph ++
101+17:8 name inner
102+17:14 glyph ^-
103+17:17 aura @p
104+17:20 name y
105+18:5 NEWLINE
106+18:5 name inner
107+19:3 DEDENT
108+19:3 NEWLINE
109+19:3 glyph (
110+19:4 tight name outer
111+19:10 name x
112+19:11 tight glyph )
113+20:1 DEDENT
114+20:1 NEWLINE
115+20:1 glyph ++
116+20:4 name mask-capital
117+20:17 glyph |=
118+20:20 name x
119+20:21 tight glyph =
120+20:22 tight tvar A
121+21:3 INDENT
122+21:3 glyph ++
123+21:6 name a
124+21:8 glyph ^-
125+21:11 aura @ud
126+21:15 str "s"
127+22:3 NEWLINE
128+22:3 glyph ++
129+22:6 name b
130+22:8 glyph ^-
131+22:11 aura @t
132+22:14 name x
133+23:3 NEWLINE
134+23:3 name x
135+24:1 DEDENT
136+24:1 NEWLINE
137+24:1 glyph ++
138+24:4 name mask-after-progress
139+24:24 glyph |=
140+24:27 name x
141+24:28 tight glyph =
142+24:29 tight tvar A
143+25:3 INDENT
144+25:3 glyph ++
145+25:6 name a
146+25:8 glyph ^-
147+25:11 aura @ud
148+25:15 str "s"
149+26:3 NEWLINE
150+26:3 glyph ++
151+26:6 name ok
152+26:9 name x
153+27:3 NEWLINE
154+27:3 glyph ++
155+27:6 name b
156+27:8 glyph ^-
157+27:11 aura @t
158+27:14 name x
159+28:3 NEWLINE
160+28:3 name x
161+29:1 DEDENT
162+29:1 NEWLINE
163+29:1 glyph ++
164+29:4 name same
165+29:9 glyph |=
166+29:12 glyph [
167+29:13 tight name a
168+29:14 tight glyph =
169+29:15 tight tvar A
170+29:17 name b
171+29:18 tight glyph =
172+29:19 tight tvar A
173+29:20 tight glyph ]
174+29:22 name a
175+30:1 NEWLINE
176+30:1 glyph ++
177+30:4 name mask-hole
178+30:14 glyph |=
179+30:17 name x
180+31:3 INDENT
181+31:3 glyph ++
182+31:6 name a
183+31:8 glyph ^-
184+31:11 aura @ud
185+31:15 str "s"
186+32:3 NEWLINE
187+32:3 glyph ++
188+32:6 name b
189+32:8 glyph ^-
190+32:11 glyph _
191+32:13 glyph (
192+32:14 tight name same
193+32:19 name x
194+32:21 lit 1
195+32:22 tight glyph )
196+33:3 NEWLINE
197+33:3 glyph ^-
198+33:6 aura @ux
199+33:10 name x
200+34:1 DEDENT
201+34:1 NEWLINE
202+34:1 glyph ++
203+34:4 name captured
204+34:13 glyph |=
205+34:16 name x
206+35:3 INDENT
207+35:3 glyph ++
208+35:6 name a
209+35:8 glyph ^-
210+35:11 aura @ud
211+35:15 str "s"
212+36:3 NEWLINE
213+36:3 glyph ++
214+36:6 name b
215+36:8 name x
216+37:3 NEWLINE
217+37:3 name a
218+38:1 DEDENT
219+38:1 NEWLINE
220+38:1 glyph ++
221+38:4 name empty-mask
222+38:15 glyph |=
223+38:18 name x
224+39:3 INDENT
225+39:3 glyph ++
226+39:6 name a
227+39:8 glyph [
228+39:9 tight glyph (
229+39:10 tight glyph ^-
230+39:13 aura @ux
231+39:17 name x
232+39:18 tight glyph )
233+39:20 glyph (
234+39:21 tight glyph ^-
235+39:24 aura @t
236+39:27 name x
237+39:28 tight glyph )
238+39:29 tight glyph ]
239+40:3 NEWLINE
240+40:3 glyph ++
241+40:6 name g
242+40:8 glyph ^-
243+40:11 glyph !!
244+40:14 name x
245+41:3 NEWLINE
246+41:3 glyph ++
247+41:6 name d
248+41:8 glyph |=
249+41:11 name y
250+41:12 tight glyph =
251+41:13 tight tvar B
252+41:15 glyph ^-
253+41:18 aura @t
254+41:21 name y
255+42:3 NEWLINE
256+42:3 name a
257+43:1 DEDENT
258+43:1 NEWLINE
259+43:1 glyph ++
260+43:4 name empty-ok
261+43:13 glyph |=
262+43:16 name x
263+44:3 INDENT
264+44:3 glyph ++
265+44:6 name a
266+44:8 glyph [
267+44:9 tight glyph (
268+44:10 tight glyph ^-
269+44:13 aura @ux
270+44:17 name x
271+44:18 tight glyph )
272+44:20 glyph (
273+44:21 tight glyph ^-
274+44:24 aura @t
275+44:27 name x
276+44:28 tight glyph )
277+44:29 tight glyph ]
278+45:3 NEWLINE
279+45:3 glyph ++
280+45:6 name g
281+45:8 glyph ^-
282+45:11 glyph !!
283+45:14 name x
284+46:3 NEWLINE
285+46:3 name a
286+47:1 DEDENT
287+47:1 NEWLINE
288+47:1 glyph ++
289+47:4 name empty-stall
290+47:16 glyph |=
291+47:19 name x
292+48:3 INDENT
293+48:3 glyph ++
294+48:6 name a
295+48:8 glyph ^-
296+48:11 aura @ux
297+48:15 name x
298+49:3 NEWLINE
299+49:3 glyph ++
300+49:6 name b
301+49:8 glyph ^-
302+49:11 aura @t
303+49:14 name x
304+50:3 NEWLINE
305+50:3 glyph ++
306+50:6 name g
307+50:8 glyph ^-
308+50:11 glyph !!
309+50:14 name x
310+51:3 NEWLINE
311+51:3 name a
312+52:1 DEDENT
313+52:1 NEWLINE
314+52:1 glyph ++
315+52:4 name empty-stall-g-first
316+52:24 glyph |=
317+52:27 name x
318+53:3 INDENT
319+53:3 glyph ++
320+53:6 name g
321+53:8 glyph ^-
322+53:11 glyph !!
323+53:14 name x
324+54:3 NEWLINE
325+54:3 glyph ++
326+54:6 name a
327+54:8 glyph ^-
328+54:11 aura @ux
329+54:15 name x
330+55:3 NEWLINE
331+55:3 glyph ++
332+55:6 name b
333+55:8 glyph ^-
334+55:11 aura @t
335+55:14 name x
336+56:3 NEWLINE
337+56:3 name a
338+56:4 DEDENT
339+56:4 NEWLINE
tests/golden/types-local-error-cast/tree.txtnew file+151
@@ -0,0 +1,151 @@
1+(module
2+ (value 1:1 top
3+ (cast 1:8 (aura 1:11 @t) (lit 1:14 %.y)))
4+ (value 2:1 local
5+ (gate 2:10
6+ (face 2:13 x (aura 2:15 @t))
7+ (body 3:3
8+ (value 3:3 flag
9+ (cast 3:11 (aura 3:14 @t) (lit 3:17 %.y)))
10+ (wing 4:3 x))))
11+ (value 5:1 waiting
12+ (gate 5:12
13+ (face 5:15 x (aura 5:17 @t))
14+ (body 6:3
15+ (value 6:3 first
16+ (group 6:12
17+ (call 6:13 (wing 6:13 second) (wing 6:20 x))))
18+ (value 7:3 second
19+ (gate 7:13
20+ (face 7:16 y (aura 7:18 @t))
21+ (cast 7:21 (aura 7:24 @ud) (wing 7:28 y))))
22+ (wing 8:3 first))))
23+ (value 9:1 after-self
24+ (gate 9:15
25+ (face 9:18 x (aura 9:20 @t))
26+ (body 10:3
27+ (value 10:3 recur
28+ (gate 10:12
29+ (face 10:15 y (aura 10:17 @t))
30+ (body 11:5
31+ (branch 11:5
32+ (lit 11:8 %.y)
33+ (arm 12:7
34+ (lit 12:7 %.y)
35+ (group 12:11
36+ (call 12:12 (wing 12:12 recur) (wing 12:18 y))))
37+ (arm 13:7
38+ (lit 13:7 %.n)
39+ (cast 13:11 (aura 13:14 @ud) (wing 13:18 y)))))))
40+ (group 14:3
41+ (call 14:4 (wing 14:4 recur) (wing 14:10 x))))))
42+ (value 15:1 nested
43+ (gate 15:11
44+ (face 15:14 x (aura 15:16 @t))
45+ (body 16:3
46+ (value 16:3 outer
47+ (gate 16:12
48+ (face 16:15 y (aura 16:17 @t))
49+ (body 17:5
50+ (value 17:5 inner
51+ (cast 17:14 (aura 17:17 @p) (wing 17:20 y)))
52+ (wing 18:5 inner))))
53+ (group 19:3
54+ (call 19:4 (wing 19:4 outer) (wing 19:10 x))))))
55+ (value 20:1 mask-capital
56+ (gate 20:17
57+ (face 20:20 x (tvar 20:22 A))
58+ (body 21:3
59+ (value 21:3 a
60+ (cast 21:8 (aura 21:11 @ud) (str 21:15 "s")))
61+ (value 22:3 b
62+ (cast 22:8 (aura 22:11 @t) (wing 22:14 x)))
63+ (wing 23:3 x))))
64+ (value 24:1 mask-after-progress
65+ (gate 24:24
66+ (face 24:27 x (tvar 24:29 A))
67+ (body 25:3
68+ (value 25:3 a
69+ (cast 25:8 (aura 25:11 @ud) (str 25:15 "s")))
70+ (value 26:3 ok (wing 26:9 x))
71+ (value 27:3 b
72+ (cast 27:8 (aura 27:11 @t) (wing 27:14 x)))
73+ (wing 28:3 x))))
74+ (value 29:1 same
75+ (gate 29:9
76+ (cell 29:12
77+ (face 29:13 a (tvar 29:15 A))
78+ (face 29:17 b (tvar 29:19 A)))
79+ (wing 29:22 a)))
80+ (value 30:1 mask-hole
81+ (gate 30:14
82+ (bind 30:17 x)
83+ (body 31:3
84+ (value 31:3 a
85+ (cast 31:8 (aura 31:11 @ud) (str 31:15 "s")))
86+ (value 32:3 b
87+ (cast 32:8
88+ (hole 32:11)
89+ (group 32:13
90+ (call 32:14 (wing 32:14 same) (wing 32:19 x) (lit 32:21 1)))))
91+ (cast 33:3 (aura 33:6 @ux) (wing 33:10 x)))))
92+ (value 34:1 captured
93+ (gate 34:13
94+ (bind 34:16 x)
95+ (body 35:3
96+ (value 35:3 a
97+ (cast 35:8 (aura 35:11 @ud) (str 35:15 "s")))
98+ (value 36:3 b (wing 36:8 x))
99+ (wing 37:3 a))))
100+ (value 38:1 empty-mask
101+ (gate 38:15
102+ (bind 38:18 x)
103+ (body 39:3
104+ (value 39:3 a
105+ (tuple 39:8
106+ (group 39:9
107+ (cast 39:10 (aura 39:13 @ux) (wing 39:17 x)))
108+ (group 39:20
109+ (cast 39:21 (aura 39:24 @t) (wing 39:27 x)))))
110+ (value 40:3 g
111+ (cast 40:8 (void 40:11) (wing 40:14 x)))
112+ (value 41:3 d
113+ (gate 41:8
114+ (face 41:11 y (tvar 41:13 B))
115+ (cast 41:15 (aura 41:18 @t) (wing 41:21 y))))
116+ (wing 42:3 a))))
117+ (value 43:1 empty-ok
118+ (gate 43:13
119+ (bind 43:16 x)
120+ (body 44:3
121+ (value 44:3 a
122+ (tuple 44:8
123+ (group 44:9
124+ (cast 44:10 (aura 44:13 @ux) (wing 44:17 x)))
125+ (group 44:20
126+ (cast 44:21 (aura 44:24 @t) (wing 44:27 x)))))
127+ (value 45:3 g
128+ (cast 45:8 (void 45:11) (wing 45:14 x)))
129+ (wing 46:3 a))))
130+ (value 47:1 empty-stall
131+ (gate 47:16
132+ (bind 47:19 x)
133+ (body 48:3
134+ (value 48:3 a
135+ (cast 48:8 (aura 48:11 @ux) (wing 48:15 x)))
136+ (value 49:3 b
137+ (cast 49:8 (aura 49:11 @t) (wing 49:14 x)))
138+ (value 50:3 g
139+ (cast 50:8 (void 50:11) (wing 50:14 x)))
140+ (wing 51:3 a))))
141+ (value 52:1 empty-stall-g-first
142+ (gate 52:24
143+ (bind 52:27 x)
144+ (body 53:3
145+ (value 53:3 g
146+ (cast 53:8 (void 53:11) (wing 53:14 x)))
147+ (value 54:3 a
148+ (cast 54:8 (aura 54:11 @ux) (wing 54:15 x)))
149+ (value 55:3 b
150+ (cast 55:8 (aura 55:11 @t) (wing 55:14 x)))
151+ (wing 56:3 a)))))
tests/golden/types-local-error-cast/types.txtnew file+54
@@ -0,0 +1,54 @@
1+partial inference; module not checked
2+++ top: cast mold and expression type do not unify
3+/tests/golden/types-local-error-cast/source.jibb:1:11: cast mold has type @t
4+++ top ^- @t %.y
5+ ^
6+/tests/golden/types-local-error-cast/source.jibb:1:14: expression has type ?
7+++ top ^- @t %.y
8+ ^
9+++ local: cast mold and expression type do not unify
10+/tests/golden/types-local-error-cast/source.jibb:3:14: cast mold has type @t
11+ ++ flag ^- @t %.y
12+ ^
13+/tests/golden/types-local-error-cast/source.jibb:3:17: expression has type ?
14+ ++ flag ^- @t %.y
15+ ^
16+++ waiting: cast mold and expression type do not unify
17+/tests/golden/types-local-error-cast/source.jibb:7:24: cast mold has type @ud
18+ ++ second |= y=@t ^- @ud y
19+ ^
20+/tests/golden/types-local-error-cast/source.jibb:7:28: expression has type @t
21+ ++ second |= y=@t ^- @ud y
22+ ^
23+++ after-self: cast mold and expression type do not unify
24+/tests/golden/types-local-error-cast/source.jibb:13:14: cast mold has type @ud
25+ %.n ^- @ud y
26+ ^
27+/tests/golden/types-local-error-cast/source.jibb:13:18: expression has type @t
28+ %.n ^- @ud y
29+ ^
30+++ nested: cast mold and expression type do not unify
31+/tests/golden/types-local-error-cast/source.jibb:17:17: cast mold has type @p
32+ ++ inner ^- @p y
33+ ^
34+/tests/golden/types-local-error-cast/source.jibb:17:20: expression has type @t
35+ ++ inner ^- @p y
36+ ^
37+++ mask-capital: explicit capital constraints are not supported by partial inference
38+++ mask-after-progress: explicit capital constraints are not supported by partial inference
39+++ same: $-([a=A b=A] A)
40+++ mask-hole: type hole needs unsupported inference
41+/tests/golden/types-local-error-cast/source.jibb:32:11: type hole
42+ ++ b ^- _ (same x 1)
43+ ^
44+++ captured: cast mold and expression type do not unify
45+/tests/golden/types-local-error-cast/source.jibb:35:11: cast mold has type @ud
46+ ++ a ^- @ud "s"
47+ ^
48+/tests/golden/types-local-error-cast/source.jibb:35:15: expression has type @t
49+ ++ a ^- @ud "s"
50+ ^
51+++ empty-mask: explicit capital constraints are not supported by partial inference
52+++ empty-ok: $-(!! [@ux @t])
53+++ empty-stall: local definitions need unsupported inference
54+++ empty-stall-g-first: $-(!! @ux)
tests/golden/types-local-error-forward/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Modules: "Names may refer to each other in any order"; Runes: "local names at the start of any body (a gate's, an arm's, a `^-`'s, a `~&`'s or a `++`'s), visible to each other and the final expression".
2+tests: a local value or gate that refers forward to a later sibling still infers once that sibling does, through a chain; a reference to a sibling not yet inferred is not reported as an error. When a sibling never infers, because it names something unavailable or its tag stays pending, the waiting definition keeps the generic unsupported message; when the sibling infers but forces an explicit capital to a concrete type, its unsupported message stays.
3+expect: parses
4+expect-types: a partial inference report, not a checked module
tests/golden/types-local-error-forward/source.jibbnew file+26
@@ -0,0 +1,26 @@
1+++ inc |= n=@ud n
2+++ forward |= x=@ud
3+ ++ first (second x)
4+ ++ second |= y=@ud (inc y)
5+ first
6+++ forward-value |= x=@t
7+ ++ first ^- @t second
8+ ++ second x
9+ first
10+++ forward-chain |= x=@ud
11+ ++ first (second x)
12+ ++ second |= y=@ud (third y)
13+ ++ third |= z=@ud (inc z)
14+ first
15+++ waits-on-unknown |= x=@t
16+ ++ first ^- @t second
17+ ++ second nope
18+ first
19+++ waits-on-pending |= x=@t
20+ ++ first ^- @t second
21+ ++ second %orphan
22+ first
23+++ waits-then-capital |= x=A
24+ ++ first ^- @t second
25+ ++ second ^- @t x
26+ first
tests/golden/types-local-error-forward/tokens.txtnew file+157
@@ -0,0 +1,157 @@
1+1:1 glyph ++
2+1:4 name inc
3+1:8 glyph |=
4+1:11 name n
5+1:12 tight glyph =
6+1:13 tight aura @ud
7+1:17 name n
8+2:1 NEWLINE
9+2:1 glyph ++
10+2:4 name forward
11+2:12 glyph |=
12+2:15 name x
13+2:16 tight glyph =
14+2:17 tight aura @ud
15+3:3 INDENT
16+3:3 glyph ++
17+3:6 name first
18+3:12 glyph (
19+3:13 tight name second
20+3:20 name x
21+3:21 tight glyph )
22+4:3 NEWLINE
23+4:3 glyph ++
24+4:6 name second
25+4:13 glyph |=
26+4:16 name y
27+4:17 tight glyph =
28+4:18 tight aura @ud
29+4:22 glyph (
30+4:23 tight name inc
31+4:27 name y
32+4:28 tight glyph )
33+5:3 NEWLINE
34+5:3 name first
35+6:1 DEDENT
36+6:1 NEWLINE
37+6:1 glyph ++
38+6:4 name forward-value
39+6:18 glyph |=
40+6:21 name x
41+6:22 tight glyph =
42+6:23 tight aura @t
43+7:3 INDENT
44+7:3 glyph ++
45+7:6 name first
46+7:12 glyph ^-
47+7:15 aura @t
48+7:18 name second
49+8:3 NEWLINE
50+8:3 glyph ++
51+8:6 name second
52+8:13 name x
53+9:3 NEWLINE
54+9:3 name first
55+10:1 DEDENT
56+10:1 NEWLINE
57+10:1 glyph ++
58+10:4 name forward-chain
59+10:18 glyph |=
60+10:21 name x
61+10:22 tight glyph =
62+10:23 tight aura @ud
63+11:3 INDENT
64+11:3 glyph ++
65+11:6 name first
66+11:12 glyph (
67+11:13 tight name second
68+11:20 name x
69+11:21 tight glyph )
70+12:3 NEWLINE
71+12:3 glyph ++
72+12:6 name second
73+12:13 glyph |=
74+12:16 name y
75+12:17 tight glyph =
76+12:18 tight aura @ud
77+12:22 glyph (
78+12:23 tight name third
79+12:29 name y
80+12:30 tight glyph )
81+13:3 NEWLINE
82+13:3 glyph ++
83+13:6 name third
84+13:12 glyph |=
85+13:15 name z
86+13:16 tight glyph =
87+13:17 tight aura @ud
88+13:21 glyph (
89+13:22 tight name inc
90+13:26 name z
91+13:27 tight glyph )
92+14:3 NEWLINE
93+14:3 name first
94+15:1 DEDENT
95+15:1 NEWLINE
96+15:1 glyph ++
97+15:4 name waits-on-unknown
98+15:21 glyph |=
99+15:24 name x
100+15:25 tight glyph =
101+15:26 tight aura @t
102+16:3 INDENT
103+16:3 glyph ++
104+16:6 name first
105+16:12 glyph ^-
106+16:15 aura @t
107+16:18 name second
108+17:3 NEWLINE
109+17:3 glyph ++
110+17:6 name second
111+17:13 name nope
112+18:3 NEWLINE
113+18:3 name first
114+19:1 DEDENT
115+19:1 NEWLINE
116+19:1 glyph ++
117+19:4 name waits-on-pending
118+19:21 glyph |=
119+19:24 name x
120+19:25 tight glyph =
121+19:26 tight aura @t
122+20:3 INDENT
123+20:3 glyph ++
124+20:6 name first
125+20:12 glyph ^-
126+20:15 aura @t
127+20:18 name second
128+21:3 NEWLINE
129+21:3 glyph ++
130+21:6 name second
131+21:13 lit %orphan
132+22:3 NEWLINE
133+22:3 name first
134+23:1 DEDENT
135+23:1 NEWLINE
136+23:1 glyph ++
137+23:4 name waits-then-capital
138+23:23 glyph |=
139+23:26 name x
140+23:27 tight glyph =
141+23:28 tight tvar A
142+24:3 INDENT
143+24:3 glyph ++
144+24:6 name first
145+24:12 glyph ^-
146+24:15 aura @t
147+24:18 name second
148+25:3 NEWLINE
149+25:3 glyph ++
150+25:6 name second
151+25:13 glyph ^-
152+25:16 aura @t
153+25:19 name x
154+26:3 NEWLINE
155+26:3 name first
156+26:8 DEDENT
157+26:8 NEWLINE
tests/golden/types-local-error-forward/tree.txtnew file+69
@@ -0,0 +1,69 @@
1+(module
2+ (value 1:1 inc
3+ (gate 1:8
4+ (face 1:11 n (aura 1:13 @ud))
5+ (wing 1:17 n)))
6+ (value 2:1 forward
7+ (gate 2:12
8+ (face 2:15 x (aura 2:17 @ud))
9+ (body 3:3
10+ (value 3:3 first
11+ (group 3:12
12+ (call 3:13 (wing 3:13 second) (wing 3:20 x))))
13+ (value 4:3 second
14+ (gate 4:13
15+ (face 4:16 y (aura 4:18 @ud))
16+ (group 4:22
17+ (call 4:23 (wing 4:23 inc) (wing 4:27 y)))))
18+ (wing 5:3 first))))
19+ (value 6:1 forward-value
20+ (gate 6:18
21+ (face 6:21 x (aura 6:23 @t))
22+ (body 7:3
23+ (value 7:3 first
24+ (cast 7:12 (aura 7:15 @t) (wing 7:18 second)))
25+ (value 8:3 second (wing 8:13 x))
26+ (wing 9:3 first))))
27+ (value 10:1 forward-chain
28+ (gate 10:18
29+ (face 10:21 x (aura 10:23 @ud))
30+ (body 11:3
31+ (value 11:3 first
32+ (group 11:12
33+ (call 11:13 (wing 11:13 second) (wing 11:20 x))))
34+ (value 12:3 second
35+ (gate 12:13
36+ (face 12:16 y (aura 12:18 @ud))
37+ (group 12:22
38+ (call 12:23 (wing 12:23 third) (wing 12:29 y)))))
39+ (value 13:3 third
40+ (gate 13:12
41+ (face 13:15 z (aura 13:17 @ud))
42+ (group 13:21
43+ (call 13:22 (wing 13:22 inc) (wing 13:26 z)))))
44+ (wing 14:3 first))))
45+ (value 15:1 waits-on-unknown
46+ (gate 15:21
47+ (face 15:24 x (aura 15:26 @t))
48+ (body 16:3
49+ (value 16:3 first
50+ (cast 16:12 (aura 16:15 @t) (wing 16:18 second)))
51+ (value 17:3 second (wing 17:13 nope))
52+ (wing 18:3 first))))
53+ (value 19:1 waits-on-pending
54+ (gate 19:21
55+ (face 19:24 x (aura 19:26 @t))
56+ (body 20:3
57+ (value 20:3 first
58+ (cast 20:12 (aura 20:15 @t) (wing 20:18 second)))
59+ (value 21:3 second (lit 21:13 %orphan))
60+ (wing 22:3 first))))
61+ (value 23:1 waits-then-capital
62+ (gate 23:23
63+ (face 23:26 x (tvar 23:28 A))
64+ (body 24:3
65+ (value 24:3 first
66+ (cast 24:12 (aura 24:15 @t) (wing 24:18 second)))
67+ (value 25:3 second
68+ (cast 25:13 (aura 25:16 @t) (wing 25:19 x)))
69+ (wing 26:3 first)))))
tests/golden/types-local-error-forward/types.txtnew file+8
@@ -0,0 +1,8 @@
1+partial inference; module not checked
2+++ inc: $-(@ud @ud)
3+++ forward: $-(@ud @ud)
4+++ forward-value: $-(@t @t)
5+++ forward-chain: $-(@ud @ud)
6+++ waits-on-unknown: local definitions need unsupported inference
7+++ waits-on-pending: local definitions need unsupported inference
8+++ waits-then-capital: explicit capital constraints are not supported by partial inference
tests/golden/types-local-error-order/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Implementation plan, Risks: "Each error names both conflicting sites, with excerpts"; Grammar, Runes: "local names at the start of any body (a gate's, an arm's, a `^-`'s, a `~&`'s or a `++`'s), visible to each other and the final expression".
2+tests: a cast mismatch inside a local `++` is not reported as an error while a sibling that might fix the untyped sample's type waits without sites, since another order, or support for that sibling, could let the body pass. `flat-mask`, `outer-mask` and `rec-widen` now infer because their decimal and hexadecimal branch results unify at `@ux`. The remaining siblings wait on their own nested stall (`nest-order`) or, in a local recursive gate, on the gate itself (`rec-order`, `rec-mask`) and keep the generic message; the `-ok`, `-g-first` and `-top` controls show the orders and forms the checker accepts or already leaves generic.
3+expect: parses
4+expect-types: a partial inference report, not a checked module
tests/golden/types-local-error-order/source.jibbnew file+80
@@ -0,0 +1,80 @@
1+++ rec-order |= z=@t
2+ ++ f |= x
3+ ++ p [(^- @ux x) (f x)]
4+ ++ b [(^- @ux x) (^- @t x)]
5+ ++ g [(^- !! x) (f x)]
6+ b
7+ z
8+++ rec-order-g-first |= z=@t
9+ ++ f |= x
10+ ++ g [(^- !! x) (f x)]
11+ ++ p [(^- @ux x) (f x)]
12+ ++ b [(^- @ux x) (^- @t x)]
13+ b
14+ z
15+++ rec-order-top |= x
16+ ++ p [(^- @ux x) (rec-order-top x)]
17+ ++ b [(^- @ux x) (^- @t x)]
18+ ++ g [(^- !! x) (rec-order-top x)]
19+ b
20+++ flat-mask |= x
21+ ++ g [(^- !! x) c]
22+ ++ b [(^- @ux x) (^- @t x)]
23+ ++ c ?- %.y
24+ %.y 1
25+ %.n 0x2
26+ b
27+++ flat-mask-ok |= x
28+ ++ g [(^- !! x) c]
29+ ++ b [(^- @ux x) (^- @t x)]
30+ ++ c ^- @ 1
31+ b
32+++ outer-mask |= x
33+ ++ a
34+ ++ g [(^- !! x) c]
35+ ++ b [(^- @ux x) (^- @t x)]
36+ b
37+ ++ c ?- %.y
38+ %.y 1
39+ %.n 0x2
40+ a
41+++ nest-order |= x
42+ ++ g [(^- !! x) c]
43+ ++ b [(^- @ux x) (^- @t x)]
44+ ++ c |= w
45+ ++ a2 ^- @ux w
46+ ++ b2 ^- @t w
47+ ++ g2 ^- !! w
48+ a2
49+ b
50+++ nest-order-ok |= x
51+ ++ g [(^- !! x) c]
52+ ++ b [(^- @ux x) (^- @t x)]
53+ ++ c |= w
54+ ++ g2 ^- !! w
55+ ++ a2 ^- @ux w
56+ ++ b2 ^- @t w
57+ a2
58+ b
59+++ rec-mask |= z=@t
60+ ++ f |= x
61+ ++ g [(^- !! x) (f x)]
62+ ++ b [(^- @ux x) (^- @t x)]
63+ ++ h foo
64+ b
65+ z
66+++ rec-ok |= z=@t
67+ ++ f |= x
68+ ++ g [(^- !! x) (f x)]
69+ ++ b [(^- @ux x) (^- @t x)]
70+ b
71+ z
72+++ rec-widen |= z=@t
73+ ++ f |= x
74+ ++ g [(^- !! x) (f x)]
75+ ++ b [(^- @ux x) (^- @t x)]
76+ ++ h ?- %.y
77+ %.y 1
78+ %.n 0x2
79+ b
80+ z
tests/golden/types-local-error-order/tokens.txtnew file+588
@@ -0,0 +1,588 @@
1+1:1 glyph ++
2+1:4 name rec-order
3+1:14 glyph |=
4+1:17 name z
5+1:18 tight glyph =
6+1:19 tight aura @t
7+2:3 INDENT
8+2:3 glyph ++
9+2:6 name f
10+2:8 glyph |=
11+2:11 name x
12+3:5 INDENT
13+3:5 glyph ++
14+3:8 name p
15+3:10 glyph [
16+3:11 tight glyph (
17+3:12 tight glyph ^-
18+3:15 aura @ux
19+3:19 name x
20+3:20 tight glyph )
21+3:22 glyph (
22+3:23 tight name f
23+3:25 name x
24+3:26 tight glyph )
25+3:27 tight glyph ]
26+4:5 NEWLINE
27+4:5 glyph ++
28+4:8 name b
29+4:10 glyph [
30+4:11 tight glyph (
31+4:12 tight glyph ^-
32+4:15 aura @ux
33+4:19 name x
34+4:20 tight glyph )
35+4:22 glyph (
36+4:23 tight glyph ^-
37+4:26 aura @t
38+4:29 name x
39+4:30 tight glyph )
40+4:31 tight glyph ]
41+5:5 NEWLINE
42+5:5 glyph ++
43+5:8 name g
44+5:10 glyph [
45+5:11 tight glyph (
46+5:12 tight glyph ^-
47+5:15 glyph !!
48+5:18 name x
49+5:19 tight glyph )
50+5:21 glyph (
51+5:22 tight name f
52+5:24 name x
53+5:25 tight glyph )
54+5:26 tight glyph ]
55+6:5 NEWLINE
56+6:5 name b
57+7:3 DEDENT
58+7:3 NEWLINE
59+7:3 name z
60+8:1 DEDENT
61+8:1 NEWLINE
62+8:1 glyph ++
63+8:4 name rec-order-g-first
64+8:22 glyph |=
65+8:25 name z
66+8:26 tight glyph =
67+8:27 tight aura @t
68+9:3 INDENT
69+9:3 glyph ++
70+9:6 name f
71+9:8 glyph |=
72+9:11 name x
73+10:5 INDENT
74+10:5 glyph ++
75+10:8 name g
76+10:10 glyph [
77+10:11 tight glyph (
78+10:12 tight glyph ^-
79+10:15 glyph !!
80+10:18 name x
81+10:19 tight glyph )
82+10:21 glyph (
83+10:22 tight name f
84+10:24 name x
85+10:25 tight glyph )
86+10:26 tight glyph ]
87+11:5 NEWLINE
88+11:5 glyph ++
89+11:8 name p
90+11:10 glyph [
91+11:11 tight glyph (
92+11:12 tight glyph ^-
93+11:15 aura @ux
94+11:19 name x
95+11:20 tight glyph )
96+11:22 glyph (
97+11:23 tight name f
98+11:25 name x
99+11:26 tight glyph )
100+11:27 tight glyph ]
101+12:5 NEWLINE
102+12:5 glyph ++
103+12:8 name b
104+12:10 glyph [
105+12:11 tight glyph (
106+12:12 tight glyph ^-
107+12:15 aura @ux
108+12:19 name x
109+12:20 tight glyph )
110+12:22 glyph (
111+12:23 tight glyph ^-
112+12:26 aura @t
113+12:29 name x
114+12:30 tight glyph )
115+12:31 tight glyph ]
116+13:5 NEWLINE
117+13:5 name b
118+14:3 DEDENT
119+14:3 NEWLINE
120+14:3 name z
121+15:1 DEDENT
122+15:1 NEWLINE
123+15:1 glyph ++
124+15:4 name rec-order-top
125+15:18 glyph |=
126+15:21 name x
127+16:3 INDENT
128+16:3 glyph ++
129+16:6 name p
130+16:8 glyph [
131+16:9 tight glyph (
132+16:10 tight glyph ^-
133+16:13 aura @ux
134+16:17 name x
135+16:18 tight glyph )
136+16:20 glyph (
137+16:21 tight name rec-order-top
138+16:35 name x
139+16:36 tight glyph )
140+16:37 tight glyph ]
141+17:3 NEWLINE
142+17:3 glyph ++
143+17:6 name b
144+17:8 glyph [
145+17:9 tight glyph (
146+17:10 tight glyph ^-
147+17:13 aura @ux
148+17:17 name x
149+17:18 tight glyph )
150+17:20 glyph (
151+17:21 tight glyph ^-
152+17:24 aura @t
153+17:27 name x
154+17:28 tight glyph )
155+17:29 tight glyph ]
156+18:3 NEWLINE
157+18:3 glyph ++
158+18:6 name g
159+18:8 glyph [
160+18:9 tight glyph (
161+18:10 tight glyph ^-
162+18:13 glyph !!
163+18:16 name x
164+18:17 tight glyph )
165+18:19 glyph (
166+18:20 tight name rec-order-top
167+18:34 name x
168+18:35 tight glyph )
169+18:36 tight glyph ]
170+19:3 NEWLINE
171+19:3 name b
172+20:1 DEDENT
173+20:1 NEWLINE
174+20:1 glyph ++
175+20:4 name flat-mask
176+20:14 glyph |=
177+20:17 name x
178+21:3 INDENT
179+21:3 glyph ++
180+21:6 name g
181+21:8 glyph [
182+21:9 tight glyph (
183+21:10 tight glyph ^-
184+21:13 glyph !!
185+21:16 name x
186+21:17 tight glyph )
187+21:19 name c
188+21:20 tight glyph ]
189+22:3 NEWLINE
190+22:3 glyph ++
191+22:6 name b
192+22:8 glyph [
193+22:9 tight glyph (
194+22:10 tight glyph ^-
195+22:13 aura @ux
196+22:17 name x
197+22:18 tight glyph )
198+22:20 glyph (
199+22:21 tight glyph ^-
200+22:24 aura @t
201+22:27 name x
202+22:28 tight glyph )
203+22:29 tight glyph ]
204+23:3 NEWLINE
205+23:3 glyph ++
206+23:6 name c
207+23:8 glyph ?-
208+23:11 lit %.y
209+24:5 INDENT
210+24:5 lit %.y
211+24:9 lit 1
212+25:5 NEWLINE
213+25:5 lit %.n
214+25:9 lit 0x2
215+26:3 DEDENT
216+26:3 NEWLINE
217+26:3 name b
218+27:1 DEDENT
219+27:1 NEWLINE
220+27:1 glyph ++
221+27:4 name flat-mask-ok
222+27:17 glyph |=
223+27:20 name x
224+28:3 INDENT
225+28:3 glyph ++
226+28:6 name g
227+28:8 glyph [
228+28:9 tight glyph (
229+28:10 tight glyph ^-
230+28:13 glyph !!
231+28:16 name x
232+28:17 tight glyph )
233+28:19 name c
234+28:20 tight glyph ]
235+29:3 NEWLINE
236+29:3 glyph ++
237+29:6 name b
238+29:8 glyph [
239+29:9 tight glyph (
240+29:10 tight glyph ^-
241+29:13 aura @ux
242+29:17 name x
243+29:18 tight glyph )
244+29:20 glyph (
245+29:21 tight glyph ^-
246+29:24 aura @t
247+29:27 name x
248+29:28 tight glyph )
249+29:29 tight glyph ]
250+30:3 NEWLINE
251+30:3 glyph ++
252+30:6 name c
253+30:8 glyph ^-
254+30:11 aura @
255+30:13 lit 1
256+31:3 NEWLINE
257+31:3 name b
258+32:1 DEDENT
259+32:1 NEWLINE
260+32:1 glyph ++
261+32:4 name outer-mask
262+32:15 glyph |=
263+32:18 name x
264+33:3 INDENT
265+33:3 glyph ++
266+33:6 name a
267+34:5 INDENT
268+34:5 glyph ++
269+34:8 name g
270+34:10 glyph [
271+34:11 tight glyph (
272+34:12 tight glyph ^-
273+34:15 glyph !!
274+34:18 name x
275+34:19 tight glyph )
276+34:21 name c
277+34:22 tight glyph ]
278+35:5 NEWLINE
279+35:5 glyph ++
280+35:8 name b
281+35:10 glyph [
282+35:11 tight glyph (
283+35:12 tight glyph ^-
284+35:15 aura @ux
285+35:19 name x
286+35:20 tight glyph )
287+35:22 glyph (
288+35:23 tight glyph ^-
289+35:26 aura @t
290+35:29 name x
291+35:30 tight glyph )
292+35:31 tight glyph ]
293+36:5 NEWLINE
294+36:5 name b
295+37:3 DEDENT
296+37:3 NEWLINE
297+37:3 glyph ++
298+37:6 name c
299+37:8 glyph ?-
300+37:11 lit %.y
301+38:5 INDENT
302+38:5 lit %.y
303+38:9 lit 1
304+39:5 NEWLINE
305+39:5 lit %.n
306+39:9 lit 0x2
307+40:3 DEDENT
308+40:3 NEWLINE
309+40:3 name a
310+41:1 DEDENT
311+41:1 NEWLINE
312+41:1 glyph ++
313+41:4 name nest-order
314+41:15 glyph |=
315+41:18 name x
316+42:3 INDENT
317+42:3 glyph ++
318+42:6 name g
319+42:8 glyph [
320+42:9 tight glyph (
321+42:10 tight glyph ^-
322+42:13 glyph !!
323+42:16 name x
324+42:17 tight glyph )
325+42:19 name c
326+42:20 tight glyph ]
327+43:3 NEWLINE
328+43:3 glyph ++
329+43:6 name b
330+43:8 glyph [
331+43:9 tight glyph (
332+43:10 tight glyph ^-
333+43:13 aura @ux
334+43:17 name x
335+43:18 tight glyph )
336+43:20 glyph (
337+43:21 tight glyph ^-
338+43:24 aura @t
339+43:27 name x
340+43:28 tight glyph )
341+43:29 tight glyph ]
342+44:3 NEWLINE
343+44:3 glyph ++
344+44:6 name c
345+44:8 glyph |=
346+44:11 name w
347+45:5 INDENT
348+45:5 glyph ++
349+45:8 name a2
350+45:11 glyph ^-
351+45:14 aura @ux
352+45:18 name w
353+46:5 NEWLINE
354+46:5 glyph ++
355+46:8 name b2
356+46:11 glyph ^-
357+46:14 aura @t
358+46:17 name w
359+47:5 NEWLINE
360+47:5 glyph ++
361+47:8 name g2
362+47:11 glyph ^-
363+47:14 glyph !!
364+47:17 name w
365+48:5 NEWLINE
366+48:5 name a2
367+49:3 DEDENT
368+49:3 NEWLINE
369+49:3 name b
370+50:1 DEDENT
371+50:1 NEWLINE
372+50:1 glyph ++
373+50:4 name nest-order-ok
374+50:18 glyph |=
375+50:21 name x
376+51:3 INDENT
377+51:3 glyph ++
378+51:6 name g
379+51:8 glyph [
380+51:9 tight glyph (
381+51:10 tight glyph ^-
382+51:13 glyph !!
383+51:16 name x
384+51:17 tight glyph )
385+51:19 name c
386+51:20 tight glyph ]
387+52:3 NEWLINE
388+52:3 glyph ++
389+52:6 name b
390+52:8 glyph [
391+52:9 tight glyph (
392+52:10 tight glyph ^-
393+52:13 aura @ux
394+52:17 name x
395+52:18 tight glyph )
396+52:20 glyph (
397+52:21 tight glyph ^-
398+52:24 aura @t
399+52:27 name x
400+52:28 tight glyph )
401+52:29 tight glyph ]
402+53:3 NEWLINE
403+53:3 glyph ++
404+53:6 name c
405+53:8 glyph |=
406+53:11 name w
407+54:5 INDENT
408+54:5 glyph ++
409+54:8 name g2
410+54:11 glyph ^-
411+54:14 glyph !!
412+54:17 name w
413+55:5 NEWLINE
414+55:5 glyph ++
415+55:8 name a2
416+55:11 glyph ^-
417+55:14 aura @ux
418+55:18 name w
419+56:5 NEWLINE
420+56:5 glyph ++
421+56:8 name b2
422+56:11 glyph ^-
423+56:14 aura @t
424+56:17 name w
425+57:5 NEWLINE
426+57:5 name a2
427+58:3 DEDENT
428+58:3 NEWLINE
429+58:3 name b
430+59:1 DEDENT
431+59:1 NEWLINE
432+59:1 glyph ++
433+59:4 name rec-mask
434+59:13 glyph |=
435+59:16 name z
436+59:17 tight glyph =
437+59:18 tight aura @t
438+60:3 INDENT
439+60:3 glyph ++
440+60:6 name f
441+60:8 glyph |=
442+60:11 name x
443+61:5 INDENT
444+61:5 glyph ++
445+61:8 name g
446+61:10 glyph [
447+61:11 tight glyph (
448+61:12 tight glyph ^-
449+61:15 glyph !!
450+61:18 name x
451+61:19 tight glyph )
452+61:21 glyph (
453+61:22 tight name f
454+61:24 name x
455+61:25 tight glyph )
456+61:26 tight glyph ]
457+62:5 NEWLINE
458+62:5 glyph ++
459+62:8 name b
460+62:10 glyph [
461+62:11 tight glyph (
462+62:12 tight glyph ^-
463+62:15 aura @ux
464+62:19 name x
465+62:20 tight glyph )
466+62:22 glyph (
467+62:23 tight glyph ^-
468+62:26 aura @t
469+62:29 name x
470+62:30 tight glyph )
471+62:31 tight glyph ]
472+63:5 NEWLINE
473+63:5 glyph ++
474+63:8 name h
475+63:10 name foo
476+64:5 NEWLINE
477+64:5 name b
478+65:3 DEDENT
479+65:3 NEWLINE
480+65:3 name z
481+66:1 DEDENT
482+66:1 NEWLINE
483+66:1 glyph ++
484+66:4 name rec-ok
485+66:11 glyph |=
486+66:14 name z
487+66:15 tight glyph =
488+66:16 tight aura @t
489+67:3 INDENT
490+67:3 glyph ++
491+67:6 name f
492+67:8 glyph |=
493+67:11 name x
494+68:5 INDENT
495+68:5 glyph ++
496+68:8 name g
497+68:10 glyph [
498+68:11 tight glyph (
499+68:12 tight glyph ^-
500+68:15 glyph !!
501+68:18 name x
502+68:19 tight glyph )
503+68:21 glyph (
504+68:22 tight name f
505+68:24 name x
506+68:25 tight glyph )
507+68:26 tight glyph ]
508+69:5 NEWLINE
509+69:5 glyph ++
510+69:8 name b
511+69:10 glyph [
512+69:11 tight glyph (
513+69:12 tight glyph ^-
514+69:15 aura @ux
515+69:19 name x
516+69:20 tight glyph )
517+69:22 glyph (
518+69:23 tight glyph ^-
519+69:26 aura @t
520+69:29 name x
521+69:30 tight glyph )
522+69:31 tight glyph ]
523+70:5 NEWLINE
524+70:5 name b
525+71:3 DEDENT
526+71:3 NEWLINE
527+71:3 name z
528+72:1 DEDENT
529+72:1 NEWLINE
530+72:1 glyph ++
531+72:4 name rec-widen
532+72:14 glyph |=
533+72:17 name z
534+72:18 tight glyph =
535+72:19 tight aura @t
536+73:3 INDENT
537+73:3 glyph ++
538+73:6 name f
539+73:8 glyph |=
540+73:11 name x
541+74:5 INDENT
542+74:5 glyph ++
543+74:8 name g
544+74:10 glyph [
545+74:11 tight glyph (
546+74:12 tight glyph ^-
547+74:15 glyph !!
548+74:18 name x
549+74:19 tight glyph )
550+74:21 glyph (
551+74:22 tight name f
552+74:24 name x
553+74:25 tight glyph )
554+74:26 tight glyph ]
555+75:5 NEWLINE
556+75:5 glyph ++
557+75:8 name b
558+75:10 glyph [
559+75:11 tight glyph (
560+75:12 tight glyph ^-
561+75:15 aura @ux
562+75:19 name x
563+75:20 tight glyph )
564+75:22 glyph (
565+75:23 tight glyph ^-
566+75:26 aura @t
567+75:29 name x
568+75:30 tight glyph )
569+75:31 tight glyph ]
570+76:5 NEWLINE
571+76:5 glyph ++
572+76:8 name h
573+76:10 glyph ?-
574+76:13 lit %.y
575+77:7 INDENT
576+77:7 lit %.y
577+77:11 lit 1
578+78:7 NEWLINE
579+78:7 lit %.n
580+78:11 lit 0x2
581+79:5 DEDENT
582+79:5 NEWLINE
583+79:5 name b
584+80:3 DEDENT
585+80:3 NEWLINE
586+80:3 name z
587+80:4 DEDENT
588+80:4 NEWLINE
tests/golden/types-local-error-order/tree.txtnew file+269
@@ -0,0 +1,269 @@
1+(module
2+ (value 1:1 rec-order
3+ (gate 1:14
4+ (face 1:17 z (aura 1:19 @t))
5+ (body 2:3
6+ (value 2:3 f
7+ (gate 2:8
8+ (bind 2:11 x)
9+ (body 3:5
10+ (value 3:5 p
11+ (tuple 3:10
12+ (group 3:11
13+ (cast 3:12 (aura 3:15 @ux) (wing 3:19 x)))
14+ (group 3:22
15+ (call 3:23 (wing 3:23 f) (wing 3:25 x)))))
16+ (value 4:5 b
17+ (tuple 4:10
18+ (group 4:11
19+ (cast 4:12 (aura 4:15 @ux) (wing 4:19 x)))
20+ (group 4:22
21+ (cast 4:23 (aura 4:26 @t) (wing 4:29 x)))))
22+ (value 5:5 g
23+ (tuple 5:10
24+ (group 5:11
25+ (cast 5:12 (void 5:15) (wing 5:18 x)))
26+ (group 5:21
27+ (call 5:22 (wing 5:22 f) (wing 5:24 x)))))
28+ (wing 6:5 b))))
29+ (wing 7:3 z))))
30+ (value 8:1 rec-order-g-first
31+ (gate 8:22
32+ (face 8:25 z (aura 8:27 @t))
33+ (body 9:3
34+ (value 9:3 f
35+ (gate 9:8
36+ (bind 9:11 x)
37+ (body 10:5
38+ (value 10:5 g
39+ (tuple 10:10
40+ (group 10:11
41+ (cast 10:12 (void 10:15) (wing 10:18 x)))
42+ (group 10:21
43+ (call 10:22 (wing 10:22 f) (wing 10:24 x)))))
44+ (value 11:5 p
45+ (tuple 11:10
46+ (group 11:11
47+ (cast 11:12 (aura 11:15 @ux) (wing 11:19 x)))
48+ (group 11:22
49+ (call 11:23 (wing 11:23 f) (wing 11:25 x)))))
50+ (value 12:5 b
51+ (tuple 12:10
52+ (group 12:11
53+ (cast 12:12 (aura 12:15 @ux) (wing 12:19 x)))
54+ (group 12:22
55+ (cast 12:23 (aura 12:26 @t) (wing 12:29 x)))))
56+ (wing 13:5 b))))
57+ (wing 14:3 z))))
58+ (value 15:1 rec-order-top
59+ (gate 15:18
60+ (bind 15:21 x)
61+ (body 16:3
62+ (value 16:3 p
63+ (tuple 16:8
64+ (group 16:9
65+ (cast 16:10 (aura 16:13 @ux) (wing 16:17 x)))
66+ (group 16:20
67+ (call 16:21 (wing 16:21 rec-order-top) (wing 16:35 x)))))
68+ (value 17:3 b
69+ (tuple 17:8
70+ (group 17:9
71+ (cast 17:10 (aura 17:13 @ux) (wing 17:17 x)))
72+ (group 17:20
73+ (cast 17:21 (aura 17:24 @t) (wing 17:27 x)))))
74+ (value 18:3 g
75+ (tuple 18:8
76+ (group 18:9
77+ (cast 18:10 (void 18:13) (wing 18:16 x)))
78+ (group 18:19
79+ (call 18:20 (wing 18:20 rec-order-top) (wing 18:34 x)))))
80+ (wing 19:3 b))))
81+ (value 20:1 flat-mask
82+ (gate 20:14
83+ (bind 20:17 x)
84+ (body 21:3
85+ (value 21:3 g
86+ (tuple 21:8
87+ (group 21:9
88+ (cast 21:10 (void 21:13) (wing 21:16 x)))
89+ (wing 21:19 c)))
90+ (value 22:3 b
91+ (tuple 22:8
92+ (group 22:9
93+ (cast 22:10 (aura 22:13 @ux) (wing 22:17 x)))
94+ (group 22:20
95+ (cast 22:21 (aura 22:24 @t) (wing 22:27 x)))))
96+ (value 23:3 c
97+ (branch 23:8
98+ (lit 23:11 %.y)
99+ (arm 24:5 (lit 24:5 %.y) (lit 24:9 1))
100+ (arm 25:5 (lit 25:5 %.n) (lit 25:9 0x2))))
101+ (wing 26:3 b))))
102+ (value 27:1 flat-mask-ok
103+ (gate 27:17
104+ (bind 27:20 x)
105+ (body 28:3
106+ (value 28:3 g
107+ (tuple 28:8
108+ (group 28:9
109+ (cast 28:10 (void 28:13) (wing 28:16 x)))
110+ (wing 28:19 c)))
111+ (value 29:3 b
112+ (tuple 29:8
113+ (group 29:9
114+ (cast 29:10 (aura 29:13 @ux) (wing 29:17 x)))
115+ (group 29:20
116+ (cast 29:21 (aura 29:24 @t) (wing 29:27 x)))))
117+ (value 30:3 c
118+ (cast 30:8 (aura 30:11 @) (lit 30:13 1)))
119+ (wing 31:3 b))))
120+ (value 32:1 outer-mask
121+ (gate 32:15
122+ (bind 32:18 x)
123+ (body 33:3
124+ (value 33:3 a
125+ (body 34:5
126+ (value 34:5 g
127+ (tuple 34:10
128+ (group 34:11
129+ (cast 34:12 (void 34:15) (wing 34:18 x)))
130+ (wing 34:21 c)))
131+ (value 35:5 b
132+ (tuple 35:10
133+ (group 35:11
134+ (cast 35:12 (aura 35:15 @ux) (wing 35:19 x)))
135+ (group 35:22
136+ (cast 35:23 (aura 35:26 @t) (wing 35:29 x)))))
137+ (wing 36:5 b)))
138+ (value 37:3 c
139+ (branch 37:8
140+ (lit 37:11 %.y)
141+ (arm 38:5 (lit 38:5 %.y) (lit 38:9 1))
142+ (arm 39:5 (lit 39:5 %.n) (lit 39:9 0x2))))
143+ (wing 40:3 a))))
144+ (value 41:1 nest-order
145+ (gate 41:15
146+ (bind 41:18 x)
147+ (body 42:3
148+ (value 42:3 g
149+ (tuple 42:8
150+ (group 42:9
151+ (cast 42:10 (void 42:13) (wing 42:16 x)))
152+ (wing 42:19 c)))
153+ (value 43:3 b
154+ (tuple 43:8
155+ (group 43:9
156+ (cast 43:10 (aura 43:13 @ux) (wing 43:17 x)))
157+ (group 43:20
158+ (cast 43:21 (aura 43:24 @t) (wing 43:27 x)))))
159+ (value 44:3 c
160+ (gate 44:8
161+ (bind 44:11 w)
162+ (body 45:5
163+ (value 45:5 a2
164+ (cast 45:11 (aura 45:14 @ux) (wing 45:18 w)))
165+ (value 46:5 b2
166+ (cast 46:11 (aura 46:14 @t) (wing 46:17 w)))
167+ (value 47:5 g2
168+ (cast 47:11 (void 47:14) (wing 47:17 w)))
169+ (wing 48:5 a2))))
170+ (wing 49:3 b))))
171+ (value 50:1 nest-order-ok
172+ (gate 50:18
173+ (bind 50:21 x)
174+ (body 51:3
175+ (value 51:3 g
176+ (tuple 51:8
177+ (group 51:9
178+ (cast 51:10 (void 51:13) (wing 51:16 x)))
179+ (wing 51:19 c)))
180+ (value 52:3 b
181+ (tuple 52:8
182+ (group 52:9
183+ (cast 52:10 (aura 52:13 @ux) (wing 52:17 x)))
184+ (group 52:20
185+ (cast 52:21 (aura 52:24 @t) (wing 52:27 x)))))
186+ (value 53:3 c
187+ (gate 53:8
188+ (bind 53:11 w)
189+ (body 54:5
190+ (value 54:5 g2
191+ (cast 54:11 (void 54:14) (wing 54:17 w)))
192+ (value 55:5 a2
193+ (cast 55:11 (aura 55:14 @ux) (wing 55:18 w)))
194+ (value 56:5 b2
195+ (cast 56:11 (aura 56:14 @t) (wing 56:17 w)))
196+ (wing 57:5 a2))))
197+ (wing 58:3 b))))
198+ (value 59:1 rec-mask
199+ (gate 59:13
200+ (face 59:16 z (aura 59:18 @t))
201+ (body 60:3
202+ (value 60:3 f
203+ (gate 60:8
204+ (bind 60:11 x)
205+ (body 61:5
206+ (value 61:5 g
207+ (tuple 61:10
208+ (group 61:11
209+ (cast 61:12 (void 61:15) (wing 61:18 x)))
210+ (group 61:21
211+ (call 61:22 (wing 61:22 f) (wing 61:24 x)))))
212+ (value 62:5 b
213+ (tuple 62:10
214+ (group 62:11
215+ (cast 62:12 (aura 62:15 @ux) (wing 62:19 x)))
216+ (group 62:22
217+ (cast 62:23 (aura 62:26 @t) (wing 62:29 x)))))
218+ (value 63:5 h (wing 63:10 foo))
219+ (wing 64:5 b))))
220+ (wing 65:3 z))))
221+ (value 66:1 rec-ok
222+ (gate 66:11
223+ (face 66:14 z (aura 66:16 @t))
224+ (body 67:3
225+ (value 67:3 f
226+ (gate 67:8
227+ (bind 67:11 x)
228+ (body 68:5
229+ (value 68:5 g
230+ (tuple 68:10
231+ (group 68:11
232+ (cast 68:12 (void 68:15) (wing 68:18 x)))
233+ (group 68:21
234+ (call 68:22 (wing 68:22 f) (wing 68:24 x)))))
235+ (value 69:5 b
236+ (tuple 69:10
237+ (group 69:11
238+ (cast 69:12 (aura 69:15 @ux) (wing 69:19 x)))
239+ (group 69:22
240+ (cast 69:23 (aura 69:26 @t) (wing 69:29 x)))))
241+ (wing 70:5 b))))
242+ (wing 71:3 z))))
243+ (value 72:1 rec-widen
244+ (gate 72:14
245+ (face 72:17 z (aura 72:19 @t))
246+ (body 73:3
247+ (value 73:3 f
248+ (gate 73:8
249+ (bind 73:11 x)
250+ (body 74:5
251+ (value 74:5 g
252+ (tuple 74:10
253+ (group 74:11
254+ (cast 74:12 (void 74:15) (wing 74:18 x)))
255+ (group 74:21
256+ (call 74:22 (wing 74:22 f) (wing 74:24 x)))))
257+ (value 75:5 b
258+ (tuple 75:10
259+ (group 75:11
260+ (cast 75:12 (aura 75:15 @ux) (wing 75:19 x)))
261+ (group 75:22
262+ (cast 75:23 (aura 75:26 @t) (wing 75:29 x)))))
263+ (value 76:5 h
264+ (branch 76:10
265+ (lit 76:13 %.y)
266+ (arm 77:7 (lit 77:7 %.y) (lit 77:11 1))
267+ (arm 78:7 (lit 78:7 %.n) (lit 78:11 0x2))))
268+ (wing 79:5 b))))
269+ (wing 80:3 z)))))
tests/golden/types-local-error-order/types.txtnew file+12
@@ -0,0 +1,12 @@
1+partial inference; module not checked
2+++ rec-order: local definitions need unsupported inference
3+++ rec-order-g-first: $-(@t @t)
4+++ rec-order-top: local definitions need unsupported inference
5+++ flat-mask: $-(!! [@ux @t])
6+++ flat-mask-ok: $-(!! [@ux @t])
7+++ outer-mask: $-(!! [@ux @t])
8+++ nest-order: local definitions need unsupported inference
9+++ nest-order-ok: $-(!! [@ux @t])
10+++ rec-mask: local definitions need unsupported inference
11+++ rec-ok: $-(@t @t)
12+++ rec-widen: $-(@t @t)
tests/golden/types-local-recursive/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Modules: "Gates may call themselves and their siblings; other values can't depend on themselves, even through a gate"; Molds: "Type variables are capitals, generalized per `++`."
2−tests: A body-local recursive gate uses a monomorphic self reference and generalizes independently where allowed. Recursive list copy, capture, bare-binder polymorphism and a mutual gate cycle infer; name collisions, value cycles, unresolved tags, incompatible recursive aliases, self-application and explicit-capital forcing remain unsupported in this fragment.
2+tests: A body-local recursive gate uses a monomorphic self reference and generalizes independently where allowed. Recursive list copy, capture, bare-binder polymorphism and a mutual gate cycle infer. Incompatible calls through a recursive alias, and self-application, report the call and argument sites, as they do at top level; name collisions, value cycles, unresolved tags and explicit-capital forcing remain unsupported in this fragment.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-local-recursive/types.txt+15−3
@@ -6,7 +6,19 @@ partial inference; module not checked
66++ cycle: local definitions need unsupported inference
77++ mutual: $-(@t A)
88++ pending: local definitions need unsupported inference
9−++ alias-mono: local definitions need unsupported inference
10−++ occurs: local definitions need unsupported inference
11−++ captures: local definitions need unsupported inference
9+++ alias-mono: call's sample and argument types do not unify
10+/tests/golden/types-local-recursive/source.jibb:40:8: called gate has type $-(@t A)
11+ (alias ~zod)
12+ ^
13+/tests/golden/types-local-recursive/source.jibb:40:14: argument has type @p
14+ (alias ~zod)
15+ ^
16+++ occurs: call's sample and argument types do not unify
17+/tests/golden/types-local-recursive/source.jibb:43:18: called gate has type $-(A B)
18+ ++ recur |= y (recur recur)
19+ ^
20+/tests/golden/types-local-recursive/source.jibb:43:24: argument has type $-(A B)
21+ ++ recur |= y (recur recur)
22+ ^
23+++ captures: explicit capital constraints are not supported by partial inference
1224++ via-gate: local definitions need unsupported inference
tests/golden/types-many-variables/about.txtnew file+4
@@ -0,0 +1,4 @@
1+source: Grammar, Runes: "A sample's mold may be left out"; the printer names type variables A to Z and then T26, T27 and on (review question 14).
2+tests: A gate, a self-recursive gate and a mutually recursive pair with 27 bare binders generalize over more than 26 type variables and print the later ones as T26 and T27; a later definition can call the gate, and a wrong call names the gate's full type. The number of variables does not decide which definitions check.
3+expect: parses
4+expect-types: a partial inference report
tests/golden/types-many-variables/source.jibbnew file+6
@@ -0,0 +1,6 @@
1+++ wide |= [a b c d e f g h i j k l m n o p q r s t u v w x y z aa] [a aa]
2+++ ends (wide "x" 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ~zod)
3+++ spin |= [a b c d e f g h i j k l m n o p q r s t u v w x y z aa] (spin a b c d e f g h i j k l m n o p q r s t u v w x y z aa)
4+++ ping |= [a b c d e f g h i j k l m n o p q r s t u v w x y z aa] (pong a b c d e f g h i j k l m n o p q r s t u v w x y z aa)
5+++ pong |= [a b c d e f g h i j k l m n o p q r s t u v w x y z aa] (ping a b c d e f g h i j k l m n o p q r s t u v w x y z aa)
6+++ short (wide "x")
tests/golden/types-many-variables/tokens.txtnew file+266
@@ -0,0 +1,266 @@
1+1:1 glyph ++
2+1:4 name wide
3+1:9 glyph |=
4+1:12 glyph [
5+1:13 tight name a
6+1:15 name b
7+1:17 name c
8+1:19 name d
9+1:21 name e
10+1:23 name f
11+1:25 name g
12+1:27 name h
13+1:29 name i
14+1:31 name j
15+1:33 name k
16+1:35 name l
17+1:37 name m
18+1:39 name n
19+1:41 name o
20+1:43 name p
21+1:45 name q
22+1:47 name r
23+1:49 name s
24+1:51 name t
25+1:53 name u
26+1:55 name v
27+1:57 name w
28+1:59 name x
29+1:61 name y
30+1:63 name z
31+1:65 name aa
32+1:67 tight glyph ]
33+1:69 glyph [
34+1:70 tight name a
35+1:72 name aa
36+1:74 tight glyph ]
37+2:1 NEWLINE
38+2:1 glyph ++
39+2:4 name ends
40+2:9 glyph (
41+2:10 tight name wide
42+2:15 str "x"
43+2:19 lit 2
44+2:21 lit 3
45+2:23 lit 4
46+2:25 lit 5
47+2:27 lit 6
48+2:29 lit 7
49+2:31 lit 8
50+2:33 lit 9
51+2:35 lit 10
52+2:38 lit 11
53+2:41 lit 12
54+2:44 lit 13
55+2:47 lit 14
56+2:50 lit 15
57+2:53 lit 16
58+2:56 lit 17
59+2:59 lit 18
60+2:62 lit 19
61+2:65 lit 20
62+2:68 lit 21
63+2:71 lit 22
64+2:74 lit 23
65+2:77 lit 24
66+2:80 lit 25
67+2:83 lit 26
68+2:86 lit ~zod
69+2:90 tight glyph )
70+3:1 NEWLINE
71+3:1 glyph ++
72+3:4 name spin
73+3:9 glyph |=
74+3:12 glyph [
75+3:13 tight name a
76+3:15 name b
77+3:17 name c
78+3:19 name d
79+3:21 name e
80+3:23 name f
81+3:25 name g
82+3:27 name h
83+3:29 name i
84+3:31 name j
85+3:33 name k
86+3:35 name l
87+3:37 name m
88+3:39 name n
89+3:41 name o
90+3:43 name p
91+3:45 name q
92+3:47 name r
93+3:49 name s
94+3:51 name t
95+3:53 name u
96+3:55 name v
97+3:57 name w
98+3:59 name x
99+3:61 name y
100+3:63 name z
101+3:65 name aa
102+3:67 tight glyph ]
103+3:69 glyph (
104+3:70 tight name spin
105+3:75 name a
106+3:77 name b
107+3:79 name c
108+3:81 name d
109+3:83 name e
110+3:85 name f
111+3:87 name g
112+3:89 name h
113+3:91 name i
114+3:93 name j
115+3:95 name k
116+3:97 name l
117+3:99 name m
118+3:101 name n
119+3:103 name o
120+3:105 name p
121+3:107 name q
122+3:109 name r
123+3:111 name s
124+3:113 name t
125+3:115 name u
126+3:117 name v
127+3:119 name w
128+3:121 name x
129+3:123 name y
130+3:125 name z
131+3:127 name aa
132+3:129 tight glyph )
133+4:1 NEWLINE
134+4:1 glyph ++
135+4:4 name ping
136+4:9 glyph |=
137+4:12 glyph [
138+4:13 tight name a
139+4:15 name b
140+4:17 name c
141+4:19 name d
142+4:21 name e
143+4:23 name f
144+4:25 name g
145+4:27 name h
146+4:29 name i
147+4:31 name j
148+4:33 name k
149+4:35 name l
150+4:37 name m
151+4:39 name n
152+4:41 name o
153+4:43 name p
154+4:45 name q
155+4:47 name r
156+4:49 name s
157+4:51 name t
158+4:53 name u
159+4:55 name v
160+4:57 name w
161+4:59 name x
162+4:61 name y
163+4:63 name z
164+4:65 name aa
165+4:67 tight glyph ]
166+4:69 glyph (
167+4:70 tight name pong
168+4:75 name a
169+4:77 name b
170+4:79 name c
171+4:81 name d
172+4:83 name e
173+4:85 name f
174+4:87 name g
175+4:89 name h
176+4:91 name i
177+4:93 name j
178+4:95 name k
179+4:97 name l
180+4:99 name m
181+4:101 name n
182+4:103 name o
183+4:105 name p
184+4:107 name q
185+4:109 name r
186+4:111 name s
187+4:113 name t
188+4:115 name u
189+4:117 name v
190+4:119 name w
191+4:121 name x
192+4:123 name y
193+4:125 name z
194+4:127 name aa
195+4:129 tight glyph )
196+5:1 NEWLINE
197+5:1 glyph ++
198+5:4 name pong
199+5:9 glyph |=
200+5:12 glyph [
201+5:13 tight name a
202+5:15 name b
203+5:17 name c
204+5:19 name d
205+5:21 name e
206+5:23 name f
207+5:25 name g
208+5:27 name h
209+5:29 name i
210+5:31 name j
211+5:33 name k
212+5:35 name l
213+5:37 name m
214+5:39 name n
215+5:41 name o
216+5:43 name p
217+5:45 name q
218+5:47 name r
219+5:49 name s
220+5:51 name t
221+5:53 name u
222+5:55 name v
223+5:57 name w
224+5:59 name x
225+5:61 name y
226+5:63 name z
227+5:65 name aa
228+5:67 tight glyph ]
229+5:69 glyph (
230+5:70 tight name ping
231+5:75 name a
232+5:77 name b
233+5:79 name c
234+5:81 name d
235+5:83 name e
236+5:85 name f
237+5:87 name g
238+5:89 name h
239+5:91 name i
240+5:93 name j
241+5:95 name k
242+5:97 name l
243+5:99 name m
244+5:101 name n
245+5:103 name o
246+5:105 name p
247+5:107 name q
248+5:109 name r
249+5:111 name s
250+5:113 name t
251+5:115 name u
252+5:117 name v
253+5:119 name w
254+5:121 name x
255+5:123 name y
256+5:125 name z
257+5:127 name aa
258+5:129 tight glyph )
259+6:1 NEWLINE
260+6:1 glyph ++
261+6:4 name short
262+6:10 glyph (
263+6:11 tight name wide
264+6:16 str "x"
265+6:19 tight glyph )
266+6:20 NEWLINE
tests/golden/types-many-variables/tree.txtnew file+26
@@ -0,0 +1,26 @@
1+(module
2+ (value 1:1 wide
3+ (gate 1:9
4+ (cell 1:12 (bind 1:13 a) (bind 1:15 b) (bind 1:17 c) (bind 1:19 d) (bind 1:21 e) (bind 1:23 f) (bind 1:25 g) (bind 1:27 h) (bind 1:29 i) (bind 1:31 j) (bind 1:33 k) (bind 1:35 l) (bind 1:37 m) (bind 1:39 n) (bind 1:41 o) (bind 1:43 p) (bind 1:45 q) (bind 1:47 r) (bind 1:49 s) (bind 1:51 t) (bind 1:53 u) (bind 1:55 v) (bind 1:57 w) (bind 1:59 x) (bind 1:61 y) (bind 1:63 z) (bind 1:65 aa))
5+ (tuple 1:69 (wing 1:70 a) (wing 1:72 aa))))
6+ (value 2:1 ends
7+ (group 2:9
8+ (call 2:10 (wing 2:10 wide) (str 2:15 "x") (lit 2:19 2) (lit 2:21 3) (lit 2:23 4) (lit 2:25 5) (lit 2:27 6) (lit 2:29 7) (lit 2:31 8) (lit 2:33 9) (lit 2:35 10) (lit 2:38 11) (lit 2:41 12) (lit 2:44 13) (lit 2:47 14) (lit 2:50 15) (lit 2:53 16) (lit 2:56 17) (lit 2:59 18) (lit 2:62 19) (lit 2:65 20) (lit 2:68 21) (lit 2:71 22) (lit 2:74 23) (lit 2:77 24) (lit 2:80 25) (lit 2:83 26) (lit 2:86 ~zod))))
9+ (value 3:1 spin
10+ (gate 3:9
11+ (cell 3:12 (bind 3:13 a) (bind 3:15 b) (bind 3:17 c) (bind 3:19 d) (bind 3:21 e) (bind 3:23 f) (bind 3:25 g) (bind 3:27 h) (bind 3:29 i) (bind 3:31 j) (bind 3:33 k) (bind 3:35 l) (bind 3:37 m) (bind 3:39 n) (bind 3:41 o) (bind 3:43 p) (bind 3:45 q) (bind 3:47 r) (bind 3:49 s) (bind 3:51 t) (bind 3:53 u) (bind 3:55 v) (bind 3:57 w) (bind 3:59 x) (bind 3:61 y) (bind 3:63 z) (bind 3:65 aa))
12+ (group 3:69
13+ (call 3:70 (wing 3:70 spin) (wing 3:75 a) (wing 3:77 b) (wing 3:79 c) (wing 3:81 d) (wing 3:83 e) (wing 3:85 f) (wing 3:87 g) (wing 3:89 h) (wing 3:91 i) (wing 3:93 j) (wing 3:95 k) (wing 3:97 l) (wing 3:99 m) (wing 3:101 n) (wing 3:103 o) (wing 3:105 p) (wing 3:107 q) (wing 3:109 r) (wing 3:111 s) (wing 3:113 t) (wing 3:115 u) (wing 3:117 v) (wing 3:119 w) (wing 3:121 x) (wing 3:123 y) (wing 3:125 z) (wing 3:127 aa)))))
14+ (value 4:1 ping
15+ (gate 4:9
16+ (cell 4:12 (bind 4:13 a) (bind 4:15 b) (bind 4:17 c) (bind 4:19 d) (bind 4:21 e) (bind 4:23 f) (bind 4:25 g) (bind 4:27 h) (bind 4:29 i) (bind 4:31 j) (bind 4:33 k) (bind 4:35 l) (bind 4:37 m) (bind 4:39 n) (bind 4:41 o) (bind 4:43 p) (bind 4:45 q) (bind 4:47 r) (bind 4:49 s) (bind 4:51 t) (bind 4:53 u) (bind 4:55 v) (bind 4:57 w) (bind 4:59 x) (bind 4:61 y) (bind 4:63 z) (bind 4:65 aa))
17+ (group 4:69
18+ (call 4:70 (wing 4:70 pong) (wing 4:75 a) (wing 4:77 b) (wing 4:79 c) (wing 4:81 d) (wing 4:83 e) (wing 4:85 f) (wing 4:87 g) (wing 4:89 h) (wing 4:91 i) (wing 4:93 j) (wing 4:95 k) (wing 4:97 l) (wing 4:99 m) (wing 4:101 n) (wing 4:103 o) (wing 4:105 p) (wing 4:107 q) (wing 4:109 r) (wing 4:111 s) (wing 4:113 t) (wing 4:115 u) (wing 4:117 v) (wing 4:119 w) (wing 4:121 x) (wing 4:123 y) (wing 4:125 z) (wing 4:127 aa)))))
19+ (value 5:1 pong
20+ (gate 5:9
21+ (cell 5:12 (bind 5:13 a) (bind 5:15 b) (bind 5:17 c) (bind 5:19 d) (bind 5:21 e) (bind 5:23 f) (bind 5:25 g) (bind 5:27 h) (bind 5:29 i) (bind 5:31 j) (bind 5:33 k) (bind 5:35 l) (bind 5:37 m) (bind 5:39 n) (bind 5:41 o) (bind 5:43 p) (bind 5:45 q) (bind 5:47 r) (bind 5:49 s) (bind 5:51 t) (bind 5:53 u) (bind 5:55 v) (bind 5:57 w) (bind 5:59 x) (bind 5:61 y) (bind 5:63 z) (bind 5:65 aa))
22+ (group 5:69
23+ (call 5:70 (wing 5:70 ping) (wing 5:75 a) (wing 5:77 b) (wing 5:79 c) (wing 5:81 d) (wing 5:83 e) (wing 5:85 f) (wing 5:87 g) (wing 5:89 h) (wing 5:91 i) (wing 5:93 j) (wing 5:95 k) (wing 5:97 l) (wing 5:99 m) (wing 5:101 n) (wing 5:103 o) (wing 5:105 p) (wing 5:107 q) (wing 5:109 r) (wing 5:111 s) (wing 5:113 t) (wing 5:115 u) (wing 5:117 v) (wing 5:119 w) (wing 5:121 x) (wing 5:123 y) (wing 5:125 z) (wing 5:127 aa)))))
24+ (value 6:1 short
25+ (group 6:10
26+ (call 6:11 (wing 6:11 wide) (str 6:16 "x")))))
tests/golden/types-many-variables/types.txtnew file+13
@@ -0,0 +1,13 @@
1+partial inference; module not checked
2+++ wide: $-([a=A [b=B [c=C [d=D [e=E [f=F [g=G [h=H [i=I [j=J [k=K [l=L [m=M [n=N [o=O [p=P [q=Q [r=R [s=S [t=T [u=U [v=V [w=W [x=X [y=Y [z=Z aa=T26]]]]]]]]]]]]]]]]]]]]]]]]]] [A T26])
3+++ ends: [@t @p]
4+++ spin: $-([a=A [b=B [c=C [d=D [e=E [f=F [g=G [h=H [i=I [j=J [k=K [l=L [m=M [n=N [o=O [p=P [q=Q [r=R [s=S [t=T [u=U [v=V [w=W [x=X [y=Y [z=Z aa=T26]]]]]]]]]]]]]]]]]]]]]]]]]] T27)
5+++ ping: $-([a=A [b=B [c=C [d=D [e=E [f=F [g=G [h=H [i=I [j=J [k=K [l=L [m=M [n=N [o=O [p=P [q=Q [r=R [s=S [t=T [u=U [v=V [w=W [x=X [y=Y [z=Z aa=T26]]]]]]]]]]]]]]]]]]]]]]]]]] T27)
6+++ pong: $-([a=A [b=B [c=C [d=D [e=E [f=F [g=G [h=H [i=I [j=J [k=K [l=L [m=M [n=N [o=O [p=P [q=Q [r=R [s=S [t=T [u=U [v=V [w=W [x=X [y=Y [z=Z aa=T26]]]]]]]]]]]]]]]]]]]]]]]]]] T27)
7+++ short: call's sample and argument types do not unify
8+/tests/golden/types-many-variables/source.jibb:6:11: called gate has type $-([a=A [b=B [c=C [d=D [e=E [f=F [g=G [h=H [i=I [j=J [k=K [l=L [m=M [n=N [o=O [p=P [q=Q [r=R [s=S [t=T [u=U [v=V [w=W [x=X [y=Y [z=Z aa=T26]]]]]]]]]]]]]]]]]]]]]]]]]] [A T26])
9+++ short (wide "x")
10+ ^
11+/tests/golden/types-many-variables/source.jibb:6:16: argument has type @t
12+++ short (wide "x")
13+ ^
tests/golden/types-module-fixtures/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−API module needs unsupported inference: /ui/api/blog/jibb
2+API module needs unsupported inference: /ui/api/blog/jibb: API path declaration needs unsupported analysis
tests/golden/types-partial-branch-widening/about.txt+1−1
@@ -1,4 +1,4 @@
11source: a specific atom fits `@`, and a subaura fits its parent; different specific auras do not unify.
2−tests: a branch joins an already present parent aura or unrestricted atom in either order; unresolved variable-dependent joins stay unsupported, and sibling auras remain distinct.
2+tests: every uncontextual branch kind unifies first, then joins an already present parent aura or unrestricted atom; open variables retain unification substitutions, decimal results work with or without context, late union parents widen earlier results without order-dependent variable substitutions, singleton atoms and restricted decimals join explicit `@`, and sibling auras remain distinct without a common parent.
33expect: parses
44expect-types: a partial inference report, not a checked module
tests/golden/types-partial-branch-widening/source.jibb+55
@@ -10,6 +10,10 @@
1010 ?- b
1111 %.y ^- @ ~zod
1212 %.n "hi"
13+++ atom-decimal |= b=?
14+ ?- b
15+ %.y ^- @ ~zod
16+ %.n 0
1317++ unknown |= x
1418 ?- %.y
1519 %.y x
@@ -18,3 +22,54 @@
1822 ?- b
1923 %.y ^- @ud 1
2024 %.n 0x1f
25+++ decimal |= [b=? n=@ud]
26+ ?- b
27+ %.y n
28+ %.n 0
29+++ decimal-context |= [b=? n=@ud]
30+ ^- @ud ?- b
31+ %.y n
32+ %.n 0
33++$ maybe |$ [A]
34+ ~
35+ [~ value=A]
36+++ unit-parent |= x=(maybe @ud)
37+ ?- x
38+ ~ 0x1f
39+ [~ value] ^- @u 0x1f
40++$ number-choice
41+ [%hex @ux]
42+ [%parent @u]
43+ [%decimal @ud]
44+++ union-parent |= x=number-choice
45+ ?- x
46+ [%hex n] 0x1f
47+ [%parent n] ^- @u 0x1f
48+ [%decimal n] 0
49+++ union-parent-late |= x=number-choice
50+ ?- x
51+ [%hex n] 0x1f
52+ [%decimal n] ^- @ud 0
53+ [%parent n] ^- @u 0x1f
54+++ union-variable |= [x=number-choice value]
55+ ?- x
56+ [%hex n] value
57+ [%decimal n] 0x1f
58+ [%parent n] ^- @u 0x1f
59+++ union-variable-late |= [x=number-choice value]
60+ ?- x
61+ [%parent n] ^- @u 0x1f
62+ [%hex n] 0x1f
63+ [%decimal n] value
64+++ union-any-late |= x=number-choice
65+ ?- x
66+ [%hex n] 0x1f
67+ [%decimal n] ^- @ud 0
68+ [%parent n] ^- @ ~zod
69++$ singleton-choice
70+ [%nothing ~]
71+ [%anything @ud]
72+++ union-singleton |= x=singleton-choice
73+ ?- x
74+ [%nothing n] n
75+ [%anything n] ^- @ ~zod
tests/golden/types-partial-branch-widening/tokens.txt+358−18
@@ -59,38 +59,378 @@
595913:1 DEDENT
606013:1 NEWLINE
616113:1 glyph ++
62−13:4 name unknown
63−13:12 glyph |=
64−13:15 name x
62+13:4 name atom-decimal
63+13:17 glyph |=
64+13:20 name b
65+13:21 tight glyph =
66+13:22 tight glyph ?
656714:3 INDENT
666814:3 glyph ?-
67−14:6 lit %.y
69+14:6 name b
687015:5 INDENT
697115:5 lit %.y
70−15:9 name x
72+15:9 glyph ^-
73+15:12 aura @
74+15:14 lit ~zod
717516:5 NEWLINE
727616:5 lit %.n
73−16:9 lit 0x1f
77+16:9 lit 0
747817:1 DEDENT
757917:1 DEDENT
768017:1 NEWLINE
778117:1 glyph ++
78−17:4 name siblings
79−17:13 glyph |=
80−17:16 name b
81−17:17 tight glyph =
82−17:18 tight glyph ?
82+17:4 name unknown
83+17:12 glyph |=
84+17:15 name x
838518:3 INDENT
848618:3 glyph ?-
85−18:6 name b
87+18:6 lit %.y
868819:5 INDENT
878919:5 lit %.y
88−19:9 glyph ^-
89−19:12 aura @ud
90−19:16 lit 1
90+19:9 name x
919120:5 NEWLINE
929220:5 lit %.n
939320:9 lit 0x1f
94−20:13 DEDENT
95−20:13 DEDENT
96−20:13 NEWLINE
94+21:1 DEDENT
95+21:1 DEDENT
96+21:1 NEWLINE
97+21:1 glyph ++
98+21:4 name siblings
99+21:13 glyph |=
100+21:16 name b
101+21:17 tight glyph =
102+21:18 tight glyph ?
103+22:3 INDENT
104+22:3 glyph ?-
105+22:6 name b
106+23:5 INDENT
107+23:5 lit %.y
108+23:9 glyph ^-
109+23:12 aura @ud
110+23:16 lit 1
111+24:5 NEWLINE
112+24:5 lit %.n
113+24:9 lit 0x1f
114+25:1 DEDENT
115+25:1 DEDENT
116+25:1 NEWLINE
117+25:1 glyph ++
118+25:4 name decimal
119+25:12 glyph |=
120+25:15 glyph [
121+25:16 tight name b
122+25:17 tight glyph =
123+25:18 tight glyph ?
124+25:20 name n
125+25:21 tight glyph =
126+25:22 tight aura @ud
127+25:25 tight glyph ]
128+26:3 INDENT
129+26:3 glyph ?-
130+26:6 name b
131+27:5 INDENT
132+27:5 lit %.y
133+27:9 name n
134+28:5 NEWLINE
135+28:5 lit %.n
136+28:9 lit 0
137+29:1 DEDENT
138+29:1 DEDENT
139+29:1 NEWLINE
140+29:1 glyph ++
141+29:4 name decimal-context
142+29:20 glyph |=
143+29:23 glyph [
144+29:24 tight name b
145+29:25 tight glyph =
146+29:26 tight glyph ?
147+29:28 name n
148+29:29 tight glyph =
149+29:30 tight aura @ud
150+29:33 tight glyph ]
151+30:3 INDENT
152+30:3 glyph ^-
153+30:6 aura @ud
154+30:11 glyph ?-
155+30:14 name b
156+31:5 INDENT
157+31:5 lit %.y
158+31:9 name n
159+32:5 NEWLINE
160+32:5 lit %.n
161+32:9 lit 0
162+33:1 DEDENT
163+33:1 DEDENT
164+33:1 NEWLINE
165+33:1 glyph +$
166+33:4 name maybe
167+33:10 glyph |$
168+33:13 glyph [
169+33:14 tight tvar A
170+33:15 tight glyph ]
171+34:3 INDENT
172+34:3 lit ~
173+35:3 NEWLINE
174+35:3 glyph [
175+35:4 tight lit ~
176+35:6 name value
177+35:11 tight glyph =
178+35:12 tight tvar A
179+35:13 tight glyph ]
180+36:1 DEDENT
181+36:1 NEWLINE
182+36:1 glyph ++
183+36:4 name unit-parent
184+36:16 glyph |=
185+36:19 name x
186+36:20 tight glyph =
187+36:21 tight glyph (
188+36:22 tight name maybe
189+36:28 aura @ud
190+36:31 tight glyph )
191+37:3 INDENT
192+37:3 glyph ?-
193+37:6 name x
194+38:5 INDENT
195+38:5 lit ~
196+38:7 lit 0x1f
197+39:5 NEWLINE
198+39:5 glyph [
199+39:6 tight lit ~
200+39:8 name value
201+39:13 tight glyph ]
202+39:15 glyph ^-
203+39:18 aura @u
204+39:21 lit 0x1f
205+40:1 DEDENT
206+40:1 DEDENT
207+40:1 NEWLINE
208+40:1 glyph +$
209+40:4 name number-choice
210+41:3 INDENT
211+41:3 glyph [
212+41:4 tight lit %hex
213+41:9 aura @ux
214+41:12 tight glyph ]
215+42:3 NEWLINE
216+42:3 glyph [
217+42:4 tight lit %parent
218+42:12 aura @u
219+42:14 tight glyph ]
220+43:3 NEWLINE
221+43:3 glyph [
222+43:4 tight lit %decimal
223+43:13 aura @ud
224+43:16 tight glyph ]
225+44:1 DEDENT
226+44:1 NEWLINE
227+44:1 glyph ++
228+44:4 name union-parent
229+44:17 glyph |=
230+44:20 name x
231+44:21 tight glyph =
232+44:22 tight name number-choice
233+45:3 INDENT
234+45:3 glyph ?-
235+45:6 name x
236+46:5 INDENT
237+46:5 glyph [
238+46:6 tight lit %hex
239+46:11 name n
240+46:12 tight glyph ]
241+46:14 lit 0x1f
242+47:5 NEWLINE
243+47:5 glyph [
244+47:6 tight lit %parent
245+47:14 name n
246+47:15 tight glyph ]
247+47:17 glyph ^-
248+47:20 aura @u
249+47:23 lit 0x1f
250+48:5 NEWLINE
251+48:5 glyph [
252+48:6 tight lit %decimal
253+48:15 name n
254+48:16 tight glyph ]
255+48:18 lit 0
256+49:1 DEDENT
257+49:1 DEDENT
258+49:1 NEWLINE
259+49:1 glyph ++
260+49:4 name union-parent-late
261+49:22 glyph |=
262+49:25 name x
263+49:26 tight glyph =
264+49:27 tight name number-choice
265+50:3 INDENT
266+50:3 glyph ?-
267+50:6 name x
268+51:5 INDENT
269+51:5 glyph [
270+51:6 tight lit %hex
271+51:11 name n
272+51:12 tight glyph ]
273+51:14 lit 0x1f
274+52:5 NEWLINE
275+52:5 glyph [
276+52:6 tight lit %decimal
277+52:15 name n
278+52:16 tight glyph ]
279+52:18 glyph ^-
280+52:21 aura @ud
281+52:25 lit 0
282+53:5 NEWLINE
283+53:5 glyph [
284+53:6 tight lit %parent
285+53:14 name n
286+53:15 tight glyph ]
287+53:17 glyph ^-
288+53:20 aura @u
289+53:23 lit 0x1f
290+54:1 DEDENT
291+54:1 DEDENT
292+54:1 NEWLINE
293+54:1 glyph ++
294+54:4 name union-variable
295+54:19 glyph |=
296+54:22 glyph [
297+54:23 tight name x
298+54:24 tight glyph =
299+54:25 tight name number-choice
300+54:39 name value
301+54:44 tight glyph ]
302+55:3 INDENT
303+55:3 glyph ?-
304+55:6 name x
305+56:5 INDENT
306+56:5 glyph [
307+56:6 tight lit %hex
308+56:11 name n
309+56:12 tight glyph ]
310+56:14 name value
311+57:5 NEWLINE
312+57:5 glyph [
313+57:6 tight lit %decimal
314+57:15 name n
315+57:16 tight glyph ]
316+57:18 lit 0x1f
317+58:5 NEWLINE
318+58:5 glyph [
319+58:6 tight lit %parent
320+58:14 name n
321+58:15 tight glyph ]
322+58:17 glyph ^-
323+58:20 aura @u
324+58:23 lit 0x1f
325+59:1 DEDENT
326+59:1 DEDENT
327+59:1 NEWLINE
328+59:1 glyph ++
329+59:4 name union-variable-late
330+59:24 glyph |=
331+59:27 glyph [
332+59:28 tight name x
333+59:29 tight glyph =
334+59:30 tight name number-choice
335+59:44 name value
336+59:49 tight glyph ]
337+60:3 INDENT
338+60:3 glyph ?-
339+60:6 name x
340+61:5 INDENT
341+61:5 glyph [
342+61:6 tight lit %parent
343+61:14 name n
344+61:15 tight glyph ]
345+61:17 glyph ^-
346+61:20 aura @u
347+61:23 lit 0x1f
348+62:5 NEWLINE
349+62:5 glyph [
350+62:6 tight lit %hex
351+62:11 name n
352+62:12 tight glyph ]
353+62:14 lit 0x1f
354+63:5 NEWLINE
355+63:5 glyph [
356+63:6 tight lit %decimal
357+63:15 name n
358+63:16 tight glyph ]
359+63:18 name value
360+64:1 DEDENT
361+64:1 DEDENT
362+64:1 NEWLINE
363+64:1 glyph ++
364+64:4 name union-any-late
365+64:19 glyph |=
366+64:22 name x
367+64:23 tight glyph =
368+64:24 tight name number-choice
369+65:3 INDENT
370+65:3 glyph ?-
371+65:6 name x
372+66:5 INDENT
373+66:5 glyph [
374+66:6 tight lit %hex
375+66:11 name n
376+66:12 tight glyph ]
377+66:14 lit 0x1f
378+67:5 NEWLINE
379+67:5 glyph [
380+67:6 tight lit %decimal
381+67:15 name n
382+67:16 tight glyph ]
383+67:18 glyph ^-
384+67:21 aura @ud
385+67:25 lit 0
386+68:5 NEWLINE
387+68:5 glyph [
388+68:6 tight lit %parent
389+68:14 name n
390+68:15 tight glyph ]
391+68:17 glyph ^-
392+68:20 aura @
393+68:22 lit ~zod
394+69:1 DEDENT
395+69:1 DEDENT
396+69:1 NEWLINE
397+69:1 glyph +$
398+69:4 name singleton-choice
399+70:3 INDENT
400+70:3 glyph [
401+70:4 tight lit %nothing
402+70:13 lit ~
403+70:14 tight glyph ]
404+71:3 NEWLINE
405+71:3 glyph [
406+71:4 tight lit %anything
407+71:14 aura @ud
408+71:17 tight glyph ]
409+72:1 DEDENT
410+72:1 NEWLINE
411+72:1 glyph ++
412+72:4 name union-singleton
413+72:20 glyph |=
414+72:23 name x
415+72:24 tight glyph =
416+72:25 tight name singleton-choice
417+73:3 INDENT
418+73:3 glyph ?-
419+73:6 name x
420+74:5 INDENT
421+74:5 glyph [
422+74:6 tight lit %nothing
423+74:15 name n
424+74:16 tight glyph ]
425+74:18 name n
426+75:5 NEWLINE
427+75:5 glyph [
428+75:6 tight lit %anything
429+75:16 name n
430+75:17 tight glyph ]
431+75:19 glyph ^-
432+75:22 aura @
433+75:24 lit ~zod
434+75:28 DEDENT
435+75:28 DEDENT
436+75:28 NEWLINE
tests/golden/types-partial-branch-widening/tree.txt+164−14
@@ -29,21 +29,171 @@
2929 (lit 11:5 %.y)
3030 (cast 11:9 (aura 11:12 @) (lit 11:14 ~zod)))
3131 (arm 12:5 (lit 12:5 %.n) (str 12:9 "hi"))))))
32− (value 13:1 unknown
33− (gate 13:12
34− (bind 13:15 x)
32+ (value 13:1 atom-decimal
33+ (gate 13:17
34+ (face 13:20 b (flag 13:22))
3535 (body 14:3
3636 (branch 14:3
37− (lit 14:6 %.y)
38− (arm 15:5 (lit 15:5 %.y) (wing 15:9 x))
39− (arm 16:5 (lit 16:5 %.n) (lit 16:9 0x1f))))))
40− (value 17:1 siblings
41− (gate 17:13
42− (face 17:16 b (flag 17:18))
37+ (wing 14:6 b)
38+ (arm 15:5
39+ (lit 15:5 %.y)
40+ (cast 15:9 (aura 15:12 @) (lit 15:14 ~zod)))
41+ (arm 16:5 (lit 16:5 %.n) (lit 16:9 0))))))
42+ (value 17:1 unknown
43+ (gate 17:12
44+ (bind 17:15 x)
4345 (body 18:3
4446 (branch 18:3
45− (wing 18:6 b)
46− (arm 19:5
47− (lit 19:5 %.y)
48− (cast 19:9 (aura 19:12 @ud) (lit 19:16 1)))
49− (arm 20:5 (lit 20:5 %.n) (lit 20:9 0x1f)))))))
47+ (lit 18:6 %.y)
48+ (arm 19:5 (lit 19:5 %.y) (wing 19:9 x))
49+ (arm 20:5 (lit 20:5 %.n) (lit 20:9 0x1f))))))
50+ (value 21:1 siblings
51+ (gate 21:13
52+ (face 21:16 b (flag 21:18))
53+ (body 22:3
54+ (branch 22:3
55+ (wing 22:6 b)
56+ (arm 23:5
57+ (lit 23:5 %.y)
58+ (cast 23:9 (aura 23:12 @ud) (lit 23:16 1)))
59+ (arm 24:5 (lit 24:5 %.n) (lit 24:9 0x1f))))))
60+ (value 25:1 decimal
61+ (gate 25:12
62+ (cell 25:15
63+ (face 25:16 b (flag 25:18))
64+ (face 25:20 n (aura 25:22 @ud)))
65+ (body 26:3
66+ (branch 26:3
67+ (wing 26:6 b)
68+ (arm 27:5 (lit 27:5 %.y) (wing 27:9 n))
69+ (arm 28:5 (lit 28:5 %.n) (lit 28:9 0))))))
70+ (value 29:1 decimal-context
71+ (gate 29:20
72+ (cell 29:23
73+ (face 29:24 b (flag 29:26))
74+ (face 29:28 n (aura 29:30 @ud)))
75+ (body 30:3
76+ (cast 30:3
77+ (aura 30:6 @ud)
78+ (branch 30:11
79+ (wing 30:14 b)
80+ (arm 31:5 (lit 31:5 %.y) (wing 31:9 n))
81+ (arm 32:5 (lit 32:5 %.n) (lit 32:9 0)))))))
82+ (mold 33:1 maybe
83+ (generic 33:10 A
84+ (union 34:3
85+ (const 34:3 ~)
86+ (cell 35:3
87+ (const 35:4 ~)
88+ (face 35:6 value (tvar 35:12 A))))))
89+ (value 36:1 unit-parent
90+ (gate 36:16
91+ (face 36:19 x
92+ (apply 36:21 maybe (aura 36:28 @ud)))
93+ (body 37:3
94+ (branch 37:3
95+ (wing 37:6 x)
96+ (arm 38:5 (lit 38:5 ~) (lit 38:7 0x1f))
97+ (arm 39:5
98+ (cell 39:5 (lit 39:6 ~) (bind 39:8 value))
99+ (cast 39:15 (aura 39:18 @u) (lit 39:21 0x1f)))))))
100+ (mold 40:1 number-choice
101+ (union 41:3
102+ (cell 41:3 (const 41:4 %hex) (aura 41:9 @ux))
103+ (cell 42:3 (const 42:4 %parent) (aura 42:12 @u))
104+ (cell 43:3 (const 43:4 %decimal) (aura 43:13 @ud))))
105+ (value 44:1 union-parent
106+ (gate 44:17
107+ (face 44:20 x (ref 44:22 number-choice))
108+ (body 45:3
109+ (branch 45:3
110+ (wing 45:6 x)
111+ (arm 46:5
112+ (cell 46:5 (lit 46:6 %hex) (bind 46:11 n))
113+ (lit 46:14 0x1f))
114+ (arm 47:5
115+ (cell 47:5 (lit 47:6 %parent) (bind 47:14 n))
116+ (cast 47:17 (aura 47:20 @u) (lit 47:23 0x1f)))
117+ (arm 48:5
118+ (cell 48:5 (lit 48:6 %decimal) (bind 48:15 n))
119+ (lit 48:18 0))))))
120+ (value 49:1 union-parent-late
121+ (gate 49:22
122+ (face 49:25 x (ref 49:27 number-choice))
123+ (body 50:3
124+ (branch 50:3
125+ (wing 50:6 x)
126+ (arm 51:5
127+ (cell 51:5 (lit 51:6 %hex) (bind 51:11 n))
128+ (lit 51:14 0x1f))
129+ (arm 52:5
130+ (cell 52:5 (lit 52:6 %decimal) (bind 52:15 n))
131+ (cast 52:18 (aura 52:21 @ud) (lit 52:25 0)))
132+ (arm 53:5
133+ (cell 53:5 (lit 53:6 %parent) (bind 53:14 n))
134+ (cast 53:17 (aura 53:20 @u) (lit 53:23 0x1f)))))))
135+ (value 54:1 union-variable
136+ (gate 54:19
137+ (cell 54:22
138+ (face 54:23 x (ref 54:25 number-choice))
139+ (bind 54:39 value))
140+ (body 55:3
141+ (branch 55:3
142+ (wing 55:6 x)
143+ (arm 56:5
144+ (cell 56:5 (lit 56:6 %hex) (bind 56:11 n))
145+ (wing 56:14 value))
146+ (arm 57:5
147+ (cell 57:5 (lit 57:6 %decimal) (bind 57:15 n))
148+ (lit 57:18 0x1f))
149+ (arm 58:5
150+ (cell 58:5 (lit 58:6 %parent) (bind 58:14 n))
151+ (cast 58:17 (aura 58:20 @u) (lit 58:23 0x1f)))))))
152+ (value 59:1 union-variable-late
153+ (gate 59:24
154+ (cell 59:27
155+ (face 59:28 x (ref 59:30 number-choice))
156+ (bind 59:44 value))
157+ (body 60:3
158+ (branch 60:3
159+ (wing 60:6 x)
160+ (arm 61:5
161+ (cell 61:5 (lit 61:6 %parent) (bind 61:14 n))
162+ (cast 61:17 (aura 61:20 @u) (lit 61:23 0x1f)))
163+ (arm 62:5
164+ (cell 62:5 (lit 62:6 %hex) (bind 62:11 n))
165+ (lit 62:14 0x1f))
166+ (arm 63:5
167+ (cell 63:5 (lit 63:6 %decimal) (bind 63:15 n))
168+ (wing 63:18 value))))))
169+ (value 64:1 union-any-late
170+ (gate 64:19
171+ (face 64:22 x (ref 64:24 number-choice))
172+ (body 65:3
173+ (branch 65:3
174+ (wing 65:6 x)
175+ (arm 66:5
176+ (cell 66:5 (lit 66:6 %hex) (bind 66:11 n))
177+ (lit 66:14 0x1f))
178+ (arm 67:5
179+ (cell 67:5 (lit 67:6 %decimal) (bind 67:15 n))
180+ (cast 67:18 (aura 67:21 @ud) (lit 67:25 0)))
181+ (arm 68:5
182+ (cell 68:5 (lit 68:6 %parent) (bind 68:14 n))
183+ (cast 68:17 (aura 68:20 @) (lit 68:22 ~zod)))))))
184+ (mold 69:1 singleton-choice
185+ (union 70:3
186+ (cell 70:3 (const 70:4 %nothing) (const 70:13 ~))
187+ (cell 71:3 (const 71:4 %anything) (aura 71:14 @ud))))
188+ (value 72:1 union-singleton
189+ (gate 72:20
190+ (face 72:23 x (ref 72:25 singleton-choice))
191+ (body 73:3
192+ (branch 73:3
193+ (wing 73:6 x)
194+ (arm 74:5
195+ (cell 74:5 (lit 74:6 %nothing) (bind 74:15 n))
196+ (wing 74:18 n))
197+ (arm 75:5
198+ (cell 75:5 (lit 75:6 %anything) (bind 75:16 n))
199+ (cast 75:19 (aura 75:22 @) (lit 75:24 ~zod))))))))
tests/golden/types-partial-branch-widening/types.txt+16−3
@@ -2,11 +2,24 @@ partial inference; module not checked
22++ join: $-(? @u)
33++ reverse: $-(? @u)
44++ atom: $-(? @)
5−++ unknown: branch widening is not supported by partial inference
5+++ atom-decimal: $-(? @)
6+++ unknown: $-(@ux @ux)
67++ siblings: branch arms have incompatible types
7−/tests/golden/types-partial-branch-widening/source.jibb:19:9: first arm has type @ud
8+/tests/golden/types-partial-branch-widening/source.jibb:23:9: first arm has type @ud
89 %.y ^- @ud 1
910 ^
10−/tests/golden/types-partial-branch-widening/source.jibb:20:9: second arm has type @ux
11+/tests/golden/types-partial-branch-widening/source.jibb:24:9: second arm has type @ux
1112 %.n 0x1f
1213 ^
14+++ decimal: $-([b=? n=@ud] @ud)
15+++ decimal-context: $-([b=? n=@ud] @ud)
16++$ maybe: cases proven disjoint; mold not checked
17+++ unit-parent: $-((maybe @ud) @u)
18++$ number-choice: cases proven disjoint; mold not checked
19+++ union-parent: $-(number-choice @u)
20+++ union-parent-late: $-(number-choice @u)
21+++ union-variable: $-([x=number-choice value=@u] @u)
22+++ union-variable-late: $-([x=number-choice value=@u] @u)
23+++ union-any-late: $-(number-choice @)
24++$ singleton-choice: cases proven disjoint; mold not checked
25+++ union-singleton: $-(singleton-choice @)
tests/golden/types-partial-forward/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar tab, Molds: "every expression has a principal type, and there is no general subtyping".
2−tests: partial inference: a forward reference resolves in dependency order.
2+tests: partial inference: a multi-link forward-reference chain resolves in dependency order.
33expect: parses
44expect-types: a partial inference report, not a checked module
tests/golden/types-partial-forward/source.jibb+3−1
@@ -1,2 +1,4 @@
11++ first second
2−++ second "later"
2+++ second third
3+++ third fourth
4+++ fourth "later"
tests/golden/types-partial-forward/tokens.txt+10−2
@@ -4,5 +4,13 @@
442:1 NEWLINE
552:1 glyph ++
662:4 name second
7−2:11 str "later"
8−2:18 NEWLINE
7+2:11 name third
8+3:1 NEWLINE
9+3:1 glyph ++
10+3:4 name third
11+3:10 name fourth
12+4:1 NEWLINE
13+4:1 glyph ++
14+4:4 name fourth
15+4:11 str "later"
16+4:18 NEWLINE
tests/golden/types-partial-forward/tree.txt+3−1
@@ -1,3 +1,5 @@
11(module
22 (value 1:1 first (wing 1:10 second))
3− (value 2:1 second (str 2:11 "later")))
3+ (value 2:1 second (wing 2:11 third))
4+ (value 3:1 third (wing 3:10 fourth))
5+ (value 4:1 fourth (str 4:11 "later")))
tests/golden/types-partial-forward/types.txt+2
@@ -1,3 +1,5 @@
11partial inference; module not checked
22++ first: @t
33++ second: @t
4+++ third: @t
5+++ fourth: @t
tests/golden/types-prelude-arithmetic/about.txt+1−1
@@ -1,4 +1,4 @@
11source: docs/spec/grammar.md, Molds, Atoms: "Arithmetic rejects loobean operands: `?` contains only 0 and 1, while an arithmetic result need not."
2−tests: The source-backed add, dec and gth wrappers preserve numeric auras, constrained generic types, and independent comparison behavior. Loobean operands are rejected by add and dec; the source-backed lent infers list lengths. Primitive lowering, jet recognition and execution remain unfinished. The module report is partial.
2+tests: The source-backed add, dec and gth wrappers preserve numeric auras, constrained generic types, and independent comparison behavior. Loobean operands are rejected by add and dec, with both sites, including inside a local gate; the source-backed lent infers list lengths. Primitive lowering, jet recognition and execution remain unfinished. The module report is partial.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-prelude-arithmetic/types.txt+7−1
@@ -46,5 +46,11 @@ partial inference; module not checked
4646/tests/golden/types-prelude-arithmetic/source.jibb:19:25: argument has type ?
4747++ captured |= x=? (add x x)
4848 ^
49−++ captured-local: local definitions need unsupported inference
49+++ captured-local: call's sample and argument types do not unify
50+/tests/golden/types-prelude-arithmetic/source.jibb:21:20: called gate has type $-([A A] A) where A is an atom other than ?
51+ ++ local |= y=? (add x y)
52+ ^
53+/tests/golden/types-prelude-arithmetic/source.jibb:21:24: argument has type ?
54+ ++ local |= y=? (add x y)
55+ ^
5056++ inc: $-(A A) where A is an atom other than ?
tests/golden/types-prelude-sub/types.txt+1−1
@@ -12,7 +12,7 @@ partial inference; module not checked
1212/tests/golden/types-prelude-sub/source.jibb:9:28: expression
1313++ wrong-reply ^- (sub @t) [%every gap=~s1 reply=|=(date=@p "bad")]
1414 ^
15−++ incomplete: union branch result matching needs unsupported inference
15+++ incomplete: missing union case [%url reply=$-((list @ta) msg)]
1616++ complete: union branch result matching needs unsupported inference
1717+$ my-msg: cases proven disjoint; mold not checked
1818++ take-watch: $-((sub my-msg) (ask my-msg))
tests/golden/types-prelude-ui/types.txt+1−1
@@ -82,4 +82,4 @@ partial inference; module not checked
8282 ^
8383++ load: $-(@t (ask [count=@ud]))
8484++ page-view: $-([count=@ud] (element !!))
85−++ static-page: [load=$-(@t (ask.internal [count=@ud])) view=$-([count=@ud] (element !!))]
85+++ static-page: [load=$-(@t (ask [count=@ud])) view=$-([count=@ud] (element !!))]
tests/golden/types-recursion-scc-import-bad/types.txt+1−1
@@ -1,2 +1,2 @@
11partial inference; module not checked
2−module definitions need unsupported inference: /ui/lib/jibb
2+module definitions need unsupported inference: /ui/lib/jibb: ++ left
tests/golden/types-recursion-scc-local/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Runes: "Gates may call themselves and their siblings; other values can't depend on themselves, even through a gate"; Modules: "Names may refer to each other in any order, and no name may shadow one already in scope, imports and the prelude included."
2−tests: A mutually recursive local group remains unsupported. A top-level group can include an outer gate whose local helper refers to the other group member.
2+tests: A mutually recursive local group unifies its text base and recursive arm results. A top-level group can include an outer gate whose local helper refers to the other group member.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-recursion-scc-local/types.txt+1−1
@@ -1,4 +1,4 @@
11partial inference; module not checked
2−++ outer: local definitions need unsupported inference
2+++ outer: $-(@t @t)
33++ global-a: $-(@t A)
44++ global-b: $-(@t A)
tests/golden/types-recursive-branch/types.txt+4−4
@@ -8,9 +8,9 @@ partial inference; module not checked
88++ input-base: $-(A A)
99++ inferred-base: $-(A A)
1010++ captured: $-(A A)
11−++ forced: branch widening is not supported by partial inference
12−++ pending: branch widening is not supported by partial inference
13−++ pending-null: branch widening is not supported by partial inference
11+++ forced: explicit capital constraints are not supported by partial inference
12+++ pending: tag needs context in partial inference
13+++ pending-null: `~` needs context in partial inference
1414++ dependent: $-(? @t)
1515++ nonself: $-(? @t)
1616++ polymorphic: call's sample and argument types do not unify
@@ -46,5 +46,5 @@ partial inference; module not checked
4646/tests/golden/types-recursive-branch/source.jibb:93:11: second arm has type @t
4747 %.n (aura-conflict b)
4848 ^
49−++ traced: branch widening is not supported by partial inference
49+++ traced: $-(? @t)
5050++ unresolved-number: unresolved aura-variable inference
tests/golden/types-recursive-gate/types.txt+2−2
@@ -17,8 +17,8 @@ partial inference; module not checked
1717/tests/golden/types-recursive-gate/source.jibb:12:19: argument
1818++ occurs |= x (x x)
1919 ^
20−++ forcing: branch widening is not supported by partial inference
21−++ pending: branch widening is not supported by partial inference
20+++ forcing: explicit capital constraints are not supported by partial inference
21+++ pending: tag needs context in partial inference
2222++ direct-value: name is not available to partial inference
2323++ gate-value: name is not available to partial inference
2424++ value-cycle: name is not available to partial inference
tests/golden/types-union-finite-generic/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; Molds: "Type variables are capitals, generalized per `++`."
2−tests: Boolean refinements preserve generic payload and binder types; a shared payload variable infers, while distinct arm result variables, forcing an explicit capital, unresolved tags and partial string matches remain unsupported. An unavailable name in an earlier arm is not masked by pattern checking.
2+tests: Boolean refinements preserve generic payload and binder types; a shared payload variable infers, while distinct arm result variables are diagnosed rather than forced equal, and forcing an explicit capital, unresolved tags and partial string matches remain unsupported. An unavailable name in an earlier arm is not masked by pattern checking.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-finite-generic/types.txt+7−1
@@ -1,7 +1,13 @@
11partial inference; module not checked
22+$ msg: cases proven disjoint; mold not checked
33++ shared: $-((msg A A) A)
4−++ different: union branch result matching needs unsupported inference
4+++ different: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
5+/tests/golden/types-union-finite-generic/source.jibb:10:24: first type variable
6+++ different |= m=(msg A B)
7+ ^
8+/tests/golden/types-union-finite-generic/source.jibb:10:26: second type variable
9+++ different |= m=(msg A B)
10+ ^
511++ forced: explicit capital constraints are not supported by partial inference
612++ earlier: name is not available to partial inference
713+$ choice: cases proven disjoint; mold not checked
tests/golden/types-union-finite/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; "An arm that earlier arms cover ... is an error"; "A name in a pattern always binds anew".
2−tests: Two boolean fields are split into finite alternatives for complete tables and wildcard patterns. A missing alternative is named, a covered partial arm is rejected even when it uses a different spelling of zero, and a whole-case binder retains its original `?` type. Shadowing and a binder spanning different union cases fail closed.
2+tests: Finite boolean refinements share the unification-first, explicitly-present-parent result join, including multiple arm results. Two boolean fields are split into finite alternatives for complete tables and wildcard patterns. A missing alternative is named, a covered partial arm is rejected even when it uses a different spelling of zero, and a whole-case binder retains its original `?` type. Shadowing and a binder spanning different union cases fail closed.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-finite/source.jibb+7
@@ -8,6 +8,13 @@
88 [%p %.n %.y] "c"
99 [%p %.n %.n] "d"
1010 %other "e"
11+++ parent |= m=msg
12+ ?- m
13+ [%p %.y %.y] 0x1f
14+ [%p %.y %.n] ^- @u 0x1f
15+ [%p %.n %.y] 0
16+ [%p %.n %.n] 0x2f
17+ %other ^- @u 0x1f
1118++ wildcard |= m=msg
1219 ?- m
1320 [%p %.y *] "a"
tests/golden/types-union-finite/tokens.txt+210−163
@@ -58,11 +58,11 @@
585811:1 DEDENT
595911:1 NEWLINE
606011:1 glyph ++
61−11:4 name wildcard
62−11:13 glyph |=
63−11:16 name m
64−11:17 tight glyph =
65−11:18 tight name msg
61+11:4 name parent
62+11:11 glyph |=
63+11:14 name m
64+11:15 tight glyph =
65+11:16 tight name msg
666612:3 INDENT
676712:3 glyph ?-
686812:6 name m
@@ -70,169 +70,216 @@
707013:5 glyph [
717113:6 tight lit %p
727213:9 lit %.y
73−13:13 glyph *
74−13:14 tight glyph ]
75−13:16 str "a"
73+13:13 lit %.y
74+13:16 tight glyph ]
75+13:18 lit 0x1f
767614:5 NEWLINE
777714:5 glyph [
787814:6 tight lit %p
79−14:9 lit %.n
80−14:13 glyph *
81−14:14 tight glyph ]
82−14:16 str "b"
79+14:9 lit %.y
80+14:13 lit %.n
81+14:16 tight glyph ]
82+14:18 glyph ^-
83+14:21 aura @u
84+14:24 lit 0x1f
838515:5 NEWLINE
84−15:5 lit %other
85−15:12 str "e"
86−16:1 DEDENT
87−16:1 DEDENT
88−16:1 NEWLINE
89−16:1 glyph ++
90−16:4 name covered
91−16:12 glyph |=
92−16:15 name m
93−16:16 tight glyph =
94−16:17 tight name msg
95−17:3 INDENT
96−17:3 glyph ?-
97−17:6 name m
98−18:5 INDENT
99−18:5 glyph [
100−18:6 tight lit %p
101−18:9 lit %.y
102−18:13 glyph *
103−18:14 tight glyph ]
104−18:16 str "a"
105−19:5 NEWLINE
106−19:5 glyph [
107−19:6 tight lit %p
108−19:9 lit %.y
109−19:13 lit %.n
110−19:16 tight glyph ]
111−19:18 str "b"
112−20:5 NEWLINE
113−20:5 glyph *
114−20:7 str "e"
115−22:1 DEDENT
116−22:1 DEDENT
117−22:1 NEWLINE
118−22:1 glyph +$
119−22:4 name choice
120−23:3 INDENT
121−23:3 glyph [
122−23:4 tight lit %a
123−23:7 name on
124−23:9 tight glyph =
125−23:10 tight glyph ?
126−23:11 tight glyph ]
127−24:3 NEWLINE
128−24:3 lit %other
129−25:1 DEDENT
130−25:1 NEWLINE
131−25:1 glyph ++
132−25:4 name missing
133−25:12 glyph |=
134−25:15 name x
135−25:16 tight glyph =
136−25:17 tight name choice
137−26:3 INDENT
138−26:3 glyph ?-
139−26:6 name x
140−27:5 INDENT
141−27:5 glyph [
142−27:6 tight lit %a
143−27:9 lit %.y
144−27:12 tight glyph ]
145−27:14 str "yes"
146−28:5 NEWLINE
147−28:5 lit %other
148−28:12 str "other"
86+15:5 glyph [
87+15:6 tight lit %p
88+15:9 lit %.n
89+15:13 lit %.y
90+15:16 tight glyph ]
91+15:18 lit 0
92+16:5 NEWLINE
93+16:5 glyph [
94+16:6 tight lit %p
95+16:9 lit %.n
96+16:13 lit %.n
97+16:16 tight glyph ]
98+16:18 lit 0x2f
99+17:5 NEWLINE
100+17:5 lit %other
101+17:12 glyph ^-
102+17:15 aura @u
103+17:18 lit 0x1f
104+18:1 DEDENT
105+18:1 DEDENT
106+18:1 NEWLINE
107+18:1 glyph ++
108+18:4 name wildcard
109+18:13 glyph |=
110+18:16 name m
111+18:17 tight glyph =
112+18:18 tight name msg
113+19:3 INDENT
114+19:3 glyph ?-
115+19:6 name m
116+20:5 INDENT
117+20:5 glyph [
118+20:6 tight lit %p
119+20:9 lit %.y
120+20:13 glyph *
121+20:14 tight glyph ]
122+20:16 str "a"
123+21:5 NEWLINE
124+21:5 glyph [
125+21:6 tight lit %p
126+21:9 lit %.n
127+21:13 glyph *
128+21:14 tight glyph ]
129+21:16 str "b"
130+22:5 NEWLINE
131+22:5 lit %other
132+22:12 str "e"
133+23:1 DEDENT
134+23:1 DEDENT
135+23:1 NEWLINE
136+23:1 glyph ++
137+23:4 name covered
138+23:12 glyph |=
139+23:15 name m
140+23:16 tight glyph =
141+23:17 tight name msg
142+24:3 INDENT
143+24:3 glyph ?-
144+24:6 name m
145+25:5 INDENT
146+25:5 glyph [
147+25:6 tight lit %p
148+25:9 lit %.y
149+25:13 glyph *
150+25:14 tight glyph ]
151+25:16 str "a"
152+26:5 NEWLINE
153+26:5 glyph [
154+26:6 tight lit %p
155+26:9 lit %.y
156+26:13 lit %.n
157+26:16 tight glyph ]
158+26:18 str "b"
159+27:5 NEWLINE
160+27:5 glyph *
161+27:7 str "e"
14916229:1 DEDENT
15016329:1 DEDENT
15116429:1 NEWLINE
152−29:1 glyph ++
153−29:4 name typed
154−29:10 glyph |=
155−29:13 name x
156−29:14 tight glyph =
157−29:15 tight name choice
165+29:1 glyph +$
166+29:4 name choice
15816730:3 INDENT
159−30:3 glyph ?-
160−30:6 name x
161−31:5 INDENT
162−31:5 glyph [
163−31:6 tight lit %a
164−31:9 name value
165−31:14 tight glyph ]
166−31:16 name value
167−32:5 NEWLINE
168−32:5 lit %other
169−32:12 lit %.n
170−33:1 DEDENT
171−33:1 DEDENT
172−33:1 NEWLINE
173−33:1 glyph ++
174−33:4 name duplicate
175−33:14 glyph |=
176−33:17 name x
177−33:18 tight glyph =
178−33:19 tight name choice
179−34:3 INDENT
180−34:3 glyph ?-
181−34:6 name x
182−35:5 INDENT
183−35:5 glyph [
184−35:6 tight lit %a
185−35:9 lit %.y
186−35:12 tight glyph ]
187−35:14 str "yes"
188−36:5 NEWLINE
189−36:5 glyph [
190−36:6 tight lit %a
191−36:9 lit %$
192−36:11 tight glyph ]
193−36:13 str "duplicate"
194−37:5 NEWLINE
195−37:5 glyph *
196−37:7 str "other"
197−38:1 DEDENT
198−38:1 DEDENT
199−38:1 NEWLINE
200−38:1 glyph ++
201−38:4 name shadow
202−38:11 glyph |=
203−38:14 name x
204−38:15 tight glyph =
205−38:16 tight name choice
206−39:3 INDENT
207−39:3 glyph ?-
208−39:6 name x
209−40:5 INDENT
210−40:5 glyph [
211−40:6 tight lit %a
212−40:9 name missing
213−40:16 tight glyph ]
214−40:18 str "yes"
215−41:5 NEWLINE
216−41:5 lit %other
217−41:12 str "other"
218−42:1 DEDENT
219−42:1 DEDENT
220−42:1 NEWLINE
221−42:1 glyph ++
222−42:4 name many-bind
223−42:14 glyph |=
224−42:17 name x
225−42:18 tight glyph =
226−42:19 tight name choice
227−43:3 INDENT
228−43:3 glyph ?-
229−43:6 name x
230−44:5 INDENT
231−44:5 name value
232−44:11 str "anything"
233−45:5 NEWLINE
234−45:5 lit %other
235−45:12 str "dead"
236−45:18 DEDENT
237−45:18 DEDENT
238−45:18 NEWLINE
168+30:3 glyph [
169+30:4 tight lit %a
170+30:7 name on
171+30:9 tight glyph =
172+30:10 tight glyph ?
173+30:11 tight glyph ]
174+31:3 NEWLINE
175+31:3 lit %other
176+32:1 DEDENT
177+32:1 NEWLINE
178+32:1 glyph ++
179+32:4 name missing
180+32:12 glyph |=
181+32:15 name x
182+32:16 tight glyph =
183+32:17 tight name choice
184+33:3 INDENT
185+33:3 glyph ?-
186+33:6 name x
187+34:5 INDENT
188+34:5 glyph [
189+34:6 tight lit %a
190+34:9 lit %.y
191+34:12 tight glyph ]
192+34:14 str "yes"
193+35:5 NEWLINE
194+35:5 lit %other
195+35:12 str "other"
196+36:1 DEDENT
197+36:1 DEDENT
198+36:1 NEWLINE
199+36:1 glyph ++
200+36:4 name typed
201+36:10 glyph |=
202+36:13 name x
203+36:14 tight glyph =
204+36:15 tight name choice
205+37:3 INDENT
206+37:3 glyph ?-
207+37:6 name x
208+38:5 INDENT
209+38:5 glyph [
210+38:6 tight lit %a
211+38:9 name value
212+38:14 tight glyph ]
213+38:16 name value
214+39:5 NEWLINE
215+39:5 lit %other
216+39:12 lit %.n
217+40:1 DEDENT
218+40:1 DEDENT
219+40:1 NEWLINE
220+40:1 glyph ++
221+40:4 name duplicate
222+40:14 glyph |=
223+40:17 name x
224+40:18 tight glyph =
225+40:19 tight name choice
226+41:3 INDENT
227+41:3 glyph ?-
228+41:6 name x
229+42:5 INDENT
230+42:5 glyph [
231+42:6 tight lit %a
232+42:9 lit %.y
233+42:12 tight glyph ]
234+42:14 str "yes"
235+43:5 NEWLINE
236+43:5 glyph [
237+43:6 tight lit %a
238+43:9 lit %$
239+43:11 tight glyph ]
240+43:13 str "duplicate"
241+44:5 NEWLINE
242+44:5 glyph *
243+44:7 str "other"
244+45:1 DEDENT
245+45:1 DEDENT
246+45:1 NEWLINE
247+45:1 glyph ++
248+45:4 name shadow
249+45:11 glyph |=
250+45:14 name x
251+45:15 tight glyph =
252+45:16 tight name choice
253+46:3 INDENT
254+46:3 glyph ?-
255+46:6 name x
256+47:5 INDENT
257+47:5 glyph [
258+47:6 tight lit %a
259+47:9 name missing
260+47:16 tight glyph ]
261+47:18 str "yes"
262+48:5 NEWLINE
263+48:5 lit %other
264+48:12 str "other"
265+49:1 DEDENT
266+49:1 DEDENT
267+49:1 NEWLINE
268+49:1 glyph ++
269+49:4 name many-bind
270+49:14 glyph |=
271+49:17 name x
272+49:18 tight glyph =
273+49:19 tight name choice
274+50:3 INDENT
275+50:3 glyph ?-
276+50:6 name x
277+51:5 INDENT
278+51:5 name value
279+51:11 str "anything"
280+52:5 NEWLINE
281+52:5 lit %other
282+52:12 str "dead"
283+52:18 DEDENT
284+52:18 DEDENT
285+52:18 NEWLINE
tests/golden/types-union-finite/tree.txt+99−78
@@ -25,86 +25,107 @@
2525 (cell 9:5 (lit 9:6 %p) (lit 9:9 %.n) (lit 9:13 %.n))
2626 (str 9:18 "d"))
2727 (arm 10:5 (lit 10:5 %other) (str 10:12 "e"))))))
28− (value 11:1 wildcard
29− (gate 11:13
30− (face 11:16 m (ref 11:18 msg))
28+ (value 11:1 parent
29+ (gate 11:11
30+ (face 11:14 m (ref 11:16 msg))
3131 (body 12:3
3232 (branch 12:3
3333 (wing 12:6 m)
3434 (arm 13:5
35− (cell 13:5 (lit 13:6 %p) (lit 13:9 %.y) (any 13:13))
36− (str 13:16 "a"))
35+ (cell 13:5 (lit 13:6 %p) (lit 13:9 %.y) (lit 13:13 %.y))
36+ (lit 13:18 0x1f))
3737 (arm 14:5
38− (cell 14:5 (lit 14:6 %p) (lit 14:9 %.n) (any 14:13))
39− (str 14:16 "b"))
40− (arm 15:5 (lit 15:5 %other) (str 15:12 "e"))))))
41− (value 16:1 covered
42− (gate 16:12
43− (face 16:15 m (ref 16:17 msg))
44− (body 17:3
45− (branch 17:3
46− (wing 17:6 m)
47− (arm 18:5
48− (cell 18:5 (lit 18:6 %p) (lit 18:9 %.y) (any 18:13))
49− (str 18:16 "a"))
50− (arm 19:5
51− (cell 19:5 (lit 19:6 %p) (lit 19:9 %.y) (lit 19:13 %.n))
52− (str 19:18 "b"))
53− (arm 20:5 (any 20:5) (str 20:7 "e"))))))
54− (mold 22:1 choice
55− (union 23:3
56− (cell 23:3
57− (const 23:4 %a)
58− (face 23:7 on (flag 23:10)))
59− (const 24:3 %other)))
60− (value 25:1 missing
61− (gate 25:12
62− (face 25:15 x (ref 25:17 choice))
63− (body 26:3
64− (branch 26:3
65− (wing 26:6 x)
66− (arm 27:5
67− (cell 27:5 (lit 27:6 %a) (lit 27:9 %.y))
68− (str 27:14 "yes"))
69− (arm 28:5 (lit 28:5 %other) (str 28:12 "other"))))))
70− (value 29:1 typed
71− (gate 29:10
72− (face 29:13 x (ref 29:15 choice))
73− (body 30:3
74− (branch 30:3
75− (wing 30:6 x)
76− (arm 31:5
77− (cell 31:5 (lit 31:6 %a) (bind 31:9 value))
78− (wing 31:16 value))
79− (arm 32:5 (lit 32:5 %other) (lit 32:12 %.n))))))
80− (value 33:1 duplicate
81− (gate 33:14
82− (face 33:17 x (ref 33:19 choice))
83− (body 34:3
84− (branch 34:3
85− (wing 34:6 x)
86− (arm 35:5
87− (cell 35:5 (lit 35:6 %a) (lit 35:9 %.y))
88− (str 35:14 "yes"))
89− (arm 36:5
90− (cell 36:5 (lit 36:6 %a) (lit 36:9 %$))
91− (str 36:13 "duplicate"))
92− (arm 37:5 (any 37:5) (str 37:7 "other"))))))
93− (value 38:1 shadow
94− (gate 38:11
95− (face 38:14 x (ref 38:16 choice))
96− (body 39:3
97− (branch 39:3
98− (wing 39:6 x)
99− (arm 40:5
100− (cell 40:5 (lit 40:6 %a) (bind 40:9 missing))
101− (str 40:18 "yes"))
102− (arm 41:5 (lit 41:5 %other) (str 41:12 "other"))))))
103− (value 42:1 many-bind
104− (gate 42:14
105− (face 42:17 x (ref 42:19 choice))
106− (body 43:3
107− (branch 43:3
108− (wing 43:6 x)
109− (arm 44:5 (bind 44:5 value) (str 44:11 "anything"))
110− (arm 45:5 (lit 45:5 %other) (str 45:12 "dead")))))))
38+ (cell 14:5 (lit 14:6 %p) (lit 14:9 %.y) (lit 14:13 %.n))
39+ (cast 14:18 (aura 14:21 @u) (lit 14:24 0x1f)))
40+ (arm 15:5
41+ (cell 15:5 (lit 15:6 %p) (lit 15:9 %.n) (lit 15:13 %.y))
42+ (lit 15:18 0))
43+ (arm 16:5
44+ (cell 16:5 (lit 16:6 %p) (lit 16:9 %.n) (lit 16:13 %.n))
45+ (lit 16:18 0x2f))
46+ (arm 17:5
47+ (lit 17:5 %other)
48+ (cast 17:12 (aura 17:15 @u) (lit 17:18 0x1f)))))))
49+ (value 18:1 wildcard
50+ (gate 18:13
51+ (face 18:16 m (ref 18:18 msg))
52+ (body 19:3
53+ (branch 19:3
54+ (wing 19:6 m)
55+ (arm 20:5
56+ (cell 20:5 (lit 20:6 %p) (lit 20:9 %.y) (any 20:13))
57+ (str 20:16 "a"))
58+ (arm 21:5
59+ (cell 21:5 (lit 21:6 %p) (lit 21:9 %.n) (any 21:13))
60+ (str 21:16 "b"))
61+ (arm 22:5 (lit 22:5 %other) (str 22:12 "e"))))))
62+ (value 23:1 covered
63+ (gate 23:12
64+ (face 23:15 m (ref 23:17 msg))
65+ (body 24:3
66+ (branch 24:3
67+ (wing 24:6 m)
68+ (arm 25:5
69+ (cell 25:5 (lit 25:6 %p) (lit 25:9 %.y) (any 25:13))
70+ (str 25:16 "a"))
71+ (arm 26:5
72+ (cell 26:5 (lit 26:6 %p) (lit 26:9 %.y) (lit 26:13 %.n))
73+ (str 26:18 "b"))
74+ (arm 27:5 (any 27:5) (str 27:7 "e"))))))
75+ (mold 29:1 choice
76+ (union 30:3
77+ (cell 30:3
78+ (const 30:4 %a)
79+ (face 30:7 on (flag 30:10)))
80+ (const 31:3 %other)))
81+ (value 32:1 missing
82+ (gate 32:12
83+ (face 32:15 x (ref 32:17 choice))
84+ (body 33:3
85+ (branch 33:3
86+ (wing 33:6 x)
87+ (arm 34:5
88+ (cell 34:5 (lit 34:6 %a) (lit 34:9 %.y))
89+ (str 34:14 "yes"))
90+ (arm 35:5 (lit 35:5 %other) (str 35:12 "other"))))))
91+ (value 36:1 typed
92+ (gate 36:10
93+ (face 36:13 x (ref 36:15 choice))
94+ (body 37:3
95+ (branch 37:3
96+ (wing 37:6 x)
97+ (arm 38:5
98+ (cell 38:5 (lit 38:6 %a) (bind 38:9 value))
99+ (wing 38:16 value))
100+ (arm 39:5 (lit 39:5 %other) (lit 39:12 %.n))))))
101+ (value 40:1 duplicate
102+ (gate 40:14
103+ (face 40:17 x (ref 40:19 choice))
104+ (body 41:3
105+ (branch 41:3
106+ (wing 41:6 x)
107+ (arm 42:5
108+ (cell 42:5 (lit 42:6 %a) (lit 42:9 %.y))
109+ (str 42:14 "yes"))
110+ (arm 43:5
111+ (cell 43:5 (lit 43:6 %a) (lit 43:9 %$))
112+ (str 43:13 "duplicate"))
113+ (arm 44:5 (any 44:5) (str 44:7 "other"))))))
114+ (value 45:1 shadow
115+ (gate 45:11
116+ (face 45:14 x (ref 45:16 choice))
117+ (body 46:3
118+ (branch 46:3
119+ (wing 46:6 x)
120+ (arm 47:5
121+ (cell 47:5 (lit 47:6 %a) (bind 47:9 missing))
122+ (str 47:18 "yes"))
123+ (arm 48:5 (lit 48:5 %other) (str 48:12 "other"))))))
124+ (value 49:1 many-bind
125+ (gate 49:14
126+ (face 49:17 x (ref 49:19 choice))
127+ (body 50:3
128+ (branch 50:3
129+ (wing 50:6 x)
130+ (arm 51:5 (bind 51:5 value) (str 51:11 "anything"))
131+ (arm 52:5 (lit 52:5 %other) (str 52:12 "dead")))))))
tests/golden/types-union-finite/types.txt+3−2
@@ -1,16 +1,17 @@
11partial inference; module not checked
22+$ msg: cases proven disjoint; mold not checked
33++ boolean-table: $-(msg @t)
4+++ parent: $-(msg @u)
45++ wildcard: $-(msg @t)
56++ covered: branch arm is covered by earlier arms
6−/tests/golden/types-union-finite/source.jibb:19:5: covered arm
7+/tests/golden/types-union-finite/source.jibb:26:5: covered arm
78 [%p %.y %.n] "b"
89 ^
910+$ choice: cases proven disjoint; mold not checked
1011++ missing: missing union case [%a on=%.n]
1112++ typed: $-(choice ?)
1213++ duplicate: branch arm is covered by earlier arms
13−/tests/golden/types-union-finite/source.jibb:36:5: covered arm
14+/tests/golden/types-union-finite/source.jibb:43:5: covered arm
1415 [%a %$] "duplicate"
1516 ^
1617++ shadow: pattern binder shadows a name
tests/golden/types-union-patterns-generic/about.txt+1−1
@@ -1,4 +1,4 @@
11source: Grammar, Patterns: "Every case needs an arm or a catch-all"; Molds: "Type variables are capitals, generalized per `++`."
2−tests: Matching generic union cases preserves shared payload variables and concrete payload types. Different result variables, partial patterns, unresolved result tags and an explicit capital forced concrete remain unsupported. The same binder name can be reused in separate arms, and a duplicate arm is dead.
2+tests: Matching generic union cases preserves shared payload variables and concrete payload types. Distinct result variables are diagnosed rather than forced equal; partial patterns, unresolved result tags and an explicit capital forced concrete remain unsupported. The same binder name can be reused in separate arms, and a duplicate arm is dead.
33expect: parses
44expect-types: a partial inference report
tests/golden/types-union-patterns-generic/types.txt+7−1
@@ -7,7 +7,13 @@ partial inference; module not checked
77 [%ok again] again
88 ^
99++ nested: partial union pattern is not supported by partial inference
10−++ different: union branch result matching needs unsupported inference
10+++ different: distinct type variables `A` and `B` must not be forced equal; use the same capital for a shared type
11+/tests/golden/types-union-patterns-generic/source.jibb:21:27: first type variable
12+++ different |= r=(result A B)
13+ ^
14+/tests/golden/types-union-patterns-generic/source.jibb:21:29: second type variable
15+++ different |= r=(result A B)
16+ ^
1117++ forced: explicit capital constraints are not supported by partial inference
1218++ reused: $-((result A A) A)
1319++ pending: union branch result matching needs unsupported inference
tests/lib/jibb-api-paths.hoon+39−2
@@ -34,7 +34,8 @@
3434 ?~ scry-bad ~[leaf+"API path fixture scry-bad is missing"]
3535 ?~ expected ~[leaf+"API path expected output is missing"]
3636 =/ got (fixture-output prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text missing-decl) (text value-clash) (text poke-clash) (text scry) (text scry-bad))
37− ?. =(got expected) ~[leaf+"API path analysis output differs from expected.txt"]
37+ :: A definite error's report spans several lines of expected.txt.
38+ ?. =((to-wain:format (of-wain:format got)) expected) ~[leaf+"API path analysis output differs from expected.txt"]
3839 ~
3940++ show-result
4041 |= [label=@t result=(each (list iapi-path-typed:jibb) @t)]
@@ -51,6 +52,32 @@
5152 =/ params=tape
5253 (zing (turn segments.info |=(s=pseg:jibb ?:(?=(%typed -.s) " {(trip name.s)}=@{(trip aura.s)}" ""))))
5354 (crip "{(trip name.info)}: full={(show-itype:jibb full.item ~)} diffs:{diff-text} parameters:{params}")
55+++ standard-unit
56+ |= typ=itype:jibb
57+ ^- ?
58+ ?. ?=(%union -.typ) |
59+ ?. =(origin.typ `[/lib/jibb/prelude/jibb %unit]) |
60+ ?. =(label.typ `%unit) |
61+ =(args.typ ~[[%atom %t]])
62+++ unit-detail
63+ |= result=(each (list iapi-path-typed:jibb) @t)
64+ ^- @t
65+ ?: ?=(%| -.result) 'unit marks: rejected'
66+ ?. ?=([* ~] p.result) 'unit marks: wrong path count'
67+ =/ item=iapi-path-typed:jibb i.p.result
68+ ?. ?=([* ~] diffs.item) 'unit marks: wrong diff count'
69+ ?: &((standard-unit full.item) (standard-unit typ.i.diffs.item))
70+ 'unit marks: canonical'
71+ 'unit marks: opaque'
72+++ unit-poke-detail
73+ |= interface=(unit ifile:jibb)
74+ ^- @t
75+ ?~ interface 'unit poke: rejected'
76+ =/ mark=(unit ischeme:jibb) (find-jibb-mold:jibb %unit-full u.interface)
77+ ?~ mark 'unit poke: missing export'
78+ ?. ?=(~ vars.u.mark) 'unit poke: generic export'
79+ ?: (standard-unit typ.u.mark) 'unit poke: canonical'
80+ 'unit poke: opaque'
5481++ scry-detail
5582 |= result=(each (list iapi-path-typed:jibb) @t)
5683 ^- @t
@@ -78,6 +105,15 @@
78105 =/ duplicate=(list [mark=term result=*]) [[%todos mt] marks]
79106 =/ file=path /ui/api/todo/jibb
80107 =/ ok (api-path-analysis-source:jibb file api ~ marks ~ prepared)
108+ =/ unit-node=* [%apply %unit ~[[%atom %t ~]]]
109+ =/ unit-marks=imark-externals:jibb ~[[%unit-full [%& unit-node]] [%unit-diff [%& unit-node]]]
110+ =/ unit-api=@t '/% %unit-full\0a/% %unit-diff\0a+$ paths [%items /items (facts unit-full unit-diff)]\0a'
111+ =/ unit-ok (api-path-analysis-source:jibb /ui/api/unit/jibb unit-api ~ unit-marks ~ prepared)
112+ =/ unit-poke-source=@t '/% %unit-full\0a+$ poke unit-full\0a'
113+ =/ unit-poke-parsed=(each module:jibb error:jibb) (parse:jibb /ui/api/unit/jibb unit-poke-source)
114+ =/ unit-poke=(unit ifile:jibb)
115+ ?: ?=(%| -.unit-poke-parsed) ~
116+ (api-poke-interface:jibb /ui/api/unit/jibb p.unit-poke-parsed unit-marks values.u.prepared molds.u.prepared `iface.u.prepared)
81117 =/ miss (api-path-analysis-source:jibb file api ~ missing ~ prepared)
82118 =/ dup (api-path-analysis-source:jibb file api ~ duplicate ~ prepared)
83119 =/ undeclared (api-path-analysis-source:jibb file missing-decl ~ marks ~ prepared)
@@ -100,5 +136,6 @@
100136 (show-result 'todo' ok)
101137 ==
102138 =. lines ?:(?=(%& -.ok) (weld lines (turn p.ok show-path)) lines)
103− (weld lines ~[(show-result 'missing mark' miss) (show-result 'duplicate mark' dup) (show-result 'undeclared mark' undeclared) (show-result 'value collision' clash) (show-result 'poke collision' poke) (show-result 'scry matching parameters' scry-ok) (scry-detail scry-ok) (show-result 'scry unknown parameter' scry-bad) (show-result 'wrong path' wrong) (show-result 'missing prelude' unprepared) (show-result 'private import' private) (show-result 'indirect private import' indirect) (show-result 'cycle' cycle)])
139+ =. lines ?:(?=(%& -.unit-ok) (weld lines (turn p.unit-ok show-path)) lines)
140+ (weld lines ~[(unit-detail unit-ok) (unit-poke-detail unit-poke) (show-result 'missing mark' miss) (show-result 'duplicate mark' dup) (show-result 'undeclared mark' undeclared) (show-result 'value collision' clash) (show-result 'poke collision' poke) (show-result 'scry matching parameters' scry-ok) (scry-detail scry-ok) (show-result 'scry unknown parameter' scry-bad) (show-result 'wrong path' wrong) (show-result 'missing prelude' unprepared) (show-result 'private import' private) (show-result 'indirect private import' indirect) (show-result 'cycle' cycle)])
104141--
tests/lib/jibb-bridge.hoon+5−2
@@ -129,6 +129,8 @@
129129 [%fixture %texts (read %texts)]
130130 [%fixture %numbers (read %numbers)]
131131 [%fixture %maybe (read %maybe)]
132+ [%fixture %unit-choice [%& [%fork ~[[%atom %n [~ 0]] [%cell [%atom %tas [~ %some]] [%apply %unit ~[[%atom %t ~]]]]]]]]
133+ [%fixture %unit-list [%& [%apply %list ~[[%apply %unit ~[[%atom %t ~]]]]]]]
132134 [%fixture %tagged-list (read %tagged-list)]
133135 [%fixture %buckets (read %buckets)]
134136 [%fixture %collection-rec (read %collection-rec)]
@@ -159,9 +161,10 @@
159161 =/ prelude=@t (crip "++ prelude-id |= x x\0a")
160162 =/ modules=(list [at=path source=@t]) ~[[~[%ui %helper %jibb] dep]]
161163 =/ hidden=@t (golden-types-with-prelude:jibb /ui/main/jibb root external ~ modules prelude)
162− =/ unit-prelude=@t (crip "+$ unit |$ [A]\0a ~\0a [~ u=A]\0a")
164+ =/ unit-prelude=@t
165+ (crip "+$ list |$ [A]\0a ~\0a [i=A t=(list A)]\0a+$ unit |$ [A]\0a ~\0a [~ u=A]\0a++ fall |= args=[(unit A) A]\0a ?- args\0a [maybe fallback]\0a ?- maybe\0a ~ fallback\0a [~ value] value\0a++ need |= maybe=(unit A)\0a ?- maybe\0a ~ !!\0a [~ value] value\0a")
163166 =/ unit-client=@t
164− (crip "/- fixture\0a++ canonical ^- (unit @t) `\"hi\"\0a++ lookalike ^- zero-lookalike.fixture `\"hi\"\0a")
167+ (crip "/- fixture\0a++ canonical ^- (unit @t) `\"hi\"\0a++ canonical-fall |= x=(unit @t) (fall x \"fallback\")\0a++ canonical-need |= x=(unit @t) (need x)\0a++ canonical-cast |= x=(unit @t) ^- (unit @t) x\0a++ maybe-id |= x=maybe.fixture x\0a++ maybe-fall |= x=maybe.fixture (fall x \"fallback\")\0a++ maybe-need |= x=maybe.fixture (need x)\0a++ maybe-cast |= x=maybe.fixture ^- (unit @t) x\0a++ unit-choice-need |= x=unit-choice.fixture\0a ?- x\0a ~ \"empty\"\0a [%some maybe] (need maybe)\0a++ unit-list-need |= xs=unit-list.fixture\0a ?- xs\0a ~ \"empty\"\0a [maybe rest] (need maybe)\0a++ lookalike ^- zero-lookalike.fixture `\"hi\"\0a")
165168 =/ unit-report=@t
166169 (golden-types-with-prelude:jibb /ui/unit-client/jibb unit-client external ~ ~ unit-prelude)
167170 (cat 3 report (cat 3 (crip "\0areader-collapsed: {(show-result:jibb-import (read %collapsed))}\0areader-mixed-zero: {(show-result:jibb-import (read %mixed-zero))}\0areader-separate-tags: {(show-result:jibb-import (read %separate-tags))}\0areader-separate-terms: {(show-result:jibb-import (read %separate-terms))}\0a") (cat 3 hidden (cat 3 '\0a' (cat 3 unit-report (cat 3 '\0a' (cat 3 noun-synthetic (cat 3 '\0a' (cat 3 recursive-list-synthetic (cat 3 '\0a' named-recursive-synthetic))))))))))
tests/lib/jibb-deferred.hoon+14−8
@@ -47,6 +47,15 @@
4747 ?:(?=([%atom %t] typ.u.text) 'text use inferred' 'BAD-text-type')
4848 ?:(?=([%atom %p] typ.u.ship) 'ship use inferred independently' 'BAD-ship-type')
4949 ==
50+++ case-branch
51+ ^- (list @t)
52+ =/ source=@t '++ choose |= b=?\0a ?- b\0a %.y 0x1f\0a %.n ^- @u 0x1f\0a'
53+ =/ result=(unit dgcommit:jibb) (checked-source /ui/branch/jibb source)
54+ ?~ result ~['BAD-deferred-branch']
55+ =/ choose=(unit ischeme:jibb) (ienv-lookup:jibb %choose env.u.result)
56+ ?~ choose ~['BAD-deferred-branch-export']
57+ :~ ?:(=(typ.u.choose [%fn [%flag ~] [%atom %u]]) 'deferred branch joins present parent' 'BAD-deferred-branch-type')
58+ ==
5059++ case-negative
5160 |= [missing=@t conflict=@t duplicate=@t hole=@t]
5261 ^- (list @t)
@@ -69,11 +78,8 @@
6978++ case-fresh
7079 ^- (list @t)
7180 =/ env=ienv:jibb ~[[%x [[%fn [%var 1.000.007] [%var 1.000.007]] ~[1.000.007 2.000.001]]]]
72− =/ scanned=(unit dgscan:jibb) (dg-all-env-ids:jibb env 200 ~)
73− =/ small=(unit dgscan:jibb) (dg-all-env-ids:jibb env 1 ~)
74− ?~ scanned ~['BAD-scan']
75− :~ ?:(=(2.000.002 (dg-next-id:jibb ids.u.scanned 0)) 'fresh ID exceeds raw and quantified IDs' 'BAD-fresh')
76− ?:(?=(~ small) 'fresh ID scan respects budget' 'BAD-fuel')
81+ :~ ?:(=(`2.000.002 (ienv-fresh-id:jibb env)) 'fresh ID exceeds raw and quantified IDs' 'BAD-fresh')
82+ ?:(=(`1 (ienv-fresh-id:jibb ~)) 'fresh ID of an empty environment is 1' 'BAD-empty')
7783 ==
7884++ case-safety
7985 ^- (list @t)
@@ -169,10 +175,9 @@
169175 ^- (list @t)
170176 =/ tree=itype:jibb [%grec /ui/test/jibb %tree ~ *shape:jibb ~[[%var 7]]]
171177 =/ bounded=(unit dgscan:jibb) (dg-scan:jibb ~[tree] ~ 256 ~)
172− =/ env=ienv:jibb ~[[%t [tree ~[7]]]]
173− =/ all=(unit dgscan:jibb) (dg-all-env-ids:jibb env 256 ~)
178+ =/ env=ienv:jibb ~[[%t [tree ~[7]]] [%r [[%cell [%recursive %notes %node ~] [%var 9]] ~]]]
174179 :~ ?:(?=(~ bounded) 'grec constraint scan declines' 'BAD-grec-scan')
175− ?:(?=(~ all) 'grec fresh-id scan declines' 'BAD-grec-freshness')
180+ ?:(=(`10 (ienv-fresh-id:jibb env)) 'fresh ID passes over grec arguments and recursive leaves' 'BAD-grec-freshness')
176181 ==
177182++ case-default-behavior
178183 ^- @t
@@ -226,6 +231,7 @@
226231 ^- @t
227232 =/ lines=(list @t) (case-nested nested-src)
228233 =. lines (weld lines (case-principal principal-src))
234+ =. lines (weld lines case-branch)
229235 =. lines (weld lines (case-negative missing-src conflict-src duplicate-src hole-src))
230236 =. lines (weld lines (case-groups local-src mutual-src))
231237 =. lines (weld lines (case-mold-hole mold-hole-src))
tests/lib/jibb-full-overlap-basic.hoon+63−16
@@ -11,6 +11,10 @@
1111/* child %txt /tests/type-full-overlap/child/txt
1212/* generic %txt /tests/type-full-overlap/generic/txt
1313/* duplicate-generic %txt /tests/type-full-overlap/duplicate-generic/txt
14+/* atoms %txt /tests/type-full-overlap/atoms/txt
15+/* flag %txt /tests/type-full-overlap/flag/txt
16+/* nested %txt /tests/type-full-overlap/nested/txt
17+/* order %txt /tests/type-full-overlap/order/txt
1418/* expected %txt /tests/type-full-overlap/expected-basic/txt
1519|%
1620+$ overlap-evidence [file=path source=@t name=term cases=upair:jibb]
@@ -30,24 +34,39 @@
3034 ?~ cases.sh ~
3135 ?~ t.cases.sh ~
3236 `[at.i.cases.sh at.i.t.cases.sh %overlap]
33−++ source-witness
37+++ source-overlap
3438 |= [file=path source=@t name=term]
35− ^- ?
39+ ^- (unit upair:jibb)
3640 =/ parsed (parse:jibb file source)
37− ?: ?=(%| -.parsed) |
41+ ?: ?=(%| -.parsed) ~
3842 =/ molds=imolds:jibb (collect-simple-molds:jibb defs.p.parsed)
3943 =/ found=(unit shape:jibb) (find-simple-mold:jibb name molds)
40− ?~ found |
44+ ?~ found ~
4145 =/ sh=shape:jibb u.found
4246 =? sh ?=(%generic -.sh) body.sh
43− ?. ?=(%union -.sh) |
44− ?=(^ (union-source-overlap:jibb cases.sh molds 256))
47+ ?. ?=(%union -.sh) ~
48+ (union-source-overlap:jibb cases.sh molds 256)
49+++ source-witness
50+ |= [file=path source=@t name=term]
51+ ^- ?
52+ ?=(^ (source-overlap file source name))
53+:: An overlapping pair of cases written at column 3 of the given lines.
54+++ pair-at
55+ |= [pair=upair:jibb first=@ud second=@ud]
56+ ^- ?
57+ ?& =(%overlap relation.pair)
58+ =(first line.beg.first.pair)
59+ =(3 col.beg.first.pair)
60+ =(second line.beg.second.pair)
61+ =(3 col.beg.second.pair)
62+ ==
4563++ detailed
4664 |= [file=path source=@t modules=jbundle:jibb]
4765 ^- detailed-result
4866 (infer-jibb-file-detailed:jibb file source ~ ~ modules ~[file] ~ ~ ~ ~)
67+:: The first two cases overlap, written on consecutive lines from .line.
4968++ expected-overlap
50− |= [file=path source=@t name=term]
69+ |= [file=path source=@t name=term line=@ud]
5170 ^- ?
5271 =/ expected=(unit upair:jibb) (source-pair file source name)
5372 ?~ expected |
@@ -61,9 +80,9 @@
6180 =(name.ev name)
6281 =(cases.ev u.expected)
6382 =(%overlap relation.cases.ev)
64− =(3 line.beg.first.cases.ev)
83+ =(line line.beg.first.cases.ev)
6584 =(3 col.beg.first.cases.ev)
66− =(4 line.beg.second.cases.ev)
85+ =(+(line) line.beg.second.cases.ev)
6786 =(3 col.beg.second.cases.ev)
6887 ==
6988++ plain-failure
@@ -75,7 +94,7 @@
7594 ?: ?=(%& -.result) |
7695 &(!=(0 message.p.result) ?=(~ overlap.p.result))
7796++ run
78− |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
97+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t atoms=@t flag=@t nested=@t order=@t]
7998 ^- (list [@t ?])
8099 =/ root=path /ui/root/jibb
81100 =/ names256=(list @t) (turn (gulf 0 255) |=(n=@ud (scot %ud n)))
@@ -94,6 +113,27 @@
94113 ?: ?=(%& -.legacy) |
95114 =/ lines=wain (to-wain:format p.legacy)
96115 &((lien lines |=(line=@t =(line '/ui/root.jibb:3:3: first union case'))) (lien lines |=(line=@t =(line '/ui/root.jibb:4:3: overlapping case'))))
116+ :: A projected overlap renders the same error as a source witness.
117+ =/ legacy-atoms=jfile-result:jibb (infer-jibb-file:jibb root atoms ~ ~ ~ ~[root] ~ ~ ~ ~)
118+ =/ legacy-projected=?
119+ ?: ?=(%& -.legacy-atoms) |
120+ =((to-wain:format p.legacy-atoms) ~['module mold bad has overlapping cases' '/ui/root.jibb:2:3: first union case' ' @t' ' ^' '/ui/root.jibb:3:3: overlapping case' ' @ud' ' ^'])
121+ :: The source witness alone proves the first two cases of .order, but
122+ :: the projection proves the last two and is consulted first, so both
123+ :: the full check and the partial report name the later pair.
124+ =/ order-source=(unit upair:jibb) (source-overlap root order %bad)
125+ =/ order-result=detailed-result (detailed root order ~)
126+ =/ order-full=?
127+ ?: ?=(%& -.order-result) |
128+ ?~ overlap.p.order-result |
129+ =/ ev=overlap-evidence u.overlap.p.order-result
130+ &(=(file.ev root) =(name.ev %bad) (pair-at cases.ev 5 6))
131+ =/ order-partial=wain (to-wain:format (golden-types:jibb root order))
132+ =/ order-reported=?
133+ ?& (lien order-partial |=(line=@t =(line '+$ bad: overlapping cases; mold not checked')))
134+ (lien order-partial |=(line=@t =(line '/ui/root.jibb:5:3: first union case')))
135+ (lien order-partial |=(line=@t =(line '/ui/root.jibb:6:3: overlapping case')))
136+ ==
97137 =/ imported=detailed-result (detailed root parent ~[[child-file child]])
98138 =/ child-pair=(unit upair:jibb) (source-pair child-file child %child-bad)
99139 =/ import-valid=?
@@ -110,9 +150,15 @@
110150 :~ ['256 generic parameters accepted by scan' (module-mold-params-valid:jibb names256 *(set @t) 256)]
111151 ['257 generic parameters exhaust scan' !(module-mold-params-valid:jibb names257 *(set @t) 256)]
112152 ['duplicate generic parameters fail scan' !(module-mold-params-valid:jibb ~['A' 'A'] *(set @t) 256)]
113− ['same head has source-bound overlap' (expected-overlap root same %bad)]
114− ['zero spelling has source-bound overlap' (expected-overlap root zero %bad)]
115− ['generic wrapper has source-bound overlap' (expected-overlap root generic %bad)]
153+ ['same head has source-bound overlap' (expected-overlap root same %bad 3)]
154+ ['zero spelling has source-bound overlap' (expected-overlap root zero %bad 3)]
155+ ['generic wrapper has source-bound overlap' (expected-overlap root generic %bad 3)]
156+ ['two auras have source-bound overlap' (expected-overlap root atoms %bad 2)]
157+ ['flag and yes have source-bound overlap' (expected-overlap root flag %bad 2)]
158+ ['nested equal tags have source-bound overlap' (expected-overlap root nested %bad 2)]
159+ ['source witness alone names the earlier pair' ?~(order-source | (pair-at u.order-source 3 4))]
160+ ['full check names the later projected pair' order-full]
161+ ['partial report names the same later pair' order-reported]
116162 ['duplicate generic parameters remain unstructured' (plain-failure root duplicate-generic)]
117163 ['unsupported remains unstructured' (plain-failure root unsupported)]
118164 ['later overlap exists in precedence source' (source-witness root precedence %bad)]
@@ -122,6 +168,7 @@
122168 ['distinct alias source parses and checks' &(?=(%& -.good-parsed) ?=(%& -.good-result))]
123169 ['parent itself has different positive overlap' (source-witness root parent %parent-bad)]
124170 ['legacy full-module error contains both excerpts' legacy-excerpts]
171+ ['legacy projected overlap error is exact' legacy-projected]
125172 ['import overlap retains exact child source' import-valid]
126173 ==
127174++ text
@@ -129,14 +176,14 @@
129176 ^- @t
130177 (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
131178++ output
132− |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t]
179+ |= [same=@t zero=@t unsupported=@t precedence=@t duplicate=@t invalid=@t distinct=@t parent=@t child=@t generic=@t duplicate-generic=@t atoms=@t flag=@t nested=@t order=@t]
133180 ^- @t
134− =/ result=(list [@t ?]) (run same zero unsupported precedence duplicate invalid distinct parent child generic duplicate-generic)
181+ =/ result=(list [@t ?]) (run same zero unsupported precedence duplicate invalid distinct parent child generic duplicate-generic atoms flag nested order)
135182 (of-wain:format (turn result |=(entry=[@t ?] (crip "{(trip -.entry)}: {?:(+.entry "ok" "BAD")}"))))
136183++ test-full-overlap-basic
137184 ^- tang
138185 ?~ expected ~[leaf+"expected output missing"]
139− =/ actual=@t (output (text same) (text zero) (text unsupported) (text precedence) (text duplicate) (text invalid) (text distinct) (text parent) (text child) (text generic) (text duplicate-generic))
186+ =/ actual=@t (output (text same) (text zero) (text unsupported) (text precedence) (text duplicate) (text invalid) (text distinct) (text parent) (text child) (text generic) (text duplicate-generic) (text atoms) (text flag) (text nested) (text order))
140187 ?. =((to-wain:format (cat 3 actual '\0a')) expected)
141188 ~[leaf+"full-module overlap output differs"]
142189 ~
tests/lib/jibb-hole-guards.hoon+3−3
@@ -48,11 +48,11 @@
4848 ?. &(?=(%& -.g) ?=(%& -.b) ?=(%& -.v))
4949 ["API path control sources did not parse" failures]
5050 =/ ext=imark-externals:jibb ~[[%todo [%& [%atom %t ~]]]]
51− =? failures ?=(~ (api-path-analysis:jibb p.g ext ~ ~))
51+ =? failures ?=(~ (api-path-analysis:jibb p.g ext ~ ~ *ifile:jibb))
5252 ["a valid API path was rejected" failures]
53− =? failures ?=(^ (api-path-analysis:jibb p.b ext ~ ~))
53+ =? failures ?=(^ (api-path-analysis:jibb p.b ext ~ ~ *ifile:jibb))
5454 ["an API path ignored an unused mold hole" failures]
55− =? failures ?=(^ (api-path-analysis:jibb p.v ext ~ ~))
55+ =? failures ?=(^ (api-path-analysis:jibb p.v ext ~ ~ *ifile:jibb))
5656 ["an API path ignored an unused value hole" failures]
5757 =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb real-prelude real-internal)
5858 ?~ prepared ["actual prelude was not prepared" failures]
tests/lib/jibb-program-init.hoon+33−5
@@ -5,6 +5,11 @@
55/* initializer %txt /tests/type-program-main/initializer/txt
66/* initializer-consumer %txt /tests/type-program-main/initializer-consumer/txt
77/* initializer-unfaced %txt /tests/type-program-main/initializer-unfaced/txt
8+/* initializer-pun %txt /tests/type-program-main/initializer-pun/txt
9+/* initializer-alias %txt /tests/type-program-main/initializer-alias/txt
10+/* initializer-open-update %txt /tests/type-program-main/initializer-open-update/txt
11+/* initializer-open-view %txt /tests/type-program-main/initializer-open-view/txt
12+/* initializer-nested-branch %txt /tests/type-program-main/initializer-nested-branch/txt
813/* initializer-error %txt /tests/type-program-main/initializer-error/txt
914/* initializer-earlier %txt /tests/type-program-main/initializer-earlier/txt
1015/* initializer-model %txt /tests/type-program-main/initializer-model/txt
@@ -94,8 +99,22 @@
9499 ^- @t
95100 (show-error:jibb src [at line col (weld "nothing fixes the union of " literal)])
96101::
102+:: Each alternate writes update, view or subs another way (one faced mold,
103+:: a pun, an alias, generic in the model, generic view and subs samples), or
104+:: gives init a body only ordinary inference takes (a branch over a nested
105+:: call's union), and its initializer must check like the island's.
106+++ program-init-alternates
107+ |= [alternates=(list [name=@ta src=@t]) prepared=iprelude:jibb]
108+ ^- (list tape)
109+ ?~ alternates ~
110+ %+ weld
111+ %+ turn
112+ (program-init-positive /tests/program-main/[name.i.alternates]/jibb src.i.alternates ~ prepared)
113+ |=(reason=tape (weld (weld (trip name.i.alternates) ": ") reason))
114+ $(alternates t.alternates)
115+::
97116++ program-init-errors
98− |= [public=@t private=@t island=@t downstream=@t unfaced=@t negatives=(list @t)]
117+ |= [public=@t private=@t island=@t downstream=@t alternates=(list [name=@ta src=@t]) negatives=(list @t)]
99118 ^- (list tape)
100119 =/ prepared=(unit iprelude:jibb) (program-init-prepared public private)
101120 ?~ prepared ~["synthetic program prelude did not prepare for contextual init"]
@@ -103,14 +122,15 @@
103122 =/ positives=(list tape)
104123 %+ weld
105124 (program-init-positive at island `downstream u.prepared)
106− (program-init-positive /tests/program-main/initializer-unfaced/jibb unfaced ~ u.prepared)
125+ (program-init-alternates alternates u.prepared)
107126 ?. =(9 (lent negatives)) ~["contextual negative fixture count differs"]
108− =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}")
127+ =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}: ++ main")
109128 =/ cases=(list [label=@t at=path src=@t boundary=@t])
110129 :~ ['incompatible error field' at (snag 0 negatives) (program-init-pending at (snag 0 negatives) 6 32 "~")]
111130 ['earlier tuple mismatch' at (snag 1 negatives) (program-init-pending at (snag 1 negatives) 6 34 "~")]
112131 ['inconsistent model' at (snag 2 negatives) (program-init-pending at (snag 2 negatives) 7 32 "~")]
113− ['inconsistent message' at (snag 3 negatives) (program-init-pending at (snag 3 negatives) 9 32 "~")]
132+ :: init checks against update's model; main rejects the other message
133+ ['inconsistent message' at (snag 3 negatives) definitions]
114134 ['missing/generic data sample' at (snag 4 negatives) (program-init-pending at (snag 4 negatives) 6 22 "~")]
115135 ['missing initializer' at (snag 5 negatives) definitions]
116136 ['unrelated pending tag' at (snag 6 negatives) (program-init-pending at (snag 6 negatives) 12 6 "%unrelated")]
@@ -136,5 +156,13 @@
136156 (text initializer-no-main)
137157 (text initializer-subs)
138158 ==
139− (turn (program-init-errors prelude internal (text initializer) (text initializer-consumer) (text initializer-unfaced) negatives) |=(reason=tape leaf+reason))
159+ =/ alternates=(list [name=@ta src=@t])
160+ :~ [%initializer-unfaced (text initializer-unfaced)]
161+ [%initializer-pun (text initializer-pun)]
162+ [%initializer-alias (text initializer-alias)]
163+ [%initializer-open-update (text initializer-open-update)]
164+ [%initializer-open-view (text initializer-open-view)]
165+ [%initializer-nested-branch (text initializer-nested-branch)]
166+ ==
167+ (turn (program-init-errors prelude internal (text initializer) (text initializer-consumer) alternates negatives) |=(reason=tape leaf+reason))
140168--
tests/lib/jibb-program-update.hoon+1−1
@@ -96,7 +96,7 @@
9696 ?~ prepared ~["synthetic program prelude did not prepare for contextual update"]
9797 ?. =(8 (lent negatives)) ~["contextual update negative fixture count differs"]
9898 =/ at=path /tests/program-update/island/jibb
99− =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}")
99+ =/ definitions=@t (crip "module definitions need unsupported inference: {(spud at)}: ++ update")
100100 =/ without-cmd=iprelude:jibb
101101 =/ kept=imold-types:jibb
102102 (skim molds.iface.u.prepared |=(m=[name=term template=ischeme:jibb] !=(%cmd name.m)))
tests/lib/jibb-proj-guards.hoon+3−3
@@ -46,8 +46,8 @@
4646 ?: |(?=(%| -.valid) ?=(%| -.clash) ?=(%| -.poke)) ~["API reservation controls did not parse"]
4747 =/ todo=imark-externals:jibb ~[[%todo [%& [%atom %t ~]]]]
4848 =/ proj-mark=imark-externals:jibb ~[[%proj [%& [%atom %t ~]]]]
49− =/ good=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.valid todo ~ ~)
50− =/ bad=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.clash todo ~ ~)
49+ =/ good=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.valid todo ~ ~ *ifile:jibb)
50+ =/ bad=(unit (list iapi-path-typed:jibb)) (api-path-analysis:jibb p.clash todo ~ ~ *ifile:jibb)
5151 ?~ good ~["a literal /proj path was rejected"]
5252 ?^ bad ~["an API-derived proj path name was accepted"]
5353 =/ prepared=(unit iprelude:jibb) (prepare-prelude-with-internal:jibb real-prelude real-internal)
@@ -58,7 +58,7 @@
5858 proj-graph-errors
5959++ proj-graph-errors
6060 ^- (list tape)
61− =/ child=@t '++ owned ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a++ exported owned\0a'
61+ =/ child=@t '++ exported owned\0a++ owned ^- [a=@t b=@p] (proj [a="hi" b=~zod c=%.y])\0a'
6262 =/ parent=@t '/= dep /ui/dep\0a++ answer exported.dep\0a'
6363 =/ bundle=jbundle:jibb ~[[/ui/dep/jibb child]]
6464 =/ built=jfile-result:jibb (infer-jibb-file:jibb /ui/root/jibb parent ~ ~ bundle ~[/ui/root/jibb] ~ ~ ~ ~)
tests/lib/jibb-theme.hoon+1−1
@@ -63,7 +63,7 @@
6363 =/ prepared=(unit iprelude:jibb)
6464 (prepare-prelude-with-internal:jibb public private)
6565 ?~ prepared ~["theme prelude did not prepare"]
66− =/ expected=tape "[space=[s1=@t [s2=@t s3=@t]] [tones=[normal=@t [background=@t [accent=@t [danger=@t muted=@t]]]] [wide=@t [lang=@t [zone=@t [font=(unit qath.internal) dark=(unit [tones=[normal=@t [background=@t [accent=@t [danger=@t muted=@t]]]]])]]]]]]"
66+ =/ expected=tape "[space=[s1=@t [s2=@t s3=@t]] [tones=[normal=@t [background=@t [accent=@t [danger=@t muted=@t]]]] [wide=@t [lang=@t [zone=@t [font=(unit qath) dark=(unit [tones=[normal=@t [background=@t [accent=@t [danger=@t muted=@t]]]]])]]]]]]"
6767 =/ negatives=(list [label=tape src=@t])
6868 :~ ["wrong nested aura" wrong-nested-aura]
6969 ["missing required field" missing-field]
tests/lib/jibb-todo-full.hoon+9
@@ -17,6 +17,7 @@
1717/* alias %txt /tests/type-todo-full/alias/txt
1818/* wrong-watch %txt /tests/type-todo-full/wrong-watch/txt
1919/* non-gate-view %txt /tests/type-todo-full/non-gate-view/txt
20+/* cast-init %txt /tests/type-todo-full/cast-init/txt
2021/* expected %txt /tests/type-todo-full/expected/txt
2122|%
2223++ text
@@ -130,6 +131,14 @@
130131 (todo-full-legacy-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source))
131132 ?. =((to-wain:format (cat 3 legacy '\0a')) expected)
132133 ~[leaf+"legacy full todo report differs"]
134+ =/ cast-report=@t
135+ (todo-full-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text cast-init))
136+ ?. =((to-wain:format (cat 3 cast-report '\0a')) expected)
137+ ~[leaf+"ordinary annotated initializer was rejected"]
138+ =/ cast-legacy=@t
139+ (todo-full-legacy-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text cast-init))
140+ ?. =((to-wain:format (cat 3 cast-legacy '\0a')) expected)
141+ ~[leaf+"legacy ordinary annotated initializer was rejected"]
133142 =/ imported=@t
134143 (todo-full-import-report prelude internal (text sur) (text action) (text todos) (text update) (text item) (text api) (text source))
135144 ?. =(imported 'downstream import accepted')
tests/lib/jibb.hoondeleted−4000
@@ -1,4000 +0,0 @@
1−:: tests/lib/jibb.hoon: the golden tests, run on a ship by -test
2−::
3−:: Generated by tools/ship gen-tests from the cases in
4−:: tests/golden/. Don't edit it: run tools/ship gen-tests again
5−:: after changing the cases.
6−::
7−:: Each test- arm runs golden:jibb on one case's source.jibb, with the
8−:: file set to /tests/golden/<case>/source/jibb or the logical path in
9−:: path.txt, and compares the outputs with tokens.txt and tree.txt.
10−:: Each file holds the output plus one newline. An expect-types: line
11−:: or types.txt opts a case into golden-types and its types.txt output.
12−:: Files come in through /*; a missing expected output fails its case.
13−:: tools/ship test syncs the desk and runs -test /=jibb-dev=/tests.
14−::
15−:: The .txt files reach Clay through the %txt mark, as lines, so the
16−:: test compares lines: the file's with those of the output plus a
17−:: newline. A %txt file can't show whether it ends in a newline
18−:: (vere's +to-wain jet ends the last line there, with no empty line
19−:: after it), so only tools/golden, and tools/ship test's own warning,
20−:: catch an expected file without its final newline.
21−::
22−/+ jibb, jibb-import
23−/* prelude-source %jibb /lib/jibb/prelude/jibb
24−/* internal-source %jibb /lib/jibb/internal/jibb
25−/* src-1 %jibb /tests/golden/doc-core-02-update/source/jibb
26−/* tok-1 %txt /tests/golden/doc-core-02-update/tokens/txt
27−/* tre-1 %txt /tests/golden/doc-core-02-update/tree/txt
28−/* src-2 %jibb /tests/golden/doc-grammar-01-imports/source/jibb
29−/* tok-2 %txt /tests/golden/doc-grammar-01-imports/tokens/txt
30−/* tre-2 %txt /tests/golden/doc-grammar-01-imports/tree/txt
31−/* src-3 %jibb /tests/golden/doc-grammar-02-buttons/source/jibb
32−/* tok-3 %txt /tests/golden/doc-grammar-02-buttons/tokens/txt
33−/* tre-3 %txt /tests/golden/doc-grammar-02-buttons/tree/txt
34−/* typ-3 %txt /tests/golden/doc-grammar-02-buttons/types/txt
35−/* src-4 %jibb /tests/golden/doc-grammar-03-view-day/source/jibb
36−/* tok-4 %txt /tests/golden/doc-grammar-03-view-day/tokens/txt
37−/* tre-4 %txt /tests/golden/doc-grammar-03-view-day/tree/txt
38−/* src-5 %jibb /tests/golden/doc-grammar-04-step/source/jibb
39−/* tok-5 %txt /tests/golden/doc-grammar-04-step/tokens/txt
40−/* tre-5 %txt /tests/golden/doc-grammar-04-step/tree/txt
41−/* typ-5 %txt /tests/golden/doc-grammar-04-step/types/txt
42−/* src-6 %jibb /tests/golden/doc-grammar-06-cart-store/source/jibb
43−/* tok-6 %txt /tests/golden/doc-grammar-06-cart-store/tokens/txt
44−/* tre-6 %txt /tests/golden/doc-grammar-06-cart-store/tree/txt
45−/* typ-6 %txt /tests/golden/doc-grammar-06-cart-store/types/txt
46−/* src-7 %jibb /tests/golden/doc-grammar-07-basket/source/jibb
47−/* tok-7 %txt /tests/golden/doc-grammar-07-basket/tokens/txt
48−/* tre-7 %txt /tests/golden/doc-grammar-07-basket/tree/txt
49−/* src-8 %jibb /tests/golden/doc-overview-01-cmd-sub/source/jibb
50−/* tok-8 %txt /tests/golden/doc-overview-01-cmd-sub/tokens/txt
51−/* tre-8 %txt /tests/golden/doc-overview-01-cmd-sub/tree/txt
52−/* src-9 %jibb /tests/golden/doc-overview-02-theme/source/jibb
53−/* tok-9 %txt /tests/golden/doc-overview-02-theme/tokens/txt
54−/* tre-9 %txt /tests/golden/doc-overview-02-theme/tree/txt
55−/* src-10 %jibb /tests/golden/doc-overview-04-todo-api/source/jibb
56−/* tok-10 %txt /tests/golden/doc-overview-04-todo-api/tokens/txt
57−/* tre-10 %txt /tests/golden/doc-overview-04-todo-api/tree/txt
58−/* src-11 %jibb /tests/golden/doc-overview-08-about/source/jibb
59−/* tok-11 %txt /tests/golden/doc-overview-08-about/tokens/txt
60−/* tre-11 %txt /tests/golden/doc-overview-08-about/tree/txt
61−/* src-12 %jibb /tests/golden/doc-overview-09-blog-index/source/jibb
62−/* tok-12 %txt /tests/golden/doc-overview-09-blog-index/tokens/txt
63−/* tre-12 %txt /tests/golden/doc-overview-09-blog-index/tree/txt
64−/* src-13 %jibb /tests/golden/doc-overview-10-todo-list/source/jibb
65−/* tok-13 %txt /tests/golden/doc-overview-10-todo-list/tokens/txt
66−/* tre-13 %txt /tests/golden/doc-overview-10-todo-list/tree/txt
67−/* src-14 %jibb /tests/golden/doc-overview-11-index/source/jibb
68−/* tok-14 %txt /tests/golden/doc-overview-11-index/tokens/txt
69−/* tre-14 %txt /tests/golden/doc-overview-11-index/tree/txt
70−/* src-15 %jibb /tests/golden/fixture-blog-api/source/jibb
71−/* tok-15 %txt /tests/golden/fixture-blog-api/tokens/txt
72−/* tre-15 %txt /tests/golden/fixture-blog-api/tree/txt
73−/* src-16 %jibb /tests/golden/fixture-blog-card/source/jibb
74−/* tok-16 %txt /tests/golden/fixture-blog-card/tokens/txt
75−/* tre-16 %txt /tests/golden/fixture-blog-card/tree/txt
76−/* src-17 %jibb /tests/golden/inline-base32/source/jibb
77−/* tok-17 %txt /tests/golden/inline-base32/tokens/txt
78−/* tre-17 %txt /tests/golden/inline-base32/tree/txt
79−/* src-18 %jibb /tests/golden/inline-call/source/jibb
80−/* tok-18 %txt /tests/golden/inline-call/tokens/txt
81−/* tre-18 %txt /tests/golden/inline-call/tree/txt
82−/* src-19 %jibb /tests/golden/inline-cell/source/jibb
83−/* tok-19 %txt /tests/golden/inline-cell/tokens/txt
84−/* tre-19 %txt /tests/golden/inline-cell/tree/txt
85−/* src-20 %jibb /tests/golden/inline-change-done/source/jibb
86−/* tok-20 %txt /tests/golden/inline-change-done/tokens/txt
87−/* tre-20 %txt /tests/golden/inline-change-done/tree/txt
88−/* src-21 %jibb /tests/golden/inline-change-draft/source/jibb
89−/* tok-21 %txt /tests/golden/inline-change-draft/tokens/txt
90−/* tre-21 %txt /tests/golden/inline-change-draft/tree/txt
91−/* src-22 %jibb /tests/golden/inline-crash/source/jibb
92−/* tok-22 %txt /tests/golden/inline-crash/tokens/txt
93−/* tre-22 %txt /tests/golden/inline-crash/tree/txt
94−/* src-23 %jibb /tests/golden/inline-crash-call/source/jibb
95−/* tok-23 %txt /tests/golden/inline-crash-call/tokens/txt
96−/* tre-23 %txt /tests/golden/inline-crash-call/tree/txt
97−/* src-24 %jibb /tests/golden/inline-crash-operands/source/jibb
98−/* tok-24 %txt /tests/golden/inline-crash-operands/tokens/txt
99−/* tre-24 %txt /tests/golden/inline-crash-operands/tree/txt
100−/* src-25 %jibb /tests/golden/inline-ctor-typed/source/jibb
101−/* tok-25 %txt /tests/golden/inline-ctor-typed/tokens/txt
102−/* tre-25 %txt /tests/golden/inline-ctor-typed/tree/txt
103−/* src-26 %jibb /tests/golden/inline-date/source/jibb
104−/* tok-26 %txt /tests/golden/inline-date/tokens/txt
105−/* tre-26 %txt /tests/golden/inline-date/tree/txt
106−/* src-27 %jibb /tests/golden/inline-decimal/source/jibb
107−/* tok-27 %txt /tests/golden/inline-decimal/tokens/txt
108−/* tre-27 %txt /tests/golden/inline-decimal/tree/txt
109−/* src-28 %jibb /tests/golden/inline-duration/source/jibb
110−/* tok-28 %txt /tests/golden/inline-duration/tokens/txt
111−/* tre-28 %txt /tests/golden/inline-duration/tree/txt
112−/* src-29 %jibb /tests/golden/inline-fold-mold/source/jibb
113−/* tok-29 %txt /tests/golden/inline-fold-mold/tokens/txt
114−/* tre-29 %txt /tests/golden/inline-fold-mold/tree/txt
115−/* src-30 %jibb /tests/golden/inline-gate-after-definition-bad/source/jibb
116−/* tok-30 %txt /tests/golden/inline-gate-after-definition-bad/tokens/txt
117−/* tre-30 %txt /tests/golden/inline-gate-after-definition-bad/tree/txt
118−/* src-31 %jibb /tests/golden/inline-gate-field-bad/source/jibb
119−/* tok-31 %txt /tests/golden/inline-gate-field-bad/tokens/txt
120−/* tre-31 %txt /tests/golden/inline-gate-field-bad/tree/txt
121−/* src-32 %jibb /tests/golden/inline-gate-mold/source/jibb
122−/* tok-32 %txt /tests/golden/inline-gate-mold/tokens/txt
123−/* tre-32 %txt /tests/golden/inline-gate-mold/tree/txt
124−/* src-33 %jibb /tests/golden/inline-gate-sample-binds/source/jibb
125−/* tok-33 %txt /tests/golden/inline-gate-sample-binds/tokens/txt
126−/* tre-33 %txt /tests/golden/inline-gate-sample-binds/tree/txt
127−/* src-34 %jibb /tests/golden/inline-gate-samples/source/jibb
128−/* tok-34 %txt /tests/golden/inline-gate-samples/tokens/txt
129−/* tre-34 %txt /tests/golden/inline-gate-samples/tree/txt
130−/* src-35 %jibb /tests/golden/inline-gate-wide/source/jibb
131−/* tok-35 %txt /tests/golden/inline-gate-wide/tokens/txt
132−/* tre-35 %txt /tests/golden/inline-gate-wide/tree/txt
133−/* src-36 %jibb /tests/golden/inline-generic-apply-bad/source/jibb
134−/* tok-36 %txt /tests/golden/inline-generic-apply-bad/tokens/txt
135−/* tre-36 %txt /tests/golden/inline-generic-apply-bad/tree/txt
136−/* src-37 %jibb /tests/golden/inline-generic-both-bad/source/jibb
137−/* tok-37 %txt /tests/golden/inline-generic-both-bad/tokens/txt
138−/* tre-37 %txt /tests/golden/inline-generic-both-bad/tree/txt
139−/* src-38 %jibb /tests/golden/inline-generic-case-bad/source/jibb
140−/* tok-38 %txt /tests/golden/inline-generic-case-bad/tokens/txt
141−/* tre-38 %txt /tests/golden/inline-generic-case-bad/tree/txt
142−/* src-39 %jibb /tests/golden/inline-generic-cast-bad/source/jibb
143−/* tok-39 %txt /tests/golden/inline-generic-cast-bad/tokens/txt
144−/* tre-39 %txt /tests/golden/inline-generic-cast-bad/tree/txt
145−/* src-40 %jibb /tests/golden/inline-generic-empty-bad/source/jibb
146−/* tok-40 %txt /tests/golden/inline-generic-empty-bad/tokens/txt
147−/* tre-40 %txt /tests/golden/inline-generic-empty-bad/tree/txt
148−/* src-41 %jibb /tests/golden/inline-generic-field-bad/source/jibb
149−/* tok-41 %txt /tests/golden/inline-generic-field-bad/tokens/txt
150−/* tre-41 %txt /tests/golden/inline-generic-field-bad/tree/txt
151−/* src-42 %jibb /tests/golden/inline-generic-mold/source/jibb
152−/* tok-42 %txt /tests/golden/inline-generic-mold/tokens/txt
153−/* tre-42 %txt /tests/golden/inline-generic-mold/tree/txt
154−/* src-43 %jibb /tests/golden/inline-generic-prefix-bad/source/jibb
155−/* tok-43 %txt /tests/golden/inline-generic-prefix-bad/tokens/txt
156−/* tre-43 %txt /tests/golden/inline-generic-prefix-bad/tree/txt
157−/* src-44 %jibb /tests/golden/inline-hex/source/jibb
158−/* tok-44 %txt /tests/golden/inline-hex/tokens/txt
159−/* tre-44 %txt /tests/golden/inline-hex/tree/txt
160−/* src-45 %jibb /tests/golden/inline-hoon-union-apply-bad/source/jibb
161−/* tok-45 %txt /tests/golden/inline-hoon-union-apply-bad/tokens/txt
162−/* tre-45 %txt /tests/golden/inline-hoon-union-apply-bad/tree/txt
163−/* src-46 %jibb /tests/golden/inline-hoon-union-cast-bad/source/jibb
164−/* tok-46 %txt /tests/golden/inline-hoon-union-cast-bad/tokens/txt
165−/* tre-46 %txt /tests/golden/inline-hoon-union-cast-bad/tree/txt
166−/* src-47 %jibb /tests/golden/inline-hoon-union-definition-bad/source/jibb
167−/* tok-47 %txt /tests/golden/inline-hoon-union-definition-bad/tokens/txt
168−/* tre-47 %txt /tests/golden/inline-hoon-union-definition-bad/tree/txt
169−/* src-48 %jibb /tests/golden/inline-hoon-union-field-bad/source/jibb
170−/* tok-48 %txt /tests/golden/inline-hoon-union-field-bad/tokens/txt
171−/* tre-48 %txt /tests/golden/inline-hoon-union-field-bad/tree/txt
172−/* src-49 %jibb /tests/golden/inline-hoon-union-gate-bad/source/jibb
173−/* tok-49 %txt /tests/golden/inline-hoon-union-gate-bad/tokens/txt
174−/* tre-49 %txt /tests/golden/inline-hoon-union-gate-bad/tree/txt
175−/* src-50 %jibb /tests/golden/inline-hoon-union-nested-sample-bad/source/jibb
176−/* tok-50 %txt /tests/golden/inline-hoon-union-nested-sample-bad/tokens/txt
177−/* tre-50 %txt /tests/golden/inline-hoon-union-nested-sample-bad/tree/txt
178−/* src-51 %jibb /tests/golden/inline-hoon-union-open-apply-bad/source/jibb
179−/* tok-51 %txt /tests/golden/inline-hoon-union-open-apply-bad/tokens/txt
180−/* tre-51 %txt /tests/golden/inline-hoon-union-open-apply-bad/tree/txt
181−/* src-52 %jibb /tests/golden/inline-hoon-union-open-field-bad/source/jibb
182−/* tok-52 %txt /tests/golden/inline-hoon-union-open-field-bad/tokens/txt
183−/* tre-52 %txt /tests/golden/inline-hoon-union-open-field-bad/tree/txt
184−/* src-53 %jibb /tests/golden/inline-hoon-union-sample-bad/source/jibb
185−/* tok-53 %txt /tests/golden/inline-hoon-union-sample-bad/tokens/txt
186−/* tre-53 %txt /tests/golden/inline-hoon-union-sample-bad/tree/txt
187−/* src-54 %jibb /tests/golden/inline-hoon-union-wide-sample-bad/source/jibb
188−/* tok-54 %txt /tests/golden/inline-hoon-union-wide-sample-bad/tokens/txt
189−/* tre-54 %txt /tests/golden/inline-hoon-union-wide-sample-bad/tree/txt
190−/* src-55 %jibb /tests/golden/inline-import-dollar-mark-bad/source/jibb
191−/* tok-55 %txt /tests/golden/inline-import-dollar-mark-bad/tokens/txt
192−/* tre-55 %txt /tests/golden/inline-import-dollar-mark-bad/tree/txt
193−/* src-56 %jibb /tests/golden/inline-import-mark-face-bad/source/jibb
194−/* tok-56 %txt /tests/golden/inline-import-mark-face-bad/tokens/txt
195−/* tre-56 %txt /tests/golden/inline-import-mark-face-bad/tree/txt
196−/* src-57 %jibb /tests/golden/inline-import-root-bad/source/jibb
197−/* tok-57 %txt /tests/golden/inline-import-root-bad/tokens/txt
198−/* tre-57 %txt /tests/golden/inline-import-root-bad/tree/txt
199−/* src-58 %jibb /tests/golden/inline-imports-after-definition/source/jibb
200−/* tok-58 %txt /tests/golden/inline-imports-after-definition/tokens/txt
201−/* tre-58 %txt /tests/golden/inline-imports-after-definition/tree/txt
202−/* src-59 %jibb /tests/golden/inline-island/source/jibb
203−/* tok-59 %txt /tests/golden/inline-island/tokens/txt
204−/* tre-59 %txt /tests/golden/inline-island/tree/txt
205−/* src-60 %jibb /tests/golden/inline-kinds/source/jibb
206−/* tok-60 %txt /tests/golden/inline-kinds/tokens/txt
207−/* tre-60 %txt /tests/golden/inline-kinds/tree/txt
208−/* src-61 %jibb /tests/golden/inline-knot/source/jibb
209−/* tok-61 %txt /tests/golden/inline-knot/tokens/txt
210−/* tre-61 %txt /tests/golden/inline-knot/tree/txt
211−/* src-62 %jibb /tests/golden/inline-leftout-barcab/source/jibb
212−/* tok-62 %txt /tests/golden/inline-leftout-barcab/tokens/txt
213−/* tre-62 %txt /tests/golden/inline-leftout-barcab/tree/txt
214−/* src-63 %jibb /tests/golden/inline-leftout-barcen/source/jibb
215−/* tok-63 %txt /tests/golden/inline-leftout-barcen/tokens/txt
216−/* tre-63 %txt /tests/golden/inline-leftout-barcen/tree/txt
217−/* src-64 %jibb /tests/golden/inline-leftout-barcen-2/source/jibb
218−/* tok-64 %txt /tests/golden/inline-leftout-barcen-2/tokens/txt
219−/* tre-64 %txt /tests/golden/inline-leftout-barcen-2/tree/txt
220−/* src-65 %jibb /tests/golden/inline-leftout-barcen-3/source/jibb
221−/* tok-65 %txt /tests/golden/inline-leftout-barcen-3/tokens/txt
222−/* tre-65 %txt /tests/golden/inline-leftout-barcen-3/tree/txt
223−/* src-66 %jibb /tests/golden/inline-leftout-barhep/source/jibb
224−/* tok-66 %txt /tests/golden/inline-leftout-barhep/tokens/txt
225−/* tre-66 %txt /tests/golden/inline-leftout-barhep/tree/txt
226−/* src-67 %jibb /tests/golden/inline-leftout-bartar/source/jibb
227−/* tok-67 %txt /tests/golden/inline-leftout-bartar/tokens/txt
228−/* tre-67 %txt /tests/golden/inline-leftout-bartar/tree/txt
229−/* src-68 %jibb /tests/golden/inline-leftout-buc-alone/source/jibb
230−/* tok-68 %txt /tests/golden/inline-leftout-buc-alone/tokens/txt
231−/* tre-68 %txt /tests/golden/inline-leftout-buc-alone/tree/txt
232−/* src-69 %jibb /tests/golden/inline-leftout-buc-paren/source/jibb
233−/* tok-69 %txt /tests/golden/inline-leftout-buc-paren/tokens/txt
234−/* tre-69 %txt /tests/golden/inline-leftout-buc-paren/tree/txt
235−/* src-70 %jibb /tests/golden/inline-leftout-buc-paren-2/source/jibb
236−/* tok-70 %txt /tests/golden/inline-leftout-buc-paren-2/tokens/txt
237−/* tre-70 %txt /tests/golden/inline-leftout-buc-paren-2/tree/txt
238−/* src-71 %jibb /tests/golden/inline-leftout-buc-paren-3/source/jibb
239−/* tok-71 %txt /tests/golden/inline-leftout-buc-paren-3/tokens/txt
240−/* tre-71 %txt /tests/golden/inline-leftout-buc-paren-3/tree/txt
241−/* src-72 %jibb /tests/golden/inline-leftout-buccen/source/jibb
242−/* tok-72 %txt /tests/golden/inline-leftout-buccen/tokens/txt
243−/* tre-72 %txt /tests/golden/inline-leftout-buccen/tree/txt
244−/* src-73 %jibb /tests/golden/inline-leftout-cencol/source/jibb
245−/* tok-73 %txt /tests/golden/inline-leftout-cencol/tokens/txt
246−/* tre-73 %txt /tests/golden/inline-leftout-cencol/tree/txt
247−/* src-74 %jibb /tests/golden/inline-leftout-cenhep/source/jibb
248−/* tok-74 %txt /tests/golden/inline-leftout-cenhep/tokens/txt
249−/* tre-74 %txt /tests/golden/inline-leftout-cenhep/tree/txt
250−/* src-75 %jibb /tests/golden/inline-leftout-centis/source/jibb
251−/* tok-75 %txt /tests/golden/inline-leftout-centis/tokens/txt
252−/* tre-75 %txt /tests/golden/inline-leftout-centis/tree/txt
253−/* src-76 %jibb /tests/golden/inline-leftout-colhep/source/jibb
254−/* tok-76 %txt /tests/golden/inline-leftout-colhep/tokens/txt
255−/* tre-76 %txt /tests/golden/inline-leftout-colhep/tree/txt
256−/* src-77 %jibb /tests/golden/inline-leftout-colon-wing/source/jibb
257−/* tok-77 %txt /tests/golden/inline-leftout-colon-wing/tokens/txt
258−/* tre-77 %txt /tests/golden/inline-leftout-colon-wing/tree/txt
259−/* src-78 %jibb /tests/golden/inline-leftout-colsig/source/jibb
260−/* tok-78 %txt /tests/golden/inline-leftout-colsig/tokens/txt
261−/* tre-78 %txt /tests/golden/inline-leftout-colsig/tree/txt
262−/* src-79 %jibb /tests/golden/inline-leftout-coltar/source/jibb
263−/* tok-79 %txt /tests/golden/inline-leftout-coltar/tokens/txt
264−/* tre-79 %txt /tests/golden/inline-leftout-coltar/tree/txt
265−/* src-80 %jibb /tests/golden/inline-leftout-dottar/source/jibb
266−/* tok-80 %txt /tests/golden/inline-leftout-dottar/tokens/txt
267−/* tre-80 %txt /tests/golden/inline-leftout-dottar/tree/txt
268−/* src-81 %jibb /tests/golden/inline-leftout-dottis/source/jibb
269−/* tok-81 %txt /tests/golden/inline-leftout-dottis/tokens/txt
270−/* tre-81 %txt /tests/golden/inline-leftout-dottis/tree/txt
271−/* src-82 %jibb /tests/golden/inline-leftout-faslus/source/jibb
272−/* tok-82 %txt /tests/golden/inline-leftout-faslus/tokens/txt
273−/* tre-82 %txt /tests/golden/inline-leftout-faslus/tree/txt
274−/* src-83 %jibb /tests/golden/inline-leftout-hephep/source/jibb
275−/* tok-83 %txt /tests/golden/inline-leftout-hephep/tokens/txt
276−/* tre-83 %txt /tests/golden/inline-leftout-hephep/tree/txt
277−/* src-84 %jibb /tests/golden/inline-leftout-kethep-wide/source/jibb
278−/* tok-84 %txt /tests/golden/inline-leftout-kethep-wide/tokens/txt
279−/* tre-84 %txt /tests/golden/inline-leftout-kethep-wide/tree/txt
280−/* src-85 %jibb /tests/golden/inline-leftout-kettar/source/jibb
281−/* tok-85 %txt /tests/golden/inline-leftout-kettar/tokens/txt
282−/* tre-85 %txt /tests/golden/inline-leftout-kettar/tree/txt
283−/* src-86 %jibb /tests/golden/inline-leftout-miccol/source/jibb
284−/* tok-86 %txt /tests/golden/inline-leftout-miccol/tokens/txt
285−/* tre-86 %txt /tests/golden/inline-leftout-miccol/tree/txt
286−/* src-87 %jibb /tests/golden/inline-leftout-sail/source/jibb
287−/* tok-87 %txt /tests/golden/inline-leftout-sail/tokens/txt
288−/* tre-87 %txt /tests/golden/inline-leftout-sail/tree/txt
289−/* src-88 %jibb /tests/golden/inline-leftout-sigbar/source/jibb
290−/* tok-88 %txt /tests/golden/inline-leftout-sigbar/tokens/txt
291−/* tre-88 %txt /tests/golden/inline-leftout-sigbar/tree/txt
292−/* src-89 %jibb /tests/golden/inline-leftout-signed-float-auras/source/jibb
293−/* tok-89 %txt /tests/golden/inline-leftout-signed-float-auras/tokens/txt
294−/* tre-89 %txt /tests/golden/inline-leftout-signed-float-auras/tree/txt
295−/* src-90 %jibb /tests/golden/inline-leftout-signed-float-auras-2/source/jibb
296−/* tok-90 %txt /tests/golden/inline-leftout-signed-float-auras-2/tokens/txt
297−/* tre-90 %txt /tests/golden/inline-leftout-signed-float-auras-2/tree/txt
298−/* src-91 %jibb /tests/golden/inline-leftout-sigpam-wide/source/jibb
299−/* tok-91 %txt /tests/golden/inline-leftout-sigpam-wide/tokens/txt
300−/* tre-91 %txt /tests/golden/inline-leftout-sigpam-wide/tree/txt
301−/* src-92 %jibb /tests/golden/inline-leftout-tis-paren/source/jibb
302−/* tok-92 %txt /tests/golden/inline-leftout-tis-paren/tokens/txt
303−/* tre-92 %txt /tests/golden/inline-leftout-tis-paren/tree/txt
304−/* src-93 %jibb /tests/golden/inline-leftout-tisfas/source/jibb
305−/* tok-93 %txt /tests/golden/inline-leftout-tisfas/tokens/txt
306−/* tre-93 %txt /tests/golden/inline-leftout-tisfas/tree/txt
307−/* src-94 %jibb /tests/golden/inline-leftout-tisgal/source/jibb
308−/* tok-94 %txt /tests/golden/inline-leftout-tisgal/tokens/txt
309−/* tre-94 %txt /tests/golden/inline-leftout-tisgal/tree/txt
310−/* src-95 %jibb /tests/golden/inline-leftout-tisgal-2/source/jibb
311−/* tok-95 %txt /tests/golden/inline-leftout-tisgal-2/tokens/txt
312−/* tre-95 %txt /tests/golden/inline-leftout-tisgal-2/tree/txt
313−/* src-96 %jibb /tests/golden/inline-leftout-tisgar/source/jibb
314−/* tok-96 %txt /tests/golden/inline-leftout-tisgar/tokens/txt
315−/* tre-96 %txt /tests/golden/inline-leftout-tisgar/tree/txt
316−/* src-97 %jibb /tests/golden/inline-leftout-tislus/source/jibb
317−/* tok-97 %txt /tests/golden/inline-leftout-tislus/tokens/txt
318−/* tre-97 %txt /tests/golden/inline-leftout-tislus/tree/txt
319−/* src-98 %jibb /tests/golden/inline-leftout-tistis/source/jibb
320−/* tok-98 %txt /tests/golden/inline-leftout-tistis/tokens/txt
321−/* tre-98 %txt /tests/golden/inline-leftout-tistis/tree/txt
322−/* src-99 %jibb /tests/golden/inline-leftout-wutcol/source/jibb
323−/* tok-99 %txt /tests/golden/inline-leftout-wutcol/tokens/txt
324−/* tre-99 %txt /tests/golden/inline-leftout-wutcol/tree/txt
325−/* src-100 %jibb /tests/golden/inline-leftout-wutcol-2/source/jibb
326−/* tok-100 %txt /tests/golden/inline-leftout-wutcol-2/tokens/txt
327−/* tre-100 %txt /tests/golden/inline-leftout-wutcol-2/tree/txt
328−/* src-101 %jibb /tests/golden/inline-leftout-wuthep-wide/source/jibb
329−/* tok-101 %txt /tests/golden/inline-leftout-wuthep-wide/tokens/txt
330−/* tre-101 %txt /tests/golden/inline-leftout-wuthep-wide/tree/txt
331−/* src-102 %jibb /tests/golden/inline-leftout-wutlus/source/jibb
332−/* tok-102 %txt /tests/golden/inline-leftout-wutlus/tokens/txt
333−/* tre-102 %txt /tests/golden/inline-leftout-wutlus/tree/txt
334−/* src-103 %jibb /tests/golden/inline-leftout-wutsig/source/jibb
335−/* tok-103 %txt /tests/golden/inline-leftout-wutsig/tokens/txt
336−/* tre-103 %txt /tests/golden/inline-leftout-wutsig/tree/txt
337−/* src-104 %jibb /tests/golden/inline-leftout-wutzap/source/jibb
338−/* tok-104 %txt /tests/golden/inline-leftout-wutzap/tokens/txt
339−/* tre-104 %txt /tests/golden/inline-leftout-wutzap/tree/txt
340−/* src-105 %jibb /tests/golden/inline-leftout-zap-not/source/jibb
341−/* tok-105 %txt /tests/golden/inline-leftout-zap-not/tokens/txt
342−/* tre-105 %txt /tests/golden/inline-leftout-zap-not/tree/txt
343−/* src-106 %jibb /tests/golden/inline-leftout-zap-not-2/source/jibb
344−/* tok-106 %txt /tests/golden/inline-leftout-zap-not-2/tokens/txt
345−/* tre-106 %txt /tests/golden/inline-leftout-zap-not-2/tree/txt
346−/* src-107 %jibb /tests/golden/inline-leftout-zapgar/source/jibb
347−/* tok-107 %txt /tests/golden/inline-leftout-zapgar/tokens/txt
348−/* tre-107 %txt /tests/golden/inline-leftout-zapgar/tree/txt
349−/* src-108 %jibb /tests/golden/inline-list/source/jibb
350−/* tok-108 %txt /tests/golden/inline-list/tokens/txt
351−/* tre-108 %txt /tests/golden/inline-list/tree/txt
352−/* src-109 %jibb /tests/golden/inline-list-parens/source/jibb
353−/* tok-109 %txt /tests/golden/inline-list-parens/tokens/txt
354−/* tre-109 %txt /tests/golden/inline-list-parens/tree/txt
355−/* src-110 %jibb /tests/golden/inline-literal-defaults/source/jibb
356−/* tok-110 %txt /tests/golden/inline-literal-defaults/tokens/txt
357−/* tre-110 %txt /tests/golden/inline-literal-defaults/tree/txt
358−/* src-111 %jibb /tests/golden/inline-load-slug/source/jibb
359−/* tok-111 %txt /tests/golden/inline-load-slug/tokens/txt
360−/* tre-111 %txt /tests/golden/inline-load-slug/tree/txt
361−/* src-112 %jibb /tests/golden/inline-local-names/source/jibb
362−/* tok-112 %txt /tests/golden/inline-local-names/tokens/txt
363−/* tre-112 %txt /tests/golden/inline-local-names/tree/txt
364−/* src-113 %jibb /tests/golden/inline-local-names-bodies/source/jibb
365−/* tok-113 %txt /tests/golden/inline-local-names-bodies/tokens/txt
366−/* tre-113 %txt /tests/golden/inline-local-names-bodies/tree/txt
367−/* src-114 %jibb /tests/golden/inline-loobean/source/jibb
368−/* tok-114 %txt /tests/golden/inline-loobean/tokens/txt
369−/* tre-114 %txt /tests/golden/inline-loobean/tree/txt
370−/* src-115 %jibb /tests/golden/inline-mark-digit/source/jibb
371−/* tok-115 %txt /tests/golden/inline-mark-digit/tokens/txt
372−/* tre-115 %txt /tests/golden/inline-mark-digit/tree/txt
373−/* src-116 %jibb /tests/golden/inline-module-definitions/source/jibb
374−/* tok-116 %txt /tests/golden/inline-module-definitions/tokens/txt
375−/* tre-116 %txt /tests/golden/inline-module-definitions/tree/txt
376−/* src-117 %jibb /tests/golden/inline-mold-add/source/jibb
377−/* tok-117 %txt /tests/golden/inline-mold-add/tokens/txt
378−/* tre-117 %txt /tests/golden/inline-mold-add/tree/txt
379−/* src-118 %jibb /tests/golden/inline-mold-any-empty/source/jibb
380−/* tok-118 %txt /tests/golden/inline-mold-any-empty/tokens/txt
381−/* tre-118 %txt /tests/golden/inline-mold-any-empty/tree/txt
382−/* src-119 %jibb /tests/golden/inline-mold-atoms/source/jibb
383−/* tok-119 %txt /tests/golden/inline-mold-atoms/tokens/txt
384−/* tre-119 %txt /tests/golden/inline-mold-atoms/tree/txt
385−/* src-120 %jibb /tests/golden/inline-mold-constants/source/jibb
386−/* tok-120 %txt /tests/golden/inline-mold-constants/tokens/txt
387−/* tre-120 %txt /tests/golden/inline-mold-constants/tree/txt
388−/* src-121 %jibb /tests/golden/inline-mold-containers/source/jibb
389−/* tok-121 %txt /tests/golden/inline-mold-containers/tokens/txt
390−/* tre-121 %txt /tests/golden/inline-mold-containers/tree/txt
391−/* src-122 %jibb /tests/golden/inline-mold-gate/source/jibb
392−/* tok-122 %txt /tests/golden/inline-mold-gate/tokens/txt
393−/* tre-122 %txt /tests/golden/inline-mold-gate/tree/txt
394−/* src-123 %jibb /tests/golden/inline-mold-generic/source/jibb
395−/* tok-123 %txt /tests/golden/inline-mold-generic/tokens/txt
396−/* tre-123 %txt /tests/golden/inline-mold-generic/tree/txt
397−/* src-124 %jibb /tests/golden/inline-mold-opaque/source/jibb
398−/* tok-124 %txt /tests/golden/inline-mold-opaque/tokens/txt
399−/* tre-124 %txt /tests/golden/inline-mold-opaque/tree/txt
400−/* src-125 %jibb /tests/golden/inline-mold-paths/source/jibb
401−/* tok-125 %txt /tests/golden/inline-mold-paths/tokens/txt
402−/* tre-125 %txt /tests/golden/inline-mold-paths/tree/txt
403−/* src-126 %jibb /tests/golden/inline-mold-records/source/jibb
404−/* tok-126 %txt /tests/golden/inline-mold-records/tokens/txt
405−/* tre-126 %txt /tests/golden/inline-mold-records/tree/txt
406−/* src-127 %jibb /tests/golden/inline-namespaces/source/jibb
407−/* tok-127 %txt /tests/golden/inline-namespaces/tokens/txt
408−/* tre-127 %txt /tests/golden/inline-namespaces/tree/txt
409−/* src-128 %jibb /tests/golden/inline-no-operators/source/jibb
410−/* tok-128 %txt /tests/golden/inline-no-operators/tokens/txt
411−/* tre-128 %txt /tests/golden/inline-no-operators/tree/txt
412−/* src-129 %jibb /tests/golden/inline-no-subs/source/jibb
413−/* tok-129 %txt /tests/golden/inline-no-subs/tokens/txt
414−/* tre-129 %txt /tests/golden/inline-no-subs/tree/txt
415−/* src-130 %jibb /tests/golden/inline-null/source/jibb
416−/* tok-130 %txt /tests/golden/inline-null/tokens/txt
417−/* tre-130 %txt /tests/golden/inline-null/tree/txt
418−/* src-131 %jibb /tests/golden/inline-pair/source/jibb
419−/* tok-131 %txt /tests/golden/inline-pair/tokens/txt
420−/* tre-131 %txt /tests/golden/inline-pair/tree/txt
421−/* src-132 %jibb /tests/golden/inline-pairs-two-items/source/jibb
422−/* tok-132 %txt /tests/golden/inline-pairs-two-items/tokens/txt
423−/* tre-132 %txt /tests/golden/inline-pairs-two-items/tree/txt
424−/* src-133 %jibb /tests/golden/inline-path/source/jibb
425−/* tok-133 %txt /tests/golden/inline-path/tokens/txt
426−/* tre-133 %txt /tests/golden/inline-path/tree/txt
427−/* src-134 %jibb /tests/golden/inline-pattern-any/source/jibb
428−/* tok-134 %txt /tests/golden/inline-pattern-any/tokens/txt
429−/* tre-134 %txt /tests/golden/inline-pattern-any/tree/txt
430−/* src-135 %jibb /tests/golden/inline-pattern-cell/source/jibb
431−/* tok-135 %txt /tests/golden/inline-pattern-cell/tokens/txt
432−/* tre-135 %txt /tests/golden/inline-pattern-cell/tree/txt
433−/* src-136 %jibb /tests/golden/inline-pattern-cell-open-bad/source/jibb
434−/* tok-136 %txt /tests/golden/inline-pattern-cell-open-bad/tokens/txt
435−/* tre-136 %txt /tests/golden/inline-pattern-cell-open-bad/tree/txt
436−/* src-137 %jibb /tests/golden/inline-pattern-crash-arm/source/jibb
437−/* tok-137 %txt /tests/golden/inline-pattern-crash-arm/tokens/txt
438−/* tre-137 %txt /tests/golden/inline-pattern-crash-arm/tree/txt
439−/* src-138 %jibb /tests/golden/inline-pattern-crash-bad/source/jibb
440−/* tok-138 %txt /tests/golden/inline-pattern-crash-bad/tokens/txt
441−/* tre-138 %txt /tests/golden/inline-pattern-crash-bad/tree/txt
442−/* src-139 %jibb /tests/golden/inline-pattern-date-bad/source/jibb
443−/* tok-139 %txt /tests/golden/inline-pattern-date-bad/tokens/txt
444−/* tre-139 %txt /tests/golden/inline-pattern-date-bad/tree/txt
445−/* src-140 %jibb /tests/golden/inline-pattern-duration-bad/source/jibb
446−/* tok-140 %txt /tests/golden/inline-pattern-duration-bad/tokens/txt
447−/* tre-140 %txt /tests/golden/inline-pattern-duration-bad/tree/txt
448−/* src-141 %jibb /tests/golden/inline-pattern-eq/source/jibb
449−/* tok-141 %txt /tests/golden/inline-pattern-eq/tokens/txt
450−/* tre-141 %txt /tests/golden/inline-pattern-eq/tree/txt
451−/* src-142 %jibb /tests/golden/inline-pattern-face-bad/source/jibb
452−/* tok-142 %txt /tests/golden/inline-pattern-face-bad/tokens/txt
453−/* tre-142 %txt /tests/golden/inline-pattern-face-bad/tree/txt
454−/* src-143 %jibb /tests/golden/inline-pattern-head-tag/source/jibb
455−/* tok-143 %txt /tests/golden/inline-pattern-head-tag/tokens/txt
456−/* tre-143 %txt /tests/golden/inline-pattern-head-tag/tree/txt
457−/* src-144 %jibb /tests/golden/inline-pattern-interpolated-bad/source/jibb
458−/* tok-144 %txt /tests/golden/inline-pattern-interpolated-bad/tokens/txt
459−/* tre-144 %txt /tests/golden/inline-pattern-interpolated-bad/tree/txt
460−/* src-145 %jibb /tests/golden/inline-pattern-list-bad/source/jibb
461−/* tok-145 %txt /tests/golden/inline-pattern-list-bad/tokens/txt
462−/* tre-145 %txt /tests/golden/inline-pattern-list-bad/tree/txt
463−/* src-146 %jibb /tests/golden/inline-pattern-literals/source/jibb
464−/* tok-146 %txt /tests/golden/inline-pattern-literals/tokens/txt
465−/* tre-146 %txt /tests/golden/inline-pattern-literals/tree/txt
466−/* src-147 %jibb /tests/golden/inline-pattern-loobean/source/jibb
467−/* tok-147 %txt /tests/golden/inline-pattern-loobean/tokens/txt
468−/* tre-147 %txt /tests/golden/inline-pattern-loobean/tree/txt
469−/* src-148 %jibb /tests/golden/inline-pattern-move-any/source/jibb
470−/* tok-148 %txt /tests/golden/inline-pattern-move-any/tokens/txt
471−/* tre-148 %txt /tests/golden/inline-pattern-move-any/tree/txt
472−/* src-149 %jibb /tests/golden/inline-pattern-name/source/jibb
473−/* tok-149 %txt /tests/golden/inline-pattern-name/tokens/txt
474−/* tre-149 %txt /tests/golden/inline-pattern-name/tree/txt
475−/* src-150 %jibb /tests/golden/inline-pattern-null/source/jibb
476−/* tok-150 %txt /tests/golden/inline-pattern-null/tokens/txt
477−/* tre-150 %txt /tests/golden/inline-pattern-null/tree/txt
478−/* src-151 %jibb /tests/golden/inline-pattern-pair-bad/source/jibb
479−/* tok-151 %txt /tests/golden/inline-pattern-pair-bad/tokens/txt
480−/* tre-151 %txt /tests/golden/inline-pattern-pair-bad/tree/txt
481−/* src-152 %jibb /tests/golden/inline-pattern-tail-tag/source/jibb
482−/* tok-152 %txt /tests/golden/inline-pattern-tail-tag/tokens/txt
483−/* tre-152 %txt /tests/golden/inline-pattern-tail-tag/tree/txt
484−/* src-153 %jibb /tests/golden/inline-pattern-term/source/jibb
485−/* tok-153 %txt /tests/golden/inline-pattern-term/tokens/txt
486−/* tre-153 %txt /tests/golden/inline-pattern-term/tree/txt
487−/* src-154 %jibb /tests/golden/inline-pattern-two-tags/source/jibb
488−/* tok-154 %txt /tests/golden/inline-pattern-two-tags/tokens/txt
489−/* tre-154 %txt /tests/golden/inline-pattern-two-tags/tree/txt
490−/* src-155 %jibb /tests/golden/inline-pattern-unit/source/jibb
491−/* tok-155 %txt /tests/golden/inline-pattern-unit/tokens/txt
492−/* tre-155 %txt /tests/golden/inline-pattern-unit/tree/txt
493−/* src-156 %jibb /tests/golden/inline-qath/source/jibb
494−/* tok-156 %txt /tests/golden/inline-qath/tokens/txt
495−/* tre-156 %txt /tests/golden/inline-qath/tree/txt
496−/* src-157 %jibb /tests/golden/inline-requests/source/jibb
497−/* tok-157 %txt /tests/golden/inline-requests/tokens/txt
498−/* tre-157 %txt /tests/golden/inline-requests/tree/txt
499−/* src-158 %jibb /tests/golden/inline-scry-case/source/jibb
500−/* tok-158 %txt /tests/golden/inline-scry-case/tokens/txt
501−/* tre-158 %txt /tests/golden/inline-scry-case/tree/txt
502−/* src-159 %jibb /tests/golden/inline-self-reference/source/jibb
503−/* tok-159 %txt /tests/golden/inline-self-reference/tokens/txt
504−/* tre-159 %txt /tests/golden/inline-self-reference/tree/txt
505−/* src-160 %jibb /tests/golden/inline-ship/source/jibb
506−/* tok-160 %txt /tests/golden/inline-ship/tokens/txt
507−/* tre-160 %txt /tests/golden/inline-ship/tree/txt
508−/* src-161 %jibb /tests/golden/inline-static-image/source/jibb
509−/* tok-161 %txt /tests/golden/inline-static-image/tokens/txt
510−/* tre-161 %txt /tests/golden/inline-static-image/tree/txt
511−/* src-162 %jibb /tests/golden/inline-string/source/jibb
512−/* tok-162 %txt /tests/golden/inline-string/tokens/txt
513−/* tre-162 %txt /tests/golden/inline-string/tree/txt
514−/* src-163 %jibb /tests/golden/inline-tag-shape/source/jibb
515−/* tok-163 %txt /tests/golden/inline-tag-shape/tokens/txt
516−/* tre-163 %txt /tests/golden/inline-tag-shape/tree/txt
517−/* src-164 %jibb /tests/golden/inline-term/source/jibb
518−/* tok-164 %txt /tests/golden/inline-term/tokens/txt
519−/* tre-164 %txt /tests/golden/inline-term/tree/txt
520−/* src-165 %jibb /tests/golden/inline-term-numeric/source/jibb
521−/* tok-165 %txt /tests/golden/inline-term-numeric/tokens/txt
522−/* tre-165 %txt /tests/golden/inline-term-numeric/tree/txt
523−/* src-166 %jibb /tests/golden/inline-text-items/source/jibb
524−/* tok-166 %txt /tests/golden/inline-text-items/tokens/txt
525−/* tre-166 %txt /tests/golden/inline-text-items/tree/txt
526−/* src-167 %jibb /tests/golden/inline-union-both-bad/source/jibb
527−/* tok-167 %txt /tests/golden/inline-union-both-bad/tokens/txt
528−/* tre-167 %txt /tests/golden/inline-union-both-bad/tree/txt
529−/* src-168 %jibb /tests/golden/inline-union-local/source/jibb
530−/* tok-168 %txt /tests/golden/inline-union-local/tokens/txt
531−/* tre-168 %txt /tests/golden/inline-union-local/tree/txt
532−/* src-169 %jibb /tests/golden/inline-union-one-case/source/jibb
533−/* tok-169 %txt /tests/golden/inline-union-one-case/tokens/txt
534−/* tre-169 %txt /tests/golden/inline-union-one-case/tree/txt
535−/* src-170 %jibb /tests/golden/inline-union-record-bad/source/jibb
536−/* tok-170 %txt /tests/golden/inline-union-record-bad/tokens/txt
537−/* tre-170 %txt /tests/golden/inline-union-record-bad/tree/txt
538−/* src-171 %jibb /tests/golden/inline-union-wide/source/jibb
539−/* tok-171 %txt /tests/golden/inline-union-wide/tokens/txt
540−/* tre-171 %txt /tests/golden/inline-union-wide/tree/txt
541−/* src-172 %jibb /tests/golden/inline-unit/source/jibb
542−/* tok-172 %txt /tests/golden/inline-unit/tokens/txt
543−/* tre-172 %txt /tests/golden/inline-unit/tree/txt
544−/* src-173 %jibb /tests/golden/inline-wide-form-rune-bad/source/jibb
545−/* tok-173 %txt /tests/golden/inline-wide-form-rune-bad/tokens/txt
546−/* tre-173 %txt /tests/golden/inline-wide-form-rune-bad/tree/txt
547−/* src-174 %jibb /tests/golden/inline-wide-forms/source/jibb
548−/* tok-174 %txt /tests/golden/inline-wide-forms/tokens/txt
549−/* tre-174 %txt /tests/golden/inline-wide-forms/tree/txt
550−/* src-175 %jibb /tests/golden/inline-wide-union-call/source/jibb
551−/* tok-175 %txt /tests/golden/inline-wide-union-call/tokens/txt
552−/* tre-175 %txt /tests/golden/inline-wide-union-call/tree/txt
553−/* src-176 %jibb /tests/golden/inline-wings/source/jibb
554−/* tok-176 %txt /tests/golden/inline-wings/tokens/txt
555−/* tre-176 %txt /tests/golden/inline-wings/tree/txt
556−/* src-177 %jibb /tests/golden/lex-base32-bad-1/source/jibb
557−/* tok-177 %txt /tests/golden/lex-base32-bad-1/tokens/txt
558−/* tre-177 %txt /tests/golden/lex-base32-bad-1/tree/txt
559−/* src-178 %jibb /tests/golden/lex-base32-ok-1/source/jibb
560−/* tok-178 %txt /tests/golden/lex-base32-ok-1/tokens/txt
561−/* tre-178 %txt /tests/golden/lex-base32-ok-1/tree/txt
562−/* src-179 %jibb /tests/golden/lex-blob-bad-1/source/jibb
563−/* tok-179 %txt /tests/golden/lex-blob-bad-1/tokens/txt
564−/* tre-179 %txt /tests/golden/lex-blob-bad-1/tree/txt
565−/* src-180 %jibb /tests/golden/lex-call-open-bad-1/source/jibb
566−/* tok-180 %txt /tests/golden/lex-call-open-bad-1/tokens/txt
567−/* tre-180 %txt /tests/golden/lex-call-open-bad-1/tree/txt
568−/* src-181 %jibb /tests/golden/lex-call-open-bad-2/source/jibb
569−/* tok-181 %txt /tests/golden/lex-call-open-bad-2/tokens/txt
570−/* tre-181 %txt /tests/golden/lex-call-open-bad-2/tree/txt
571−/* src-182 %jibb /tests/golden/lex-call-open-bad-4/source/jibb
572−/* tok-182 %txt /tests/golden/lex-call-open-bad-4/tokens/txt
573−/* tre-182 %txt /tests/golden/lex-call-open-bad-4/tree/txt
574−/* src-183 %jibb /tests/golden/lex-call-open-ok-1/source/jibb
575−/* tok-183 %txt /tests/golden/lex-call-open-ok-1/tokens/txt
576−/* tre-183 %txt /tests/golden/lex-call-open-ok-1/tree/txt
577−/* src-184 %jibb /tests/golden/lex-call-open-ok-2/source/jibb
578−/* tok-184 %txt /tests/golden/lex-call-open-ok-2/tokens/txt
579−/* tre-184 %txt /tests/golden/lex-call-open-ok-2/tree/txt
580−/* src-185 %jibb /tests/golden/lex-cell-bad-1/source/jibb
581−/* tok-185 %txt /tests/golden/lex-cell-bad-1/tokens/txt
582−/* tre-185 %txt /tests/golden/lex-cell-bad-1/tree/txt
583−/* src-186 %jibb /tests/golden/lex-cell-ok-1/source/jibb
584−/* tok-186 %txt /tests/golden/lex-cell-ok-1/tokens/txt
585−/* tre-186 %txt /tests/golden/lex-cell-ok-1/tree/txt
586−/* src-187 %jibb /tests/golden/lex-char-bad-1/source/jibb
587−/* tok-187 %txt /tests/golden/lex-char-bad-1/tokens/txt
588−/* tre-187 %txt /tests/golden/lex-char-bad-1/tree/txt
589−/* src-188 %jibb /tests/golden/lex-char-bad-2/source/jibb
590−/* tok-188 %txt /tests/golden/lex-char-bad-2/tokens/txt
591−/* tre-188 %txt /tests/golden/lex-char-bad-2/tree/txt
592−/* src-189 %jibb /tests/golden/lex-char-bad-3/source/jibb
593−/* tok-189 %txt /tests/golden/lex-char-bad-3/tokens/txt
594−/* tre-189 %txt /tests/golden/lex-char-bad-3/tree/txt
595−/* src-190 %jibb /tests/golden/lex-closer-bad-1/source/jibb
596−/* tok-190 %txt /tests/golden/lex-closer-bad-1/tokens/txt
597−/* tre-190 %txt /tests/golden/lex-closer-bad-1/tree/txt
598−/* src-191 %jibb /tests/golden/lex-closer-bad-2/source/jibb
599−/* tok-191 %txt /tests/golden/lex-closer-bad-2/tokens/txt
600−/* tre-191 %txt /tests/golden/lex-closer-bad-2/tree/txt
601−/* src-192 %jibb /tests/golden/lex-closer-bad-3/source/jibb
602−/* tok-192 %txt /tests/golden/lex-closer-bad-3/tokens/txt
603−/* tre-192 %txt /tests/golden/lex-closer-bad-3/tree/txt
604−/* src-193 %jibb /tests/golden/lex-closer-bad-4/source/jibb
605−/* tok-193 %txt /tests/golden/lex-closer-bad-4/tokens/txt
606−/* tre-193 %txt /tests/golden/lex-closer-bad-4/tree/txt
607−/* src-194 %jibb /tests/golden/lex-codepoint-bad-1/source/jibb
608−/* tok-194 %txt /tests/golden/lex-codepoint-bad-1/tokens/txt
609−/* tre-194 %txt /tests/golden/lex-codepoint-bad-1/tree/txt
610−/* src-195 %jibb /tests/golden/lex-comment-bad-1/source/jibb
611−/* tok-195 %txt /tests/golden/lex-comment-bad-1/tokens/txt
612−/* tre-195 %txt /tests/golden/lex-comment-bad-1/tree/txt
613−/* src-196 %jibb /tests/golden/lex-comment-ok-1/source/jibb
614−/* tok-196 %txt /tests/golden/lex-comment-ok-1/tokens/txt
615−/* tre-196 %txt /tests/golden/lex-comment-ok-1/tree/txt
616−/* src-197 %jibb /tests/golden/lex-comment-ok-2/source/jibb
617−/* tok-197 %txt /tests/golden/lex-comment-ok-2/tokens/txt
618−/* tre-197 %txt /tests/golden/lex-comment-ok-2/tree/txt
619−/* src-198 %jibb /tests/golden/lex-comment-ok-3/source/jibb
620−/* tok-198 %txt /tests/golden/lex-comment-ok-3/tokens/txt
621−/* tre-198 %txt /tests/golden/lex-comment-ok-3/tree/txt
622−/* src-199 %jibb /tests/golden/lex-date-bad-1/source/jibb
623−/* tok-199 %txt /tests/golden/lex-date-bad-1/tokens/txt
624−/* tre-199 %txt /tests/golden/lex-date-bad-1/tree/txt
625−/* src-200 %jibb /tests/golden/lex-date-bad-2/source/jibb
626−/* tok-200 %txt /tests/golden/lex-date-bad-2/tokens/txt
627−/* tre-200 %txt /tests/golden/lex-date-bad-2/tree/txt
628−/* src-201 %jibb /tests/golden/lex-date-bad-3/source/jibb
629−/* tok-201 %txt /tests/golden/lex-date-bad-3/tokens/txt
630−/* tre-201 %txt /tests/golden/lex-date-bad-3/tree/txt
631−/* src-202 %jibb /tests/golden/lex-date-ok-1/source/jibb
632−/* tok-202 %txt /tests/golden/lex-date-ok-1/tokens/txt
633−/* tre-202 %txt /tests/golden/lex-date-ok-1/tree/txt
634−/* src-203 %jibb /tests/golden/lex-date-ok-2/source/jibb
635−/* tok-203 %txt /tests/golden/lex-date-ok-2/tokens/txt
636−/* tre-203 %txt /tests/golden/lex-date-ok-2/tree/txt
637−/* src-204 %jibb /tests/golden/lex-decimal-bad-1/source/jibb
638−/* tok-204 %txt /tests/golden/lex-decimal-bad-1/tokens/txt
639−/* tre-204 %txt /tests/golden/lex-decimal-bad-1/tree/txt
640−/* src-205 %jibb /tests/golden/lex-decimal-bad-2/source/jibb
641−/* tok-205 %txt /tests/golden/lex-decimal-bad-2/tokens/txt
642−/* tre-205 %txt /tests/golden/lex-decimal-bad-2/tree/txt
643−/* src-206 %jibb /tests/golden/lex-decimal-ok-1/source/jibb
644−/* tok-206 %txt /tests/golden/lex-decimal-ok-1/tokens/txt
645−/* tre-206 %txt /tests/golden/lex-decimal-ok-1/tree/txt
646−/* src-207 %jibb /tests/golden/lex-duration-bad-1/source/jibb
647−/* tok-207 %txt /tests/golden/lex-duration-bad-1/tokens/txt
648−/* tre-207 %txt /tests/golden/lex-duration-bad-1/tree/txt
649−/* src-208 %jibb /tests/golden/lex-duration-bad-2/source/jibb
650−/* tok-208 %txt /tests/golden/lex-duration-bad-2/tokens/txt
651−/* tre-208 %txt /tests/golden/lex-duration-bad-2/tree/txt
652−/* src-209 %jibb /tests/golden/lex-duration-ok-1/source/jibb
653−/* tok-209 %txt /tests/golden/lex-duration-ok-1/tokens/txt
654−/* tre-209 %txt /tests/golden/lex-duration-ok-1/tree/txt
655−/* src-210 %jibb /tests/golden/lex-hex-bad-1/source/jibb
656−/* tok-210 %txt /tests/golden/lex-hex-bad-1/tokens/txt
657−/* tre-210 %txt /tests/golden/lex-hex-bad-1/tree/txt
658−/* src-211 %jibb /tests/golden/lex-hex-ok-1/source/jibb
659−/* tok-211 %txt /tests/golden/lex-hex-ok-1/tokens/txt
660−/* tre-211 %txt /tests/golden/lex-hex-ok-1/tree/txt
661−/* src-212 %jibb /tests/golden/lex-indent-bad-1/source/jibb
662−/* tok-212 %txt /tests/golden/lex-indent-bad-1/tokens/txt
663−/* tre-212 %txt /tests/golden/lex-indent-bad-1/tree/txt
664−/* src-213 %jibb /tests/golden/lex-indent-bad-2/source/jibb
665−/* tok-213 %txt /tests/golden/lex-indent-bad-2/tokens/txt
666−/* tre-213 %txt /tests/golden/lex-indent-bad-2/tree/txt
667−/* src-214 %jibb /tests/golden/lex-indent-bad-3/source/jibb
668−/* tok-214 %txt /tests/golden/lex-indent-bad-3/tokens/txt
669−/* tre-214 %txt /tests/golden/lex-indent-bad-3/tree/txt
670−/* src-215 %jibb /tests/golden/lex-indent-ok-1/source/jibb
671−/* tok-215 %txt /tests/golden/lex-indent-ok-1/tokens/txt
672−/* tre-215 %txt /tests/golden/lex-indent-ok-1/tree/txt
673−/* src-216 %jibb /tests/golden/lex-indent-ok-2/source/jibb
674−/* tok-216 %txt /tests/golden/lex-indent-ok-2/tokens/txt
675−/* tre-216 %txt /tests/golden/lex-indent-ok-2/tree/txt
676−/* src-217 %jibb /tests/golden/lex-indent-ok-3/source/jibb
677−/* tok-217 %txt /tests/golden/lex-indent-ok-3/tokens/txt
678−/* tre-217 %txt /tests/golden/lex-indent-ok-3/tree/txt
679−/* src-218 %jibb /tests/golden/lex-interp-bad-1/source/jibb
680−/* tok-218 %txt /tests/golden/lex-interp-bad-1/tokens/txt
681−/* tre-218 %txt /tests/golden/lex-interp-bad-1/tree/txt
682−/* src-219 %jibb /tests/golden/lex-interp-bad-2/source/jibb
683−/* tok-219 %txt /tests/golden/lex-interp-bad-2/tokens/txt
684−/* tre-219 %txt /tests/golden/lex-interp-bad-2/tree/txt
685−/* src-220 %jibb /tests/golden/lex-interp-bad-3/source/jibb
686−/* tok-220 %txt /tests/golden/lex-interp-bad-3/tokens/txt
687−/* tre-220 %txt /tests/golden/lex-interp-bad-3/tree/txt
688−/* src-221 %jibb /tests/golden/lex-interp-bad-5/source/jibb
689−/* tok-221 %txt /tests/golden/lex-interp-bad-5/tokens/txt
690−/* tre-221 %txt /tests/golden/lex-interp-bad-5/tree/txt
691−/* src-222 %jibb /tests/golden/lex-interp-bad-6/source/jibb
692−/* tok-222 %txt /tests/golden/lex-interp-bad-6/tokens/txt
693−/* tre-222 %txt /tests/golden/lex-interp-bad-6/tree/txt
694−/* src-223 %jibb /tests/golden/lex-interp-ok-1/source/jibb
695−/* tok-223 %txt /tests/golden/lex-interp-ok-1/tokens/txt
696−/* tre-223 %txt /tests/golden/lex-interp-ok-1/tree/txt
697−/* src-224 %jibb /tests/golden/lex-interp-ok-2/source/jibb
698−/* tok-224 %txt /tests/golden/lex-interp-ok-2/tokens/txt
699−/* tre-224 %txt /tests/golden/lex-interp-ok-2/tree/txt
700−/* src-225 %jibb /tests/golden/lex-interp-ok-3/source/jibb
701−/* tok-225 %txt /tests/golden/lex-interp-ok-3/tokens/txt
702−/* tre-225 %txt /tests/golden/lex-interp-ok-3/tree/txt
703−/* src-226 %jibb /tests/golden/lex-knot-bad-1/source/jibb
704−/* tok-226 %txt /tests/golden/lex-knot-bad-1/tokens/txt
705−/* tre-226 %txt /tests/golden/lex-knot-bad-1/tree/txt
706−/* src-227 %jibb /tests/golden/lex-knot-ok-1/source/jibb
707−/* tok-227 %txt /tests/golden/lex-knot-ok-1/tokens/txt
708−/* tre-227 %txt /tests/golden/lex-knot-ok-1/tree/txt
709−/* src-228 %jibb /tests/golden/lex-layout-bad-1/source/jibb
710−/* tok-228 %txt /tests/golden/lex-layout-bad-1/tokens/txt
711−/* tre-228 %txt /tests/golden/lex-layout-bad-1/tree/txt
712−/* src-229 %jibb /tests/golden/lex-layout-bad-10/source/jibb
713−/* tok-229 %txt /tests/golden/lex-layout-bad-10/tokens/txt
714−/* tre-229 %txt /tests/golden/lex-layout-bad-10/tree/txt
715−/* src-230 %jibb /tests/golden/lex-layout-bad-2/source/jibb
716−/* tok-230 %txt /tests/golden/lex-layout-bad-2/tokens/txt
717−/* tre-230 %txt /tests/golden/lex-layout-bad-2/tree/txt
718−/* src-231 %jibb /tests/golden/lex-layout-bad-3/source/jibb
719−/* tok-231 %txt /tests/golden/lex-layout-bad-3/tokens/txt
720−/* tre-231 %txt /tests/golden/lex-layout-bad-3/tree/txt
721−/* src-232 %jibb /tests/golden/lex-layout-bad-4/source/jibb
722−/* tok-232 %txt /tests/golden/lex-layout-bad-4/tokens/txt
723−/* tre-232 %txt /tests/golden/lex-layout-bad-4/tree/txt
724−/* src-233 %jibb /tests/golden/lex-layout-bad-5/source/jibb
725−/* tok-233 %txt /tests/golden/lex-layout-bad-5/tokens/txt
726−/* tre-233 %txt /tests/golden/lex-layout-bad-5/tree/txt
727−/* src-234 %jibb /tests/golden/lex-layout-bad-6/source/jibb
728−/* tok-234 %txt /tests/golden/lex-layout-bad-6/tokens/txt
729−/* tre-234 %txt /tests/golden/lex-layout-bad-6/tree/txt
730−/* src-235 %jibb /tests/golden/lex-layout-bad-7/source/jibb
731−/* tok-235 %txt /tests/golden/lex-layout-bad-7/tokens/txt
732−/* tre-235 %txt /tests/golden/lex-layout-bad-7/tree/txt
733−/* src-236 %jibb /tests/golden/lex-layout-bad-8/source/jibb
734−/* tok-236 %txt /tests/golden/lex-layout-bad-8/tokens/txt
735−/* tre-236 %txt /tests/golden/lex-layout-bad-8/tree/txt
736−/* src-237 %jibb /tests/golden/lex-layout-bad-9/source/jibb
737−/* tok-237 %txt /tests/golden/lex-layout-bad-9/tokens/txt
738−/* tre-237 %txt /tests/golden/lex-layout-bad-9/tree/txt
739−/* src-238 %jibb /tests/golden/lex-layout-ok-1/source/jibb
740−/* tok-238 %txt /tests/golden/lex-layout-ok-1/tokens/txt
741−/* tre-238 %txt /tests/golden/lex-layout-ok-1/tree/txt
742−/* src-239 %jibb /tests/golden/lex-list-bad-1/source/jibb
743−/* tok-239 %txt /tests/golden/lex-list-bad-1/tokens/txt
744−/* tre-239 %txt /tests/golden/lex-list-bad-1/tree/txt
745−/* src-240 %jibb /tests/golden/lex-list-ok-1/source/jibb
746−/* tok-240 %txt /tests/golden/lex-list-ok-1/tokens/txt
747−/* tre-240 %txt /tests/golden/lex-list-ok-1/tree/txt
748−/* src-241 %jibb /tests/golden/lex-loobean-bad-1/source/jibb
749−/* tok-241 %txt /tests/golden/lex-loobean-bad-1/tokens/txt
750−/* tre-241 %txt /tests/golden/lex-loobean-bad-1/tree/txt
751−/* src-242 %jibb /tests/golden/lex-loobean-ok-1/source/jibb
752−/* tok-242 %txt /tests/golden/lex-loobean-ok-1/tokens/txt
753−/* tre-242 %txt /tests/golden/lex-loobean-ok-1/tree/txt
754−/* src-243 %jibb /tests/golden/lex-name-bad-1/source/jibb
755−/* tok-243 %txt /tests/golden/lex-name-bad-1/tokens/txt
756−/* tre-243 %txt /tests/golden/lex-name-bad-1/tree/txt
757−/* src-244 %jibb /tests/golden/lex-name-bad-2/source/jibb
758−/* tok-244 %txt /tests/golden/lex-name-bad-2/tokens/txt
759−/* tre-244 %txt /tests/golden/lex-name-bad-2/tree/txt
760−/* src-245 %jibb /tests/golden/lex-name-bad-3/source/jibb
761−/* tok-245 %txt /tests/golden/lex-name-bad-3/tokens/txt
762−/* tre-245 %txt /tests/golden/lex-name-bad-3/tree/txt
763−/* src-246 %jibb /tests/golden/lex-name-bad-4/source/jibb
764−/* tok-246 %txt /tests/golden/lex-name-bad-4/tokens/txt
765−/* tre-246 %txt /tests/golden/lex-name-bad-4/tree/txt
766−/* src-247 %jibb /tests/golden/lex-name-bad-5/source/jibb
767−/* tok-247 %txt /tests/golden/lex-name-bad-5/tokens/txt
768−/* tre-247 %txt /tests/golden/lex-name-bad-5/tree/txt
769−/* src-248 %jibb /tests/golden/lex-name-bad-6/source/jibb
770−/* tok-248 %txt /tests/golden/lex-name-bad-6/tokens/txt
771−/* tre-248 %txt /tests/golden/lex-name-bad-6/tree/txt
772−/* src-249 %jibb /tests/golden/lex-name-ok-1/source/jibb
773−/* tok-249 %txt /tests/golden/lex-name-ok-1/tokens/txt
774−/* tre-249 %txt /tests/golden/lex-name-ok-1/tree/txt
775−/* src-250 %jibb /tests/golden/lex-null-bad-1/source/jibb
776−/* tok-250 %txt /tests/golden/lex-null-bad-1/tokens/txt
777−/* tre-250 %txt /tests/golden/lex-null-bad-1/tree/txt
778−/* src-251 %jibb /tests/golden/lex-null-bad-2/source/jibb
779−/* tok-251 %txt /tests/golden/lex-null-bad-2/tokens/txt
780−/* tre-251 %txt /tests/golden/lex-null-bad-2/tree/txt
781−/* src-252 %jibb /tests/golden/lex-null-ok-1/source/jibb
782−/* tok-252 %txt /tests/golden/lex-null-ok-1/tokens/txt
783−/* tre-252 %txt /tests/golden/lex-null-ok-1/tree/txt
784−/* src-253 %jibb /tests/golden/lex-open-bracket-bad-1/source/jibb
785−/* tok-253 %txt /tests/golden/lex-open-bracket-bad-1/tokens/txt
786−/* tre-253 %txt /tests/golden/lex-open-bracket-bad-1/tree/txt
787−/* src-254 %jibb /tests/golden/lex-open-bracket-bad-10/source/jibb
788−/* tok-254 %txt /tests/golden/lex-open-bracket-bad-10/tokens/txt
789−/* tre-254 %txt /tests/golden/lex-open-bracket-bad-10/tree/txt
790−/* src-255 %jibb /tests/golden/lex-open-bracket-bad-11/source/jibb
791−/* tok-255 %txt /tests/golden/lex-open-bracket-bad-11/tokens/txt
792−/* tre-255 %txt /tests/golden/lex-open-bracket-bad-11/tree/txt
793−/* src-256 %jibb /tests/golden/lex-open-bracket-bad-12/source/jibb
794−/* tok-256 %txt /tests/golden/lex-open-bracket-bad-12/tokens/txt
795−/* tre-256 %txt /tests/golden/lex-open-bracket-bad-12/tree/txt
796−/* src-257 %jibb /tests/golden/lex-open-bracket-bad-13/source/jibb
797−/* tok-257 %txt /tests/golden/lex-open-bracket-bad-13/tokens/txt
798−/* tre-257 %txt /tests/golden/lex-open-bracket-bad-13/tree/txt
799−/* src-258 %jibb /tests/golden/lex-open-bracket-bad-14/source/jibb
800−/* tok-258 %txt /tests/golden/lex-open-bracket-bad-14/tokens/txt
801−/* tre-258 %txt /tests/golden/lex-open-bracket-bad-14/tree/txt
802−/* src-259 %jibb /tests/golden/lex-open-bracket-bad-15/source/jibb
803−/* tok-259 %txt /tests/golden/lex-open-bracket-bad-15/tokens/txt
804−/* tre-259 %txt /tests/golden/lex-open-bracket-bad-15/tree/txt
805−/* src-260 %jibb /tests/golden/lex-open-bracket-bad-16/source/jibb
806−/* tok-260 %txt /tests/golden/lex-open-bracket-bad-16/tokens/txt
807−/* tre-260 %txt /tests/golden/lex-open-bracket-bad-16/tree/txt
808−/* src-261 %jibb /tests/golden/lex-open-bracket-bad-2/source/jibb
809−/* tok-261 %txt /tests/golden/lex-open-bracket-bad-2/tokens/txt
810−/* tre-261 %txt /tests/golden/lex-open-bracket-bad-2/tree/txt
811−/* src-262 %jibb /tests/golden/lex-open-bracket-bad-3/source/jibb
812−/* tok-262 %txt /tests/golden/lex-open-bracket-bad-3/tokens/txt
813−/* tre-262 %txt /tests/golden/lex-open-bracket-bad-3/tree/txt
814−/* src-263 %jibb /tests/golden/lex-open-bracket-bad-5/source/jibb
815−/* tok-263 %txt /tests/golden/lex-open-bracket-bad-5/tokens/txt
816−/* tre-263 %txt /tests/golden/lex-open-bracket-bad-5/tree/txt
817−/* src-264 %jibb /tests/golden/lex-open-bracket-bad-6/source/jibb
818−/* tok-264 %txt /tests/golden/lex-open-bracket-bad-6/tokens/txt
819−/* tre-264 %txt /tests/golden/lex-open-bracket-bad-6/tree/txt
820−/* src-265 %jibb /tests/golden/lex-open-bracket-bad-7/source/jibb
821−/* tok-265 %txt /tests/golden/lex-open-bracket-bad-7/tokens/txt
822−/* tre-265 %txt /tests/golden/lex-open-bracket-bad-7/tree/txt
823−/* src-266 %jibb /tests/golden/lex-open-bracket-bad-8/source/jibb
824−/* tok-266 %txt /tests/golden/lex-open-bracket-bad-8/tokens/txt
825−/* tre-266 %txt /tests/golden/lex-open-bracket-bad-8/tree/txt
826−/* src-267 %jibb /tests/golden/lex-open-bracket-bad-9/source/jibb
827−/* tok-267 %txt /tests/golden/lex-open-bracket-bad-9/tokens/txt
828−/* tre-267 %txt /tests/golden/lex-open-bracket-bad-9/tree/txt
829−/* src-268 %jibb /tests/golden/lex-open-bracket-ok-1/source/jibb
830−/* tok-268 %txt /tests/golden/lex-open-bracket-ok-1/tokens/txt
831−/* tre-268 %txt /tests/golden/lex-open-bracket-ok-1/tree/txt
832−/* src-269 %jibb /tests/golden/lex-open-bracket-ok-2/source/jibb
833−/* tok-269 %txt /tests/golden/lex-open-bracket-ok-2/tokens/txt
834−/* tre-269 %txt /tests/golden/lex-open-bracket-ok-2/tree/txt
835−/* src-270 %jibb /tests/golden/lex-open-bracket-ok-3/source/jibb
836−/* tok-270 %txt /tests/golden/lex-open-bracket-ok-3/tokens/txt
837−/* tre-270 %txt /tests/golden/lex-open-bracket-ok-3/tree/txt
838−/* src-271 %jibb /tests/golden/lex-open-bracket-ok-4/source/jibb
839−/* tok-271 %txt /tests/golden/lex-open-bracket-ok-4/tokens/txt
840−/* tre-271 %txt /tests/golden/lex-open-bracket-ok-4/tree/txt
841−/* src-272 %jibb /tests/golden/lex-open-bracket-ok-5/source/jibb
842−/* tok-272 %txt /tests/golden/lex-open-bracket-ok-5/tokens/txt
843−/* tre-272 %txt /tests/golden/lex-open-bracket-ok-5/tree/txt
844−/* src-273 %jibb /tests/golden/lex-open-bracket-ok-6/source/jibb
845−/* tok-273 %txt /tests/golden/lex-open-bracket-ok-6/tokens/txt
846−/* tre-273 %txt /tests/golden/lex-open-bracket-ok-6/tree/txt
847−/* src-274 %jibb /tests/golden/lex-open-bracket-ok-7/source/jibb
848−/* tok-274 %txt /tests/golden/lex-open-bracket-ok-7/tokens/txt
849−/* tre-274 %txt /tests/golden/lex-open-bracket-ok-7/tree/txt
850−/* src-275 %jibb /tests/golden/lex-open-bracket-ok-8/source/jibb
851−/* tok-275 %txt /tests/golden/lex-open-bracket-ok-8/tokens/txt
852−/* tre-275 %txt /tests/golden/lex-open-bracket-ok-8/tree/txt
853−/* src-276 %jibb /tests/golden/lex-open-bracket-ok-9/source/jibb
854−/* tok-276 %txt /tests/golden/lex-open-bracket-ok-9/tokens/txt
855−/* tre-276 %txt /tests/golden/lex-open-bracket-ok-9/tree/txt
856−/* src-277 %jibb /tests/golden/lex-open-mold-bad-1/source/jibb
857−/* tok-277 %txt /tests/golden/lex-open-mold-bad-1/tokens/txt
858−/* tre-277 %txt /tests/golden/lex-open-mold-bad-1/tree/txt
859−/* src-278 %jibb /tests/golden/lex-open-mold-bad-10/source/jibb
860−/* tok-278 %txt /tests/golden/lex-open-mold-bad-10/tokens/txt
861−/* tre-278 %txt /tests/golden/lex-open-mold-bad-10/tree/txt
862−/* src-279 %jibb /tests/golden/lex-open-mold-bad-11/source/jibb
863−/* tok-279 %txt /tests/golden/lex-open-mold-bad-11/tokens/txt
864−/* tre-279 %txt /tests/golden/lex-open-mold-bad-11/tree/txt
865−/* src-280 %jibb /tests/golden/lex-open-mold-bad-12/source/jibb
866−/* tok-280 %txt /tests/golden/lex-open-mold-bad-12/tokens/txt
867−/* tre-280 %txt /tests/golden/lex-open-mold-bad-12/tree/txt
868−/* src-281 %jibb /tests/golden/lex-open-mold-bad-13/source/jibb
869−/* tok-281 %txt /tests/golden/lex-open-mold-bad-13/tokens/txt
870−/* tre-281 %txt /tests/golden/lex-open-mold-bad-13/tree/txt
871−/* src-282 %jibb /tests/golden/lex-open-mold-bad-14/source/jibb
872−/* tok-282 %txt /tests/golden/lex-open-mold-bad-14/tokens/txt
873−/* tre-282 %txt /tests/golden/lex-open-mold-bad-14/tree/txt
874−/* src-283 %jibb /tests/golden/lex-open-mold-bad-15/source/jibb
875−/* tok-283 %txt /tests/golden/lex-open-mold-bad-15/tokens/txt
876−/* tre-283 %txt /tests/golden/lex-open-mold-bad-15/tree/txt
877−/* src-284 %jibb /tests/golden/lex-open-mold-bad-16/source/jibb
878−/* tok-284 %txt /tests/golden/lex-open-mold-bad-16/tokens/txt
879−/* tre-284 %txt /tests/golden/lex-open-mold-bad-16/tree/txt
880−/* src-285 %jibb /tests/golden/lex-open-mold-bad-2/source/jibb
881−/* tok-285 %txt /tests/golden/lex-open-mold-bad-2/tokens/txt
882−/* tre-285 %txt /tests/golden/lex-open-mold-bad-2/tree/txt
883−/* src-286 %jibb /tests/golden/lex-open-mold-bad-3/source/jibb
884−/* tok-286 %txt /tests/golden/lex-open-mold-bad-3/tokens/txt
885−/* tre-286 %txt /tests/golden/lex-open-mold-bad-3/tree/txt
886−/* src-287 %jibb /tests/golden/lex-open-mold-bad-4/source/jibb
887−/* tok-287 %txt /tests/golden/lex-open-mold-bad-4/tokens/txt
888−/* tre-287 %txt /tests/golden/lex-open-mold-bad-4/tree/txt
889−/* src-288 %jibb /tests/golden/lex-open-mold-bad-5/source/jibb
890−/* tok-288 %txt /tests/golden/lex-open-mold-bad-5/tokens/txt
891−/* tre-288 %txt /tests/golden/lex-open-mold-bad-5/tree/txt
892−/* src-289 %jibb /tests/golden/lex-open-mold-bad-6/source/jibb
893−/* tok-289 %txt /tests/golden/lex-open-mold-bad-6/tokens/txt
894−/* tre-289 %txt /tests/golden/lex-open-mold-bad-6/tree/txt
895−/* src-290 %jibb /tests/golden/lex-open-mold-bad-7/source/jibb
896−/* tok-290 %txt /tests/golden/lex-open-mold-bad-7/tokens/txt
897−/* tre-290 %txt /tests/golden/lex-open-mold-bad-7/tree/txt
898−/* src-291 %jibb /tests/golden/lex-open-mold-bad-8/source/jibb
899−/* tok-291 %txt /tests/golden/lex-open-mold-bad-8/tokens/txt
900−/* tre-291 %txt /tests/golden/lex-open-mold-bad-8/tree/txt
901−/* src-292 %jibb /tests/golden/lex-open-mold-bad-9/source/jibb
902−/* tok-292 %txt /tests/golden/lex-open-mold-bad-9/tokens/txt
903−/* tre-292 %txt /tests/golden/lex-open-mold-bad-9/tree/txt
904−/* src-293 %jibb /tests/golden/lex-open-mold-ok-1/source/jibb
905−/* tok-293 %txt /tests/golden/lex-open-mold-ok-1/tokens/txt
906−/* tre-293 %txt /tests/golden/lex-open-mold-ok-1/tree/txt
907−/* src-294 %jibb /tests/golden/lex-open-mold-ok-2/source/jibb
908−/* tok-294 %txt /tests/golden/lex-open-mold-ok-2/tokens/txt
909−/* tre-294 %txt /tests/golden/lex-open-mold-ok-2/tree/txt
910−/* src-295 %jibb /tests/golden/lex-open-mold-ok-3/source/jibb
911−/* tok-295 %txt /tests/golden/lex-open-mold-ok-3/tokens/txt
912−/* tre-295 %txt /tests/golden/lex-open-mold-ok-3/tree/txt
913−/* src-296 %jibb /tests/golden/lex-open-mold-ok-4/source/jibb
914−/* tok-296 %txt /tests/golden/lex-open-mold-ok-4/tokens/txt
915−/* tre-296 %txt /tests/golden/lex-open-mold-ok-4/tree/txt
916−/* src-297 %jibb /tests/golden/lex-open-mold-ok-5/source/jibb
917−/* tok-297 %txt /tests/golden/lex-open-mold-ok-5/tokens/txt
918−/* tre-297 %txt /tests/golden/lex-open-mold-ok-5/tree/txt
919−/* src-298 %jibb /tests/golden/lex-open-mold-ok-6/source/jibb
920−/* tok-298 %txt /tests/golden/lex-open-mold-ok-6/tokens/txt
921−/* tre-298 %txt /tests/golden/lex-open-mold-ok-6/tree/txt
922−/* src-299 %jibb /tests/golden/lex-pair-binding-bad-1/source/jibb
923−/* tok-299 %txt /tests/golden/lex-pair-binding-bad-1/tokens/txt
924−/* tre-299 %txt /tests/golden/lex-pair-binding-bad-1/tree/txt
925−/* src-300 %jibb /tests/golden/lex-pair-binding-ok-1/source/jibb
926−/* tok-300 %txt /tests/golden/lex-pair-binding-ok-1/tokens/txt
927−/* tre-300 %txt /tests/golden/lex-pair-binding-ok-1/tree/txt
928−/* src-301 %jibb /tests/golden/lex-path-bad-1/source/jibb
929−/* tok-301 %txt /tests/golden/lex-path-bad-1/tokens/txt
930−/* tre-301 %txt /tests/golden/lex-path-bad-1/tree/txt
931−/* src-302 %jibb /tests/golden/lex-path-ok-1/source/jibb
932−/* tok-302 %txt /tests/golden/lex-path-ok-1/tokens/txt
933−/* tre-302 %txt /tests/golden/lex-path-ok-1/tree/txt
934−/* src-303 %jibb /tests/golden/lex-rune-layout-bad-1/source/jibb
935−/* tok-303 %txt /tests/golden/lex-rune-layout-bad-1/tokens/txt
936−/* tre-303 %txt /tests/golden/lex-rune-layout-bad-1/tree/txt
937−/* src-304 %jibb /tests/golden/lex-rune-layout-bad-11/source/jibb
938−/* tok-304 %txt /tests/golden/lex-rune-layout-bad-11/tokens/txt
939−/* tre-304 %txt /tests/golden/lex-rune-layout-bad-11/tree/txt
940−/* src-305 %jibb /tests/golden/lex-rune-layout-bad-12/source/jibb
941−/* tok-305 %txt /tests/golden/lex-rune-layout-bad-12/tokens/txt
942−/* tre-305 %txt /tests/golden/lex-rune-layout-bad-12/tree/txt
943−/* src-306 %jibb /tests/golden/lex-rune-layout-bad-13/source/jibb
944−/* tok-306 %txt /tests/golden/lex-rune-layout-bad-13/tokens/txt
945−/* tre-306 %txt /tests/golden/lex-rune-layout-bad-13/tree/txt
946−/* src-307 %jibb /tests/golden/lex-rune-layout-bad-14/source/jibb
947−/* tok-307 %txt /tests/golden/lex-rune-layout-bad-14/tokens/txt
948−/* tre-307 %txt /tests/golden/lex-rune-layout-bad-14/tree/txt
949−/* src-308 %jibb /tests/golden/lex-rune-layout-bad-15/source/jibb
950−/* tok-308 %txt /tests/golden/lex-rune-layout-bad-15/tokens/txt
951−/* tre-308 %txt /tests/golden/lex-rune-layout-bad-15/tree/txt
952−/* src-309 %jibb /tests/golden/lex-rune-layout-bad-2/source/jibb
953−/* tok-309 %txt /tests/golden/lex-rune-layout-bad-2/tokens/txt
954−/* tre-309 %txt /tests/golden/lex-rune-layout-bad-2/tree/txt
955−/* src-310 %jibb /tests/golden/lex-rune-layout-bad-3/source/jibb
956−/* tok-310 %txt /tests/golden/lex-rune-layout-bad-3/tokens/txt
957−/* tre-310 %txt /tests/golden/lex-rune-layout-bad-3/tree/txt
958−/* src-311 %jibb /tests/golden/lex-rune-layout-bad-4/source/jibb
959−/* tok-311 %txt /tests/golden/lex-rune-layout-bad-4/tokens/txt
960−/* tre-311 %txt /tests/golden/lex-rune-layout-bad-4/tree/txt
961−/* src-312 %jibb /tests/golden/lex-rune-layout-bad-5/source/jibb
962−/* tok-312 %txt /tests/golden/lex-rune-layout-bad-5/tokens/txt
963−/* tre-312 %txt /tests/golden/lex-rune-layout-bad-5/tree/txt
964−/* src-313 %jibb /tests/golden/lex-rune-layout-bad-6/source/jibb
965−/* tok-313 %txt /tests/golden/lex-rune-layout-bad-6/tokens/txt
966−/* tre-313 %txt /tests/golden/lex-rune-layout-bad-6/tree/txt
967−/* src-314 %jibb /tests/golden/lex-rune-layout-bad-7/source/jibb
968−/* tok-314 %txt /tests/golden/lex-rune-layout-bad-7/tokens/txt
969−/* tre-314 %txt /tests/golden/lex-rune-layout-bad-7/tree/txt
970−/* src-315 %jibb /tests/golden/lex-rune-layout-bad-8/source/jibb
971−/* tok-315 %txt /tests/golden/lex-rune-layout-bad-8/tokens/txt
972−/* tre-315 %txt /tests/golden/lex-rune-layout-bad-8/tree/txt
973−/* src-316 %jibb /tests/golden/lex-rune-layout-bad-9/source/jibb
974−/* tok-316 %txt /tests/golden/lex-rune-layout-bad-9/tokens/txt
975−/* tre-316 %txt /tests/golden/lex-rune-layout-bad-9/tree/txt
976−/* src-317 %jibb /tests/golden/lex-rune-layout-ok-1/source/jibb
977−/* tok-317 %txt /tests/golden/lex-rune-layout-ok-1/tokens/txt
978−/* tre-317 %txt /tests/golden/lex-rune-layout-ok-1/tree/txt
979−/* src-318 %jibb /tests/golden/lex-rune-layout-ok-2/source/jibb
980−/* tok-318 %txt /tests/golden/lex-rune-layout-ok-2/tokens/txt
981−/* tre-318 %txt /tests/golden/lex-rune-layout-ok-2/tree/txt
982−/* src-319 %jibb /tests/golden/lex-ship-bad-1/source/jibb
983−/* tok-319 %txt /tests/golden/lex-ship-bad-1/tokens/txt
984−/* tre-319 %txt /tests/golden/lex-ship-bad-1/tree/txt
985−/* src-320 %jibb /tests/golden/lex-ship-ok-1/source/jibb
986−/* tok-320 %txt /tests/golden/lex-ship-ok-1/tokens/txt
987−/* tre-320 %txt /tests/golden/lex-ship-ok-1/tree/txt
988−/* src-321 %jibb /tests/golden/lex-spacing-bad-1/source/jibb
989−/* tok-321 %txt /tests/golden/lex-spacing-bad-1/tokens/txt
990−/* tre-321 %txt /tests/golden/lex-spacing-bad-1/tree/txt
991−/* src-322 %jibb /tests/golden/lex-spacing-bad-2/source/jibb
992−/* tok-322 %txt /tests/golden/lex-spacing-bad-2/tokens/txt
993−/* tre-322 %txt /tests/golden/lex-spacing-bad-2/tree/txt
994−/* src-323 %jibb /tests/golden/lex-spacing-ok-1/source/jibb
995−/* tok-323 %txt /tests/golden/lex-spacing-ok-1/tokens/txt
996−/* tre-323 %txt /tests/golden/lex-spacing-ok-1/tree/txt
997−/* src-324 %jibb /tests/golden/lex-spacing-ok-2/source/jibb
998−/* tok-324 %txt /tests/golden/lex-spacing-ok-2/tokens/txt
999−/* tre-324 %txt /tests/golden/lex-spacing-ok-2/tree/txt
1000−/* src-325 %jibb /tests/golden/lex-spacing-ok-3/source/jibb
1001−/* tok-325 %txt /tests/golden/lex-spacing-ok-3/tokens/txt
1002−/* tre-325 %txt /tests/golden/lex-spacing-ok-3/tree/txt
1003−/* src-326 %jibb /tests/golden/lex-string-bad-1/source/jibb
1004−/* tok-326 %txt /tests/golden/lex-string-bad-1/tokens/txt
1005−/* tre-326 %txt /tests/golden/lex-string-bad-1/tree/txt
1006−/* src-327 %jibb /tests/golden/lex-string-bad-2/source/jibb
1007−/* tok-327 %txt /tests/golden/lex-string-bad-2/tokens/txt
1008−/* tre-327 %txt /tests/golden/lex-string-bad-2/tree/txt
1009−/* src-328 %jibb /tests/golden/lex-string-bad-3/source/jibb
1010−/* tok-328 %txt /tests/golden/lex-string-bad-3/tokens/txt
1011−/* tre-328 %txt /tests/golden/lex-string-bad-3/tree/txt
1012−/* src-329 %jibb /tests/golden/lex-string-bad-4/source/jibb
1013−/* tok-329 %txt /tests/golden/lex-string-bad-4/tokens/txt
1014−/* tre-329 %txt /tests/golden/lex-string-bad-4/tree/txt
1015−/* src-330 %jibb /tests/golden/lex-string-bad-5/source/jibb
1016−/* tok-330 %txt /tests/golden/lex-string-bad-5/tokens/txt
1017−/* tre-330 %txt /tests/golden/lex-string-bad-5/tree/txt
1018−/* src-331 %jibb /tests/golden/lex-string-bad-6/source/jibb
1019−/* tok-331 %txt /tests/golden/lex-string-bad-6/tokens/txt
1020−/* tre-331 %txt /tests/golden/lex-string-bad-6/tree/txt
1021−/* src-332 %jibb /tests/golden/lex-string-ok-1/source/jibb
1022−/* tok-332 %txt /tests/golden/lex-string-ok-1/tokens/txt
1023−/* tre-332 %txt /tests/golden/lex-string-ok-1/tree/txt
1024−/* src-333 %jibb /tests/golden/lex-term-bad-1/source/jibb
1025−/* tok-333 %txt /tests/golden/lex-term-bad-1/tokens/txt
1026−/* tre-333 %txt /tests/golden/lex-term-bad-1/tree/txt
1027−/* src-334 %jibb /tests/golden/lex-term-bad-10/source/jibb
1028−/* tok-334 %txt /tests/golden/lex-term-bad-10/tokens/txt
1029−/* tre-334 %txt /tests/golden/lex-term-bad-10/tree/txt
1030−/* src-335 %jibb /tests/golden/lex-term-bad-11/source/jibb
1031−/* tok-335 %txt /tests/golden/lex-term-bad-11/tokens/txt
1032−/* tre-335 %txt /tests/golden/lex-term-bad-11/tree/txt
1033−/* src-336 %jibb /tests/golden/lex-term-bad-12/source/jibb
1034−/* tok-336 %txt /tests/golden/lex-term-bad-12/tokens/txt
1035−/* tre-336 %txt /tests/golden/lex-term-bad-12/tree/txt
1036−/* src-337 %jibb /tests/golden/lex-term-bad-13/source/jibb
1037−/* tok-337 %txt /tests/golden/lex-term-bad-13/tokens/txt
1038−/* tre-337 %txt /tests/golden/lex-term-bad-13/tree/txt
1039−/* src-338 %jibb /tests/golden/lex-term-bad-14/source/jibb
1040−/* tok-338 %txt /tests/golden/lex-term-bad-14/tokens/txt
1041−/* tre-338 %txt /tests/golden/lex-term-bad-14/tree/txt
1042−/* src-339 %jibb /tests/golden/lex-term-bad-15/source/jibb
1043−/* tok-339 %txt /tests/golden/lex-term-bad-15/tokens/txt
1044−/* tre-339 %txt /tests/golden/lex-term-bad-15/tree/txt
1045−/* src-340 %jibb /tests/golden/lex-term-bad-2/source/jibb
1046−/* tok-340 %txt /tests/golden/lex-term-bad-2/tokens/txt
1047−/* tre-340 %txt /tests/golden/lex-term-bad-2/tree/txt
1048−/* src-341 %jibb /tests/golden/lex-term-bad-3/source/jibb
1049−/* tok-341 %txt /tests/golden/lex-term-bad-3/tokens/txt
1050−/* tre-341 %txt /tests/golden/lex-term-bad-3/tree/txt
1051−/* src-342 %jibb /tests/golden/lex-term-bad-4/source/jibb
1052−/* tok-342 %txt /tests/golden/lex-term-bad-4/tokens/txt
1053−/* tre-342 %txt /tests/golden/lex-term-bad-4/tree/txt
1054−/* src-343 %jibb /tests/golden/lex-term-bad-5/source/jibb
1055−/* tok-343 %txt /tests/golden/lex-term-bad-5/tokens/txt
1056−/* tre-343 %txt /tests/golden/lex-term-bad-5/tree/txt
1057−/* src-344 %jibb /tests/golden/lex-term-bad-6/source/jibb
1058−/* tok-344 %txt /tests/golden/lex-term-bad-6/tokens/txt
1059−/* tre-344 %txt /tests/golden/lex-term-bad-6/tree/txt
1060−/* src-345 %jibb /tests/golden/lex-term-bad-7/source/jibb
1061−/* tok-345 %txt /tests/golden/lex-term-bad-7/tokens/txt
1062−/* tre-345 %txt /tests/golden/lex-term-bad-7/tree/txt
1063−/* src-346 %jibb /tests/golden/lex-term-bad-8/source/jibb
1064−/* tok-346 %txt /tests/golden/lex-term-bad-8/tokens/txt
1065−/* tre-346 %txt /tests/golden/lex-term-bad-8/tree/txt
1066−/* src-347 %jibb /tests/golden/lex-term-bad-9/source/jibb
1067−/* tok-347 %txt /tests/golden/lex-term-bad-9/tokens/txt
1068−/* tre-347 %txt /tests/golden/lex-term-bad-9/tree/txt
1069−/* src-348 %jibb /tests/golden/lex-term-dollar/source/jibb
1070−/* tok-348 %txt /tests/golden/lex-term-dollar/tokens/txt
1071−/* tre-348 %txt /tests/golden/lex-term-dollar/tree/txt
1072−/* src-349 %jibb /tests/golden/lex-term-ok-1/source/jibb
1073−/* tok-349 %txt /tests/golden/lex-term-ok-1/tokens/txt
1074−/* tre-349 %txt /tests/golden/lex-term-ok-1/tree/txt
1075−/* src-350 %jibb /tests/golden/lex-tight-change-bad-1/source/jibb
1076−/* tok-350 %txt /tests/golden/lex-tight-change-bad-1/tokens/txt
1077−/* tre-350 %txt /tests/golden/lex-tight-change-bad-1/tree/txt
1078−/* src-351 %jibb /tests/golden/lex-tight-change-bad-2/source/jibb
1079−/* tok-351 %txt /tests/golden/lex-tight-change-bad-2/tokens/txt
1080−/* tre-351 %txt /tests/golden/lex-tight-change-bad-2/tree/txt
1081−/* src-352 %jibb /tests/golden/lex-tight-change-bad-3/source/jibb
1082−/* tok-352 %txt /tests/golden/lex-tight-change-bad-3/tokens/txt
1083−/* tre-352 %txt /tests/golden/lex-tight-change-bad-3/tree/txt
1084−/* src-353 %jibb /tests/golden/lex-tight-change-bad-4/source/jibb
1085−/* tok-353 %txt /tests/golden/lex-tight-change-bad-4/tokens/txt
1086−/* tre-353 %txt /tests/golden/lex-tight-change-bad-4/tree/txt
1087−/* src-354 %jibb /tests/golden/lex-tight-change-bad-5/source/jibb
1088−/* tok-354 %txt /tests/golden/lex-tight-change-bad-5/tokens/txt
1089−/* tre-354 %txt /tests/golden/lex-tight-change-bad-5/tree/txt
1090−/* src-355 %jibb /tests/golden/lex-tight-change-bad-6/source/jibb
1091−/* tok-355 %txt /tests/golden/lex-tight-change-bad-6/tokens/txt
1092−/* tre-355 %txt /tests/golden/lex-tight-change-bad-6/tree/txt
1093−/* src-356 %jibb /tests/golden/lex-tight-change-bad-7/source/jibb
1094−/* tok-356 %txt /tests/golden/lex-tight-change-bad-7/tokens/txt
1095−/* tre-356 %txt /tests/golden/lex-tight-change-bad-7/tree/txt
1096−/* src-357 %jibb /tests/golden/lex-tight-change-bad-8/source/jibb
1097−/* tok-357 %txt /tests/golden/lex-tight-change-bad-8/tokens/txt
1098−/* tre-357 %txt /tests/golden/lex-tight-change-bad-8/tree/txt
1099−/* src-358 %jibb /tests/golden/lex-tight-change-bad-9/source/jibb
1100−/* tok-358 %txt /tests/golden/lex-tight-change-bad-9/tokens/txt
1101−/* tre-358 %txt /tests/golden/lex-tight-change-bad-9/tree/txt
1102−/* src-359 %jibb /tests/golden/lex-tight-change-ok-1/source/jibb
1103−/* tok-359 %txt /tests/golden/lex-tight-change-ok-1/tokens/txt
1104−/* tre-359 %txt /tests/golden/lex-tight-change-ok-1/tree/txt
1105−/* src-360 %jibb /tests/golden/lex-tight-ctor-bad-1/source/jibb
1106−/* tok-360 %txt /tests/golden/lex-tight-ctor-bad-1/tokens/txt
1107−/* tre-360 %txt /tests/golden/lex-tight-ctor-bad-1/tree/txt
1108−/* src-361 %jibb /tests/golden/lex-tight-ctor-bad-2/source/jibb
1109−/* tok-361 %txt /tests/golden/lex-tight-ctor-bad-2/tokens/txt
1110−/* tre-361 %txt /tests/golden/lex-tight-ctor-bad-2/tree/txt
1111−/* src-362 %jibb /tests/golden/lex-tight-ctor-ok-1/source/jibb
1112−/* tok-362 %txt /tests/golden/lex-tight-ctor-ok-1/tokens/txt
1113−/* tre-362 %txt /tests/golden/lex-tight-ctor-ok-1/tree/txt
1114−/* src-363 %jibb /tests/golden/lex-tight-opener-bad-1/source/jibb
1115−/* tok-363 %txt /tests/golden/lex-tight-opener-bad-1/tokens/txt
1116−/* tre-363 %txt /tests/golden/lex-tight-opener-bad-1/tree/txt
1117−/* src-364 %jibb /tests/golden/lex-tight-opener-bad-2/source/jibb
1118−/* tok-364 %txt /tests/golden/lex-tight-opener-bad-2/tokens/txt
1119−/* tre-364 %txt /tests/golden/lex-tight-opener-bad-2/tree/txt
1120−/* src-365 %jibb /tests/golden/lex-tight-opener-bad-3/source/jibb
1121−/* tok-365 %txt /tests/golden/lex-tight-opener-bad-3/tokens/txt
1122−/* tre-365 %txt /tests/golden/lex-tight-opener-bad-3/tree/txt
1123−/* src-366 %jibb /tests/golden/lex-tight-opener-bad-4/source/jibb
1124−/* tok-366 %txt /tests/golden/lex-tight-opener-bad-4/tokens/txt
1125−/* tre-366 %txt /tests/golden/lex-tight-opener-bad-4/tree/txt
1126−/* src-367 %jibb /tests/golden/lex-tight-opener-ok-1/source/jibb
1127−/* tok-367 %txt /tests/golden/lex-tight-opener-ok-1/tokens/txt
1128−/* tre-367 %txt /tests/golden/lex-tight-opener-ok-1/tree/txt
1129−/* src-368 %jibb /tests/golden/lex-tight-pair-bad-1/source/jibb
1130−/* tok-368 %txt /tests/golden/lex-tight-pair-bad-1/tokens/txt
1131−/* tre-368 %txt /tests/golden/lex-tight-pair-bad-1/tree/txt
1132−/* src-369 %jibb /tests/golden/lex-tight-pair-bad-2/source/jibb
1133−/* tok-369 %txt /tests/golden/lex-tight-pair-bad-2/tokens/txt
1134−/* tre-369 %txt /tests/golden/lex-tight-pair-bad-2/tree/txt
1135−/* src-370 %jibb /tests/golden/lex-tight-pair-bad-3/source/jibb
1136−/* tok-370 %txt /tests/golden/lex-tight-pair-bad-3/tokens/txt
1137−/* tre-370 %txt /tests/golden/lex-tight-pair-bad-3/tree/txt
1138−/* src-371 %jibb /tests/golden/lex-tight-pair-ok-1/source/jibb
1139−/* tok-371 %txt /tests/golden/lex-tight-pair-ok-1/tokens/txt
1140−/* tre-371 %txt /tests/golden/lex-tight-pair-ok-1/tree/txt
1141−/* src-372 %jibb /tests/golden/lex-tight-qath-bad-1/source/jibb
1142−/* tok-372 %txt /tests/golden/lex-tight-qath-bad-1/tokens/txt
1143−/* tre-372 %txt /tests/golden/lex-tight-qath-bad-1/tree/txt
1144−/* src-373 %jibb /tests/golden/lex-tight-qath-bad-2/source/jibb
1145−/* tok-373 %txt /tests/golden/lex-tight-qath-bad-2/tokens/txt
1146−/* tre-373 %txt /tests/golden/lex-tight-qath-bad-2/tree/txt
1147−/* src-374 %jibb /tests/golden/lex-tight-qath-bad-3/source/jibb
1148−/* tok-374 %txt /tests/golden/lex-tight-qath-bad-3/tokens/txt
1149−/* tre-374 %txt /tests/golden/lex-tight-qath-bad-3/tree/txt
1150−/* src-375 %jibb /tests/golden/lex-tight-qath-ok-1/source/jibb
1151−/* tok-375 %txt /tests/golden/lex-tight-qath-ok-1/tokens/txt
1152−/* tre-375 %txt /tests/golden/lex-tight-qath-ok-1/tree/txt
1153−/* src-376 %jibb /tests/golden/lex-tight-unit-bad-1/source/jibb
1154−/* tok-376 %txt /tests/golden/lex-tight-unit-bad-1/tokens/txt
1155−/* tre-376 %txt /tests/golden/lex-tight-unit-bad-1/tree/txt
1156−/* src-377 %jibb /tests/golden/lex-tight-unit-ok-1/source/jibb
1157−/* tok-377 %txt /tests/golden/lex-tight-unit-ok-1/tokens/txt
1158−/* tre-377 %txt /tests/golden/lex-tight-unit-ok-1/tree/txt
1159−/* src-378 %jibb /tests/golden/lex-tight-wing-bad-1/source/jibb
1160−/* tok-378 %txt /tests/golden/lex-tight-wing-bad-1/tokens/txt
1161−/* tre-378 %txt /tests/golden/lex-tight-wing-bad-1/tree/txt
1162−/* src-379 %jibb /tests/golden/lex-tight-wing-ok-1/source/jibb
1163−/* tok-379 %txt /tests/golden/lex-tight-wing-ok-1/tokens/txt
1164−/* tre-379 %txt /tests/golden/lex-tight-wing-ok-1/tree/txt
1165−/* src-380 %jibb /tests/golden/lex-utf8-bad-1/source/jibb
1166−/* tok-380 %txt /tests/golden/lex-utf8-bad-1/tokens/txt
1167−/* tre-380 %txt /tests/golden/lex-utf8-bad-1/tree/txt
1168−/* src-381 %jibb /tests/golden/lex-utf8-bad-2/source/jibb
1169−/* tok-381 %txt /tests/golden/lex-utf8-bad-2/tokens/txt
1170−/* tre-381 %txt /tests/golden/lex-utf8-bad-2/tree/txt
1171−/* src-382 %jibb /tests/golden/lex-utf8-ok-1/source/jibb
1172−/* tok-382 %txt /tests/golden/lex-utf8-ok-1/tokens/txt
1173−/* tre-382 %txt /tests/golden/lex-utf8-ok-1/tree/txt
1174−/* src-383 %jibb /tests/golden/module-cache-dag/source/jibb
1175−/* tok-383 %txt /tests/golden/module-cache-dag/tokens/txt
1176−/* tre-383 %txt /tests/golden/module-cache-dag/tree/txt
1177−/* mod-383-1 %jibb /tests/golden/module-cache-dag/modules/ui/n0/jibb
1178−/* mod-383-2 %jibb /tests/golden/module-cache-dag/modules/ui/n1/jibb
1179−/* mod-383-3 %jibb /tests/golden/module-cache-dag/modules/ui/n2/jibb
1180−/* mod-383-4 %jibb /tests/golden/module-cache-dag/modules/ui/n3/jibb
1181−/* mod-383-5 %jibb /tests/golden/module-cache-dag/modules/ui/n4/jibb
1182−/* mod-383-6 %jibb /tests/golden/module-cache-dag/modules/ui/n5/jibb
1183−/* mod-383-7 %jibb /tests/golden/module-cache-dag/modules/ui/n6/jibb
1184−/* mod-383-8 %jibb /tests/golden/module-cache-dag/modules/ui/n7/jibb
1185−/* typ-383 %txt /tests/golden/module-cache-dag/types/txt
1186−/* mtre-383 %txt /tests/golden/module-cache-dag/module-trees/txt
1187−/* src-384 %jibb /tests/golden/module-cache-faces/source/jibb
1188−/* tok-384 %txt /tests/golden/module-cache-faces/tokens/txt
1189−/* tre-384 %txt /tests/golden/module-cache-faces/tree/txt
1190−/* mod-384-1 %jibb /tests/golden/module-cache-faces/modules/ui/shared/jibb
1191−/* typ-384 %txt /tests/golden/module-cache-faces/types/txt
1192−/* mtre-384 %txt /tests/golden/module-cache-faces/module-trees/txt
1193−/* src-385 %jibb /tests/golden/module-cache-incomplete/source/jibb
1194−/* tok-385 %txt /tests/golden/module-cache-incomplete/tokens/txt
1195−/* tre-385 %txt /tests/golden/module-cache-incomplete/tree/txt
1196−/* mod-385-1 %jibb /tests/golden/module-cache-incomplete/modules/ui/bad/jibb
1197−/* typ-385 %txt /tests/golden/module-cache-incomplete/types/txt
1198−/* mtre-385 %txt /tests/golden/module-cache-incomplete/module-trees/txt
1199−/* src-386 %jibb /tests/golden/module-cache-sibling-cycle/source/jibb
1200−/* tok-386 %txt /tests/golden/module-cache-sibling-cycle/tokens/txt
1201−/* tre-386 %txt /tests/golden/module-cache-sibling-cycle/tree/txt
1202−/* mod-386-1 %jibb /tests/golden/module-cache-sibling-cycle/modules/ui/safe/jibb
1203−/* mod-386-2 %jibb /tests/golden/module-cache-sibling-cycle/modules/ui/a/jibb
1204−/* mod-386-3 %jibb /tests/golden/module-cache-sibling-cycle/modules/ui/b/jibb
1205−/* typ-386 %txt /tests/golden/module-cache-sibling-cycle/types/txt
1206−/* mtre-386 %txt /tests/golden/module-cache-sibling-cycle/module-trees/txt
1207−/* src-387 %jibb /tests/golden/module-fixture-eof/source/jibb
1208−/* tok-387 %txt /tests/golden/module-fixture-eof/tokens/txt
1209−/* tre-387 %txt /tests/golden/module-fixture-eof/tree/txt
1210−/* mod-387-1 %jibb /tests/golden/module-fixture-eof/modules/ui/incomplete/jibb
1211−/* mtre-387 %txt /tests/golden/module-fixture-eof/module-trees/txt
1212−/* src-388 %jibb /tests/golden/module-import-atom-scheme/source/jibb
1213−/* tok-388 %txt /tests/golden/module-import-atom-scheme/tokens/txt
1214−/* tre-388 %txt /tests/golden/module-import-atom-scheme/tree/txt
1215−/* mod-388-1 %jibb /tests/golden/module-import-atom-scheme/modules/ui/mid/jibb
1216−/* mod-388-2 %jibb /tests/golden/module-import-atom-scheme/modules/ui/base/jibb
1217−/* typ-388 %txt /tests/golden/module-import-atom-scheme/types/txt
1218−/* mtre-388 %txt /tests/golden/module-import-atom-scheme/module-trees/txt
1219−/* src-389 %jibb /tests/golden/module-import-cycle/source/jibb
1220−/* tok-389 %txt /tests/golden/module-import-cycle/tokens/txt
1221−/* tre-389 %txt /tests/golden/module-import-cycle/tree/txt
1222−/* mod-389-1 %jibb /tests/golden/module-import-cycle/modules/ui/a/jibb
1223−/* mod-389-2 %jibb /tests/golden/module-import-cycle/modules/ui/b/jibb
1224−/* typ-389 %txt /tests/golden/module-import-cycle/types/txt
1225−/* mtre-389 %txt /tests/golden/module-import-cycle/module-trees/txt
1226−/* src-390 %jibb /tests/golden/module-import-empty/source/jibb
1227−/* tok-390 %txt /tests/golden/module-import-empty/tokens/txt
1228−/* tre-390 %txt /tests/golden/module-import-empty/tree/txt
1229−/* typ-390 %txt /tests/golden/module-import-empty/types/txt
1230−/* src-391 %jibb /tests/golden/module-import-face-shadow/source/jibb
1231−/* tok-391 %txt /tests/golden/module-import-face-shadow/tokens/txt
1232−/* tre-391 %txt /tests/golden/module-import-face-shadow/tree/txt
1233−/* mod-391-1 %jibb /tests/golden/module-import-face-shadow/modules/ui/lib/jibb
1234−/* typ-391 %txt /tests/golden/module-import-face-shadow/types/txt
1235−/* mtre-391 %txt /tests/golden/module-import-face-shadow/module-trees/txt
1236−/* src-392 %jibb /tests/golden/module-import-identity/source/jibb
1237−/* tok-392 %txt /tests/golden/module-import-identity/tokens/txt
1238−/* tre-392 %txt /tests/golden/module-import-identity/tree/txt
1239−/* mod-392-1 %jibb /tests/golden/module-import-identity/modules/ui/lib/jibb
1240−/* typ-392 %txt /tests/golden/module-import-identity/types/txt
1241−/* mtre-392 %txt /tests/golden/module-import-identity/module-trees/txt
1242−/* src-393 %jibb /tests/golden/module-import-invalid/source/jibb
1243−/* tok-393 %txt /tests/golden/module-import-invalid/tokens/txt
1244−/* tre-393 %txt /tests/golden/module-import-invalid/tree/txt
1245−/* mod-393-1 %jibb /tests/golden/module-import-invalid/modules/ui/lib/jibb
1246−/* typ-393 %txt /tests/golden/module-import-invalid/types/txt
1247−/* mtre-393 %txt /tests/golden/module-import-invalid/module-trees/txt
1248−/* src-394 %jibb /tests/golden/module-import-missing-member/source/jibb
1249−/* tok-394 %txt /tests/golden/module-import-missing-member/tokens/txt
1250−/* tre-394 %txt /tests/golden/module-import-missing-member/tree/txt
1251−/* mod-394-1 %jibb /tests/golden/module-import-missing-member/modules/ui/lib/jibb
1252−/* typ-394 %txt /tests/golden/module-import-missing-member/types/txt
1253−/* mtre-394 %txt /tests/golden/module-import-missing-member/module-trees/txt
1254−/* src-395 %jibb /tests/golden/module-import-mold/source/jibb
1255−/* tok-395 %txt /tests/golden/module-import-mold/tokens/txt
1256−/* tre-395 %txt /tests/golden/module-import-mold/tree/txt
1257−/* mod-395-1 %jibb /tests/golden/module-import-mold/modules/ui/lib/jibb
1258−/* typ-395 %txt /tests/golden/module-import-mold/types/txt
1259−/* mtre-395 %txt /tests/golden/module-import-mold/module-trees/txt
1260−/* src-396 %jibb /tests/golden/module-import-prelude-cross-namespace/source/jibb
1261−/* tok-396 %txt /tests/golden/module-import-prelude-cross-namespace/tokens/txt
1262−/* tre-396 %txt /tests/golden/module-import-prelude-cross-namespace/tree/txt
1263−/* typ-396 %txt /tests/golden/module-import-prelude-cross-namespace/types/txt
1264−/* src-397 %jibb /tests/golden/module-import-prelude-mold-shadow/source/jibb
1265−/* tok-397 %txt /tests/golden/module-import-prelude-mold-shadow/tokens/txt
1266−/* tre-397 %txt /tests/golden/module-import-prelude-mold-shadow/tree/txt
1267−/* typ-397 %txt /tests/golden/module-import-prelude-mold-shadow/types/txt
1268−/* src-398 %jibb /tests/golden/module-import-prelude-sample-shadow/source/jibb
1269−/* tok-398 %txt /tests/golden/module-import-prelude-sample-shadow/tokens/txt
1270−/* tre-398 %txt /tests/golden/module-import-prelude-sample-shadow/tree/txt
1271−/* mod-398-1 %jibb /tests/golden/module-import-prelude-sample-shadow/modules/ui/lib/jibb
1272−/* typ-398 %txt /tests/golden/module-import-prelude-sample-shadow/types/txt
1273−/* mtre-398 %txt /tests/golden/module-import-prelude-sample-shadow/module-trees/txt
1274−/* src-399 %jibb /tests/golden/module-import-prelude-value-shadow/source/jibb
1275−/* tok-399 %txt /tests/golden/module-import-prelude-value-shadow/tokens/txt
1276−/* tre-399 %txt /tests/golden/module-import-prelude-value-shadow/tree/txt
1277−/* mod-399-1 %jibb /tests/golden/module-import-prelude-value-shadow/modules/ui/lib/jibb
1278−/* typ-399 %txt /tests/golden/module-import-prelude-value-shadow/types/txt
1279−/* mtre-399 %txt /tests/golden/module-import-prelude-value-shadow/module-trees/txt
1280−/* src-400 %jibb /tests/golden/module-import-root-cycle/source/jibb
1281−/* tok-400 %txt /tests/golden/module-import-root-cycle/tokens/txt
1282−/* tre-400 %txt /tests/golden/module-import-root-cycle/tree/txt
1283−/* mod-400-1 %jibb /tests/golden/module-import-root-cycle/modules/ui/a/jibb
1284−/* typ-400 %txt /tests/golden/module-import-root-cycle/types/txt
1285−/* mtre-400 %txt /tests/golden/module-import-root-cycle/module-trees/txt
1286−/* src-401 %jibb /tests/golden/module-import-root-import-shadow/source/jibb
1287−/* tok-401 %txt /tests/golden/module-import-root-import-shadow/tokens/txt
1288−/* tre-401 %txt /tests/golden/module-import-root-import-shadow/tree/txt
1289−/* typ-401 %txt /tests/golden/module-import-root-import-shadow/types/txt
1290−/* imp-401-1 %txt /tests/golden/module-import-root-import-shadow/sur/fixture/txt
1291−/* mark-401-1 %txt /tests/golden/module-import-root-import-shadow/mar/label/txt
1292−/* src-402 %jibb /tests/golden/module-import-separate-namespaces/source/jibb
1293−/* tok-402 %txt /tests/golden/module-import-separate-namespaces/tokens/txt
1294−/* tre-402 %txt /tests/golden/module-import-separate-namespaces/tree/txt
1295−/* mod-402-1 %jibb /tests/golden/module-import-separate-namespaces/modules/ui/lib/jibb
1296−/* typ-402 %txt /tests/golden/module-import-separate-namespaces/types/txt
1297−/* mtre-402 %txt /tests/golden/module-import-separate-namespaces/module-trees/txt
1298−/* src-403 %jibb /tests/golden/module-import-sur-scope/source/jibb
1299−/* tok-403 %txt /tests/golden/module-import-sur-scope/tokens/txt
1300−/* tre-403 %txt /tests/golden/module-import-sur-scope/tree/txt
1301−/* mod-403-1 %jibb /tests/golden/module-import-sur-scope/modules/ui/lib/jibb
1302−/* typ-403 %txt /tests/golden/module-import-sur-scope/types/txt
1303−/* imp-403-1 %txt /tests/golden/module-import-sur-scope/sur/fixture/txt
1304−/* mtre-403 %txt /tests/golden/module-import-sur-scope/module-trees/txt
1305−/* src-404 %jibb /tests/golden/module-import-transitive/source/jibb
1306−/* tok-404 %txt /tests/golden/module-import-transitive/tokens/txt
1307−/* tre-404 %txt /tests/golden/module-import-transitive/tree/txt
1308−/* mod-404-1 %jibb /tests/golden/module-import-transitive/modules/ui/a/jibb
1309−/* mod-404-2 %jibb /tests/golden/module-import-transitive/modules/ui/b/jibb
1310−/* mod-404-3 %jibb /tests/golden/module-import-transitive/modules/ui/c/jibb
1311−/* typ-404 %txt /tests/golden/module-import-transitive/types/txt
1312−/* mtre-404 %txt /tests/golden/module-import-transitive/module-trees/txt
1313−/* src-405 %jibb /tests/golden/module-import-unused-invalid/source/jibb
1314−/* tok-405 %txt /tests/golden/module-import-unused-invalid/tokens/txt
1315−/* tre-405 %txt /tests/golden/module-import-unused-invalid/tree/txt
1316−/* mod-405-1 %jibb /tests/golden/module-import-unused-invalid/modules/ui/good/jibb
1317−/* mod-405-2 %jibb /tests/golden/module-import-unused-invalid/modules/ui/unused/jibb
1318−/* typ-405 %txt /tests/golden/module-import-unused-invalid/types/txt
1319−/* mtre-405 %txt /tests/golden/module-import-unused-invalid/module-trees/txt
1320−/* src-406 %jibb /tests/golden/parser-hole-parameter-rejected/source/jibb
1321−/* tok-406 %txt /tests/golden/parser-hole-parameter-rejected/tokens/txt
1322−/* tre-406 %txt /tests/golden/parser-hole-parameter-rejected/tree/txt
1323−/* src-407 %jibb /tests/golden/parser-hole-path/source/jibb
1324−/* tok-407 %txt /tests/golden/parser-hole-path/tokens/txt
1325−/* tre-407 %txt /tests/golden/parser-hole-path/tree/txt
1326−/* src-408 %jibb /tests/golden/parser-hole-path-space/source/jibb
1327−/* tok-408 %txt /tests/golden/parser-hole-path-space/tokens/txt
1328−/* tre-408 %txt /tests/golden/parser-hole-path-space/tree/txt
1329−/* src-409 %jibb /tests/golden/parser-hole-pattern-rejected/source/jibb
1330−/* tok-409 %txt /tests/golden/parser-hole-pattern-rejected/tokens/txt
1331−/* tre-409 %txt /tests/golden/parser-hole-pattern-rejected/tree/txt
1332−/* src-410 %jibb /tests/golden/parser-hole-shapes/source/jibb
1333−/* tok-410 %txt /tests/golden/parser-hole-shapes/tokens/txt
1334−/* tre-410 %txt /tests/golden/parser-hole-shapes/tree/txt
1335−/* src-411 %jibb /tests/golden/parser-hole-value-rejected/source/jibb
1336−/* tok-411 %txt /tests/golden/parser-hole-value-rejected/tokens/txt
1337−/* tre-411 %txt /tests/golden/parser-hole-value-rejected/tree/txt
1338−/* src-412 %jibb /tests/golden/prelude-1c-structural/source/jibb
1339−/* tok-412 %txt /tests/golden/prelude-1c-structural/tokens/txt
1340−/* tre-412 %txt /tests/golden/prelude-1c-structural/tree/txt
1341−/* typ-412 %txt /tests/golden/prelude-1c-structural/types/txt
1342−/* src-413 %jibb /tests/golden/prelude-3g-basic/source/jibb
1343−/* tok-413 %txt /tests/golden/prelude-3g-basic/tokens/txt
1344−/* tre-413 %txt /tests/golden/prelude-3g-basic/tree/txt
1345−/* typ-413 %txt /tests/golden/prelude-3g-basic/types/txt
1346−/* src-414 %jibb /tests/golden/prelude-3g-like/source/jibb
1347−/* tok-414 %txt /tests/golden/prelude-3g-like/tokens/txt
1348−/* tre-414 %txt /tests/golden/prelude-3g-like/tree/txt
1349−/* typ-414 %txt /tests/golden/prelude-3g-like/types/txt
1350−/* src-415 %jibb /tests/golden/prelude-3g-structural/source/jibb
1351−/* tok-415 %txt /tests/golden/prelude-3g-structural/tokens/txt
1352−/* tre-415 %txt /tests/golden/prelude-3g-structural/tree/txt
1353−/* typ-415 %txt /tests/golden/prelude-3g-structural/types/txt
1354−/* src-416 %jibb /tests/golden/prelude-core-functions/source/jibb
1355−/* tok-416 %txt /tests/golden/prelude-core-functions/tokens/txt
1356−/* tre-416 %txt /tests/golden/prelude-core-functions/tree/txt
1357−/* typ-416 %txt /tests/golden/prelude-core-functions/types/txt
1358−/* src-417 %jibb /tests/golden/prelude-list-helpers/source/jibb
1359−/* tok-417 %txt /tests/golden/prelude-list-helpers/tokens/txt
1360−/* tre-417 %txt /tests/golden/prelude-list-helpers/tree/txt
1361−/* typ-417 %txt /tests/golden/prelude-list-helpers/types/txt
1362−/* src-418 %jibb /tests/golden/prelude-list-unit/source/jibb
1363−/* tok-418 %txt /tests/golden/prelude-list-unit/tokens/txt
1364−/* tre-418 %txt /tests/golden/prelude-list-unit/tree/txt
1365−/* typ-418 %txt /tests/golden/prelude-list-unit/types/txt
1366−/* src-419 %jibb /tests/golden/prelude-unit-list-transforms/source/jibb
1367−/* tok-419 %txt /tests/golden/prelude-unit-list-transforms/tokens/txt
1368−/* tre-419 %txt /tests/golden/prelude-unit-list-transforms/tree/txt
1369−/* typ-419 %txt /tests/golden/prelude-unit-list-transforms/types/txt
1370−/* src-420 %jibb /tests/golden/types-arithmetic-combined/source/jibb
1371−/* tok-420 %txt /tests/golden/types-arithmetic-combined/tokens/txt
1372−/* tre-420 %txt /tests/golden/types-arithmetic-combined/tree/txt
1373−/* typ-420 %txt /tests/golden/types-arithmetic-combined/types/txt
1374−/* src-421 %jibb /tests/golden/types-arithmetic-generic/source/jibb
1375−/* tok-421 %txt /tests/golden/types-arithmetic-generic/tokens/txt
1376−/* tre-421 %txt /tests/golden/types-arithmetic-generic/tree/txt
1377−/* typ-421 %txt /tests/golden/types-arithmetic-generic/types/txt
1378−/* src-422 %jibb /tests/golden/types-arithmetic-module/source/jibb
1379−/* tok-422 %txt /tests/golden/types-arithmetic-module/tokens/txt
1380−/* tre-422 %txt /tests/golden/types-arithmetic-module/tree/txt
1381−/* mod-422-1 %jibb /tests/golden/types-arithmetic-module/modules/ui/math/jibb
1382−/* typ-422 %txt /tests/golden/types-arithmetic-module/types/txt
1383−/* mtre-422 %txt /tests/golden/types-arithmetic-module/module-trees/txt
1384−/* src-423 %jibb /tests/golden/types-arithmetic-proj-qath/source/jibb
1385−/* tok-423 %txt /tests/golden/types-arithmetic-proj-qath/tokens/txt
1386−/* tre-423 %txt /tests/golden/types-arithmetic-proj-qath/tree/txt
1387−/* typ-423 %txt /tests/golden/types-arithmetic-proj-qath/types/txt
1388−/* src-424 %jibb /tests/golden/types-arithmetic-scopes/source/jibb
1389−/* tok-424 %txt /tests/golden/types-arithmetic-scopes/tokens/txt
1390−/* tre-424 %txt /tests/golden/types-arithmetic-scopes/tree/txt
1391−/* typ-424 %txt /tests/golden/types-arithmetic-scopes/types/txt
1392−/* src-425 %jibb /tests/golden/types-capital-distinct/source/jibb
1393−/* tok-425 %txt /tests/golden/types-capital-distinct/tokens/txt
1394−/* tre-425 %txt /tests/golden/types-capital-distinct/tree/txt
1395−/* typ-425 %txt /tests/golden/types-capital-distinct/types/txt
1396−/* src-426 %jibb /tests/golden/types-cell-branch-context/source/jibb
1397−/* tok-426 %txt /tests/golden/types-cell-branch-context/tokens/txt
1398−/* tre-426 %txt /tests/golden/types-cell-branch-context/tree/txt
1399−/* typ-426 %txt /tests/golden/types-cell-branch-context/types/txt
1400−/* src-427 %jibb /tests/golden/types-cell-pattern-many/source/jibb
1401−/* tok-427 %txt /tests/golden/types-cell-pattern-many/tokens/txt
1402−/* tre-427 %txt /tests/golden/types-cell-pattern-many/tree/txt
1403−/* typ-427 %txt /tests/golden/types-cell-pattern-many/types/txt
1404−/* src-428 %jibb /tests/golden/types-cell-pattern-schemes/source/jibb
1405−/* tok-428 %txt /tests/golden/types-cell-pattern-schemes/tokens/txt
1406−/* tre-428 %txt /tests/golden/types-cell-pattern-schemes/tree/txt
1407−/* typ-428 %txt /tests/golden/types-cell-pattern-schemes/types/txt
1408−/* src-429 %jibb /tests/golden/types-cell-pattern-tail/source/jibb
1409−/* tok-429 %txt /tests/golden/types-cell-pattern-tail/tokens/txt
1410−/* tre-429 %txt /tests/golden/types-cell-pattern-tail/tree/txt
1411−/* typ-429 %txt /tests/golden/types-cell-pattern-tail/types/txt
1412−/* src-430 %jibb /tests/golden/types-constructor-context/source/jibb
1413−/* tok-430 %txt /tests/golden/types-constructor-context/tokens/txt
1414−/* tre-430 %txt /tests/golden/types-constructor-context/tree/txt
1415−/* typ-430 %txt /tests/golden/types-constructor-context/types/txt
1416−/* src-431 %jibb /tests/golden/types-deferred-call-context/source/jibb
1417−/* tok-431 %txt /tests/golden/types-deferred-call-context/tokens/txt
1418−/* tre-431 %txt /tests/golden/types-deferred-call-context/tree/txt
1419−/* typ-431 %txt /tests/golden/types-deferred-call-context/types/txt
1420−/* src-432 %jibb /tests/golden/types-equal-head-disjoint/source/jibb
1421−/* tok-432 %txt /tests/golden/types-equal-head-disjoint/tokens/txt
1422−/* tre-432 %txt /tests/golden/types-equal-head-disjoint/tree/txt
1423−/* typ-432 %txt /tests/golden/types-equal-head-disjoint/types/txt
1424−/* src-433 %jibb /tests/golden/types-flag-branch-context/source/jibb
1425−/* tok-433 %txt /tests/golden/types-flag-branch-context/tokens/txt
1426−/* tre-433 %txt /tests/golden/types-flag-branch-context/tree/txt
1427−/* typ-433 %txt /tests/golden/types-flag-branch-context/types/txt
1428−/* src-434 %jibb /tests/golden/types-generic-arity/source/jibb
1429−/* tok-434 %txt /tests/golden/types-generic-arity/tokens/txt
1430−/* tre-434 %txt /tests/golden/types-generic-arity/tree/txt
1431−/* typ-434 %txt /tests/golden/types-generic-arity/types/txt
1432−/* src-435 %jibb /tests/golden/types-generic-face-inference/source/jibb
1433−/* tok-435 %txt /tests/golden/types-generic-face-inference/tokens/txt
1434−/* tre-435 %txt /tests/golden/types-generic-face-inference/tree/txt
1435−/* typ-435 %txt /tests/golden/types-generic-face-inference/types/txt
1436−/* src-436 %jibb /tests/golden/types-generic-gates/source/jibb
1437−/* tok-436 %txt /tests/golden/types-generic-gates/tokens/txt
1438−/* tre-436 %txt /tests/golden/types-generic-gates/tree/txt
1439−/* typ-436 %txt /tests/golden/types-generic-gates/types/txt
1440−/* src-437 %jibb /tests/golden/types-generic-import-reverse/source/jibb
1441−/* tok-437 %txt /tests/golden/types-generic-import-reverse/tokens/txt
1442−/* tre-437 %txt /tests/golden/types-generic-import-reverse/tree/txt
1443−/* mod-437-1 %jibb /tests/golden/types-generic-import-reverse/modules/ui/lib/jibb
1444−/* typ-437 %txt /tests/golden/types-generic-import-reverse/types/txt
1445−/* mtre-437 %txt /tests/golden/types-generic-import-reverse/module-trees/txt
1446−/* src-438 %jibb /tests/golden/types-generic-lexical-alias/source/jibb
1447−/* tok-438 %txt /tests/golden/types-generic-lexical-alias/tokens/txt
1448−/* tre-438 %txt /tests/golden/types-generic-lexical-alias/tree/txt
1449−/* typ-438 %txt /tests/golden/types-generic-lexical-alias/types/txt
1450−/* src-439 %jibb /tests/golden/types-generic-local-parameter/source/jibb
1451−/* tok-439 %txt /tests/golden/types-generic-local-parameter/tokens/txt
1452−/* tre-439 %txt /tests/golden/types-generic-local-parameter/tree/txt
1453−/* typ-439 %txt /tests/golden/types-generic-local-parameter/types/txt
1454−/* src-440 %jibb /tests/golden/types-generic-local-scope/source/jibb
1455−/* tok-440 %txt /tests/golden/types-generic-local-scope/tokens/txt
1456−/* tre-440 %txt /tests/golden/types-generic-local-scope/tree/txt
1457−/* typ-440 %txt /tests/golden/types-generic-local-scope/types/txt
1458−/* src-441 %jibb /tests/golden/types-generic-module/source/jibb
1459−/* tok-441 %txt /tests/golden/types-generic-module/tokens/txt
1460−/* tre-441 %txt /tests/golden/types-generic-module/tree/txt
1461−/* mod-441-1 %jibb /tests/golden/types-generic-module/modules/ui/lib/jibb
1462−/* typ-441 %txt /tests/golden/types-generic-module/types/txt
1463−/* mtre-441 %txt /tests/golden/types-generic-module/module-trees/txt
1464−/* src-442 %jibb /tests/golden/types-generic-nested-scope/source/jibb
1465−/* tok-442 %txt /tests/golden/types-generic-nested-scope/tokens/txt
1466−/* tre-442 %txt /tests/golden/types-generic-nested-scope/tree/txt
1467−/* typ-442 %txt /tests/golden/types-generic-nested-scope/types/txt
1468−/* src-443 %jibb /tests/golden/types-generic-parameters/source/jibb
1469−/* tok-443 %txt /tests/golden/types-generic-parameters/tokens/txt
1470−/* tre-443 %txt /tests/golden/types-generic-parameters/tree/txt
1471−/* typ-443 %txt /tests/golden/types-generic-parameters/types/txt
1472−/* src-444 %jibb /tests/golden/types-generic-record/source/jibb
1473−/* tok-444 %txt /tests/golden/types-generic-record/tokens/txt
1474−/* tre-444 %txt /tests/golden/types-generic-record/tree/txt
1475−/* typ-444 %txt /tests/golden/types-generic-record/types/txt
1476−/* src-445 %jibb /tests/golden/types-generic-recursive-union/source/jibb
1477−/* tok-445 %txt /tests/golden/types-generic-recursive-union/tokens/txt
1478−/* tre-445 %txt /tests/golden/types-generic-recursive-union/tree/txt
1479−/* typ-445 %txt /tests/golden/types-generic-recursive-union/types/txt
1480−/* src-446 %jibb /tests/golden/types-generic-repeated/source/jibb
1481−/* tok-446 %txt /tests/golden/types-generic-repeated/tokens/txt
1482−/* tre-446 %txt /tests/golden/types-generic-repeated/tree/txt
1483−/* typ-446 %txt /tests/golden/types-generic-repeated/types/txt
1484−/* src-447 %jibb /tests/golden/types-generic-result-context/source/jibb
1485−/* tok-447 %txt /tests/golden/types-generic-result-context/tokens/txt
1486−/* tre-447 %txt /tests/golden/types-generic-result-context/tree/txt
1487−/* typ-447 %txt /tests/golden/types-generic-result-context/types/txt
1488−/* src-448 %jibb /tests/golden/types-generic-union-alias/source/jibb
1489−/* tok-448 %txt /tests/golden/types-generic-union-alias/tokens/txt
1490−/* tre-448 %txt /tests/golden/types-generic-union-alias/tree/txt
1491−/* typ-448 %txt /tests/golden/types-generic-union-alias/types/txt
1492−/* src-449 %jibb /tests/golden/types-generic-union-alias-face/source/jibb
1493−/* tok-449 %txt /tests/golden/types-generic-union-alias-face/tokens/txt
1494−/* tre-449 %txt /tests/golden/types-generic-union-alias-face/tree/txt
1495−/* mod-449-1 %jibb /tests/golden/types-generic-union-alias-face/modules/ui/base/jibb
1496−/* typ-449 %txt /tests/golden/types-generic-union-alias-face/types/txt
1497−/* mtre-449 %txt /tests/golden/types-generic-union-alias-face/module-trees/txt
1498−/* src-450 %jibb /tests/golden/types-generic-union-capitals/source/jibb
1499−/* tok-450 %txt /tests/golden/types-generic-union-capitals/tokens/txt
1500−/* tre-450 %txt /tests/golden/types-generic-union-capitals/tree/txt
1501−/* typ-450 %txt /tests/golden/types-generic-union-capitals/types/txt
1502−/* src-451 %jibb /tests/golden/types-generic-union-errors/source/jibb
1503−/* tok-451 %txt /tests/golden/types-generic-union-errors/tokens/txt
1504−/* tre-451 %txt /tests/golden/types-generic-union-errors/tree/txt
1505−/* typ-451 %txt /tests/golden/types-generic-union-errors/types/txt
1506−/* src-452 %jibb /tests/golden/types-generic-union-escaping/source/jibb
1507−/* tok-452 %txt /tests/golden/types-generic-union-escaping/tokens/txt
1508−/* tre-452 %txt /tests/golden/types-generic-union-escaping/tree/txt
1509−/* mod-452-1 %jibb /tests/golden/types-generic-union-escaping/modules/ui/base/jibb
1510−/* mod-452-2 %jibb /tests/golden/types-generic-union-escaping/modules/ui/mid/jibb
1511−/* typ-452 %txt /tests/golden/types-generic-union-escaping/types/txt
1512−/* mtre-452 %txt /tests/golden/types-generic-union-escaping/module-trees/txt
1513−/* src-453 %jibb /tests/golden/types-generic-union-import/source/jibb
1514−/* tok-453 %txt /tests/golden/types-generic-union-import/tokens/txt
1515−/* tre-453 %txt /tests/golden/types-generic-union-import/tree/txt
1516−/* mod-453-1 %jibb /tests/golden/types-generic-union-import/modules/ui/shared/jibb
1517−/* mod-453-2 %jibb /tests/golden/types-generic-union-import/modules/ui/twin/jibb
1518−/* typ-453 %txt /tests/golden/types-generic-union-import/types/txt
1519−/* mtre-453 %txt /tests/golden/types-generic-union-import/module-trees/txt
1520−/* src-454 %jibb /tests/golden/types-generic-union-local/source/jibb
1521−/* tok-454 %txt /tests/golden/types-generic-union-local/tokens/txt
1522−/* tre-454 %txt /tests/golden/types-generic-union-local/tree/txt
1523−/* typ-454 %txt /tests/golden/types-generic-union-local/types/txt
1524−/* src-455 %jibb /tests/golden/types-generic-union-transitive/source/jibb
1525−/* tok-455 %txt /tests/golden/types-generic-union-transitive/tokens/txt
1526−/* tre-455 %txt /tests/golden/types-generic-union-transitive/tree/txt
1527−/* mod-455-1 %jibb /tests/golden/types-generic-union-transitive/modules/ui/base/jibb
1528−/* mod-455-2 %jibb /tests/golden/types-generic-union-transitive/modules/ui/mid/jibb
1529−/* typ-455 %txt /tests/golden/types-generic-union-transitive/types/txt
1530−/* mtre-455 %txt /tests/golden/types-generic-union-transitive/module-trees/txt
1531−/* src-456 %jibb /tests/golden/types-hole-concrete/source/jibb
1532−/* tok-456 %txt /tests/golden/types-hole-concrete/tokens/txt
1533−/* tre-456 %txt /tests/golden/types-hole-concrete/tree/txt
1534−/* typ-456 %txt /tests/golden/types-hole-concrete/types/txt
1535−/* src-457 %jibb /tests/golden/types-hole-generic-mold/source/jibb
1536−/* tok-457 %txt /tests/golden/types-hole-generic-mold/tokens/txt
1537−/* tre-457 %txt /tests/golden/types-hole-generic-mold/tree/txt
1538−/* typ-457 %txt /tests/golden/types-hole-generic-mold/types/txt
1539−/* src-458 %jibb /tests/golden/types-hole-local-boundary/source/jibb
1540−/* tok-458 %txt /tests/golden/types-hole-local-boundary/tokens/txt
1541−/* tre-458 %txt /tests/golden/types-hole-local-boundary/tree/txt
1542−/* typ-458 %txt /tests/golden/types-hole-local-boundary/types/txt
1543−/* src-459 %jibb /tests/golden/types-hole-module-boundary/source/jibb
1544−/* tok-459 %txt /tests/golden/types-hole-module-boundary/tokens/txt
1545−/* tre-459 %txt /tests/golden/types-hole-module-boundary/tree/txt
1546−/* mod-459-1 %jibb /tests/golden/types-hole-module-boundary/modules/ui/lib/jibb
1547−/* typ-459 %txt /tests/golden/types-hole-module-boundary/types/txt
1548−/* mtre-459 %txt /tests/golden/types-hole-module-boundary/module-trees/txt
1549−/* src-460 %jibb /tests/golden/types-hole-named-complex/source/jibb
1550−/* tok-460 %txt /tests/golden/types-hole-named-complex/tokens/txt
1551−/* tre-460 %txt /tests/golden/types-hole-named-complex/tree/txt
1552−/* typ-460 %txt /tests/golden/types-hole-named-complex/types/txt
1553−/* src-461 %jibb /tests/golden/types-hole-numeric-capture/source/jibb
1554−/* tok-461 %txt /tests/golden/types-hole-numeric-capture/tokens/txt
1555−/* tre-461 %txt /tests/golden/types-hole-numeric-capture/tree/txt
1556−/* typ-461 %txt /tests/golden/types-hole-numeric-capture/types/txt
1557−/* src-462 %jibb /tests/golden/types-hole-unbound-mold/source/jibb
1558−/* tok-462 %txt /tests/golden/types-hole-unbound-mold/tokens/txt
1559−/* tre-462 %txt /tests/golden/types-hole-unbound-mold/tree/txt
1560−/* typ-462 %txt /tests/golden/types-hole-unbound-mold/types/txt
1561−/* src-463 %jibb /tests/golden/types-hole-unsupported/source/jibb
1562−/* tok-463 %txt /tests/golden/types-hole-unsupported/tokens/txt
1563−/* tre-463 %txt /tests/golden/types-hole-unsupported/tree/txt
1564−/* typ-463 %txt /tests/golden/types-hole-unsupported/types/txt
1565−/* src-464 %jibb /tests/golden/types-hole-user-generic/source/jibb
1566−/* tok-464 %txt /tests/golden/types-hole-user-generic/tokens/txt
1567−/* tre-464 %txt /tests/golden/types-hole-user-generic/tree/txt
1568−/* typ-464 %txt /tests/golden/types-hole-user-generic/types/txt
1569−/* src-465 %jibb /tests/golden/types-hole-user-named/source/jibb
1570−/* tok-465 %txt /tests/golden/types-hole-user-named/tokens/txt
1571−/* tre-465 %txt /tests/golden/types-hole-user-named/tree/txt
1572−/* typ-465 %txt /tests/golden/types-hole-user-named/types/txt
1573−/* src-466 %jibb /tests/golden/types-hole-user-value/source/jibb
1574−/* tok-466 %txt /tests/golden/types-hole-user-value/tokens/txt
1575−/* tre-466 %txt /tests/golden/types-hole-user-value/tree/txt
1576−/* typ-466 %txt /tests/golden/types-hole-user-value/types/txt
1577−/* src-467 %jibb /tests/golden/types-import-duplicate-mark/source/jibb
1578−/* tok-467 %txt /tests/golden/types-import-duplicate-mark/tokens/txt
1579−/* tre-467 %txt /tests/golden/types-import-duplicate-mark/tree/txt
1580−/* typ-467 %txt /tests/golden/types-import-duplicate-mark/types/txt
1581−/* mark-467-1 %txt /tests/golden/types-import-duplicate-mark/mar/duplicate/txt
1582−/* src-468 %jibb /tests/golden/types-import-duplicate-sur/source/jibb
1583−/* tok-468 %txt /tests/golden/types-import-duplicate-sur/tokens/txt
1584−/* tre-468 %txt /tests/golden/types-import-duplicate-sur/tree/txt
1585−/* typ-468 %txt /tests/golden/types-import-duplicate-sur/types/txt
1586−/* imp-468-1 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1587−/* imp-468-2 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1588−/* imp-468-3 %txt /tests/golden/types-import-duplicate-sur/sur/fixture/txt
1589−/* src-469 %jibb /tests/golden/types-import-hoon-flags/source/jibb
1590−/* tok-469 %txt /tests/golden/types-import-hoon-flags/tokens/txt
1591−/* tre-469 %txt /tests/golden/types-import-hoon-flags/tree/txt
1592−/* typ-469 %txt /tests/golden/types-import-hoon-flags/types/txt
1593−/* imp-469-1 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1594−/* imp-469-2 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1595−/* imp-469-3 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1596−/* imp-469-4 %txt /tests/golden/types-import-hoon-flags/sur/flags/txt
1597−/* src-470 %jibb /tests/golden/types-import-hoon-noun/source/jibb
1598−/* tok-470 %txt /tests/golden/types-import-hoon-noun/tokens/txt
1599−/* tre-470 %txt /tests/golden/types-import-hoon-noun/tree/txt
1600−/* typ-470 %txt /tests/golden/types-import-hoon-noun/types/txt
1601−/* imp-470-1 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1602−/* imp-470-2 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1603−/* imp-470-3 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1604−/* imp-470-4 %txt /tests/golden/types-import-hoon-noun/sur/fixture/txt
1605−/* src-471 %jibb /tests/golden/types-import-mark/source/jibb
1606−/* tok-471 %txt /tests/golden/types-import-mark/tokens/txt
1607−/* tre-471 %txt /tests/golden/types-import-mark/tree/txt
1608−/* typ-471 %txt /tests/golden/types-import-mark/types/txt
1609−/* imp-471-1 %txt /tests/golden/types-import-mark/sur/fixture/txt
1610−/* mark-471-1 %txt /tests/golden/types-import-mark/mar/label/txt
1611−/* src-472 %jibb /tests/golden/types-import-mark-record/source/jibb
1612−/* tok-472 %txt /tests/golden/types-import-mark-record/tokens/txt
1613−/* tre-472 %txt /tests/golden/types-import-mark-record/tree/txt
1614−/* typ-472 %txt /tests/golden/types-import-mark-record/types/txt
1615−/* mark-472-1 %txt /tests/golden/types-import-mark-record/mar/note/txt
1616−/* mark-472-2 %txt /tests/golden/types-import-mark-record/mar/choice/txt
1617−/* src-473 %jibb /tests/golden/types-import-missing-mold/source/jibb
1618−/* tok-473 %txt /tests/golden/types-import-missing-mold/tokens/txt
1619−/* tre-473 %txt /tests/golden/types-import-missing-mold/tree/txt
1620−/* typ-473 %txt /tests/golden/types-import-missing-mold/types/txt
1621−/* imp-473-1 %txt /tests/golden/types-import-missing-mold/sur/fixture/txt
1622−/* src-474 %jibb /tests/golden/types-import-sur/source/jibb
1623−/* tok-474 %txt /tests/golden/types-import-sur/tokens/txt
1624−/* tre-474 %txt /tests/golden/types-import-sur/tree/txt
1625−/* typ-474 %txt /tests/golden/types-import-sur/types/txt
1626−/* imp-474-1 %txt /tests/golden/types-import-sur/sur/fixture/txt
1627−/* imp-474-2 %txt /tests/golden/types-import-sur/sur/fixture/txt
1628−/* src-475 %jibb /tests/golden/types-import-sur-record-graph/source/jibb
1629−/* tok-475 %txt /tests/golden/types-import-sur-record-graph/tokens/txt
1630−/* tre-475 %txt /tests/golden/types-import-sur-record-graph/tree/txt
1631−/* mod-475-1 %jibb /tests/golden/types-import-sur-record-graph/modules/ui/lib/jibb
1632−/* typ-475 %txt /tests/golden/types-import-sur-record-graph/types/txt
1633−/* imp-475-1 %txt /tests/golden/types-import-sur-record-graph/sur/fixture/txt
1634−/* mtre-475 %txt /tests/golden/types-import-sur-record-graph/module-trees/txt
1635−/* src-476 %jibb /tests/golden/types-import-tlon-notes/source/jibb
1636−/* tok-476 %txt /tests/golden/types-import-tlon-notes/tokens/txt
1637−/* tre-476 %txt /tests/golden/types-import-tlon-notes/tree/txt
1638−/* typ-476 %txt /tests/golden/types-import-tlon-notes/types/txt
1639−/* imp-476-1 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1640−/* imp-476-2 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1641−/* imp-476-3 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1642−/* imp-476-4 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1643−/* imp-476-5 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1644−/* imp-476-6 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1645−/* imp-476-7 %txt /tests/golden/types-import-tlon-notes/sur/notes/txt
1646−/* src-477 %jibb /tests/golden/types-list-branch/source/jibb
1647−/* tok-477 %txt /tests/golden/types-list-branch/tokens/txt
1648−/* tre-477 %txt /tests/golden/types-list-branch/tree/txt
1649−/* typ-477 %txt /tests/golden/types-list-branch/types/txt
1650−/* src-478 %jibb /tests/golden/types-list-cons/source/jibb
1651−/* tok-478 %txt /tests/golden/types-list-cons/tokens/txt
1652−/* tre-478 %txt /tests/golden/types-list-cons/tree/txt
1653−/* typ-478 %txt /tests/golden/types-list-cons/types/txt
1654−/* src-479 %jibb /tests/golden/types-list-context/source/jibb
1655−/* tok-479 %txt /tests/golden/types-list-context/tokens/txt
1656−/* tre-479 %txt /tests/golden/types-list-context/tree/txt
1657−/* typ-479 %txt /tests/golden/types-list-context/types/txt
1658−/* src-480 %jibb /tests/golden/types-list-imported/source/jibb
1659−/* tok-480 %txt /tests/golden/types-list-imported/tokens/txt
1660−/* tre-480 %txt /tests/golden/types-list-imported/tree/txt
1661−/* typ-480 %txt /tests/golden/types-list-imported/types/txt
1662−/* imp-480-1 %txt /tests/golden/types-list-imported/sur/fixture/txt
1663−/* imp-480-2 %txt /tests/golden/types-list-imported/sur/fixture/txt
1664−/* src-481 %jibb /tests/golden/types-list-open/source/jibb
1665−/* tok-481 %txt /tests/golden/types-list-open/tokens/txt
1666−/* tre-481 %txt /tests/golden/types-list-open/tree/txt
1667−/* typ-481 %txt /tests/golden/types-list-open/types/txt
1668−/* src-482 %jibb /tests/golden/types-list-open-constraints/source/jibb
1669−/* tok-482 %txt /tests/golden/types-list-open-constraints/tokens/txt
1670−/* tre-482 %txt /tests/golden/types-list-open-constraints/tree/txt
1671−/* typ-482 %txt /tests/golden/types-list-open-constraints/types/txt
1672−/* src-483 %jibb /tests/golden/types-list-pattern-imported/source/jibb
1673−/* tok-483 %txt /tests/golden/types-list-pattern-imported/tokens/txt
1674−/* tre-483 %txt /tests/golden/types-list-pattern-imported/tree/txt
1675−/* typ-483 %txt /tests/golden/types-list-pattern-imported/types/txt
1676−/* imp-483-1 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1677−/* imp-483-2 %txt /tests/golden/types-list-pattern-imported/sur/fixture/txt
1678−/* src-484 %jibb /tests/golden/types-list-patterns/source/jibb
1679−/* tok-484 %txt /tests/golden/types-list-patterns/tokens/txt
1680−/* tre-484 %txt /tests/golden/types-list-patterns/tree/txt
1681−/* typ-484 %txt /tests/golden/types-list-patterns/types/txt
1682−/* src-485 %jibb /tests/golden/types-list-zero-fit/source/jibb
1683−/* tok-485 %txt /tests/golden/types-list-zero-fit/tokens/txt
1684−/* tre-485 %txt /tests/golden/types-list-zero-fit/tree/txt
1685−/* typ-485 %txt /tests/golden/types-list-zero-fit/types/txt
1686−/* src-486 %jibb /tests/golden/types-literal-constructor-nouns/source/jibb
1687−/* tok-486 %txt /tests/golden/types-literal-constructor-nouns/tokens/txt
1688−/* tre-486 %txt /tests/golden/types-literal-constructor-nouns/tree/txt
1689−/* typ-486 %txt /tests/golden/types-literal-constructor-nouns/types/txt
1690−/* src-487 %jibb /tests/golden/types-local-capitals/source/jibb
1691−/* tok-487 %txt /tests/golden/types-local-capitals/tokens/txt
1692−/* tre-487 %txt /tests/golden/types-local-capitals/tree/txt
1693−/* typ-487 %txt /tests/golden/types-local-capitals/types/txt
1694−/* src-488 %jibb /tests/golden/types-local-recursive/source/jibb
1695−/* tok-488 %txt /tests/golden/types-local-recursive/tokens/txt
1696−/* tre-488 %txt /tests/golden/types-local-recursive/tree/txt
1697−/* typ-488 %txt /tests/golden/types-local-recursive/types/txt
1698−/* src-489 %jibb /tests/golden/types-local-scc/source/jibb
1699−/* tok-489 %txt /tests/golden/types-local-scc/tokens/txt
1700−/* tre-489 %txt /tests/golden/types-local-scc/tree/txt
1701−/* typ-489 %txt /tests/golden/types-local-scc/types/txt
1702−/* src-490 %jibb /tests/golden/types-local-scc-adversarial/source/jibb
1703−/* tok-490 %txt /tests/golden/types-local-scc-adversarial/tokens/txt
1704−/* tre-490 %txt /tests/golden/types-local-scc-adversarial/tree/txt
1705−/* typ-490 %txt /tests/golden/types-local-scc-adversarial/types/txt
1706−/* src-491 %jibb /tests/golden/types-loobean-singleton-source/source/jibb
1707−/* tok-491 %txt /tests/golden/types-loobean-singleton-source/tokens/txt
1708−/* tre-491 %txt /tests/golden/types-loobean-singleton-source/tree/txt
1709−/* typ-491 %txt /tests/golden/types-loobean-singleton-source/types/txt
1710−/* src-492 %jibb /tests/golden/types-loobean-union-context/source/jibb
1711−/* tok-492 %txt /tests/golden/types-loobean-union-context/tokens/txt
1712−/* tre-492 %txt /tests/golden/types-loobean-union-context/tree/txt
1713−/* typ-492 %txt /tests/golden/types-loobean-union-context/types/txt
1714−/* src-493 %jibb /tests/golden/types-missing-tag-context/source/jibb
1715−/* tok-493 %txt /tests/golden/types-missing-tag-context/tokens/txt
1716−/* tre-493 %txt /tests/golden/types-missing-tag-context/tree/txt
1717−/* typ-493 %txt /tests/golden/types-missing-tag-context/types/txt
1718−/* src-494 %jibb /tests/golden/types-missing-tag-imported/source/jibb
1719−/* tok-494 %txt /tests/golden/types-missing-tag-imported/tokens/txt
1720−/* tre-494 %txt /tests/golden/types-missing-tag-imported/tree/txt
1721−/* typ-494 %txt /tests/golden/types-missing-tag-imported/types/txt
1722−/* imp-494-1 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1723−/* imp-494-2 %txt /tests/golden/types-missing-tag-imported/sur/fixture/txt
1724−/* src-495 %jibb /tests/golden/types-missing-tag-named/source/jibb
1725−/* tok-495 %txt /tests/golden/types-missing-tag-named/tokens/txt
1726−/* tre-495 %txt /tests/golden/types-missing-tag-named/tree/txt
1727−/* typ-495 %txt /tests/golden/types-missing-tag-named/types/txt
1728−/* src-496 %jibb /tests/golden/types-module-field-duplicate/source/jibb
1729−/* tok-496 %txt /tests/golden/types-module-field-duplicate/tokens/txt
1730−/* tre-496 %txt /tests/golden/types-module-field-duplicate/tree/txt
1731−/* mod-496-1 %jibb /tests/golden/types-module-field-duplicate/modules/ui/lib/jibb
1732−/* typ-496 %txt /tests/golden/types-module-field-duplicate/types/txt
1733−/* mtre-496 %txt /tests/golden/types-module-field-duplicate/module-trees/txt
1734−/* src-497 %jibb /tests/golden/types-module-field-nonrecord/source/jibb
1735−/* tok-497 %txt /tests/golden/types-module-field-nonrecord/tokens/txt
1736−/* tre-497 %txt /tests/golden/types-module-field-nonrecord/tree/txt
1737−/* mod-497-1 %jibb /tests/golden/types-module-field-nonrecord/modules/ui/lib/jibb
1738−/* typ-497 %txt /tests/golden/types-module-field-nonrecord/types/txt
1739−/* mtre-497 %txt /tests/golden/types-module-field-nonrecord/module-trees/txt
1740−/* src-498 %jibb /tests/golden/types-module-field-path/source/jibb
1741−/* tok-498 %txt /tests/golden/types-module-field-path/tokens/txt
1742−/* tre-498 %txt /tests/golden/types-module-field-path/tree/txt
1743−/* mod-498-1 %jibb /tests/golden/types-module-field-path/modules/ui/lib/jibb
1744−/* typ-498 %txt /tests/golden/types-module-field-path/types/txt
1745−/* mtre-498 %txt /tests/golden/types-module-field-path/module-trees/txt
1746−/* src-499 %jibb /tests/golden/types-module-field-shadow/source/jibb
1747−/* tok-499 %txt /tests/golden/types-module-field-shadow/tokens/txt
1748−/* tre-499 %txt /tests/golden/types-module-field-shadow/tree/txt
1749−/* mod-499-1 %jibb /tests/golden/types-module-field-shadow/modules/ui/lib/jibb
1750−/* typ-499 %txt /tests/golden/types-module-field-shadow/types/txt
1751−/* mtre-499 %txt /tests/golden/types-module-field-shadow/module-trees/txt
1752−/* src-500 %jibb /tests/golden/types-module-fixtures/source/jibb
1753−/* tok-500 %txt /tests/golden/types-module-fixtures/tokens/txt
1754−/* tre-500 %txt /tests/golden/types-module-fixtures/tree/txt
1755−/* mod-500-1 %jibb /tests/golden/types-module-fixtures/modules/ui/api/blog/jibb
1756−/* mod-500-2 %jibb /tests/golden/types-module-fixtures/modules/ui/components/card/jibb
1757−/* typ-500 %txt /tests/golden/types-module-fixtures/types/txt
1758−/* mtre-500 %txt /tests/golden/types-module-fixtures/module-trees/txt
1759−/* src-501 %jibb /tests/golden/types-module-mixed/source/jibb
1760−/* tok-501 %txt /tests/golden/types-module-mixed/tokens/txt
1761−/* tre-501 %txt /tests/golden/types-module-mixed/tree/txt
1762−/* mod-501-1 %jibb /tests/golden/types-module-mixed/modules/ui/helper/jibb
1763−/* typ-501 %txt /tests/golden/types-module-mixed/types/txt
1764−/* imp-501-1 %txt /tests/golden/types-module-mixed/sur/fixture/txt
1765−/* mark-501-1 %txt /tests/golden/types-module-mixed/mar/label/txt
1766−/* mtre-501 %txt /tests/golden/types-module-mixed/module-trees/txt
1767−/* src-502 %jibb /tests/golden/types-multi-call/source/jibb
1768−/* tok-502 %txt /tests/golden/types-multi-call/tokens/txt
1769−/* tre-502 %txt /tests/golden/types-multi-call/tree/txt
1770−/* typ-502 %txt /tests/golden/types-multi-call/types/txt
1771−/* src-503 %jibb /tests/golden/types-multi-import/source/jibb
1772−/* tok-503 %txt /tests/golden/types-multi-import/tokens/txt
1773−/* tre-503 %txt /tests/golden/types-multi-import/tree/txt
1774−/* mod-503-1 %jibb /tests/golden/types-multi-import/modules/ui/lib/jibb
1775−/* typ-503 %txt /tests/golden/types-multi-import/types/txt
1776−/* mtre-503 %txt /tests/golden/types-multi-import/module-trees/txt
1777−/* src-504 %jibb /tests/golden/types-nested-missing-tag/source/jibb
1778−/* tok-504 %txt /tests/golden/types-nested-missing-tag/tokens/txt
1779−/* tre-504 %txt /tests/golden/types-nested-missing-tag/tree/txt
1780−/* typ-504 %txt /tests/golden/types-nested-missing-tag/types/txt
1781−/* src-505 %jibb /tests/golden/types-nested-noun-context/source/jibb
1782−/* tok-505 %txt /tests/golden/types-nested-noun-context/tokens/txt
1783−/* tre-505 %txt /tests/golden/types-nested-noun-context/tree/txt
1784−/* typ-505 %txt /tests/golden/types-nested-noun-context/types/txt
1785−/* src-506 %jibb /tests/golden/types-nested-shallow-preserve/source/jibb
1786−/* tok-506 %txt /tests/golden/types-nested-shallow-preserve/tokens/txt
1787−/* tre-506 %txt /tests/golden/types-nested-shallow-preserve/tree/txt
1788−/* typ-506 %txt /tests/golden/types-nested-shallow-preserve/types/txt
1789−/* src-507 %jibb /tests/golden/types-nested-union-context/source/jibb
1790−/* tok-507 %txt /tests/golden/types-nested-union-context/tokens/txt
1791−/* tre-507 %txt /tests/golden/types-nested-union-context/tree/txt
1792−/* typ-507 %txt /tests/golden/types-nested-union-context/types/txt
1793−/* src-508 %jibb /tests/golden/types-null-context/source/jibb
1794−/* tok-508 %txt /tests/golden/types-null-context/tokens/txt
1795−/* tre-508 %txt /tests/golden/types-null-context/tree/txt
1796−/* typ-508 %txt /tests/golden/types-null-context/types/txt
1797−/* src-509 %jibb /tests/golden/types-null-overlap/source/jibb
1798−/* tok-509 %txt /tests/golden/types-null-overlap/tokens/txt
1799−/* tre-509 %txt /tests/golden/types-null-overlap/tree/txt
1800−/* typ-509 %txt /tests/golden/types-null-overlap/types/txt
1801−/* src-510 %jibb /tests/golden/types-null-unresolved/source/jibb
1802−/* tok-510 %txt /tests/golden/types-null-unresolved/tokens/txt
1803−/* tre-510 %txt /tests/golden/types-null-unresolved/tree/txt
1804−/* typ-510 %txt /tests/golden/types-null-unresolved/types/txt
1805−/* src-511 %jibb /tests/golden/types-pair-context/source/jibb
1806−/* tok-511 %txt /tests/golden/types-pair-context/tokens/txt
1807−/* tre-511 %txt /tests/golden/types-pair-context/tree/txt
1808−/* typ-511 %txt /tests/golden/types-pair-context/types/txt
1809−/* src-512 %jibb /tests/golden/types-partial-apply/source/jibb
1810−/* tok-512 %txt /tests/golden/types-partial-apply/tokens/txt
1811−/* tre-512 %txt /tests/golden/types-partial-apply/tree/txt
1812−/* typ-512 %txt /tests/golden/types-partial-apply/types/txt
1813−/* src-513 %jibb /tests/golden/types-partial-atom-alias/source/jibb
1814−/* tok-513 %txt /tests/golden/types-partial-atom-alias/tokens/txt
1815−/* tre-513 %txt /tests/golden/types-partial-atom-alias/tree/txt
1816−/* typ-513 %txt /tests/golden/types-partial-atom-alias/types/txt
1817−/* src-514 %jibb /tests/golden/types-partial-atom-constraint/source/jibb
1818−/* tok-514 %txt /tests/golden/types-partial-atom-constraint/tokens/txt
1819−/* tre-514 %txt /tests/golden/types-partial-atom-constraint/tree/txt
1820−/* typ-514 %txt /tests/golden/types-partial-atom-constraint/types/txt
1821−/* src-515 %jibb /tests/golden/types-partial-atom-widening/source/jibb
1822−/* tok-515 %txt /tests/golden/types-partial-atom-widening/tokens/txt
1823−/* tre-515 %txt /tests/golden/types-partial-atom-widening/tree/txt
1824−/* typ-515 %txt /tests/golden/types-partial-atom-widening/types/txt
1825−/* src-516 %jibb /tests/golden/types-partial-aura/source/jibb
1826−/* tok-516 %txt /tests/golden/types-partial-aura/tokens/txt
1827−/* tre-516 %txt /tests/golden/types-partial-aura/tree/txt
1828−/* typ-516 %txt /tests/golden/types-partial-aura/types/txt
1829−/* src-517 %jibb /tests/golden/types-partial-aura-family/source/jibb
1830−/* tok-517 %txt /tests/golden/types-partial-aura-family/tokens/txt
1831−/* tre-517 %txt /tests/golden/types-partial-aura-family/tree/txt
1832−/* typ-517 %txt /tests/golden/types-partial-aura-family/types/txt
1833−/* src-518 %jibb /tests/golden/types-partial-aura-generalization/source/jibb
1834−/* tok-518 %txt /tests/golden/types-partial-aura-generalization/tokens/txt
1835−/* tre-518 %txt /tests/golden/types-partial-aura-generalization/tree/txt
1836−/* typ-518 %txt /tests/golden/types-partial-aura-generalization/types/txt
1837−/* src-519 %jibb /tests/golden/types-partial-bare-atom/source/jibb
1838−/* tok-519 %txt /tests/golden/types-partial-bare-atom/tokens/txt
1839−/* tre-519 %txt /tests/golden/types-partial-bare-atom/tree/txt
1840−/* typ-519 %txt /tests/golden/types-partial-bare-atom/types/txt
1841−/* src-520 %jibb /tests/golden/types-partial-branch-widening/source/jibb
1842−/* tok-520 %txt /tests/golden/types-partial-branch-widening/tokens/txt
1843−/* tre-520 %txt /tests/golden/types-partial-branch-widening/tree/txt
1844−/* typ-520 %txt /tests/golden/types-partial-branch-widening/types/txt
1845−/* src-521 %jibb /tests/golden/types-partial-conflicting-sites/source/jibb
1846−/* tok-521 %txt /tests/golden/types-partial-conflicting-sites/tokens/txt
1847−/* tre-521 %txt /tests/golden/types-partial-conflicting-sites/tree/txt
1848−/* typ-521 %txt /tests/golden/types-partial-conflicting-sites/types/txt
1849−/* src-522 %jibb /tests/golden/types-partial-decimal-default/source/jibb
1850−/* tok-522 %txt /tests/golden/types-partial-decimal-default/tokens/txt
1851−/* tre-522 %txt /tests/golden/types-partial-decimal-default/tree/txt
1852−/* typ-522 %txt /tests/golden/types-partial-decimal-default/types/txt
1853−/* src-523 %jibb /tests/golden/types-partial-dependency-chain/source/jibb
1854−/* tok-523 %txt /tests/golden/types-partial-dependency-chain/tokens/txt
1855−/* tre-523 %txt /tests/golden/types-partial-dependency-chain/tree/txt
1856−/* typ-523 %txt /tests/golden/types-partial-dependency-chain/types/txt
1857−/* src-524 %jibb /tests/golden/types-partial-explicit-capital/source/jibb
1858−/* tok-524 %txt /tests/golden/types-partial-explicit-capital/tokens/txt
1859−/* tre-524 %txt /tests/golden/types-partial-explicit-capital/tree/txt
1860−/* typ-524 %txt /tests/golden/types-partial-explicit-capital/types/txt
1861−/* src-525 %jibb /tests/golden/types-partial-forward/source/jibb
1862−/* tok-525 %txt /tests/golden/types-partial-forward/tokens/txt
1863−/* tre-525 %txt /tests/golden/types-partial-forward/tree/txt
1864−/* typ-525 %txt /tests/golden/types-partial-forward/types/txt
1865−/* src-526 %jibb /tests/golden/types-partial-generalization/source/jibb
1866−/* tok-526 %txt /tests/golden/types-partial-generalization/tokens/txt
1867−/* tre-526 %txt /tests/golden/types-partial-generalization/tree/txt
1868−/* typ-526 %txt /tests/golden/types-partial-generalization/types/txt
1869−/* src-527 %jibb /tests/golden/types-partial-identity/source/jibb
1870−/* tok-527 %txt /tests/golden/types-partial-identity/tokens/txt
1871−/* tre-527 %txt /tests/golden/types-partial-identity/tree/txt
1872−/* typ-527 %txt /tests/golden/types-partial-identity/types/txt
1873−/* src-528 %jibb /tests/golden/types-partial-independent-atoms/source/jibb
1874−/* tok-528 %txt /tests/golden/types-partial-independent-atoms/tokens/txt
1875−/* tre-528 %txt /tests/golden/types-partial-independent-atoms/tree/txt
1876−/* typ-528 %txt /tests/golden/types-partial-independent-atoms/types/txt
1877−/* src-529 %jibb /tests/golden/types-partial-local-molds/source/jibb
1878−/* tok-529 %txt /tests/golden/types-partial-local-molds/tokens/txt
1879−/* tre-529 %txt /tests/golden/types-partial-local-molds/tree/txt
1880−/* typ-529 %txt /tests/golden/types-partial-local-molds/types/txt
1881−/* src-530 %jibb /tests/golden/types-partial-locals/source/jibb
1882−/* tok-530 %txt /tests/golden/types-partial-locals/tokens/txt
1883−/* tre-530 %txt /tests/golden/types-partial-locals/tree/txt
1884−/* typ-530 %txt /tests/golden/types-partial-locals/types/txt
1885−/* src-531 %jibb /tests/golden/types-partial-many-atom-constraints/source/jibb
1886−/* tok-531 %txt /tests/golden/types-partial-many-atom-constraints/tokens/txt
1887−/* tre-531 %txt /tests/golden/types-partial-many-atom-constraints/tree/txt
1888−/* typ-531 %txt /tests/golden/types-partial-many-atom-constraints/types/txt
1889−/* src-532 %jibb /tests/golden/types-partial-mold-bare-aura/source/jibb
1890−/* tok-532 %txt /tests/golden/types-partial-mold-bare-aura/tokens/txt
1891−/* tre-532 %txt /tests/golden/types-partial-mold-bare-aura/tree/txt
1892−/* typ-532 %txt /tests/golden/types-partial-mold-bare-aura/types/txt
1893−/* src-533 %jibb /tests/golden/types-partial-mold-composite/source/jibb
1894−/* tok-533 %txt /tests/golden/types-partial-mold-composite/tokens/txt
1895−/* tre-533 %txt /tests/golden/types-partial-mold-composite/tree/txt
1896−/* typ-533 %txt /tests/golden/types-partial-mold-composite/types/txt
1897−/* src-534 %jibb /tests/golden/types-partial-mold-forward/source/jibb
1898−/* tok-534 %txt /tests/golden/types-partial-mold-forward/tokens/txt
1899−/* tre-534 %txt /tests/golden/types-partial-mold-forward/tree/txt
1900−/* typ-534 %txt /tests/golden/types-partial-mold-forward/types/txt
1901−/* src-535 %jibb /tests/golden/types-partial-mold-recursive/source/jibb
1902−/* tok-535 %txt /tests/golden/types-partial-mold-recursive/tokens/txt
1903−/* tre-535 %txt /tests/golden/types-partial-mold-recursive/tree/txt
1904−/* typ-535 %txt /tests/golden/types-partial-mold-recursive/types/txt
1905−/* src-536 %jibb /tests/golden/types-partial-occurs/source/jibb
1906−/* tok-536 %txt /tests/golden/types-partial-occurs/tokens/txt
1907−/* tre-536 %txt /tests/golden/types-partial-occurs/tree/txt
1908−/* typ-536 %txt /tests/golden/types-partial-occurs/types/txt
1909−/* src-537 %jibb /tests/golden/types-partial-projection/source/jibb
1910−/* tok-537 %txt /tests/golden/types-partial-projection/tokens/txt
1911−/* tre-537 %txt /tests/golden/types-partial-projection/tree/txt
1912−/* typ-537 %txt /tests/golden/types-partial-projection/types/txt
1913−/* src-538 %jibb /tests/golden/types-partial-shadow-global/source/jibb
1914−/* tok-538 %txt /tests/golden/types-partial-shadow-global/tokens/txt
1915−/* tre-538 %txt /tests/golden/types-partial-shadow-global/tree/txt
1916−/* typ-538 %txt /tests/golden/types-partial-shadow-global/types/txt
1917−/* src-539 %jibb /tests/golden/types-partial-shared-tvar/source/jibb
1918−/* tok-539 %txt /tests/golden/types-partial-shared-tvar/tokens/txt
1919−/* tre-539 %txt /tests/golden/types-partial-shared-tvar/tree/txt
1920−/* typ-539 %txt /tests/golden/types-partial-shared-tvar/types/txt
1921−/* src-540 %jibb /tests/golden/types-partial-union-cases/source/jibb
1922−/* tok-540 %txt /tests/golden/types-partial-union-cases/tokens/txt
1923−/* tre-540 %txt /tests/golden/types-partial-union-cases/tree/txt
1924−/* typ-540 %txt /tests/golden/types-partial-union-cases/types/txt
1925−/* src-541 %jibb /tests/golden/types-partial-union-edges/source/jibb
1926−/* tok-541 %txt /tests/golden/types-partial-union-edges/tokens/txt
1927−/* tre-541 %txt /tests/golden/types-partial-union-edges/tree/txt
1928−/* typ-541 %txt /tests/golden/types-partial-union-edges/types/txt
1929−/* src-542 %jibb /tests/golden/types-partial-union-nested-nouns/source/jibb
1930−/* tok-542 %txt /tests/golden/types-partial-union-nested-nouns/tokens/txt
1931−/* tre-542 %txt /tests/golden/types-partial-union-nested-nouns/tree/txt
1932−/* typ-542 %txt /tests/golden/types-partial-union-nested-nouns/types/txt
1933−/* src-543 %jibb /tests/golden/types-partial-unresolved-tag/source/jibb
1934−/* tok-543 %txt /tests/golden/types-partial-unresolved-tag/tokens/txt
1935−/* tre-543 %txt /tests/golden/types-partial-unresolved-tag/tree/txt
1936−/* typ-543 %txt /tests/golden/types-partial-unresolved-tag/types/txt
1937−/* src-544 %jibb /tests/golden/types-positional-faces/source/jibb
1938−/* tok-544 %txt /tests/golden/types-positional-faces/tokens/txt
1939−/* tre-544 %txt /tests/golden/types-positional-faces/tree/txt
1940−/* typ-544 %txt /tests/golden/types-positional-faces/types/txt
1941−/* src-545 %jibb /tests/golden/types-prelude-arithmetic/source/jibb
1942−/* tok-545 %txt /tests/golden/types-prelude-arithmetic/tokens/txt
1943−/* tre-545 %txt /tests/golden/types-prelude-arithmetic/tree/txt
1944−/* typ-545 %txt /tests/golden/types-prelude-arithmetic/types/txt
1945−/* src-546 %jibb /tests/golden/types-prelude-ask/source/jibb
1946−/* tok-546 %txt /tests/golden/types-prelude-ask/tokens/txt
1947−/* tre-546 %txt /tests/golden/types-prelude-ask/tree/txt
1948−/* typ-546 %txt /tests/golden/types-prelude-ask/types/txt
1949−/* src-547 %jibb /tests/golden/types-prelude-bond/source/jibb
1950−/* tok-547 %txt /tests/golden/types-prelude-bond/tokens/txt
1951−/* tre-547 %txt /tests/golden/types-prelude-bond/tree/txt
1952−/* typ-547 %txt /tests/golden/types-prelude-bond/types/txt
1953−/* src-548 %jibb /tests/golden/types-prelude-cmd/source/jibb
1954−/* tok-548 %txt /tests/golden/types-prelude-cmd/tokens/txt
1955−/* tre-548 %txt /tests/golden/types-prelude-cmd/tree/txt
1956−/* typ-548 %txt /tests/golden/types-prelude-cmd/types/txt
1957−/* src-549 %jibb /tests/golden/types-prelude-comparison/source/jibb
1958−/* tok-549 %txt /tests/golden/types-prelude-comparison/tokens/txt
1959−/* tre-549 %txt /tests/golden/types-prelude-comparison/tree/txt
1960−/* typ-549 %txt /tests/golden/types-prelude-comparison/types/txt
1961−/* src-550 %jibb /tests/golden/types-prelude-direct/source/jibb
1962−/* tok-550 %txt /tests/golden/types-prelude-direct/tokens/txt
1963−/* tre-550 %txt /tests/golden/types-prelude-direct/tree/txt
1964−/* typ-550 %txt /tests/golden/types-prelude-direct/types/txt
1965−/* src-551 %jibb /tests/golden/types-prelude-functional/source/jibb
1966−/* tok-551 %txt /tests/golden/types-prelude-functional/tokens/txt
1967−/* tre-551 %txt /tests/golden/types-prelude-functional/tree/txt
1968−/* typ-551 %txt /tests/golden/types-prelude-functional/types/txt
1969−/* src-552 %jibb /tests/golden/types-prelude-generic-alias/source/jibb
1970−/* tok-552 %txt /tests/golden/types-prelude-generic-alias/tokens/txt
1971−/* tre-552 %txt /tests/golden/types-prelude-generic-alias/tree/txt
1972−/* mod-552-1 %jibb /tests/golden/types-prelude-generic-alias/modules/ui/alias-helper/jibb
1973−/* typ-552 %txt /tests/golden/types-prelude-generic-alias/types/txt
1974−/* mtre-552 %txt /tests/golden/types-prelude-generic-alias/module-trees/txt
1975−/* src-553 %jibb /tests/golden/types-prelude-interface/source/jibb
1976−/* tok-553 %txt /tests/golden/types-prelude-interface/tokens/txt
1977−/* tre-553 %txt /tests/golden/types-prelude-interface/tree/txt
1978−/* mod-553-1 %jibb /tests/golden/types-prelude-interface/modules/ui/left/jibb
1979−/* mod-553-2 %jibb /tests/golden/types-prelude-interface/modules/ui/right/jibb
1980−/* typ-553 %txt /tests/golden/types-prelude-interface/types/txt
1981−/* mtre-553 %txt /tests/golden/types-prelude-interface/module-trees/txt
1982−/* src-554 %jibb /tests/golden/types-prelude-lead-late/source/jibb
1983−/* tok-554 %txt /tests/golden/types-prelude-lead-late/tokens/txt
1984−/* tre-554 %txt /tests/golden/types-prelude-lead-late/tree/txt
1985−/* typ-554 %txt /tests/golden/types-prelude-lead-late/types/txt
1986−/* src-555 %jibb /tests/golden/types-prelude-lent/source/jibb
1987−/* tok-555 %txt /tests/golden/types-prelude-lent/tokens/txt
1988−/* tre-555 %txt /tests/golden/types-prelude-lent/tree/txt
1989−/* typ-555 %txt /tests/golden/types-prelude-lent/types/txt
1990−/* src-556 %jibb /tests/golden/types-prelude-like/source/jibb
1991−/* tok-556 %txt /tests/golden/types-prelude-like/tokens/txt
1992−/* tre-556 %txt /tests/golden/types-prelude-like/tree/txt
1993−/* typ-556 %txt /tests/golden/types-prelude-like/types/txt
1994−/* src-557 %jibb /tests/golden/types-prelude-list-alias/source/jibb
1995−/* tok-557 %txt /tests/golden/types-prelude-list-alias/tokens/txt
1996−/* tre-557 %txt /tests/golden/types-prelude-list-alias/tree/txt
1997−/* typ-557 %txt /tests/golden/types-prelude-list-alias/types/txt
1998−/* src-558 %jibb /tests/golden/types-prelude-list-functions/source/jibb
1999−/* tok-558 %txt /tests/golden/types-prelude-list-functions/tokens/txt
2000−/* tre-558 %txt /tests/golden/types-prelude-list-functions/tree/txt
2001−/* mod-558-1 %jibb /tests/golden/types-prelude-list-functions/modules/ui/lib/jibb
2002−/* typ-558 %txt /tests/golden/types-prelude-list-functions/types/txt
2003−/* mtre-558 %txt /tests/golden/types-prelude-list-functions/module-trees/txt
2004−/* src-559 %jibb /tests/golden/types-prelude-list-helpers/source/jibb
2005−/* tok-559 %txt /tests/golden/types-prelude-list-helpers/tokens/txt
2006−/* tre-559 %txt /tests/golden/types-prelude-list-helpers/tree/txt
2007−/* typ-559 %txt /tests/golden/types-prelude-list-helpers/types/txt
2008−/* src-560 %jibb /tests/golden/types-prelude-predicates/source/jibb
2009−/* tok-560 %txt /tests/golden/types-prelude-predicates/tokens/txt
2010−/* tre-560 %txt /tests/golden/types-prelude-predicates/tree/txt
2011−/* typ-560 %txt /tests/golden/types-prelude-predicates/types/txt
2012−/* src-561 %jibb /tests/golden/types-prelude-sub/source/jibb
2013−/* tok-561 %txt /tests/golden/types-prelude-sub/tokens/txt
2014−/* tre-561 %txt /tests/golden/types-prelude-sub/tree/txt
2015−/* typ-561 %txt /tests/golden/types-prelude-sub/types/txt
2016−/* src-562 %jibb /tests/golden/types-prelude-sub-nested/source/jibb
2017−/* tok-562 %txt /tests/golden/types-prelude-sub-nested/tokens/txt
2018−/* tre-562 %txt /tests/golden/types-prelude-sub-nested/tree/txt
2019−/* typ-562 %txt /tests/golden/types-prelude-sub-nested/types/txt
2020−/* src-563 %jibb /tests/golden/types-prelude-succ/source/jibb
2021−/* tok-563 %txt /tests/golden/types-prelude-succ/tokens/txt
2022−/* tre-563 %txt /tests/golden/types-prelude-succ/tree/txt
2023−/* typ-563 %txt /tests/golden/types-prelude-succ/types/txt
2024−/* src-564 %jibb /tests/golden/types-prelude-text/source/jibb
2025−/* tok-564 %txt /tests/golden/types-prelude-text/tokens/txt
2026−/* tre-564 %txt /tests/golden/types-prelude-text/tree/txt
2027−/* typ-564 %txt /tests/golden/types-prelude-text/types/txt
2028−/* src-565 %jibb /tests/golden/types-prelude-ui/source/jibb
2029−/* tok-565 %txt /tests/golden/types-prelude-ui/tokens/txt
2030−/* tre-565 %txt /tests/golden/types-prelude-ui/tree/txt
2031−/* typ-565 %txt /tests/golden/types-prelude-ui/types/txt
2032−/* src-566 %jibb /tests/golden/types-prelude-unit-helpers/source/jibb
2033−/* tok-566 %txt /tests/golden/types-prelude-unit-helpers/tokens/txt
2034−/* tre-566 %txt /tests/golden/types-prelude-unit-helpers/tree/txt
2035−/* typ-566 %txt /tests/golden/types-prelude-unit-helpers/types/txt
2036−/* src-567 %jibb /tests/golden/types-prelude-zing/source/jibb
2037−/* tok-567 %txt /tests/golden/types-prelude-zing/tokens/txt
2038−/* tre-567 %txt /tests/golden/types-prelude-zing/tree/txt
2039−/* typ-567 %txt /tests/golden/types-prelude-zing/types/txt
2040−/* src-568 %jibb /tests/golden/types-proj-explicit-context/source/jibb
2041−/* tok-568 %txt /tests/golden/types-proj-explicit-context/tokens/txt
2042−/* tre-568 %txt /tests/golden/types-proj-explicit-context/tree/txt
2043−/* typ-568 %txt /tests/golden/types-proj-explicit-context/types/txt
2044−/* src-569 %jibb /tests/golden/types-proj-nested-no-implicit/source/jibb
2045−/* tok-569 %txt /tests/golden/types-proj-nested-no-implicit/tokens/txt
2046−/* tre-569 %txt /tests/golden/types-proj-nested-no-implicit/tree/txt
2047−/* typ-569 %txt /tests/golden/types-proj-nested-no-implicit/types/txt
2048−/* src-570 %jibb /tests/golden/types-proj-reserved-imported-definition/source/jibb
2049−/* tok-570 %txt /tests/golden/types-proj-reserved-imported-definition/tokens/txt
2050−/* tre-570 %txt /tests/golden/types-proj-reserved-imported-definition/tree/txt
2051−/* mod-570-1 %jibb /tests/golden/types-proj-reserved-imported-definition/modules/ui/lib/jibb
2052−/* typ-570 %txt /tests/golden/types-proj-reserved-imported-definition/types/txt
2053−/* mtre-570 %txt /tests/golden/types-proj-reserved-imported-definition/module-trees/txt
2054−/* src-571 %jibb /tests/golden/types-proj-reserved-jibb-import/source/jibb
2055−/* tok-571 %txt /tests/golden/types-proj-reserved-jibb-import/tokens/txt
2056−/* tre-571 %txt /tests/golden/types-proj-reserved-jibb-import/tree/txt
2057−/* mod-571-1 %jibb /tests/golden/types-proj-reserved-jibb-import/modules/ui/lib/jibb
2058−/* typ-571 %txt /tests/golden/types-proj-reserved-jibb-import/types/txt
2059−/* mtre-571 %txt /tests/golden/types-proj-reserved-jibb-import/module-trees/txt
2060−/* src-572 %jibb /tests/golden/types-proj-reserved-local/source/jibb
2061−/* tok-572 %txt /tests/golden/types-proj-reserved-local/tokens/txt
2062−/* tre-572 %txt /tests/golden/types-proj-reserved-local/tree/txt
2063−/* typ-572 %txt /tests/golden/types-proj-reserved-local/types/txt
2064−/* src-573 %jibb /tests/golden/types-proj-reserved-local-mold/source/jibb
2065−/* tok-573 %txt /tests/golden/types-proj-reserved-local-mold/tokens/txt
2066−/* tre-573 %txt /tests/golden/types-proj-reserved-local-mold/tree/txt
2067−/* typ-573 %txt /tests/golden/types-proj-reserved-local-mold/types/txt
2068−/* src-574 %jibb /tests/golden/types-proj-reserved-mark-import/source/jibb
2069−/* tok-574 %txt /tests/golden/types-proj-reserved-mark-import/tokens/txt
2070−/* tre-574 %txt /tests/golden/types-proj-reserved-mark-import/tree/txt
2071−/* typ-574 %txt /tests/golden/types-proj-reserved-mark-import/types/txt
2072−/* src-575 %jibb /tests/golden/types-proj-reserved-mold/source/jibb
2073−/* tok-575 %txt /tests/golden/types-proj-reserved-mold/tokens/txt
2074−/* tre-575 %txt /tests/golden/types-proj-reserved-mold/tree/txt
2075−/* typ-575 %txt /tests/golden/types-proj-reserved-mold/types/txt
2076−/* src-576 %jibb /tests/golden/types-proj-reserved-pattern/source/jibb
2077−/* tok-576 %txt /tests/golden/types-proj-reserved-pattern/tokens/txt
2078−/* tre-576 %txt /tests/golden/types-proj-reserved-pattern/tree/txt
2079−/* typ-576 %txt /tests/golden/types-proj-reserved-pattern/types/txt
2080−/* src-577 %jibb /tests/golden/types-proj-reserved-positive/source/jibb
2081−/* tok-577 %txt /tests/golden/types-proj-reserved-positive/tokens/txt
2082−/* tre-577 %txt /tests/golden/types-proj-reserved-positive/tree/txt
2083−/* typ-577 %txt /tests/golden/types-proj-reserved-positive/types/txt
2084−/* src-578 %jibb /tests/golden/types-proj-reserved-sample/source/jibb
2085−/* tok-578 %txt /tests/golden/types-proj-reserved-sample/tokens/txt
2086−/* tre-578 %txt /tests/golden/types-proj-reserved-sample/tree/txt
2087−/* typ-578 %txt /tests/golden/types-proj-reserved-sample/types/txt
2088−/* src-579 %jibb /tests/golden/types-proj-reserved-sur-import/source/jibb
2089−/* tok-579 %txt /tests/golden/types-proj-reserved-sur-import/tokens/txt
2090−/* tre-579 %txt /tests/golden/types-proj-reserved-sur-import/tree/txt
2091−/* typ-579 %txt /tests/golden/types-proj-reserved-sur-import/types/txt
2092−/* src-580 %jibb /tests/golden/types-proj-reserved-unused-pattern/source/jibb
2093−/* tok-580 %txt /tests/golden/types-proj-reserved-unused-pattern/tokens/txt
2094−/* tre-580 %txt /tests/golden/types-proj-reserved-unused-pattern/tree/txt
2095−/* typ-580 %txt /tests/golden/types-proj-reserved-unused-pattern/types/txt
2096−/* src-581 %jibb /tests/golden/types-proj-reserved-unused-sample/source/jibb
2097−/* tok-581 %txt /tests/golden/types-proj-reserved-unused-sample/tokens/txt
2098−/* tre-581 %txt /tests/golden/types-proj-reserved-unused-sample/tree/txt
2099−/* typ-581 %txt /tests/golden/types-proj-reserved-unused-sample/types/txt
2100−/* src-582 %jibb /tests/golden/types-proj-reserved-unused-value/source/jibb
2101−/* tok-582 %txt /tests/golden/types-proj-reserved-unused-value/tokens/txt
2102−/* tre-582 %txt /tests/golden/types-proj-reserved-unused-value/tree/txt
2103−/* typ-582 %txt /tests/golden/types-proj-reserved-unused-value/types/txt
2104−/* src-583 %jibb /tests/golden/types-proj-reserved-value/source/jibb
2105−/* tok-583 %txt /tests/golden/types-proj-reserved-value/tokens/txt
2106−/* tre-583 %txt /tests/golden/types-proj-reserved-value/tree/txt
2107−/* typ-583 %txt /tests/golden/types-proj-reserved-value/types/txt
2108−/* src-584 %jibb /tests/golden/types-proj-single-duplicate/source/jibb
2109−/* tok-584 %txt /tests/golden/types-proj-single-duplicate/tokens/txt
2110−/* tre-584 %txt /tests/golden/types-proj-single-duplicate/tree/txt
2111−/* typ-584 %txt /tests/golden/types-proj-single-duplicate/types/txt
2112−/* src-585 %jibb /tests/golden/types-proj-single-field/source/jibb
2113−/* tok-585 %txt /tests/golden/types-proj-single-field/tokens/txt
2114−/* tre-585 %txt /tests/golden/types-proj-single-field/tree/txt
2115−/* typ-585 %txt /tests/golden/types-proj-single-field/types/txt
2116−/* src-586 %jibb /tests/golden/types-proj-single-sample-face/source/jibb
2117−/* tok-586 %txt /tests/golden/types-proj-single-sample-face/tokens/txt
2118−/* tre-586 %txt /tests/golden/types-proj-single-sample-face/tree/txt
2119−/* typ-586 %txt /tests/golden/types-proj-single-sample-face/types/txt
2120−/* src-587 %jibb /tests/golden/types-proj-single-wrapped/source/jibb
2121−/* tok-587 %txt /tests/golden/types-proj-single-wrapped/tokens/txt
2122−/* tre-587 %txt /tests/golden/types-proj-single-wrapped/tree/txt
2123−/* typ-587 %txt /tests/golden/types-proj-single-wrapped/types/txt
2124−/* src-588 %jibb /tests/golden/types-qath-faces/source/jibb
2125−/* tok-588 %txt /tests/golden/types-qath-faces/tokens/txt
2126−/* tre-588 %txt /tests/golden/types-qath-faces/tree/txt
2127−/* typ-588 %txt /tests/golden/types-qath-faces/types/txt
2128−/* src-589 %jibb /tests/golden/types-qath-holes/source/jibb
2129−/* tok-589 %txt /tests/golden/types-qath-holes/tokens/txt
2130−/* tre-589 %txt /tests/golden/types-qath-holes/tree/txt
2131−/* typ-589 %txt /tests/golden/types-qath-holes/types/txt
2132−/* src-590 %jibb /tests/golden/types-qath-module-identity/source/jibb
2133−/* tok-590 %txt /tests/golden/types-qath-module-identity/tokens/txt
2134−/* tre-590 %txt /tests/golden/types-qath-module-identity/tree/txt
2135−/* mod-590-1 %jibb /tests/golden/types-qath-module-identity/modules/ui/one/jibb
2136−/* mod-590-2 %jibb /tests/golden/types-qath-module-identity/modules/ui/two/jibb
2137−/* mod-590-3 %jibb /tests/golden/types-qath-module-identity/modules/ui/mid/jibb
2138−/* typ-590 %txt /tests/golden/types-qath-module-identity/types/txt
2139−/* mtre-590 %txt /tests/golden/types-qath-module-identity/module-trees/txt
2140−/* src-591 %jibb /tests/golden/types-qath-recursive/source/jibb
2141−/* tok-591 %txt /tests/golden/types-qath-recursive/tokens/txt
2142−/* tre-591 %txt /tests/golden/types-qath-recursive/tree/txt
2143−/* typ-591 %txt /tests/golden/types-qath-recursive/types/txt
2144−/* src-592 %jibb /tests/golden/types-record-bound-variable/source/jibb
2145−/* tok-592 %txt /tests/golden/types-record-bound-variable/tokens/txt
2146−/* tre-592 %txt /tests/golden/types-record-bound-variable/tree/txt
2147−/* typ-592 %txt /tests/golden/types-record-bound-variable/types/txt
2148−/* src-593 %jibb /tests/golden/types-record-cast-context/source/jibb
2149−/* tok-593 %txt /tests/golden/types-record-cast-context/tokens/txt
2150−/* tre-593 %txt /tests/golden/types-record-cast-context/tree/txt
2151−/* typ-593 %txt /tests/golden/types-record-cast-context/types/txt
2152−/* src-594 %jibb /tests/golden/types-record-change/source/jibb
2153−/* tok-594 %txt /tests/golden/types-record-change/tokens/txt
2154−/* tre-594 %txt /tests/golden/types-record-change/tree/txt
2155−/* typ-594 %txt /tests/golden/types-record-change/types/txt
2156−/* src-595 %jibb /tests/golden/types-record-change-generic/source/jibb
2157−/* tok-595 %txt /tests/golden/types-record-change-generic/tokens/txt
2158−/* tre-595 %txt /tests/golden/types-record-change-generic/tree/txt
2159−/* typ-595 %txt /tests/golden/types-record-change-generic/types/txt
2160−/* src-596 %jibb /tests/golden/types-record-faces/source/jibb
2161−/* tok-596 %txt /tests/golden/types-record-faces/tokens/txt
2162−/* tre-596 %txt /tests/golden/types-record-faces/tree/txt
2163−/* typ-596 %txt /tests/golden/types-record-faces/types/txt
2164−/* src-597 %jibb /tests/golden/types-record-field-edit-separate/source/jibb
2165−/* tok-597 %txt /tests/golden/types-record-field-edit-separate/tokens/txt
2166−/* tre-597 %txt /tests/golden/types-record-field-edit-separate/tree/txt
2167−/* typ-597 %txt /tests/golden/types-record-field-edit-separate/types/txt
2168−/* src-598 %jibb /tests/golden/types-record-field-expr-duplicate/source/jibb
2169−/* tok-598 %txt /tests/golden/types-record-field-expr-duplicate/tokens/txt
2170−/* tre-598 %txt /tests/golden/types-record-field-expr-duplicate/tree/txt
2171−/* typ-598 %txt /tests/golden/types-record-field-expr-duplicate/types/txt
2172−/* src-599 %jibb /tests/golden/types-record-field-expr-separate/source/jibb
2173−/* tok-599 %txt /tests/golden/types-record-field-expr-separate/tokens/txt
2174−/* tre-599 %txt /tests/golden/types-record-field-expr-separate/tree/txt
2175−/* typ-599 %txt /tests/golden/types-record-field-expr-separate/types/txt
2176−/* src-600 %jibb /tests/golden/types-record-field-module-reachable/source/jibb
2177−/* tok-600 %txt /tests/golden/types-record-field-module-reachable/tokens/txt
2178−/* tre-600 %txt /tests/golden/types-record-field-module-reachable/tree/txt
2179−/* mod-600-1 %jibb /tests/golden/types-record-field-module-reachable/modules/ui/lib/jibb
2180−/* typ-600 %txt /tests/golden/types-record-field-module-reachable/types/txt
2181−/* mtre-600 %txt /tests/golden/types-record-field-module-reachable/module-trees/txt
2182−/* src-601 %jibb /tests/golden/types-record-field-module-unused/source/jibb
2183−/* tok-601 %txt /tests/golden/types-record-field-module-unused/tokens/txt
2184−/* tre-601 %txt /tests/golden/types-record-field-module-unused/tree/txt
2185−/* mod-601-1 %jibb /tests/golden/types-record-field-module-unused/modules/ui/good/jibb
2186−/* mod-601-2 %jibb /tests/golden/types-record-field-module-unused/modules/ui/unused/jibb
2187−/* typ-601 %txt /tests/golden/types-record-field-module-unused/types/txt
2188−/* mtre-601 %txt /tests/golden/types-record-field-module-unused/module-trees/txt
2189−/* src-602 %jibb /tests/golden/types-record-field-nested-mold/source/jibb
2190−/* tok-602 %txt /tests/golden/types-record-field-nested-mold/tokens/txt
2191−/* tre-602 %txt /tests/golden/types-record-field-nested-mold/tree/txt
2192−/* typ-602 %txt /tests/golden/types-record-field-nested-mold/types/txt
2193−/* src-603 %jibb /tests/golden/types-record-field-outer-inner/source/jibb
2194−/* tok-603 %txt /tests/golden/types-record-field-outer-inner/tokens/txt
2195−/* tre-603 %txt /tests/golden/types-record-field-outer-inner/tree/txt
2196−/* typ-603 %txt /tests/golden/types-record-field-outer-inner/types/txt
2197−/* src-604 %jibb /tests/golden/types-record-field-sample-duplicate/source/jibb
2198−/* tok-604 %txt /tests/golden/types-record-field-sample-duplicate/tokens/txt
2199−/* tre-604 %txt /tests/golden/types-record-field-sample-duplicate/tree/txt
2200−/* typ-604 %txt /tests/golden/types-record-field-sample-duplicate/types/txt
2201−/* src-605 %jibb /tests/golden/types-record-field-separate-molds/source/jibb
2202−/* tok-605 %txt /tests/golden/types-record-field-separate-molds/tokens/txt
2203−/* tre-605 %txt /tests/golden/types-record-field-separate-molds/tree/txt
2204−/* typ-605 %txt /tests/golden/types-record-field-separate-molds/types/txt
2205−/* src-606 %jibb /tests/golden/types-record-field-unused-mold/source/jibb
2206−/* tok-606 %txt /tests/golden/types-record-field-unused-mold/tokens/txt
2207−/* tre-606 %txt /tests/golden/types-record-field-unused-mold/tree/txt
2208−/* typ-606 %txt /tests/golden/types-record-field-unused-mold/types/txt
2209−/* src-607 %jibb /tests/golden/types-record-import/source/jibb
2210−/* tok-607 %txt /tests/golden/types-record-import/tokens/txt
2211−/* tre-607 %txt /tests/golden/types-record-import/tree/txt
2212−/* mod-607-1 %jibb /tests/golden/types-record-import/modules/ui/lib/jibb
2213−/* typ-607 %txt /tests/golden/types-record-import/types/txt
2214−/* mtre-607 %txt /tests/golden/types-record-import/module-trees/txt
2215−/* src-608 %jibb /tests/golden/types-record-local-scheme/source/jibb
2216−/* tok-608 %txt /tests/golden/types-record-local-scheme/tokens/txt
2217−/* tre-608 %txt /tests/golden/types-record-local-scheme/tree/txt
2218−/* typ-608 %txt /tests/golden/types-record-local-scheme/types/txt
2219−/* src-609 %jibb /tests/golden/types-record-nested/source/jibb
2220−/* tok-609 %txt /tests/golden/types-record-nested/tokens/txt
2221−/* tre-609 %txt /tests/golden/types-record-nested/tree/txt
2222−/* typ-609 %txt /tests/golden/types-record-nested/types/txt
2223−/* src-610 %jibb /tests/golden/types-record-to-tuple/source/jibb
2224−/* tok-610 %txt /tests/golden/types-record-to-tuple/tokens/txt
2225−/* tre-610 %txt /tests/golden/types-record-to-tuple/tree/txt
2226−/* typ-610 %txt /tests/golden/types-record-to-tuple/types/txt
2227−/* src-611 %jibb /tests/golden/types-recursion-scc-failures/source/jibb
2228−/* tok-611 %txt /tests/golden/types-recursion-scc-failures/tokens/txt
2229−/* tre-611 %txt /tests/golden/types-recursion-scc-failures/tree/txt
2230−/* typ-611 %txt /tests/golden/types-recursion-scc-failures/types/txt
2231−/* src-612 %jibb /tests/golden/types-recursion-scc-groups/source/jibb
2232−/* tok-612 %txt /tests/golden/types-recursion-scc-groups/tokens/txt
2233−/* tre-612 %txt /tests/golden/types-recursion-scc-groups/tree/txt
2234−/* typ-612 %txt /tests/golden/types-recursion-scc-groups/types/txt
2235−/* src-613 %jibb /tests/golden/types-recursion-scc-import/source/jibb
2236−/* tok-613 %txt /tests/golden/types-recursion-scc-import/tokens/txt
2237−/* tre-613 %txt /tests/golden/types-recursion-scc-import/tree/txt
2238−/* mod-613-1 %jibb /tests/golden/types-recursion-scc-import/modules/ui/lib/jibb
2239−/* typ-613 %txt /tests/golden/types-recursion-scc-import/types/txt
2240−/* mtre-613 %txt /tests/golden/types-recursion-scc-import/module-trees/txt
2241−/* src-614 %jibb /tests/golden/types-recursion-scc-import-bad/source/jibb
2242−/* tok-614 %txt /tests/golden/types-recursion-scc-import-bad/tokens/txt
2243−/* tre-614 %txt /tests/golden/types-recursion-scc-import-bad/tree/txt
2244−/* mod-614-1 %jibb /tests/golden/types-recursion-scc-import-bad/modules/ui/lib/jibb
2245−/* typ-614 %txt /tests/golden/types-recursion-scc-import-bad/types/txt
2246−/* mtre-614 %txt /tests/golden/types-recursion-scc-import-bad/module-trees/txt
2247−/* src-615 %jibb /tests/golden/types-recursion-scc-local/source/jibb
2248−/* tok-615 %txt /tests/golden/types-recursion-scc-local/tokens/txt
2249−/* tre-615 %txt /tests/golden/types-recursion-scc-local/tree/txt
2250−/* typ-615 %txt /tests/golden/types-recursion-scc-local/types/txt
2251−/* src-616 %jibb /tests/golden/types-recursion-scc-order/source/jibb
2252−/* tok-616 %txt /tests/golden/types-recursion-scc-order/tokens/txt
2253−/* tre-616 %txt /tests/golden/types-recursion-scc-order/tree/txt
2254−/* typ-616 %txt /tests/golden/types-recursion-scc-order/types/txt
2255−/* src-617 %jibb /tests/golden/types-recursion-scc-shadow/source/jibb
2256−/* tok-617 %txt /tests/golden/types-recursion-scc-shadow/tokens/txt
2257−/* tre-617 %txt /tests/golden/types-recursion-scc-shadow/tree/txt
2258−/* typ-617 %txt /tests/golden/types-recursion-scc-shadow/types/txt
2259−/* src-618 %jibb /tests/golden/types-recursive-branch/source/jibb
2260−/* tok-618 %txt /tests/golden/types-recursive-branch/tokens/txt
2261−/* tre-618 %txt /tests/golden/types-recursive-branch/tree/txt
2262−/* typ-618 %txt /tests/golden/types-recursive-branch/types/txt
2263−/* src-619 %jibb /tests/golden/types-recursive-gate/source/jibb
2264−/* tok-619 %txt /tests/golden/types-recursive-gate/tokens/txt
2265−/* tre-619 %txt /tests/golden/types-recursive-gate/tree/txt
2266−/* typ-619 %txt /tests/golden/types-recursive-gate/types/txt
2267−/* src-620 %jibb /tests/golden/types-recursive-sample/source/jibb
2268−/* tok-620 %txt /tests/golden/types-recursive-sample/tokens/txt
2269−/* tre-620 %txt /tests/golden/types-recursive-sample/tree/txt
2270−/* typ-620 %txt /tests/golden/types-recursive-sample/types/txt
2271−/* src-621 %jibb /tests/golden/types-request-normal/source/jibb
2272−/* tok-621 %txt /tests/golden/types-request-normal/tokens/txt
2273−/* tre-621 %txt /tests/golden/types-request-normal/tree/txt
2274−/* mod-621-1 %jibb /tests/golden/types-request-normal/modules/ui/api/demo/jibb
2275−/* typ-621 %txt /tests/golden/types-request-normal/types/txt
2276−/* mark-621-1 %txt /tests/golden/types-request-normal/mar/full/txt
2277−/* mtre-621 %txt /tests/golden/types-request-normal/module-trees/txt
2278−/* src-622 %jibb /tests/golden/types-scope-library-poke/source/jibb
2279−/* tok-622 %txt /tests/golden/types-scope-library-poke/tokens/txt
2280−/* tre-622 %txt /tests/golden/types-scope-library-poke/tree/txt
2281−/* typ-622 %txt /tests/golden/types-scope-library-poke/types/txt
2282−/* src-623 %jibb /tests/golden/types-scope-root-api/source/jibb
2283−/* tok-623 %txt /tests/golden/types-scope-root-api/tokens/txt
2284−/* tre-623 %txt /tests/golden/types-scope-root-api/tree/txt
2285−/* typ-623 %txt /tests/golden/types-scope-root-api/types/txt
2286−/* src-624 %jibb /tests/golden/types-scope-store-duplicate/source/jibb
2287−/* tok-624 %txt /tests/golden/types-scope-store-duplicate/tokens/txt
2288−/* tre-624 %txt /tests/golden/types-scope-store-duplicate/tree/txt
2289−/* typ-624 %txt /tests/golden/types-scope-store-duplicate/types/txt
2290−/* src-625 %jibb /tests/golden/types-scope-store-shadow/source/jibb
2291−/* tok-625 %txt /tests/golden/types-scope-store-shadow/tokens/txt
2292−/* tre-625 %txt /tests/golden/types-scope-store-shadow/tree/txt
2293−/* typ-625 %txt /tests/golden/types-scope-store-shadow/types/txt
2294−/* src-626 %jibb /tests/golden/types-single-case-pattern/source/jibb
2295−/* tok-626 %txt /tests/golden/types-single-case-pattern/tokens/txt
2296−/* tre-626 %txt /tests/golden/types-single-case-pattern/tree/txt
2297−/* typ-626 %txt /tests/golden/types-single-case-pattern/types/txt
2298−/* src-627 %jibb /tests/golden/types-string-interpolation/source/jibb
2299−/* tok-627 %txt /tests/golden/types-string-interpolation/tokens/txt
2300−/* tre-627 %txt /tests/golden/types-string-interpolation/tree/txt
2301−/* typ-627 %txt /tests/golden/types-string-interpolation/types/txt
2302−/* src-628 %jibb /tests/golden/types-tuple-context/source/jibb
2303−/* tok-628 %txt /tests/golden/types-tuple-context/tokens/txt
2304−/* tre-628 %txt /tests/golden/types-tuple-context/tree/txt
2305−/* typ-628 %txt /tests/golden/types-tuple-context/types/txt
2306−/* src-629 %jibb /tests/golden/types-tuple-context-nested/source/jibb
2307−/* tok-629 %txt /tests/golden/types-tuple-context-nested/tokens/txt
2308−/* tre-629 %txt /tests/golden/types-tuple-context-nested/tree/txt
2309−/* typ-629 %txt /tests/golden/types-tuple-context-nested/types/txt
2310−/* src-630 %jibb /tests/golden/types-union-alias/source/jibb
2311−/* tok-630 %txt /tests/golden/types-union-alias/tokens/txt
2312−/* tre-630 %txt /tests/golden/types-union-alias/tree/txt
2313−/* typ-630 %txt /tests/golden/types-union-alias/types/txt
2314−/* src-631 %jibb /tests/golden/types-union-branch-context/source/jibb
2315−/* tok-631 %txt /tests/golden/types-union-branch-context/tokens/txt
2316−/* tre-631 %txt /tests/golden/types-union-branch-context/tree/txt
2317−/* typ-631 %txt /tests/golden/types-union-branch-context/types/txt
2318−/* src-632 %jibb /tests/golden/types-union-branch-pending/source/jibb
2319−/* tok-632 %txt /tests/golden/types-union-branch-pending/tokens/txt
2320−/* tre-632 %txt /tests/golden/types-union-branch-pending/tree/txt
2321−/* typ-632 %txt /tests/golden/types-union-branch-pending/types/txt
2322−/* src-633 %jibb /tests/golden/types-union-constructor-shape/source/jibb
2323−/* tok-633 %txt /tests/golden/types-union-constructor-shape/tokens/txt
2324−/* tre-633 %txt /tests/golden/types-union-constructor-shape/tree/txt
2325−/* typ-633 %txt /tests/golden/types-union-constructor-shape/types/txt
2326−/* src-634 %jibb /tests/golden/types-union-context-flow/source/jibb
2327−/* tok-634 %txt /tests/golden/types-union-context-flow/tokens/txt
2328−/* tre-634 %txt /tests/golden/types-union-context-flow/tree/txt
2329−/* typ-634 %txt /tests/golden/types-union-context-flow/types/txt
2330−/* src-635 %jibb /tests/golden/types-union-finite/source/jibb
2331−/* tok-635 %txt /tests/golden/types-union-finite/tokens/txt
2332−/* tre-635 %txt /tests/golden/types-union-finite/tree/txt
2333−/* typ-635 %txt /tests/golden/types-union-finite/types/txt
2334−/* src-636 %jibb /tests/golden/types-union-finite-context/source/jibb
2335−/* tok-636 %txt /tests/golden/types-union-finite-context/tokens/txt
2336−/* tre-636 %txt /tests/golden/types-union-finite-context/tree/txt
2337−/* typ-636 %txt /tests/golden/types-union-finite-context/types/txt
2338−/* src-637 %jibb /tests/golden/types-union-finite-generic/source/jibb
2339−/* tok-637 %txt /tests/golden/types-union-finite-generic/tokens/txt
2340−/* tre-637 %txt /tests/golden/types-union-finite-generic/tree/txt
2341−/* typ-637 %txt /tests/golden/types-union-finite-generic/types/txt
2342−/* src-638 %jibb /tests/golden/types-union-finite-limit/source/jibb
2343−/* tok-638 %txt /tests/golden/types-union-finite-limit/tokens/txt
2344−/* tre-638 %txt /tests/golden/types-union-finite-limit/tree/txt
2345−/* typ-638 %txt /tests/golden/types-union-finite-limit/types/txt
2346−/* src-639 %jibb /tests/golden/types-union-import/source/jibb
2347−/* tok-639 %txt /tests/golden/types-union-import/tokens/txt
2348−/* tre-639 %txt /tests/golden/types-union-import/tree/txt
2349−/* mod-639-1 %jibb /tests/golden/types-union-import/modules/ui/lib/jibb
2350−/* typ-639 %txt /tests/golden/types-union-import/types/txt
2351−/* mtre-639 %txt /tests/golden/types-union-import/module-trees/txt
2352−/* src-640 %jibb /tests/golden/types-union-local-pending/source/jibb
2353−/* tok-640 %txt /tests/golden/types-union-local-pending/tokens/txt
2354−/* tre-640 %txt /tests/golden/types-union-local-pending/tree/txt
2355−/* typ-640 %txt /tests/golden/types-union-local-pending/types/txt
2356−/* src-641 %jibb /tests/golden/types-union-nonwing-subject/source/jibb
2357−/* tok-641 %txt /tests/golden/types-union-nonwing-subject/tokens/txt
2358−/* tre-641 %txt /tests/golden/types-union-nonwing-subject/tree/txt
2359−/* typ-641 %txt /tests/golden/types-union-nonwing-subject/types/txt
2360−/* src-642 %jibb /tests/golden/types-union-overlap/source/jibb
2361−/* tok-642 %txt /tests/golden/types-union-overlap/tokens/txt
2362−/* tre-642 %txt /tests/golden/types-union-overlap/tree/txt
2363−/* typ-642 %txt /tests/golden/types-union-overlap/types/txt
2364−/* src-643 %jibb /tests/golden/types-union-overlap-nested/source/jibb
2365−/* tok-643 %txt /tests/golden/types-union-overlap-nested/tokens/txt
2366−/* tre-643 %txt /tests/golden/types-union-overlap-nested/tree/txt
2367−/* typ-643 %txt /tests/golden/types-union-overlap-nested/types/txt
2368−/* src-644 %jibb /tests/golden/types-union-pattern-result-context/source/jibb
2369−/* tok-644 %txt /tests/golden/types-union-pattern-result-context/tokens/txt
2370−/* tre-644 %txt /tests/golden/types-union-pattern-result-context/tree/txt
2371−/* typ-644 %txt /tests/golden/types-union-pattern-result-context/types/txt
2372−/* src-645 %jibb /tests/golden/types-union-pattern-result-controls/source/jibb
2373−/* tok-645 %txt /tests/golden/types-union-pattern-result-controls/tokens/txt
2374−/* tre-645 %txt /tests/golden/types-union-pattern-result-controls/tree/txt
2375−/* typ-645 %txt /tests/golden/types-union-pattern-result-controls/types/txt
2376−/* src-646 %jibb /tests/golden/types-union-patterns/source/jibb
2377−/* tok-646 %txt /tests/golden/types-union-patterns/tokens/txt
2378−/* tre-646 %txt /tests/golden/types-union-patterns/tree/txt
2379−/* typ-646 %txt /tests/golden/types-union-patterns/types/txt
2380−/* src-647 %jibb /tests/golden/types-union-patterns-generic/source/jibb
2381−/* tok-647 %txt /tests/golden/types-union-patterns-generic/tokens/txt
2382−/* tre-647 %txt /tests/golden/types-union-patterns-generic/tree/txt
2383−/* typ-647 %txt /tests/golden/types-union-patterns-generic/types/txt
2384−/* src-648 %jibb /tests/golden/types-union-patterns-import/source/jibb
2385−/* tok-648 %txt /tests/golden/types-union-patterns-import/tokens/txt
2386−/* tre-648 %txt /tests/golden/types-union-patterns-import/tree/txt
2387−/* mod-648-1 %jibb /tests/golden/types-union-patterns-import/modules/ui/lib/jibb
2388−/* typ-648 %txt /tests/golden/types-union-patterns-import/types/txt
2389−/* mtre-648 %txt /tests/golden/types-union-patterns-import/module-trees/txt
2390−/* src-649 %jibb /tests/golden/types-union-phantom-generic/source/jibb
2391−/* tok-649 %txt /tests/golden/types-union-phantom-generic/tokens/txt
2392−/* tre-649 %txt /tests/golden/types-union-phantom-generic/tree/txt
2393−/* typ-649 %txt /tests/golden/types-union-phantom-generic/types/txt
2394−/* src-650 %jibb /tests/golden/types-union-polymorphic-identity/source/jibb
2395−/* tok-650 %txt /tests/golden/types-union-polymorphic-identity/tokens/txt
2396−/* tre-650 %txt /tests/golden/types-union-polymorphic-identity/tree/txt
2397−/* mod-650-1 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/one/jibb
2398−/* mod-650-2 %jibb /tests/golden/types-union-polymorphic-identity/modules/ui/two/jibb
2399−/* typ-650 %txt /tests/golden/types-union-polymorphic-identity/types/txt
2400−/* mtre-650 %txt /tests/golden/types-union-polymorphic-identity/module-trees/txt
2401−/* src-651 %jibb /tests/golden/types-union-print-cross-namespace/source/jibb
2402−/* tok-651 %txt /tests/golden/types-union-print-cross-namespace/tokens/txt
2403−/* tre-651 %txt /tests/golden/types-union-print-cross-namespace/tree/txt
2404−/* mod-651-1 %jibb /tests/golden/types-union-print-cross-namespace/modules/ui/lib/jibb
2405−/* typ-651 %txt /tests/golden/types-union-print-cross-namespace/types/txt
2406−/* mtre-651 %txt /tests/golden/types-union-print-cross-namespace/module-trees/txt
2407−/* src-652 %jibb /tests/golden/types-union-print-distinct/source/jibb
2408−/* tok-652 %txt /tests/golden/types-union-print-distinct/tokens/txt
2409−/* tre-652 %txt /tests/golden/types-union-print-distinct/tree/txt
2410−/* mod-652-1 %jibb /tests/golden/types-union-print-distinct/modules/ui/left/jibb
2411−/* mod-652-2 %jibb /tests/golden/types-union-print-distinct/modules/ui/right/jibb
2412−/* mod-652-3 %jibb /tests/golden/types-union-print-distinct/modules/ui/twin/jibb
2413−/* typ-652 %txt /tests/golden/types-union-print-distinct/types/txt
2414−/* mtre-652 %txt /tests/golden/types-union-print-distinct/module-trees/txt
2415−/* src-653 %jibb /tests/golden/types-union-print-escape/source/jibb
2416−/* tok-653 %txt /tests/golden/types-union-print-escape/tokens/txt
2417−/* tre-653 %txt /tests/golden/types-union-print-escape/tree/txt
2418−/* typ-653 %txt /tests/golden/types-union-print-escape/types/txt
2419−/* src-654 %jibb /tests/golden/types-union-print-local/source/jibb
2420−/* tok-654 %txt /tests/golden/types-union-print-local/tokens/txt
2421−/* tre-654 %txt /tests/golden/types-union-print-local/tree/txt
2422−/* typ-654 %txt /tests/golden/types-union-print-local/types/txt
2423−/* src-655 %jibb /tests/golden/types-union-print-nested/source/jibb
2424−/* tok-655 %txt /tests/golden/types-union-print-nested/tokens/txt
2425−/* tre-655 %txt /tests/golden/types-union-print-nested/tree/txt
2426−/* typ-655 %txt /tests/golden/types-union-print-nested/types/txt
2427−/* src-656 %jibb /tests/golden/types-union-print-same-origin/source/jibb
2428−/* tok-656 %txt /tests/golden/types-union-print-same-origin/tokens/txt
2429−/* tre-656 %txt /tests/golden/types-union-print-same-origin/tree/txt
2430−/* mod-656-1 %jibb /tests/golden/types-union-print-same-origin/modules/ui/shared/jibb
2431−/* typ-656 %txt /tests/golden/types-union-print-same-origin/types/txt
2432−/* mtre-656 %txt /tests/golden/types-union-print-same-origin/module-trees/txt
2433−/* src-657 %jibb /tests/golden/types-union-print-transitive/source/jibb
2434−/* tok-657 %txt /tests/golden/types-union-print-transitive/tokens/txt
2435−/* tre-657 %txt /tests/golden/types-union-print-transitive/tree/txt
2436−/* mod-657-1 %jibb /tests/golden/types-union-print-transitive/modules/ui/mid/jibb
2437−/* mod-657-2 %jibb /tests/golden/types-union-print-transitive/modules/ui/base/jibb
2438−/* typ-657 %txt /tests/golden/types-union-print-transitive/types/txt
2439−/* mtre-657 %txt /tests/golden/types-union-print-transitive/module-trees/txt
2440−/* src-658 %jibb /tests/golden/types-union-runtime-equality/source/jibb
2441−/* tok-658 %txt /tests/golden/types-union-runtime-equality/tokens/txt
2442−/* tre-658 %txt /tests/golden/types-union-runtime-equality/tree/txt
2443−/* typ-658 %txt /tests/golden/types-union-runtime-equality/types/txt
2444−/* src-659 %jibb /tests/golden/types-union-singleton/source/jibb
2445−/* tok-659 %txt /tests/golden/types-union-singleton/tokens/txt
2446−/* tre-659 %txt /tests/golden/types-union-singleton/tree/txt
2447−/* typ-659 %txt /tests/golden/types-union-singleton/types/txt
2448−/* src-660 %jibb /tests/golden/types-union-source-alias/source/jibb
2449−/* tok-660 %txt /tests/golden/types-union-source-alias/tokens/txt
2450−/* tre-660 %txt /tests/golden/types-union-source-alias/tree/txt
2451−/* typ-660 %txt /tests/golden/types-union-source-alias/types/txt
2452−/* src-661 %jibb /tests/golden/types-union-tag-atoms/source/jibb
2453−/* tok-661 %txt /tests/golden/types-union-tag-atoms/tokens/txt
2454−/* tre-661 %txt /tests/golden/types-union-tag-atoms/tree/txt
2455−/* typ-661 %txt /tests/golden/types-union-tag-atoms/types/txt
2456−/* src-662 %jibb /tests/golden/types-union-tags/source/jibb
2457−/* tok-662 %txt /tests/golden/types-union-tags/tokens/txt
2458−/* tre-662 %txt /tests/golden/types-union-tags/tree/txt
2459−/* typ-662 %txt /tests/golden/types-union-tags/types/txt
2460−/* src-663 %jibb /tests/golden/types-union-unresolved/source/jibb
2461−/* tok-663 %txt /tests/golden/types-union-unresolved/tokens/txt
2462−/* tre-663 %txt /tests/golden/types-union-unresolved/tree/txt
2463−/* typ-663 %txt /tests/golden/types-union-unresolved/types/txt
2464−/* src-664 %jibb /tests/golden/types-union-unresolved-flow/source/jibb
2465−/* tok-664 %txt /tests/golden/types-union-unresolved-flow/tokens/txt
2466−/* tre-664 %txt /tests/golden/types-union-unresolved-flow/tree/txt
2467−/* typ-664 %txt /tests/golden/types-union-unresolved-flow/types/txt
2468−/* src-665 %jibb /tests/golden/types-unit-construction/source/jibb
2469−/* tok-665 %txt /tests/golden/types-unit-construction/tokens/txt
2470−/* tre-665 %txt /tests/golden/types-unit-construction/tree/txt
2471−/* typ-665 %txt /tests/golden/types-unit-construction/types/txt
2472−/* src-666 %jibb /tests/golden/types-unit-context/source/jibb
2473−/* tok-666 %txt /tests/golden/types-unit-context/tokens/txt
2474−/* tre-666 %txt /tests/golden/types-unit-context/tree/txt
2475−/* typ-666 %txt /tests/golden/types-unit-context/types/txt
2476−/* src-667 %jibb /tests/golden/types-unit-patterns/source/jibb
2477−/* tok-667 %txt /tests/golden/types-unit-patterns/tokens/txt
2478−/* tre-667 %txt /tests/golden/types-unit-patterns/tree/txt
2479−/* typ-667 %txt /tests/golden/types-unit-patterns/types/txt
2480−/* src-668 %jibb /tests/golden/types-value-cycle-shadow/source/jibb
2481−/* tok-668 %txt /tests/golden/types-value-cycle-shadow/tokens/txt
2482−/* tre-668 %txt /tests/golden/types-value-cycle-shadow/tree/txt
2483−/* typ-668 %txt /tests/golden/types-value-cycle-shadow/types/txt
2484−/* src-669 %jibb /tests/golden/types-value-cycle-unsupported/source/jibb
2485−/* tok-669 %txt /tests/golden/types-value-cycle-unsupported/tokens/txt
2486−/* tre-669 %txt /tests/golden/types-value-cycle-unsupported/tree/txt
2487−/* typ-669 %txt /tests/golden/types-value-cycle-unsupported/types/txt
2488−/* src-670 %jibb /tests/golden/types-value-cycles/source/jibb
2489−/* tok-670 %txt /tests/golden/types-value-cycles/tokens/txt
2490−/* tre-670 %txt /tests/golden/types-value-cycles/tree/txt
2491−/* typ-670 %txt /tests/golden/types-value-cycles/types/txt
2492−=/ prepared-prelude (prepare-prelude-with-internal:jibb prelude-source internal-source)
2493−|%
2494−:: one arm per case
2495−::
2496−++ test-doc-core-02-update
2497− (check ~.doc-core-02-update src-1 `tok-1 `tre-1)
2498−++ test-doc-grammar-01-imports
2499− (check ~.doc-grammar-01-imports src-2 `tok-2 `tre-2)
2500−++ test-doc-grammar-02-buttons
2501− (weld (check ~.doc-grammar-02-buttons src-3 `tok-3 `tre-3) (check-module-types ~.doc-grammar-02-buttons ~[%tests %golden ~.doc-grammar-02-buttons %source %jibb] src-3 `typ-3 ~ ~ ~))
2502−++ test-doc-grammar-03-view-day
2503− (check ~.doc-grammar-03-view-day src-4 `tok-4 `tre-4)
2504−++ test-doc-grammar-04-step
2505− (weld (check ~.doc-grammar-04-step src-5 `tok-5 `tre-5) (check-module-types ~.doc-grammar-04-step ~[%tests %golden ~.doc-grammar-04-step %source %jibb] src-5 `typ-5 ~ ~ ~))
2506−++ test-doc-grammar-06-cart-store
2507− (weld (check ~.doc-grammar-06-cart-store src-6 `tok-6 `tre-6) (check-module-types ~.doc-grammar-06-cart-store ~[%tests %golden ~.doc-grammar-06-cart-store %source %jibb] src-6 `typ-6 ~ ~ ~))
2508−++ test-doc-grammar-07-basket
2509− (check ~.doc-grammar-07-basket src-7 `tok-7 `tre-7)
2510−++ test-doc-overview-01-cmd-sub
2511− (check ~.doc-overview-01-cmd-sub src-8 `tok-8 `tre-8)
2512−++ test-doc-overview-02-theme
2513− (check ~.doc-overview-02-theme src-9 `tok-9 `tre-9)
2514−++ test-doc-overview-04-todo-api
2515− (check ~.doc-overview-04-todo-api src-10 `tok-10 `tre-10)
2516−++ test-doc-overview-08-about
2517− (check ~.doc-overview-08-about src-11 `tok-11 `tre-11)
2518−++ test-doc-overview-09-blog-index
2519− (check ~.doc-overview-09-blog-index src-12 `tok-12 `tre-12)
2520−++ test-doc-overview-10-todo-list
2521− (check ~.doc-overview-10-todo-list src-13 `tok-13 `tre-13)
2522−++ test-doc-overview-11-index
2523− (check ~.doc-overview-11-index src-14 `tok-14 `tre-14)
2524−++ test-fixture-blog-api
2525− (check-at ~.fixture-blog-api ~[~.ui ~.api ~.blog ~.jibb] src-15 `tok-15 `tre-15)
2526−++ test-fixture-blog-card
2527− (check-at ~.fixture-blog-card ~[~.ui ~.components ~.card ~.jibb] src-16 `tok-16 `tre-16)
2528−++ test-inline-base32
2529− (check ~.inline-base32 src-17 `tok-17 `tre-17)
2530−++ test-inline-call
2531− (check ~.inline-call src-18 `tok-18 `tre-18)
2532−++ test-inline-cell
2533− (check ~.inline-cell src-19 `tok-19 `tre-19)
2534−++ test-inline-change-done
2535− (check ~.inline-change-done src-20 `tok-20 `tre-20)
2536−++ test-inline-change-draft
2537− (check ~.inline-change-draft src-21 `tok-21 `tre-21)
2538−++ test-inline-crash
2539− (check ~.inline-crash src-22 `tok-22 `tre-22)
2540−++ test-inline-crash-call
2541− (check ~.inline-crash-call src-23 `tok-23 `tre-23)
2542−++ test-inline-crash-operands
2543− (check ~.inline-crash-operands src-24 `tok-24 `tre-24)
2544−++ test-inline-ctor-typed
2545− (check ~.inline-ctor-typed src-25 `tok-25 `tre-25)
2546−++ test-inline-date
2547− (check ~.inline-date src-26 `tok-26 `tre-26)
2548−++ test-inline-decimal
2549− (check ~.inline-decimal src-27 `tok-27 `tre-27)
2550−++ test-inline-duration
2551− (check ~.inline-duration src-28 `tok-28 `tre-28)
2552−++ test-inline-fold-mold
2553− (check ~.inline-fold-mold src-29 `tok-29 `tre-29)
2554−++ test-inline-gate-after-definition-bad
2555− (check ~.inline-gate-after-definition-bad src-30 `tok-30 `tre-30)
2556−++ test-inline-gate-field-bad
2557− (check ~.inline-gate-field-bad src-31 `tok-31 `tre-31)
2558−++ test-inline-gate-mold
2559− (check ~.inline-gate-mold src-32 `tok-32 `tre-32)
2560−++ test-inline-gate-sample-binds
2561− (check ~.inline-gate-sample-binds src-33 `tok-33 `tre-33)
2562−++ test-inline-gate-samples
2563− (check ~.inline-gate-samples src-34 `tok-34 `tre-34)
2564−++ test-inline-gate-wide
2565− (check ~.inline-gate-wide src-35 `tok-35 `tre-35)
2566−++ test-inline-generic-apply-bad
2567− (check ~.inline-generic-apply-bad src-36 `tok-36 `tre-36)
2568−++ test-inline-generic-both-bad
2569− (check ~.inline-generic-both-bad src-37 `tok-37 `tre-37)
2570−++ test-inline-generic-case-bad
2571− (check ~.inline-generic-case-bad src-38 `tok-38 `tre-38)
2572−++ test-inline-generic-cast-bad
2573− (check ~.inline-generic-cast-bad src-39 `tok-39 `tre-39)
2574−++ test-inline-generic-empty-bad
2575− (check ~.inline-generic-empty-bad src-40 `tok-40 `tre-40)
2576−++ test-inline-generic-field-bad
2577− (check ~.inline-generic-field-bad src-41 `tok-41 `tre-41)
2578−++ test-inline-generic-mold
2579− (check ~.inline-generic-mold src-42 `tok-42 `tre-42)
2580−++ test-inline-generic-prefix-bad
2581− (check ~.inline-generic-prefix-bad src-43 `tok-43 `tre-43)
2582−++ test-inline-hex
2583− (check ~.inline-hex src-44 `tok-44 `tre-44)
2584−++ test-inline-hoon-union-apply-bad
2585− (check ~.inline-hoon-union-apply-bad src-45 `tok-45 `tre-45)
2586−++ test-inline-hoon-union-cast-bad
2587− (check ~.inline-hoon-union-cast-bad src-46 `tok-46 `tre-46)
2588−++ test-inline-hoon-union-definition-bad
2589− (check ~.inline-hoon-union-definition-bad src-47 `tok-47 `tre-47)
2590−++ test-inline-hoon-union-field-bad
2591− (check ~.inline-hoon-union-field-bad src-48 `tok-48 `tre-48)
2592−++ test-inline-hoon-union-gate-bad
2593− (check ~.inline-hoon-union-gate-bad src-49 `tok-49 `tre-49)
2594−++ test-inline-hoon-union-nested-sample-bad
2595− (check ~.inline-hoon-union-nested-sample-bad src-50 `tok-50 `tre-50)
2596−++ test-inline-hoon-union-open-apply-bad
2597− (check ~.inline-hoon-union-open-apply-bad src-51 `tok-51 `tre-51)
2598−++ test-inline-hoon-union-open-field-bad
2599− (check ~.inline-hoon-union-open-field-bad src-52 `tok-52 `tre-52)
2600−++ test-inline-hoon-union-sample-bad
2601− (check ~.inline-hoon-union-sample-bad src-53 `tok-53 `tre-53)
2602−++ test-inline-hoon-union-wide-sample-bad
2603− (check ~.inline-hoon-union-wide-sample-bad src-54 `tok-54 `tre-54)
2604−++ test-inline-import-dollar-mark-bad
2605− (check ~.inline-import-dollar-mark-bad src-55 `tok-55 `tre-55)
2606−++ test-inline-import-mark-face-bad
2607− (check ~.inline-import-mark-face-bad src-56 `tok-56 `tre-56)
2608−++ test-inline-import-root-bad
2609− (check ~.inline-import-root-bad src-57 `tok-57 `tre-57)
2610−++ test-inline-imports-after-definition
2611− (check ~.inline-imports-after-definition src-58 `tok-58 `tre-58)
2612−++ test-inline-island
2613− (check ~.inline-island src-59 `tok-59 `tre-59)
2614−++ test-inline-kinds
2615− (check ~.inline-kinds src-60 `tok-60 `tre-60)
2616−++ test-inline-knot
2617− (check ~.inline-knot src-61 `tok-61 `tre-61)
2618−++ test-inline-leftout-barcab
2619− (check ~.inline-leftout-barcab src-62 `tok-62 `tre-62)
2620−++ test-inline-leftout-barcen
2621− (check ~.inline-leftout-barcen src-63 `tok-63 `tre-63)
2622−++ test-inline-leftout-barcen-2
2623− (check ~.inline-leftout-barcen-2 src-64 `tok-64 `tre-64)
2624−++ test-inline-leftout-barcen-3
2625− (check ~.inline-leftout-barcen-3 src-65 `tok-65 `tre-65)
2626−++ test-inline-leftout-barhep
2627− (check ~.inline-leftout-barhep src-66 `tok-66 `tre-66)
2628−++ test-inline-leftout-bartar
2629− (check ~.inline-leftout-bartar src-67 `tok-67 `tre-67)
2630−++ test-inline-leftout-buc-alone
2631− (check ~.inline-leftout-buc-alone src-68 `tok-68 `tre-68)
2632−++ test-inline-leftout-buc-paren
2633− (check ~.inline-leftout-buc-paren src-69 `tok-69 `tre-69)
2634−++ test-inline-leftout-buc-paren-2
2635− (check ~.inline-leftout-buc-paren-2 src-70 `tok-70 `tre-70)
2636−++ test-inline-leftout-buc-paren-3
2637− (check ~.inline-leftout-buc-paren-3 src-71 `tok-71 `tre-71)
2638−++ test-inline-leftout-buccen
2639− (check ~.inline-leftout-buccen src-72 `tok-72 `tre-72)
2640−++ test-inline-leftout-cencol
2641− (check ~.inline-leftout-cencol src-73 `tok-73 `tre-73)
2642−++ test-inline-leftout-cenhep
2643− (check ~.inline-leftout-cenhep src-74 `tok-74 `tre-74)
2644−++ test-inline-leftout-centis
2645− (check ~.inline-leftout-centis src-75 `tok-75 `tre-75)
2646−++ test-inline-leftout-colhep
2647− (check ~.inline-leftout-colhep src-76 `tok-76 `tre-76)
2648−++ test-inline-leftout-colon-wing
2649− (check ~.inline-leftout-colon-wing src-77 `tok-77 `tre-77)
2650−++ test-inline-leftout-colsig
2651− (check ~.inline-leftout-colsig src-78 `tok-78 `tre-78)
2652−++ test-inline-leftout-coltar
2653− (check ~.inline-leftout-coltar src-79 `tok-79 `tre-79)
2654−++ test-inline-leftout-dottar
2655− (check ~.inline-leftout-dottar src-80 `tok-80 `tre-80)
2656−++ test-inline-leftout-dottis
2657− (check ~.inline-leftout-dottis src-81 `tok-81 `tre-81)
2658−++ test-inline-leftout-faslus
2659− (check ~.inline-leftout-faslus src-82 `tok-82 `tre-82)
2660−++ test-inline-leftout-hephep
2661− (check ~.inline-leftout-hephep src-83 `tok-83 `tre-83)
2662−++ test-inline-leftout-kethep-wide
2663− (check ~.inline-leftout-kethep-wide src-84 `tok-84 `tre-84)
2664−++ test-inline-leftout-kettar
2665− (check ~.inline-leftout-kettar src-85 `tok-85 `tre-85)
2666−++ test-inline-leftout-miccol
2667− (check ~.inline-leftout-miccol src-86 `tok-86 `tre-86)
2668−++ test-inline-leftout-sail
2669− (check ~.inline-leftout-sail src-87 `tok-87 `tre-87)
2670−++ test-inline-leftout-sigbar
2671− (check ~.inline-leftout-sigbar src-88 `tok-88 `tre-88)
2672−++ test-inline-leftout-signed-float-auras
2673− (check ~.inline-leftout-signed-float-auras src-89 `tok-89 `tre-89)
2674−++ test-inline-leftout-signed-float-auras-2
2675− (check ~.inline-leftout-signed-float-auras-2 src-90 `tok-90 `tre-90)
2676−++ test-inline-leftout-sigpam-wide
2677− (check ~.inline-leftout-sigpam-wide src-91 `tok-91 `tre-91)
2678−++ test-inline-leftout-tis-paren
2679− (check ~.inline-leftout-tis-paren src-92 `tok-92 `tre-92)
2680−++ test-inline-leftout-tisfas
2681− (check ~.inline-leftout-tisfas src-93 `tok-93 `tre-93)
2682−++ test-inline-leftout-tisgal
2683− (check ~.inline-leftout-tisgal src-94 `tok-94 `tre-94)
2684−++ test-inline-leftout-tisgal-2
2685− (check ~.inline-leftout-tisgal-2 src-95 `tok-95 `tre-95)
2686−++ test-inline-leftout-tisgar
2687− (check ~.inline-leftout-tisgar src-96 `tok-96 `tre-96)
2688−++ test-inline-leftout-tislus
2689− (check ~.inline-leftout-tislus src-97 `tok-97 `tre-97)
2690−++ test-inline-leftout-tistis
2691− (check ~.inline-leftout-tistis src-98 `tok-98 `tre-98)
2692−++ test-inline-leftout-wutcol
2693− (check ~.inline-leftout-wutcol src-99 `tok-99 `tre-99)
2694−++ test-inline-leftout-wutcol-2
2695− (check ~.inline-leftout-wutcol-2 src-100 `tok-100 `tre-100)
2696−++ test-inline-leftout-wuthep-wide
2697− (check ~.inline-leftout-wuthep-wide src-101 `tok-101 `tre-101)
2698−++ test-inline-leftout-wutlus
2699− (check ~.inline-leftout-wutlus src-102 `tok-102 `tre-102)
2700−++ test-inline-leftout-wutsig
2701− (check ~.inline-leftout-wutsig src-103 `tok-103 `tre-103)
2702−++ test-inline-leftout-wutzap
2703− (check ~.inline-leftout-wutzap src-104 `tok-104 `tre-104)
2704−++ test-inline-leftout-zap-not
2705− (check ~.inline-leftout-zap-not src-105 `tok-105 `tre-105)
2706−++ test-inline-leftout-zap-not-2
2707− (check ~.inline-leftout-zap-not-2 src-106 `tok-106 `tre-106)
2708−++ test-inline-leftout-zapgar
2709− (check ~.inline-leftout-zapgar src-107 `tok-107 `tre-107)
2710−++ test-inline-list
2711− (check ~.inline-list src-108 `tok-108 `tre-108)
2712−++ test-inline-list-parens
2713− (check ~.inline-list-parens src-109 `tok-109 `tre-109)
2714−++ test-inline-literal-defaults
2715− (check ~.inline-literal-defaults src-110 `tok-110 `tre-110)
2716−++ test-inline-load-slug
2717− (check ~.inline-load-slug src-111 `tok-111 `tre-111)
2718−++ test-inline-local-names
2719− (check ~.inline-local-names src-112 `tok-112 `tre-112)
2720−++ test-inline-local-names-bodies
2721− (check ~.inline-local-names-bodies src-113 `tok-113 `tre-113)
2722−++ test-inline-loobean
2723− (check ~.inline-loobean src-114 `tok-114 `tre-114)
2724−++ test-inline-mark-digit
2725− (check ~.inline-mark-digit src-115 `tok-115 `tre-115)
2726−++ test-inline-module-definitions
2727− (check ~.inline-module-definitions src-116 `tok-116 `tre-116)
2728−++ test-inline-mold-add
2729− (check ~.inline-mold-add src-117 `tok-117 `tre-117)
2730−++ test-inline-mold-any-empty
2731− (check ~.inline-mold-any-empty src-118 `tok-118 `tre-118)
2732−++ test-inline-mold-atoms
2733− (check ~.inline-mold-atoms src-119 `tok-119 `tre-119)
2734−++ test-inline-mold-constants
2735− (check ~.inline-mold-constants src-120 `tok-120 `tre-120)
2736−++ test-inline-mold-containers
2737− (check ~.inline-mold-containers src-121 `tok-121 `tre-121)
2738−++ test-inline-mold-gate
2739− (check ~.inline-mold-gate src-122 `tok-122 `tre-122)
2740−++ test-inline-mold-generic
2741− (check ~.inline-mold-generic src-123 `tok-123 `tre-123)
2742−++ test-inline-mold-opaque
2743− (check ~.inline-mold-opaque src-124 `tok-124 `tre-124)
2744−++ test-inline-mold-paths
2745− (check ~.inline-mold-paths src-125 `tok-125 `tre-125)
2746−++ test-inline-mold-records
2747− (check ~.inline-mold-records src-126 `tok-126 `tre-126)
2748−++ test-inline-namespaces
2749− (check ~.inline-namespaces src-127 `tok-127 `tre-127)
2750−++ test-inline-no-operators
2751− (check ~.inline-no-operators src-128 `tok-128 `tre-128)
2752−++ test-inline-no-subs
2753− (check ~.inline-no-subs src-129 `tok-129 `tre-129)
2754−++ test-inline-null
2755− (check ~.inline-null src-130 `tok-130 `tre-130)
2756−++ test-inline-pair
2757− (check ~.inline-pair src-131 `tok-131 `tre-131)
2758−++ test-inline-pairs-two-items
2759− (check ~.inline-pairs-two-items src-132 `tok-132 `tre-132)
2760−++ test-inline-path
2761− (check ~.inline-path src-133 `tok-133 `tre-133)
2762−++ test-inline-pattern-any
2763− (check ~.inline-pattern-any src-134 `tok-134 `tre-134)
2764−++ test-inline-pattern-cell
2765− (check ~.inline-pattern-cell src-135 `tok-135 `tre-135)
2766−++ test-inline-pattern-cell-open-bad
2767− (check ~.inline-pattern-cell-open-bad src-136 `tok-136 `tre-136)
2768−++ test-inline-pattern-crash-arm
2769− (check ~.inline-pattern-crash-arm src-137 `tok-137 `tre-137)
2770−++ test-inline-pattern-crash-bad
2771− (check ~.inline-pattern-crash-bad src-138 `tok-138 `tre-138)
2772−++ test-inline-pattern-date-bad
2773− (check ~.inline-pattern-date-bad src-139 `tok-139 `tre-139)
2774−++ test-inline-pattern-duration-bad
2775− (check ~.inline-pattern-duration-bad src-140 `tok-140 `tre-140)
2776−++ test-inline-pattern-eq
2777− (check ~.inline-pattern-eq src-141 `tok-141 `tre-141)
2778−++ test-inline-pattern-face-bad
2779− (check ~.inline-pattern-face-bad src-142 `tok-142 `tre-142)
2780−++ test-inline-pattern-head-tag
2781− (check ~.inline-pattern-head-tag src-143 `tok-143 `tre-143)
2782−++ test-inline-pattern-interpolated-bad
2783− (check ~.inline-pattern-interpolated-bad src-144 `tok-144 `tre-144)
2784−++ test-inline-pattern-list-bad
2785− (check ~.inline-pattern-list-bad src-145 `tok-145 `tre-145)
2786−++ test-inline-pattern-literals
2787− (check ~.inline-pattern-literals src-146 `tok-146 `tre-146)
2788−++ test-inline-pattern-loobean
2789− (check ~.inline-pattern-loobean src-147 `tok-147 `tre-147)
2790−++ test-inline-pattern-move-any
2791− (check ~.inline-pattern-move-any src-148 `tok-148 `tre-148)
2792−++ test-inline-pattern-name
2793− (check ~.inline-pattern-name src-149 `tok-149 `tre-149)
2794−++ test-inline-pattern-null
2795− (check ~.inline-pattern-null src-150 `tok-150 `tre-150)
2796−++ test-inline-pattern-pair-bad
2797− (check ~.inline-pattern-pair-bad src-151 `tok-151 `tre-151)
2798−++ test-inline-pattern-tail-tag
2799− (check ~.inline-pattern-tail-tag src-152 `tok-152 `tre-152)
2800−++ test-inline-pattern-term
2801− (check ~.inline-pattern-term src-153 `tok-153 `tre-153)
2802−++ test-inline-pattern-two-tags
2803− (check ~.inline-pattern-two-tags src-154 `tok-154 `tre-154)
2804−++ test-inline-pattern-unit
2805− (check ~.inline-pattern-unit src-155 `tok-155 `tre-155)
2806−++ test-inline-qath
2807− (check ~.inline-qath src-156 `tok-156 `tre-156)
2808−++ test-inline-requests
2809− (check ~.inline-requests src-157 `tok-157 `tre-157)
2810−++ test-inline-scry-case
2811− (check ~.inline-scry-case src-158 `tok-158 `tre-158)
2812−++ test-inline-self-reference
2813− (check ~.inline-self-reference src-159 `tok-159 `tre-159)
2814−++ test-inline-ship
2815− (check ~.inline-ship src-160 `tok-160 `tre-160)
2816−++ test-inline-static-image
2817− (check ~.inline-static-image src-161 `tok-161 `tre-161)
2818−++ test-inline-string
2819− (check ~.inline-string src-162 `tok-162 `tre-162)
2820−++ test-inline-tag-shape
2821− (check ~.inline-tag-shape src-163 `tok-163 `tre-163)
2822−++ test-inline-term
2823− (check ~.inline-term src-164 `tok-164 `tre-164)
2824−++ test-inline-term-numeric
2825− (check ~.inline-term-numeric src-165 `tok-165 `tre-165)
2826−++ test-inline-text-items
2827− (check ~.inline-text-items src-166 `tok-166 `tre-166)
2828−++ test-inline-union-both-bad
2829− (check ~.inline-union-both-bad src-167 `tok-167 `tre-167)
2830−++ test-inline-union-local
2831− (check ~.inline-union-local src-168 `tok-168 `tre-168)
2832−++ test-inline-union-one-case
2833− (check ~.inline-union-one-case src-169 `tok-169 `tre-169)
2834−++ test-inline-union-record-bad
2835− (check ~.inline-union-record-bad src-170 `tok-170 `tre-170)
2836−++ test-inline-union-wide
2837− (check ~.inline-union-wide src-171 `tok-171 `tre-171)
2838−++ test-inline-unit
2839− (check ~.inline-unit src-172 `tok-172 `tre-172)
2840−++ test-inline-wide-form-rune-bad
2841− (check ~.inline-wide-form-rune-bad src-173 `tok-173 `tre-173)
2842−++ test-inline-wide-forms
2843− (check ~.inline-wide-forms src-174 `tok-174 `tre-174)
2844−++ test-inline-wide-union-call
2845− (check ~.inline-wide-union-call src-175 `tok-175 `tre-175)
2846−++ test-inline-wings
2847− (check ~.inline-wings src-176 `tok-176 `tre-176)
2848−++ test-lex-base32-bad-1
2849− (check ~.lex-base32-bad-1 src-177 `tok-177 `tre-177)
2850−++ test-lex-base32-ok-1
2851− (check ~.lex-base32-ok-1 src-178 `tok-178 `tre-178)
2852−++ test-lex-blob-bad-1
2853− (check ~.lex-blob-bad-1 src-179 `tok-179 `tre-179)
2854−++ test-lex-call-open-bad-1
2855− (check ~.lex-call-open-bad-1 src-180 `tok-180 `tre-180)
2856−++ test-lex-call-open-bad-2
2857− (check ~.lex-call-open-bad-2 src-181 `tok-181 `tre-181)
2858−++ test-lex-call-open-bad-4
2859− (check ~.lex-call-open-bad-4 src-182 `tok-182 `tre-182)
2860−++ test-lex-call-open-ok-1
2861− (check ~.lex-call-open-ok-1 src-183 `tok-183 `tre-183)
2862−++ test-lex-call-open-ok-2
2863− (check ~.lex-call-open-ok-2 src-184 `tok-184 `tre-184)
2864−++ test-lex-cell-bad-1
2865− (check ~.lex-cell-bad-1 src-185 `tok-185 `tre-185)
2866−++ test-lex-cell-ok-1
2867− (check ~.lex-cell-ok-1 src-186 `tok-186 `tre-186)
2868−++ test-lex-char-bad-1
2869− (check ~.lex-char-bad-1 src-187 `tok-187 `tre-187)
2870−++ test-lex-char-bad-2
2871− (check ~.lex-char-bad-2 src-188 `tok-188 `tre-188)
2872−++ test-lex-char-bad-3
2873− (check ~.lex-char-bad-3 src-189 `tok-189 `tre-189)
2874−++ test-lex-closer-bad-1
2875− (check ~.lex-closer-bad-1 src-190 `tok-190 `tre-190)
2876−++ test-lex-closer-bad-2
2877− (check ~.lex-closer-bad-2 src-191 `tok-191 `tre-191)
2878−++ test-lex-closer-bad-3
2879− (check ~.lex-closer-bad-3 src-192 `tok-192 `tre-192)
2880−++ test-lex-closer-bad-4
2881− (check ~.lex-closer-bad-4 src-193 `tok-193 `tre-193)
2882−++ test-lex-codepoint-bad-1
2883− (check ~.lex-codepoint-bad-1 src-194 `tok-194 `tre-194)
2884−++ test-lex-comment-bad-1
2885− (check ~.lex-comment-bad-1 src-195 `tok-195 `tre-195)
2886−++ test-lex-comment-ok-1
2887− (check ~.lex-comment-ok-1 src-196 `tok-196 `tre-196)
2888−++ test-lex-comment-ok-2
2889− (check ~.lex-comment-ok-2 src-197 `tok-197 `tre-197)
2890−++ test-lex-comment-ok-3
2891− (check ~.lex-comment-ok-3 src-198 `tok-198 `tre-198)
2892−++ test-lex-date-bad-1
2893− (check ~.lex-date-bad-1 src-199 `tok-199 `tre-199)
2894−++ test-lex-date-bad-2
2895− (check ~.lex-date-bad-2 src-200 `tok-200 `tre-200)
2896−++ test-lex-date-bad-3
2897− (check ~.lex-date-bad-3 src-201 `tok-201 `tre-201)
2898−++ test-lex-date-ok-1
2899− (check ~.lex-date-ok-1 src-202 `tok-202 `tre-202)
2900−++ test-lex-date-ok-2
2901− (check ~.lex-date-ok-2 src-203 `tok-203 `tre-203)
2902−++ test-lex-decimal-bad-1
2903− (check ~.lex-decimal-bad-1 src-204 `tok-204 `tre-204)
2904−++ test-lex-decimal-bad-2
2905− (check ~.lex-decimal-bad-2 src-205 `tok-205 `tre-205)
2906−++ test-lex-decimal-ok-1
2907− (check ~.lex-decimal-ok-1 src-206 `tok-206 `tre-206)
2908−++ test-lex-duration-bad-1
2909− (check ~.lex-duration-bad-1 src-207 `tok-207 `tre-207)
2910−++ test-lex-duration-bad-2
2911− (check ~.lex-duration-bad-2 src-208 `tok-208 `tre-208)
2912−++ test-lex-duration-ok-1
2913− (check ~.lex-duration-ok-1 src-209 `tok-209 `tre-209)
2914−++ test-lex-hex-bad-1
2915− (check ~.lex-hex-bad-1 src-210 `tok-210 `tre-210)
2916−++ test-lex-hex-ok-1
2917− (check ~.lex-hex-ok-1 src-211 `tok-211 `tre-211)
2918−++ test-lex-indent-bad-1
2919− (check ~.lex-indent-bad-1 src-212 `tok-212 `tre-212)
2920−++ test-lex-indent-bad-2
2921− (check ~.lex-indent-bad-2 src-213 `tok-213 `tre-213)
2922−++ test-lex-indent-bad-3
2923− (check ~.lex-indent-bad-3 src-214 `tok-214 `tre-214)
2924−++ test-lex-indent-ok-1
2925− (check ~.lex-indent-ok-1 src-215 `tok-215 `tre-215)
2926−++ test-lex-indent-ok-2
2927− (check ~.lex-indent-ok-2 src-216 `tok-216 `tre-216)
2928−++ test-lex-indent-ok-3
2929− (check ~.lex-indent-ok-3 src-217 `tok-217 `tre-217)
2930−++ test-lex-interp-bad-1
2931− (check ~.lex-interp-bad-1 src-218 `tok-218 `tre-218)
2932−++ test-lex-interp-bad-2
2933− (check ~.lex-interp-bad-2 src-219 `tok-219 `tre-219)
2934−++ test-lex-interp-bad-3
2935− (check ~.lex-interp-bad-3 src-220 `tok-220 `tre-220)
2936−++ test-lex-interp-bad-5
2937− (check ~.lex-interp-bad-5 src-221 `tok-221 `tre-221)
2938−++ test-lex-interp-bad-6
2939− (check ~.lex-interp-bad-6 src-222 `tok-222 `tre-222)
2940−++ test-lex-interp-ok-1
2941− (check ~.lex-interp-ok-1 src-223 `tok-223 `tre-223)
2942−++ test-lex-interp-ok-2
2943− (check ~.lex-interp-ok-2 src-224 `tok-224 `tre-224)
2944−++ test-lex-interp-ok-3
2945− (check ~.lex-interp-ok-3 src-225 `tok-225 `tre-225)
2946−++ test-lex-knot-bad-1
2947− (check ~.lex-knot-bad-1 src-226 `tok-226 `tre-226)
2948−++ test-lex-knot-ok-1
2949− (check ~.lex-knot-ok-1 src-227 `tok-227 `tre-227)
2950−++ test-lex-layout-bad-1
2951− (check ~.lex-layout-bad-1 src-228 `tok-228 `tre-228)
2952−++ test-lex-layout-bad-10
2953− (check ~.lex-layout-bad-10 src-229 `tok-229 `tre-229)
2954−++ test-lex-layout-bad-2
2955− (check ~.lex-layout-bad-2 src-230 `tok-230 `tre-230)
2956−++ test-lex-layout-bad-3
2957− (check ~.lex-layout-bad-3 src-231 `tok-231 `tre-231)
2958−++ test-lex-layout-bad-4
2959− (check ~.lex-layout-bad-4 src-232 `tok-232 `tre-232)
2960−++ test-lex-layout-bad-5
2961− (check ~.lex-layout-bad-5 src-233 `tok-233 `tre-233)
2962−++ test-lex-layout-bad-6
2963− (check ~.lex-layout-bad-6 src-234 `tok-234 `tre-234)
2964−++ test-lex-layout-bad-7
2965− (check ~.lex-layout-bad-7 src-235 `tok-235 `tre-235)
2966−++ test-lex-layout-bad-8
2967− (check ~.lex-layout-bad-8 src-236 `tok-236 `tre-236)
2968−++ test-lex-layout-bad-9
2969− (check ~.lex-layout-bad-9 src-237 `tok-237 `tre-237)
2970−++ test-lex-layout-ok-1
2971− (check ~.lex-layout-ok-1 src-238 `tok-238 `tre-238)
2972−++ test-lex-list-bad-1
2973− (check ~.lex-list-bad-1 src-239 `tok-239 `tre-239)
2974−++ test-lex-list-ok-1
2975− (check ~.lex-list-ok-1 src-240 `tok-240 `tre-240)
2976−++ test-lex-loobean-bad-1
2977− (check ~.lex-loobean-bad-1 src-241 `tok-241 `tre-241)
2978−++ test-lex-loobean-ok-1
2979− (check ~.lex-loobean-ok-1 src-242 `tok-242 `tre-242)
2980−++ test-lex-name-bad-1
2981− (check ~.lex-name-bad-1 src-243 `tok-243 `tre-243)
2982−++ test-lex-name-bad-2
2983− (check ~.lex-name-bad-2 src-244 `tok-244 `tre-244)
2984−++ test-lex-name-bad-3
2985− (check ~.lex-name-bad-3 src-245 `tok-245 `tre-245)
2986−++ test-lex-name-bad-4
2987− (check ~.lex-name-bad-4 src-246 `tok-246 `tre-246)
2988−++ test-lex-name-bad-5
2989− (check ~.lex-name-bad-5 src-247 `tok-247 `tre-247)
2990−++ test-lex-name-bad-6
2991− (check ~.lex-name-bad-6 src-248 `tok-248 `tre-248)
2992−++ test-lex-name-ok-1
2993− (check ~.lex-name-ok-1 src-249 `tok-249 `tre-249)
2994−++ test-lex-null-bad-1
2995− (check ~.lex-null-bad-1 src-250 `tok-250 `tre-250)
2996−++ test-lex-null-bad-2
2997− (check ~.lex-null-bad-2 src-251 `tok-251 `tre-251)
2998−++ test-lex-null-ok-1
2999− (check ~.lex-null-ok-1 src-252 `tok-252 `tre-252)
3000−++ test-lex-open-bracket-bad-1
3001− (check ~.lex-open-bracket-bad-1 src-253 `tok-253 `tre-253)
3002−++ test-lex-open-bracket-bad-10
3003− (check ~.lex-open-bracket-bad-10 src-254 `tok-254 `tre-254)
3004−++ test-lex-open-bracket-bad-11
3005− (check ~.lex-open-bracket-bad-11 src-255 `tok-255 `tre-255)
3006−++ test-lex-open-bracket-bad-12
3007− (check ~.lex-open-bracket-bad-12 src-256 `tok-256 `tre-256)
3008−++ test-lex-open-bracket-bad-13
3009− (check ~.lex-open-bracket-bad-13 src-257 `tok-257 `tre-257)
3010−++ test-lex-open-bracket-bad-14
3011− (check ~.lex-open-bracket-bad-14 src-258 `tok-258 `tre-258)
3012−++ test-lex-open-bracket-bad-15
3013− (check ~.lex-open-bracket-bad-15 src-259 `tok-259 `tre-259)
3014−++ test-lex-open-bracket-bad-16
3015− (check ~.lex-open-bracket-bad-16 src-260 `tok-260 `tre-260)
3016−++ test-lex-open-bracket-bad-2
3017− (check ~.lex-open-bracket-bad-2 src-261 `tok-261 `tre-261)
3018−++ test-lex-open-bracket-bad-3
3019− (check ~.lex-open-bracket-bad-3 src-262 `tok-262 `tre-262)
3020−++ test-lex-open-bracket-bad-5
3021− (check ~.lex-open-bracket-bad-5 src-263 `tok-263 `tre-263)
3022−++ test-lex-open-bracket-bad-6
3023− (check ~.lex-open-bracket-bad-6 src-264 `tok-264 `tre-264)
3024−++ test-lex-open-bracket-bad-7
3025− (check ~.lex-open-bracket-bad-7 src-265 `tok-265 `tre-265)
3026−++ test-lex-open-bracket-bad-8
3027− (check ~.lex-open-bracket-bad-8 src-266 `tok-266 `tre-266)
3028−++ test-lex-open-bracket-bad-9
3029− (check ~.lex-open-bracket-bad-9 src-267 `tok-267 `tre-267)
3030−++ test-lex-open-bracket-ok-1
3031− (check ~.lex-open-bracket-ok-1 src-268 `tok-268 `tre-268)
3032−++ test-lex-open-bracket-ok-2
3033− (check ~.lex-open-bracket-ok-2 src-269 `tok-269 `tre-269)
3034−++ test-lex-open-bracket-ok-3
3035− (check ~.lex-open-bracket-ok-3 src-270 `tok-270 `tre-270)
3036−++ test-lex-open-bracket-ok-4
3037− (check ~.lex-open-bracket-ok-4 src-271 `tok-271 `tre-271)
3038−++ test-lex-open-bracket-ok-5
3039− (check ~.lex-open-bracket-ok-5 src-272 `tok-272 `tre-272)
3040−++ test-lex-open-bracket-ok-6
3041− (check ~.lex-open-bracket-ok-6 src-273 `tok-273 `tre-273)
3042−++ test-lex-open-bracket-ok-7
3043− (check ~.lex-open-bracket-ok-7 src-274 `tok-274 `tre-274)
3044−++ test-lex-open-bracket-ok-8
3045− (check ~.lex-open-bracket-ok-8 src-275 `tok-275 `tre-275)
3046−++ test-lex-open-bracket-ok-9
3047− (check ~.lex-open-bracket-ok-9 src-276 `tok-276 `tre-276)
3048−++ test-lex-open-mold-bad-1
3049− (check ~.lex-open-mold-bad-1 src-277 `tok-277 `tre-277)
3050−++ test-lex-open-mold-bad-10
3051− (check ~.lex-open-mold-bad-10 src-278 `tok-278 `tre-278)
3052−++ test-lex-open-mold-bad-11
3053− (check ~.lex-open-mold-bad-11 src-279 `tok-279 `tre-279)
3054−++ test-lex-open-mold-bad-12
3055− (check ~.lex-open-mold-bad-12 src-280 `tok-280 `tre-280)
3056−++ test-lex-open-mold-bad-13
3057− (check ~.lex-open-mold-bad-13 src-281 `tok-281 `tre-281)
3058−++ test-lex-open-mold-bad-14
3059− (check ~.lex-open-mold-bad-14 src-282 `tok-282 `tre-282)
3060−++ test-lex-open-mold-bad-15
3061− (check ~.lex-open-mold-bad-15 src-283 `tok-283 `tre-283)
3062−++ test-lex-open-mold-bad-16
3063− (check ~.lex-open-mold-bad-16 src-284 `tok-284 `tre-284)
3064−++ test-lex-open-mold-bad-2
3065− (check ~.lex-open-mold-bad-2 src-285 `tok-285 `tre-285)
3066−++ test-lex-open-mold-bad-3
3067− (check ~.lex-open-mold-bad-3 src-286 `tok-286 `tre-286)
3068−++ test-lex-open-mold-bad-4
3069− (check ~.lex-open-mold-bad-4 src-287 `tok-287 `tre-287)
3070−++ test-lex-open-mold-bad-5
3071− (check ~.lex-open-mold-bad-5 src-288 `tok-288 `tre-288)
3072−++ test-lex-open-mold-bad-6
3073− (check ~.lex-open-mold-bad-6 src-289 `tok-289 `tre-289)
3074−++ test-lex-open-mold-bad-7
3075− (check ~.lex-open-mold-bad-7 src-290 `tok-290 `tre-290)
3076−++ test-lex-open-mold-bad-8
3077− (check ~.lex-open-mold-bad-8 src-291 `tok-291 `tre-291)
3078−++ test-lex-open-mold-bad-9
3079− (check ~.lex-open-mold-bad-9 src-292 `tok-292 `tre-292)
3080−++ test-lex-open-mold-ok-1
3081− (check ~.lex-open-mold-ok-1 src-293 `tok-293 `tre-293)
3082−++ test-lex-open-mold-ok-2
3083− (check ~.lex-open-mold-ok-2 src-294 `tok-294 `tre-294)
3084−++ test-lex-open-mold-ok-3
3085− (check ~.lex-open-mold-ok-3 src-295 `tok-295 `tre-295)
3086−++ test-lex-open-mold-ok-4
3087− (check ~.lex-open-mold-ok-4 src-296 `tok-296 `tre-296)
3088−++ test-lex-open-mold-ok-5
3089− (check ~.lex-open-mold-ok-5 src-297 `tok-297 `tre-297)
3090−++ test-lex-open-mold-ok-6
3091− (check ~.lex-open-mold-ok-6 src-298 `tok-298 `tre-298)
3092−++ test-lex-pair-binding-bad-1
3093− (check ~.lex-pair-binding-bad-1 src-299 `tok-299 `tre-299)
3094−++ test-lex-pair-binding-ok-1
3095− (check ~.lex-pair-binding-ok-1 src-300 `tok-300 `tre-300)
3096−++ test-lex-path-bad-1
3097− (check ~.lex-path-bad-1 src-301 `tok-301 `tre-301)
3098−++ test-lex-path-ok-1
3099− (check ~.lex-path-ok-1 src-302 `tok-302 `tre-302)
3100−++ test-lex-rune-layout-bad-1
3101− (check ~.lex-rune-layout-bad-1 src-303 `tok-303 `tre-303)
3102−++ test-lex-rune-layout-bad-11
3103− (check ~.lex-rune-layout-bad-11 src-304 `tok-304 `tre-304)
3104−++ test-lex-rune-layout-bad-12
3105− (check ~.lex-rune-layout-bad-12 src-305 `tok-305 `tre-305)
3106−++ test-lex-rune-layout-bad-13
3107− (check ~.lex-rune-layout-bad-13 src-306 `tok-306 `tre-306)
3108−++ test-lex-rune-layout-bad-14
3109− (check ~.lex-rune-layout-bad-14 src-307 `tok-307 `tre-307)
3110−++ test-lex-rune-layout-bad-15
3111− (check ~.lex-rune-layout-bad-15 src-308 `tok-308 `tre-308)
3112−++ test-lex-rune-layout-bad-2
3113− (check ~.lex-rune-layout-bad-2 src-309 `tok-309 `tre-309)
3114−++ test-lex-rune-layout-bad-3
3115− (check ~.lex-rune-layout-bad-3 src-310 `tok-310 `tre-310)
3116−++ test-lex-rune-layout-bad-4
3117− (check ~.lex-rune-layout-bad-4 src-311 `tok-311 `tre-311)
3118−++ test-lex-rune-layout-bad-5
3119− (check ~.lex-rune-layout-bad-5 src-312 `tok-312 `tre-312)
3120−++ test-lex-rune-layout-bad-6
3121− (check ~.lex-rune-layout-bad-6 src-313 `tok-313 `tre-313)
3122−++ test-lex-rune-layout-bad-7
3123− (check ~.lex-rune-layout-bad-7 src-314 `tok-314 `tre-314)
3124−++ test-lex-rune-layout-bad-8
3125− (check ~.lex-rune-layout-bad-8 src-315 `tok-315 `tre-315)
3126−++ test-lex-rune-layout-bad-9
3127− (check ~.lex-rune-layout-bad-9 src-316 `tok-316 `tre-316)
3128−++ test-lex-rune-layout-ok-1
3129− (check ~.lex-rune-layout-ok-1 src-317 `tok-317 `tre-317)
3130−++ test-lex-rune-layout-ok-2
3131− (check ~.lex-rune-layout-ok-2 src-318 `tok-318 `tre-318)
3132−++ test-lex-ship-bad-1
3133− (check ~.lex-ship-bad-1 src-319 `tok-319 `tre-319)
3134−++ test-lex-ship-ok-1
3135− (check ~.lex-ship-ok-1 src-320 `tok-320 `tre-320)
3136−++ test-lex-spacing-bad-1
3137− (check ~.lex-spacing-bad-1 src-321 `tok-321 `tre-321)
3138−++ test-lex-spacing-bad-2
3139− (check ~.lex-spacing-bad-2 src-322 `tok-322 `tre-322)
3140−++ test-lex-spacing-ok-1
3141− (check ~.lex-spacing-ok-1 src-323 `tok-323 `tre-323)
3142−++ test-lex-spacing-ok-2
3143− (check ~.lex-spacing-ok-2 src-324 `tok-324 `tre-324)
3144−++ test-lex-spacing-ok-3
3145− (check ~.lex-spacing-ok-3 src-325 `tok-325 `tre-325)
3146−++ test-lex-string-bad-1
3147− (check ~.lex-string-bad-1 src-326 `tok-326 `tre-326)
3148−++ test-lex-string-bad-2
3149− (check ~.lex-string-bad-2 src-327 `tok-327 `tre-327)
3150−++ test-lex-string-bad-3
3151− (check ~.lex-string-bad-3 src-328 `tok-328 `tre-328)
3152−++ test-lex-string-bad-4
3153− (check ~.lex-string-bad-4 src-329 `tok-329 `tre-329)
3154−++ test-lex-string-bad-5
3155− (check ~.lex-string-bad-5 src-330 `tok-330 `tre-330)
3156−++ test-lex-string-bad-6
3157− (check ~.lex-string-bad-6 src-331 `tok-331 `tre-331)
3158−++ test-lex-string-ok-1
3159− (check ~.lex-string-ok-1 src-332 `tok-332 `tre-332)
3160−++ test-lex-term-bad-1
3161− (check ~.lex-term-bad-1 src-333 `tok-333 `tre-333)
3162−++ test-lex-term-bad-10
3163− (check ~.lex-term-bad-10 src-334 `tok-334 `tre-334)
3164−++ test-lex-term-bad-11
3165− (check ~.lex-term-bad-11 src-335 `tok-335 `tre-335)
3166−++ test-lex-term-bad-12
3167− (check ~.lex-term-bad-12 src-336 `tok-336 `tre-336)
3168−++ test-lex-term-bad-13
3169− (check ~.lex-term-bad-13 src-337 `tok-337 `tre-337)
3170−++ test-lex-term-bad-14
3171− (check ~.lex-term-bad-14 src-338 `tok-338 `tre-338)
3172−++ test-lex-term-bad-15
3173− (check ~.lex-term-bad-15 src-339 `tok-339 `tre-339)
3174−++ test-lex-term-bad-2
3175− (check ~.lex-term-bad-2 src-340 `tok-340 `tre-340)
3176−++ test-lex-term-bad-3
3177− (check ~.lex-term-bad-3 src-341 `tok-341 `tre-341)
3178−++ test-lex-term-bad-4
3179− (check ~.lex-term-bad-4 src-342 `tok-342 `tre-342)
3180−++ test-lex-term-bad-5
3181− (check ~.lex-term-bad-5 src-343 `tok-343 `tre-343)
3182−++ test-lex-term-bad-6
3183− (check ~.lex-term-bad-6 src-344 `tok-344 `tre-344)
3184−++ test-lex-term-bad-7
3185− (check ~.lex-term-bad-7 src-345 `tok-345 `tre-345)
3186−++ test-lex-term-bad-8
3187− (check ~.lex-term-bad-8 src-346 `tok-346 `tre-346)
3188−++ test-lex-term-bad-9
3189− (check ~.lex-term-bad-9 src-347 `tok-347 `tre-347)
3190−++ test-lex-term-dollar
3191− (check ~.lex-term-dollar src-348 `tok-348 `tre-348)
3192−++ test-lex-term-ok-1
3193− (check ~.lex-term-ok-1 src-349 `tok-349 `tre-349)
3194−++ test-lex-tight-change-bad-1
3195− (check ~.lex-tight-change-bad-1 src-350 `tok-350 `tre-350)
3196−++ test-lex-tight-change-bad-2
3197− (check ~.lex-tight-change-bad-2 src-351 `tok-351 `tre-351)
3198−++ test-lex-tight-change-bad-3
3199− (check ~.lex-tight-change-bad-3 src-352 `tok-352 `tre-352)
3200−++ test-lex-tight-change-bad-4
3201− (check ~.lex-tight-change-bad-4 src-353 `tok-353 `tre-353)
3202−++ test-lex-tight-change-bad-5
3203− (check ~.lex-tight-change-bad-5 src-354 `tok-354 `tre-354)
3204−++ test-lex-tight-change-bad-6
3205− (check ~.lex-tight-change-bad-6 src-355 `tok-355 `tre-355)
3206−++ test-lex-tight-change-bad-7
3207− (check ~.lex-tight-change-bad-7 src-356 `tok-356 `tre-356)
3208−++ test-lex-tight-change-bad-8
3209− (check ~.lex-tight-change-bad-8 src-357 `tok-357 `tre-357)
3210−++ test-lex-tight-change-bad-9
3211− (check ~.lex-tight-change-bad-9 src-358 `tok-358 `tre-358)
3212−++ test-lex-tight-change-ok-1
3213− (check ~.lex-tight-change-ok-1 src-359 `tok-359 `tre-359)
3214−++ test-lex-tight-ctor-bad-1
3215− (check ~.lex-tight-ctor-bad-1 src-360 `tok-360 `tre-360)
3216−++ test-lex-tight-ctor-bad-2
3217− (check ~.lex-tight-ctor-bad-2 src-361 `tok-361 `tre-361)
3218−++ test-lex-tight-ctor-ok-1
3219− (check ~.lex-tight-ctor-ok-1 src-362 `tok-362 `tre-362)
3220−++ test-lex-tight-opener-bad-1
3221− (check ~.lex-tight-opener-bad-1 src-363 `tok-363 `tre-363)
3222−++ test-lex-tight-opener-bad-2
3223− (check ~.lex-tight-opener-bad-2 src-364 `tok-364 `tre-364)
3224−++ test-lex-tight-opener-bad-3
3225− (check ~.lex-tight-opener-bad-3 src-365 `tok-365 `tre-365)
3226−++ test-lex-tight-opener-bad-4
3227− (check ~.lex-tight-opener-bad-4 src-366 `tok-366 `tre-366)
3228−++ test-lex-tight-opener-ok-1
3229− (check ~.lex-tight-opener-ok-1 src-367 `tok-367 `tre-367)
3230−++ test-lex-tight-pair-bad-1
3231− (check ~.lex-tight-pair-bad-1 src-368 `tok-368 `tre-368)
3232−++ test-lex-tight-pair-bad-2
3233− (check ~.lex-tight-pair-bad-2 src-369 `tok-369 `tre-369)
3234−++ test-lex-tight-pair-bad-3
3235− (check ~.lex-tight-pair-bad-3 src-370 `tok-370 `tre-370)
3236−++ test-lex-tight-pair-ok-1
3237− (check ~.lex-tight-pair-ok-1 src-371 `tok-371 `tre-371)
3238−++ test-lex-tight-qath-bad-1
3239− (check ~.lex-tight-qath-bad-1 src-372 `tok-372 `tre-372)
3240−++ test-lex-tight-qath-bad-2
3241− (check ~.lex-tight-qath-bad-2 src-373 `tok-373 `tre-373)
3242−++ test-lex-tight-qath-bad-3
3243− (check ~.lex-tight-qath-bad-3 src-374 `tok-374 `tre-374)
3244−++ test-lex-tight-qath-ok-1
3245− (check ~.lex-tight-qath-ok-1 src-375 `tok-375 `tre-375)
3246−++ test-lex-tight-unit-bad-1
3247− (check ~.lex-tight-unit-bad-1 src-376 `tok-376 `tre-376)
3248−++ test-lex-tight-unit-ok-1
3249− (check ~.lex-tight-unit-ok-1 src-377 `tok-377 `tre-377)
3250−++ test-lex-tight-wing-bad-1
3251− (check ~.lex-tight-wing-bad-1 src-378 `tok-378 `tre-378)
3252−++ test-lex-tight-wing-ok-1
3253− (check ~.lex-tight-wing-ok-1 src-379 `tok-379 `tre-379)
3254−++ test-lex-utf8-bad-1
3255− (check ~.lex-utf8-bad-1 src-380 `tok-380 `tre-380)
3256−++ test-lex-utf8-bad-2
3257− (check ~.lex-utf8-bad-2 src-381 `tok-381 `tre-381)
3258−++ test-lex-utf8-ok-1
3259− (check ~.lex-utf8-ok-1 src-382 `tok-382 `tre-382)
3260−++ test-module-cache-dag
3261− (weld (weld (check ~.module-cache-dag src-383 `tok-383 `tre-383) (check-module-types ~.module-cache-dag ~[%tests %golden ~.module-cache-dag %source %jibb] src-383 `typ-383 ~ ~ ~[['/ui/n0.jibb' ~[~.ui ~.n0 ~.jibb] mod-383-1] ['/ui/n1.jibb' ~[~.ui ~.n1 ~.jibb] mod-383-2] ['/ui/n2.jibb' ~[~.ui ~.n2 ~.jibb] mod-383-3] ['/ui/n3.jibb' ~[~.ui ~.n3 ~.jibb] mod-383-4] ['/ui/n4.jibb' ~[~.ui ~.n4 ~.jibb] mod-383-5] ['/ui/n5.jibb' ~[~.ui ~.n5 ~.jibb] mod-383-6] ['/ui/n6.jibb' ~[~.ui ~.n6 ~.jibb] mod-383-7] ['/ui/n7.jibb' ~[~.ui ~.n7 ~.jibb] mod-383-8]])) (check-module-trees ~.module-cache-dag `mtre-383 ~[['/ui/n0.jibb' ~[~.ui ~.n0 ~.jibb] mod-383-1] ['/ui/n1.jibb' ~[~.ui ~.n1 ~.jibb] mod-383-2] ['/ui/n2.jibb' ~[~.ui ~.n2 ~.jibb] mod-383-3] ['/ui/n3.jibb' ~[~.ui ~.n3 ~.jibb] mod-383-4] ['/ui/n4.jibb' ~[~.ui ~.n4 ~.jibb] mod-383-5] ['/ui/n5.jibb' ~[~.ui ~.n5 ~.jibb] mod-383-6] ['/ui/n6.jibb' ~[~.ui ~.n6 ~.jibb] mod-383-7] ['/ui/n7.jibb' ~[~.ui ~.n7 ~.jibb] mod-383-8]]))
3262−++ test-module-cache-faces
3263− (weld (weld (check ~.module-cache-faces src-384 `tok-384 `tre-384) (check-module-types ~.module-cache-faces ~[%tests %golden ~.module-cache-faces %source %jibb] src-384 `typ-384 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-384-1]])) (check-module-trees ~.module-cache-faces `mtre-384 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-384-1]]))
3264−++ test-module-cache-incomplete
3265− (weld (weld (check ~.module-cache-incomplete src-385 `tok-385 `tre-385) (check-module-types ~.module-cache-incomplete ~[%tests %golden ~.module-cache-incomplete %source %jibb] src-385 `typ-385 ~ ~ ~[['/ui/bad.jibb' ~[~.ui ~.bad ~.jibb] mod-385-1]])) (check-module-trees ~.module-cache-incomplete `mtre-385 ~[['/ui/bad.jibb' ~[~.ui ~.bad ~.jibb] mod-385-1]]))
3266−++ test-module-cache-sibling-cycle
3267− (weld (weld (check ~.module-cache-sibling-cycle src-386 `tok-386 `tre-386) (check-module-types ~.module-cache-sibling-cycle ~[%tests %golden ~.module-cache-sibling-cycle %source %jibb] src-386 `typ-386 ~ ~ ~[['/ui/safe.jibb' ~[~.ui ~.safe ~.jibb] mod-386-1] ['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-386-2] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-386-3]])) (check-module-trees ~.module-cache-sibling-cycle `mtre-386 ~[['/ui/safe.jibb' ~[~.ui ~.safe ~.jibb] mod-386-1] ['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-386-2] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-386-3]]))
3268−++ test-module-fixture-eof
3269− (weld (check ~.module-fixture-eof src-387 `tok-387 `tre-387) (check-module-trees ~.module-fixture-eof `mtre-387 ~[['/ui/incomplete.jibb' ~[~.ui ~.incomplete ~.jibb] mod-387-1]]))
3270−++ test-module-import-atom-scheme
3271− (weld (weld (check ~.module-import-atom-scheme src-388 `tok-388 `tre-388) (check-module-types ~.module-import-atom-scheme ~[%tests %golden ~.module-import-atom-scheme %source %jibb] src-388 `typ-388 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-388-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-388-2]])) (check-module-trees ~.module-import-atom-scheme `mtre-388 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-388-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-388-2]]))
3272−++ test-module-import-cycle
3273− (weld (weld (check-at ~.module-import-cycle ~[~.ui ~.main ~.jibb] src-389 `tok-389 `tre-389) (check-module-types ~.module-import-cycle ~[~.ui ~.main ~.jibb] src-389 `typ-389 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-389-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-389-2]])) (check-module-trees ~.module-import-cycle `mtre-389 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-389-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-389-2]]))
3274−++ test-module-import-empty
3275− (weld (check ~.module-import-empty src-390 `tok-390 `tre-390) (check-module-types ~.module-import-empty ~[%tests %golden ~.module-import-empty %source %jibb] src-390 `typ-390 ~ ~ ~))
3276−++ test-module-import-face-shadow
3277− (weld (weld (check ~.module-import-face-shadow src-391 `tok-391 `tre-391) (check-module-types ~.module-import-face-shadow ~[%tests %golden ~.module-import-face-shadow %source %jibb] src-391 `typ-391 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-391-1]])) (check-module-trees ~.module-import-face-shadow `mtre-391 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-391-1]]))
3278−++ test-module-import-identity
3279− (weld (weld (check ~.module-import-identity src-392 `tok-392 `tre-392) (check-module-types ~.module-import-identity ~[%tests %golden ~.module-import-identity %source %jibb] src-392 `typ-392 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-392-1]])) (check-module-trees ~.module-import-identity `mtre-392 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-392-1]]))
3280−++ test-module-import-invalid
3281− (weld (weld (check ~.module-import-invalid src-393 `tok-393 `tre-393) (check-module-types ~.module-import-invalid ~[%tests %golden ~.module-import-invalid %source %jibb] src-393 `typ-393 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-393-1]])) (check-module-trees ~.module-import-invalid `mtre-393 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-393-1]]))
3282−++ test-module-import-missing-member
3283− (weld (weld (check ~.module-import-missing-member src-394 `tok-394 `tre-394) (check-module-types ~.module-import-missing-member ~[%tests %golden ~.module-import-missing-member %source %jibb] src-394 `typ-394 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-394-1]])) (check-module-trees ~.module-import-missing-member `mtre-394 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-394-1]]))
3284−++ test-module-import-mold
3285− (weld (weld (check ~.module-import-mold src-395 `tok-395 `tre-395) (check-module-types ~.module-import-mold ~[%tests %golden ~.module-import-mold %source %jibb] src-395 `typ-395 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-395-1]])) (check-module-trees ~.module-import-mold `mtre-395 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-395-1]]))
3286−++ test-module-import-prelude-cross-namespace
3287− (weld (check ~.module-import-prelude-cross-namespace src-396 `tok-396 `tre-396) (check-module-types ~.module-import-prelude-cross-namespace ~[%tests %golden ~.module-import-prelude-cross-namespace %source %jibb] src-396 `typ-396 ~ ~ ~))
3288−++ test-module-import-prelude-mold-shadow
3289− (weld (check ~.module-import-prelude-mold-shadow src-397 `tok-397 `tre-397) (check-module-types ~.module-import-prelude-mold-shadow ~[%tests %golden ~.module-import-prelude-mold-shadow %source %jibb] src-397 `typ-397 ~ ~ ~))
3290−++ test-module-import-prelude-sample-shadow
3291− (weld (weld (check ~.module-import-prelude-sample-shadow src-398 `tok-398 `tre-398) (check-module-types ~.module-import-prelude-sample-shadow ~[%tests %golden ~.module-import-prelude-sample-shadow %source %jibb] src-398 `typ-398 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-398-1]])) (check-module-trees ~.module-import-prelude-sample-shadow `mtre-398 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-398-1]]))
3292−++ test-module-import-prelude-value-shadow
3293− (weld (weld (check ~.module-import-prelude-value-shadow src-399 `tok-399 `tre-399) (check-module-types ~.module-import-prelude-value-shadow ~[%tests %golden ~.module-import-prelude-value-shadow %source %jibb] src-399 `typ-399 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-399-1]])) (check-module-trees ~.module-import-prelude-value-shadow `mtre-399 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-399-1]]))
3294−++ test-module-import-root-cycle
3295− (weld (weld (check-at ~.module-import-root-cycle ~[~.ui ~.main ~.jibb] src-400 `tok-400 `tre-400) (check-module-types ~.module-import-root-cycle ~[~.ui ~.main ~.jibb] src-400 `typ-400 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-400-1]])) (check-module-trees ~.module-import-root-cycle `mtre-400 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-400-1]]))
3296−++ test-module-import-root-import-shadow
3297− (weld (check ~.module-import-root-import-shadow src-401 `tok-401 `tre-401) (check-module-types ~.module-import-root-import-shadow ~[%tests %golden ~.module-import-root-import-shadow %source %jibb] src-401 `typ-401 ~[[%fixture %title imp-401-1]] ~[[%label mark-401-1]] ~))
3298−++ test-module-import-separate-namespaces
3299− (weld (weld (check ~.module-import-separate-namespaces src-402 `tok-402 `tre-402) (check-module-types ~.module-import-separate-namespaces ~[%tests %golden ~.module-import-separate-namespaces %source %jibb] src-402 `typ-402 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-402-1]])) (check-module-trees ~.module-import-separate-namespaces `mtre-402 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-402-1]]))
3300−++ test-module-import-sur-scope
3301− (weld (weld (check ~.module-import-sur-scope src-403 `tok-403 `tre-403) (check-module-types ~.module-import-sur-scope ~[%tests %golden ~.module-import-sur-scope %source %jibb] src-403 `typ-403 ~[[%fixture %title imp-403-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-403-1]])) (check-module-trees ~.module-import-sur-scope `mtre-403 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-403-1]]))
3302−++ test-module-import-transitive
3303− (weld (weld (check-at ~.module-import-transitive ~[~.ui ~.main ~.jibb] src-404 `tok-404 `tre-404) (check-module-types ~.module-import-transitive ~[~.ui ~.main ~.jibb] src-404 `typ-404 ~ ~ ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-404-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-404-2] ['/ui/c.jibb' ~[~.ui ~.c ~.jibb] mod-404-3]])) (check-module-trees ~.module-import-transitive `mtre-404 ~[['/ui/a.jibb' ~[~.ui ~.a ~.jibb] mod-404-1] ['/ui/b.jibb' ~[~.ui ~.b ~.jibb] mod-404-2] ['/ui/c.jibb' ~[~.ui ~.c ~.jibb] mod-404-3]]))
3304−++ test-module-import-unused-invalid
3305− (weld (weld (check ~.module-import-unused-invalid src-405 `tok-405 `tre-405) (check-module-types ~.module-import-unused-invalid ~[%tests %golden ~.module-import-unused-invalid %source %jibb] src-405 `typ-405 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-405-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-405-2]])) (check-module-trees ~.module-import-unused-invalid `mtre-405 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-405-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-405-2]]))
3306−++ test-parser-hole-parameter-rejected
3307− (check ~.parser-hole-parameter-rejected src-406 `tok-406 `tre-406)
3308−++ test-parser-hole-path
3309− (check ~.parser-hole-path src-407 `tok-407 `tre-407)
3310−++ test-parser-hole-path-space
3311− (check ~.parser-hole-path-space src-408 `tok-408 `tre-408)
3312−++ test-parser-hole-pattern-rejected
3313− (check ~.parser-hole-pattern-rejected src-409 `tok-409 `tre-409)
3314−++ test-parser-hole-shapes
3315− (check ~.parser-hole-shapes src-410 `tok-410 `tre-410)
3316−++ test-parser-hole-value-rejected
3317− (check ~.parser-hole-value-rejected src-411 `tok-411 `tre-411)
3318−++ test-prelude-1c-structural
3319− (weld (check ~.prelude-1c-structural src-412 `tok-412 `tre-412) (check-types ~.prelude-1c-structural ~[%tests %golden ~.prelude-1c-structural %source %jibb] src-412 `typ-412))
3320−++ test-prelude-3g-basic
3321− (weld (check ~.prelude-3g-basic src-413 `tok-413 `tre-413) (check-types ~.prelude-3g-basic ~[%tests %golden ~.prelude-3g-basic %source %jibb] src-413 `typ-413))
3322−++ test-prelude-3g-like
3323− (weld (check ~.prelude-3g-like src-414 `tok-414 `tre-414) (check-types ~.prelude-3g-like ~[%tests %golden ~.prelude-3g-like %source %jibb] src-414 `typ-414))
3324−++ test-prelude-3g-structural
3325− (weld (check ~.prelude-3g-structural src-415 `tok-415 `tre-415) (check-types ~.prelude-3g-structural ~[%tests %golden ~.prelude-3g-structural %source %jibb] src-415 `typ-415))
3326−++ test-prelude-core-functions
3327− (weld (check ~.prelude-core-functions src-416 `tok-416 `tre-416) (check-types ~.prelude-core-functions ~[%tests %golden ~.prelude-core-functions %source %jibb] src-416 `typ-416))
3328−++ test-prelude-list-helpers
3329− (weld (check ~.prelude-list-helpers src-417 `tok-417 `tre-417) (check-types ~.prelude-list-helpers ~[%tests %golden ~.prelude-list-helpers %source %jibb] src-417 `typ-417))
3330−++ test-prelude-list-unit
3331− (weld (check ~.prelude-list-unit src-418 `tok-418 `tre-418) (check-types ~.prelude-list-unit ~[%tests %golden ~.prelude-list-unit %source %jibb] src-418 `typ-418))
3332−++ test-prelude-unit-list-transforms
3333− (weld (check ~.prelude-unit-list-transforms src-419 `tok-419 `tre-419) (check-types ~.prelude-unit-list-transforms ~[%tests %golden ~.prelude-unit-list-transforms %source %jibb] src-419 `typ-419))
3334−++ test-types-arithmetic-combined
3335− (weld (check ~.types-arithmetic-combined src-420 `tok-420 `tre-420) (check-module-types ~.types-arithmetic-combined ~[%tests %golden ~.types-arithmetic-combined %source %jibb] src-420 `typ-420 ~ ~ ~))
3336−++ test-types-arithmetic-generic
3337− (weld (check ~.types-arithmetic-generic src-421 `tok-421 `tre-421) (check-module-types ~.types-arithmetic-generic ~[%tests %golden ~.types-arithmetic-generic %source %jibb] src-421 `typ-421 ~ ~ ~))
3338−++ test-types-arithmetic-module
3339− (weld (weld (check ~.types-arithmetic-module src-422 `tok-422 `tre-422) (check-module-types ~.types-arithmetic-module ~[%tests %golden ~.types-arithmetic-module %source %jibb] src-422 `typ-422 ~ ~ ~[['/ui/math.jibb' ~[~.ui ~.math ~.jibb] mod-422-1]])) (check-module-trees ~.types-arithmetic-module `mtre-422 ~[['/ui/math.jibb' ~[~.ui ~.math ~.jibb] mod-422-1]]))
3340−++ test-types-arithmetic-proj-qath
3341− (weld (check ~.types-arithmetic-proj-qath src-423 `tok-423 `tre-423) (check-module-types ~.types-arithmetic-proj-qath ~[%tests %golden ~.types-arithmetic-proj-qath %source %jibb] src-423 `typ-423 ~ ~ ~))
3342−++ test-types-arithmetic-scopes
3343− (weld (check ~.types-arithmetic-scopes src-424 `tok-424 `tre-424) (check-module-types ~.types-arithmetic-scopes ~[%tests %golden ~.types-arithmetic-scopes %source %jibb] src-424 `typ-424 ~ ~ ~))
3344−++ test-types-capital-distinct
3345− (weld (check ~.types-capital-distinct src-425 `tok-425 `tre-425) (check-types ~.types-capital-distinct ~[%tests %golden ~.types-capital-distinct %source %jibb] src-425 `typ-425))
3346−++ test-types-cell-branch-context
3347− (weld (check ~.types-cell-branch-context src-426 `tok-426 `tre-426) (check-module-types ~.types-cell-branch-context ~[%tests %golden ~.types-cell-branch-context %source %jibb] src-426 `typ-426 ~ ~ ~))
3348−++ test-types-cell-pattern-many
3349− (weld (check ~.types-cell-pattern-many src-427 `tok-427 `tre-427) (check-module-types ~.types-cell-pattern-many ~[%tests %golden ~.types-cell-pattern-many %source %jibb] src-427 `typ-427 ~ ~ ~))
3350−++ test-types-cell-pattern-schemes
3351− (weld (check ~.types-cell-pattern-schemes src-428 `tok-428 `tre-428) (check-module-types ~.types-cell-pattern-schemes ~[%tests %golden ~.types-cell-pattern-schemes %source %jibb] src-428 `typ-428 ~ ~ ~))
3352−++ test-types-cell-pattern-tail
3353− (weld (check ~.types-cell-pattern-tail src-429 `tok-429 `tre-429) (check-module-types ~.types-cell-pattern-tail ~[%tests %golden ~.types-cell-pattern-tail %source %jibb] src-429 `typ-429 ~ ~ ~))
3354−++ test-types-constructor-context
3355− (weld (check ~.types-constructor-context src-430 `tok-430 `tre-430) (check-types ~.types-constructor-context ~[%tests %golden ~.types-constructor-context %source %jibb] src-430 `typ-430))
3356−++ test-types-deferred-call-context
3357− (weld (check ~.types-deferred-call-context src-431 `tok-431 `tre-431) (check-module-types ~.types-deferred-call-context ~[%tests %golden ~.types-deferred-call-context %source %jibb] src-431 `typ-431 ~ ~ ~))
3358−++ test-types-equal-head-disjoint
3359− (weld (check ~.types-equal-head-disjoint src-432 `tok-432 `tre-432) (check-types ~.types-equal-head-disjoint ~[%tests %golden ~.types-equal-head-disjoint %source %jibb] src-432 `typ-432))
3360−++ test-types-flag-branch-context
3361− (weld (check ~.types-flag-branch-context src-433 `tok-433 `tre-433) (check-module-types ~.types-flag-branch-context ~[%tests %golden ~.types-flag-branch-context %source %jibb] src-433 `typ-433 ~ ~ ~))
3362−++ test-types-generic-arity
3363− (weld (check ~.types-generic-arity src-434 `tok-434 `tre-434) (check-types ~.types-generic-arity ~[%tests %golden ~.types-generic-arity %source %jibb] src-434 `typ-434))
3364−++ test-types-generic-face-inference
3365− (weld (check ~.types-generic-face-inference src-435 `tok-435 `tre-435) (check-types ~.types-generic-face-inference ~[%tests %golden ~.types-generic-face-inference %source %jibb] src-435 `typ-435))
3366−++ test-types-generic-gates
3367− (weld (check ~.types-generic-gates src-436 `tok-436 `tre-436) (check-types ~.types-generic-gates ~[%tests %golden ~.types-generic-gates %source %jibb] src-436 `typ-436))
3368−++ test-types-generic-import-reverse
3369− (weld (weld (check ~.types-generic-import-reverse src-437 `tok-437 `tre-437) (check-module-types ~.types-generic-import-reverse ~[%tests %golden ~.types-generic-import-reverse %source %jibb] src-437 `typ-437 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-437-1]])) (check-module-trees ~.types-generic-import-reverse `mtre-437 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-437-1]]))
3370−++ test-types-generic-lexical-alias
3371− (weld (check ~.types-generic-lexical-alias src-438 `tok-438 `tre-438) (check-types ~.types-generic-lexical-alias ~[%tests %golden ~.types-generic-lexical-alias %source %jibb] src-438 `typ-438))
3372−++ test-types-generic-local-parameter
3373− (weld (check ~.types-generic-local-parameter src-439 `tok-439 `tre-439) (check-types ~.types-generic-local-parameter ~[%tests %golden ~.types-generic-local-parameter %source %jibb] src-439 `typ-439))
3374−++ test-types-generic-local-scope
3375− (weld (check ~.types-generic-local-scope src-440 `tok-440 `tre-440) (check-types ~.types-generic-local-scope ~[%tests %golden ~.types-generic-local-scope %source %jibb] src-440 `typ-440))
3376−++ test-types-generic-module
3377− (weld (weld (check ~.types-generic-module src-441 `tok-441 `tre-441) (check-module-types ~.types-generic-module ~[%tests %golden ~.types-generic-module %source %jibb] src-441 `typ-441 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-441-1]])) (check-module-trees ~.types-generic-module `mtre-441 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-441-1]]))
3378−++ test-types-generic-nested-scope
3379− (weld (check ~.types-generic-nested-scope src-442 `tok-442 `tre-442) (check-types ~.types-generic-nested-scope ~[%tests %golden ~.types-generic-nested-scope %source %jibb] src-442 `typ-442))
3380−++ test-types-generic-parameters
3381− (weld (check ~.types-generic-parameters src-443 `tok-443 `tre-443) (check-types ~.types-generic-parameters ~[%tests %golden ~.types-generic-parameters %source %jibb] src-443 `typ-443))
3382−++ test-types-generic-record
3383− (weld (check ~.types-generic-record src-444 `tok-444 `tre-444) (check-types ~.types-generic-record ~[%tests %golden ~.types-generic-record %source %jibb] src-444 `typ-444))
3384−++ test-types-generic-recursive-union
3385− (weld (check ~.types-generic-recursive-union src-445 `tok-445 `tre-445) (check-types ~.types-generic-recursive-union ~[%tests %golden ~.types-generic-recursive-union %source %jibb] src-445 `typ-445))
3386−++ test-types-generic-repeated
3387− (weld (check ~.types-generic-repeated src-446 `tok-446 `tre-446) (check-types ~.types-generic-repeated ~[%tests %golden ~.types-generic-repeated %source %jibb] src-446 `typ-446))
3388−++ test-types-generic-result-context
3389− (weld (check ~.types-generic-result-context src-447 `tok-447 `tre-447) (check-types ~.types-generic-result-context ~[%tests %golden ~.types-generic-result-context %source %jibb] src-447 `typ-447))
3390−++ test-types-generic-union-alias
3391− (weld (check ~.types-generic-union-alias src-448 `tok-448 `tre-448) (check-types ~.types-generic-union-alias ~[%tests %golden ~.types-generic-union-alias %source %jibb] src-448 `typ-448))
3392−++ test-types-generic-union-alias-face
3393− (weld (weld (check ~.types-generic-union-alias-face src-449 `tok-449 `tre-449) (check-module-types ~.types-generic-union-alias-face ~[%tests %golden ~.types-generic-union-alias-face %source %jibb] src-449 `typ-449 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-449-1]])) (check-module-trees ~.types-generic-union-alias-face `mtre-449 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-449-1]]))
3394−++ test-types-generic-union-capitals
3395− (weld (check ~.types-generic-union-capitals src-450 `tok-450 `tre-450) (check-types ~.types-generic-union-capitals ~[%tests %golden ~.types-generic-union-capitals %source %jibb] src-450 `typ-450))
3396−++ test-types-generic-union-errors
3397− (weld (check ~.types-generic-union-errors src-451 `tok-451 `tre-451) (check-types ~.types-generic-union-errors ~[%tests %golden ~.types-generic-union-errors %source %jibb] src-451 `typ-451))
3398−++ test-types-generic-union-escaping
3399− (weld (weld (check ~.types-generic-union-escaping src-452 `tok-452 `tre-452) (check-module-types ~.types-generic-union-escaping ~[%tests %golden ~.types-generic-union-escaping %source %jibb] src-452 `typ-452 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-452-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-452-2]])) (check-module-trees ~.types-generic-union-escaping `mtre-452 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-452-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-452-2]]))
3400−++ test-types-generic-union-import
3401− (weld (weld (check ~.types-generic-union-import src-453 `tok-453 `tre-453) (check-module-types ~.types-generic-union-import ~[%tests %golden ~.types-generic-union-import %source %jibb] src-453 `typ-453 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-453-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-453-2]])) (check-module-trees ~.types-generic-union-import `mtre-453 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-453-1] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-453-2]]))
3402−++ test-types-generic-union-local
3403− (weld (check ~.types-generic-union-local src-454 `tok-454 `tre-454) (check-types ~.types-generic-union-local ~[%tests %golden ~.types-generic-union-local %source %jibb] src-454 `typ-454))
3404−++ test-types-generic-union-transitive
3405− (weld (weld (check ~.types-generic-union-transitive src-455 `tok-455 `tre-455) (check-module-types ~.types-generic-union-transitive ~[%tests %golden ~.types-generic-union-transitive %source %jibb] src-455 `typ-455 ~ ~ ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-455-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-455-2]])) (check-module-trees ~.types-generic-union-transitive `mtre-455 ~[['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-455-1] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-455-2]]))
3406−++ test-types-hole-concrete
3407− (weld (check ~.types-hole-concrete src-456 `tok-456 `tre-456) (check-types ~.types-hole-concrete ~[%tests %golden ~.types-hole-concrete %source %jibb] src-456 `typ-456))
3408−++ test-types-hole-generic-mold
3409− (weld (check ~.types-hole-generic-mold src-457 `tok-457 `tre-457) (check-types ~.types-hole-generic-mold ~[%tests %golden ~.types-hole-generic-mold %source %jibb] src-457 `typ-457))
3410−++ test-types-hole-local-boundary
3411− (weld (check ~.types-hole-local-boundary src-458 `tok-458 `tre-458) (check-types ~.types-hole-local-boundary ~[%tests %golden ~.types-hole-local-boundary %source %jibb] src-458 `typ-458))
3412−++ test-types-hole-module-boundary
3413− (weld (weld (check ~.types-hole-module-boundary src-459 `tok-459 `tre-459) (check-module-types ~.types-hole-module-boundary ~[%tests %golden ~.types-hole-module-boundary %source %jibb] src-459 `typ-459 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-459-1]])) (check-module-trees ~.types-hole-module-boundary `mtre-459 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-459-1]]))
3414−++ test-types-hole-named-complex
3415− (weld (check ~.types-hole-named-complex src-460 `tok-460 `tre-460) (check-types ~.types-hole-named-complex ~[%tests %golden ~.types-hole-named-complex %source %jibb] src-460 `typ-460))
3416−++ test-types-hole-numeric-capture
3417− (weld (check ~.types-hole-numeric-capture src-461 `tok-461 `tre-461) (check-types ~.types-hole-numeric-capture ~[%tests %golden ~.types-hole-numeric-capture %source %jibb] src-461 `typ-461))
3418−++ test-types-hole-unbound-mold
3419− (weld (check ~.types-hole-unbound-mold src-462 `tok-462 `tre-462) (check-types ~.types-hole-unbound-mold ~[%tests %golden ~.types-hole-unbound-mold %source %jibb] src-462 `typ-462))
3420−++ test-types-hole-unsupported
3421− (weld (check ~.types-hole-unsupported src-463 `tok-463 `tre-463) (check-types ~.types-hole-unsupported ~[%tests %golden ~.types-hole-unsupported %source %jibb] src-463 `typ-463))
3422−++ test-types-hole-user-generic
3423− (weld (check ~.types-hole-user-generic src-464 `tok-464 `tre-464) (check-types ~.types-hole-user-generic ~[%tests %golden ~.types-hole-user-generic %source %jibb] src-464 `typ-464))
3424−++ test-types-hole-user-named
3425− (weld (check ~.types-hole-user-named src-465 `tok-465 `tre-465) (check-types ~.types-hole-user-named ~[%tests %golden ~.types-hole-user-named %source %jibb] src-465 `typ-465))
3426−++ test-types-hole-user-value
3427− (weld (check ~.types-hole-user-value src-466 `tok-466 `tre-466) (check-types ~.types-hole-user-value ~[%tests %golden ~.types-hole-user-value %source %jibb] src-466 `typ-466))
3428−++ test-types-import-duplicate-mark
3429− (weld (check ~.types-import-duplicate-mark src-467 `tok-467 `tre-467) (check-mark-types ~.types-import-duplicate-mark ~[%tests %golden ~.types-import-duplicate-mark %source %jibb] src-467 `typ-467 ~ ~[[%duplicate mark-467-1]]))
3430−++ test-types-import-duplicate-sur
3431− (weld (check ~.types-import-duplicate-sur src-468 `tok-468 `tre-468) (check-import-types ~.types-import-duplicate-sur ~[%tests %golden ~.types-import-duplicate-sur %source %jibb] src-468 `typ-468 ~[[%fixture %direct imp-468-1] [%fixture %nested imp-468-2] [%fixture %valid imp-468-3]]))
3432−++ test-types-import-hoon-flags
3433− (weld (check ~.types-import-hoon-flags src-469 `tok-469 `tre-469) (check-import-types ~.types-import-hoon-flags ~[%tests %golden ~.types-import-hoon-flags %source %jibb] src-469 `typ-469 ~[[%flags %flag imp-469-1] [%flags %yes imp-469-2] [%flags %no imp-469-3] [%flags %record imp-469-4]]))
3434−++ test-types-import-hoon-noun
3435− (weld (check ~.types-import-hoon-noun src-470 `tok-470 `tre-470) (check-import-types ~.types-import-hoon-noun ~[%tests %golden ~.types-import-hoon-noun %source %jibb] src-470 `typ-470 ~[[%fixture %any imp-470-1] [%fixture %payload imp-470-2] [%fixture %option imp-470-3] [%fixture %overlap imp-470-4]]))
3436−++ test-types-import-mark
3437− (weld (check ~.types-import-mark src-471 `tok-471 `tre-471) (check-mark-types ~.types-import-mark ~[%tests %golden ~.types-import-mark %source %jibb] src-471 `typ-471 ~[[%fixture %title imp-471-1]] ~[[%label mark-471-1]]))
3438−++ test-types-import-mark-record
3439− (weld (check ~.types-import-mark-record src-472 `tok-472 `tre-472) (check-mark-types ~.types-import-mark-record ~[%tests %golden ~.types-import-mark-record %source %jibb] src-472 `typ-472 ~ ~[[%note mark-472-1] [%choice mark-472-2]]))
3440−++ test-types-import-missing-mold
3441− (weld (check ~.types-import-missing-mold src-473 `tok-473 `tre-473) (check-import-types ~.types-import-missing-mold ~[%tests %golden ~.types-import-missing-mold %source %jibb] src-473 `typ-473 ~[[%fixture %missing imp-473-1]]))
3442−++ test-types-import-sur
3443− (weld (check ~.types-import-sur src-474 `tok-474 `tre-474) (check-import-types ~.types-import-sur ~[%tests %golden ~.types-import-sur %source %jibb] src-474 `typ-474 ~[[%fixture %title imp-474-1] [%fixture %pair imp-474-2]]))
3444−++ test-types-import-sur-record-graph
3445− (weld (weld (check ~.types-import-sur-record-graph src-475 `tok-475 `tre-475) (check-module-types ~.types-import-sur-record-graph ~[%tests %golden ~.types-import-sur-record-graph %source %jibb] src-475 `typ-475 ~[[%fixture %entry imp-475-1]] ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-475-1]])) (check-module-trees ~.types-import-sur-record-graph `mtre-475 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-475-1]]))
3446−++ test-types-import-tlon-notes
3447− (weld (check ~.types-import-tlon-notes src-476 `tok-476 `tre-476) (check-import-types ~.types-import-tlon-notes ~[%tests %golden ~.types-import-tlon-notes %source %jibb] src-476 `typ-476 ~[[%notes %u-note imp-476-1] [%notes %a-note imp-476-2] [%notes %u-notebook imp-476-3] [%notes %u-notes imp-476-4] [%notes %log imp-476-5] [%notes %import-node imp-476-6] [%notes %a-notebook imp-476-7]]))
3448−++ test-types-list-branch
3449− (weld (check ~.types-list-branch src-477 `tok-477 `tre-477) (check-module-types ~.types-list-branch ~[%tests %golden ~.types-list-branch %source %jibb] src-477 `typ-477 ~ ~ ~))
3450−++ test-types-list-cons
3451− (weld (check ~.types-list-cons src-478 `tok-478 `tre-478) (check-module-types ~.types-list-cons ~[%tests %golden ~.types-list-cons %source %jibb] src-478 `typ-478 ~ ~ ~))
3452−++ test-types-list-context
3453− (weld (check ~.types-list-context src-479 `tok-479 `tre-479) (check-module-types ~.types-list-context ~[%tests %golden ~.types-list-context %source %jibb] src-479 `typ-479 ~ ~ ~))
3454−++ test-types-list-imported
3455− (weld (check ~.types-list-imported src-480 `tok-480 `tre-480) (check-module-types ~.types-list-imported ~[%tests %golden ~.types-list-imported %source %jibb] src-480 `typ-480 ~[[%fixture %texts imp-480-1] [%fixture %ships imp-480-2]] ~ ~))
3456−++ test-types-list-open
3457− (weld (check ~.types-list-open src-481 `tok-481 `tre-481) (check-module-types ~.types-list-open ~[%tests %golden ~.types-list-open %source %jibb] src-481 `typ-481 ~ ~ ~))
3458−++ test-types-list-open-constraints
3459− (weld (check ~.types-list-open-constraints src-482 `tok-482 `tre-482) (check-module-types ~.types-list-open-constraints ~[%tests %golden ~.types-list-open-constraints %source %jibb] src-482 `typ-482 ~ ~ ~))
3460−++ test-types-list-pattern-imported
3461− (weld (check ~.types-list-pattern-imported src-483 `tok-483 `tre-483) (check-module-types ~.types-list-pattern-imported ~[%tests %golden ~.types-list-pattern-imported %source %jibb] src-483 `typ-483 ~[[%fixture %texts imp-483-1] [%fixture %text-set imp-483-2]] ~ ~))
3462−++ test-types-list-patterns
3463− (weld (check ~.types-list-patterns src-484 `tok-484 `tre-484) (check-module-types ~.types-list-patterns ~[%tests %golden ~.types-list-patterns %source %jibb] src-484 `typ-484 ~ ~ ~))
3464−++ test-types-list-zero-fit
3465− (weld (check ~.types-list-zero-fit src-485 `tok-485 `tre-485) (check-module-types ~.types-list-zero-fit ~[%tests %golden ~.types-list-zero-fit %source %jibb] src-485 `typ-485 ~ ~ ~))
3466−++ test-types-literal-constructor-nouns
3467− (weld (check ~.types-literal-constructor-nouns src-486 `tok-486 `tre-486) (check-types ~.types-literal-constructor-nouns ~[%tests %golden ~.types-literal-constructor-nouns %source %jibb] src-486 `typ-486))
3468−++ test-types-local-capitals
3469− (weld (check ~.types-local-capitals src-487 `tok-487 `tre-487) (check-module-types ~.types-local-capitals ~[%tests %golden ~.types-local-capitals %source %jibb] src-487 `typ-487 ~ ~ ~))
3470−++ test-types-local-recursive
3471− (weld (check ~.types-local-recursive src-488 `tok-488 `tre-488) (check-module-types ~.types-local-recursive ~[%tests %golden ~.types-local-recursive %source %jibb] src-488 `typ-488 ~ ~ ~))
3472−++ test-types-local-scc
3473− (weld (check ~.types-local-scc src-489 `tok-489 `tre-489) (check-module-types ~.types-local-scc ~[%tests %golden ~.types-local-scc %source %jibb] src-489 `typ-489 ~ ~ ~))
3474−++ test-types-local-scc-adversarial
3475− (weld (check ~.types-local-scc-adversarial src-490 `tok-490 `tre-490) (check-module-types ~.types-local-scc-adversarial ~[%tests %golden ~.types-local-scc-adversarial %source %jibb] src-490 `typ-490 ~ ~ ~))
3476−++ test-types-loobean-singleton-source
3477− (weld (check ~.types-loobean-singleton-source src-491 `tok-491 `tre-491) (check-types ~.types-loobean-singleton-source ~[%tests %golden ~.types-loobean-singleton-source %source %jibb] src-491 `typ-491))
3478−++ test-types-loobean-union-context
3479− (weld (check ~.types-loobean-union-context src-492 `tok-492 `tre-492) (check-types ~.types-loobean-union-context ~[%tests %golden ~.types-loobean-union-context %source %jibb] src-492 `typ-492))
3480−++ test-types-missing-tag-context
3481− (weld (check ~.types-missing-tag-context src-493 `tok-493 `tre-493) (check-module-types ~.types-missing-tag-context ~[%tests %golden ~.types-missing-tag-context %source %jibb] src-493 `typ-493 ~ ~ ~))
3482−++ test-types-missing-tag-imported
3483− (weld (check ~.types-missing-tag-imported src-494 `tok-494 `tre-494) (check-import-types ~.types-missing-tag-imported ~[%tests %golden ~.types-missing-tag-imported %source %jibb] src-494 `typ-494 ~[[%fixture %choice imp-494-1] [%fixture %nested-choice imp-494-2]]))
3484−++ test-types-missing-tag-named
3485− (weld (check ~.types-missing-tag-named src-495 `tok-495 `tre-495) (check-module-types ~.types-missing-tag-named ~[%tests %golden ~.types-missing-tag-named %source %jibb] src-495 `typ-495 ~ ~ ~))
3486−++ test-types-module-field-duplicate
3487− (weld (weld (check ~.types-module-field-duplicate src-496 `tok-496 `tre-496) (check-module-types ~.types-module-field-duplicate ~[%tests %golden ~.types-module-field-duplicate %source %jibb] src-496 `typ-496 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-496-1]])) (check-module-trees ~.types-module-field-duplicate `mtre-496 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-496-1]]))
3488−++ test-types-module-field-nonrecord
3489− (weld (weld (check ~.types-module-field-nonrecord src-497 `tok-497 `tre-497) (check-module-types ~.types-module-field-nonrecord ~[%tests %golden ~.types-module-field-nonrecord %source %jibb] src-497 `typ-497 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-497-1]])) (check-module-trees ~.types-module-field-nonrecord `mtre-497 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-497-1]]))
3490−++ test-types-module-field-path
3491− (weld (weld (check ~.types-module-field-path src-498 `tok-498 `tre-498) (check-module-types ~.types-module-field-path ~[%tests %golden ~.types-module-field-path %source %jibb] src-498 `typ-498 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-498-1]])) (check-module-trees ~.types-module-field-path `mtre-498 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-498-1]]))
3492−++ test-types-module-field-shadow
3493− (weld (weld (check ~.types-module-field-shadow src-499 `tok-499 `tre-499) (check-module-types ~.types-module-field-shadow ~[%tests %golden ~.types-module-field-shadow %source %jibb] src-499 `typ-499 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-499-1]])) (check-module-trees ~.types-module-field-shadow `mtre-499 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-499-1]]))
3494−++ test-types-module-fixtures
3495− (weld (weld (check-at ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-500 `tok-500 `tre-500) (check-module-types ~.types-module-fixtures ~[~.ui ~.blog ~.index ~.jibb] src-500 `typ-500 ~ ~ ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-500-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-500-2]])) (check-module-trees ~.types-module-fixtures `mtre-500 ~[['/ui/api/blog.jibb' ~[~.ui ~.api ~.blog ~.jibb] mod-500-1] ['/ui/components/card.jibb' ~[~.ui ~.components ~.card ~.jibb] mod-500-2]]))
3496−++ test-types-module-mixed
3497− (weld (weld (check ~.types-module-mixed src-501 `tok-501 `tre-501) (check-module-types ~.types-module-mixed ~[%tests %golden ~.types-module-mixed %source %jibb] src-501 `typ-501 ~[[%fixture %title imp-501-1]] ~[[%label mark-501-1]] ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-501-1]])) (check-module-trees ~.types-module-mixed `mtre-501 ~[['/ui/helper.jibb' ~[~.ui ~.helper ~.jibb] mod-501-1]]))
3498−++ test-types-multi-call
3499− (weld (check ~.types-multi-call src-502 `tok-502 `tre-502) (check-module-types ~.types-multi-call ~[%tests %golden ~.types-multi-call %source %jibb] src-502 `typ-502 ~ ~ ~))
3500−++ test-types-multi-import
3501− (weld (weld (check ~.types-multi-import src-503 `tok-503 `tre-503) (check-module-types ~.types-multi-import ~[%tests %golden ~.types-multi-import %source %jibb] src-503 `typ-503 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-503-1]])) (check-module-trees ~.types-multi-import `mtre-503 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-503-1]]))
3502−++ test-types-nested-missing-tag
3503− (weld (check ~.types-nested-missing-tag src-504 `tok-504 `tre-504) (check-module-types ~.types-nested-missing-tag ~[%tests %golden ~.types-nested-missing-tag %source %jibb] src-504 `typ-504 ~ ~ ~))
3504−++ test-types-nested-noun-context
3505− (weld (check ~.types-nested-noun-context src-505 `tok-505 `tre-505) (check-types ~.types-nested-noun-context ~[%tests %golden ~.types-nested-noun-context %source %jibb] src-505 `typ-505))
3506−++ test-types-nested-shallow-preserve
3507− (weld (check ~.types-nested-shallow-preserve src-506 `tok-506 `tre-506) (check-module-types ~.types-nested-shallow-preserve ~[%tests %golden ~.types-nested-shallow-preserve %source %jibb] src-506 `typ-506 ~ ~ ~))
3508−++ test-types-nested-union-context
3509− (weld (check ~.types-nested-union-context src-507 `tok-507 `tre-507) (check-types ~.types-nested-union-context ~[%tests %golden ~.types-nested-union-context %source %jibb] src-507 `typ-507))
3510−++ test-types-null-context
3511− (weld (check ~.types-null-context src-508 `tok-508 `tre-508) (check-types ~.types-null-context ~[%tests %golden ~.types-null-context %source %jibb] src-508 `typ-508))
3512−++ test-types-null-overlap
3513− (weld (check ~.types-null-overlap src-509 `tok-509 `tre-509) (check-types ~.types-null-overlap ~[%tests %golden ~.types-null-overlap %source %jibb] src-509 `typ-509))
3514−++ test-types-null-unresolved
3515− (weld (check ~.types-null-unresolved src-510 `tok-510 `tre-510) (check-types ~.types-null-unresolved ~[%tests %golden ~.types-null-unresolved %source %jibb] src-510 `typ-510))
3516−++ test-types-pair-context
3517− (weld (check ~.types-pair-context src-511 `tok-511 `tre-511) (check-module-types ~.types-pair-context ~[%tests %golden ~.types-pair-context %source %jibb] src-511 `typ-511 ~ ~ ~))
3518−++ test-types-partial-apply
3519− (weld (check ~.types-partial-apply src-512 `tok-512 `tre-512) (check-types ~.types-partial-apply ~[%tests %golden ~.types-partial-apply %source %jibb] src-512 `typ-512))
3520−++ test-types-partial-atom-alias
3521− (weld (check ~.types-partial-atom-alias src-513 `tok-513 `tre-513) (check-types ~.types-partial-atom-alias ~[%tests %golden ~.types-partial-atom-alias %source %jibb] src-513 `typ-513))
3522−++ test-types-partial-atom-constraint
3523− (weld (check ~.types-partial-atom-constraint src-514 `tok-514 `tre-514) (check-types ~.types-partial-atom-constraint ~[%tests %golden ~.types-partial-atom-constraint %source %jibb] src-514 `typ-514))
3524−++ test-types-partial-atom-widening
3525− (weld (check ~.types-partial-atom-widening src-515 `tok-515 `tre-515) (check-types ~.types-partial-atom-widening ~[%tests %golden ~.types-partial-atom-widening %source %jibb] src-515 `typ-515))
3526−++ test-types-partial-aura
3527− (weld (check ~.types-partial-aura src-516 `tok-516 `tre-516) (check-types ~.types-partial-aura ~[%tests %golden ~.types-partial-aura %source %jibb] src-516 `typ-516))
3528−++ test-types-partial-aura-family
3529− (weld (check ~.types-partial-aura-family src-517 `tok-517 `tre-517) (check-types ~.types-partial-aura-family ~[%tests %golden ~.types-partial-aura-family %source %jibb] src-517 `typ-517))
3530−++ test-types-partial-aura-generalization
3531− (weld (check ~.types-partial-aura-generalization src-518 `tok-518 `tre-518) (check-types ~.types-partial-aura-generalization ~[%tests %golden ~.types-partial-aura-generalization %source %jibb] src-518 `typ-518))
3532−++ test-types-partial-bare-atom
3533− (weld (check ~.types-partial-bare-atom src-519 `tok-519 `tre-519) (check-types ~.types-partial-bare-atom ~[%tests %golden ~.types-partial-bare-atom %source %jibb] src-519 `typ-519))
3534−++ test-types-partial-branch-widening
3535− (weld (check ~.types-partial-branch-widening src-520 `tok-520 `tre-520) (check-types ~.types-partial-branch-widening ~[%tests %golden ~.types-partial-branch-widening %source %jibb] src-520 `typ-520))
3536−++ test-types-partial-conflicting-sites
3537− (weld (check ~.types-partial-conflicting-sites src-521 `tok-521 `tre-521) (check-types ~.types-partial-conflicting-sites ~[%tests %golden ~.types-partial-conflicting-sites %source %jibb] src-521 `typ-521))
3538−++ test-types-partial-decimal-default
3539− (weld (check ~.types-partial-decimal-default src-522 `tok-522 `tre-522) (check-types ~.types-partial-decimal-default ~[%tests %golden ~.types-partial-decimal-default %source %jibb] src-522 `typ-522))
3540−++ test-types-partial-dependency-chain
3541− (weld (check ~.types-partial-dependency-chain src-523 `tok-523 `tre-523) (check-types ~.types-partial-dependency-chain ~[%tests %golden ~.types-partial-dependency-chain %source %jibb] src-523 `typ-523))
3542−++ test-types-partial-explicit-capital
3543− (weld (check ~.types-partial-explicit-capital src-524 `tok-524 `tre-524) (check-types ~.types-partial-explicit-capital ~[%tests %golden ~.types-partial-explicit-capital %source %jibb] src-524 `typ-524))
3544−++ test-types-partial-forward
3545− (weld (check ~.types-partial-forward src-525 `tok-525 `tre-525) (check-types ~.types-partial-forward ~[%tests %golden ~.types-partial-forward %source %jibb] src-525 `typ-525))
3546−++ test-types-partial-generalization
3547− (weld (check ~.types-partial-generalization src-526 `tok-526 `tre-526) (check-types ~.types-partial-generalization ~[%tests %golden ~.types-partial-generalization %source %jibb] src-526 `typ-526))
3548−++ test-types-partial-identity
3549− (weld (check ~.types-partial-identity src-527 `tok-527 `tre-527) (check-types ~.types-partial-identity ~[%tests %golden ~.types-partial-identity %source %jibb] src-527 `typ-527))
3550−++ test-types-partial-independent-atoms
3551− (weld (check ~.types-partial-independent-atoms src-528 `tok-528 `tre-528) (check-types ~.types-partial-independent-atoms ~[%tests %golden ~.types-partial-independent-atoms %source %jibb] src-528 `typ-528))
3552−++ test-types-partial-local-molds
3553− (weld (check ~.types-partial-local-molds src-529 `tok-529 `tre-529) (check-types ~.types-partial-local-molds ~[%tests %golden ~.types-partial-local-molds %source %jibb] src-529 `typ-529))
3554−++ test-types-partial-locals
3555− (weld (check ~.types-partial-locals src-530 `tok-530 `tre-530) (check-types ~.types-partial-locals ~[%tests %golden ~.types-partial-locals %source %jibb] src-530 `typ-530))
3556−++ test-types-partial-many-atom-constraints
3557− (weld (check ~.types-partial-many-atom-constraints src-531 `tok-531 `tre-531) (check-types ~.types-partial-many-atom-constraints ~[%tests %golden ~.types-partial-many-atom-constraints %source %jibb] src-531 `typ-531))
3558−++ test-types-partial-mold-bare-aura
3559− (weld (check ~.types-partial-mold-bare-aura src-532 `tok-532 `tre-532) (check-types ~.types-partial-mold-bare-aura ~[%tests %golden ~.types-partial-mold-bare-aura %source %jibb] src-532 `typ-532))
3560−++ test-types-partial-mold-composite
3561− (weld (check ~.types-partial-mold-composite src-533 `tok-533 `tre-533) (check-types ~.types-partial-mold-composite ~[%tests %golden ~.types-partial-mold-composite %source %jibb] src-533 `typ-533))
3562−++ test-types-partial-mold-forward
3563− (weld (check ~.types-partial-mold-forward src-534 `tok-534 `tre-534) (check-types ~.types-partial-mold-forward ~[%tests %golden ~.types-partial-mold-forward %source %jibb] src-534 `typ-534))
3564−++ test-types-partial-mold-recursive
3565− (weld (check ~.types-partial-mold-recursive src-535 `tok-535 `tre-535) (check-types ~.types-partial-mold-recursive ~[%tests %golden ~.types-partial-mold-recursive %source %jibb] src-535 `typ-535))
3566−++ test-types-partial-occurs
3567− (weld (check ~.types-partial-occurs src-536 `tok-536 `tre-536) (check-types ~.types-partial-occurs ~[%tests %golden ~.types-partial-occurs %source %jibb] src-536 `typ-536))
3568−++ test-types-partial-projection
3569− (weld (check ~.types-partial-projection src-537 `tok-537 `tre-537) (check-types ~.types-partial-projection ~[%tests %golden ~.types-partial-projection %source %jibb] src-537 `typ-537))
3570−++ test-types-partial-shadow-global
3571− (weld (check ~.types-partial-shadow-global src-538 `tok-538 `tre-538) (check-types ~.types-partial-shadow-global ~[%tests %golden ~.types-partial-shadow-global %source %jibb] src-538 `typ-538))
3572−++ test-types-partial-shared-tvar
3573− (weld (check ~.types-partial-shared-tvar src-539 `tok-539 `tre-539) (check-types ~.types-partial-shared-tvar ~[%tests %golden ~.types-partial-shared-tvar %source %jibb] src-539 `typ-539))
3574−++ test-types-partial-union-cases
3575− (weld (check ~.types-partial-union-cases src-540 `tok-540 `tre-540) (check-types ~.types-partial-union-cases ~[%tests %golden ~.types-partial-union-cases %source %jibb] src-540 `typ-540))
3576−++ test-types-partial-union-edges
3577− (weld (check ~.types-partial-union-edges src-541 `tok-541 `tre-541) (check-types ~.types-partial-union-edges ~[%tests %golden ~.types-partial-union-edges %source %jibb] src-541 `typ-541))
3578−++ test-types-partial-union-nested-nouns
3579− (weld (check ~.types-partial-union-nested-nouns src-542 `tok-542 `tre-542) (check-types ~.types-partial-union-nested-nouns ~[%tests %golden ~.types-partial-union-nested-nouns %source %jibb] src-542 `typ-542))
3580−++ test-types-partial-unresolved-tag
3581− (weld (check ~.types-partial-unresolved-tag src-543 `tok-543 `tre-543) (check-types ~.types-partial-unresolved-tag ~[%tests %golden ~.types-partial-unresolved-tag %source %jibb] src-543 `typ-543))
3582−++ test-types-positional-faces
3583− (weld (check ~.types-positional-faces src-544 `tok-544 `tre-544) (check-types ~.types-positional-faces ~[%tests %golden ~.types-positional-faces %source %jibb] src-544 `typ-544))
3584−++ test-types-prelude-arithmetic
3585− (weld (check ~.types-prelude-arithmetic src-545 `tok-545 `tre-545) (check-module-types ~.types-prelude-arithmetic ~[%tests %golden ~.types-prelude-arithmetic %source %jibb] src-545 `typ-545 ~ ~ ~))
3586−++ test-types-prelude-ask
3587− (weld (check ~.types-prelude-ask src-546 `tok-546 `tre-546) (check-module-types ~.types-prelude-ask ~[%tests %golden ~.types-prelude-ask %source %jibb] src-546 `typ-546 ~ ~ ~))
3588−++ test-types-prelude-bond
3589− (weld (check ~.types-prelude-bond src-547 `tok-547 `tre-547) (check-module-types ~.types-prelude-bond ~[%tests %golden ~.types-prelude-bond %source %jibb] src-547 `typ-547 ~ ~ ~))
3590−++ test-types-prelude-cmd
3591− (weld (check ~.types-prelude-cmd src-548 `tok-548 `tre-548) (check-module-types ~.types-prelude-cmd ~[%tests %golden ~.types-prelude-cmd %source %jibb] src-548 `typ-548 ~ ~ ~))
3592−++ test-types-prelude-comparison
3593− (weld (check ~.types-prelude-comparison src-549 `tok-549 `tre-549) (check-module-types ~.types-prelude-comparison ~[%tests %golden ~.types-prelude-comparison %source %jibb] src-549 `typ-549 ~ ~ ~))
3594−++ test-types-prelude-direct
3595− (weld (check ~.types-prelude-direct src-550 `tok-550 `tre-550) (check-module-types ~.types-prelude-direct ~[%tests %golden ~.types-prelude-direct %source %jibb] src-550 `typ-550 ~ ~ ~))
3596−++ test-types-prelude-functional
3597− (weld (check ~.types-prelude-functional src-551 `tok-551 `tre-551) (check-module-types ~.types-prelude-functional ~[%tests %golden ~.types-prelude-functional %source %jibb] src-551 `typ-551 ~ ~ ~))
3598−++ test-types-prelude-generic-alias
3599− (weld (weld (check ~.types-prelude-generic-alias src-552 `tok-552 `tre-552) (check-module-types ~.types-prelude-generic-alias ~[%tests %golden ~.types-prelude-generic-alias %source %jibb] src-552 `typ-552 ~ ~ ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-552-1]])) (check-module-trees ~.types-prelude-generic-alias `mtre-552 ~[['/ui/alias-helper.jibb' ~[~.ui ~.alias-helper ~.jibb] mod-552-1]]))
3600−++ test-types-prelude-interface
3601− (weld (weld (check ~.types-prelude-interface src-553 `tok-553 `tre-553) (check-module-types ~.types-prelude-interface ~[%tests %golden ~.types-prelude-interface %source %jibb] src-553 `typ-553 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-553-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-553-2]])) (check-module-trees ~.types-prelude-interface `mtre-553 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-553-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-553-2]]))
3602−++ test-types-prelude-lead-late
3603− (weld (check ~.types-prelude-lead-late src-554 `tok-554 `tre-554) (check-module-types ~.types-prelude-lead-late ~[%tests %golden ~.types-prelude-lead-late %source %jibb] src-554 `typ-554 ~ ~ ~))
3604−++ test-types-prelude-lent
3605− (weld (check ~.types-prelude-lent src-555 `tok-555 `tre-555) (check-module-types ~.types-prelude-lent ~[%tests %golden ~.types-prelude-lent %source %jibb] src-555 `typ-555 ~ ~ ~))
3606−++ test-types-prelude-like
3607− (weld (check ~.types-prelude-like src-556 `tok-556 `tre-556) (check-module-types ~.types-prelude-like ~[%tests %golden ~.types-prelude-like %source %jibb] src-556 `typ-556 ~ ~ ~))
3608−++ test-types-prelude-list-alias
3609− (weld (check ~.types-prelude-list-alias src-557 `tok-557 `tre-557) (check-module-types ~.types-prelude-list-alias ~[%tests %golden ~.types-prelude-list-alias %source %jibb] src-557 `typ-557 ~ ~ ~))
3610−++ test-types-prelude-list-functions
3611− (weld (weld (check ~.types-prelude-list-functions src-558 `tok-558 `tre-558) (check-module-types ~.types-prelude-list-functions ~[%tests %golden ~.types-prelude-list-functions %source %jibb] src-558 `typ-558 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-558-1]])) (check-module-trees ~.types-prelude-list-functions `mtre-558 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-558-1]]))
3612−++ test-types-prelude-list-helpers
3613− (weld (check ~.types-prelude-list-helpers src-559 `tok-559 `tre-559) (check-module-types ~.types-prelude-list-helpers ~[%tests %golden ~.types-prelude-list-helpers %source %jibb] src-559 `typ-559 ~ ~ ~))
3614−++ test-types-prelude-predicates
3615− (weld (check ~.types-prelude-predicates src-560 `tok-560 `tre-560) (check-module-types ~.types-prelude-predicates ~[%tests %golden ~.types-prelude-predicates %source %jibb] src-560 `typ-560 ~ ~ ~))
3616−++ test-types-prelude-sub
3617− (weld (check ~.types-prelude-sub src-561 `tok-561 `tre-561) (check-module-types ~.types-prelude-sub ~[%tests %golden ~.types-prelude-sub %source %jibb] src-561 `typ-561 ~ ~ ~))
3618−++ test-types-prelude-sub-nested
3619− (weld (check ~.types-prelude-sub-nested src-562 `tok-562 `tre-562) (check-module-types ~.types-prelude-sub-nested ~[%tests %golden ~.types-prelude-sub-nested %source %jibb] src-562 `typ-562 ~ ~ ~))
3620−++ test-types-prelude-succ
3621− (weld (check ~.types-prelude-succ src-563 `tok-563 `tre-563) (check-module-types ~.types-prelude-succ ~[%tests %golden ~.types-prelude-succ %source %jibb] src-563 `typ-563 ~ ~ ~))
3622−++ test-types-prelude-text
3623− (weld (check ~.types-prelude-text src-564 `tok-564 `tre-564) (check-module-types ~.types-prelude-text ~[%tests %golden ~.types-prelude-text %source %jibb] src-564 `typ-564 ~ ~ ~))
3624−++ test-types-prelude-ui
3625− (weld (check ~.types-prelude-ui src-565 `tok-565 `tre-565) (check-module-types ~.types-prelude-ui ~[%tests %golden ~.types-prelude-ui %source %jibb] src-565 `typ-565 ~ ~ ~))
3626−++ test-types-prelude-unit-helpers
3627− (weld (check ~.types-prelude-unit-helpers src-566 `tok-566 `tre-566) (check-module-types ~.types-prelude-unit-helpers ~[%tests %golden ~.types-prelude-unit-helpers %source %jibb] src-566 `typ-566 ~ ~ ~))
3628−++ test-types-prelude-zing
3629− (weld (check ~.types-prelude-zing src-567 `tok-567 `tre-567) (check-module-types ~.types-prelude-zing ~[%tests %golden ~.types-prelude-zing %source %jibb] src-567 `typ-567 ~ ~ ~))
3630−++ test-types-proj-explicit-context
3631− (weld (check ~.types-proj-explicit-context src-568 `tok-568 `tre-568) (check-module-types ~.types-proj-explicit-context ~[%tests %golden ~.types-proj-explicit-context %source %jibb] src-568 `typ-568 ~ ~ ~))
3632−++ test-types-proj-nested-no-implicit
3633− (weld (check ~.types-proj-nested-no-implicit src-569 `tok-569 `tre-569) (check-module-types ~.types-proj-nested-no-implicit ~[%tests %golden ~.types-proj-nested-no-implicit %source %jibb] src-569 `typ-569 ~ ~ ~))
3634−++ test-types-proj-reserved-imported-definition
3635− (weld (weld (check ~.types-proj-reserved-imported-definition src-570 `tok-570 `tre-570) (check-module-types ~.types-proj-reserved-imported-definition ~[%tests %golden ~.types-proj-reserved-imported-definition %source %jibb] src-570 `typ-570 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-570-1]])) (check-module-trees ~.types-proj-reserved-imported-definition `mtre-570 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-570-1]]))
3636−++ test-types-proj-reserved-jibb-import
3637− (weld (weld (check ~.types-proj-reserved-jibb-import src-571 `tok-571 `tre-571) (check-module-types ~.types-proj-reserved-jibb-import ~[%tests %golden ~.types-proj-reserved-jibb-import %source %jibb] src-571 `typ-571 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-571-1]])) (check-module-trees ~.types-proj-reserved-jibb-import `mtre-571 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-571-1]]))
3638−++ test-types-proj-reserved-local
3639− (weld (check ~.types-proj-reserved-local src-572 `tok-572 `tre-572) (check-module-types ~.types-proj-reserved-local ~[%tests %golden ~.types-proj-reserved-local %source %jibb] src-572 `typ-572 ~ ~ ~))
3640−++ test-types-proj-reserved-local-mold
3641− (weld (check ~.types-proj-reserved-local-mold src-573 `tok-573 `tre-573) (check-module-types ~.types-proj-reserved-local-mold ~[%tests %golden ~.types-proj-reserved-local-mold %source %jibb] src-573 `typ-573 ~ ~ ~))
3642−++ test-types-proj-reserved-mark-import
3643− (weld (check ~.types-proj-reserved-mark-import src-574 `tok-574 `tre-574) (check-module-types ~.types-proj-reserved-mark-import ~[%tests %golden ~.types-proj-reserved-mark-import %source %jibb] src-574 `typ-574 ~ ~ ~))
3644−++ test-types-proj-reserved-mold
3645− (weld (check ~.types-proj-reserved-mold src-575 `tok-575 `tre-575) (check-module-types ~.types-proj-reserved-mold ~[%tests %golden ~.types-proj-reserved-mold %source %jibb] src-575 `typ-575 ~ ~ ~))
3646−++ test-types-proj-reserved-pattern
3647− (weld (check ~.types-proj-reserved-pattern src-576 `tok-576 `tre-576) (check-module-types ~.types-proj-reserved-pattern ~[%tests %golden ~.types-proj-reserved-pattern %source %jibb] src-576 `typ-576 ~ ~ ~))
3648−++ test-types-proj-reserved-positive
3649− (weld (check ~.types-proj-reserved-positive src-577 `tok-577 `tre-577) (check-module-types ~.types-proj-reserved-positive ~[%tests %golden ~.types-proj-reserved-positive %source %jibb] src-577 `typ-577 ~ ~ ~))
3650−++ test-types-proj-reserved-sample
3651− (weld (check ~.types-proj-reserved-sample src-578 `tok-578 `tre-578) (check-module-types ~.types-proj-reserved-sample ~[%tests %golden ~.types-proj-reserved-sample %source %jibb] src-578 `typ-578 ~ ~ ~))
3652−++ test-types-proj-reserved-sur-import
3653− (weld (check ~.types-proj-reserved-sur-import src-579 `tok-579 `tre-579) (check-module-types ~.types-proj-reserved-sur-import ~[%tests %golden ~.types-proj-reserved-sur-import %source %jibb] src-579 `typ-579 ~ ~ ~))
3654−++ test-types-proj-reserved-unused-pattern
3655− (weld (check ~.types-proj-reserved-unused-pattern src-580 `tok-580 `tre-580) (check-module-types ~.types-proj-reserved-unused-pattern ~[%tests %golden ~.types-proj-reserved-unused-pattern %source %jibb] src-580 `typ-580 ~ ~ ~))
3656−++ test-types-proj-reserved-unused-sample
3657− (weld (check ~.types-proj-reserved-unused-sample src-581 `tok-581 `tre-581) (check-module-types ~.types-proj-reserved-unused-sample ~[%tests %golden ~.types-proj-reserved-unused-sample %source %jibb] src-581 `typ-581 ~ ~ ~))
3658−++ test-types-proj-reserved-unused-value
3659− (weld (check ~.types-proj-reserved-unused-value src-582 `tok-582 `tre-582) (check-module-types ~.types-proj-reserved-unused-value ~[%tests %golden ~.types-proj-reserved-unused-value %source %jibb] src-582 `typ-582 ~ ~ ~))
3660−++ test-types-proj-reserved-value
3661− (weld (check ~.types-proj-reserved-value src-583 `tok-583 `tre-583) (check-module-types ~.types-proj-reserved-value ~[%tests %golden ~.types-proj-reserved-value %source %jibb] src-583 `typ-583 ~ ~ ~))
3662−++ test-types-proj-single-duplicate
3663− (weld (check ~.types-proj-single-duplicate src-584 `tok-584 `tre-584) (check-module-types ~.types-proj-single-duplicate ~[%tests %golden ~.types-proj-single-duplicate %source %jibb] src-584 `typ-584 ~ ~ ~))
3664−++ test-types-proj-single-field
3665− (weld (check ~.types-proj-single-field src-585 `tok-585 `tre-585) (check-module-types ~.types-proj-single-field ~[%tests %golden ~.types-proj-single-field %source %jibb] src-585 `typ-585 ~ ~ ~))
3666−++ test-types-proj-single-sample-face
3667− (weld (check ~.types-proj-single-sample-face src-586 `tok-586 `tre-586) (check-module-types ~.types-proj-single-sample-face ~[%tests %golden ~.types-proj-single-sample-face %source %jibb] src-586 `typ-586 ~ ~ ~))
3668−++ test-types-proj-single-wrapped
3669− (weld (check ~.types-proj-single-wrapped src-587 `tok-587 `tre-587) (check-module-types ~.types-proj-single-wrapped ~[%tests %golden ~.types-proj-single-wrapped %source %jibb] src-587 `typ-587 ~ ~ ~))
3670−++ test-types-qath-faces
3671− (weld (check ~.types-qath-faces src-588 `tok-588 `tre-588) (check-module-types ~.types-qath-faces ~[%tests %golden ~.types-qath-faces %source %jibb] src-588 `typ-588 ~ ~ ~))
3672−++ test-types-qath-holes
3673− (weld (check ~.types-qath-holes src-589 `tok-589 `tre-589) (check-module-types ~.types-qath-holes ~[%tests %golden ~.types-qath-holes %source %jibb] src-589 `typ-589 ~ ~ ~))
3674−++ test-types-qath-module-identity
3675− (weld (weld (check ~.types-qath-module-identity src-590 `tok-590 `tre-590) (check-module-types ~.types-qath-module-identity ~[%tests %golden ~.types-qath-module-identity %source %jibb] src-590 `typ-590 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-590-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-590-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-590-3]])) (check-module-trees ~.types-qath-module-identity `mtre-590 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-590-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-590-2] ['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-590-3]]))
3676−++ test-types-qath-recursive
3677− (weld (check ~.types-qath-recursive src-591 `tok-591 `tre-591) (check-module-types ~.types-qath-recursive ~[%tests %golden ~.types-qath-recursive %source %jibb] src-591 `typ-591 ~ ~ ~))
3678−++ test-types-record-bound-variable
3679− (weld (check ~.types-record-bound-variable src-592 `tok-592 `tre-592) (check-types ~.types-record-bound-variable ~[%tests %golden ~.types-record-bound-variable %source %jibb] src-592 `typ-592))
3680−++ test-types-record-cast-context
3681− (weld (check ~.types-record-cast-context src-593 `tok-593 `tre-593) (check-module-types ~.types-record-cast-context ~[%tests %golden ~.types-record-cast-context %source %jibb] src-593 `typ-593 ~ ~ ~))
3682−++ test-types-record-change
3683− (weld (check ~.types-record-change src-594 `tok-594 `tre-594) (check-module-types ~.types-record-change ~[%tests %golden ~.types-record-change %source %jibb] src-594 `typ-594 ~ ~ ~))
3684−++ test-types-record-change-generic
3685− (weld (check ~.types-record-change-generic src-595 `tok-595 `tre-595) (check-module-types ~.types-record-change-generic ~[%tests %golden ~.types-record-change-generic %source %jibb] src-595 `typ-595 ~ ~ ~))
3686−++ test-types-record-faces
3687− (weld (check ~.types-record-faces src-596 `tok-596 `tre-596) (check-types ~.types-record-faces ~[%tests %golden ~.types-record-faces %source %jibb] src-596 `typ-596))
3688−++ test-types-record-field-edit-separate
3689− (weld (check ~.types-record-field-edit-separate src-597 `tok-597 `tre-597) (check-types ~.types-record-field-edit-separate ~[%tests %golden ~.types-record-field-edit-separate %source %jibb] src-597 `typ-597))
3690−++ test-types-record-field-expr-duplicate
3691− (weld (check ~.types-record-field-expr-duplicate src-598 `tok-598 `tre-598) (check-types ~.types-record-field-expr-duplicate ~[%tests %golden ~.types-record-field-expr-duplicate %source %jibb] src-598 `typ-598))
3692−++ test-types-record-field-expr-separate
3693− (weld (check ~.types-record-field-expr-separate src-599 `tok-599 `tre-599) (check-types ~.types-record-field-expr-separate ~[%tests %golden ~.types-record-field-expr-separate %source %jibb] src-599 `typ-599))
3694−++ test-types-record-field-module-reachable
3695− (weld (weld (check ~.types-record-field-module-reachable src-600 `tok-600 `tre-600) (check-module-types ~.types-record-field-module-reachable ~[%tests %golden ~.types-record-field-module-reachable %source %jibb] src-600 `typ-600 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-600-1]])) (check-module-trees ~.types-record-field-module-reachable `mtre-600 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-600-1]]))
3696−++ test-types-record-field-module-unused
3697− (weld (weld (check ~.types-record-field-module-unused src-601 `tok-601 `tre-601) (check-module-types ~.types-record-field-module-unused ~[%tests %golden ~.types-record-field-module-unused %source %jibb] src-601 `typ-601 ~ ~ ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-601-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-601-2]])) (check-module-trees ~.types-record-field-module-unused `mtre-601 ~[['/ui/good.jibb' ~[~.ui ~.good ~.jibb] mod-601-1] ['/ui/unused.jibb' ~[~.ui ~.unused ~.jibb] mod-601-2]]))
3698−++ test-types-record-field-nested-mold
3699− (weld (check ~.types-record-field-nested-mold src-602 `tok-602 `tre-602) (check-types ~.types-record-field-nested-mold ~[%tests %golden ~.types-record-field-nested-mold %source %jibb] src-602 `typ-602))
3700−++ test-types-record-field-outer-inner
3701− (weld (check ~.types-record-field-outer-inner src-603 `tok-603 `tre-603) (check-types ~.types-record-field-outer-inner ~[%tests %golden ~.types-record-field-outer-inner %source %jibb] src-603 `typ-603))
3702−++ test-types-record-field-sample-duplicate
3703− (weld (check ~.types-record-field-sample-duplicate src-604 `tok-604 `tre-604) (check-types ~.types-record-field-sample-duplicate ~[%tests %golden ~.types-record-field-sample-duplicate %source %jibb] src-604 `typ-604))
3704−++ test-types-record-field-separate-molds
3705− (weld (check ~.types-record-field-separate-molds src-605 `tok-605 `tre-605) (check-types ~.types-record-field-separate-molds ~[%tests %golden ~.types-record-field-separate-molds %source %jibb] src-605 `typ-605))
3706−++ test-types-record-field-unused-mold
3707− (weld (check ~.types-record-field-unused-mold src-606 `tok-606 `tre-606) (check-types ~.types-record-field-unused-mold ~[%tests %golden ~.types-record-field-unused-mold %source %jibb] src-606 `typ-606))
3708−++ test-types-record-import
3709− (weld (weld (check ~.types-record-import src-607 `tok-607 `tre-607) (check-module-types ~.types-record-import ~[%tests %golden ~.types-record-import %source %jibb] src-607 `typ-607 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-607-1]])) (check-module-trees ~.types-record-import `mtre-607 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-607-1]]))
3710−++ test-types-record-local-scheme
3711− (weld (check ~.types-record-local-scheme src-608 `tok-608 `tre-608) (check-types ~.types-record-local-scheme ~[%tests %golden ~.types-record-local-scheme %source %jibb] src-608 `typ-608))
3712−++ test-types-record-nested
3713− (weld (check ~.types-record-nested src-609 `tok-609 `tre-609) (check-types ~.types-record-nested ~[%tests %golden ~.types-record-nested %source %jibb] src-609 `typ-609))
3714−++ test-types-record-to-tuple
3715− (weld (check ~.types-record-to-tuple src-610 `tok-610 `tre-610) (check-types ~.types-record-to-tuple ~[%tests %golden ~.types-record-to-tuple %source %jibb] src-610 `typ-610))
3716−++ test-types-recursion-scc-failures
3717− (weld (check ~.types-recursion-scc-failures src-611 `tok-611 `tre-611) (check-module-types ~.types-recursion-scc-failures ~[%tests %golden ~.types-recursion-scc-failures %source %jibb] src-611 `typ-611 ~ ~ ~))
3718−++ test-types-recursion-scc-groups
3719− (weld (check ~.types-recursion-scc-groups src-612 `tok-612 `tre-612) (check-module-types ~.types-recursion-scc-groups ~[%tests %golden ~.types-recursion-scc-groups %source %jibb] src-612 `typ-612 ~ ~ ~))
3720−++ test-types-recursion-scc-import
3721− (weld (weld (check ~.types-recursion-scc-import src-613 `tok-613 `tre-613) (check-module-types ~.types-recursion-scc-import ~[%tests %golden ~.types-recursion-scc-import %source %jibb] src-613 `typ-613 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-613-1]])) (check-module-trees ~.types-recursion-scc-import `mtre-613 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-613-1]]))
3722−++ test-types-recursion-scc-import-bad
3723− (weld (weld (check ~.types-recursion-scc-import-bad src-614 `tok-614 `tre-614) (check-module-types ~.types-recursion-scc-import-bad ~[%tests %golden ~.types-recursion-scc-import-bad %source %jibb] src-614 `typ-614 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-614-1]])) (check-module-trees ~.types-recursion-scc-import-bad `mtre-614 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-614-1]]))
3724−++ test-types-recursion-scc-local
3725− (weld (check ~.types-recursion-scc-local src-615 `tok-615 `tre-615) (check-module-types ~.types-recursion-scc-local ~[%tests %golden ~.types-recursion-scc-local %source %jibb] src-615 `typ-615 ~ ~ ~))
3726−++ test-types-recursion-scc-order
3727− (weld (check ~.types-recursion-scc-order src-616 `tok-616 `tre-616) (check-module-types ~.types-recursion-scc-order ~[%tests %golden ~.types-recursion-scc-order %source %jibb] src-616 `typ-616 ~ ~ ~))
3728−++ test-types-recursion-scc-shadow
3729− (weld (check ~.types-recursion-scc-shadow src-617 `tok-617 `tre-617) (check-module-types ~.types-recursion-scc-shadow ~[%tests %golden ~.types-recursion-scc-shadow %source %jibb] src-617 `typ-617 ~ ~ ~))
3730−++ test-types-recursive-branch
3731− (weld (check ~.types-recursive-branch src-618 `tok-618 `tre-618) (check-module-types ~.types-recursive-branch ~[%tests %golden ~.types-recursive-branch %source %jibb] src-618 `typ-618 ~ ~ ~))
3732−++ test-types-recursive-gate
3733− (weld (check ~.types-recursive-gate src-619 `tok-619 `tre-619) (check-types ~.types-recursive-gate ~[%tests %golden ~.types-recursive-gate %source %jibb] src-619 `typ-619))
3734−++ test-types-recursive-sample
3735− (weld (check ~.types-recursive-sample src-620 `tok-620 `tre-620) (check-types ~.types-recursive-sample ~[%tests %golden ~.types-recursive-sample %source %jibb] src-620 `typ-620))
3736−++ test-types-request-normal
3737− (weld (weld (check ~.types-request-normal src-621 `tok-621 `tre-621) (check-module-types ~.types-request-normal ~[%tests %golden ~.types-request-normal %source %jibb] src-621 `typ-621 ~ ~[[%full mark-621-1]] ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-621-1]])) (check-module-trees ~.types-request-normal `mtre-621 ~[['/ui/api/demo.jibb' ~[~.ui ~.api ~.demo ~.jibb] mod-621-1]]))
3738−++ test-types-scope-library-poke
3739− (weld (check-at ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-622 `tok-622 `tre-622) (check-module-types ~.types-scope-library-poke ~[~.ui ~.lib ~.library ~.jibb] src-622 `typ-622 ~ ~ ~))
3740−++ test-types-scope-root-api
3741− (weld (check-at ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-623 `tok-623 `tre-623) (check-module-types ~.types-scope-root-api ~[~.ui ~.api ~.todo ~.jibb] src-623 `typ-623 ~ ~ ~))
3742−++ test-types-scope-store-duplicate
3743− (weld (check-at ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-624 `tok-624 `tre-624) (check-module-types ~.types-scope-store-duplicate ~[~.ui ~.stores ~.cart ~.jibb] src-624 `typ-624 ~ ~ ~))
3744−++ test-types-scope-store-shadow
3745− (weld (check-at ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-625 `tok-625 `tre-625) (check-module-types ~.types-scope-store-shadow ~[~.ui ~.stores ~.cart ~.jibb] src-625 `typ-625 ~ ~ ~))
3746−++ test-types-single-case-pattern
3747− (weld (check ~.types-single-case-pattern src-626 `tok-626 `tre-626) (check-module-types ~.types-single-case-pattern ~[%tests %golden ~.types-single-case-pattern %source %jibb] src-626 `typ-626 ~ ~ ~))
3748−++ test-types-string-interpolation
3749− (weld (check ~.types-string-interpolation src-627 `tok-627 `tre-627) (check-module-types ~.types-string-interpolation ~[%tests %golden ~.types-string-interpolation %source %jibb] src-627 `typ-627 ~ ~ ~))
3750−++ test-types-tuple-context
3751− (weld (check ~.types-tuple-context src-628 `tok-628 `tre-628) (check-module-types ~.types-tuple-context ~[%tests %golden ~.types-tuple-context %source %jibb] src-628 `typ-628 ~ ~ ~))
3752−++ test-types-tuple-context-nested
3753− (weld (check ~.types-tuple-context-nested src-629 `tok-629 `tre-629) (check-module-types ~.types-tuple-context-nested ~[%tests %golden ~.types-tuple-context-nested %source %jibb] src-629 `typ-629 ~ ~ ~))
3754−++ test-types-union-alias
3755− (weld (check ~.types-union-alias src-630 `tok-630 `tre-630) (check-types ~.types-union-alias ~[%tests %golden ~.types-union-alias %source %jibb] src-630 `typ-630))
3756−++ test-types-union-branch-context
3757− (weld (check ~.types-union-branch-context src-631 `tok-631 `tre-631) (check-types ~.types-union-branch-context ~[%tests %golden ~.types-union-branch-context %source %jibb] src-631 `typ-631))
3758−++ test-types-union-branch-pending
3759− (weld (check ~.types-union-branch-pending src-632 `tok-632 `tre-632) (check-types ~.types-union-branch-pending ~[%tests %golden ~.types-union-branch-pending %source %jibb] src-632 `typ-632))
3760−++ test-types-union-constructor-shape
3761− (weld (check ~.types-union-constructor-shape src-633 `tok-633 `tre-633) (check-types ~.types-union-constructor-shape ~[%tests %golden ~.types-union-constructor-shape %source %jibb] src-633 `typ-633))
3762−++ test-types-union-context-flow
3763− (weld (check ~.types-union-context-flow src-634 `tok-634 `tre-634) (check-types ~.types-union-context-flow ~[%tests %golden ~.types-union-context-flow %source %jibb] src-634 `typ-634))
3764−++ test-types-union-finite
3765− (weld (check ~.types-union-finite src-635 `tok-635 `tre-635) (check-module-types ~.types-union-finite ~[%tests %golden ~.types-union-finite %source %jibb] src-635 `typ-635 ~ ~ ~))
3766−++ test-types-union-finite-context
3767− (weld (check ~.types-union-finite-context src-636 `tok-636 `tre-636) (check-module-types ~.types-union-finite-context ~[%tests %golden ~.types-union-finite-context %source %jibb] src-636 `typ-636 ~ ~ ~))
3768−++ test-types-union-finite-generic
3769− (weld (check ~.types-union-finite-generic src-637 `tok-637 `tre-637) (check-module-types ~.types-union-finite-generic ~[%tests %golden ~.types-union-finite-generic %source %jibb] src-637 `typ-637 ~ ~ ~))
3770−++ test-types-union-finite-limit
3771− (weld (check ~.types-union-finite-limit src-638 `tok-638 `tre-638) (check-module-types ~.types-union-finite-limit ~[%tests %golden ~.types-union-finite-limit %source %jibb] src-638 `typ-638 ~ ~ ~))
3772−++ test-types-union-import
3773− (weld (weld (check ~.types-union-import src-639 `tok-639 `tre-639) (check-module-types ~.types-union-import ~[%tests %golden ~.types-union-import %source %jibb] src-639 `typ-639 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-639-1]])) (check-module-trees ~.types-union-import `mtre-639 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-639-1]]))
3774−++ test-types-union-local-pending
3775− (weld (check ~.types-union-local-pending src-640 `tok-640 `tre-640) (check-types ~.types-union-local-pending ~[%tests %golden ~.types-union-local-pending %source %jibb] src-640 `typ-640))
3776−++ test-types-union-nonwing-subject
3777− (weld (check ~.types-union-nonwing-subject src-641 `tok-641 `tre-641) (check-module-types ~.types-union-nonwing-subject ~[%tests %golden ~.types-union-nonwing-subject %source %jibb] src-641 `typ-641 ~ ~ ~))
3778−++ test-types-union-overlap
3779− (weld (check ~.types-union-overlap src-642 `tok-642 `tre-642) (check-types ~.types-union-overlap ~[%tests %golden ~.types-union-overlap %source %jibb] src-642 `typ-642))
3780−++ test-types-union-overlap-nested
3781− (weld (check ~.types-union-overlap-nested src-643 `tok-643 `tre-643) (check-types ~.types-union-overlap-nested ~[%tests %golden ~.types-union-overlap-nested %source %jibb] src-643 `typ-643))
3782−++ test-types-union-pattern-result-context
3783− (weld (check ~.types-union-pattern-result-context src-644 `tok-644 `tre-644) (check-module-types ~.types-union-pattern-result-context ~[%tests %golden ~.types-union-pattern-result-context %source %jibb] src-644 `typ-644 ~ ~ ~))
3784−++ test-types-union-pattern-result-controls
3785− (weld (check ~.types-union-pattern-result-controls src-645 `tok-645 `tre-645) (check-module-types ~.types-union-pattern-result-controls ~[%tests %golden ~.types-union-pattern-result-controls %source %jibb] src-645 `typ-645 ~ ~ ~))
3786−++ test-types-union-patterns
3787− (weld (check ~.types-union-patterns src-646 `tok-646 `tre-646) (check-module-types ~.types-union-patterns ~[%tests %golden ~.types-union-patterns %source %jibb] src-646 `typ-646 ~ ~ ~))
3788−++ test-types-union-patterns-generic
3789− (weld (check ~.types-union-patterns-generic src-647 `tok-647 `tre-647) (check-module-types ~.types-union-patterns-generic ~[%tests %golden ~.types-union-patterns-generic %source %jibb] src-647 `typ-647 ~ ~ ~))
3790−++ test-types-union-patterns-import
3791− (weld (weld (check ~.types-union-patterns-import src-648 `tok-648 `tre-648) (check-module-types ~.types-union-patterns-import ~[%tests %golden ~.types-union-patterns-import %source %jibb] src-648 `typ-648 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-648-1]])) (check-module-trees ~.types-union-patterns-import `mtre-648 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-648-1]]))
3792−++ test-types-union-phantom-generic
3793− (weld (check ~.types-union-phantom-generic src-649 `tok-649 `tre-649) (check-types ~.types-union-phantom-generic ~[%tests %golden ~.types-union-phantom-generic %source %jibb] src-649 `typ-649))
3794−++ test-types-union-polymorphic-identity
3795− (weld (weld (check ~.types-union-polymorphic-identity src-650 `tok-650 `tre-650) (check-module-types ~.types-union-polymorphic-identity ~[%tests %golden ~.types-union-polymorphic-identity %source %jibb] src-650 `typ-650 ~ ~ ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-650-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-650-2]])) (check-module-trees ~.types-union-polymorphic-identity `mtre-650 ~[['/ui/one.jibb' ~[~.ui ~.one ~.jibb] mod-650-1] ['/ui/two.jibb' ~[~.ui ~.two ~.jibb] mod-650-2]]))
3796−++ test-types-union-print-cross-namespace
3797− (weld (weld (check ~.types-union-print-cross-namespace src-651 `tok-651 `tre-651) (check-module-types ~.types-union-print-cross-namespace ~[%tests %golden ~.types-union-print-cross-namespace %source %jibb] src-651 `typ-651 ~ ~ ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-651-1]])) (check-module-trees ~.types-union-print-cross-namespace `mtre-651 ~[['/ui/lib.jibb' ~[~.ui ~.lib ~.jibb] mod-651-1]]))
3798−++ test-types-union-print-distinct
3799− (weld (weld (check ~.types-union-print-distinct src-652 `tok-652 `tre-652) (check-module-types ~.types-union-print-distinct ~[%tests %golden ~.types-union-print-distinct %source %jibb] src-652 `typ-652 ~ ~ ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-652-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-652-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-652-3]])) (check-module-trees ~.types-union-print-distinct `mtre-652 ~[['/ui/left.jibb' ~[~.ui ~.left ~.jibb] mod-652-1] ['/ui/right.jibb' ~[~.ui ~.right ~.jibb] mod-652-2] ['/ui/twin.jibb' ~[~.ui ~.twin ~.jibb] mod-652-3]]))
3800−++ test-types-union-print-escape
3801− (weld (check ~.types-union-print-escape src-653 `tok-653 `tre-653) (check-types ~.types-union-print-escape ~[%tests %golden ~.types-union-print-escape %source %jibb] src-653 `typ-653))
3802−++ test-types-union-print-local
3803− (weld (check ~.types-union-print-local src-654 `tok-654 `tre-654) (check-types ~.types-union-print-local ~[%tests %golden ~.types-union-print-local %source %jibb] src-654 `typ-654))
3804−++ test-types-union-print-nested
3805− (weld (check ~.types-union-print-nested src-655 `tok-655 `tre-655) (check-types ~.types-union-print-nested ~[%tests %golden ~.types-union-print-nested %source %jibb] src-655 `typ-655))
3806−++ test-types-union-print-same-origin
3807− (weld (weld (check ~.types-union-print-same-origin src-656 `tok-656 `tre-656) (check-module-types ~.types-union-print-same-origin ~[%tests %golden ~.types-union-print-same-origin %source %jibb] src-656 `typ-656 ~ ~ ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-656-1]])) (check-module-trees ~.types-union-print-same-origin `mtre-656 ~[['/ui/shared.jibb' ~[~.ui ~.shared ~.jibb] mod-656-1]]))
3808−++ test-types-union-print-transitive
3809− (weld (weld (check ~.types-union-print-transitive src-657 `tok-657 `tre-657) (check-module-types ~.types-union-print-transitive ~[%tests %golden ~.types-union-print-transitive %source %jibb] src-657 `typ-657 ~ ~ ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-657-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-657-2]])) (check-module-trees ~.types-union-print-transitive `mtre-657 ~[['/ui/mid.jibb' ~[~.ui ~.mid ~.jibb] mod-657-1] ['/ui/base.jibb' ~[~.ui ~.base ~.jibb] mod-657-2]]))
3810−++ test-types-union-runtime-equality
3811− (weld (check ~.types-union-runtime-equality src-658 `tok-658 `tre-658) (check-types ~.types-union-runtime-equality ~[%tests %golden ~.types-union-runtime-equality %source %jibb] src-658 `typ-658))
3812−++ test-types-union-singleton
3813− (weld (check ~.types-union-singleton src-659 `tok-659 `tre-659) (check-types ~.types-union-singleton ~[%tests %golden ~.types-union-singleton %source %jibb] src-659 `typ-659))
3814−++ test-types-union-source-alias
3815− (weld (check ~.types-union-source-alias src-660 `tok-660 `tre-660) (check-types ~.types-union-source-alias ~[%tests %golden ~.types-union-source-alias %source %jibb] src-660 `typ-660))
3816−++ test-types-union-tag-atoms
3817− (weld (check ~.types-union-tag-atoms src-661 `tok-661 `tre-661) (check-types ~.types-union-tag-atoms ~[%tests %golden ~.types-union-tag-atoms %source %jibb] src-661 `typ-661))
3818−++ test-types-union-tags
3819− (weld (check ~.types-union-tags src-662 `tok-662 `tre-662) (check-types ~.types-union-tags ~[%tests %golden ~.types-union-tags %source %jibb] src-662 `typ-662))
3820−++ test-types-union-unresolved
3821− (weld (check ~.types-union-unresolved src-663 `tok-663 `tre-663) (check-types ~.types-union-unresolved ~[%tests %golden ~.types-union-unresolved %source %jibb] src-663 `typ-663))
3822−++ test-types-union-unresolved-flow
3823− (weld (check ~.types-union-unresolved-flow src-664 `tok-664 `tre-664) (check-types ~.types-union-unresolved-flow ~[%tests %golden ~.types-union-unresolved-flow %source %jibb] src-664 `typ-664))
3824−++ test-types-unit-construction
3825− (weld (check ~.types-unit-construction src-665 `tok-665 `tre-665) (check-module-types ~.types-unit-construction ~[%tests %golden ~.types-unit-construction %source %jibb] src-665 `typ-665 ~ ~ ~))
3826−++ test-types-unit-context
3827− (weld (check ~.types-unit-context src-666 `tok-666 `tre-666) (check-module-types ~.types-unit-context ~[%tests %golden ~.types-unit-context %source %jibb] src-666 `typ-666 ~ ~ ~))
3828−++ test-types-unit-patterns
3829− (weld (check ~.types-unit-patterns src-667 `tok-667 `tre-667) (check-types ~.types-unit-patterns ~[%tests %golden ~.types-unit-patterns %source %jibb] src-667 `typ-667))
3830−++ test-types-value-cycle-shadow
3831− (weld (check ~.types-value-cycle-shadow src-668 `tok-668 `tre-668) (check-module-types ~.types-value-cycle-shadow ~[%tests %golden ~.types-value-cycle-shadow %source %jibb] src-668 `typ-668 ~ ~ ~))
3832−++ test-types-value-cycle-unsupported
3833− (weld (check ~.types-value-cycle-unsupported src-669 `tok-669 `tre-669) (check-module-types ~.types-value-cycle-unsupported ~[%tests %golden ~.types-value-cycle-unsupported %source %jibb] src-669 `typ-669 ~ ~ ~))
3834−++ test-types-value-cycles
3835− (weld (check ~.types-value-cycles src-670 `tok-670 `tre-670) (check-module-types ~.types-value-cycles ~[%tests %golden ~.types-value-cycles %source %jibb] src-670 `typ-670 ~ ~ ~))
3836−::
3837−:: +check: run golden:jibb on a case and compare both outputs
3838−::
3839−++ check
3840− |= [case=@ta src=@t tokens=(unit wain) tree=(unit wain)]
3841− ^- tang
3842− (check-at case /tests/golden/[case]/source/jibb src tokens tree)
3843−::
3844−++ check-at
3845− |= [case=@ta at=path src=@t tokens=(unit wain) tree=(unit wain)]
3846− ^- tang
3847− =/ out=[tokens=@t tree=@t] (golden:jibb at src)
3848− %+ weld
3849− (compare (file case "tokens.txt") tokens tokens.out)
3850− (compare (file case "tree.txt") tree tree.out)
3851−::
3852−++ file
3853− |= [case=@ta name=tape]
3854− ^- tape
3855− "tests/golden/{(trip case)}/{name}"
3856−::
3857−:: +compare: a file's lines against those of an output plus a newline
3858−::
3859−++ compare
3860− |= [name=tape want=(unit wain) got=@t]
3861− ^- tang
3862− =/ have=wain (to-wain:format (cat 3 got '\0a'))
3863− ?~ want
3864− :- leaf+"{name} is missing; tools/golden --update writes it"
3865− (turn have |=(l=@t leaf+" | {(trip l)}"))
3866− ?: =(u.want have)
3867− ~
3868− =/ n=@ud (first-difference u.want have)
3869− :~ leaf+"{name} differs from the output at line {(a-co:co +(n))}:"
3870− leaf+" expected: {(line-at u.want n)}"
3871− leaf+" actual: {(line-at have n)}"
3872− ==
3873−::
3874−++ first-difference
3875− |= [a=wain b=wain]
3876− =| n=@ud
3877− |- ^- @ud
3878− ?~ a n
3879− ?~ b n
3880− ?. =(i.a i.b) n
3881− $(a t.a, b t.b, n +(n))
3882−::
3883−++ line-at
3884− |= [lines=wain n=@ud]
3885− ^- tape
3886− ?: (gte n (lent lines))
3887− "(the end of the file)"
3888− ?: =('' (snag n lines))
3889− "(an empty line)"
3890− (trip (snag n lines))
3891−::
3892−++ check-types
3893− |= [case=@ta at=path src=@t want=(unit wain)]
3894− ^- tang
3895− (compare (file case "types.txt") want (golden-types:jibb at src))
3896−::
3897−++ check-import-types
3898− |= [case=@ta at=path src=@t want=(unit wain) fixtures=(list [module=term mold=term source=wain])]
3899− ^- tang
3900− =/ result (mule |.((import-types-result at src fixtures)))
3901− ?: ?=(%| -.result)
3902− [leaf+"fixture compilation or type checking crashed" p.result]
3903− (compare (file case "types.txt") want p.result)
3904−::
3905−++ import-types-result
3906− |= [at=path src=@t fixtures=(list [module=term mold=term source=wain])]
3907− ^- @t
3908− =/ external=(list [module=term name=term result=*])
3909− %+ turn fixtures
3910− |= fixture=[module=term mold=term source=wain]
3911− ~_ leaf+"/sur/{(trip module.fixture)}.txt fixture"
3912− ?~ source.fixture !!
3913− =/ text=@t (rap 3 (turn source.fixture |=(line=@t (cat 3 line '\0a'))))
3914− =/ cor=type -:(ride -:!>(..zuse) text)
3915− [module.fixture mold.fixture (read-named:jibb-import module.fixture mold.fixture cor)]
3916− (golden-types-imports:jibb at src external)
3917−::
3918−++ check-mark-types
3919− |= [case=@ta at=path src=@t want=(unit wain) fixtures=(list [module=term mold=term source=wain]) marks=(list [name=term source=wain])]
3920− ^- tang
3921− =/ result (mule |.((mark-types-result at src fixtures marks)))
3922− ?: ?=(%| -.result)
3923− [leaf+"fixture compilation or type checking crashed" p.result]
3924− (compare (file case "types.txt") want p.result)
3925−::
3926−++ mark-types-result
3927− |= [at=path src=@t fixtures=(list [module=term mold=term source=wain]) marks=(list [name=term source=wain])]
3928− ^- @t
3929− =/ external=(list [module=term name=term result=*])
3930− %+ turn fixtures
3931− |= fixture=[module=term mold=term source=wain]
3932− ~_ leaf+"/sur/{(trip module.fixture)}.txt fixture"
3933− ?~ source.fixture !!
3934− =/ text=@t (rap 3 (turn source.fixture |=(line=@t (cat 3 line '\0a'))))
3935− =/ cor=type -:(ride -:!>(..zuse) text)
3936− [module.fixture mold.fixture (read-named:jibb-import module.fixture mold.fixture cor)]
3937− =/ mark-external=(list [name=term result=*])
3938− %+ turn marks
3939− |= fixture=[name=term source=wain]
3940− ~_ leaf+"/mar/{(trip name.fixture)}.txt fixture"
3941− ?~ source.fixture !!
3942− =/ text=@t (rap 3 (turn source.fixture |=(line=@t (cat 3 line '\0a'))))
3943− =/ cor=type -:(ride -:!>(..zuse) text)
3944− [name.fixture (read-mark:jibb-import name.fixture cor)]
3945− (golden-types-with-marks:jibb at src external mark-external)
3946−::
3947−++ check-module-trees
3948− |= [case=@ta want=(unit wain) fixtures=(list [label=@t at=path source=@t])]
3949− ^- tang
3950− =/ result (mule |.((module-trees-result fixtures)))
3951− ?: ?=(%| -.result)
3952− [leaf+"module fixture parsing crashed" p.result]
3953− (compare (file case "module-trees.txt") want p.result)
3954−::
3955−++ module-trees-result
3956− |= fixtures=(list [label=@t at=path source=@t])
3957− ^- @t
3958− =/ actual=@t
3959− %+ rap 3
3960− %+ join '\0a'
3961− %+ turn fixtures
3962− |= fixture=[label=@t at=path source=@t]
3963− ~_ leaf+(trip label.fixture)
3964− =/ out (golden:jibb at.fixture source.fixture)
3965− (rap 3 ~[label.fixture '\0a' tree.out])
3966− actual
3967−::
3968−++ check-module-types
3969− |= [case=@ta at=path src=@t want=(unit wain) fixtures=(list [module=term mold=term source=wain]) marks=(list [name=term source=wain]) modules=(list [label=@t at=path source=@t])]
3970− ^- tang
3971− =/ result (mule |.((module-types-result at src fixtures marks modules)))
3972− ?: ?=(%| -.result)
3973− [leaf+"fixture compilation or type checking crashed" p.result]
3974− (compare (file case "types.txt") want p.result)
3975−::
3976−++ module-types-result
3977− |= [at=path src=@t fixtures=(list [module=term mold=term source=wain]) marks=(list [name=term source=wain]) modules=(list [label=@t at=path source=@t])]
3978− ^- @t
3979− =/ external=(list [module=term name=term result=*])
3980− %+ turn fixtures
3981− |= fixture=[module=term mold=term source=wain]
3982− ~_ leaf+"/sur/{(trip module.fixture)}.txt fixture"
3983− ?~ source.fixture !!
3984− =/ text=@t (rap 3 (turn source.fixture |=(line=@t (cat 3 line '\0a'))))
3985− =/ cor=type -:(ride -:!>(..zuse) text)
3986− [module.fixture mold.fixture (read-named:jibb-import module.fixture mold.fixture cor)]
3987− =/ mark-external=(list [name=term result=*])
3988− %+ turn marks
3989− |= fixture=[name=term source=wain]
3990− ~_ leaf+"/mar/{(trip name.fixture)}.txt fixture"
3991− ?~ source.fixture !!
3992− =/ text=@t (rap 3 (turn source.fixture |=(line=@t (cat 3 line '\0a'))))
3993− =/ cor=type -:(ride -:!>(..zuse) text)
3994− [name.fixture (read-mark:jibb-import name.fixture cor)]
3995− =/ sources=(list [path=path source=@t])
3996− (turn modules |=(item=[label=@t at=path source=@t] [at.item source.item]))
3997− ?~ prepared-prelude
3998− (golden-types-with-prelude-and-internal:jibb at src external mark-external sources prelude-source internal-source)
3999− (golden-types-with-prepared-prelude:jibb at src external mark-external sources prepared-prelude)
4000−--
tests/type-api-paths/about.txt+1−1
@@ -1,3 +1,3 @@
11source: Overview, Agent APIs: a path names a request, a route and a mark for full state; `facts` supplies diff marks and an optional scry path. Imports: Hoon marks are read at their declared names.
2−tests: Partial path analysis uses the actual todo `/sur` and Ford-style mark samples, preserving the full and diff types and typed path parameter. Matching scry parameters are accepted; unknown scry parameters, missing, duplicate and undeclared marks, value and derived-name collisions, an invalid module path, a missing prelude, private imports and an import cycle fail closed. This does not check the module or derive request gates.
2+tests: Partial path analysis uses the actual todo `/sur` and Ford-style mark samples, preserving the full and diff types and typed path parameter. Synthetic full and diff marks containing Hoon units must retain the canonical prelude union in path analysis and a direct poke export, not merely print like it. Matching scry parameters are accepted. A derived request or poke helper that clashes with a definition is a definite error showing both sites; unknown scry parameters, missing, duplicate and undeclared marks, an invalid module path, a missing prelude, private imports and an import cycle fail closed. This does not check the module or derive request gates.
33expect: partial path metadata or an unsupported/error report
tests/type-api-paths/expected.txt+17−2
@@ -3,11 +3,26 @@ todo: accepted 3 path cases
33todos: full=(list [id=@ud [done=? text=@t]]) diffs: parameters:
44changes: full=(list [id=@ud [done=? text=@t]]) diffs: todo-update=[%added item=[id=@ud [done=? text=@t]]] [%toggled id=@ud] parameters:
55todo-by-id: full=[id=@ud [done=? text=@t]] diffs: parameters: id=@ud
6+items: full=(unit @t) diffs: unit-diff=(unit @t) parameters:
7+unit marks: canonical
8+unit poke: canonical
69missing mark: API path declaration needs unsupported analysis
710duplicate mark: API path declaration needs unsupported analysis
811undeclared mark: API path declaration needs unsupported analysis
9−value collision: API path declaration needs unsupported analysis
10−poke collision: API path declaration needs unsupported analysis
12+value collision: API derived name `todos` clashes with a definition
13+/ui/api/todo.jibb:11:3: `todos` is derived from this path case
14+ [%todos /todos todos]
15+ ^
16+/ui/api/todo.jibb:15:1: clashing definition
17+++ todos "collision"
18+^
19+poke collision: API derived name `poke` clashes with a definition
20+/ui/api/todo.jibb:9:1: `poke` is derived from this mold
21++$ poke todo-action
22+^
23+/ui/api/todo.jibb:14:1: clashing definition
24+++ poke "collision"
25+^
1126scry matching parameters: accepted 3 path cases
1227scry metadata: id=@ud
1328scry unknown parameter: API path declaration needs unsupported analysis
tests/type-deferred/expected.txt+3−2
@@ -4,6 +4,7 @@ nested obligation discharged
44independent built result stays polymorphic
55text use inferred
66ship use inferred independently
7+deferred branch joins present parent
78missing constructor leaves no result
89conflicting context leaves no result
910duplicate source binding declined
@@ -12,7 +13,7 @@ local deferred definition declined
1213recursive deferred group declined
1314unused mold hole declined
1415fresh ID exceeds raw and quantified IDs
15−fresh ID scan respects budget
16+fresh ID of an empty environment is 1
1617original structural binding rejects wrong face
1718dropping binding would accept wrong face
1819unresolved edge remains open after fit
@@ -33,6 +34,6 @@ post-fit face asymmetry is absent
3334record output stays cell-capable
3435prebound incompatible callback is rejected
3536grec constraint scan declines
36−grec fresh-id scan declines
37+fresh ID passes over grec arguments and recursive leaves
3738default inference declines; explicit capability creates obligation
3839candidate screen boundaries passed
tests/type-full-overlap/about.txt+1−1
@@ -1,3 +1,3 @@
11source: docs/spec/grammar.md, Molds: “Cases must differ as nouns”.
2−tests: Full-module overlap evidence retains the defining source and both case spans through ordinary Jibb imports, and legacy errors render the excerpts. Distinct cases check; duplicate names, stale caches, cycles, private imports and other unsupported inputs retain their own earlier errors. Specialized API and prelude paths remain outside this diagnostic slice.
2+tests: Full-module overlap evidence retains the defining source and both case spans through ordinary Jibb imports, and legacy errors render the excerpts. Overlaps that the partial report proves by projection (two auras, `?` and `%.y`, equal nested literal heads) carry the same evidence, and both paths name a projected pair before an earlier pair that only the source witness proves. Distinct cases check; duplicate names, stale caches, cycles, private imports and other unsupported inputs retain their own earlier errors. Specialized API and prelude paths remain outside this diagnostic slice.
33expect: shared eval and ship guards
tests/type-full-overlap/atoms.txtnew file+4
@@ -0,0 +1,4 @@
1++$ bad
2+ @t
3+ @ud
4+++ identity |=(x x)
tests/type-full-overlap/expected-basic.txt+7
@@ -4,6 +4,12 @@ duplicate generic parameters fail scan: ok
44same head has source-bound overlap: ok
55zero spelling has source-bound overlap: ok
66generic wrapper has source-bound overlap: ok
7+two auras have source-bound overlap: ok
8+flag and yes have source-bound overlap: ok
9+nested equal tags have source-bound overlap: ok
10+source witness alone names the earlier pair: ok
11+full check names the later projected pair: ok
12+partial report names the same later pair: ok
713duplicate generic parameters remain unstructured: ok
814unsupported remains unstructured: ok
915later overlap exists in precedence source: ok
@@ -13,4 +19,5 @@ invalid source rejects without overlap: ok
1319distinct alias source parses and checks: ok
1420parent itself has different positive overlap: ok
1521legacy full-module error contains both excerpts: ok
22+legacy projected overlap error is exact: ok
1623import overlap retains exact child source: ok
tests/type-full-overlap/flag.txtnew file+4
@@ -0,0 +1,4 @@
1++$ bad
2+ ?
3+ %.y
4+++ identity |=(x x)
tests/type-full-overlap/nested.txtnew file+4
@@ -0,0 +1,4 @@
1++$ bad
2+ [%a [%b @ud]]
3+ [%a [%b @t]]
4+++ identity |=(x x)
tests/type-full-overlap/order.txtnew file+7
@@ -0,0 +1,7 @@
1++$ tagged |$ [A] [%wrapped A]
2++$ bad
3+ (tagged @t)
4+ [%wrapped @p]
5+ @t
6+ @ud
7+++ identity |=(x x)
tests/type-import/about.txt+4−2
@@ -12,8 +12,10 @@ as `?`, including in either supplied order. Open `%f`, out-of-range values,
1212duplicates, overlapping zero constants, extra or faced cases and malformed
1313forks stay unsupported. A structurally unit-like import does not gain unit
1414construction even when a canonical prelude unit is supplied; constructing
15−that canonical unit succeeds. It covers matching and
16−mismatched collections, nested union arguments, and malformed collection names
15+that canonical unit succeeds. With the validated canonical template, the
16+same imported unit fits identity, `fall`, `need` and `(unit @t)` casts, including
17+when nested in an imported union. It covers matching and mismatched collections,
18+nested union arguments, and malformed collection names
1719and arities. An imported `*` can widen a value, while malformed nouns,
1820overlapping direct or nested union cases, and unknown gate or empty cases
1921stay unsupported. Distinct tagged cases with a noun payload remain disjoint.
tests/type-import/expected.txt+15−5
@@ -53,6 +53,7 @@ partial inference; module not checked
5353/test.jibb:32:45: argument has type (unit @t)
5454++ wrong-kind |= x=maybe.fixture (text-list x)
5555 ^
56+++ maybe-id: $-((unit @t) (unit @t))
5657++ bad-kind: sample mold is not supported by partial inference
5758++ bad-arity: sample mold is not supported by partial inference
5859++ bad-argument: sample mold is not supported by partial inference
@@ -63,10 +64,10 @@ partial inference; module not checked
6364++ chain-again: $-(chain.fixture chain.fixture)
6465++ other-id: $-(other.fixture other.fixture)
6566++ chain-mismatch: call's sample and argument types do not unify
66−/test.jibb:42:39: called gate has type $-(chain.fixture chain.fixture)
67+/test.jibb:43:39: called gate has type $-(chain.fixture chain.fixture)
6768++ chain-mismatch |= x=other.fixture (chain-id x)
6869 ^
69−/test.jibb:42:48: argument has type other.fixture
70+/test.jibb:43:48: argument has type other.fixture
7071++ chain-mismatch |= x=other.fixture (chain-id x)
7172 ^
7273++ recursive-field: field is not available to partial inference
@@ -77,10 +78,10 @@ partial inference; module not checked
7778++ raw-ref: sample mold is not supported by partial inference
7879++ raw-null: $-(~ ~)
7980++ cross-module: call's sample and argument types do not unify
80−/test.jibb:50:36: called gate has type $-(chain.fixture chain.fixture)
81+/test.jibb:51:36: called gate has type $-(chain.fixture chain.fixture)
8182++ cross-module |= x=chain.second (chain-id x)
8283 ^
83−/test.jibb:50:45: argument has type chain.second
84+/test.jibb:51:45: argument has type chain.second
8485++ cross-module |= x=chain.second (chain-id x)
8586 ^
8687++ chain-pattern: recursive pattern is not supported by partial inference
@@ -105,7 +106,7 @@ partial inference; module not checked
105106++ flag-faced: sample mold is not supported by partial inference
106107++ flag-malformed: sample mold is not supported by partial inference
107108++ mixed-zero: Hoon union cases overlap
108−/test.jibb:81:20: invalid imported mold
109+/test.jibb:82:20: invalid imported mold
109110++ mixed-zero |= x=mixed-zero.fixture x
110111 ^
111112++ separate-tags: $-(([%left [%$ @t]] [%right [? @t]]) ([%left [%$ @t]] [%right [? @t]]))
@@ -118,6 +119,15 @@ partial inference; module not checked
118119++ use: recursive mold name is not available in this scope
119120partial inference; module not checked
120121++ canonical: (unit @t)
122+++ canonical-fall: $-((unit @t) @t)
123+++ canonical-need: $-((unit @t) @t)
124+++ canonical-cast: $-((unit @t) (unit @t))
125+++ maybe-id: $-((unit @t) (unit @t))
126+++ maybe-fall: $-((unit @t) @t)
127+++ maybe-need: $-((unit @t) @t)
128+++ maybe-cast: $-((unit @t) (unit @t))
129+++ unit-choice-need: $-((~ [%some (unit @t)]) @t)
130+++ unit-list-need: $-((list (unit @t)) @t)
121131++ lookalike: cast constraint is not supported by partial inference
122132noun: *
123133malformed: unsupported
tests/type-import/source.txt+1
@@ -30,6 +30,7 @@
3030++ same-list |= x=texts.fixture (text-list x)
3131++ wrong-item |= x=numbers.fixture (text-list x)
3232++ wrong-kind |= x=maybe.fixture (text-list x)
33+++ maybe-id |= x=maybe.fixture x
3334++ bad-kind |= x=bad-kind.fixture x
3435++ bad-arity |= x=bad-arity.fixture x
3536++ bad-argument |= x=bad-argument.fixture x
tests/type-poke/about.txt+5−2
@@ -3,5 +3,8 @@ ordinary transparent type. A real Hoon mark is compiled and read by the importer
33before the partial checker builds a raw-poke-only API interface. The reports cover
44the constructor and mark mismatch, aliases and re-exports, ordinary construction
55and inspection, private import boundaries, unsupported or invalid API declarations,
6−and preparation failures. The report remains partial; effect lowering and runtime
7−execution are not verified.
6+and preparation failures. A rejected API shows the reason its check found: a missing
7+or duplicated mark reader result or a missing `/%` import for a poke-only API, its
8+path declaration when it declares `+$ paths`, and a definite error at both sites for
9+a value named after its derived `poke`. The report remains partial; effect lowering
10+and runtime execution are not verified.
tests/type-poke/expected.txt+11−5
@@ -51,16 +51,22 @@ partial inference; module not checked
5151partial inference; module not checked
5252the prelude internal module is private
5353partial inference; module not checked
54−API module needs unsupported inference: /ui/api/todo/jibb
54+API module needs unsupported inference: /ui/api/todo/jibb: API poke mark %todo-action has no reader result
5555partial inference; module not checked
56−API module needs unsupported inference: /ui/api/todo/jibb
56+API module needs unsupported inference: /ui/api/todo/jibb: API poke mark %todo-action has duplicate reader results
5757partial inference; module not checked
58−API module needs unsupported inference: /ui/api/todo/jibb
58+API module needs unsupported inference: /ui/api/todo/jibb: API path declaration needs unsupported analysis
5959partial inference; module not checked
6060the prelude internal module is private
6161partial inference; module not checked
62−API module needs unsupported inference: /ui/api/todo/jibb
62+API module needs unsupported inference: /ui/api/todo/jibb: poke-only API mark imports need unsupported inference
6363partial inference; module not checked
64−API module needs unsupported inference: /ui/api/todo/jibb
64+API derived name `poke` clashes with a definition
65+/ui/api/todo.jibb:2:1: `poke` is derived from this mold
66++$ poke todo-action
67+^
68+/ui/api/todo.jibb:3:1: clashing definition
69+++ poke "bad"
70+^
6571partial inference; module not checked
6672++ test: module member is not available to partial inference
tests/type-program-main/about.txt+1−1
@@ -1 +1 @@
1−tests: A direct four-wing program main uses the ordinary source-backed program fit. Its init data and model are closed and gate-free within the shared 256-node budget, and subs syntactically returns null through transparent forms. The fixture checks exported and downstream imported types, source evidence, structured and legacy adapters, and fail-closed controls. It does not execute a program or establish runtime watchability.
1+tests: A direct four-wing program main uses the ordinary source-backed program fit. Its init data and model are closed and gate-free within the shared 256-node budget, and subs syntactically returns null through transparent forms. The fixture checks exported and downstream imported types, source evidence, structured and legacy adapters, and fail-closed controls. Initializer recovery takes its model from update's two-item sample, or else from main's own program fit, so the alternate fixtures (update written as one faced mold, a pun, a named mold or generic in the model, and generic view and subs samples) recover their initializer like the island. Another alternate's initializer branches over a nested call's union, which only ordinary whole-gate inference takes. It does not execute a program or establish runtime watchability.
tests/type-program-main/initializer-alias.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ input [message model]
6+++ main (program init update view subs)
7+++ init |= ts=(list @t) [ts "" ~]
8+++ update |= in=input
9+ ^- [model (list (cmd message))] [[~ "" ~] ~]
10+++ view |= state=model ^- (element message) (text "view")
11+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-nested-branch.txtnew file+24
@@ -0,0 +1,24 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ fill
6+ %none
7+ %some
8+++ main (program init update view subs)
9+++ classify |= n=@ud
10+ ^- fill
11+ ?- (eq n 0)
12+ %.y %none
13+ %.n %some
14+++ init |= ts=(list @t)
15+ [
16+ (?- (classify (lent ts))
17+ %none ~["(empty)"]
18+ %some ts
19+ ""
20+ ~
21+++ update |= [msg=message state=model]
22+ ^- [model (list (cmd message))] [state ~]
23+++ view |= state=model ^- (element message) (text "view")
24+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-open-update.txtnew file+10
@@ -0,0 +1,10 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5+++ main (program init update view subs)
6+++ init |= ts=(list @t) [ts "" ~]
7+++ update |= [msg=message state=S]
8+ ^- [S (list (cmd message))] [state ~]
9+++ view |= state=model ^- (element message) (text "view")
10+++ subs |= state=model ^- (list (sub message)) ~
tests/type-program-main/initializer-open-view.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ input [message model]
6+++ main (program init update view subs)
7+++ init |= ts=(list @t) [ts "" ~]
8+++ update |= =input
9+ ^- [model (list (cmd message))] [[~ "" ~] ~]
10+++ view |= state ^- (element message) (text "view")
11+++ subs |= state ^- (list (sub message)) ~
tests/type-program-main/initializer-pun.txtnew file+11
@@ -0,0 +1,11 @@
1++$ model [xs=(list @t) draft=@t error=(unit @t)]
2++$ message
3+ %start
4+ %stop
5++$ input [message model]
6+++ main (program init update view subs)
7+++ init |= ts=(list @t) [ts "" ~]
8+++ update |= =input
9+ ^- [model (list (cmd message))] [[~ "" ~] ~]
10+++ view |= state=model ^- (element message) (text "view")
11+++ subs |= state=model ^- (list (sub message)) ~
tests/type-todo-full/about.txt+1−1
@@ -1,3 +1,3 @@
11source: docs/spec/overview.md, worked example 3; my-app/ui/todo-list.jibb must remain byte-identical to tests/type-gate-free/todo.txt.
2−tests: Full detailed and legacy checking of the unchanged todo island through the real Hoon readers and API. Assert the exact closed main type and structural downstream import, plus wrong model/message/result, ambiguous or open mapper, aliased mapper, non-gate view, and wrong watch rejection. The report does not execute Jibb or establish runtime watching.
2+tests: Full detailed and legacy checking of the unchanged todo island through the real Hoon readers and API. Assert the exact closed main type and structural downstream import, plus a variant whose initializer is a gate cast to its full type, which only ordinary inference accepts, so it fails if a keyed view skips ordinary inference again, and wrong model/message/result, ambiguous or open mapper, aliased mapper, non-gate view, and wrong watch rejection. The report does not execute Jibb or establish runtime watching.
33expect: shared eval and ship guards
tests/type-todo-full/cast-init.txtnew file+43
@@ -0,0 +1,43 @@
1+/= todo /ui/api/todo
2+
3+++ main (program init update view subs)
4+
5++$ model [todos=(list item.todo) draft=@t error=(unit @t)]
6++$ msg
7+ [%typed text=@t]
8+ %submit
9+ [%toggled id=@ud]
10+ [%got todos=(list item.todo)]
11+ [%acked err=(unit @t)]
12+
13+++ make-model |= ts=(list item.todo)
14+ ^- model [ts "" ~]
15+
16+++ init ^- $-((list item.todo) model)
17+ |= ts=(list item.todo) (make-model ts)
18+
19+++ update |= [=msg m=model]
20+ ?- msg
21+ [%typed t]
22+ ?- (gth (lent (tuba (trip t))) 80)
23+ %.y [m(draft=t error=`"Too long") ~]
24+ %.n [m(draft=t error=~) ~]
25+ %submit [m(draft="") ~[(poke.todo [%add draft.m] |=%acked)]]
26+ [%toggled id] [m ~[(poke.todo [%toggle id] |=%acked)]]
27+ [%got ts] [m(todos=ts) ~]
28+ [%acked err] [m(error=err) ~]
29+
30+++ subs |= m=model
31+ ~[[%watch (todos.todo |=%got)]]
32+
33+++ view |= m=model
34+ column ~[gap+%s2] ~[
35+ heading 2 "Todos"
36+ each (turn todos.m row-of)
37+ row ~[gap+%s1] ~[
38+ el ~[width+[%fill 1]] (field "New todo" draft.m |=%typed)
39+ button "Add" %submit
40+ el ~[tone+%danger] (text (fall error.m ""))
41+
42+++ row-of |= t=item.todo
43+ [id.t (toggle done.t text.t [%toggled id.t])]
tools/checknew file+384
@@ -0,0 +1,384 @@
1+#!/usr/bin/env python3
2+"""Run the repo's checks: all of them, a group, or some by name.
3+
4+ tools/check every check: the eval group, then ship
5+ tools/check --group eval the checks that need only urbit and Python
6+ tools/check --group ship the checks that need the fake ~zod
7+ tools/check golden 'type-*' only the checks these names or globs match
8+ tools/check --list the checks, their groups and commands
9+ tools/check -j 3 at most 3 eval checks at once
10+
11+CHECKS below is the one list of the repo's checks: docs/development.md
12+sends you here before pushing, and `nix flake check` runs this tool too
13+(see flake.nix), so a new check goes in the list and nowhere else.
14+
15+The eval checks run under `urbit eval` without a ship, several at once
16+(-j, default: as many as there are CPUs), in the order of the list, so
17+the slowest come first. The ship checks then run one at a time, in
18+order, on the ship tools/ship talks to: $JIBB_PIER, or /root/urbit/zod
19+(tools/ship also reads $JIBB_CLICK and $JIBB_SHIP_LOG). When that ship
20+isn't running, tools/check starts it first and stops it again at the end.
21+
22+Each check is one command, run from the repo root. It passes when it
23+exits 0 and, for the few that print their verdict rather than exit with
24+it, when its output matches what the list expects. Output is kept and
25+printed only for a check that fails (all of it with -v); --logs DIR
26+keeps every check's output in DIR/<name>.log.
27+
28+Exit status: 0 when every check ran and passed, 1 when a check failed,
29+2 when the checks couldn't run (an unknown name, a ship that won't start).
30+"""
31+
32+import argparse
33+import concurrent.futures
34+import fnmatch
35+import os
36+import re
37+import shutil
38+import signal
39+import subprocess
40+import sys
41+import tempfile
42+import threading
43+import time
44+
45+ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
46+SHIP = os.path.join('tools', 'ship')
47+
48+
49+class Check:
50+ def __init__(self, name, group, command, expect=None):
51+ self.name = name
52+ self.group = group # 'eval' or 'ship'
53+ self.command = command # argv, run from ROOT
54+ self.expect = expect # a regex stdout must match in full
55+
56+ def shown(self):
57+ return ' '.join(c if re.match(r'^[\w./=-]+$', c) else "'%s'" % c
58+ for c in self.command)
59+
60+
61+def tool(name, group='eval', *args):
62+ """A check that runs tools/<name> and passes when it exits 0."""
63+ base = os.path.basename(name)
64+ return Check(base, group, [os.path.join('tools', name)] + list(args))
65+
66+
67+def hoon(name, *args, expect):
68+ """A check that runs tools/hoon and compares what it prints."""
69+ return Check(name, 'eval', ['tools/hoon'] + list(args), expect=expect)
70+
71+
72+# Every check, in the order they start: the eval group, slowest first,
73+# then the ship group, in the order they must run. Times are from one
74+# run of every check, three at a time on four CPUs (2026-11-02).
75+CHECKS = [
76+ tool('type-todo-full-test'), # about 580 s
77+ tool('type-deferred-prepared-test'), # about 410 s
78+ tool('golden'),
79+ tool('importer-test'),
80+ tool('type-import-default-test'),
81+ tool('type-import-test'),
82+ tool('type-import-overlap-test'),
83+ tool('type-import-structural-test'),
84+ tool('type-union-source-test'),
85+ tool('type-union-alias-overlap-test'),
86+ tool('type-full-overlap-test'),
87+ tool('type-tlon-test'),
88+ tool('type-import-diagnostic-test'),
89+ tool('type-mark-test'),
90+ tool('type-poke-test'),
91+ tool('type-api-paths-test'),
92+ tool('type-api-evidence-test'),
93+ tool('type-hole-guards-test'),
94+ tool('type-list-alias-test'),
95+ tool('type-generic-alias-test'),
96+ tool('type-positional-face-guards-test'),
97+ tool('type-qath-guards-test'),
98+ tool('type-todo-partial-test'),
99+ tool('type-todo-api-test'),
100+ tool('type-direct-gate-test'),
101+ tool('type-page-main-test'),
102+ tool('type-buttons-test'),
103+ tool('type-doc-examples-test'),
104+ tool('type-theme-test'),
105+ tool('type-program-main-test'),
106+ tool('type-program-init-test'),
107+ tool('type-program-update-test'),
108+ tool('type-program-watch-test'),
109+ tool('type-store-test'),
110+ tool('type-generic-recursion-test'),
111+ tool('type-generic-construction-test'),
112+ tool('type-generic-pattern-test'),
113+ tool('type-deferred-test'),
114+ tool('type-deferred-resolver-test'),
115+ tool('type-deferred-context-test'),
116+ tool('type-cell-branch-test'),
117+ tool('type-closed-gate-guards-test'),
118+ tool('type-constructor-fit-guards-test'),
119+ tool('type-nested-union-guards-test'),
120+ tool('type-empty-test'),
121+ tool('type-gate-free-guards-test'),
122+ tool('type-gate-free-source-test'),
123+ tool('type-sub-guards-test'),
124+ tool('type-ask-guards-test'),
125+ tool('type-request-guards-test'),
126+ tool('type-proj-guards-test'),
127+ tool('type-arithmetic-guards-test'),
128+ tool('type-module-scope-test'),
129+ # These print their verdict and exit 0 either way.
130+ hoon('check-spans-test', 'check-spans-test', expect=r'<<>>\n'),
131+ hoon('itype-unify-test', 'itype-unify-test', expect=r'<<>>\n'),
132+ hoon('zing-hoon-reference', '-f',
133+ 'tools/testdata/zing-hoon-reference.hoon',
134+ expect=r"'Hoon flattening reference: \d+ cases passed'\n"),
135+ hoon('lead-late-hoon-reference', '-f',
136+ 'tools/testdata/lead-late-hoon-reference.hoon',
137+ expect=r"'Hoon lead/late reference: \d+ comparisons passed'\n"),
138+ hoon('succ-hoon-reference', '-f',
139+ 'tools/testdata/succ-hoon-reference.hoon',
140+ expect=r"'Hoon successor reference: \d+ comparisons passed'\n"),
141+ tool('testdata/selftest'),
142+ Check('doc-blocks', 'eval', ['tools/doc-blocks', 'docs/spec']),
143+ tool('testdata/clay-fixtures-selftest'),
144+ # The ship group. ship-selftest leaves its fixture files on the
145+ # jibb-dev desk, and ship-test, which syncs the desk to the repo
146+ # first, puts the real ones back, so it must come after.
147+ tool('testdata/ship-selftest', 'ship'),
148+ Check('ship-test', 'ship', [SHIP, 'test']),
149+ Check('check-commit', 'ship', [SHIP, 'check-commit']),
150+ tool('clay-fixtures', 'ship'),
151+]
152+
153+GROUPS = ('eval', 'ship')
154+
155+
156+# ---------------------------------------------------------------- running
157+
158+
159+class Result:
160+ def __init__(self, check):
161+ self.check = check
162+ self.ok = False
163+ self.status = None
164+ self.why = ''
165+ self.output = ''
166+ self.seconds = 0.0
167+
168+
169+_lock = threading.Lock()
170+_running = set() # process groups to kill if we're interrupted
171+
172+
173+def say(msg=''):
174+ with _lock:
175+ print(msg, flush=True)
176+
177+
178+def run(check, timeout, env):
179+ """Run one check; a Result."""
180+ res = Result(check)
181+ start = time.time()
182+ with tempfile.TemporaryFile() as out, tempfile.TemporaryFile() as err:
183+ try:
184+ proc = subprocess.Popen(
185+ check.command, cwd=ROOT, env=env, stdin=subprocess.DEVNULL,
186+ stdout=out,
187+ stderr=err if check.expect is not None else subprocess.STDOUT,
188+ start_new_session=True)
189+ except OSError as e:
190+ res.why = 'could not run %s: %s' % (check.command[0], e)
191+ return res
192+ with _lock:
193+ _running.add(proc.pid)
194+ try:
195+ res.status = proc.wait(timeout=timeout)
196+ except subprocess.TimeoutExpired:
197+ kill(proc.pid)
198+ proc.wait()
199+ res.why = 'timed out after %d s' % timeout
200+ finally:
201+ with _lock:
202+ _running.discard(proc.pid)
203+ kill(proc.pid) # anything it left running, such as urbit eval
204+ out.seek(0)
205+ err.seek(0)
206+ stdout = out.read().decode('utf-8', 'replace')
207+ stderr = err.read().decode('utf-8', 'replace')
208+ res.seconds = time.time() - start
209+ res.output = stdout + stderr
210+ if res.why:
211+ return res
212+ if res.status != 0:
213+ res.why = 'exit status %d' % res.status
214+ elif check.expect is not None and \
215+ not re.fullmatch(check.expect, stdout):
216+ res.why = "it didn't print the verdict that means a pass"
217+ else:
218+ res.ok = True
219+ return res
220+
221+
222+def kill(pgid):
223+ try:
224+ os.killpg(pgid, signal.SIGKILL)
225+ except (ProcessLookupError, PermissionError):
226+ pass
227+
228+
229+def kill_all(*_):
230+ with _lock:
231+ pids = list(_running)
232+ for pid in pids:
233+ kill(pid)
234+
235+
236+def report(res, verbose, logs, limit=300):
237+ mark = 'PASS' if res.ok else 'FAIL'
238+ line = '%s %-34s %5d s' % (mark, res.check.name, round(res.seconds))
239+ if not res.ok:
240+ line += ' (%s)' % res.why
241+ lines = res.output.rstrip('\n').split('\n') if res.output.strip() else []
242+ if logs:
243+ with open(os.path.join(logs, res.check.name + '.log'), 'w') as f:
244+ f.write('$ %s\n%s' % (res.check.shown(), res.output))
245+ if res.ok and not verbose:
246+ say(line)
247+ return
248+ shown = lines
249+ if not verbose and len(lines) > limit:
250+ shown = ['(%d lines cut; --logs DIR keeps them all)'
251+ % (len(lines) - limit)] + lines[-limit:]
252+ body = [' $ ' + res.check.shown()] + [' ' + l for l in shown]
253+ say('\n'.join([line] + body))
254+
255+
256+# ---------------------------------------------------------------- the ship
257+
258+
259+def ship(env, *args, **kw):
260+ return subprocess.run([SHIP] + list(args), cwd=ROOT, env=env, **kw)
261+
262+
263+def ship_running(env):
264+ """Whether tools/ship's ship runs: status exits 3 when it doesn't."""
265+ res = ship(env, 'status', stdout=subprocess.DEVNULL,
266+ stderr=subprocess.DEVNULL)
267+ return res.returncode != 3
268+
269+
270+# ---------------------------------------------------------------- main
271+
272+
273+def select(names, group):
274+ """The checks to run, in list order; exits 2 on a name nothing matches."""
275+ chosen = [c for c in CHECKS if group in (None, c.group)]
276+ if not names:
277+ return chosen
278+ picked = set()
279+ for name in names:
280+ hits = [c.name for c in chosen if fnmatch.fnmatchcase(c.name, name)]
281+ if not hits:
282+ where = ' in the %s group' % group if group else ''
283+ print('check: no check %s%s; tools/check --list lists them'
284+ % (name, where), file=sys.stderr)
285+ sys.exit(2)
286+ picked.update(hits)
287+ return [c for c in chosen if c.name in picked]
288+
289+
290+def main(argv):
291+ ap = argparse.ArgumentParser(
292+ prog='tools/check', description=__doc__.split('\n\n')[0],
293+ formatter_class=argparse.RawDescriptionHelpFormatter,
294+ epilog='\n\n'.join(__doc__.split('\n\n')[1:]))
295+ ap.add_argument('names', nargs='*', metavar='NAME',
296+ help='checks to run, by name or glob (default: all)')
297+ ap.add_argument('--group', choices=GROUPS,
298+ help='only the checks in this group')
299+ ap.add_argument('--list', action='store_true',
300+ help='list the checks and exit')
301+ ap.add_argument('-j', '--jobs', type=int, default=os.cpu_count() or 1,
302+ metavar='N', help='eval checks to run at once '
303+ '(default: the number of CPUs, %(default)s)')
304+ ap.add_argument('--timeout', type=int, default=2400, metavar='SECONDS',
305+ help='seconds each check may take (default %(default)s)')
306+ ap.add_argument('--logs', metavar='DIR',
307+ help="keep every check's output in DIR/<name>.log")
308+ ap.add_argument('-v', '--verbose', action='store_true',
309+ help="print every check's output, not only a failure's")
310+ args = ap.parse_args(argv)
311+
312+ checks = select(args.names, args.group)
313+ if args.list:
314+ for c in checks:
315+ print('%-34s %-5s %s' % (c.name, c.group, c.shown()))
316+ return 0
317+ if args.jobs < 1:
318+ ap.error('-j must be at least 1')
319+ if args.logs:
320+ os.makedirs(args.logs, exist_ok=True)
321+
322+ env = dict(os.environ, PYTHONDONTWRITEBYTECODE='1')
323+ signal.signal(signal.SIGTERM, lambda *_: (kill_all(), sys.exit(143)))
324+ started = time.time()
325+ results = []
326+ unable = False
327+ try:
328+ evals = [c for c in checks if c.group == 'eval']
329+ if evals:
330+ say('running %d eval check%s, %d at a time'
331+ % (len(evals), '' if len(evals) == 1 else 's', args.jobs))
332+ with concurrent.futures.ThreadPoolExecutor(args.jobs) as pool:
333+ futures = [pool.submit(run, c, args.timeout, env)
334+ for c in evals]
335+ for f in concurrent.futures.as_completed(futures):
336+ res = f.result()
337+ results.append(res)
338+ report(res, args.verbose, args.logs)
339+ ships = [c for c in checks if c.group == 'ship']
340+ if ships:
341+ started_ship = False
342+ if not ship_running(env):
343+ say('starting the ship for %d ship check%s'
344+ % (len(ships), '' if len(ships) == 1 else 's'))
345+ start = ship(env, 'start')
346+ if start.returncode != 0:
347+ say('check: the ship would not start, so the ship '
348+ 'checks did not run')
349+ unable = True
350+ ships = []
351+ started_ship = not unable
352+ else:
353+ say('running %d ship check%s on the running ship'
354+ % (len(ships), '' if len(ships) == 1 else 's'))
355+ try:
356+ for c in ships:
357+ res = run(c, args.timeout, env)
358+ results.append(res)
359+ report(res, args.verbose, args.logs)
360+ finally:
361+ if started_ship:
362+ say('stopping the ship tools/check started')
363+ ship(env, 'stop', '--force')
364+ except KeyboardInterrupt:
365+ kill_all()
366+ print('check: interrupted', file=sys.stderr)
367+ return 130
368+
369+ failed = [r for r in results if not r.ok]
370+ order = {c.name: i for i, c in enumerate(CHECKS)}
371+ say('')
372+ say('%d passed, %d failed%s in %d s' % (
373+ len(results) - len(failed), len(failed),
374+ ', ship checks not run' if unable else '',
375+ round(time.time() - started)))
376+ for r in sorted(failed, key=lambda r: order[r.check.name]):
377+ say(' failed: %s (%s)' % (r.check.name, r.why))
378+ if failed:
379+ return 1
380+ return 2 if unable else 0
381+
382+
383+if __name__ == '__main__':
384+ sys.exit(main(sys.argv[1:]))
tools/hoon+8−2
@@ -6,7 +6,9 @@
66 tools/hoon -f expr.hoon
77
88The program is `!: => <library> <expression>`, run by `urbit eval`,
9−so every arm of the library, and the standard library, is in scope. The
9+so every arm of the library, and the standard library, is in scope.
10+`!:` gives errors their positions but makes the checker run 2.2 to 2.6
11+times slower than on a ship; --no-debug leaves it out, for timings. The
1012result is printed as Hoon prints it, without colours; --raw prints a
1113cord's or tape's text instead. Errors and crashes are printed with
1214their positions mapped back to the library or the expression, and an
@@ -102,6 +104,10 @@ def main(argv):
102104 "expression to use; repeatable")
103105 ap.add_argument('--timeout', type=float, default=600, metavar='SECONDS',
104106 help='how long urbit eval may run (default: 600)')
107+ ap.add_argument('--no-debug', dest='debug', action='store_false',
108+ help="leave out !:, so the checker runs at a ship's "
109+ "speed, for timings; errors then have no "
110+ "positions")
105111 ap.add_argument('--save-program', metavar='FILE',
106112 help='also write the generated Hoon program to FILE')
107113 opts = ap.parse_args(argv)
@@ -119,7 +125,7 @@ def main(argv):
119125 expr, name = opts.expr, '(expression)'
120126 if not expr.strip():
121127 raise ue.ToolError('the expression is empty')
122− prog = ue.library_program(opts.lib)
128+ prog = ue.library_program(opts.lib, debug=opts.debug)
123129 for spec in opts.cord:
124130 line, cname = cord_binding(spec)
125131 prog.add(line, '(--cord %s)' % cname, 'harness')
tools/ship+24
@@ -5,6 +5,7 @@
55 tools/ship stop stop it
66 tools/ship status running or not; desks, revisions, mounts
77 tools/ship sync my-app assemble a desk from its folders, |commit
8+ tools/ship assemble --out DIR write the desks' files to DIR, no ship
89 tools/ship test sync the jibb-dev test desk, run -test
910 tools/ship gen-tests write tests/lib/jibb.hoon from tests/golden
1011 tools/ship check-commit prove that |commit stores .jibb files
@@ -1761,6 +1762,21 @@ def cmd_sync(ship, args):
17611762 sync(ship, desk, lib=lib, golden=args.golden, timeout=args.timeout)
17621763
17631764
1765+def cmd_assemble(ship, args):
1766+ """Write desks' files, as sync assembles them, into <out>/<desk>."""
1767+ for desk in args.desks or sorted(DESKS):
1768+ a = assemble(desk)
1769+ into = os.path.join(args.out, desk)
1770+ if os.path.exists(into):
1771+ raise Unable('%s already exists' % show(into))
1772+ for rel in sorted(a.files):
1773+ path = os.path.join(into, rel)
1774+ os.makedirs(os.path.dirname(path), exist_ok=True)
1775+ with open(path, 'wb') as f:
1776+ f.write(a.files[rel][0])
1777+ say('%s: %d files in %s' % (desk, len(a.files), show(into)))
1778+
1779+
17641780def cmd_gen_tests(ship, args):
17651781 golden = args.golden or GOLDEN
17661782 out = args.out or TESTS_LIB
@@ -2319,6 +2335,13 @@ def main(argv):
23192335 p.add_argument('--timeout', type=int, default=120,
23202336 help='seconds to wait for the commit')
23212337
2338+ p = sub.add_parser('assemble', help='write desks, as sync assembles '
2339+ 'them, into a folder; needs no ship')
2340+ p.add_argument('desks', nargs='*', metavar='desk',
2341+ help='the desks (default: all of them)')
2342+ p.add_argument('--out', required=True,
2343+ help='the folder; each desk goes in <out>/<desk>')
2344+
23222345 p = sub.add_parser('test', help='sync the jibb-dev desk and run -test '
23232346 'on its /tests')
23242347 g = p.add_mutually_exclusive_group()
@@ -2383,6 +2406,7 @@ def main(argv):
23832406 'status': lambda: cmd_status(ship, args),
23842407 'log': lambda: cmd_log(ship, args),
23852408 'sync': lambda: cmd_sync(ship, args),
2409+ 'assemble': lambda: cmd_assemble(ship, args),
23862410 'test': lambda: cmd_test(ship, args),
23872411 'gen-tests': lambda: cmd_gen_tests(ship, args),
23882412 'check-commit': lambda: cmd_check_commit(ship, args),
tools/testdata/clay-fixtures-selftest+3−1
@@ -61,7 +61,9 @@ def exercise(scenario):
6161 shutil.copy2(ROOT / 'tools/clay-fixtures', root / 'tools/clay-fixtures')
6262 shutil.copy2(ROOT / 'tools/golden_case.py', root / 'tools/golden_case.py')
6363 fake = root / 'tools/ship'
64− fake.write_text(FAKE_SHIP)
64+ # This Python, not /usr/bin/env's: a Nix build has no /usr/bin/env.
65+ fake.write_text(FAKE_SHIP.replace('/usr/bin/env python3',
66+ sys.executable, 1))
6567 fake.chmod(0o755)
6668 for name in ('vendor', 'jibb-dev', 'tests'):
6769 (root / name).symlink_to(ROOT / name, target_is_directory=True)
tools/testdata/selftest+6
@@ -574,6 +574,12 @@ def check_hoon(c, tmp):
574574 'a crash from -f FILE: %r' % out)
575575 status, out = hoon('--lib', STUB, '-f', '-', stdin=b'(mul 6 7)')
576576 c.expect((status, out) == (0, '42\n'), 'stdin: %r' % out)
577+ program = os.path.join(tmp, 'no-debug.hoon')
578+ status, out = hoon('--lib', STUB, '--no-debug', '--save-program', program,
579+ '(add 2 2)')
580+ c.expect((status, out) == (0, '4\n') and
581+ read(program).startswith(b'=>\n'),
582+ '--no-debug leaves out !: : %d %r' % (status, out))
577583
578584
579585def check_doc_blocks(c, tmp):
tools/testdata/ship-selftest+4−1
@@ -379,7 +379,8 @@ def generator_checks(tmp):
379379 {f'tests/type-full-overlap/{name}.txt' for name in (
380380 'same', 'zero', 'unsupported', 'precedence', 'duplicate',
381381 'invalid', 'distinct', 'parent', 'child', 'generic',
382− 'duplicate-generic', 'expected-basic', 'expected-graph')} <= set(normal.files))
382+ 'duplicate-generic', 'atoms', 'flag', 'nested', 'order',
383+ 'expected-basic', 'expected-graph')} <= set(normal.files))
383384 check('deferred transaction and resolver sources are assembled',
384385 {'tests/type-deferred/nested-src.txt', 'tests/type-deferred/principal-src.txt',
385386 'tests/type-deferred/expected.txt', 'tests/type-deferred-resolver/good.txt',
@@ -417,6 +418,8 @@ def generator_checks(tmp):
417418 'source', 'consumer', 'gate-model', 'gate-data', 'nonempty-subs',
418419 'mismatched-model', 'arbitrary-main', 'alias-main', 'open-message',
419420 'initializer', 'initializer-consumer', 'initializer-unfaced',
421+ 'initializer-pun', 'initializer-alias', 'initializer-open-update',
422+ 'initializer-open-view', 'initializer-nested-branch',
420423 'initializer-error', 'initializer-earlier', 'initializer-model',
421424 'initializer-message', 'initializer-generic', 'initializer-missing',
422425 'initializer-tag', 'initializer-no-main', 'initializer-subs')} <= set(normal.files))
tools/type-full-overlap-test+1−1
@@ -14,7 +14,7 @@ parser.add_argument('--update', action='store_true')
1414args = parser.parse_args()
1515fixture = root / 'tests/type-full-overlap'
1616cases = {
17− 'basic': ['same', 'zero', 'unsupported', 'precedence', 'duplicate', 'invalid', 'distinct', 'parent', 'child', 'generic', 'duplicate-generic'],
17+ 'basic': ['same', 'zero', 'unsupported', 'precedence', 'duplicate', 'invalid', 'distinct', 'parent', 'child', 'generic', 'duplicate-generic', 'atoms', 'flag', 'nested', 'order'],
1818 'graph': ['parent', 'child', 'distinct'],
1919}
2020for kind, names in cases.items():
tools/type-program-init-test+8−2
@@ -15,7 +15,10 @@ def body(name):
1515 text = (root / 'tests/lib' / name).read_text()
1616 return text[text.index('\n|%\n') + 1:]
1717
18−names = ('initializer', 'initializer-consumer', 'initializer-unfaced',
18+alternates = ('initializer-unfaced', 'initializer-pun', 'initializer-alias',
19+ 'initializer-open-update', 'initializer-open-view',
20+ 'initializer-nested-branch')
21+names = ('initializer', 'initializer-consumer') + alternates + (
1922 'initializer-error', 'initializer-earlier', 'initializer-model',
2023 'initializer-message', 'initializer-generic', 'initializer-missing',
2124 'initializer-tag', 'initializer-no-main', 'initializer-subs')
@@ -29,7 +32,10 @@ expression = ('=/ jibb .\n=/ prelude=@t prelude-text\n'
2932 ' (text:suite initializer-message)\n (text:suite initializer-generic)\n'
3033 ' (text:suite initializer-missing)\n (text:suite initializer-tag)\n'
3134 ' (text:suite initializer-no-main)\n (text:suite initializer-subs)\n ==\n'
32− '=/ failures=(list tape) (program-init-errors:suite prelude internal (text:suite initializer) (text:suite initializer-consumer) (text:suite initializer-unfaced) negatives)\n'
35+ '=/ alternates=(list [name=@ta src=@t])\n :~ ' +
36+ '\n '.join("[%" + name + " (text:suite " + name + ")]" for name in alternates) +
37+ '\n ==\n'
38+ '=/ failures=(list tape) (program-init-errors:suite prelude internal (text:suite initializer) (text:suite initializer-consumer) alternates negatives)\n'
3339 '^- @t\n?~ failures \'program initializer checks passed\'\n'
3440 '(of-wain:format (turn failures crip))\n')
3541with tempfile.TemporaryDirectory(prefix='jibb-program-init-') as tmp:
tools/type-todo-full-test+8−1
@@ -32,7 +32,7 @@ suites = {'detailed': shared + tests[report_at:legacy_at] + '\n--\n',
3232 'negative': shared + tests[negative_at:test_at] + '\n--\n'}
3333names = ('sur', 'action', 'todos', 'update', 'item', 'api', 'source',
3434 'wrong-model', 'wrong-message', 'wrong-result', 'ambiguous-mapper',
35− 'open-key', 'alias', 'wrong-watch', 'non-gate-view', 'expected')
35+ 'open-key', 'alias', 'wrong-watch', 'non-gate-view', 'cast-init', 'expected')
3636prefix = ('=/ jibb .\n=/ jibb-import\n' + reader + '\n' +
3737 ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
3838 for name in names) + '=/ suite\n')
@@ -46,6 +46,7 @@ fixtures = {'sur': 'tests/type-api-paths/todo-sur.txt',
4646 **{name: f'tests/type-todo-full/{name}.txt'
4747 for name in ('wrong-model', 'wrong-message', 'wrong-result',
4848 'ambiguous-mapper', 'open-key', 'alias', 'wrong-watch', 'non-gate-view')},
49+ 'cast-init': 'tests/type-todo-full/cast-init.txt',
4950 'expected': 'tests/type-todo-full/expected.txt'}
5051
5152def evaluate(expression, kind):
@@ -79,6 +80,12 @@ if legacy != expected:
7980 legacy.decode().splitlines(keepends=True),
8081 fromfile='expected.txt', tofile='legacy'))
8182 sys.exit('legacy full todo report differs')
83+for expression, label in (('todo-full-report', 'detailed cast initializer'),
84+ ('todo-full-legacy-report', 'legacy cast initializer')):
85+ cast = evaluate(f'({expression}:suite prelude internal sur-text action-text todos-text update-text item-text api-text cast-init-text)', 'detailed' if expression == 'todo-full-report' else 'legacy')
86+ if cast != expected:
87+ sys.stderr.buffer.write(cast)
88+ sys.exit(label + ' was rejected')
8289imported = evaluate('(todo-full-import-report:suite prelude internal sur-text action-text todos-text update-text item-text api-text source-text)', 'import')
8390if imported != b'downstream import accepted\n':
8491 sys.stderr.buffer.write(imported)
tools/urbit_eval.py+7−3
@@ -18,7 +18,9 @@ How `urbit eval` (vere 4.6) behaves, as found by trying it:
1818- A failure prints its trace to stdout and "eval: bail: %exit" (or
1919 %meme, ...) to stderr, and still exits with status 0.
2020- Type errors carry no source positions unless the program turns on
21− debug spots, so every program here starts with `!:`. Spots print as
21+ debug spots, so programs here start with `!:` (tools/hoon --no-debug
22+ leaves it out). It makes the checker run 2.2 to 2.6 times slower
23+ than on a ship. Spots print as
2224 /::[l c].[l c]> at compile time and /:<[l c].[l c]> at run time, and
2325 a syntax error as {l c}. Lines and columns count from 1, columns in
2426 bytes.
@@ -173,14 +175,16 @@ class Program:
173175 return None, line
174176
175177
176−def library_program(lib_path):
178+def library_program(lib_path, debug=True):
177179 """A program that starts `!: => <library>`, for adding what follows.
178180
179181 `!:` turns on debug spots, so errors and crash traces have positions;
180182 `=>` makes the library's core the subject of what's added next.
183+ Without debug, the program starts `=> <library>`: it runs at a ship's
184+ speed, but its errors and traces have no positions.
181185 """
182186 prog = Program()
183− prog.add('!:\n=>', '(prefix)', 'prefix')
187+ prog.add('!:\n=>' if debug else '=>', '(prefix)', 'prefix')
184188 prog.add(read_text(lib_path), display_path(lib_path), 'lib')
185189 return prog
186190
vendor/LICENSE-urbit.txtnew file+21
@@ -0,0 +1,21 @@
1+The MIT License (MIT)
2+
3+Copyright (c) 2015 Urbit
4+
5+Permission is hereby granted, free of charge, to any person obtaining a copy
6+of this software and associated documentation files (the "Software"), to deal
7+in the Software without restriction, including without limitation the rights
8+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+copies of the Software, and to permit persons to whom the Software is
10+furnished to do so, subject to the following conditions:
11+
12+The above copyright notice and this permission notice shall be included in all
13+copies or substantial portions of the Software.
14+
15+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+SOFTWARE.
vendor/SOURCES.txt+3−1
@@ -1,4 +1,6 @@
1−Pinned copies of files from the urbit/urbit repository (https://github.com/urbit/urbit).
1+Pinned copies of files from the urbit/urbit repository (https://github.com/urbit/urbit),
2+under its MIT licence, copied at that commit to LICENSE-urbit.txt here. Neither
3+file is copied into the desks.
24
35Upstream commit: 50c7f5239610fc72263df7aa99b4d171cfe9d408
46Copied from: /root/src/urbit (git -C /root/src/urbit rev-parse HEAD)