on master help sign in
Add a review of the whole repository
c7cd17dClaude
docs/README.md+1
@@ -14,6 +14,7 @@ The current full-module checker also has a narrow static/data-page slice, docume
14| [prelude-inventory.md](prelude-inventory.md) | Working source audit for the prelude's exported inventory |
14| [prelude-inventory.md](prelude-inventory.md) | Working source audit for the prelude's exported inventory |
15| [prompts/milestone-2.md](prompts/milestone-2.md) | A brief for the developer who builds milestone 2, types and prelude |
15| [prompts/milestone-2.md](prompts/milestone-2.md) | A brief for the developer who builds milestone 2, types and prelude |
16| [prompts/drop-union-rune.md](prompts/drop-union-rune.md) | The completed brief for dropping `$?`, as decided on 2026-10-30, before milestone 2 |
16| [prompts/drop-union-rune.md](prompts/drop-union-rune.md) | The completed brief for dropping `$?`, as decided on 2026-10-30, before milestone 2 |
17+| [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 |
17
18
18## The spec
19## The spec
19
20
docs/reviews/2026-11-02-repo-review.mdnew file+294
@@ -0,0 +1,294 @@
1+# Repository review, 2026-11-02
2+
3+A review of the whole repository at [`4bf477e`](https://github.com/iko-soy/jibb/commit/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36), asked for in the project chat: look for issues and gaps, and for what could be simpler or more elegant.
4+
5+How it was done: ten reviewers each took one area (the lexer and parser, three slices of the checker, the importer with the mark and prelude, the Python tooling, the test harness, the docs, the example desks, and the architecture as a whole). A second reviewer then tried to refute every finding, by reading the code and by reproducing it with `tools/hoon` where that was cheap. A final pass looked for what the ten had missed. Every eval-based check in [development.md](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L124-L194) was also run, with vere 4.6 built from nixpkgs.
6+
7+Line numbers below are links into `4bf477e`. Findings are numbered A1 to A137 in the [appendix](#appendix-every-finding).
8+
9+## Summary
10+
11+- **Everything that can run without a ship passes.** All 60 eval checks pass, including 660 of 660 golden cases. The ship checks were not run, because this container has no fake ship.
12+- **137 findings survived verification: 2 high, 31 medium and 104 low.** 75 held exactly as reported and 62 held with corrections to scope, numbers or severity. None was refuted outright. Most of the low ones are polish.
13+- **The real bugs are in the full checker, and they reject valid code.** A program that is one step away from the todo island's exact shape is rejected, an imported Hoon `(unit T)` doesn't fit the prelude's `unit`, and private prelude names leak into printed types. None of them accepts a wrong program.
14+- **The test and docs scaffolding is heavier than it needs to be.** The push checklist is about 65 commands and 49 minutes. 49 copy-paste test scripts rebuild the library 81 times. `my-app` files are copied 28 times under `tests/`, several with no guard. `status.md` is a 59 KB log that contradicts itself on whether the cart store checks.
15+- **The checker grows one example at a time.** Each new example gets a narrow recovery path, a script, a fixture folder and a paragraph of docs, where a few shared mechanisms would remove code. That trend is the main thing worth deciding on (see [Direction](#direction)).
16+
17+## Check run
18+
19+| Check | Result | Time |
20+| --- | --- | --- |
21+| `tools/golden` | 660 of 660 pass | 74 s |
22+| 49 `tools/type-*-test` scripts and `tools/importer-test` | All pass | 2,591 s together. The slowest are `type-todo-full-test` (581 s) and `type-deferred-prepared-test` (411 s) |
23+| `tools/testdata/selftest` | 22 checks, 0 failed | 141 s |
24+| `tools/doc-blocks docs/spec` | 14 `jibb` blocks, 14 `doc-*` cases, none missing | under 1 s |
25+| `tools/ship gen-tests --check` | Up to date, 660 cases | under 1 s |
26+| The 5 `tools/hoon` checks (`check-spans-test`, `itype-unify-test`, three reference files) | Print the expected values. They exit 0 whatever they print (A91) | about 23 s each |
27+| `tools/testdata/clay-fixtures-selftest` | Pass | 4 s |
28+| `tools/ship test`, `check-commit`, `clay-fixtures`, `ship-selftest` | Not run: they need a fake ship | |
29+
30+The checks ran three at a time on four CPUs and took 2,924 s of check time in all. Every eval rebuilds the 15,172-line library, which now takes about 22 s, not the 8 s the docs quote (A102).
31+
32+## Fix first
33+
34+These are the bugs and gaps with the most effect on users of the checker or the tools. Each was reproduced by the second reviewer.
35+
36+| # | Problem | Evidence | Fix | Refs |
37+| --- | --- | --- | --- | --- |
38+| 1 | **Valid programs are rejected when their view has one keyed `each (turn …)` site.** The screen that skips "doomed" ordinary inference also skips attempts that would succeed | A program whose `init` is ``^- model [0 input `"x"]`` is rejected with "module definitions need unsupported inference". Listing the same `each` site twice turns the screen off, and the same program then passes. [`add-supported-defs-core`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10293) skips every name from [`program-recovery-names`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12997-L13038). Only the [recovery chain](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14152-L14173) can add them back, and its init recoveries accept only a tuple ending in `~` or a `~` sample ([13667](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13667), [13595](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13595)) | Run ordinary inference first, then recover only the components it left unresolved. Separately, deleting the null-sample gate at 13595 makes reordered models pass and keeps all seven negative init fixtures failing, which removes about 140 lines | A119, A38, A39 |
39+| 2 | **An imported Hoon `(unit T)` does not fit the prelude's `unit`.** `fall`, `need` and `^- (unit @t)` on an imported unit give definite "do not unify" errors | [`import-to-itype`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6339-L6350) builds `[%collection %unit …]`, while the prelude's unit is an origin-tagged union ([8245-8255](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8245-L8255)). [`itype-fit-inner`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5437-L5439) answers `%bad`. No fixture passes an imported unit to `fall` or `need` | Translate Hoon `unit` to the prelude's union, as `list` already shares its representation. At the least, make a collection against a prelude-origin union fit as `%unknown`. Add a golden case | A10 |
40+| 3 | **Printed types name the private prelude module**, as `(ask.internal @ud)` and `(unit qath.internal)` inside every `page` and `theme` type | [`prelude-label`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11423-L11436) relabels only a mold's top level. Two expected outputs lock the leak in: [types-prelude-ui/types.txt:85](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/golden/types-prelude-ui/types.txt#L85) and [jibb-theme.hoon:66](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-theme.hoon#L66). [grammar.md:104](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/grammar.md#L104) says the prelude does not expose its internal module | Relabel internal origins with the public re-export name while preparing the prelude | A134 |
41+| 4 | **`?-` branches join their results by three different rules.** `?- b %.y n %.n 0` with `n=@ud` fails with "branch widening is not supported", even under `^- @ud`. A unit branch can't widen, and a union branch compares types with `!=` | Loobean pre-check at [8518](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8518), plain unify for unit and list at [7671](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7671), syntactic inequality for unions at [7841](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7841) and [7943](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7943) | One join helper for every branch kind: unify, then widen to an explicitly present parent aura or `@` | A133 |
42+| 5 | **Diagnostics the checker already has are thrown away** | An error inside a local `++` becomes the site-less "local definitions need unsupported inference" ([7236-7258](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7236-L7258)). Full-check failures don't name the definition, and the API branch drops reasons it computed ([14087](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14087), [14092](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14092)). A derived-name clash, an error in the spec, is reported as "unsupported". The full module check reports a plain `@t`/`@ud` overlap as "unsupported" while the partial report proves it ([11340-11351](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11340-L11351)) | Thread a reason, or the failing definition's name, through the resolver and recoveries. Use one overlap witness for both paths | A12, A40, A24 |
43+| 6 | **Forward references cost near-cubic time.** A 400-definition chain written top-down takes about 26 s of checker work, against about 1 s written bottom-up. The brief asks for "a 2,000-line module in seconds" | [`resolve-groups-core`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10309-L10328) is a fixpoint that resolves one link per pass and re-infers every unresolved definition each time. The dependency-ordered SCCs at [10318](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10318) are used only for cycles | Resolve in one pass over the components already computed, keeping the fixpoint as a fallback. Compute `program-recovery-names` once per module, not per definition per pass | A135, A33 |
44+| 7 | **`tools/ship` and `tools/golden` bugs** | `tools/ship --pier /abs/path stop` can SIGTERM itself, because [`processes()`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L285-L305) takes any process naming the pier for the king. The zero-byte `.txt` sync failure that [development.md:206](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L206) blames on the ship is a `MANIFEST` and `verify()` bug in `tools/ship` ([693](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L693), [1438](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1438)). When a batch dies, `tools/golden` reruns all 660 cases one by one, each rebuilding the library, and Ctrl-C doesn't stop the queue ([363-396](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L363-L396)) | Identify the king from `.vere.lock`. Test `%txt` before `?@` in `MANIFEST`. Bisect failing batches and cancel queued futures | A65, A66, A67 |
45+| 8 | **A trailing `\` in a string says "a control character"**, and the lexer's character rules have no tests | [`+bad-char`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1637-L1643) treats the line feed as a control character. No golden source holds a CR, a control byte or any byte at or above 0x80, so UTF-8 column counting and about 20 hints are untested | Make `+bad-char` return `~` for 10 (verified to give the end-of-file messages). Add `lex-char-*` and `lex-utf8-*` cases | A1, A3 |
46+
47+Medium gaps that fail closed, so nothing wrong is accepted, but common code is refused:
48+
49+| Gap | Refs |
50+| --- | --- |
51+| A union reached through two import faces stops matching once one of its cases holds another named union, because cases are compared with their display labels ([4859](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4859)) | A11 |
52+| Union matches on cases holding an imported `map`, `set`, `qeu`, `mop`, `jar` or `jug` fail, because inhabitation and gate-free proofs know only `list` and `unit` ([4793](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4793), [5785](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5785)) | A13 |
53+| An imported bare `@`, and auras such as `@uw`, are rejected, and the aura whitelist is written twice ([6326](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6326-L6329), [6198-6209](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6198-L6209)) | A14 |
54+| An undocumented 32,768-node freshness scan, run in up to six recovery arms, turns recovery off silently. The prelude alone uses 57% of it, and any imported recursive type makes it decline ([dg-scan](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14512-L14539)) | A37 |
55+| The importer accepts only `%tas` head tags and knows no standard unions, so `$%` with `%&`, `%\|` or `%0` tags, `(each a b)` and `json` fail, although the spec's import table lists them ([jibb-import.hoon:104-110](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L104-L110)) | A50 |
56+| The full todo, page and API checks read five copies of the todo `/sur` and marks that nothing compares with `my-app`. Changing `my-app/sur/todo.hoon` leaves `type-todo-partial-test` passing | A109, A81 |
57+| `eq` is decided but missing from the prelude, the checker has no gate-free type-variable constraint, and no doc tracks either | A98 |
58+
59+## Simplify
60+
61+Each row was checked to be behaviour-preserving, or the table says what it would change.
62+
63+| Opportunity | Today | Proposed | Payoff | Refs |
64+| --- | --- | --- | --- | --- |
65+| One test runner | 49 `tools/type-*-test` scripts and `importer-test`, 2,154 lines. Each one slices a `tests/lib` file at `'\n\|%\n'` or at arm names, rebinds its fixtures under new names, and starts its own eval. Several keep Python copies of the check lists in the ship arms, so eval and ship run different wrappers | One runner that reads each `tests/lib/jibb-*.hoon` header, binds `/+` and `/*` as Ford would, and runs every `test-` arm under `mule`. Keep the `my-app` byte guards, diffs and `--update` somewhere else | A 90-line prototype ran all 55 ship test arms under eval in 681 s, against 2,591 s for the scripts, and removes the eval/ship drift | A82, A120, A80, A84 |
66+| One check command | About 65 commands, kept in four lists that disagree. `status.md` misses 18 and the README names 27 of the 49 type tools | `tools/check`, with `--ship` for the ship steps. Point every doc at it | One list, and a base for the CI that milestone 7 plans | A96, A92 |
67+| One source of `my-app` | 28 byte copies of 13 `my-app` files, plus 5 marks with the `/-` line removed. Eight tools hard-code their own guard pairs, and several copies have no guard | Map `my-app` into the `jibb-dev` desk outside `/tests` and read it directly, or keep one manifest checked by one tool | Removes the copies, and the drift they allow | A108, A128, A81, A109 |
68+| One checker pipeline | The partial report ([`golden-types-in-context-core`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14385-L14510)) repeats the finalization of [`add-supported-result`](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10266-L10286) and runs none of the kind checks. The todo island gets a partial report but passes the full check | Have `infer-jibb-file-detailed` return a scheme or an error per definition, and render the report from that | Finalization in one place, and typed goldens that test the real checker | A122, A46, A42 |
69+| Program recovery | Six recovery arms repeat a preamble and a 25-35 line tail, and the copies have drifted. Four copies of the `main` walk | A `recover-def` helper and one `main-call-args` walk | A few hundred lines | A48, A39 |
70+| AST and type walkers | 56 arms, about 650 lines, in the `scope-*`, `dependency-*`, `duplicate-*`, `reserved-proj-*`, `*-has-hole` and `program-view-sites-*` families | One `node-kids` enumeration and a fold. The printers and `infer-fragment` still need their own dispatch | Fewer places to edit per new node kind | A129, A32, A21 |
71+| `%gate` and `%gate-wide` | Identical fields. 40 uses in the checker, 10 `\|(?=(%gate …) ?=(%gate-wide …))` tests and two duplicated 9-line branches | `?=(?(%gate %gate-wide) -.x)`, or one node with a `wide` flag | Noise removed without changing goldens | A123, A34 |
72+| Dead code | Five unreferenced arms and a type (A26). `one-request-interface-source`, and the narrow API branch, which gives an identical interface for `blog.jibb` (A44). `golden-types-with-modules`. The importer's `+fixture-test`. The committed, generated `tests/lib/jibb.hoon` (3,949 lines), which assembly drops and regenerates. `my-app` assembly skipping a `jibb-dev/tests` that doesn't exist | Delete them, and drop `gen-tests --check` from the checklist | Less to read and keep current | A26, A31, A44, A42, A51, A83, A111 |
73+| Test code in shipped libraries | About 550 lines, nearly a quarter of `jibb-import.hoon`, are fixtures used only by tests, and app desks vendor the file | Move them into `tests/lib/jibb-import.hoon`, as `jibb-api-paths.hoon` already does | A smaller vendored library | A52, A127 |
74+| Named state and limits | `istate`'s 27 fields are built positionally at 10 sites, `add-supported-defs-core` takes 19 positional arguments, and budgets are literals (256 ×32, 64 ×18, 32,768 ×13). The printer's 26-variable cap also rejects modules with 27 type variables | An `icontext` record with a `fresh-state` constructor, a `limits` core, and one `deferred-eligible` arm in place of three copies | Safer edits, and no printer limit on what checks | A28, A125, A124 |
75+| Parser helpers | The `?(` check is a backward token walk at 12 call sites. `+in` and `+fail` shadow the standard library, which costs 16 `in:..zuse` workarounds | One lexer branch for `?(` (verified to keep every error column). Rename `+in` and move the `+fail*` helpers into `+parser` | Smaller parser, no shadowing | A7, A8 |
76+
77+## Direction
78+
79+The checker is growing as narrow recovery paths fitted to the example files: the todo island, the cart store, the theme. In the 50 commits this clone holds, `jibb.hoon` grew by 6,199 lines, and the seven commits that add a kind of module added 1,816 of them. There are now three representations of recursive types (`%recursive`, `%jrec`, `%grec`), about 50 branch and pattern arms, and 257 strings that report something as "unsupported" or "not supported". Each slice also brings a test script, a fixture folder and a paragraph in `compiler.md`, which is now 75 KB. Fix-first item 1 shows the cost: a program one edit away from the todo's shape is rejected.
80+
81+The milestone-2 brief suggests, without requiring it, a different core: union-find bindings with levels, a queue of deferred constraints, and Maranget's usefulness check for matches ([milestone-2.md:130-142](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prompts/milestone-2.md#L130-L142)). With it, `main = (program init update view subs)` would be an ordinary application whose sample unifies with its components, and much of the 1,180 lines of program recovery could go. Whether to build that core before adding the next slice is the main decision this review raises. (A121)
82+
83+## Docs
84+
85+| Doc | Problem | Fix | Refs |
86+| --- | --- | --- | --- |
87+| [status.md](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md) | 59 KB, with a 16,412-character paragraph at line 68 and a 115-row table that repeats `git log`. It says the cart store passes ([54](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L54)) and that it fails closed ([68](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L68)). Both are true, for different entry points, and the doc says neither | A capability table (area, status, the test that proves it), a short list of known gaps, and milestone commits instead of the history table | A97, A95 |
88+| Check lists in README, development.md and status.md | They disagree. [development.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L3) says the README describes each tool in full, but only development.md's table is complete | One `tools/check`, and one list | A96 |
89+| [compiler.md](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md) and the [`jibb.hoon` header](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1-L36) | Both still say milestone 1, and the chapter map leaves out `%union-analysis`, about 4,700 lines. The program-recovery chain is described inaccurately: the "doomed attempts" the screen skips can succeed | Update the header, the chapter map and the recovery paragraph | A60, A101, A131, A41 |
90+| The library's design notes | Sections 2.6, 3 and 4.2 don't mention the `_` type hole or the `?(` hint | Add both | A2 |
91+| [open-questions.md](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/open-questions.md) | Mostly settled questions, against its own rule. Question 6 is stale. `eq` reads as implemented | Move settled ones to decisions; mark `eq` as decided, not built | A103, A100, A98 |
92+| decisions.md, prelude-inventory.md | The core-language row still says "proposed". The inventory lists shapes as future work that now exist | Update | A99, A54, A105 |
93+| Timings | "About 8 s" to build the library is now about 22 s. Every figure is measured with `!:`, which makes checker work 2.2 to 2.6 times slower than on a ship, and no doc says so | Update the figure, and say which mode each figure uses | A102, A137 |
94+| Licence | No LICENSE, and the licences of `vendor/` and the Tlon fixtures are unstated | Add a LICENSE and a line in the README | A107 |
95+
96+## Not covered
97+
98+The ship checks weren't run, so ship-only behaviour, such as `tools/ship test`, `check-commit` and `clay-fixtures`, is reviewed from the code only. The spec in `docs/spec/` was checked for internal consistency and against the code, not as language design. The findings come from targeted reading and probes, not a line-by-line audit of all 15,172 lines.
99+
100+## Appendix: every finding
101+
102+"Confirmed" means the second reviewer reproduced the finding as stated. "Partly" means the core holds but the scope, numbers or severity were corrected; the title shown is the corrected one. Severity is the second reviewer's, judged for a project in the middle of milestone 2. Some problems were found independently by two reviewers and appear in both areas, for example A38 and A119, A82 and A120, A108 and A128.
103+
104+### Lexer, parser and printers (`jibb.hoon` 1–4597)
105+
106+| # | Finding | Severity | Verdict | Kind | Where |
107+| --- | --- | --- | --- | --- | --- |
108+| A1 | A `\` or `\X` escape cut off by the end of the line reports "a control character", which contradicts 2.2 and differs from the same text at the end of the file | Medium | Confirmed | bug | [jibb.hoon:1609-1625](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1609-L1625), [jibb.hoon:1637-1643](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1637-L1643), [jibb.hoon:105-110](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L105-L110) and 1 more |
109+| A2 | Design notes 2.6, 3 and 4.2 never mention the `_` type hole or the `?(` union hint; the header still says milestone 1 | Medium | Confirmed | inconsistency | [jibb.hoon:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1), [jibb.hoon:162-231](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L162-L231), [jibb.hoon:489-505](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L489-L505) and 7 more |
110+| A3 | Section 2.2's CR/control/non-ASCII errors, UTF-8 column counting and about 20 lexer and parser hints have no golden case | Medium | Confirmed | test-gap | [jibb.hoon:1637-1645](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1637-L1645), [jibb.hoon:1630](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1630), [jibb.hoon:1709-1712](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1709-L1712) and 3 more |
111+| A4 | +read-string's +doomed call, and the notes' "or the } of an interpolation" case, can never trigger | Low | Confirmed | dead-code | [jibb.hoon:3426-3431](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L3426-L3431), [jibb.hoon:2953-2975](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L2953-L2975), [jibb.hoon:651-657](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L651-L657) and 2 more |
112+| A5 | Left-out Hoon runes get the doc's reason only sometimes, and second-character messages override 2.2's character errors | Low | Confirmed | inconsistency | [jibb.hoon:238-240](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L238-L240), [jibb.hoon:270-274](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L270-L274), [jibb.hoon:1317-1324](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1317-L1324) and 3 more |
113+| A6 | `[]` in an expression reaches the checker as "not supported", not the decided error, and open question 6 is stale; the parser's acceptance of `[]`/`m()` is a documented milestone-1 choice | Low | Partly | gap | [jibb.hoon:3492-3493](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L3492-L3493), [jibb.hoon:9400](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9400), [jibb.hoon:9440](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9440) and 4 more |
114+| A7 | The `?(` check is a backward token walk repeated at 12 parser call sites, where one lexer branch would do (verified to keep every column) | Low | Partly | simplification | [jibb.hoon:3144-3153](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L3144-L3153), [jibb.hoon:1337-1345](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1337-L1345), [jibb.hoon:3164](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L3164) and 2 more |
115+| A8 | Renaming +in and moving the +fail* helpers into +parser would remove both standard-library shadowings, the 16 `in:..zuse` workarounds and the `file` forwarders | Low | Partly | simplification | [jibb.hoon:2368-2572](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L2368-L2572), [jibb.hoon:2727-2759](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L2727-L2759), [jibb.hoon:2892-2902](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L2892-L2902) and 3 more |
116+| A9 | Path-segment loops, open-mold-line loops and item/line name branches are near copies; some proposed merges are not clearly simpler | Low | Partly | duplication | [jibb.hoon:3087-3105](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L3087-L3105), [jibb.hoon:3375-3391](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L3375-L3391), [jibb.hoon:4048-4064](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4048-L4064) and 6 more |
117+
118+### Checker core (`jibb.hoon` 4597–8364)
119+
120+| # | Finding | Severity | Verdict | Kind | Where |
121+| --- | --- | --- | --- | --- | --- |
122+| A10 | An imported Hoon (unit T) is a %collection, but the prelude unit is an origin-tagged union, so fall, need and (unit T) casts give false definite errors | High | Confirmed | bug | [jibb.hoon:6339-6350](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6339-L6350), [jibb.hoon:5437-5439](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5437-L5439), [jibb.hoon:8245-8255](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8245-L8255) and 3 more |
123+| A11 | Same-origin, non-generic unions are compared by raw case equality, so a union reached through two import faces fails once a case contains a relabelled nested union | Medium | Confirmed | bug | [jibb.hoon:4857-4860](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4857-L4860), [jibb.hoon:5415-5418](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5415-L5418), [jibb.hoon:6553-6582](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6553-L6582) and 1 more |
124+| A12 | Definite errors inside local `++` definitions are deferred and then replaced by the site-less 'local definitions need unsupported inference' | Medium | Confirmed | gap | [jibb.hoon:7236-7258](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7236-L7258), [jibb.hoon:7284-7300](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7284-L7300) |
125+| A13 | Union inhabitation and gate-free proofs only recognize list/unit collections, so union matches on cases holding imported map/set/qeu/mop/jar/jug fail closed | Medium | Confirmed | gap | [jibb.hoon:4792-4794](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4792-L4794), [jibb.hoon:5784-5788](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5784-L5788), [jibb.hoon:6342-6350](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6342-L6350) |
126+| A14 | The import bridge rejects bare `@` and other unsigned auras, and recursive molds with `?` or `*` fields; the aura whitelist is duplicated | Medium | Confirmed | gap | [jibb.hoon:6326-6329](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6326-L6329), [jibb.hoon:6198-6209](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6198-L6209), [jibb-import.hoon:1522-1526](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1522-L1526) |
127+| A15 | A ?- arm that matches no remaining case is reported as 'union pattern is not supported' instead of a definite unreachable-arm error | Low | Confirmed | gap | [jibb.hoon:7830-7833](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7830-L7833), [jibb.hoon:7869-7872](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7869-L7872), [jibb.hoon:7918-7921](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7918-L7921) and 1 more |
128+| A16 | Variable-kind refinement relies on self-bindings that itype-walk special-cases in six copied arms (plus a seventh copy at 14523) | Low | Confirmed | robustness | [jibb.hoon:4693-4727](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4693-L4727), [jibb.hoon:4873-4876](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4873-L4876), [jibb.hoon:5939](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5939) and 1 more |
129+| A17 | Union-branch coverage loop exists in three copies; list/unit branch, list-item, standard-list and fit-and-diagnose code is also duplicated, and one copy has drifted | Low | Confirmed | duplication | [jibb.hoon:7806-7945](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7806-L7945), [jibb.hoon:7583-7673](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7583-L7673), [jibb.hoon:7477-7519](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7477-L7519) and 1 more |
130+| A18 | Dead fuel and sub parameters, an always-true unify, and two dead find-imported-mold lines | Low | Confirmed | dead-code | [jibb.hoon:5089-5111](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5089-L5111), [jibb.hoon:5656-5730](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5656-L5730), [jibb.hoon:6439-6440](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L6439-L6440) |
131+| A19 | The record-width guard counts faced spine entries, so a flat faced tuple cast to a record with a faced nested tail is refused as unsupported | Low | Confirmed | gap | [jibb.hoon:5373-5377](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5373-L5377), [jibb.hoon:5656-5675](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5656-L5675) |
132+| A20 | Term-literal fit into an atom ignores the literal's aura: `%1.000`, `%&` and `%1` fit @tas or ?, and `%1.000` never fits @ud, unlike Hoon; the spec is ambiguous | Low | Partly | bug | [jibb.hoon:5459-5465](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5459-L5465), [jibb.hoon:5477-5486](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5477-L5486), [jibb.hoon:8279](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8279) and 2 more |
133+| A21 | Many hand-written itype 'contains X' traversals and a repeated variable-kind disjunction could share one children/fold helper | Low | Partly | simplification | [jibb.hoon:5064-5075](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5064-L5075), [jibb.hoon:5216-5290](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5216-L5290), [jibb.hoon:5846-5870](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5846-L5870) and 1 more |
134+| A22 | The noun-fit comment says a bare tag is 'fixed as a constant', but the tag is bound to `*` or to the expected aura | Low | Partly | inconsistency | [jibb.hoon:5390-5396](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5390-L5396), [jibb.hoon:5460-5463](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5460-L5463) |
135+| A23 | Gates fit `*`, in tension with core-language.md ('a function isn't a noun'), but the prelude relies on it | Low | Partly | inconsistency | [jibb.hoon:5390-5396](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5390-L5396), [docs/spec/core-language.md:33](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/core-language.md#L33), [docs/compiler.md:149](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L149) and 1 more |
136+
137+### Expression inference, unions, API analysis (`jibb.hoon` 8364–12535)
138+
139+| # | Finding | Severity | Verdict | Kind | Where |
140+| --- | --- | --- | --- | --- | --- |
141+| A24 | Full module check reports overlaps that the partial report proves (atoms, ? vs a loobean, nested tags) as 'unsupported', with no overlap evidence | Medium | Confirmed | inconsistency | [jibb.hoon:11340-11351](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11340-L11351), [jibb.hoon:11352-11365](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11352-L11365), [jibb.hoon:10965-10993](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10965-L10993) and 3 more |
142+| A25 | module-scope-valid checks /% mark names against the value namespace, though /% binds only a mold | Low | Confirmed | inconsistency | [jibb.hoon:11232-11242](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11232-L11242), [jibb.hoon:11298-11311](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11298-L11311), [jibb.hoon:11893-11903](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11893-L11903) and 2 more |
143+| A26 | Five unreferenced arms (plus the iwidth-elaboration type) and header comments sitting above unrelated arms | Low | Confirmed | dead-code | [jibb.hoon:8585-8603](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8585-L8603), [jibb.hoon:8919-8920](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8919-L8920), [jibb.hoon:9099-9104](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9099-L9104) and 4 more |
144+| A27 | request-graph-merge re-inlines input matching and the bound check; its fuel arguments never limit; the unconditional bound contradicts 'request-bearing graphs alone have a size limit' | Low | Confirmed | inconsistency | [jibb.hoon:11656-11728](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11656-L11728), [jibb.hoon:14192](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14192), [jibb.hoon:14234-14235](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14234-L14235) and 1 more |
145+| A28 | istate (27 fields) is built as a positional tuple at 10 sites | Low | Confirmed | robustness | [jibb.hoon:5807](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5807), [jibb.hoon:10297](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10297), [jibb.hoon:10324](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10324) and 8 more |
146+| A29 | prepare-prelude*, module-mold-types*, union-state budgets and several small predicates are near-copies | Low | Confirmed | duplication | [jibb.hoon:11614-11634](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11614-L11634), [jibb.hoon:11352-11377](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11352-L11377), [jibb.hoon:10704-10721](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10704-L10721) and 5 more |
147+| A30 | Nested unfaced tail brackets get their own duplicate-field scope (documented), while field reads treat the whole spine as one record, so [a=@ud [a=@t b=?]] is accepted but a.x is 'ambiguous' | Low | Partly | bug | [jibb.hoon:11058](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11058), [jibb.hoon:11098](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11098), [jibb.hoon:11141-11150](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11141-L11150) and 4 more |
148+| A31 | API analysis duplicates its -source/-graph gates, keeps a dead one-request-interface-source and a narrow branch that multi-request nearly subsumes | Low | Partly | duplication | [jibb.hoon:12006-12043](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12006-L12043), [jibb.hoon:12112-12178](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12112-L12178), [jibb.hoon:12253-12359](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12253-L12359) and 3 more |
149+| A32 | Expression and itype walkers repeat the same per-kind dispatch and per-container helpers | Low | Partly | duplication | [jibb.hoon:9917-10018](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9917-L10018), [jibb.hoon:10936-10955](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10936-L10955), [jibb.hoon:11134-11231](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11134-L11231) and 5 more |
150+| A33 | infer-recursive-gate is retried for every failed definition, including non-self-referencing gates, and a failed single self-loop is retried again via infer-gate-group | Low | Partly | performance | [jibb.hoon:10287-10307](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10287-L10307), [jibb.hoon:10234-10256](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10234-L10256), [jibb.hoon:10309-10328](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10309-L10328) and 3 more |
151+| A34 | %gate and %gate-wide get separate ?- arms with identical bodies in the inference chapter | Low | Partly | simplification | [jibb.hoon:8559-8576](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8559-L8576), [jibb.hoon:9850-9910](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9850-L9910), [jibb.hoon:10031-10047](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10031-L10047) and 2 more |
152+| A35 | Four capital helpers repeat the same resolve-to-ident block; show-itype has five identical variable arms; 'is a variable' tests are inlined in several places | Low | Partly | simplification | [jibb.hoon:9640-9699](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9640-L9699), [jibb.hoon:9537-9552](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9537-L9552), [jibb.hoon:8904](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8904) and 4 more |
153+| A36 | infer-call-context-args and infer-fragment's two-name %wing branch duplicate existing gates; raw-expected use at the 'direct' context sites is deliberate but uncommented | Low | Partly | simplification | [jibb.hoon:9419-9433](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9419-L9433), [jibb.hoon:8840-8844](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8840-L8844), [jibb.hoon:8423-8431](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8423-L8431) and 2 more |
154+
155+### Program, page and store mains; entry points; deferred inference (`jibb.hoon` 12535–15172)
156+
157+| # | Finding | Severity | Verdict | Kind | Where |
158+| --- | --- | --- | --- | --- | --- |
159+| A37 | An undocumented 32,768-node freshness scan, repeated in up to six recovery arms, silently turns off program recovery when it runs out or meets a %recursive type | Medium | Confirmed | robustness | [jibb.hoon:12747](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12747), [jibb.hoon:12909](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12909), [jibb.hoon:13302](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13302) and 6 more |
160+| A38 | The keyed-view screen also skips ordinary inference of init, so an init that would check ordinarily is rejected unless it matches the tuple-ending-null or null-sample recovery shape | Medium | Partly | bug | [jibb.hoon:10293](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10293), [jibb.hoon:12997-13037](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12997-L13037), [jibb.hoon:14152-14173](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14152-L14173) and 4 more |
161+| A39 | Unannotated init recovery is limited to a tuple ending in `~` or a `~` sample; dropping the null-sample gate in program-plain-init-context covers reordered models and keeps the init guards | Medium | Partly | gap | [jibb.hoon:13595](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13595), [jibb.hoon:13650-13752](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13650-L13752), [jibb.hoon:12692-12706](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12692-L12706) and 4 more |
162+| A40 | Full-check failures collapse to generic boundary messages: no definition named, API reasons discarded, and a derived-name clash (a spec error) reported as unsupported | Medium | Partly | gap | [jibb.hoon:14189-14190](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14189-L14190), [jibb.hoon:14087](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14087), [jibb.hoon:14092](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14092) and 4 more |
163+| A41 | compiler.md and status.md describe the program-recovery chain inaccurately (nonempty subscriptions, 'doomed' screen, missing null-sample and plain-view recoveries), and a comment points the wrong way | Low | Confirmed | docs | [docs/compiler.md:139](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L139), [docs/compiler.md:141](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L141), [docs/status.md:50](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L50) and 2 more |
164+| A42 | The golden-types entry chain parses and duplicate-checks the source up to three times, the deferred paths parse and resolve again, eligibility guards are repeated, and golden-types-with-modules has no callers | Low | Confirmed | simplification | [jibb.hoon:14297-14392](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14297-L14392), [jibb.hoon:14943-15017](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14943-L15017), [jibb.hoon:14176-14185](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14176-L14185) and 3 more |
165+| A43 | The no-prelude report prints a bare 'module has reserved proj name' without the partial-inference header, the prepared path reports 'module has conflicting names', and the no-prelude branch is untested | Low | Confirmed | inconsistency | [jibb.hoon:14393-14394](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14393-L14394), [jibb.hoon:14344-14347](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14344-L14347), [jibb.hoon:11305](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11305) |
166+| A44 | The 'narrow' API branch with one-request-interface-graph is redundant for blog.jibb: multi-request-interface-graph produces the identical interface and cache | Low | Confirmed | simplification | [jibb.hoon:14078-14093](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14078-L14093), [jibb.hoon:12307-12362](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12307-L12362), [jibb.hoon:12488-12531](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12488-L12531) and 1 more |
167+| A45 | Unused parameters, no-op scans and defensive or unreachable checks in the recovery and dg arms | Low | Confirmed | dead-code | [jibb.hoon:12713](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12713), [jibb.hoon:14585-14591](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14585-L14591), [jibb.hoon:14842](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14842) and 6 more |
168+| A46 | The partial golden-types report uses its own resolver, with no program recovery and no grec index, so it disagrees with the full checker; this is deliberate, labelled and tested | Low | Partly | inconsistency | [jibb.hoon:14385-14508](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14385-L14508), [jibb.hoon:14400](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14400), [jibb.hoon:14152-14173](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14152-L14173) and 1 more |
169+| A47 | The experimental deferred (dg-*) transaction cannot affect a prelude-backed full check; this is already documented, and the cost is maintenance | Low | Partly | gap | [jibb.hoon:14176-14185](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14176-L14185), [jibb.hoon:14972](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14972), [jibb.hoon:15014](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L15014) and 4 more |
170+| A48 | Program recovery arms repeat the same preamble and a 25-35 line tail, which has drifted slightly; a shared helper would remove a few hundred lines, not most of 1,000 | Low | Partly | duplication | [jibb.hoon:12712-12816](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12712-L12816), [jibb.hoon:12874-12972](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12874-L12972), [jibb.hoon:13266-13341](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13266-L13341) and 4 more |
171+| A49 | grec proves one fixed recursive-tree layout on purpose; unfolding re-proves it and re-asserts its shape with 16 ?> checks instead of reusing the parts the proof found | Low | Partly | simplification | [jibb.hoon:15085-15115](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L15085-L15115), [jibb.hoon:15118-15157](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L15118-L15157), [tests/type-generic-recursion/about.txt:1-12](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/type-generic-recursion/about.txt#L1-L12) and 1 more |
172+
173+### Hoon importer, `%jibb` mark and prelude
174+
175+| # | Finding | Severity | Verdict | Kind | Where |
176+| --- | --- | --- | --- | --- | --- |
177+| A50 | The source fallback accepts only %tas head tags, and the catalog has no hoon.hoon or zuse unions, so $% or $? with %&, %\| or %0 tags, (each a b) and json all fail closed, although the spec's import table lists them | Medium | Partly | gap | [jibb-import.hoon:104-110](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L104-L110), [jibb-import.hoon:383](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L383), [jibb-import.hoon:413](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L413) and 5 more |
178+| A51 | +fixture-test is never called, but tests/importer/about.txt says it checks the structured values | Low | Confirmed | dead-code | [jibb-import.hoon:1720](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1720), [jibb-import.hoon:1727-1839](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1727-L1839), [tests/importer/about.txt:57-58](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/importer/about.txt#L57-L58) |
179+| A52 | About 540 lines (about 23%) of test-only fixture arms live in the importer library that app desks vendor | Low | Confirmed | simplification | [jibb-import.hoon:1720-1839](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1720-L1839), [jibb-import.hoon:1887-2306](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1887-L2306), [tests/lib/jibb-import.hoon:42](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-import.hoon#L42) and 1 more |
180+| A53 | The importer header and two jibb.hoon comments name +read-mold, which no caller uses and which cannot import collections, instead of +read-named or +read-mark | Low | Confirmed | inconsistency | [jibb-import.hoon:1-31](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1-L31), [jibb.hoon:5640](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5640), [jibb.hoon:11032](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11032) |
181+| A54 | prelude-inventory.md still lists the 3g shapes as future work and contradicts itself on the 2a inference status | Low | Confirmed | docs | [docs/prelude-inventory.md:141-157](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prelude-inventory.md#L141-L157), [docs/prelude-inventory.md:35](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prelude-inventory.md#L35), [docs/prelude-inventory.md:39-52](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prelude-inventory.md#L39-L52) and 1 more |
182+| A55 | The importer drops a mop's comparator, as the spec's (mop K V) decision implies, so lte and gth mops import identically; whether the order should be checked is a design question, not an importer bug | Low | Partly | gap | [jibb-import.hoon:1242-1266](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1242-L1266), [jibb-import.hoon:1578-1581](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1578-L1581), [docs/spec/decisions.md:39](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/decisions.md#L39) and 2 more |
183+| A56 | The definite-overlap witness covers only a top-level $? of tagged cells, as documented; duplicate $% tags, ?(%a %a) and nested overlaps report 'could not be verified' | Low | Partly | inconsistency | [jibb-import.hoon:416-441](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L416-L441), [jibb-import.hoon:390-401](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L390-L401), [tests/importer/tree.txt:76-78](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/importer/tree.txt#L76-L78) and 1 more |
184+| A57 | The provenance preamble, the local-chapter scan and the standard-collection name list are copied in many places | Low | Partly | duplication | [jibb-import.hoon:527-532](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L527-L532), [jibb-import.hoon:552-557](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L552-L557), [jibb-import.hoon:629-634](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L629-L634) and 12 more |
185+| A58 | Several helpers are near-copies; the $% and $? case scans differ only in a budget that was deliberately added to the $? path alone | Low | Partly | simplification | [jibb-import.hoon:88-102](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L88-L102), [jibb-import.hoon:168-181](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L168-L181), [jibb-import.hoon:124-163](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L124-L163) and 8 more |
186+| A59 | The opt-in diagnostic readers re-run provenance, the overlap witness and the walk after a failure; this is documented | Low | Partly | performance | [jibb-import.hoon:624-660](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L624-L660), [jibb-import.hoon:535-536](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L535-L536), [docs/compiler.md:107](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L107) and 1 more |
187+| A60 | jibb.hoon's header still says milestone 1 and lists a partial API; compiler.md's 'From the header' table and its %api chapter row do not match the file | Low | Partly | docs | [jibb.hoon:1-36](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1-L36), [docs/compiler.md:25-38](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L25-L38), [docs/compiler.md:51](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L51) and 3 more |
188+| A61 | The %jibb mark's %txt round trip drops the final newline, deliberately mirroring %hoon; changing grab txt would also require changing tools/ship's assertion | Low | Partly | robustness | [mar/jibb.hoon:6](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/mar/jibb.hoon#L6), [mar/jibb.hoon:11](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/mar/jibb.hoon#L11), [mar/jibb.hoon:14](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/mar/jibb.hoon#L14) and 2 more |
189+| A62 | +$ attr spells pad and gap as eight constant cases where a spacing mold and two cases would match the other attributes | Low | Partly | simplification | [prelude.jibb:405-417](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/prelude.jibb#L405-L417), [docs/spec/overview.md:198](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/overview.md#L198), [docs/spec/overview.md:204](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/overview.md#L204) |
190+| A63 | internal.jibb has no comment saying that list.core and unit.core are the public prelude's validated molds, which the compiler injects; tuba-text has no sample mold | Low | Partly | docs | [internal.jibb:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/internal.jibb#L1), [internal.jibb:22](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/internal.jibb#L22), [internal.jibb:29-33](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/internal.jibb#L29-L33) and 2 more |
191+| A64 | The prelude's mold each (Hoon 1c) and the element gate each are unrelated, as the spec requires; whether to rename is a spec question | Low | Partly | inconsistency | [prelude.jibb:131-133](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/prelude.jibb#L131-L133), [prelude.jibb:464-465](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/prelude.jibb#L464-L465), [docs/spec/overview.md:184](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/overview.md#L184) and 2 more |
192+
193+### Python tooling
194+
195+| # | Finding | Severity | Verdict | Kind | Where |
196+| --- | --- | --- | --- | --- | --- |
197+| A65 | Ship.processes() treats any process whose argv names the absolute pier path as the king, tools/ship itself included, so `tools/ship --pier /abs/pier stop` can SIGTERM itself and `start` reports 'already running' with no ship | Medium | Confirmed | bug | [tools/ship:285-305](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L285-L305), [tools/ship:340-344](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L340-L344), [tools/ship:388-409](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L388-L409) and 2 more |
198+| A66 | sync's verify reports a zero-byte .txt file as different: %txt stores ~ (an atom) for it, MANIFEST classifies any atom as %cord before checking for %txt, and verify() requires 'wain' for .txt; docs blame the ship | Medium | Confirmed | bug | [tools/ship:693-696](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L693-L696), [tools/ship:1437-1439](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1437-L1439), [docs/development.md:206](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L206) and 1 more |
199+| A67 | When the batched eval dies, tools/golden reruns every case alone, each compiling the whole library (no bisection), under the same 600 s timeout, and Ctrl-C does not stop the queued reruns | Medium | Confirmed | robustness | [tools/golden:363-396](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L363-L396), [tools/golden:285-286](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L285-L286), [tools/golden:522-526](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L522-L526) |
200+| A68 | jibb-import.hoon is spliced into the '(harness)' segment, so its compile errors get the 'golden harness doesn't compile / golden arm must be' headline with harness line numbers, and crash frames inside the reader are dropped | Low | Confirmed | bug | [tools/golden:243-247](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L243-L247), [tools/golden:287-294](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L287-L294), [tools/golden:311-316](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L311-L316) and 1 more |
201+| A69 | tools/ship test/sync/gen-tests accept a nonexistent --golden folder: zero cases are generated, the other tests/lib programs are dropped as 'isolated', and -test passes with 0 tests | Low | Confirmed | gap | [tools/ship:1018-1021](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1018-L1021), [tools/ship:877-898](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L877-L898), [tools/ship:1754-1778](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1754-L1778) and 1 more |
202+| A70 | ship-selftest hard-codes 44 tests/lib program names (11 of the 55 are missing) and dozens of fixture names that assemble() copies generically | Low | Confirmed | test-gap | [tools/testdata/ship-selftest:301-345](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/ship-selftest#L301-L345), [tools/testdata/ship-selftest:346-448](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/ship-selftest#L346-L448) |
203+| A71 | check_fixture_crash_isolated in tools/testdata/selftest runs the real 15k-line compiler and asserts on checker output, contradicting the 'about half a minute' docstring | Low | Confirmed | inconsistency | [tools/testdata/selftest:373-410](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/selftest#L373-L410), [tools/testdata/selftest:5](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/selftest#L5) |
204+| A72 | tools/golden embeds the prelude and internal prelude twice per module-types program (as arms and inline in prepare-prelude) and repeats the read-to-rap-literal code several times | Low | Confirmed | simplification | [tools/golden:201-222](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L201-L222), [tools/golden:263-286](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L263-L286) |
205+| A73 | delete_batches keeps an empty-list special case (`batches or partition([])`) that only a selftest relies on; sync never calls it with no paths | Low | Confirmed | simplification | [tools/ship:1512-1538](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1512-L1538), [tools/testdata/ship-selftest:550-554](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/ship-selftest#L550-L554) |
206+| A74 | A non-UTF-8 about.txt makes tools/golden and tools/ship gen-tests die with a UnicodeDecodeError traceback and exit 1 instead of a report and exit 2 | Low | Confirmed | robustness | [tools/golden_case.py:34-41](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden_case.py#L34-L41), [tools/golden:160-168](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L160-L168), [tools/ship:1114](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1114) and 1 more |
207+| A75 | tools/golden substitutes harness placeholders after splicing in case sources, so a Jibb source that interpolates {types-expr}, {import-helper}, {modules-expr}, {module-helper} or {prelude-helper} is silently rewritten or breaks the harness (latent: nothing in the corpus triggers it) | Low | Partly | bug | [tools/golden:287-294](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L287-L294), [tools/golden:243-247](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L243-L247), [tools/golden:285-286](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L285-L286) and 1 more |
208+| A76 | The eval and ship runners duplicate per-case metadata handling and the fixture-compiling Hoon helpers, and crash isolation has drifted (the ship's plain check-types is not under mule); the per-batch/per-case entry-point choice is equivalent and keeps stub libraries minimal | Low | Partly | duplication | [tools/golden:103-143](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L103-L143), [tools/golden:248-262](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L248-L262), [tools/ship:1058-1168](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1058-L1168) and 5 more |
209+| A77 | tools/ship keeps its own copies of noun decoding, cord-literal escaping, display paths and KNOT/TERM; some are not drop-in replaceable (tuple vs Cell nouns, pier-first urbit lookup) | Low | Partly | duplication | [tools/ship:121-228](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L121-L228), [tools/ship:83-84](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L83-L84), [tools/ship:266-273](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L266-L273) and 6 more |
210+| A78 | tools/clay-fixtures repeats one run/compare/print block for 11 fixtures (plus build, import and Tlon variants), and the Tlon step clones tools/ship into a scratch repo just to add one /sur file; the restore has no timeout | Low | Partly | simplification | [tools/clay-fixtures:54-145](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/clay-fixtures#L54-L145), [tools/clay-fixtures:188-238](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/clay-fixtures#L188-L238), [tools/clay-fixtures:147-186](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/clay-fixtures#L147-L186) and 1 more |
211+| A79 | tools/ship defaults to /root/urbit/zod and /root/src/tools/pkg/click/click (documented and overridable), and its find_urbit ignores $URBIT | Low | Partly | tooling | [tools/ship:53-54](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L53-L54), [tools/ship:18-24](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L18-L24), [tools/noun.py:5-6](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/noun.py#L5-L6) and 2 more |
212+
213+### Test harness
214+
215+| # | Finding | Severity | Verdict | Kind | Where |
216+| --- | --- | --- | --- | --- | --- |
217+| A80 | Eval scripts cut or bypass the ship's test- arms and keep their own copies of the check lists, so eval and ship run different wrapper code | Medium | Confirmed | inconsistency | [tools/type-store-test:19-34](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-store-test#L19-L34), [tests/lib/jibb-store.hoon:256-260](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-store.hoon#L256-L260), [tools/type-todo-full-test:21-32](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-full-test#L21-L32) and 6 more |
218+| A81 | Test copies of my-app files are guarded inconsistently: the todo /sur and mark copies and all 14 golden copies are unchecked, and no check parses my-app's own .jibb files | Medium | Confirmed | gap | [tests/type-api-paths/about.txt:2](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/type-api-paths/about.txt#L2), [tests/type-api-paths/todo-sur.txt](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/type-api-paths/todo-sur.txt), [tests/type-api-paths/todo-action.txt](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/type-api-paths/todo-action.txt) and 3 more |
219+| A82 | The 49 tools/type-*-test scripts and importer-test rebuild by hand the bindings each ship test file already declares; a generic runner over tests/lib could replace most of them and run several times faster | Medium | Partly | simplification | [tools/type-deferred-prepared-test:10-48](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-deferred-prepared-test#L10-L48), [tools/type-todo-full-test:16-97](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-full-test#L16-L97), [tools/type-arithmetic-guards-test:13-28](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-arithmetic-guards-test#L13-L28) and 1 more |
220+| A83 | The committed, generated tests/lib/jibb.hoon (3,949 lines) is never used: assembly drops it and regenerates it | Low | Confirmed | simplification | [tools/ship:887-898](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L887-L898), [tools/ship:1754-1778](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L1754-L1778), [docs/development.md:186](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L186) and 1 more |
221+| A84 | Each new test is registered by hand in several places, and some of those lists are incomplete | Low | Confirmed | duplication | [tools/testdata/ship-selftest:304-346](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/ship-selftest#L304-L346), [tools/testdata/ship-selftest:348-446](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/ship-selftest#L348-L446), [docs/development.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L3) and 2 more |
222+| A85 | Some checks test little: a one-line pass/fail golden file for unification, and three Hoon-versus-Hoon reference files that build the full library for nothing | Low | Confirmed | simplification | [tests/checker/unification.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/checker/unification.txt#L1), [tests/lib/jibb-typecheck.hoon:5-13](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-typecheck.hoon#L5-L13), [tools/testdata/succ-hoon-reference.hoon:1-9](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/testdata/succ-hoon-reference.hoon#L1-L9) and 3 more |
223+| A86 | 36 tests/lib files repeat the same lines-to-cord helper, and many suites build Jibb sources inline from '\0a' cords | Low | Confirmed | duplication | [tests/lib/jibb-store.hoon:8-45](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-store.hoon#L8-L45), [tests/lib/jibb-program-watch.hoon:12-55](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-program-watch.hoon#L12-L55) |
224+| A87 | The golden naming table documents only lex-, inline- and doc- prefixes, and 10 about.txt files miss required lines; nothing lints them | Low | Confirmed | docs | [docs/development.md:212-218](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L212-L218), [tests/golden/types-constructor-context/about.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/golden/types-constructor-context/about.txt#L1), [tests/golden/types-partial-locals/about.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/golden/types-partial-locals/about.txt#L1) and 1 more |
225+| A88 | Fixture folders, script names, arm names and flags follow no consistent mapping | Low | Confirmed | inconsistency | [tests/type-program-watch/about.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/type-program-watch/about.txt#L1), [tools/type-gate-free-source-test:13](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-gate-free-source-test#L13), [tools/type-program-init-test:27-32](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-program-init-test#L27-L32) and 3 more |
226+| A89 | tools/clay-fixtures repeats one run-and-compare block per fixture, and the importer fixture list is spread over several places with a hand-kept count | Low | Confirmed | duplication | [tools/clay-fixtures:15-238](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/clay-fixtures#L15-L238), [tools/importer-test:10-37](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/importer-test#L10-L37), [tests/lib/jibb-import.hoon:3-42](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-import.hoon#L3-L42) and 1 more |
227+| A90 | The docs' claims about 2,000-line modules and 100,000 nested brackets have no automated test | Low | Confirmed | test-gap | [docs/compiler.md:209](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L209), [docs/development.md:230](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L230) |
228+| A91 | Five 'Before pushing' checks run through tools/hoon are eyeball checks: they exit 0 whatever value they print | Low | Partly | bug | [docs/development.md:179-183](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L179-L183), [tools/hoon:149-171](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/hoon#L149-L171) |
229+| A92 | No single command runs the ~65-command push checklist (about 49 minutes serially); CI is planned only for milestone 7 | Low | Partly | gap | [docs/development.md:124-192](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L124-L192), [docs/development.md:234](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L234), [docs/spec/implementation-plan.md:31](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/implementation-plan.md#L31) |
230+| A93 | The importer's +fixture-test is never run although tests/importer/about.txt says it checks structured values; test-support arms live in the shipped libraries | Low | Partly | dead-code | [jibb-import.hoon:1720-1842](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1720-L1842), [tests/importer/about.txt:58](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/importer/about.txt#L58), [jibb.hoon:4505-4595](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4505-L4595) and 2 more |
231+| A94 | Type-checker golden cases also carry full token and tree outputs (about 73% of all parser golden lines), a deliberate trade-off that adds churn when sources or printers change | Low | Partly | simplification | [docs/spec/implementation-plan.md:40](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/implementation-plan.md#L40), [docs/development.md:12](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L12), [tools/ship:947](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L947) |
232+
233+### Documentation
234+
235+| # | Finding | Severity | Verdict | Kind | Where |
236+| --- | --- | --- | --- | --- | --- |
237+| A95 | status.md says the cart store fully checks (line 54) and also that it fails closed (line 68), because the golden-types path and the full-module path disagree and status.md never says which it means | Medium | Confirmed | inconsistency | [docs/status.md:54](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L54), [docs/status.md:68](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L68), [tests/golden/doc-grammar-06-cart-store/types.txt:2](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/golden/doc-grammar-06-cart-store/types.txt#L2) and 2 more |
238+| A96 | The hand-maintained check lists have drifted: status.md's 'Checking it' misses 18 checks, the README names 27 of the 49 type-* tools, and development.md:3 points to the README as the full reference | Medium | Confirmed | tooling | [docs/status.md:234-286](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L234-L286), [docs/development.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L3), [docs/development.md:124-194](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L124-L194) and 3 more |
239+| A97 | status.md is a 59 KB append-only log: a 16,412-character paragraph, a 115-row history table that repeats git log, and stale dates | Medium | Confirmed | docs | [docs/status.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L3), [docs/status.md:68](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L68), [docs/status.md:90](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L90) and 2 more |
240+| A98 | `eq` is absent from the prelude and the checker has no gate-free type-variable constraint, and no doc lists either as outstanding | Medium | Partly | gap | [docs/open-questions.md:17](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/open-questions.md#L17), [docs/spec/decisions.md:31](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/decisions.md#L31), [docs/spec/grammar.md:137](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/grammar.md#L137) and 4 more |
241+| A99 | decisions.md's Core language row still says three rules are proposed, but core-language.md marks none and the decisions rows record them as adopted | Low | Confirmed | inconsistency | [docs/spec/decisions.md:63](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/decisions.md#L63), [docs/spec/core-language.md:5](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/core-language.md#L5), [docs/spec/decisions.md:21](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/decisions.md#L21) and 2 more |
242+| A100 | The EBNF admits `[]` but not `m()`, the checker reports `[]` as unsupported rather than as the decided error, nothing tests `[]`, and open-questions Q6 is stale | Low | Confirmed | inconsistency | [docs/spec/grammar.md:245](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/grammar.md#L245), [docs/spec/grammar.md:250](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/grammar.md#L250), [docs/spec/decisions.md:13](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/decisions.md#L13) and 6 more |
243+| A101 | compiler.md's chapter table omits `%union-analysis`, which holds the golden-types and module-checking entry points; the page and the file header still say milestone 1 | Low | Confirmed | docs | [docs/compiler.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L3), [docs/compiler.md:23-38](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L23-L38), [docs/compiler.md:44-57](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L44-L57) and 4 more |
244+| A102 | Three docs say starting urbit eval and building the library takes about 8 s; it takes about 23 s now | Low | Confirmed | docs | [docs/development.md:122](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L122), [docs/compiler.md:209](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L209), [docs/status.md:112](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L112) |
245+| A103 | open-questions.md mostly holds settled questions, against its own stated rule, its 'as of' date is stale, and status.md cites a nonexistent 'corpus question 3' | Low | Confirmed | docs | [docs/open-questions.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/open-questions.md#L3), [docs/open-questions.md:21](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/open-questions.md#L21), [docs/status.md:108](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/status.md#L108) and 1 more |
246+| A104 | 'The doc itself is the authority' conflicts with the repo spec, which records decisions the Claude doc does not yet have | Low | Confirmed | inconsistency | [docs/development.md:9](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L9), [README.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/README.md#L3), [docs/README.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/README.md#L3) and 2 more |
247+| A105 | prelude-inventory.md says nine molds already in the prelude 'can be written once present', and its 2a table disagrees with its own paragraph | Low | Confirmed | docs | [docs/prelude-inventory.md:141-159](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prelude-inventory.md#L141-L159), [docs/prelude-inventory.md:35-52](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prelude-inventory.md#L35-L52), [prelude.jibb:58-97](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/prelude.jibb#L58-L97) |
248+| A106 | Tool narratives have been appended under Ground rules and Commits in development.md, and status content sits in the docs/README.md index | Low | Confirmed | docs | [docs/development.md:17](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L17), [docs/development.md:236](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/development.md#L236), [docs/README.md:5](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/README.md#L5) |
249+| A107 | The repo has no licence and does not state the licences of its vendored code; CI is deliberately deferred to milestone 7 | Low | Partly | gap | [README.md:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/README.md#L1), [vendor/SOURCES.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/vendor/SOURCES.txt#L1), [tests/importer/tlon-license.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/importer/tlon-license.txt#L1) and 1 more |
250+
251+### Example desk, host desk and vendored files
252+
253+| # | Finding | Severity | Verdict | Kind | Where |
254+| --- | --- | --- | --- | --- | --- |
255+| A108 | my-app files are copied 28 times under tests/, with sync pairs hand-coded in 8 tools and several copies never checked | Medium | Confirmed | duplication | [tools/type-page-main-test:15-30](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-page-main-test#L15-L30), [tools/type-todo-full-test:16-19](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-full-test#L16-L19), [tools/type-todo-partial-test:18-21](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-partial-test#L18-L21) and 9 more |
256+| A109 | Nothing compares the five todo reader copies (todo-sur.txt and four mark copies) with my-app. Clay checks cover only item, action and the todo-action mark | Medium | Partly | test-gap | [tools/type-todo-partial-test:18-34](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-partial-test#L18-L34), [tools/type-todo-full-test:16-43](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-full-test#L16-L43), [tools/type-page-main-test:15-40](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-page-main-test#L15-L40) and 5 more |
257+| A110 | The example marks are built only as Hoon cores (%ca); no test builds them as marks (%cb) or checks their vale | Low | Confirmed | test-gap | [tests/clay-fixtures/build.txt:6-11](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/clay-fixtures/build.txt#L6-L11), [tests/clay-fixtures/mark-shape.txt:4](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/clay-fixtures/mark-shape.txt#L4), [tools/ship:685](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L685) |
258+| A111 | The my-app assembly skips jibb-dev/tests, which does not exist | Low | Confirmed | dead-code | [tools/ship:63](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L63), [README.md:81](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/README.md#L81), [tools/ship:2261](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L2261) |
259+| A112 | Milestone-4 tension: my-app deliberately holds the failing buttons example, and its doc-identical theme names a static font that milestone 4 will treat as missing | Low | Partly | gap | [my-app/ui/components/buttons.jibb:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/ui/components/buttons.jibb#L3), [my-app/ui/theme.jibb:7](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/ui/theme.jibb#L7), [docs/prompts/milestone-2.md:154](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prompts/milestone-2.md#L154) and 4 more |
260+| A113 | Importer-only fixtures (sur/import-fixture.hoon, mar/label.hoon) sit on the example desk, and the Tlon probe needs a temp-copy, sync and restore of my-app | Low | Partly | simplification | [my-app/sur/import-fixture.hoon:1-7](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/sur/import-fixture.hoon#L1-L7), [my-app/mar/label.hoon:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/mar/label.hoon#L1), [tools/clay-fixtures:144-187](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/clay-fixtures#L144-L187) and 2 more |
261+| A114 | The importer fixture's $^(@ud [a=@ud b=@t]) is a malformed $^ whose mold accepts only atom-headed cells, though its type (and the import) admits atoms | Low | Partly | bug | [my-app/sur/import-fixture.hoon:6](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/sur/import-fixture.hoon#L6), [tests/clay-fixtures/ford-nested-union-expected.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/clay-fixtures/ford-nested-union-expected.txt#L1), [tests/clay-fixtures/ford-nested-union-bridge-expected.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/clay-fixtures/ford-nested-union-bridge-expected.txt#L1) and 1 more |
262+| A115 | my-app/mar/todo-action.hoon claims it is 'not supplied by the design doc', but apart from that comment line it is the overview's block | Low | Partly | inconsistency | [my-app/mar/todo-action.hoon:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/mar/todo-action.hoon#L1), [docs/spec/overview.md:310-316](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/overview.md#L310-L316), [tests/type-api-paths/todo-action.txt:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/type-api-paths/todo-action.txt#L1) and 1 more |
263+| A116 | No %todo/%blog fixture agents and no page embedding basket exist yet for milestones 5-6, and my-app's agentless desk.bill `~` is undocumented | Low | Partly | gap | [my-app/desk.bill:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/my-app/desk.bill#L1), [docs/spec/overview.md:350](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/overview.md#L350), [docs/spec/overview.md:358](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/overview.md#L358) and 4 more |
264+| A117 | Every desk gets all vendor packages by documented design (so app desks carry lib/test.hoon), and the zuse kelvin is hand-copied in two desks | Low | Partly | simplification | [tools/ship:59-69](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L59-L69), [tools/ship:881-884](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/ship#L881-L884), [vendor/SOURCES.txt:9-10](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/vendor/SOURCES.txt#L9-L10) and 3 more |
265+| A118 | SOURCES.txt credits the docket files to urbit/urbit's legacy pkg/landscape and records a machine-local path; the files themselves are current | Low | Partly | docs | [vendor/SOURCES.txt:1-15](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/vendor/SOURCES.txt#L1-L15) |
266+
267+### Architecture (cross-cutting)
268+
269+| # | Finding | Severity | Verdict | Kind | Where |
270+| --- | --- | --- | --- | --- | --- |
271+| A119 | The one-site keyed-view screen skips ordinary inference for all five program components, so a fully annotated, valid program is rejected | High | Confirmed | bug | [jibb.hoon:10293](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10293), [jibb.hoon:12975-13038](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L12975-L13038), [jibb.hoon:13595](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L13595) and 3 more |
272+| A120 | 49 near-identical type-*-test scripts each start an eval and rebuild the library | Medium | Confirmed | tooling | [tools/type-closed-gate-guards-test:1-29](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-closed-gate-guards-test#L1-L29), [tools/type-todo-full-test:19-98](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-todo-full-test#L19-L98), [tools/golden:61](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/golden#L61) |
273+| A121 | The checker grows by example-fitted recovery slices rather than a module-wide deferred-constraint core; the brief suggests that core but does not prescribe it | Medium | Partly | gap | [docs/prompts/milestone-2.md:130-142](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/prompts/milestone-2.md#L130-L142), [docs/spec/implementation-plan.md:15](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/spec/implementation-plan.md#L15), [jibb.hoon:4674-4691](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L4674-L4691) and 2 more |
274+| A122 | The partial golden report and the full-module interface are separate pipelines with duplicated finalization, and the typed goldens exercise only the report | Medium | Partly | inconsistency | [jibb.hoon:14385-14510](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14385-L14510), [jibb.hoon:10266-10286](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10266-L10286), [jibb.hoon:14176-14184](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14176-L14184) and 1 more |
275+| A123 | %gate and %gate-wide carry identical fields and the checker handles both identically | Low | Confirmed | simplification | [jibb.hoon:945-948](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L945-L948), [jibb.hoon:8559-8575](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8559-L8575), [jibb.hoon:9848-9862](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9848-L9862) |
276+| A124 | Hard-coded budgets are scattered, and the printer's 26-variable cap also gates interface acceptance | Low | Confirmed | robustness | [jibb.hoon:10279](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10279), [jibb.hoon:10095](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10095), [jibb.hoon:14939](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L14939) and 3 more |
277+| A125 | The 27-field istate is built from positional literals in 10 places, and resolver arms take up to 19 positional arguments | Low | Confirmed | robustness | [jibb.hoon:5807](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5807), [jibb.hoon:10287-10297](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10287-L10297), [jibb.hoon:10309-10324](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10309-L10324) |
278+| A126 | Tests call 137 internal library arms directly, coupling guards to the current code shape | Low | Confirmed | test-gap | [tests/lib/jibb-deferred.hoon:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-deferred.hoon#L1), [tests/lib/jibb-cell-branch.hoon:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-cell-branch.hoon#L1), [tests/lib/jibb-generic-pattern.hoon:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/lib/jibb-generic-pattern.hoon#L1) |
279+| A127 | About 586 lines of jibb-import.hoon, which app desks vendor, are test fixtures and printers | Low | Confirmed | simplification | [jibb-import.hoon:1720-2308](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb-import.hoon#L1720-L2308), [jibb.hoon:5555-5615](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L5555-L5615), [README.md:11](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/README.md#L11) |
280+| A128 | my-app sources are copied 28 times under tests, with 9 hand-written byte checks in 8 tools | Low | Confirmed | duplication | [tools/type-page-main-test:14-31](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/type-page-main-test#L14-L31), [tests/golden/types-module-fixtures/modules/ui/api/blog.jibb:1](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/golden/types-module-fixtures/modules/ui/api/blog.jibb#L1) |
281+| A129 | Several AST walker families and itype predicates repeat the same recursion skeleton | Low | Partly | simplification | [jibb.hoon:7097-7223](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7097-L7223), [jibb.hoon:9917-10022](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9917-L10022), [jibb.hoon:11059-11297](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11059-L11297) and 2 more |
282+| A130 | Dead arms, copy-pasted -source/-graph twins and many golden-types wrappers | Low | Partly | duplication | [jibb.hoon:8591-8603](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8591-L8603), [jibb.hoon:8661-8666](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8661-L8666), [jibb.hoon:10142-10145](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10142-L10145) and 6 more |
283+| A131 | The library header and compiler.md chapter map are stale (milestone 1, no %union-analysis), and %union-analysis mislabels about 4,700 lines | Low | Partly | inconsistency | [jibb.hoon:1-36](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L1-L36), [jibb.hoon:10452](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10452), [docs/compiler.md:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L3) and 2 more |
284+| A132 | The prelude source is reparsed on each direct-prelude-evidence call, and program-recovery-names is recomputed for every definition | Low | Partly | performance | [jibb.hoon:8633-8647](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8633-L8647), [jibb.hoon:10293](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10293), [jibb.hoon:11488-11492](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11488-L11492) and 2 more |
285+
286+### Found by the completeness pass
287+
288+| # | Finding | Severity | Verdict | Kind | Where |
289+| --- | --- | --- | --- | --- | --- |
290+| A133 | Loobean, unit/list and union ?- branches join arm results by three different rules: a loobean branch rejects a decimal literal against @ud even under ^- @ud, a unit/list branch unifies them but cannot widen, and a union branch requires syntactically equal normalized types | Medium | Confirmed | inconsistency | [jibb.hoon:8518-8519](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L8518-L8519), [jibb.hoon:7671-7672](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7671-L7672), [jibb.hoon:7841-7842](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L7841-L7842) and 2 more |
291+| A134 | Printed types name the private prelude module: `(ask.internal @ud)` and `(unit qath.internal)` appear when ask or qath is reached through page or theme, and a golden and a ship test lock this in | Medium | Confirmed | bug | [jibb.hoon:11423-11436](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L11423-L11436), [prelude.jibb:3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/prelude.jibb#L3), [prelude.jibb:338](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb/prelude.jibb#L338) and 6 more |
292+| A135 | Top-level resolution is a whole-module fixpoint that resolves one link of a forward chain per pass. It re-infers every unresolved definition and rescans the module on each pass, giving roughly cubic cost, and the SCC order it already computes is used only for cycles. | Medium | Partly | performance | [jibb.hoon:10309-10328](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10309-L10328), [jibb.hoon:10293](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10293), [jibb.hoon:10303](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L10303) and 6 more |
293+| A136 | The type printer leaves right-nested tuples unflattened and does not name non-recursive records or imported non-recursive Hoon molds; the missing-tag error for a named imported union lists its cases instead of naming it | Low | Partly | inconsistency | [jibb.hoon:9570](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9570), [jibb.hoon:9562-9565](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/jibb-dev/lib/jibb.hoon#L9562-L9565), [tests/golden/types-missing-tag-imported/types.txt:2-3](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tests/golden/types-missing-tag-imported/types.txt#L2-L3) and 5 more |
294+| A137 | Every eval tool compiles with `!:`, which makes checker work about 2.2-2.6x slower and library build about 20% slower than a ship build; docs/ never says so, though the published figures are caveated A/B comparisons and status.md's 8 s startup figure is stale | Low | Partly | docs | [tools/urbit_eval.py:176-185](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/tools/urbit_eval.py#L176-L185), [docs/compiler.md:65](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L65), [docs/compiler.md:67](https://github.com/iko-soy/jibb/blob/4bf477e2c4a093f7d2d6aa2bff1ce5858bd98e36/docs/compiler.md#L67) and 5 more |