# joule-ui line language conformance — v1 The pack of SPEC §11.9: the line language (OpenUI Lang 1.0, taken in as joule-ui widget trees) against the pack's own library. Regenerate with: ``` cargo run -p joule-ui-lang --bin gen_lang_vectors ``` and verify, from the specification alone, with the independent verifier: ``` python3 -I conformance/lang_verify.py # every case recomputed and compared python3 -I conformance/lang_verify.py --mutations # changed vectors are refused ``` `cargo test -p joule-ui-lang --test pack` checks that the committed files are exactly what the reference implementation gives. | File | Class | What a conforming ingest reproduces | |---|---|---| | `library.json` | — | the library: each widget's props, children rule and positional order (written out), and the root widget | | `l1-statements.json` | **L1** | each text's statements (name, source line, kind, complete) and whether it ended open | | `l2-ingest.json` | **L2** | each text's snapshot at the end of the stream: the tree, its nodes (key, line, statement), the errors (line, statement, code, widget, prop, warning), the unresolved names, the orphans, whether it ended open | | `l3-stream.json` | **L3** | each case's snapshot after every chunk and at the end; the end equals the batch parse of the joined chunks | | `l4-write.json` | **L4** | each tree's canonical text, which parses back to the tree | | `l5-refusals.json` | **L5** | negative controls: each refused with its code at its line, and its whole snapshot | | `MANIFEST.json` | — | each file's SHA-256 | The tree and its values are in joule-ui's wire form (§2): a widget is `{"name", "props", "children"}` (`children` absent when empty); a prop value is `{"type": "text" | "number" | "bool" | "list" | "object", "value": ...}`, `{"type": "null"}`, or `{"type": "action", "value": {"id", "payload"}}` with `payload` null or a prop value. Errors carry no message: messages are for a person or a model, and not normative.