open-standards/joule-ui/conformance/lang/v1/l3-stream.json
Transaction Science 8a0f6073f7 joule-ui: the line language (SPEC §11), a streaming ingest into validated widget trees
joule-ui takes in OpenUI Lang 1.0 the way it takes in A2UI: a model writes a
surface as a program, one widget a line, and joule-ui-lang builds a widget tree
against the host's registry as the program streams. After every chunk a snapshot
holds the tree as far as it can be built, each widget checked by joule-ui's own
validate, and every error with its source line and reason code. State, queries,
operators, conditionals, built-in functions and sequences of actions are parsed
and refused not-declarative. A canonical writer turns a tree back into the
language; it parses back to the same tree.

- joule-ui-core: WidgetSchema::positional, the order a positional call passes
  props in (SPEC §3); absent from the wire form when undeclared.
- joule-ui-interaction: begin_interaction and Pending::finish, the lifecycle's
  three phases in two steps for a host whose handler is asynchronous (SPEC §6);
  run_interaction is built on them and seals what it sealed before.
- conformance/lang/v1: L1 statements, L2 ingest, L3 streaming, L4 the canonical
  form, L5 refusals, with an independent Python verifier written from §11.
- docs/create.md: the design of Create.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 04:46:19 -04:00

1205 lines
26 KiB
JSON

{
"cases": [
{
"after_each": [
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
}
],
"orphans": [],
"tree": {
"name": "Page",
"props": {
"title": {
"type": "text",
"value": "Ho"
}
}
},
"unresolved": [
"card"
]
},
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "card",
"line": 2,
"statement": "card"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "Hel"
}
}
}
],
"name": "Page",
"props": {
"title": {
"type": "text",
"value": "Home"
}
}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "card",
"line": 2,
"statement": "card"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "Hello"
}
}
}
],
"name": "Page",
"props": {
"title": {
"type": "text",
"value": "Home"
}
}
},
"unresolved": [
"Te",
"t2"
]
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "card",
"line": 2,
"statement": "card"
},
{
"key": "t1",
"line": 3,
"statement": "t1"
},
{
"key": "t2",
"line": 4,
"statement": "t2"
}
],
"orphans": [],
"tree": {
"children": [
{
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "one"
}
}
},
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "two"
}
}
}
],
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "Hello"
}
}
}
],
"name": "Page",
"props": {
"title": {
"type": "text",
"value": "Home"
}
}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "card",
"line": 2,
"statement": "card"
},
{
"key": "t1",
"line": 3,
"statement": "t1"
},
{
"key": "t2",
"line": 4,
"statement": "t2"
}
],
"orphans": [],
"tree": {
"children": [
{
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "one"
}
}
},
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "two"
}
}
}
],
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "Hello"
}
}
}
],
"name": "Page",
"props": {
"title": {
"type": "text",
"value": "Home"
}
}
},
"unresolved": []
},
"chunks": [
"root = Page([card], \"Ho",
"me\")\ncard = Card(\"Hel",
"lo\", [t1, t2])\nt1 = Te",
"xt(\"one\")\nt2 = Text(\"two\")\n"
],
"name": "worked-example"
},
{
"after_each": [
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "c",
"line": 2,
"statement": "c"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "A"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "c",
"line": 2,
"statement": "c"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "A long"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "c",
"line": 2,
"statement": "c"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "A long title"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "c",
"line": 2,
"statement": "c"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "A long title"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([c])\nc = Card(\"A",
" long",
" title\")"
],
"name": "pending-title-grows"
},
{
"after_each": [
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
}
],
"orphans": [],
"tree": {
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "c",
"line": 2,
"statement": "c"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "t"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "c",
"line": 2,
"statement": "c"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Card",
"props": {
"title": {
"type": "text",
"value": "t"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([c])\nc = Card(",
"\"t\")\n"
],
"name": "held-until-required-arrives"
},
{
"after_each": [
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "ok"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [
{
"code": "type-mismatch",
"component": "Text",
"line": 3,
"prop": "text",
"statement": "b"
}
],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [
"c"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "ok"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [
{
"code": "type-mismatch",
"component": "Text",
"line": 3,
"prop": "text",
"statement": "b"
}
],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [
"c"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "ok"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([a, b])\na = Text(\"ok\")\nb = Text(4",
"2)\nc = 1"
],
"name": "errors-wait-for-completion"
},
{
"after_each": [
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [
"x"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "done"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 4,
"statement": "a"
}
],
"orphans": [
"x"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "partial"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 4,
"statement": "a"
}
],
"orphans": [
"x"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "partial"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([a])\na = Text(\"done\")\nx = 1\na = Text(\"partial",
"\")\n"
],
"name": "pending-does-not-overwrite"
},
{
"after_each": [
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [
"x"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "t"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [
"x",
"y"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "t"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [
"x",
"y"
],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "t"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([a])\na = Text(\"t\")\nx = c\n",
"? 1 : 2\ny = 3"
],
"name": "ternary-across-chunks"
},
{
"after_each": [
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "x"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 4,
"statement": "root"
}
],
"orphans": [],
"tree": {
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 4,
"statement": "root"
}
],
"orphans": [],
"tree": {
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([a])\na = Text(\"x\")\n",
"```\nroot = Page()\n```"
],
"name": "fence-arrives-late"
},
{
"after_each": [
{
"errors": [],
"incomplete": true,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "back\\"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "back\\slash"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 2,
"statement": "a"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "back\\slash"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([a])\na = Text(\"back\\",
"slash\")"
],
"name": "open-string-mid-escape"
},
{
"after_each": [
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "b",
"line": 2,
"statement": "b"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "b"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": [
"Te"
]
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "b",
"line": 2,
"statement": "b"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "b"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": [
"Tex"
]
},
{
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 3,
"statement": "a"
},
{
"key": "b",
"line": 2,
"statement": "b"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "a"
}
}
},
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "b"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
}
],
"at_end": {
"errors": [],
"incomplete": false,
"nodes": [
{
"key": "root",
"line": 1,
"statement": "root"
},
{
"key": "a",
"line": 3,
"statement": "a"
},
{
"key": "b",
"line": 2,
"statement": "b"
}
],
"orphans": [],
"tree": {
"children": [
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "a"
}
}
},
{
"name": "Text",
"props": {
"text": {
"type": "text",
"value": "b"
}
}
}
],
"name": "Page",
"props": {}
},
"unresolved": []
},
"chunks": [
"root = Page([a, b])\nb = Text(\"b\")\na = Te",
"x",
"t(\"a\")\n"
],
"name": "unknown-then-known"
}
],
"class": "L3"
}