on master help sign in
Move the importer's test fixtures into its test suite

jibb-dev/lib/jibb-import.hoon, which app desks vendor, carried 543 lines that only the tests used: +fixture-output, the never-called +fixture-test, and the synthetic types and wrapped sources they probe. This is review question 33 (A52). They now live in tests/lib/jibb-import.hoon, as jibb-api-paths.hoon already keeps its own probes, and the library ends with its printers, which clay fixtures and other suites still use. The library drops to 1,766 lines. Each moved probe starts with =, jibb-import, above its gate so that its sample still shadows standard names such as mark, as it did inside the library. Under =, the name ..zuse no longer finds the standard library, so the probes take its type from one arm, +zuse-type. +fixture-test, which tests/importer/about.txt said checked the structured values behind the golden file but nothing called (A51, A93), now runs as the suite's test-structured-values arm. All of its expectations hold; a wrong one is reported by name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U4FzmSdubYxmZGDp2VJRAQ

commit933bc83baec58a538c6386ce53380826e9033280 authorClaude <noreply@anthropic.com> dateTue 3 Nov 2026, 01:56 (3 hours ago) parent32f4b78
5 files changed+574−549
docs/compiler.md+1−1 docs/development.md+2−2 jibb-dev/lib/jibb-import.hoon−543 tests/importer/about.txt+5−1 tests/lib/jibb-import.hoon+566−2
docs/compiler.md+1−1
@@ -102,7 +102,7 @@ A known closed union with two or more arms can be matched when each arm provably
102102
103103A known closed union can also provide context to each arm of a complete loobean or unit-shaped branch in a cast or a call with a known union sample. Nested branches and transparent groups work; a mismatch reports the expected union and the offending arm. General patterns and context through bodies with local definitions remain unsupported, and unrelated unresolved tags stay pending.
104104
105−The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also recognizes a direct ordered-map call with two simple named mold operands, as in Tlon `notes.log`, after validating provenance and operand source; revisiting the same map hold fails closed. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. For a mark whose sample is exactly a named arm of its single Ford-imported `/sur` core, it can recover a source-proved nonrecursive union, including source-location wrappers around fields; recursive or unverified fallback results remain unsupported. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, including bare `~` fields, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. The real Tlon `notes.u-note` exercises its `[%deleted ~]` case. A bounded fallback also recovers one level of local named tagged unions inside such a union, including Tlon `notes.u-notebook` and `notes.u-notes`. Source-proved tagged unions can also be wrapped in Hoon `$~` defaults, including a downstream union using Tlon `epic.saga`; the selected source and projected branches still undergo the same provenance and disjointness checks. The tagged-source helper peels up to four consecutive default wrappers, while default wrappers encountered inside dependency proofs consume the existing semantic-node budget. A source-proved nested self-recursive union retains its named owner, including Tlon `notes.import-node`; deeper, mutually recursive or unproven cases stay unsupported. The nested source proof has a 256-visit semantic-node budget, and source-location wrapper peeling is limited to four per node; Hoon evaluation and source scans are not metered. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, Hoon's `%n` zero singleton as Jibb `~`, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; the `tests/lib/jibb-import.hoon` suite compares the internal projection with its golden output, under eval (`tools/test-arms jibb-import`) and on the ship. `tests/lib/jibb-bridge.hoon` and `tests/lib/jibb-mark-bridge.hoon` compare bridge reports under eval and on the ship. `tests/lib/jibb-tlon-bridge.hoon` exercises four real Tlon presence unions and a field read through the source-aware reader and partial checker, under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
105+The separate `jibb-dev/lib/jibb-import.hoon` is an unfinished reader for selected Hoon type graphs. It handles named recursion, nested map, set, queue, list, unit, jar and jug arguments, direct ordered maps, and direct `$^` unions whose source branches can be proved disjoint. It also recognizes a direct ordered-map call with two simple named mold operands, as in Tlon `notes.log`, after validating provenance and operand source; revisiting the same map hold fails closed. It also reads ordered map fields in records when the map arguments are syntactically fixed atom molds and other fields are fixed atom molds or standard collections of static atom molds. Collection names must not be shadowed. The reader can also import a mark door sample, removing its outer sample face and validating its build subject. For a mark whose sample is exactly a named arm of its single Ford-imported `/sur` core, it can recover a source-proved nonrecursive union, including source-location wrappers around fields; recursive or unverified fallback results remain unsupported. The reader checks explicit Hoon `$%`, `$?` and `$^` unions against the Grammar’s disjointness rule, as @iko confirmed on 2026-10-30. For an explicit `$%` with distinct literal head tags, it can also prove restricted local named payload dependencies, including bare `~` fields, re-evaluate and validate each source branch, and recover the union before Hoon collapses it. The real Tlon `notes.u-note` exercises its `[%deleted ~]` case. A bounded fallback also recovers one level of local named tagged unions inside such a union, including Tlon `notes.u-notebook` and `notes.u-notes`. Source-proved tagged unions can also be wrapped in Hoon `$~` defaults, including a downstream union using Tlon `epic.saga`; the selected source and projected branches still undergo the same provenance and disjointness checks. The tagged-source helper peels up to four consecutive default wrappers, while default wrappers encountered inside dependency proofs consume the existing semantic-node budget. A source-proved nested self-recursive union retains its named owner, including Tlon `notes.import-node`; deeper, mutually recursive or unproven cases stay unsupported. The nested source proof has a 256-visit semantic-node budget, and source-location wrapper peeling is limited to four per node; Hoon evaluation and source scans are not metered. It rejects recursive or computed dependencies, inherited same-name collisions, unsupported nested unions and proofs exceeding a shared 4,096-node budget. It re-evaluates statically recognizable source branches before Hoon can collapse them, checks materialized fork cases, and rejects shapes it cannot prove disjoint. Static records may also have verified standard-collection and `path` siblings. One direct explicit union argument in a standard list, set, map or unit is accepted when its call wrapper and collection provenance are verified and its static cases are pairwise disjoint. A synthetic regression checks that forged wrapper subjects, samples and tails are rejected. Other collection-union forms, nested ordered maps, general source-level disjointness and complete integration with the checker remain unfinished. `+golden-types-imports` can consume fixed-aura atoms, valid term singletons, Hoon's `%n` zero singleton as Jibb `~`, nested faced or unfaced cells, unions of supported, pairwise-disjoint cases, and opaque standard collections with supported arguments from caller-supplied reader results for declared `/-` imports; `+golden-types-with-marks` accepts the same shapes for declared marks. The caller must pass unchanged results from the source-aware reader: the bridge validates the supplied graph but cannot detect source cases Hoon collapsed before that graph was built. The opaque collection types retain their names and arguments for identity, unification and printing. The validated standard prelude `list` mold shares the imported list representation; other Jibb-written collection molds and most prelude collection operations remain unsupported. Other forms remain unsupported. Its disjointness proof is conservative and can reject a valid union it cannot prove disjoint. Collection recognition requires the originating `/sur` core. The reader validates direct zuse subjects and Ford subjects consisting of faced imported cores and a validated tail, checking imported cores transitively; it rejects shadowed names, inconsistent core subjects and other subject shapes. For a recursive reference, the reader matches the exact Hoon hold against named arms in validated cores, including transitive Ford imports; it rejects missing, unlabelled or ambiguous origins. Its fixtures include three real Tlon files; the `tests/lib/jibb-import.hoon` suite, which holds the probes, compares the internal projection with its golden output and checks the structured values behind it, under eval (`tools/test-arms jibb-import`) and on the ship. `tests/lib/jibb-bridge.hoon` and `tests/lib/jibb-mark-bridge.hoon` compare bridge reports under eval and on the ship. `tests/lib/jibb-tlon-bridge.hoon` exercises four real Tlon presence unions and a field read through the source-aware reader and partial checker, under eval and on the ship. `tools/clay-fixtures` also passes Clay-built `/sur` molds and mark samples through the Clay-built importer and partial checker.
106106
107107An import-free Jibb library can export an opaque single-parameter recursive identity when its source has exactly two distinct term-tagged cases: a text leaf and a node containing `(list (name M))`, optionally with one `$-(@t M)` event field. A module-local index records the exact parsed source, defining path and prepared prelude interface; it is shared across that module's inference passes, and its canonical `list` must be source-backed. The normal resolver publishes an interface only after all ordinary mold and value checks succeed. Same-origin aliases retain the defining identity and independently instantiate type arguments; distinct origins remain unsupported. The opaque identity is conservatively treated as gate-bearing for numeric defaulting, and gate-freedom remains unknown. Explicit literal-headed construction uses a source-proven one-layer view: the event result receives the existing type argument and recursive children keep the defining identity. It consumes the existing shared 256-step recursive inference budget, and a per-view 4,096-visit guard bounds the new face and substitution scan; longer scans decline. These bounds do not cover parsing, existing inference, atom sizes or repeated attempts. One startup-inclusive, shared-load comparison of 100 valid and 100 invalid source definitions took 29.67 s wall / 25.14 s user CPU before this slice and 33.47 s / 26.99 s with it; the former declined all 200 while the latter inferred the valid definitions. These single runs are not a production benchmark. Matches over explicit source tags, flat binder or wildcard fields, and nonbinding catch-alls use that same one-layer view and existing binder, coverage and branch checks. Up to 128 arms are screened per attempt; longer matches decline. A single-arm match on a direct in-scope wing can report its missing case, and a contextual one-arm call subject can use a nonbinding catch-all. Recursive children retain their nominal type and arguments. Subject recognition and view validation can each scan substitutions, and the scan cap applies separately to each attempt. In one separate startup-inclusive comparison of 100 valid and 100 invalid source matches, the construction-only checker took 30.18 s wall / 29.31 s user CPU and declined all 200, while the pattern slice took 28.28 s / 27.69 s and inferred or diagnosed them. These single shared-load figures are not production benchmarks. General structural fits, whole-case binders, nested recursive patterns, uncontextualized single-arm call subjects, recursive source with imports and local recursive molds remain unsupported; the test tree does not prescribe the eventual `element` representation. Caller-supplied detached interfaces and caches retain the existing trusted-input contract.
108108
docs/development.md+2−2
@@ -121,7 +121,7 @@ The `jibb-dev` desk has no `my-app`, so the suites that check `my-app` files rea
121121| `jibb-generic-recursion` | Source-backed generic recursive identity and provenance | `tests/type-generic-recursion/expected.txt` |
122122| `jibb-hole-guards` | Hole-defaulting and API interface guards | |
123123| `jibb-hoon-reference` | Hoon translations of the Jibb-written `zing`, `lead`, `late` and `succ` against Hoon's own arms, on selected inputs; this does not execute Jibb, test lowering or prove jet recognition | |
124−| `jibb-import` | The partial Hoon importer's diagnostic trees and errors over the importer fixtures; the projection is an internal tree, not the Jibb type printer | `tests/importer/tree.txt` |
124+| `jibb-import` | The partial Hoon importer's diagnostic trees and errors over the importer fixtures, and the structured values behind them; the projection is an internal tree, not the Jibb type printer | `tests/importer/tree.txt` |
125125| `jibb-import-default` | Default-wrapped union source proofs over a real Tlon mold, and adversarial cases | `tests/type-import-default/expected.txt` |
126126| `jibb-import-diagnostic` | The structured reader diagnostic bridge report: definite and unsupported reader diagnostics through the checker | `tests/type-import-diagnostic/expected.txt` |
127127| `jibb-import-overlap` | Source-aware Hoon union overlap, provenance and proof-budget controls | `tests/type-import-overlap/expected.txt` |
@@ -168,7 +168,7 @@ CI, [.github/workflows/check.yml](../.github/workflows/check.yml), builds the de
168168
169169`ship-selftest` matters most when `tools/ship` changed, and `check-commit` when the mark or the desks changed, but `tools/check` runs both every time. The self-test leaves fixture files on the `jibb-dev` desk, and `ship-test`, which runs after it, puts the real ones back.
170170
171−`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs. The file is ignored by git, since desk assembly always regenerates it. Sync preflights and splits large deletion lists into bounded click requests, waiting for each Clay revision; a failure stops later batches. The ship self-test exercises this when switching from the full desk to a smaller fixture desk. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. `tools/ship test` also runs every other suite in `tests/lib`, and `tools/test-arms` runs the same suites under eval, so each compares the same fixtures and golden files in both places. `tests/lib/jibb-import.hoon` runs the importer fixtures against their expected diagnostic projection, an internal tree, not the Jibb type printer. `tests/lib/jibb-bridge.hoon` runs the importer/checker bridge fixture, and `tests/lib/jibb-tlon-bridge.hoon` the real Tlon presence reader/checker fixture. `tests/lib/jibb-import-diagnostic.hoon` covers the structured reader diagnostics, and `tests/lib/jibb-mark-bridge.hoon` compares the mark bridge's fixture report. `tests/lib/jibb-poke-bridge.hoon` holds the source-backed prelude and poke-only API fixture. `tests/lib/jibb-api-paths.hoon` runs partial path analysis over the real todo marks; this does not generate request interfaces. `tests/lib/jibb-module-scope.hoon` compares the prelude scope report.
171+`tools/ship test` regenerates `tests/lib/jibb.hoon` and syncs the `jibb-dev` desk before it runs. The file is ignored by git, since desk assembly always regenerates it. Sync preflights and splits large deletion lists into bounded click requests, waiting for each Clay revision; a failure stops later batches. The ship self-test exercises this when switching from the full desk to a smaller fixture desk. A run with `--stub`, `--lib`, or a custom `--golden` isolates its generated golden tests from the repository's other test programs; run the default command afterward to restore and test those programs. `tools/ship test` also runs every other suite in `tests/lib`, and `tools/test-arms` runs the same suites under eval, so each compares the same fixtures and golden files in both places. `tests/lib/jibb-import.hoon` runs the importer fixtures against their expected diagnostic projection, an internal tree, not the Jibb type printer, and checks the structured values behind it. The probes it runs live in the suite, not in `jibb-dev/lib/jibb-import.hoon`, which app desks vendor. `tests/lib/jibb-bridge.hoon` runs the importer/checker bridge fixture, and `tests/lib/jibb-tlon-bridge.hoon` the real Tlon presence reader/checker fixture. `tests/lib/jibb-import-diagnostic.hoon` covers the structured reader diagnostics, and `tests/lib/jibb-mark-bridge.hoon` compares the mark bridge's fixture report. `tests/lib/jibb-poke-bridge.hoon` holds the source-backed prelude and poke-only API fixture. `tests/lib/jibb-api-paths.hoon` runs partial path analysis over the real todo marks; this does not generate request interfaces. `tests/lib/jibb-module-scope.hoon` compares the prelude scope report.
172172
173173## Golden cases
174174
jibb-dev/lib/jibb-import.hoon−543
@@ -1717,127 +1717,6 @@
17171717 ?~ first $(xs t.xs)
17181718 first
17191719::
1720−:: +fixture-test: shared golden expectations for eval and the ship.
1721−:: A synthetic hold whose first $^ branch cannot be evaluated. It tests
1722−:: that a failed branch probe is reported rather than crashing the host.
1723−++ bad-branch-fixture
1724− ^- type
1725− [%hold -:!>(..zuse) [%tsls [%note [%made %bad ~] [%wtcl [%dtwt [%$ 12]] [%wing ~[%jibb-no-such-branch-name]] [%rock %n 0]]] [%$ 1]]]
1726−::
1727−++ fixture-test
1728− |= [small=@t epic=@t presence=@t docs=@t shadow=@t]
1729− ^- (list @t)
1730− =/ sc=type -:(ride -:!>(..zuse) small)
1731− =/ ec=type -:(ride -:!>(..zuse) epic)
1732− =/ pc=type -:(ride -:!>(..zuse) presence)
1733− =/ dc=type -:(ride -:!>(..zuse) docs)
1734− =/ hc=type -:(ride -:!>(..zuse) shadow)
1735− =/ sample
1736− |= name=term
1737− (read-mold-in %small name (~(play ut sc) (ream (cat 3 '*' name))) sc)
1738− =/ tlon
1739− |= name=term
1740− (read-mold-in %epic name (~(play ut ec) (ream (cat 3 '*' name))) ec)
1741− =/ present
1742− |= name=term
1743− (read-mold-in %presence name (~(play ut pc) (ream (cat 3 '*' name))) pc)
1744− =/ shad
1745− |= name=term
1746− (read-mold-in %shadow name (~(play ut hc) (ream (cat 3 '*' name))) hc)
1747− =/ docs-type
1748− |= name=term
1749− (read-mold-in %docs name (~(play ut dc) (ream (cat 3 '*' name))) dc)
1750− =/ errors=(list @t) ~
1751− =/ expect-action=imported
1752− [%fork ~[[%cell [%atom %tas [~ %add]] [%face %text [%atom %t ~]]] [%cell [%atom %tas [~ %remove]] [%face %id [%atom %ud ~]]]]]
1753− =/ errors ?: =((sample %action) [%& expect-action]) errors
1754− ['union cases and faces' errors]
1755− =/ expect-map=imported
1756− [%apply %map ~[[%atom %ud ~] [%cell [%face %id [%atom %ud ~]] [%face %text [%atom %t ~]]]]]
1757− =/ errors ?: =((sample %items) [%& expect-map]) errors
1758− ['map and its arguments' errors]
1759− =/ expect-optional=imported
1760− [%fork ~[[%cell [%face %name [%atom %t ~]] [%face %stamp [%atom %ud ~]]] [%atom %ud ~]]]
1761− =/ errors ?: =((sample %optional) [%& expect-optional]) errors
1762− ['atom-or-cell union' errors]
1763− =/ expect-containers=imported
1764− [%cell [%apply %set ~[[%atom %ud ~]]] [%cell [%apply %qeu ~[[%atom %ud ~]]] [%cell [%apply %list ~[[%atom %t ~]]] [%apply %unit ~[[%atom %ud ~]]]]]]
1765− =/ errors ?: =((sample %containers) [%& expect-containers]) errors
1766− ['set queue list and unit' errors]
1767− =/ expect-chain=imported
1768− [%fork ~[[%cell [%face %value [%atom %ud ~]] [%face %next [%ref %small %chain]]] [%atom %n [~ 0]]]]
1769− =/ errors ?: =((sample %chain) [%& expect-chain]) errors
1770− ['recursive reference' errors]
1771− =/ expect-jar=imported [%apply %jar ~[[%atom %ud ~] [%atom %t ~]]]
1772− =/ expect-jug=imported [%apply %jug ~[[%atom %ud ~] [%atom %t ~]]]
1773− =/ errors ?: =((sample %jar-test) [%& expect-jar]) errors
1774− ['jar name and arguments' errors]
1775− =/ errors ?: =((sample %jug-test) [%& expect-jug]) errors
1776− ['jug name and arguments' errors]
1777− =/ expect-nested-jar=imported [%face %field [%apply %jar ~[[%atom %ud ~] [%atom %t ~]]]]
1778− =/ errors ?: =((sample %nested-jar) [%& expect-nested-jar]) errors
1779− ['nested jar is preserved' errors]
1780− =/ expect-paired=imported
1781− [%cell [%face %values [%apply %jar ~[[%atom %ud ~] [%atom %t ~]]]] [%face %cache [%apply %jug ~[[%atom %ud ~] [%atom %t ~]]]]]
1782− =/ errors ?: =((sample %paired-aliases) [%& expect-paired]) errors
1783− ['multiple collection aliases are preserved' errors]
1784− =/ expect-nested-alias=imported
1785− [%apply %jar ~[[%atom %ud ~] [%apply %jug ~[[%atom %ud ~] [%atom %t ~]]]]]
1786− =/ errors ?: =((sample %nested-alias) [%& expect-nested-alias]) errors
1787− ['nested collection arguments preserve names' errors]
1788− =/ expect-mop=imported [%apply %mop ~[[%atom %ud ~] [%atom %t ~]]]
1789− =/ errors ?: =((sample %mop-test) [%& expect-mop]) errors
1790− ['ordered map name and arguments' errors]
1791− =/ expect-nested-mop=imported
1792− [%cell [%face %table expect-mop] [%face %other [%atom %ud ~]]]
1793− =/ errors ?: =((sample %nested-mop) [%& expect-nested-mop]) errors
1794− ['ordered map field is preserved' errors]
1795− =/ expect-mixed=imported
1796− [%cell [%face %a expect-mop] [%face %b [%apply %list ~[[%atom %ud ~]]]]]
1797− =/ errors ?: =((sample %mixed-mop) [%& expect-mixed]) errors
1798− ['static list sibling is preserved' errors]
1799− =/ errors ?: =((sample %named-mop) [%| 'a nested Hoon mop needs source-aware import']) errors
1800− ['non-atom argument remains unsupported' errors]
1801− =/ errors ?: =((sample %mop-list) [%| 'a nested Hoon mop needs source-aware import']) errors
1802− ['ordered map in a list remains unsupported' errors]
1803− =/ errors ?: =((sample %signed) [%| 'signed and float auras cannot be imported']) errors
1804− ['signed aura rejected' errors]
1805− =/ errors ?: =((sample %float) [%| 'signed and float auras cannot be imported']) errors
1806− ['float aura rejected' errors]
1807− =/ errors ?: =((sample %gate-test) [%| 'cores and gates cannot be imported']) errors
1808− ['gate rejected' errors]
1809− =/ errors ?: =((read-mold %std %vase (~(play ut -:!>(..zuse)) (ream '*vase'))) [%| 'vases cannot be imported']) errors
1810− ['vase rejected' errors]
1811− =/ expect-valid=imported
1812− [%fork ~[[%cell [%face %x [%atom %ud ~]] [%face %y [%atom %ud ~]]] [%atom %ud ~]]]
1813− =/ errors ?: =((sample %valid-cell) [%& expect-valid]) errors
1814− ['disjoint cell union' errors]
1815− =/ errors ?: =((sample %invalid-cell) [%| 'Hoon $^ union disjointness could not be verified']) errors
1816− ['overlapping cell union is rejected' errors]
1817− =/ errors ?: =((shad %mn) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
1818− ['local mop shadow in a field is rejected' errors]
1819− =/ errors ?: =((shad %mm) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
1820− ['local mop shadow is rejected' errors]
1821− =/ errors ?: =((shad %aa) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
1822− ['local jar shadow is rejected' errors]
1823− =/ errors ?: =((shad %bb) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
1824− ['local jug shadow in a field is rejected' errors]
1825− =/ errors ?: =((read-mold %small %jar-test (~(play ut sc) (ream '*jar-test'))) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
1826− ['missing provenance is rejected' errors]
1827− =/ expect-timing=imported
1828− [%cell [%face %since [%atom %da ~]] [%face %timeout [%apply %unit ~[[%atom %dr ~]]]]]
1829− =/ errors ?: =((present %timing) [%& expect-timing]) errors
1830− ['Tlon presence timing' errors]
1831− =/ errors ?: =((read-mold %external %bad bad-branch-fixture) [%| 'a Hoon $^ union needs a source-level disjointness check']) errors
1832− ['failed branch expansion is reported' errors]
1833− =/ expect-saga=imported
1834− [%fork ~[[%cell [%atom %tas [~ %chi]] [%atom %n [~ 0]]] [%cell [%atom %tas [~ %lev]] [%atom %n [~ 0]]] [%cell [%atom %tas [~ %dex]] [%face %ver [%atom %ud ~]]]]]
1835− =/ errors ?: =((tlon %saga) [%& expect-saga]) errors
1836− ['Tlon saga union' errors]
1837− =/ errors ?: =((tlon %epic) [%& [%atom %ud ~]]) errors
1838− ['Tlon epic atom' errors]
1839− errors
1840−
18411720:: A compact diagnostic projection for importer golden files. This is
18421721:: not the Jibb type printer: it exposes constants and recursive refs.
18431722++ show-import
@@ -1883,426 +1762,4 @@
18831762 [%invalid *] "invalid/{(trip code.result)}: {(trip message.result)}"
18841763 [%unsupported *] "unsupported: {(trip message.result)}"
18851764 ==
1886−::
1887−:: Clay includes debug spans around source nodes. Reproduce that
1888−:: shape without Clay so the same regression runs under eval and -test.
1889−++ decorate-union-source
1890− |= h=hoon
1891− ^- hoon
1892− =/ at=spot [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
1893− ?^ -.h [%dbug at [$(h -.h) $(h +.h)]]
1894− ?+ h [%dbug at h]
1895− [%note *] [%dbug at h(q $(h q.h))]
1896− [%ktts *] [%dbug at h(q $(h q.h))]
1897− [%wtcl *] [%dbug at h(q $(h q.h), r $(h r.h))]
1898− ==
1899−::
1900−++ debug-union-fixture
1901− |= [cor=type name=term]
1902− ^- (each imported @t)
1903− =/ typ=type (~(play ut cor) (ream (cat 3 '*' name)))
1904− ?. ?=([%hold *] typ) [%| 'synthetic union is not a hold']
1905− =/ original=hoon q.typ
1906− ?. ?=([%tsls [%note * *] *] original) [%| 'synthetic union source is unavailable']
1907− =/ source=hoon original(q.p (decorate-union-source q.p.original))
1908− (read-mold %small name typ(q source))
1909−::
1910−:: Test debug metadata at the spec boundary without assuming that the
1911−:: eval version of Hoon's spec mold itself includes Clay's %dbug tag.
1912−++ debug-spec-fixture
1913− ^- tape
1914− =/ location=* [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
1915− =/ wrapped=* [%dbug location [%leaf %tas %x]]
1916− =/ got=(unit *) (source-gist-tail wrapped)
1917− ?~ got "debug wrapper missing"
1918− =/ leaf=(each spec tang) (mule |.(;;(spec u.got)))
1919− ?. ?=([%& [%leaf %tas %x]] leaf) "debug leaf not recovered"
1920− =/ branch=spec [%bccl ~[p.leaf [%base [%atom %t]]]]
1921− ?^ (tagged-cases ~[branch branch] ~) "duplicate tags accepted"
1922− =/ broken=(unit *) (source-gist-tail [%dbug location 42])
1923− ?~ broken "debug wrapper missing"
1924− =/ invalid=(each spec tang) (mule |.(;;(spec u.broken)))
1925− ?: ?=(%& -.invalid) "malformed spec accepted"
1926− "valid wrapper; duplicate and malformed rejected"
1927−::
1928−:: The same named-operand call with Clay-style source-location wrappers.
1929−++ debug-mop-fixture
1930− |= cor=type
1931− ^- tape
1932− =/ typ=type (~(play ut cor) (ream '*mop-wing-valid'))
1933− ?> ?=([%hold *] typ)
1934− =/ original=hoon q.typ
1935− ?> ?=([%tsls [%note * *] *] original)
1936− =/ body=hoon q.p.original
1937− ?> ?=([%cncl *] body)
1938− ?> ?=([%tsgr *] p.body)
1939− =/ b=hoon q.p.body
1940− ?> ?=([%cncl *] b)
1941− =/ call=hoon p.b
1942− ?> ?=([%cncl *] call)
1943− ?> ?=([* [* ~]] q.call)
1944− =/ at=spot [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
1945− =/ inner=hoon call(p [%dbug at p.call], q ~[[%dbug at i.q.call] [%dbug at i.t.q.call]])
1946− =/ outer=hoon body(p p.body(q b(p [%dbug at inner])))
1947− =/ mixed=hoon body(p p.body(q b(p inner)))
1948− =/ multi=hoon body(p p.body(q b(p call(p [%dbug at [%wing ~[%one %two]]]))))
1949− =/ plain=(unit [key=spec value=spec]) (mop-specs body)
1950− ?~ plain "unwrapped mop not recognized"
1951− ?. =((mop-specs [%dbug at outer]) plain) "wrapped mop not recognized"
1952− ?. =((mop-specs mixed) plain) "mixed mop not recognized"
1953− ?^ (mop-specs multi) "multi-segment callee accepted"
1954− ?^ (mop-specs [%dbug at [%sand %ud 42]]) "malformed call accepted"
1955− ?^ (source-single-wing [%dbug at 42]) "malformed wing accepted"
1956− ?^ (source-single-wing [%dbug at [%wing ~[%one %two]]]) "multi-segment operand accepted"
1957− =/ four=* [%dbug at [%dbug at [%dbug at [%dbug at [%wing ~[%mop]]]]]]
1958− =/ five=* [%dbug at four]
1959− ?~ (source-single-wing four) "four wrappers rejected"
1960− ?^ (source-single-wing five) "wrapper limit exceeded"
1961− ?~ (source-note-unwrap four 4) "four note wrappers rejected"
1962− ?^ (source-note-unwrap five 4) "note wrapper limit exceeded"
1963− =/ selected=(unit hoon) (local-arm-source cor %tag-valid)
1964− ?~ selected "selected union not found"
1965− =/ arm-four=hoon [%dbug at [%dbug at [%dbug at [%dbug at u.selected]]]]
1966− =/ arm-five=hoon [%dbug at arm-four]
1967− ?~ (tagged-source-code arm-four %tag-valid) "four wrapped selected arms rejected"
1968− ?^ (tagged-source-code arm-five %tag-valid) "selected arm wrapper limit exceeded"
1969− "wrapped and mixed calls accepted; malformed, multi-segment and excessive wrappers rejected"
1970−::
1971−:: Synthetic nodes test each part of the direct collection-call proof.
1972−++ collection-wrapper-fixture
1973− ^- tape
1974− =/ call=hoon [%cncl [%tsgr [%wing ~[[%.y 7]]] [%cncl [%wing ~[%list]] ~]] ~[[%$ 6]]]
1975− =/ subject=hoon [%cncl [%tsgr [%wing ~[[%.y 8]]] [%cncl [%wing ~[%list]] ~]] ~[[%$ 6]]]
1976− =/ sample=hoon [%cncl [%tsgr [%wing ~[[%.y 7]]] [%cncl [%wing ~[%list]] ~]] ~[[%$ 2]]]
1977− =/ good=hoon [%tsls [%note [%made %x ~] call] [%tsls [%dtts [%$ 14] [%$ 2]] [%$ 6]]]
1978− =/ tail=hoon [%tsls [%note [%made %x ~] call] [%$ 6]]
1979− =/ args=(list [hoon hoon]) ~[[call good] [subject good] [sample good] [call tail]]
1980− =/ flags=(list ?) (turn args |=(pair=[hoon hoon] (direct-collection-source -.pair +.pair)))
1981− ?: =(flags ~[& | | |]) "valid; forged subject, sample and tail rejected"
1982− "wrapper guard failed"
1983−::
1984−++ overlap-fork-fixture
1985− ^- type
1986− =/ nodes=(list type) ~[[%atom %ud ~] [%atom %t ~]]
1987− [%fork (silt nodes)]
1988−::
1989−++ invalid-fork-fixture
1990− ^- type
1991− =/ nodes=(list type) ~[[%atom %ud ~] [%atom %sd ~]]
1992− [%fork (silt nodes)]
1993−::
1994−++ fixture-output
1995− |= [small=@t epic=@t presence=@t docs=@t shadow=@t shadow-static=@t ford=@t mark=@t mark-rec=@t mark-gate=@t mark-basic=@t origin-trans=@t origin-first=@t origin-other=@t]
1996− ^- wain
1997− =/ sc=type -:(ride -:!>(..zuse) small)
1998− =/ ec=type -:(ride -:!>(..zuse) epic)
1999− =/ pc=type -:(ride -:!>(..zuse) presence)
2000− =/ dc=type -:(ride -:!>(..zuse) docs)
2001− =/ hc=type -:(ride -:!>(..zuse) shadow)
2002− =/ xc=type -:(ride -:!>(..zuse) shadow-static)
2003− =/ fp=type [%cell [%face %small sc] -:!>(..zuse)]
2004− =/ other=type -:(ride -:!>(..zuse) origin-other)
2005− =/ fc=type -:(ride fp ford)
2006− ?> ?=([%core *] fc)
2007− =/ only-list=@t '|%\0a+$ lists (list @ud)\0a--\0a'
2008− =/ tp=type [%cell [%face %intermediate fc] -:!>(..zuse)]
2009− =/ tc=type -:(ride tp only-list)
2010− =/ sp=type [%cell [%face %small xc] -:!>(..zuse)]
2011− =/ shc=type -:(ride sp only-list)
2012− =/ mark-core=type -:(ride fp mark)
2013− =/ mark-rec-core=type -:(ride fp mark-rec)
2014− =/ mark-gate-core=type -:(ride -:!>(..zuse) mark-gate)
2015− =/ mark-basic-core=type -:(ride -:!>(..zuse) mark-basic)
2016− =/ make-mark
2017− |= [field=@t scope=type]
2018− ^- type
2019− -:(ride scope (crip "|_ a={(trip field)}\0a++ grab |% ++ noun a --\0a++ grow |% ++ noun a --\0a++ grad %noun\0a--\0a"))
2020− =/ mark-union-core=type (make-mark 'mark-flag-valid:small' fp)
2021− =/ mark-overlap-core=type (make-mark 'mark-flag-overlap:small' fp)
2022− =/ mark-hidden-core=type (make-mark 'mark-flag-hidden:small' fp)
2023− =/ mark-signed-core=type (make-mark 'signed:small' fp)
2024− =/ mark-callable-core=type (make-mark 'gate-test:small' fp)
2025− =/ extra-subject=type [%cell [%face %other other] fp]
2026− =/ mark-extra-core=type (make-mark 'mark-flag-valid:small' extra-subject)
2027− =/ other-hold=type (~(play ut other) (ream '*chain'))
2028− =/ recursive-hold=type (~(play ut sc) (ream '*chain'))
2029− =/ fake-vase=type -:(ride -:!>(..zuse) '|%\0a+$ vase @ud\0a--\0a')
2030− =/ spoof=(unit import-diagnostic)
2031− (first-invalid [%bad 'signed and float auras cannot be imported'])
2032− ?> ?=(^ spoof)
2033− =/ mark-shadow-core=type -:(ride sp mark-basic)
2034− =/ tshp=type [%cell [%face %intermediate shc] -:!>(..zuse)]
2035− =/ tshc=type -:(ride tshp only-list)
2036− =/ trans=type -:(ride tp origin-trans)
2037− =/ ambiguous-parent=type [%cell [%face %first sc] [%cell [%face %second sc] -:!>(..zuse)]]
2038− =/ ambiguous=type -:(ride ambiguous-parent origin-first)
2039− =/ distinct-parent=type [%cell [%face %first sc] [%cell [%face %second other] -:!>(..zuse)]]
2040− =/ distinct=type -:(ride distinct-parent origin-first)
2041− =/ trans-amb-parent=type [%cell [%face %intermediate fc] [%cell [%face %second sc] -:!>(..zuse)]]
2042− =/ trans-amb=type -:(ride trans-amb-parent origin-trans)
2043− =/ tag-child=@t
2044− '|%\0a+$ tag-invalid-cell @t\0a+$ choice $%([%ok a=tag-invalid-cell] [%err a=@ud])\0a--\0a'
2045− =/ tag-collision=type -:(ride [%cell [%face %base sc] -:!>(..zuse)] tag-child)
2046− =/ tag-clean=type -:(ride [%cell [%face %base other] -:!>(..zuse)] tag-child)
2047− =/ tag-zuse=@t
2048− '|%\0a+$ ship @t\0a+$ path @ud\0a+$ choice $%([%ok who=ship] [%err where=path])\0a--\0a'
2049− =/ tag-zuse-core=type -:(ride -:!>(..zuse) tag-zuse)
2050− =/ nest-parent-src=@t
2051− '|%\0a+$ tag-nest-inner $%([%foreign @t] [%foreign @t])\0a--\0a'
2052− =/ nest-parent=type -:(ride -:!>(..zuse) nest-parent-src)
2053− =/ nest-child-src=@t
2054− '|%\0a+$ tag-nest-inner $%([%left @t] [%right @ud])\0a+$ tag-nest-middle $%([%one x=tag-nest-inner] [%two ~])\0a--\0a'
2055− =/ nest-collision=type -:(ride [%cell [%face %base nest-parent] -:!>(..zuse)] nest-child-src)
2056− =/ self-parent=type
2057− -:(ride -:!>(..zuse) '|%\0a+$ tag-self ?(%same %same)\0a--\0a')
2058− =/ self-child=@t
2059− '|%\0a+$ tag-self $%([%branch children=(list tag-self)] [%leaf value=@t])\0a--\0a'
2060− =/ self-collision=type -:(ride [%cell [%face %tag-self self-parent] -:!>(..zuse)] self-child)
2061− =/ self-other=type
2062− -:(ride -:!>(..zuse) '|%\0a+$ tag-self $%([%branch children=(list tag-self)] [%leaf value=@ud])\0a--\0a')
2063− =/ mop-ford-parent=type
2064− -:(ride -:!>(..zuse) '|%\0a+$ value ?(%same %same)\0a--\0a')
2065− =/ mop-ford-child=type
2066− -:(ride [%cell [%face %value mop-ford-parent] -:!>(..zuse)] '|%\0a+$ key @ud\0a+$ value @t\0a+$ mm ((mop key value) lte)\0a--\0a')
2067− =/ sample
2068− |= name=term
2069− (read-mold-in %small name (~(play ut sc) (ream (cat 3 '*' name))) sc)
2070− =/ tlon
2071− |= name=term
2072− (read-mold-in %epic name (~(play ut ec) (ream (cat 3 '*' name))) ec)
2073− =/ present
2074− |= name=term
2075− (read-mold-in %presence name (~(play ut pc) (ream (cat 3 '*' name))) pc)
2076− =/ shad
2077− |= name=term
2078− (read-mold-in %shadow name (~(play ut hc) (ream (cat 3 '*' name))) hc)
2079− =/ docs-type
2080− |= name=term
2081− (read-mold-in %docs name (~(play ut dc) (ream (cat 3 '*' name))) dc)
2082− =/ chapter-tree=(map term hoon)
2083− (~(put by *(map term hoon)) %jar [%zpzp ~])
2084− =/ vase (read-mold %std %vase (~(play ut -:!>(..zuse)) (ream '*vase')))
2085− :~ (crip "action: {(show-result (sample %action))}")
2086− (crip "optional: {(show-result (sample %optional))}")
2087− (crip "items: {(show-result (sample %items))}")
2088− (crip "containers: {(show-result (sample %containers))}")
2089− (crip "chain: {(show-result (sample %chain))}")
2090− (crip "jar: {(show-result (sample %jar-test))}")
2091− (crip "jug: {(show-result (sample %jug-test))}")
2092− (crip "nested-jar: {(show-result (sample %nested-jar))}")
2093− (crip "paired-aliases: {(show-result (sample %paired-aliases))}")
2094− (crip "nested-alias: {(show-result (sample %nested-alias))}")
2095− (crip "compound: {(show-result (sample %compound))}")
2096− (crip "compound-fields: {(show-result (sample %compound-fields))}")
2097− (crip "mop: {(show-result (sample %mop-test))}")
2098− (crip "nested-mop: {(show-result (sample %nested-mop))}")
2099− (crip "two-mops: {(show-result (sample %two-mops))}")
2100− (crip "mixed-mop: {(show-result (sample %mixed-mop))}")
2101− (crip "nested-static-mop: {(show-result (sample %nested-static-mop))}")
2102− (crip "collection-siblings: {(show-result (sample %collection-siblings))}")
2103− (crip "dynamic-sibling-mop: {(show-result (sample %dynamic-sibling-mop))}")
2104− (crip "mark-flag-source: {(show-result (read-named %small %mark-flag-valid sc))}")
2105− (crip "mark-flag-union: {(show-result (read-mark %flag-union mark-union-core))}")
2106− (crip "mark-flag-overlap: {(show-result (read-mark %flag-overlap mark-overlap-core))}")
2107− (crip "mark-flag-hidden: {(show-result (read-mark %flag-hidden mark-hidden-core))}")
2108− (crip "mark-flag-signed: {(show-result (read-mark %flag-signed mark-signed-core))}")
2109− (crip "mark-flag-callable: {(show-result (read-mark %flag-callable mark-callable-core))}")
2110− (crip "mark-flag-extra: {(show-result (read-mark %flag-extra mark-extra-core))}")
2111− (crip "mark-flag-other-hold: {?~((mark-union-fallback other-hold fp) "unsupported" "BAD")}")
2112− (crip "mark-flag-recursive-fallback: {?~((mark-union-fallback recursive-hold fp) "unsupported" "BAD")}")
2113− (crip "mark-record: {(show-result (read-mark %todo-item mark-core))}")
2114− (crip "mark-recursive: {(show-result (read-mark %recursive mark-rec-core))}")
2115− (crip "mark-gate: {(show-result (read-mark %bad mark-gate-core))}")
2116− (crip "mark-list: {(show-result (read-mark %list-mark mark-basic-core))}")
2117− (crip "mark-shadow: {(show-result (read-mark %list-mark mark-shadow-core))}")
2118− (crip "mark-not-core: {(show-result (read-mark %bad [%atom %ud ~]))}")
2119− (crip "ford-list: {(show-result (read-mold-in %ford %lists (~(play ut fc) (ream '*lists')) fc))}")
2120− (crip "ford-imported: {(show-result (read-mold-in %ford %wrapped (~(play ut fc) (ream '*wrapped')) fc))}")
2121− (crip "ford-recursive: {(show-result (read-mold-in %ford %recursive (~(play ut fc) (ream '*recursive')) fc))}")
2122− (crip "ford-local-recursive: {(show-result (read-mold-in %ford %local (~(play ut fc) (ream '*local')) fc))}")
2123− (crip "ford-recursive-transitive: {(show-result (read-named %outer %wrapped trans))}")
2124− (crip "ford-recursive-ambiguous: {(show-result (read-named %outer %pick-one ambiguous))}")
2125− (crip "ford-recursive-transitive-ambiguous: {(show-result (read-named %outer %wrapped trans-amb))}")
2126− (crip "ford-recursive-distinct-first: {(show-result (read-named %outer %pick-one distinct))}")
2127− (crip "ford-recursive-distinct-second: {(show-result (read-named %outer %pick-two distinct))}")
2128− (crip "ford-transitive: {(show-result (read-mold-in %ford %lists (~(play ut tc) (ream '*lists')) tc))}")
2129− (crip "ford-shadow: {(show-result (read-mold-in %ford %lists (~(play ut shc) (ream '*lists')) shc))}")
2130− (crip "ford-transitive-shadow: {(show-result (read-mold-in %ford %lists (~(play ut tshc) (ream '*lists')) tshc))}")
2131− (crip "ford-shadow-face: {?:((scope-safe [%cell [%face %list sc] -:!>(..zuse)] %list) "wrong" "unsafe")}")
2132− (crip "ford-unknown: {?:((scope-safe [%cell [%atom %ud ~] -:!>(..zuse)] %list) "wrong" "unsafe")}")
2133− (crip "ford-mismatched-core: {?:((scope-safe fc(p -:!>(..zuse)) %list) "wrong" "unsafe")}")
2134− (crip "shadow-list-mop: {(show-result (read-mold-in %shadow-static %bad (~(play ut xc) (ream '*bad')) xc))}")
2135− (crip "named-mop: {(show-result (sample %named-mop))}")
2136− (crip "mop-list: {(show-result (sample %mop-list))}")
2137− (crip "mop-wing-valid: {(show-result (sample %mop-wing-valid))}")
2138− (crip "mop-wing-invalid-key: {(show-result (sample %mop-wing-invalid-key))}")
2139− (crip "mop-wing-invalid-key-alias: {(show-result (sample %mop-wing-invalid-key-alias))}")
2140− (crip "mop-wing-invalid-value: {(show-result (sample %mop-wing-invalid-value))}")
2141− (crip "mop-wing-invalid-value-alias: {(show-result (sample %mop-wing-invalid-value-alias))}")
2142− (crip "mop-wing-rec-key: {(show-result (sample %mop-wing-rec-key))}")
2143− (crip "mop-wing-rec-value: {(show-result (sample %mop-wing-rec-value))}")
2144− (crip "mop-wing-shadow: {(show-result (read-named %shadow %mmw hc))}")
2145− (crip "mop-wing-ford-collision: {(show-result (read-named %child %mm mop-ford-child))}")
2146− (crip "mop-wing-debug: {(debug-mop-fixture sc)}")
2147− (crip "signed: {(show-result (sample %signed))}")
2148− (crip "float: {(show-result (sample %float))}")
2149− (crip "gate: {(show-result (sample %gate-test))}")
2150− (crip "vase: {(show-result vase)}")
2151− (crip "failed-branch: {(show-result (read-mold %external %bad bad-branch-fixture))}")
2152− (crip "debug-spec: {debug-spec-fixture}")
2153− (crip "debug-union: {(show-result (debug-union-fixture sc %action))}")
2154− (crip "debug-union-overlap: {(show-result (debug-union-fixture sc %explicit-wut-overlap))}")
2155− (crip "debug-nested-cell: {(show-result (debug-union-fixture sc %nested-valid-cell))}")
2156− (crip "debug-nested-cell-overlap: {(show-result (debug-union-fixture sc %nested-invalid-cell))}")
2157− (crip "explicit-graph: {(show-result (read-mold %raw %raw overlap-fork-fixture))}")
2158− (crip "explicit-graph-unsupported: {(show-result (read-mold %raw %raw invalid-fork-fixture))}")
2159− (crip "explicit-wut-safe: {(show-result (sample %explicit-wut-safe))}")
2160− (crip "explicit-percent-overlap: {(show-result (sample %explicit-percent-overlap))}")
2161− (crip "explicit-wut-overlap: {(show-result (sample %explicit-wut-overlap))}")
2162− (crip "explicit-collapsed: {(show-result (sample %explicit-collapsed))}")
2163− (crip "explicit-subsumed: {(show-result (sample %explicit-subsumed))}")
2164− (crip "explicit-three: {(show-result (sample %explicit-three))}")
2165− (crip "explicit-unknown: {(show-result (sample %explicit-unknown))}")
2166− (crip "explicit-nested: {(show-result (sample %explicit-nested))}")
2167− (crip "collection-union-wrapper: {collection-wrapper-fixture}")
2168− (crip "collection-union-list: {(show-result (sample %collection-union-list))}")
2169− (crip "collection-union-set: {(show-result (sample %collection-union-set))}")
2170− (crip "collection-union-map-key: {(show-result (sample %collection-union-map-key))}")
2171− (crip "collection-union-map-value: {(show-result (sample %collection-union-map-value))}")
2172− (crip "collection-union-unit: {(show-result (sample %collection-union-unit))}")
2173− (crip "collection-union-collapsed: {(show-result (sample %collection-union-collapsed))}")
2174− (crip "collection-union-multiple: {(show-result (sample %collection-union-multiple))}")
2175− (crip "collection-union-nested: {(show-result (sample %collection-union-nested))}")
2176− (crip "collection-union-dependent: {(show-result (sample %collection-union-dependent))}")
2177− (crip "collection-union-shadow: {(show-result (read-named %shadow %collection-union-shadow xc))}")
2178− (crip "explicit-list: {(show-result (sample %explicit-list))}")
2179− (crip "explicit-set: {(show-result (sample %explicit-set))}")
2180− (crip "explicit-faces: {(show-result (sample %explicit-faces))}")
2181− (crip "explicit-alias: {(show-result (sample %explicit-alias))}")
2182− (crip "explicit-ford: {(show-result (read-named %outer %bad-union trans))}")
2183− (crip "explicit-shadow-path: {(show-result (read-named %shadow %path-shadow xc))}")
2184− (crip "list-bckt-field: {(show-result (sample %list-bckt-field))}")
2185− (crip "list-noun-overlap: {(show-result (sample %list-noun-overlap))}")
2186− (crip "list-null-overlap: {(show-result (sample %list-null-overlap))}")
2187− (crip "list-nested-atom-cell: {(show-result (sample %list-nested-atom-cell))}")
2188− (crip "list-nested-valid-cell: {(show-result (sample %list-nested-valid-cell))}")
2189− (crip "list-nested-invalid-cell: {(show-result (sample %list-nested-invalid-cell))}")
2190− (crip "map-nested-invalid-cell: {(show-result (sample %map-nested-invalid-cell))}")
2191− (crip "set-direct-invalid-cell: {(show-result (sample %set-direct-invalid-cell))}")
2192− (crip "map-key-invalid-cell: {(show-result (sample %map-key-invalid-cell))}")
2193− (crip "nested-atom-cell: {(show-result (sample %nested-atom-cell))}")
2194− (crip "nested-tags: {(show-result (sample %nested-tags))}")
2195− (crip "nested-tags-overlap: {(show-result (sample %nested-tags-overlap))}")
2196− (crip "nested-tagged: {(show-result (sample %nested-tagged))}")
2197− (crip "nested-tagged-bckt: {(show-result (sample %nested-tagged-bckt))}")
2198− (crip "nested-tagged-overlap: {(show-result (sample %nested-tagged-overlap))}")
2199− (crip "nested-tagged-alias: {(show-result (sample %nested-tagged-alias))}")
2200− (crip "nested-tagged-ford: {(show-result (read-named %outer %tagged trans))}")
2201− (crip "tag-static-valid: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 13] [%rock %$ %foo]] [%rock %tas %foo]] 13) "yes" "no")}")
2202− (crip "tag-static-wrong-axis: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 12] [%rock %$ %foo]] [%rock %tas %foo]] 13) "wrong" "no")}")
2203− (crip "tag-static-nonconstant: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 13] [%rock %$ %foo]] [%$ 13]] 13) "wrong" "no")}")
2204− (crip "tag-static-wrong-value: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 13] [%rock %$ %foo]] [%rock %tas %bar]] 13) "wrong" "no")}")
2205− (crip "nested-first-cell: {(show-result (sample %nested-first-cell))}")
2206− (crip "nested-alias-cell: {(show-result (sample %nested-alias-cell))}")
2207− (crip "nested-multiple-cell: {(show-result (sample %nested-multiple-cell))}")
2208− (crip "nested-named-sibling: {(show-result (sample %nested-named-sibling))}")
2209− (crip "nested-list-sibling: {(show-result (sample %nested-list-sibling))}")
2210− (crip "nested-validated-sibling: {(show-result (sample %nested-validated-sibling))}")
2211− (crip "nested-validated-branch: {(show-result (sample %nested-validated-branch))}")
2212− (crip "nested-named-branch: {(show-result (sample %nested-named-branch))}")
2213− (crip "nested-ford-cell: {(show-result (read-named %outer %nested trans))}")
2214− (crip "nested-valid-cell: {(show-result (sample %nested-valid-cell))}")
2215− (crip "nested-invalid-cell: {(show-result (sample %nested-invalid-cell))}")
2216− (crip "valid-cell: {(show-result (sample %valid-cell))}")
2217− (crip "invalid-cell: {(show-result (sample %invalid-cell))}")
2218− (crip "chapter-malformed: {?:((chapter-unsafe [%x %y %z] %jar) "unsafe" "wrong")}")
2219− (crip "chapter-wrapped-malformed: {?:((chapter-unsafe [~ [%x %y %z]] %jar) "unsafe" "wrong")}")
2220− (crip "chapter-direct-hit: {?:(=((chapter-has chapter-tree %jar) [~ &]) "yes" "no")}")
2221− (crip "chapter-wrapped-hit: {?:(=((chapter-has [~ chapter-tree] %jar) [~ &]) "yes" "no")}")
2222− (crip "chapter-direct-miss: {?:(=((chapter-has chapter-tree %jug) [~ &]) "yes" "no")}")
2223− (crip "chapter-wrapped-miss: {?:(=((chapter-has [~ chapter-tree] %jug) [~ &]) "yes" "no")}")
2224− (crip "shadow-nested-mop: {(show-result (shad %mn))}")
2225− (crip "shadow-mop: {(show-result (shad %mm))}")
2226− (crip "shadow-jar: {(show-result (shad %aa))}")
2227− (crip "shadow-jug: {(show-result (shad %bb))}")
2228− (crip "no-provenance-atom: {(show-result (read-mold %small %word (~(play ut sc) (ream '*word'))))}")
2229− (crip "no-provenance-recursive: {(show-result (read-mold %wrong %alias (~(play ut sc) (ream '*chain'))))}")
2230− (crip "no-provenance: {(show-result (read-mold %small %jar-test (~(play ut sc) (ream '*jar-test'))))}")
2231− (crip "named-not-mold: {(show-result (read-named %small %not-mold sc))}")
2232− (crip "named-present: {(show-result (read-named %small %items sc))}")
2233− (crip "named-missing: {(show-result (read-named %small %missing sc))}")
2234− (crip "named-invalid-core: {(show-result (read-named %small %items [%atom %ud ~]))}")
2235− (crip "named-ford-recursive: {(show-result (read-named %ford %recursive fc))}")
2236− (crip "diagnostic-items: {(show-import-diagnostic (read-named-diagnostic %small %items sc))}")
2237− (crip "diagnostic-signed: {(show-import-diagnostic (read-named-diagnostic %small %signed sc))}")
2238− (crip "diagnostic-float: {(show-import-diagnostic (read-named-diagnostic %small %float sc))}")
2239− (crip "diagnostic-overlap: {(show-import-diagnostic (read-named-diagnostic %small %explicit-percent-overlap sc))}")
2240− (crip "diagnostic-unproved: {(show-import-diagnostic (read-named-diagnostic %small %list-nested-invalid-cell sc))}")
2241− (crip "diagnostic-mark-gate: {(show-import-diagnostic (read-mark-diagnostic %bad mark-gate-core))}")
2242− (crip "diagnostic-shadow-vase: {(show-import-diagnostic (read-named-diagnostic %fake %vase fake-vase))}")
2243− (crip "diagnostic-spoof: {(show-import-diagnostic u.spoof)}")
2244− (crip "missing-arm: {(show-result (read-mold-in %small %missing [%atom %ud ~] sc))}")
2245− (crip "wrong-provenance: {(show-result (read-mold-in %small %action (~(play ut sc) (ream '*items')) sc))}")
2246− (crip "unverified-subject: {(show-result (read-mold-in %std %jar (~(play ut -:!>(..zuse)) (ream '*(jar @ud @t)')) -:!>(..zuse)))}")
2247− (crip "tag-ford-collision: {(show-result (read-named %child %choice tag-collision))}")
2248− (crip "tag-ford-clean: {(show-result (read-named %child %choice tag-clean))}")
2249− (crip "tag-zuse-local: {(show-result (read-named %child %choice tag-zuse-core))}")
2250− (crip "tag-nest-inner: {(show-result (sample %tag-nest-inner))}")
2251− (crip "tag-nest-middle: {(show-result (sample %tag-nest-middle))}")
2252− (crip "tag-nest-diamond: {(show-result (sample %tag-nest-diamond))}")
2253− (crip "tag-nest-deep: {(show-result (sample %tag-nest-deep))}")
2254− (crip "tag-nest-hidden: {(show-result (sample %tag-nest-hidden))}")
2255− (crip "tag-nest-overlap: {(show-result (sample %tag-nest-overlap))}")
2256− (crip "tag-nest-recursive: {(show-result (sample %tag-nest-recursive-outer))}")
2257− (crip "tag-nest-rec-list: {(show-result (sample %tag-nest-rec-list-outer))}")
2258− (crip "tag-nest-rec-repeat: {(show-result (sample %tag-nest-rec-repeat))}")
2259− (crip "tag-nest-rec-duplicate: {(show-result (sample %tag-nest-rec-bad-outer))}")
2260− (crip "tag-nest-rec-hidden: {(show-result (sample %tag-nest-rec-hidden-outer))}")
2261− (crip "tag-nest-rec-mutual: {(show-result (sample %tag-nest-rec-mutual-outer))}")
2262− (crip "tag-nest-rec-outer-overlap: {(show-result (sample %tag-nest-rec-outer-overlap))}")
2263− (crip "tag-nest-rec-owner: {?:(&((contains-named-ref [%ref %small %tag-self] %small %tag-self) !(contains-named-ref [%named %small %other [%ref %small %tag-self]] %small %tag-self)) "yes" "wrong")}")
2264− (crip "tag-nest-many: {(show-result (sample %tag-nest-many))}")
2265− (crip "tag-nest-shadow: {(show-result (read-named %shadow-static %tag-nest-shadow xc))}")
2266− (crip "tag-nest-wrong-hold: {?~((nested-tagged-union %small (~(play ut other) (ream '*chain')) `sc) "unsupported" "BAD")}")
2267− (crip "tag-nest-ford-collision: {(show-result (read-named %outer %tag-nest-middle nest-collision))}")
2268− (crip "tag-self: {(show-result (sample %tag-self))}")
2269− (crip "tag-self-tail: {(show-result (sample %tag-self-tail))}")
2270− (crip "tag-self-duplicate: {(show-result (sample %tag-self-duplicate))}")
2271− (crip "tag-self-hidden: {(show-result (sample %tag-self-hidden))}")
2272− (crip "tag-self-indirect: {(show-result (sample %tag-self-indirect))}")
2273− (crip "tag-mutual-a: {(show-result (sample %tag-mutual-a))}")
2274− (crip "tag-mutual-b: {(show-result (sample %tag-mutual-b))}")
2275− (crip "tag-self-pair: {(show-result (sample %tag-self-pair))}")
2276− (crip "tag-self-ford-collision: {(show-result (read-named %child %tag-self self-collision))}")
2277− (crip "tag-self-wrong-core: {(show-result (read-mold-in %other %tag-self (~(play ut sc) (ream '*tag-self')) self-other))}")
2278− (crip "tag-flat-large: {?:(&(?=(~ (safe-source-name-mode %tag-fuel-7 sc ~ 256 |)) ?=(^ (safe-source-name-mode %tag-fuel-7 sc ~ 4.096 |)) ?=([%& *] (sample %tag-flat-large))) "supported above 256" "BAD")}")
2279− (crip "tag-null-good: {(show-result (sample %tag-null-good))}")
2280− (crip "tag-null-duplicate: {(show-result (sample %tag-null-duplicate))}")
2281− (crip "tag-null-hidden: {(show-result (sample %tag-null-hidden))}")
2282− (crip "tag-valid: {(show-result (sample %tag-valid))}")
2283− (crip "tag-duplicate: {(show-result (sample %tag-duplicate))}")
2284− (crip "tag-collapsed: {(show-result (sample %tag-collapsed))}")
2285− (crip "tag-invalid-direct: {(show-result (sample %tag-invalid-direct))}")
2286− (crip "tag-invalid-alias: {(show-result (sample %tag-invalid-alias))}")
2287− (crip "tag-invalid-list: {(show-result (sample %tag-invalid-list))}")
2288− (crip "tag-enum-good: {(show-result (sample %tag-enum-good))}")
2289− (crip "tag-enum-bad: {(show-result (sample %tag-enum-bad))}")
2290− (crip "tag-nested-good: {(show-result (sample %tag-nested-good))}")
2291− (crip "tag-shadow-jar: {(show-result (read-named %shadow-static %tag-shadow-jar xc))}")
2292− (crip "tag-shadow-jug: {(show-result (read-named %shadow-static %tag-shadow-jug xc))}")
2293− (crip "tag-fuel-small: {?:(?=(^ (safe-source-name %tag-fuel-2 sc ~ 64)) "yes" "no")}")
2294− (crip "tag-fuel-large: {?:(?=(~ (safe-source-name %tag-fuel-11 sc ~ 64)) "rejected" "wrong")}")
2295− (crip "presence-action-1: {(show-result (present %action-1))}")
2296− (crip "presence-command-1: {(show-result (present %command-1))}")
2297− (crip "presence-update-1: {(show-result (present %update-1))}")
2298− (crip "presence-response-1: {(show-result (present %response-1))}")
2299− (crip "presence-topic: {(show-result (present %topic))}")
2300− (crip "presence-timing: {(show-result (present %timing))}")
2301− (crip "presence-places: {(show-result (present %places))}")
2302− (crip "docs-ent: {(show-result (docs-type %ent))}")
2303− (crip "docs-nud: {(show-result (docs-type %nud))}")
2304− (crip "tlon-saga: {(show-result (tlon %saga))}")
2305− (crip "tlon-epic: {(show-result (tlon %epic))}")
2306− ==
2307−
23081765--
tests/importer/about.txt+5−1
@@ -55,7 +55,11 @@ unmodified `desk/sur/epic.hoon`, `desk/sur/presence.hoon` and
5555`tlon-license.txt`. The files use .txt so -test does not build them as
5656Hoon tests. The separately stored `tree.txt` is a diagnostic projection of the
5757internal type graph, not the Jibb type printer. It runs under eval and on the fake
58−ship; +fixture-test also checks the underlying structured values.
58+ship, and the suite's test-structured-values arm also checks the underlying
59+structured values. The probes that build these results, +fixture-output and
60++fixture-test, and the synthetic types such as +bad-branch-fixture live in
61+`tests/lib/jibb-import.hoon`, not in the importer library, which app desks
62+vendor.
5963
6064The nested recursive cases retain a source-proven named owner for one nested
6165tagged union, including repeated uses. Duplicate tags, hidden overlaps,
tests/lib/jibb-import.hoon+566−2
@@ -1,5 +1,7 @@
11:: The importer fixtures and their golden output, read as text so -test
2−:: does not try to compile the fixture /sur files as test programs.
2+:: does not try to compile the fixture /sur files as test programs. The
3+:: probes and synthetic types below live here, not in the importer, which
4+:: app desks vendor; =, jibb-import gives them the importer's arms.
35/+ jibb-import
46/* small %txt /tests/importer/small/txt
57/* epic %txt /tests/importer/tlon-epic/txt
@@ -24,7 +26,7 @@
2426::
2527++ report
2628 ^- @t
27− (of-wain:format (fixture-output:jibb-import (lines-to-cord small) (lines-to-cord epic) (lines-to-cord presence) (lines-to-cord docs) (lines-to-cord shadow) (lines-to-cord shadow-static) (lines-to-cord ford) (lines-to-cord mark) (lines-to-cord mark-rec) (lines-to-cord mark-gate) (lines-to-cord mark-basic) (lines-to-cord origin-trans) (lines-to-cord origin-first) (lines-to-cord origin-other)))
29+ (of-wain:format (fixture-output (lines-to-cord small) (lines-to-cord epic) (lines-to-cord presence) (lines-to-cord docs) (lines-to-cord shadow) (lines-to-cord shadow-static) (lines-to-cord ford) (lines-to-cord mark) (lines-to-cord mark-rec) (lines-to-cord mark-gate) (lines-to-cord mark-basic) (lines-to-cord origin-trans) (lines-to-cord origin-first) (lines-to-cord origin-other)))
2830::
2931++ test-importer-golden
3032 ^- tang
@@ -47,4 +49,566 @@
4749 ?. =((to-wain:format (cat 3 got '\0a')) expected)
4850 ~[leaf+"importer projection differs from tests/importer/tree.txt"]
4951 ~
52+::
53+:: The structured values behind the golden file's printed trees.
54+++ test-structured-values
55+ ^- tang
56+ %+ turn
57+ (fixture-test (lines-to-cord small) (lines-to-cord epic) (lines-to-cord presence) (lines-to-cord docs) (lines-to-cord shadow))
58+ |=(what=@t leaf+"importer structured value differs: {(trip what)}")
59+::
60+:: The standard library's type, which the fixtures are built against.
61+:: Under =, jibb-import, ..zuse no longer finds the standard library.
62+++ zuse-type
63+ ^- type
64+ -:!>(..zuse)
65+::
66+:: A synthetic hold whose first $^ branch cannot be evaluated. It tests
67+:: that a failed branch probe is reported rather than crashing the host.
68+++ bad-branch-fixture
69+ ^- type
70+ [%hold zuse-type [%tsls [%note [%made %bad ~] [%wtcl [%dtwt [%$ 12]] [%wing ~[%jibb-no-such-branch-name]] [%rock %n 0]]] [%$ 1]]]
71+::
72+:: +show-result prints a tree, so it cannot tell %bad from %invalid;
73+:: +fixture-test checks the structured values themselves.
74+++ fixture-test
75+ =, jibb-import
76+ |= [small=@t epic=@t presence=@t docs=@t shadow=@t]
77+ ^- (list @t)
78+ =/ sc=type -:(ride zuse-type small)
79+ =/ ec=type -:(ride zuse-type epic)
80+ =/ pc=type -:(ride zuse-type presence)
81+ =/ dc=type -:(ride zuse-type docs)
82+ =/ hc=type -:(ride zuse-type shadow)
83+ =/ sample
84+ |= name=term
85+ (read-mold-in %small name (~(play ut sc) (ream (cat 3 '*' name))) sc)
86+ =/ tlon
87+ |= name=term
88+ (read-mold-in %epic name (~(play ut ec) (ream (cat 3 '*' name))) ec)
89+ =/ present
90+ |= name=term
91+ (read-mold-in %presence name (~(play ut pc) (ream (cat 3 '*' name))) pc)
92+ =/ shad
93+ |= name=term
94+ (read-mold-in %shadow name (~(play ut hc) (ream (cat 3 '*' name))) hc)
95+ =/ docs-type
96+ |= name=term
97+ (read-mold-in %docs name (~(play ut dc) (ream (cat 3 '*' name))) dc)
98+ =/ errors=(list @t) ~
99+ =/ expect-action=imported
100+ [%fork ~[[%cell [%atom %tas [~ %add]] [%face %text [%atom %t ~]]] [%cell [%atom %tas [~ %remove]] [%face %id [%atom %ud ~]]]]]
101+ =/ errors ?: =((sample %action) [%& expect-action]) errors
102+ ['union cases and faces' errors]
103+ =/ expect-map=imported
104+ [%apply %map ~[[%atom %ud ~] [%cell [%face %id [%atom %ud ~]] [%face %text [%atom %t ~]]]]]
105+ =/ errors ?: =((sample %items) [%& expect-map]) errors
106+ ['map and its arguments' errors]
107+ =/ expect-optional=imported
108+ [%fork ~[[%cell [%face %name [%atom %t ~]] [%face %stamp [%atom %ud ~]]] [%atom %ud ~]]]
109+ =/ errors ?: =((sample %optional) [%& expect-optional]) errors
110+ ['atom-or-cell union' errors]
111+ =/ expect-containers=imported
112+ [%cell [%apply %set ~[[%atom %ud ~]]] [%cell [%apply %qeu ~[[%atom %ud ~]]] [%cell [%apply %list ~[[%atom %t ~]]] [%apply %unit ~[[%atom %ud ~]]]]]]
113+ =/ errors ?: =((sample %containers) [%& expect-containers]) errors
114+ ['set queue list and unit' errors]
115+ =/ expect-chain=imported
116+ [%fork ~[[%cell [%face %value [%atom %ud ~]] [%face %next [%ref %small %chain]]] [%atom %n [~ 0]]]]
117+ =/ errors ?: =((sample %chain) [%& expect-chain]) errors
118+ ['recursive reference' errors]
119+ =/ expect-jar=imported [%apply %jar ~[[%atom %ud ~] [%atom %t ~]]]
120+ =/ expect-jug=imported [%apply %jug ~[[%atom %ud ~] [%atom %t ~]]]
121+ =/ errors ?: =((sample %jar-test) [%& expect-jar]) errors
122+ ['jar name and arguments' errors]
123+ =/ errors ?: =((sample %jug-test) [%& expect-jug]) errors
124+ ['jug name and arguments' errors]
125+ =/ expect-nested-jar=imported [%face %field [%apply %jar ~[[%atom %ud ~] [%atom %t ~]]]]
126+ =/ errors ?: =((sample %nested-jar) [%& expect-nested-jar]) errors
127+ ['nested jar is preserved' errors]
128+ =/ expect-paired=imported
129+ [%cell [%face %values [%apply %jar ~[[%atom %ud ~] [%atom %t ~]]]] [%face %cache [%apply %jug ~[[%atom %ud ~] [%atom %t ~]]]]]
130+ =/ errors ?: =((sample %paired-aliases) [%& expect-paired]) errors
131+ ['multiple collection aliases are preserved' errors]
132+ =/ expect-nested-alias=imported
133+ [%apply %jar ~[[%atom %ud ~] [%apply %jug ~[[%atom %ud ~] [%atom %t ~]]]]]
134+ =/ errors ?: =((sample %nested-alias) [%& expect-nested-alias]) errors
135+ ['nested collection arguments preserve names' errors]
136+ =/ expect-mop=imported [%apply %mop ~[[%atom %ud ~] [%atom %t ~]]]
137+ =/ errors ?: =((sample %mop-test) [%& expect-mop]) errors
138+ ['ordered map name and arguments' errors]
139+ =/ expect-nested-mop=imported
140+ [%cell [%face %table expect-mop] [%face %other [%atom %ud ~]]]
141+ =/ errors ?: =((sample %nested-mop) [%& expect-nested-mop]) errors
142+ ['ordered map field is preserved' errors]
143+ =/ expect-mixed=imported
144+ [%cell [%face %a expect-mop] [%face %b [%apply %list ~[[%atom %ud ~]]]]]
145+ =/ errors ?: =((sample %mixed-mop) [%& expect-mixed]) errors
146+ ['static list sibling is preserved' errors]
147+ =/ errors ?: =((sample %named-mop) [%| 'a nested Hoon mop needs source-aware import']) errors
148+ ['non-atom argument remains unsupported' errors]
149+ =/ errors ?: =((sample %mop-list) [%| 'a nested Hoon mop needs source-aware import']) errors
150+ ['ordered map in a list remains unsupported' errors]
151+ =/ errors ?: =((sample %signed) [%| 'signed and float auras cannot be imported']) errors
152+ ['signed aura rejected' errors]
153+ =/ errors ?: =((sample %float) [%| 'signed and float auras cannot be imported']) errors
154+ ['float aura rejected' errors]
155+ =/ errors ?: =((sample %gate-test) [%| 'cores and gates cannot be imported']) errors
156+ ['gate rejected' errors]
157+ =/ errors ?: =((read-mold %std %vase (~(play ut zuse-type) (ream '*vase'))) [%| 'vases cannot be imported']) errors
158+ ['vase rejected' errors]
159+ =/ expect-valid=imported
160+ [%fork ~[[%cell [%face %x [%atom %ud ~]] [%face %y [%atom %ud ~]]] [%atom %ud ~]]]
161+ =/ errors ?: =((sample %valid-cell) [%& expect-valid]) errors
162+ ['disjoint cell union' errors]
163+ =/ errors ?: =((sample %invalid-cell) [%| 'Hoon $^ union disjointness could not be verified']) errors
164+ ['overlapping cell union is rejected' errors]
165+ =/ errors ?: =((shad %mn) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
166+ ['local mop shadow in a field is rejected' errors]
167+ =/ errors ?: =((shad %mm) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
168+ ['local mop shadow is rejected' errors]
169+ =/ errors ?: =((shad %aa) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
170+ ['local jar shadow is rejected' errors]
171+ =/ errors ?: =((shad %bb) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
172+ ['local jug shadow in a field is rejected' errors]
173+ =/ errors ?: =((read-mold %small %jar-test (~(play ut sc) (ream '*jar-test'))) [%| 'Hoon collection provenance is unavailable or shadowed']) errors
174+ ['missing provenance is rejected' errors]
175+ =/ expect-timing=imported
176+ [%cell [%face %since [%atom %da ~]] [%face %timeout [%apply %unit ~[[%atom %dr ~]]]]]
177+ =/ errors ?: =((present %timing) [%& expect-timing]) errors
178+ ['Tlon presence timing' errors]
179+ =/ errors ?: =((read-mold %external %bad bad-branch-fixture) [%| 'a Hoon $^ union needs a source-level disjointness check']) errors
180+ ['failed branch expansion is reported' errors]
181+ =/ expect-saga=imported
182+ [%fork ~[[%cell [%atom %tas [~ %chi]] [%atom %n [~ 0]]] [%cell [%atom %tas [~ %lev]] [%atom %n [~ 0]]] [%cell [%atom %tas [~ %dex]] [%face %ver [%atom %ud ~]]]]]
183+ =/ errors ?: =((tlon %saga) [%& expect-saga]) errors
184+ ['Tlon saga union' errors]
185+ =/ errors ?: =((tlon %epic) [%& [%atom %ud ~]]) errors
186+ ['Tlon epic atom' errors]
187+ errors
188+::
189+:: Clay includes debug spans around source nodes. Reproduce that
190+:: shape without Clay so the same regression runs under eval and -test.
191+++ decorate-union-source
192+ |= h=hoon
193+ ^- hoon
194+ =/ at=spot [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
195+ ?^ -.h [%dbug at [$(h -.h) $(h +.h)]]
196+ ?+ h [%dbug at h]
197+ [%note *] [%dbug at h(q $(h q.h))]
198+ [%ktts *] [%dbug at h(q $(h q.h))]
199+ [%wtcl *] [%dbug at h(q $(h q.h), r $(h r.h))]
200+ ==
201+::
202+++ debug-union-fixture
203+ =, jibb-import
204+ |= [cor=type name=term]
205+ ^- (each imported @t)
206+ =/ typ=type (~(play ut cor) (ream (cat 3 '*' name)))
207+ ?. ?=([%hold *] typ) [%| 'synthetic union is not a hold']
208+ =/ original=hoon q.typ
209+ ?. ?=([%tsls [%note * *] *] original) [%| 'synthetic union source is unavailable']
210+ =/ source=hoon original(q.p (decorate-union-source q.p.original))
211+ (read-mold %small name typ(q source))
212+::
213+:: Test debug metadata at the spec boundary without assuming that the
214+:: eval version of Hoon's spec mold itself includes Clay's %dbug tag.
215+++ debug-spec-fixture
216+ =, jibb-import
217+ ^- tape
218+ =/ location=* [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
219+ =/ wrapped=* [%dbug location [%leaf %tas %x]]
220+ =/ got=(unit *) (source-gist-tail wrapped)
221+ ?~ got "debug wrapper missing"
222+ =/ leaf=(each spec tang) (mule |.(;;(spec u.got)))
223+ ?. ?=([%& [%leaf %tas %x]] leaf) "debug leaf not recovered"
224+ =/ branch=spec [%bccl ~[p.leaf [%base [%atom %t]]]]
225+ ?^ (tagged-cases ~[branch branch] ~) "duplicate tags accepted"
226+ =/ broken=(unit *) (source-gist-tail [%dbug location 42])
227+ ?~ broken "debug wrapper missing"
228+ =/ invalid=(each spec tang) (mule |.(;;(spec u.broken)))
229+ ?: ?=(%& -.invalid) "malformed spec accepted"
230+ "valid wrapper; duplicate and malformed rejected"
231+::
232+:: The same named-operand call with Clay-style source-location wrappers.
233+++ debug-mop-fixture
234+ =, jibb-import
235+ |= cor=type
236+ ^- tape
237+ =/ typ=type (~(play ut cor) (ream '*mop-wing-valid'))
238+ ?> ?=([%hold *] typ)
239+ =/ original=hoon q.typ
240+ ?> ?=([%tsls [%note * *] *] original)
241+ =/ body=hoon q.p.original
242+ ?> ?=([%cncl *] body)
243+ ?> ?=([%tsgr *] p.body)
244+ =/ b=hoon q.p.body
245+ ?> ?=([%cncl *] b)
246+ =/ call=hoon p.b
247+ ?> ?=([%cncl *] call)
248+ ?> ?=([* [* ~]] q.call)
249+ =/ at=spot [/tests/importer/synthetic/hoon [[1 1] [1 2]]]
250+ =/ inner=hoon call(p [%dbug at p.call], q ~[[%dbug at i.q.call] [%dbug at i.t.q.call]])
251+ =/ outer=hoon body(p p.body(q b(p [%dbug at inner])))
252+ =/ mixed=hoon body(p p.body(q b(p inner)))
253+ =/ multi=hoon body(p p.body(q b(p call(p [%dbug at [%wing ~[%one %two]]]))))
254+ =/ plain=(unit [key=spec value=spec]) (mop-specs body)
255+ ?~ plain "unwrapped mop not recognized"
256+ ?. =((mop-specs [%dbug at outer]) plain) "wrapped mop not recognized"
257+ ?. =((mop-specs mixed) plain) "mixed mop not recognized"
258+ ?^ (mop-specs multi) "multi-segment callee accepted"
259+ ?^ (mop-specs [%dbug at [%sand %ud 42]]) "malformed call accepted"
260+ ?^ (source-single-wing [%dbug at 42]) "malformed wing accepted"
261+ ?^ (source-single-wing [%dbug at [%wing ~[%one %two]]]) "multi-segment operand accepted"
262+ =/ four=* [%dbug at [%dbug at [%dbug at [%dbug at [%wing ~[%mop]]]]]]
263+ =/ five=* [%dbug at four]
264+ ?~ (source-single-wing four) "four wrappers rejected"
265+ ?^ (source-single-wing five) "wrapper limit exceeded"
266+ ?~ (source-note-unwrap four 4) "four note wrappers rejected"
267+ ?^ (source-note-unwrap five 4) "note wrapper limit exceeded"
268+ =/ selected=(unit hoon) (local-arm-source cor %tag-valid)
269+ ?~ selected "selected union not found"
270+ =/ arm-four=hoon [%dbug at [%dbug at [%dbug at [%dbug at u.selected]]]]
271+ =/ arm-five=hoon [%dbug at arm-four]
272+ ?~ (tagged-source-code arm-four %tag-valid) "four wrapped selected arms rejected"
273+ ?^ (tagged-source-code arm-five %tag-valid) "selected arm wrapper limit exceeded"
274+ "wrapped and mixed calls accepted; malformed, multi-segment and excessive wrappers rejected"
275+::
276+:: Synthetic nodes test each part of the direct collection-call proof.
277+++ collection-wrapper-fixture
278+ =, jibb-import
279+ ^- tape
280+ =/ call=hoon [%cncl [%tsgr [%wing ~[[%.y 7]]] [%cncl [%wing ~[%list]] ~]] ~[[%$ 6]]]
281+ =/ subject=hoon [%cncl [%tsgr [%wing ~[[%.y 8]]] [%cncl [%wing ~[%list]] ~]] ~[[%$ 6]]]
282+ =/ sample=hoon [%cncl [%tsgr [%wing ~[[%.y 7]]] [%cncl [%wing ~[%list]] ~]] ~[[%$ 2]]]
283+ =/ good=hoon [%tsls [%note [%made %x ~] call] [%tsls [%dtts [%$ 14] [%$ 2]] [%$ 6]]]
284+ =/ tail=hoon [%tsls [%note [%made %x ~] call] [%$ 6]]
285+ =/ args=(list [hoon hoon]) ~[[call good] [subject good] [sample good] [call tail]]
286+ =/ flags=(list ?) (turn args |=(pair=[hoon hoon] (direct-collection-source -.pair +.pair)))
287+ ?: =(flags ~[& | | |]) "valid; forged subject, sample and tail rejected"
288+ "wrapper guard failed"
289+::
290+++ overlap-fork-fixture
291+ ^- type
292+ =/ nodes=(list type) ~[[%atom %ud ~] [%atom %t ~]]
293+ [%fork (silt nodes)]
294+::
295+++ invalid-fork-fixture
296+ ^- type
297+ =/ nodes=(list type) ~[[%atom %ud ~] [%atom %sd ~]]
298+ [%fork (silt nodes)]
299+::
300+++ fixture-output
301+ =, jibb-import
302+ |= [small=@t epic=@t presence=@t docs=@t shadow=@t shadow-static=@t ford=@t mark=@t mark-rec=@t mark-gate=@t mark-basic=@t origin-trans=@t origin-first=@t origin-other=@t]
303+ ^- wain
304+ =/ sc=type -:(ride zuse-type small)
305+ =/ ec=type -:(ride zuse-type epic)
306+ =/ pc=type -:(ride zuse-type presence)
307+ =/ dc=type -:(ride zuse-type docs)
308+ =/ hc=type -:(ride zuse-type shadow)
309+ =/ xc=type -:(ride zuse-type shadow-static)
310+ =/ fp=type [%cell [%face %small sc] zuse-type]
311+ =/ other=type -:(ride zuse-type origin-other)
312+ =/ fc=type -:(ride fp ford)
313+ ?> ?=([%core *] fc)
314+ =/ only-list=@t '|%\0a+$ lists (list @ud)\0a--\0a'
315+ =/ tp=type [%cell [%face %intermediate fc] zuse-type]
316+ =/ tc=type -:(ride tp only-list)
317+ =/ sp=type [%cell [%face %small xc] zuse-type]
318+ =/ shc=type -:(ride sp only-list)
319+ =/ mark-core=type -:(ride fp mark)
320+ =/ mark-rec-core=type -:(ride fp mark-rec)
321+ =/ mark-gate-core=type -:(ride zuse-type mark-gate)
322+ =/ mark-basic-core=type -:(ride zuse-type mark-basic)
323+ =/ make-mark
324+ |= [field=@t scope=type]
325+ ^- type
326+ -:(ride scope (crip "|_ a={(trip field)}\0a++ grab |% ++ noun a --\0a++ grow |% ++ noun a --\0a++ grad %noun\0a--\0a"))
327+ =/ mark-union-core=type (make-mark 'mark-flag-valid:small' fp)
328+ =/ mark-overlap-core=type (make-mark 'mark-flag-overlap:small' fp)
329+ =/ mark-hidden-core=type (make-mark 'mark-flag-hidden:small' fp)
330+ =/ mark-signed-core=type (make-mark 'signed:small' fp)
331+ =/ mark-callable-core=type (make-mark 'gate-test:small' fp)
332+ =/ extra-subject=type [%cell [%face %other other] fp]
333+ =/ mark-extra-core=type (make-mark 'mark-flag-valid:small' extra-subject)
334+ =/ other-hold=type (~(play ut other) (ream '*chain'))
335+ =/ recursive-hold=type (~(play ut sc) (ream '*chain'))
336+ =/ fake-vase=type -:(ride zuse-type '|%\0a+$ vase @ud\0a--\0a')
337+ =/ spoof=(unit import-diagnostic)
338+ (first-invalid [%bad 'signed and float auras cannot be imported'])
339+ ?> ?=(^ spoof)
340+ =/ mark-shadow-core=type -:(ride sp mark-basic)
341+ =/ tshp=type [%cell [%face %intermediate shc] zuse-type]
342+ =/ tshc=type -:(ride tshp only-list)
343+ =/ trans=type -:(ride tp origin-trans)
344+ =/ ambiguous-parent=type [%cell [%face %first sc] [%cell [%face %second sc] zuse-type]]
345+ =/ ambiguous=type -:(ride ambiguous-parent origin-first)
346+ =/ distinct-parent=type [%cell [%face %first sc] [%cell [%face %second other] zuse-type]]
347+ =/ distinct=type -:(ride distinct-parent origin-first)
348+ =/ trans-amb-parent=type [%cell [%face %intermediate fc] [%cell [%face %second sc] zuse-type]]
349+ =/ trans-amb=type -:(ride trans-amb-parent origin-trans)
350+ =/ tag-child=@t
351+ '|%\0a+$ tag-invalid-cell @t\0a+$ choice $%([%ok a=tag-invalid-cell] [%err a=@ud])\0a--\0a'
352+ =/ tag-collision=type -:(ride [%cell [%face %base sc] zuse-type] tag-child)
353+ =/ tag-clean=type -:(ride [%cell [%face %base other] zuse-type] tag-child)
354+ =/ tag-zuse=@t
355+ '|%\0a+$ ship @t\0a+$ path @ud\0a+$ choice $%([%ok who=ship] [%err where=path])\0a--\0a'
356+ =/ tag-zuse-core=type -:(ride zuse-type tag-zuse)
357+ =/ nest-parent-src=@t
358+ '|%\0a+$ tag-nest-inner $%([%foreign @t] [%foreign @t])\0a--\0a'
359+ =/ nest-parent=type -:(ride zuse-type nest-parent-src)
360+ =/ nest-child-src=@t
361+ '|%\0a+$ tag-nest-inner $%([%left @t] [%right @ud])\0a+$ tag-nest-middle $%([%one x=tag-nest-inner] [%two ~])\0a--\0a'
362+ =/ nest-collision=type -:(ride [%cell [%face %base nest-parent] zuse-type] nest-child-src)
363+ =/ self-parent=type
364+ -:(ride zuse-type '|%\0a+$ tag-self ?(%same %same)\0a--\0a')
365+ =/ self-child=@t
366+ '|%\0a+$ tag-self $%([%branch children=(list tag-self)] [%leaf value=@t])\0a--\0a'
367+ =/ self-collision=type -:(ride [%cell [%face %tag-self self-parent] zuse-type] self-child)
368+ =/ self-other=type
369+ -:(ride zuse-type '|%\0a+$ tag-self $%([%branch children=(list tag-self)] [%leaf value=@ud])\0a--\0a')
370+ =/ mop-ford-parent=type
371+ -:(ride zuse-type '|%\0a+$ value ?(%same %same)\0a--\0a')
372+ =/ mop-ford-child=type
373+ -:(ride [%cell [%face %value mop-ford-parent] zuse-type] '|%\0a+$ key @ud\0a+$ value @t\0a+$ mm ((mop key value) lte)\0a--\0a')
374+ =/ sample
375+ |= name=term
376+ (read-mold-in %small name (~(play ut sc) (ream (cat 3 '*' name))) sc)
377+ =/ tlon
378+ |= name=term
379+ (read-mold-in %epic name (~(play ut ec) (ream (cat 3 '*' name))) ec)
380+ =/ present
381+ |= name=term
382+ (read-mold-in %presence name (~(play ut pc) (ream (cat 3 '*' name))) pc)
383+ =/ shad
384+ |= name=term
385+ (read-mold-in %shadow name (~(play ut hc) (ream (cat 3 '*' name))) hc)
386+ =/ docs-type
387+ |= name=term
388+ (read-mold-in %docs name (~(play ut dc) (ream (cat 3 '*' name))) dc)
389+ =/ chapter-tree=(map term hoon)
390+ (~(put by *(map term hoon)) %jar [%zpzp ~])
391+ =/ vase (read-mold %std %vase (~(play ut zuse-type) (ream '*vase')))
392+ :~ (crip "action: {(show-result (sample %action))}")
393+ (crip "optional: {(show-result (sample %optional))}")
394+ (crip "items: {(show-result (sample %items))}")
395+ (crip "containers: {(show-result (sample %containers))}")
396+ (crip "chain: {(show-result (sample %chain))}")
397+ (crip "jar: {(show-result (sample %jar-test))}")
398+ (crip "jug: {(show-result (sample %jug-test))}")
399+ (crip "nested-jar: {(show-result (sample %nested-jar))}")
400+ (crip "paired-aliases: {(show-result (sample %paired-aliases))}")
401+ (crip "nested-alias: {(show-result (sample %nested-alias))}")
402+ (crip "compound: {(show-result (sample %compound))}")
403+ (crip "compound-fields: {(show-result (sample %compound-fields))}")
404+ (crip "mop: {(show-result (sample %mop-test))}")
405+ (crip "nested-mop: {(show-result (sample %nested-mop))}")
406+ (crip "two-mops: {(show-result (sample %two-mops))}")
407+ (crip "mixed-mop: {(show-result (sample %mixed-mop))}")
408+ (crip "nested-static-mop: {(show-result (sample %nested-static-mop))}")
409+ (crip "collection-siblings: {(show-result (sample %collection-siblings))}")
410+ (crip "dynamic-sibling-mop: {(show-result (sample %dynamic-sibling-mop))}")
411+ (crip "mark-flag-source: {(show-result (read-named %small %mark-flag-valid sc))}")
412+ (crip "mark-flag-union: {(show-result (read-mark %flag-union mark-union-core))}")
413+ (crip "mark-flag-overlap: {(show-result (read-mark %flag-overlap mark-overlap-core))}")
414+ (crip "mark-flag-hidden: {(show-result (read-mark %flag-hidden mark-hidden-core))}")
415+ (crip "mark-flag-signed: {(show-result (read-mark %flag-signed mark-signed-core))}")
416+ (crip "mark-flag-callable: {(show-result (read-mark %flag-callable mark-callable-core))}")
417+ (crip "mark-flag-extra: {(show-result (read-mark %flag-extra mark-extra-core))}")
418+ (crip "mark-flag-other-hold: {?~((mark-union-fallback other-hold fp) "unsupported" "BAD")}")
419+ (crip "mark-flag-recursive-fallback: {?~((mark-union-fallback recursive-hold fp) "unsupported" "BAD")}")
420+ (crip "mark-record: {(show-result (read-mark %todo-item mark-core))}")
421+ (crip "mark-recursive: {(show-result (read-mark %recursive mark-rec-core))}")
422+ (crip "mark-gate: {(show-result (read-mark %bad mark-gate-core))}")
423+ (crip "mark-list: {(show-result (read-mark %list-mark mark-basic-core))}")
424+ (crip "mark-shadow: {(show-result (read-mark %list-mark mark-shadow-core))}")
425+ (crip "mark-not-core: {(show-result (read-mark %bad [%atom %ud ~]))}")
426+ (crip "ford-list: {(show-result (read-mold-in %ford %lists (~(play ut fc) (ream '*lists')) fc))}")
427+ (crip "ford-imported: {(show-result (read-mold-in %ford %wrapped (~(play ut fc) (ream '*wrapped')) fc))}")
428+ (crip "ford-recursive: {(show-result (read-mold-in %ford %recursive (~(play ut fc) (ream '*recursive')) fc))}")
429+ (crip "ford-local-recursive: {(show-result (read-mold-in %ford %local (~(play ut fc) (ream '*local')) fc))}")
430+ (crip "ford-recursive-transitive: {(show-result (read-named %outer %wrapped trans))}")
431+ (crip "ford-recursive-ambiguous: {(show-result (read-named %outer %pick-one ambiguous))}")
432+ (crip "ford-recursive-transitive-ambiguous: {(show-result (read-named %outer %wrapped trans-amb))}")
433+ (crip "ford-recursive-distinct-first: {(show-result (read-named %outer %pick-one distinct))}")
434+ (crip "ford-recursive-distinct-second: {(show-result (read-named %outer %pick-two distinct))}")
435+ (crip "ford-transitive: {(show-result (read-mold-in %ford %lists (~(play ut tc) (ream '*lists')) tc))}")
436+ (crip "ford-shadow: {(show-result (read-mold-in %ford %lists (~(play ut shc) (ream '*lists')) shc))}")
437+ (crip "ford-transitive-shadow: {(show-result (read-mold-in %ford %lists (~(play ut tshc) (ream '*lists')) tshc))}")
438+ (crip "ford-shadow-face: {?:((scope-safe [%cell [%face %list sc] zuse-type] %list) "wrong" "unsafe")}")
439+ (crip "ford-unknown: {?:((scope-safe [%cell [%atom %ud ~] zuse-type] %list) "wrong" "unsafe")}")
440+ (crip "ford-mismatched-core: {?:((scope-safe fc(p zuse-type) %list) "wrong" "unsafe")}")
441+ (crip "shadow-list-mop: {(show-result (read-mold-in %shadow-static %bad (~(play ut xc) (ream '*bad')) xc))}")
442+ (crip "named-mop: {(show-result (sample %named-mop))}")
443+ (crip "mop-list: {(show-result (sample %mop-list))}")
444+ (crip "mop-wing-valid: {(show-result (sample %mop-wing-valid))}")
445+ (crip "mop-wing-invalid-key: {(show-result (sample %mop-wing-invalid-key))}")
446+ (crip "mop-wing-invalid-key-alias: {(show-result (sample %mop-wing-invalid-key-alias))}")
447+ (crip "mop-wing-invalid-value: {(show-result (sample %mop-wing-invalid-value))}")
448+ (crip "mop-wing-invalid-value-alias: {(show-result (sample %mop-wing-invalid-value-alias))}")
449+ (crip "mop-wing-rec-key: {(show-result (sample %mop-wing-rec-key))}")
450+ (crip "mop-wing-rec-value: {(show-result (sample %mop-wing-rec-value))}")
451+ (crip "mop-wing-shadow: {(show-result (read-named %shadow %mmw hc))}")
452+ (crip "mop-wing-ford-collision: {(show-result (read-named %child %mm mop-ford-child))}")
453+ (crip "mop-wing-debug: {(debug-mop-fixture sc)}")
454+ (crip "signed: {(show-result (sample %signed))}")
455+ (crip "float: {(show-result (sample %float))}")
456+ (crip "gate: {(show-result (sample %gate-test))}")
457+ (crip "vase: {(show-result vase)}")
458+ (crip "failed-branch: {(show-result (read-mold %external %bad bad-branch-fixture))}")
459+ (crip "debug-spec: {debug-spec-fixture}")
460+ (crip "debug-union: {(show-result (debug-union-fixture sc %action))}")
461+ (crip "debug-union-overlap: {(show-result (debug-union-fixture sc %explicit-wut-overlap))}")
462+ (crip "debug-nested-cell: {(show-result (debug-union-fixture sc %nested-valid-cell))}")
463+ (crip "debug-nested-cell-overlap: {(show-result (debug-union-fixture sc %nested-invalid-cell))}")
464+ (crip "explicit-graph: {(show-result (read-mold %raw %raw overlap-fork-fixture))}")
465+ (crip "explicit-graph-unsupported: {(show-result (read-mold %raw %raw invalid-fork-fixture))}")
466+ (crip "explicit-wut-safe: {(show-result (sample %explicit-wut-safe))}")
467+ (crip "explicit-percent-overlap: {(show-result (sample %explicit-percent-overlap))}")
468+ (crip "explicit-wut-overlap: {(show-result (sample %explicit-wut-overlap))}")
469+ (crip "explicit-collapsed: {(show-result (sample %explicit-collapsed))}")
470+ (crip "explicit-subsumed: {(show-result (sample %explicit-subsumed))}")
471+ (crip "explicit-three: {(show-result (sample %explicit-three))}")
472+ (crip "explicit-unknown: {(show-result (sample %explicit-unknown))}")
473+ (crip "explicit-nested: {(show-result (sample %explicit-nested))}")
474+ (crip "collection-union-wrapper: {collection-wrapper-fixture}")
475+ (crip "collection-union-list: {(show-result (sample %collection-union-list))}")
476+ (crip "collection-union-set: {(show-result (sample %collection-union-set))}")
477+ (crip "collection-union-map-key: {(show-result (sample %collection-union-map-key))}")
478+ (crip "collection-union-map-value: {(show-result (sample %collection-union-map-value))}")
479+ (crip "collection-union-unit: {(show-result (sample %collection-union-unit))}")
480+ (crip "collection-union-collapsed: {(show-result (sample %collection-union-collapsed))}")
481+ (crip "collection-union-multiple: {(show-result (sample %collection-union-multiple))}")
482+ (crip "collection-union-nested: {(show-result (sample %collection-union-nested))}")
483+ (crip "collection-union-dependent: {(show-result (sample %collection-union-dependent))}")
484+ (crip "collection-union-shadow: {(show-result (read-named %shadow %collection-union-shadow xc))}")
485+ (crip "explicit-list: {(show-result (sample %explicit-list))}")
486+ (crip "explicit-set: {(show-result (sample %explicit-set))}")
487+ (crip "explicit-faces: {(show-result (sample %explicit-faces))}")
488+ (crip "explicit-alias: {(show-result (sample %explicit-alias))}")
489+ (crip "explicit-ford: {(show-result (read-named %outer %bad-union trans))}")
490+ (crip "explicit-shadow-path: {(show-result (read-named %shadow %path-shadow xc))}")
491+ (crip "list-bckt-field: {(show-result (sample %list-bckt-field))}")
492+ (crip "list-noun-overlap: {(show-result (sample %list-noun-overlap))}")
493+ (crip "list-null-overlap: {(show-result (sample %list-null-overlap))}")
494+ (crip "list-nested-atom-cell: {(show-result (sample %list-nested-atom-cell))}")
495+ (crip "list-nested-valid-cell: {(show-result (sample %list-nested-valid-cell))}")
496+ (crip "list-nested-invalid-cell: {(show-result (sample %list-nested-invalid-cell))}")
497+ (crip "map-nested-invalid-cell: {(show-result (sample %map-nested-invalid-cell))}")
498+ (crip "set-direct-invalid-cell: {(show-result (sample %set-direct-invalid-cell))}")
499+ (crip "map-key-invalid-cell: {(show-result (sample %map-key-invalid-cell))}")
500+ (crip "nested-atom-cell: {(show-result (sample %nested-atom-cell))}")
501+ (crip "nested-tags: {(show-result (sample %nested-tags))}")
502+ (crip "nested-tags-overlap: {(show-result (sample %nested-tags-overlap))}")
503+ (crip "nested-tagged: {(show-result (sample %nested-tagged))}")
504+ (crip "nested-tagged-bckt: {(show-result (sample %nested-tagged-bckt))}")
505+ (crip "nested-tagged-overlap: {(show-result (sample %nested-tagged-overlap))}")
506+ (crip "nested-tagged-alias: {(show-result (sample %nested-tagged-alias))}")
507+ (crip "nested-tagged-ford: {(show-result (read-named %outer %tagged trans))}")
508+ (crip "tag-static-valid: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 13] [%rock %$ %foo]] [%rock %tas %foo]] 13) "yes" "no")}")
509+ (crip "tag-static-wrong-axis: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 12] [%rock %$ %foo]] [%rock %tas %foo]] 13) "wrong" "no")}")
510+ (crip "tag-static-nonconstant: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 13] [%rock %$ %foo]] [%$ 13]] 13) "wrong" "no")}")
511+ (crip "tag-static-wrong-value: {?:((fixed-cell-mold [%wtgr [%dtts [%$ 13] [%rock %$ %foo]] [%rock %tas %bar]] 13) "wrong" "no")}")
512+ (crip "nested-first-cell: {(show-result (sample %nested-first-cell))}")
513+ (crip "nested-alias-cell: {(show-result (sample %nested-alias-cell))}")
514+ (crip "nested-multiple-cell: {(show-result (sample %nested-multiple-cell))}")
515+ (crip "nested-named-sibling: {(show-result (sample %nested-named-sibling))}")
516+ (crip "nested-list-sibling: {(show-result (sample %nested-list-sibling))}")
517+ (crip "nested-validated-sibling: {(show-result (sample %nested-validated-sibling))}")
518+ (crip "nested-validated-branch: {(show-result (sample %nested-validated-branch))}")
519+ (crip "nested-named-branch: {(show-result (sample %nested-named-branch))}")
520+ (crip "nested-ford-cell: {(show-result (read-named %outer %nested trans))}")
521+ (crip "nested-valid-cell: {(show-result (sample %nested-valid-cell))}")
522+ (crip "nested-invalid-cell: {(show-result (sample %nested-invalid-cell))}")
523+ (crip "valid-cell: {(show-result (sample %valid-cell))}")
524+ (crip "invalid-cell: {(show-result (sample %invalid-cell))}")
525+ (crip "chapter-malformed: {?:((chapter-unsafe [%x %y %z] %jar) "unsafe" "wrong")}")
526+ (crip "chapter-wrapped-malformed: {?:((chapter-unsafe [~ [%x %y %z]] %jar) "unsafe" "wrong")}")
527+ (crip "chapter-direct-hit: {?:(=((chapter-has chapter-tree %jar) [~ &]) "yes" "no")}")
528+ (crip "chapter-wrapped-hit: {?:(=((chapter-has [~ chapter-tree] %jar) [~ &]) "yes" "no")}")
529+ (crip "chapter-direct-miss: {?:(=((chapter-has chapter-tree %jug) [~ &]) "yes" "no")}")
530+ (crip "chapter-wrapped-miss: {?:(=((chapter-has [~ chapter-tree] %jug) [~ &]) "yes" "no")}")
531+ (crip "shadow-nested-mop: {(show-result (shad %mn))}")
532+ (crip "shadow-mop: {(show-result (shad %mm))}")
533+ (crip "shadow-jar: {(show-result (shad %aa))}")
534+ (crip "shadow-jug: {(show-result (shad %bb))}")
535+ (crip "no-provenance-atom: {(show-result (read-mold %small %word (~(play ut sc) (ream '*word'))))}")
536+ (crip "no-provenance-recursive: {(show-result (read-mold %wrong %alias (~(play ut sc) (ream '*chain'))))}")
537+ (crip "no-provenance: {(show-result (read-mold %small %jar-test (~(play ut sc) (ream '*jar-test'))))}")
538+ (crip "named-not-mold: {(show-result (read-named %small %not-mold sc))}")
539+ (crip "named-present: {(show-result (read-named %small %items sc))}")
540+ (crip "named-missing: {(show-result (read-named %small %missing sc))}")
541+ (crip "named-invalid-core: {(show-result (read-named %small %items [%atom %ud ~]))}")
542+ (crip "named-ford-recursive: {(show-result (read-named %ford %recursive fc))}")
543+ (crip "diagnostic-items: {(show-import-diagnostic (read-named-diagnostic %small %items sc))}")
544+ (crip "diagnostic-signed: {(show-import-diagnostic (read-named-diagnostic %small %signed sc))}")
545+ (crip "diagnostic-float: {(show-import-diagnostic (read-named-diagnostic %small %float sc))}")
546+ (crip "diagnostic-overlap: {(show-import-diagnostic (read-named-diagnostic %small %explicit-percent-overlap sc))}")
547+ (crip "diagnostic-unproved: {(show-import-diagnostic (read-named-diagnostic %small %list-nested-invalid-cell sc))}")
548+ (crip "diagnostic-mark-gate: {(show-import-diagnostic (read-mark-diagnostic %bad mark-gate-core))}")
549+ (crip "diagnostic-shadow-vase: {(show-import-diagnostic (read-named-diagnostic %fake %vase fake-vase))}")
550+ (crip "diagnostic-spoof: {(show-import-diagnostic u.spoof)}")
551+ (crip "missing-arm: {(show-result (read-mold-in %small %missing [%atom %ud ~] sc))}")
552+ (crip "wrong-provenance: {(show-result (read-mold-in %small %action (~(play ut sc) (ream '*items')) sc))}")
553+ (crip "unverified-subject: {(show-result (read-mold-in %std %jar (~(play ut zuse-type) (ream '*(jar @ud @t)')) zuse-type))}")
554+ (crip "tag-ford-collision: {(show-result (read-named %child %choice tag-collision))}")
555+ (crip "tag-ford-clean: {(show-result (read-named %child %choice tag-clean))}")
556+ (crip "tag-zuse-local: {(show-result (read-named %child %choice tag-zuse-core))}")
557+ (crip "tag-nest-inner: {(show-result (sample %tag-nest-inner))}")
558+ (crip "tag-nest-middle: {(show-result (sample %tag-nest-middle))}")
559+ (crip "tag-nest-diamond: {(show-result (sample %tag-nest-diamond))}")
560+ (crip "tag-nest-deep: {(show-result (sample %tag-nest-deep))}")
561+ (crip "tag-nest-hidden: {(show-result (sample %tag-nest-hidden))}")
562+ (crip "tag-nest-overlap: {(show-result (sample %tag-nest-overlap))}")
563+ (crip "tag-nest-recursive: {(show-result (sample %tag-nest-recursive-outer))}")
564+ (crip "tag-nest-rec-list: {(show-result (sample %tag-nest-rec-list-outer))}")
565+ (crip "tag-nest-rec-repeat: {(show-result (sample %tag-nest-rec-repeat))}")
566+ (crip "tag-nest-rec-duplicate: {(show-result (sample %tag-nest-rec-bad-outer))}")
567+ (crip "tag-nest-rec-hidden: {(show-result (sample %tag-nest-rec-hidden-outer))}")
568+ (crip "tag-nest-rec-mutual: {(show-result (sample %tag-nest-rec-mutual-outer))}")
569+ (crip "tag-nest-rec-outer-overlap: {(show-result (sample %tag-nest-rec-outer-overlap))}")
570+ (crip "tag-nest-rec-owner: {?:(&((contains-named-ref [%ref %small %tag-self] %small %tag-self) !(contains-named-ref [%named %small %other [%ref %small %tag-self]] %small %tag-self)) "yes" "wrong")}")
571+ (crip "tag-nest-many: {(show-result (sample %tag-nest-many))}")
572+ (crip "tag-nest-shadow: {(show-result (read-named %shadow-static %tag-nest-shadow xc))}")
573+ (crip "tag-nest-wrong-hold: {?~((nested-tagged-union %small (~(play ut other) (ream '*chain')) `sc) "unsupported" "BAD")}")
574+ (crip "tag-nest-ford-collision: {(show-result (read-named %outer %tag-nest-middle nest-collision))}")
575+ (crip "tag-self: {(show-result (sample %tag-self))}")
576+ (crip "tag-self-tail: {(show-result (sample %tag-self-tail))}")
577+ (crip "tag-self-duplicate: {(show-result (sample %tag-self-duplicate))}")
578+ (crip "tag-self-hidden: {(show-result (sample %tag-self-hidden))}")
579+ (crip "tag-self-indirect: {(show-result (sample %tag-self-indirect))}")
580+ (crip "tag-mutual-a: {(show-result (sample %tag-mutual-a))}")
581+ (crip "tag-mutual-b: {(show-result (sample %tag-mutual-b))}")
582+ (crip "tag-self-pair: {(show-result (sample %tag-self-pair))}")
583+ (crip "tag-self-ford-collision: {(show-result (read-named %child %tag-self self-collision))}")
584+ (crip "tag-self-wrong-core: {(show-result (read-mold-in %other %tag-self (~(play ut sc) (ream '*tag-self')) self-other))}")
585+ (crip "tag-flat-large: {?:(&(?=(~ (safe-source-name-mode %tag-fuel-7 sc ~ 256 |)) ?=(^ (safe-source-name-mode %tag-fuel-7 sc ~ 4.096 |)) ?=([%& *] (sample %tag-flat-large))) "supported above 256" "BAD")}")
586+ (crip "tag-null-good: {(show-result (sample %tag-null-good))}")
587+ (crip "tag-null-duplicate: {(show-result (sample %tag-null-duplicate))}")
588+ (crip "tag-null-hidden: {(show-result (sample %tag-null-hidden))}")
589+ (crip "tag-valid: {(show-result (sample %tag-valid))}")
590+ (crip "tag-duplicate: {(show-result (sample %tag-duplicate))}")
591+ (crip "tag-collapsed: {(show-result (sample %tag-collapsed))}")
592+ (crip "tag-invalid-direct: {(show-result (sample %tag-invalid-direct))}")
593+ (crip "tag-invalid-alias: {(show-result (sample %tag-invalid-alias))}")
594+ (crip "tag-invalid-list: {(show-result (sample %tag-invalid-list))}")
595+ (crip "tag-enum-good: {(show-result (sample %tag-enum-good))}")
596+ (crip "tag-enum-bad: {(show-result (sample %tag-enum-bad))}")
597+ (crip "tag-nested-good: {(show-result (sample %tag-nested-good))}")
598+ (crip "tag-shadow-jar: {(show-result (read-named %shadow-static %tag-shadow-jar xc))}")
599+ (crip "tag-shadow-jug: {(show-result (read-named %shadow-static %tag-shadow-jug xc))}")
600+ (crip "tag-fuel-small: {?:(?=(^ (safe-source-name %tag-fuel-2 sc ~ 64)) "yes" "no")}")
601+ (crip "tag-fuel-large: {?:(?=(~ (safe-source-name %tag-fuel-11 sc ~ 64)) "rejected" "wrong")}")
602+ (crip "presence-action-1: {(show-result (present %action-1))}")
603+ (crip "presence-command-1: {(show-result (present %command-1))}")
604+ (crip "presence-update-1: {(show-result (present %update-1))}")
605+ (crip "presence-response-1: {(show-result (present %response-1))}")
606+ (crip "presence-topic: {(show-result (present %topic))}")
607+ (crip "presence-timing: {(show-result (present %timing))}")
608+ (crip "presence-places: {(show-result (present %places))}")
609+ (crip "docs-ent: {(show-result (docs-type %ent))}")
610+ (crip "docs-nud: {(show-result (docs-type %nud))}")
611+ (crip "tlon-saga: {(show-result (tlon %saga))}")
612+ (crip "tlon-epic: {(show-result (tlon %epic))}")
613+ ==
50614--