@fuaran-ui/conformance 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/corpus/lenient/lenient-daterange-bare-array.expected.json +1 -0
  2. package/corpus/lenient/lenient-daterange-bare-array.json +1 -0
  3. package/corpus/lenient/lenient-daterange-static-envelope.expected.json +1 -0
  4. package/corpus/lenient/lenient-daterange-static-envelope.json +1 -0
  5. package/corpus/lenient/lenient-filterable-static-dashboard-compact.expected.json +1 -0
  6. package/corpus/lenient/lenient-filterable-static-dashboard-compact.json +1 -0
  7. package/corpus/lenient/lenient-grid-field-named-compact.expected.json +1 -0
  8. package/corpus/lenient/lenient-grid-field-named-compact.json +1 -0
  9. package/corpus/lenient/lenient-grid-transform-param-compact.expected.json +1 -0
  10. package/corpus/lenient/lenient-grid-transform-param-compact.json +1 -0
  11. package/corpus/lenient/lenient-master-detail-preselected-compact.expected.json +1 -0
  12. package/corpus/lenient/lenient-master-detail-preselected-compact.json +1 -0
  13. package/corpus/lenient/lenient-scalar-transform-composition-compact.expected.json +1 -0
  14. package/corpus/lenient/lenient-scalar-transform-composition-compact.json +1 -0
  15. package/corpus/manifest.json +102 -1
  16. package/corpus/nodes/filters-date-range.json +1 -0
  17. package/corpus/nodes/form-date-range.json +1 -0
  18. package/corpus/nodes/master-detail-preselected-second-row.json +1 -0
  19. package/corpus/reject/reject-daterange-unordered.json +1 -0
  20. package/corpus/schema.json +28 -0
  21. package/dist/cli.js.map +1 -1
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.js.map +1 -1
  24. package/package.json +5 -4
@@ -0,0 +1 @@
1
+ {"id":"len-dr-arr","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"from":"2026-03-01","to":"2026-03-08"},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"len-dr-arr","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":["2026-03-01","2026-03-08"],"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"len-dr-env","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"from":"2026-03-01","to":"2026-03-08"},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"len-dr-env","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"$type":"Static","value":{"from":"2026-03-01","to":"2026-03-08"}},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"filterable-static-dashboard","kind":{"$type":"Box","children":[{"id":"content-filters","kind":{"$type":"Filters","items":[{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"EMEA","value":"emea"},{"label":"Americas","value":"amer"}]}},"label":"Region","name":"region"},{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Drama","value":"drama"},{"label":"Documentary","value":"docs"}]}},"label":"Genre","name":"genre"}]}},{"id":"retention-chart","kind":{"$type":"Chart","kind":"Line","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":{"validity":[true,true],"values":["drama","docs"]},"month":{"validity":[true,true],"values":["jan","jan"]},"region":{"validity":[true,true],"values":["emea","amer"]},"retention":{"validity":[true,true],"values":[0.62,0.55]}},"schema":[{"name":"genre","type":"string"},{"name":"month","type":"string"},{"name":"region","type":"string"},{"name":"retention","type":"float"}]}},"stacked":false,"title":"Retention","xField":"month","yFields":["retention"]}},{"id":"episode-grid","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"retention","kind":{"$type":"Text"},"label":"Retention"}],"rowKeyField":"month","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":{"validity":[true,true],"values":["drama","docs"]},"month":{"validity":[true,true],"values":["jan","jan"]},"region":{"validity":[true,true],"values":["emea","amer"]},"retention":{"validity":[true,true],"values":[0.62,0.55]}},"schema":[{"name":"genre","type":"string"},{"name":"month","type":"string"},{"name":"region","type":"string"},{"name":"retention","type":"float"}]}}}}],"heading":"Content performance","layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"filterable-static-dashboard","kind":{"$type":"Box","children":[{"id":"content-filters","kind":{"$type":"Filters","items":[{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"EMEA","value":"emea"},{"label":"Americas","value":"amer"}]}},"label":"Region","name":"region"},{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Drama","value":"drama"},{"label":"Documentary","value":"docs"}]}},"label":"Genre","name":"genre"}]}},{"id":"retention-chart","kind":{"$type":"Chart","kind":"Line","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":["drama","docs"],"month":["jan","jan"],"region":["emea","amer"],"retention":[0.62,0.55]}}},"stacked":false,"title":"Retention","xField":"month","yFields":["retention"]}},{"id":"episode-grid","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"retention","kind":{"$type":"Text"},"label":"Retention"}],"rowKeyField":"month","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":["drama","docs"],"month":["jan","jan"],"region":["emea","amer"],"retention":[0.62,0.55]}}}}}],"heading":"Content performance","layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"grid-field-named","kind":{"$type":"DataGrid","columns":[{"field":"dept","kind":{"$type":"Text"},"label":"Dept"},{"field":"amount","kind":{"$type":"Text"},"label":"Amount"}],"rowKeyField":"dept","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"amount":{"validity":[true],"values":[100]},"dept":{"validity":[true],"values":["eng"]}},"schema":[{"name":"amount","type":"int"},{"name":"dept","type":"string"}]}}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-field-named","kind":{"$type":"DataGrid","columns":[{"field":"dept","kind":{"$type":"Text"},"label":"Dept"},{"field":"amount","kind":{"$type":"Text"},"label":"Amount"}],"rowKeyField":"dept","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"amount":[100],"dept":["eng"]}}}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-transform-param","kind":{"$type":"DataGrid","columns":[],"rowKey":"<closure>","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"dept"},"name":"dept"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"dept"},"op":"eq","right":{"$type":"param","name":"dept"}}}],"source":{"columns":{"amount":{"validity":[true,true],"values":[100,90]},"dept":{"validity":[true,true],"values":["eng","sales"]}},"schema":[{"name":"amount","type":"int"},{"name":"dept","type":"string"}]}}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-transform-param","kind":{"$type":"DataGrid","columns":[],"rowKey":"<closure>","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"dept"},"name":"dept"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"dept"},"op":"eq","right":{"$type":"param","name":"dept"}}}],"source":{"columns":{"amount":[100,90],"dept":["eng","sales"]}}}}}
@@ -0,0 +1 @@
1
+ {"id":"master-detail-preselected","kind":{"$type":"Box","children":[{"id":"ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"id":{"validity":[true,true],"values":["TCK-2041","TCK-2042"]},"priority":{"validity":[true,true],"values":["high","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"}]}}}},{"id":"ticket-detail","kind":{"$type":"Box","children":[{"id":"detail-ticket","kind":{"$type":"Fact","emphasis":true,"label":"Selected ticket","value":{"$type":"Bound","binding":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"}}}}],"heading":"Ticket detail","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"related-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}}],"source":{"columns":{"id":{"validity":[true,true],"values":["TCK-2041","TCK-2042"]},"priority":{"validity":[true,true],"values":["high","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"}]}}}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"master-detail-preselected","kind":{"$type":"Box","children":[{"id":"ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"id":["TCK-2041","TCK-2042"],"priority":["high","low"]}}}}},{"id":"ticket-detail","kind":{"$type":"Box","children":[{"id":"detail-ticket","kind":{"$type":"Fact","emphasis":true,"label":"Selected ticket","value":{"$type":"Bound","binding":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"}}}}],"heading":"Ticket detail","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"related-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}}],"source":{"columns":{"id":["TCK-2041","TCK-2042"],"priority":["high","low"]}}}}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"scalar-transform-composition","kind":{"$type":"Box","children":[{"id":"scalar-ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"severity","kind":{"$type":"Text"},"label":"Severity"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"alert":{"validity":[true,true,true],"values":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"]},"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"severity":{"validity":[true,true,true],"values":["critical","high","critical"]}},"schema":[{"name":"alert","type":"string"},{"name":"id","type":"string"},{"name":"severity","type":"string"}]}}}},{"id":"critical-count-badge","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"severity"},"op":"eq","right":{"$type":"lit","cell":{"$type":"Str","value":"critical"}}}},{"$type":"groupBy","aggs":[{"fn":"count","name":"n","of":"id"}],"keys":[]}],"source":{"columns":{"alert":{"validity":[true,true,true],"values":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"]},"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"severity":{"validity":[true,true,true],"values":["critical","high","critical"]}},"schema":[{"name":"alert","type":"string"},{"name":"id","type":"string"},{"name":"severity","type":"string"}]}}},"variant":"Critical"}},{"id":"sla-warning","kind":{"$type":"Callout","body":{"$type":"Bound","binding":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"scalar-ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}},{"$type":"project","cols":[{"a":"alert","b":"alert"}]},{"$type":"limit","n":1,"offset":0}],"source":{"columns":{"alert":{"validity":[true,true,true],"values":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"]},"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"severity":{"validity":[true,true,true],"values":["critical","high","critical"]}},"schema":[{"name":"alert","type":"string"},{"name":"id","type":"string"},{"name":"severity","type":"string"}]}}},"heading":"SLA breach imminent","tone":"Warning"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"scalar-transform-composition","kind":{"$type":"Box","children":[{"id":"scalar-ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"severity","kind":{"$type":"Text"},"label":"Severity"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"alert":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"],"id":["TCK-2041","TCK-2042","TCK-2043"],"severity":["critical","high","critical"]}}}}},{"id":"critical-count-badge","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"severity"},"op":"eq","right":{"$type":"lit","cell":{"$type":"Str","value":"critical"}}}},{"$type":"groupBy","aggs":[{"fn":"count","name":"n","of":"id"}],"keys":[]}],"source":{"columns":{"alert":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"],"id":["TCK-2041","TCK-2042","TCK-2043"],"severity":["critical","high","critical"]}}}},"variant":"Critical"}},{"id":"sla-warning","kind":{"$type":"Callout","body":{"$type":"Bound","binding":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"scalar-ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}},{"$type":"project","cols":[{"a":"alert","b":"alert"}]},{"$type":"limit","n":1,"offset":0}],"source":{"columns":{"alert":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"],"id":["TCK-2041","TCK-2042","TCK-2043"],"severity":["critical","high","critical"]}}}},"heading":"SLA breach imminent","tone":"Warning"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -43,6 +43,18 @@
43
43
  "Tabs",
44
44
  "Toast"
45
45
  ],
46
+ "formFieldKinds": [
47
+ "Checkbox",
48
+ "Choice",
49
+ "Date",
50
+ "DateRange",
51
+ "Number",
52
+ "Range",
53
+ "RangedNumber",
54
+ "SegmentedChoice",
55
+ "Text",
56
+ "TextArea"
57
+ ],
46
58
  "fixtures": [
47
59
  {
48
60
  "id": "elc-ans-accept-full",
@@ -548,6 +560,22 @@
548
560
  "expectedFile": "lenient/lenient-binding-bound-wrapper.expected.json",
549
561
  "description": "pilot-5 n=3 gate — the Bound wrapper unwraps in bare-Binding slots (the TextSource.Bound convention transferred; one payload field, one-to-one); canonical stays the bare binding"
550
562
  },
563
+ {
564
+ "id": "lenient-daterange-bare-array",
565
+ "kind": "lenient-accept",
566
+ "decoder": "node",
567
+ "inputFile": "lenient/lenient-daterange-bare-array.json",
568
+ "expectedFile": "lenient/lenient-daterange-bare-array.expected.json",
569
+ "description": "Phase 725 — a DateRange Static pair may ride the [from, to] two-element array (the §3.6 bare-array coercion, mirroring `Range`); it normalises to the canonical bare {from, to} object"
570
+ },
571
+ {
572
+ "id": "lenient-daterange-static-envelope",
573
+ "kind": "lenient-accept",
574
+ "decoder": "node",
575
+ "inputFile": "lenient/lenient-daterange-static-envelope.json",
576
+ "expectedFile": "lenient/lenient-daterange-static-envelope.expected.json",
577
+ "description": "Phase 725 — a DateRange Static pair wrapped in the explicit {\"$type\":\"Static\"} envelope stays decode-accepted (the `Range` read-compat posture); the bare {from, to} object is the canonical output"
578
+ },
551
579
  {
552
580
  "id": "lenient-emphasis-cross-vocab",
553
581
  "kind": "lenient-accept",
@@ -564,6 +592,38 @@
564
592
  "expectedFile": "lenient/lenient-fact-explicit-defaults.expected.json",
565
593
  "description": "Fact (the new labeled text-fact kind) — explicit-default `tone`/`emphasis` decode and canonicalise away (omitted-when-default on both boundaries from day one), and the bare-string TextSource shorthand applies to `label`/`value`. The canonical minimal Fact is exactly the two-field form models want to write."
566
594
  },
595
+ {
596
+ "id": "lenient-filterable-static-dashboard-compact",
597
+ "kind": "lenient-accept",
598
+ "decoder": "node",
599
+ "inputFile": "lenient/lenient-filterable-static-dashboard-compact.json",
600
+ "expectedFile": "lenient/lenient-filterable-static-dashboard-compact.expected.json",
601
+ "description": "Phase 719 — the compact authoring twin of `filterable-static-dashboard`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
602
+ },
603
+ {
604
+ "id": "lenient-grid-field-named-compact",
605
+ "kind": "lenient-accept",
606
+ "decoder": "node",
607
+ "inputFile": "lenient/lenient-grid-field-named-compact.json",
608
+ "expectedFile": "lenient/lenient-grid-field-named-compact.expected.json",
609
+ "description": "Phase 719 — the compact authoring twin of `grid-field-named`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
610
+ },
611
+ {
612
+ "id": "lenient-grid-transform-param-compact",
613
+ "kind": "lenient-accept",
614
+ "decoder": "node",
615
+ "inputFile": "lenient/lenient-grid-transform-param-compact.json",
616
+ "expectedFile": "lenient/lenient-grid-transform-param-compact.expected.json",
617
+ "description": "Phase 719 — the compact authoring twin of `grid-transform-param`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
618
+ },
619
+ {
620
+ "id": "lenient-master-detail-preselected-compact",
621
+ "kind": "lenient-accept",
622
+ "decoder": "node",
623
+ "inputFile": "lenient/lenient-master-detail-preselected-compact.json",
624
+ "expectedFile": "lenient/lenient-master-detail-preselected-compact.expected.json",
625
+ "description": "Phase 719 — the compact authoring twin of `master-detail-preselected`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
626
+ },
567
627
  {
568
628
  "id": "lenient-null-static-options",
569
629
  "kind": "lenient-accept",
@@ -604,6 +664,14 @@
604
664
  "expectedFile": "lenient/lenient-opaque-static-values.expected.json",
605
665
  "description": "Pre-429 opaque multi-select values decode to the tagged placeholder list and re-encode typed"
606
666
  },
667
+ {
668
+ "id": "lenient-scalar-transform-composition-compact",
669
+ "kind": "lenient-accept",
670
+ "decoder": "node",
671
+ "inputFile": "lenient/lenient-scalar-transform-composition-compact.json",
672
+ "expectedFile": "lenient/lenient-scalar-transform-composition-compact.expected.json",
673
+ "description": "Phase 719 — the compact authoring twin of `scalar-transform-composition`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
674
+ },
607
675
  {
608
676
  "id": "lenient-shape-binding-scalar-fraction",
609
677
  "kind": "lenient-accept",
@@ -948,6 +1016,14 @@
948
1016
  "expectedFile": "nodes/filters-1.json",
949
1017
  "description": "Input/Filters (text + choice)"
950
1018
  },
1019
+ {
1020
+ "id": "filters-date-range",
1021
+ "kind": "node-round-trip",
1022
+ "decoder": "node",
1023
+ "inputFile": "nodes/filters-date-range.json",
1024
+ "expectedFile": "nodes/filters-date-range.json",
1025
+ "description": "Input/Filters (Phase 725 — DateRange chip: one filter param carries the pair, value auto-bound)"
1026
+ },
951
1027
  {
952
1028
  "id": "filters-declarative",
953
1029
  "kind": "node-round-trip",
@@ -980,6 +1056,14 @@
980
1056
  "expectedFile": "nodes/form-date.json",
981
1057
  "description": "Input/Form (Date — date/time/datetime variants + bounds)"
982
1058
  },
1059
+ {
1060
+ "id": "form-date-range",
1061
+ "kind": "node-round-trip",
1062
+ "decoder": "node",
1063
+ "inputFile": "nodes/form-date-range.json",
1064
+ "expectedFile": "nodes/form-date-range.json",
1065
+ "description": "Input/Form (Phase 725 — DateRange: single-control date range, bare {from,to} pair + bounds)"
1066
+ },
983
1067
  {
984
1068
  "id": "form-declarative",
985
1069
  "kind": "node-round-trip",
@@ -1196,6 +1280,14 @@
1196
1280
  "expectedFile": "nodes/master-detail-preselected.json",
1197
1281
  "description": "Layout/Box (master-detail — grid + detail card State-bound with a pre-selected defaultValue)"
1198
1282
  },
1283
+ {
1284
+ "id": "master-detail-preselected-second-row",
1285
+ "kind": "node-round-trip",
1286
+ "decoder": "node",
1287
+ "inputFile": "nodes/master-detail-preselected-second-row.json",
1288
+ "expectedFile": "nodes/master-detail-preselected-second-row.json",
1289
+ "description": "Layout/Box (master-detail — Selection defaultValue naming a NON-FIRST row: prune-vs-seed is observable)"
1290
+ },
1199
1291
  {
1200
1292
  "id": "math-1",
1201
1293
  "kind": "node-round-trip",
@@ -1394,7 +1486,7 @@
1394
1486
  "decoder": "node",
1395
1487
  "inputFile": "nodes/table-1.json",
1396
1488
  "expectedFile": "nodes/table-1.json",
1397
- "description": "Visualisation/Table"
1489
+ "description": "Visualisation/Grid (static-table mode — staticRows; absorbed the retired Table kind)"
1398
1490
  },
1399
1491
  {
1400
1492
  "id": "tabs-1",
@@ -1604,6 +1696,15 @@
1604
1696
  "expectedFile": "ops/op-updatestyle (phase 147 role=eyebrow + voice=structural).json",
1605
1697
  "description": "UpdateStyle (Phase 147 Role=Eyebrow + Voice=Structural)"
1606
1698
  },
1699
+ {
1700
+ "id": "reject-daterange-unordered",
1701
+ "kind": "reject",
1702
+ "decoder": "node",
1703
+ "inputFile": "reject/reject-daterange-unordered.json",
1704
+ "expectedErrorCode": "WRONG_TYPE",
1705
+ "expectedPath": "$.kind.fields[0].kind.value",
1706
+ "description": "DateRange literal pair with start after end — the ordered-pair rule (Phase 725)"
1707
+ },
1607
1708
  {
1608
1709
  "id": "reject-emptynodeid",
1609
1710
  "kind": "reject",
@@ -0,0 +1 @@
1
+ {"id":"filters-date-range","kind":{"$type":"Filters","items":[{"kind":{"$type":"DateRange","variant":"Date"},"label":"Stay","name":"stay"}]}}
@@ -0,0 +1 @@
1
+ {"id":"form-date-range","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","max":"2026-12-31","min":"2026-01-01","onChange":"<closure>","value":{"from":"2026-03-01","to":"2026-03-08"},"variant":"Date"},"label":"Stay","required":true},{"id":"shift","kind":{"$type":"DateRange","step":900,"value":{"$type":"State","defaultValue":{"from":"08:00","to":"17:00"},"key":"shift"},"variant":"Time"},"label":"Shift","required":false},{"id":"window","kind":{"$type":"DateRange","onChange":"<closure>","value":{"from":"2026-03-01T09:00","to":"2026-03-01T17:00"},"variant":"DateTime"},"label":"Window","required":false}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"master-detail-preselected-second-row","kind":{"$type":"Box","children":[{"id":"ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"},{"field":"note","kind":{"$type":"Text"},"label":"Note"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"note":{"validity":[true,true,true],"values":["Payment gateway timeout","Search index stale","Avatar upload fails"]},"priority":{"validity":[true,true,true],"values":["high","medium","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"},{"name":"note","type":"string"}]}}}},{"id":"ticket-detail","kind":{"$type":"Box","children":[{"id":"detail-ticket","kind":{"$type":"Fact","emphasis":true,"label":"Selected ticket","value":{"$type":"Bound","binding":{"$type":"Selection","defaultValue":"TCK-2042","field":"id","nodeId":"ticket-grid"}}}}],"heading":"Ticket detail","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"related-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"},{"field":"note","kind":{"$type":"Text"},"label":"Note"}],"rowKeyField":"id","source":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2042","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}}],"source":{"columns":{"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"note":{"validity":[true,true,true],"values":["Payment gateway timeout","Search index stale","Avatar upload fails"]},"priority":{"validity":[true,true,true],"values":["high","medium","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"},{"name":"note","type":"string"}]}}}},{"id":"detail-note","kind":{"$type":"Callout","body":{"$type":"Bound","binding":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2042","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}},{"$type":"project","cols":[{"a":"note","b":"note"}]},{"$type":"limit","n":1,"offset":0}],"source":{"columns":{"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"note":{"validity":[true,true,true],"values":["Payment gateway timeout","Search index stale","Avatar upload fails"]},"priority":{"validity":[true,true,true],"values":["high","medium","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"},{"name":"note","type":"string"}]}}},"heading":"Ticket note","tone":"Info"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"f1","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"from":"2026-03-08","to":"2026-03-01"},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -1309,6 +1309,34 @@
1309
1309
  "$type",
1310
1310
  "variant"
1311
1311
  ]
1312
+ },
1313
+ {
1314
+ "type": "object",
1315
+ "properties": {
1316
+ "$type": {
1317
+ "const": "DateRange"
1318
+ },
1319
+ "onChange": {
1320
+ "const": "<closure>"
1321
+ },
1322
+ "value": true,
1323
+ "variant": {
1324
+ "$ref": "#/$defs/DateVariant"
1325
+ },
1326
+ "min": {
1327
+ "type": "string"
1328
+ },
1329
+ "max": {
1330
+ "type": "string"
1331
+ },
1332
+ "step": {
1333
+ "type": "number"
1334
+ }
1335
+ },
1336
+ "required": [
1337
+ "$type",
1338
+ "variant"
1339
+ ]
1312
1340
  }
1313
1341
  ]
1314
1342
  },