@wyndlass/app-sdk 0.0.0 → 1.1.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 (75) hide show
  1. package/README.md +212 -1
  2. package/cli/app-package.mjs +111 -0
  3. package/cli/commands.mjs +133 -0
  4. package/cli/main.mjs +73 -0
  5. package/cli/package.mjs +119 -0
  6. package/cli/preview.mjs +142 -0
  7. package/cli/zip.mjs +63 -0
  8. package/dist/contract/app-contract.d.ts +221 -0
  9. package/dist/contract/app-contract.js +6 -0
  10. package/dist/contract/app-definition.d.ts +155 -0
  11. package/dist/contract/app-definition.js +3 -0
  12. package/dist/contract/data-answer.d.ts +40 -0
  13. package/dist/contract/data-answer.js +3 -0
  14. package/dist/contract/data-calendar.d.ts +57 -0
  15. package/dist/contract/data-calendar.js +3 -0
  16. package/dist/contract/data-news.d.ts +29 -0
  17. package/dist/contract/data-news.js +3 -0
  18. package/dist/contract/data-quotes.d.ts +75 -0
  19. package/dist/contract/data-quotes.js +3 -0
  20. package/dist/contract/data-series.d.ts +51 -0
  21. package/dist/contract/data-series.js +3 -0
  22. package/dist/contract/data-snapshot.d.ts +30 -0
  23. package/dist/contract/data-snapshot.js +3 -0
  24. package/dist/contract/data-weather.d.ts +421 -0
  25. package/dist/contract/data-weather.js +3 -0
  26. package/dist/contract/player-api-event.d.ts +253 -0
  27. package/dist/contract/player-api-event.js +3 -0
  28. package/dist/contract/player-api-status.d.ts +178 -0
  29. package/dist/contract/player-api-status.js +3 -0
  30. package/dist/easing.d.ts +16 -0
  31. package/dist/easing.js +71 -0
  32. package/dist/index.d.ts +94 -0
  33. package/dist/index.js +218 -0
  34. package/dist/preview/frame/frame.js +2 -0
  35. package/dist/preview/frame/index.html +12 -0
  36. package/dist/preview/index.html +40 -0
  37. package/dist/preview/page.js +7 -0
  38. package/dist/qr.d.ts +5 -0
  39. package/dist/qr.js +14 -0
  40. package/dist/react.d.ts +52 -0
  41. package/dist/react.js +149 -0
  42. package/package.json +83 -4
  43. package/protocol/app-definition.schema.json +435 -0
  44. package/protocol/app-packages.json +172 -0
  45. package/protocol/common.schema.json +197 -0
  46. package/protocol/samples/calendar.json +63 -0
  47. package/protocol/samples/events/app.command.json +14 -0
  48. package/protocol/samples/events/item.end.json +13 -0
  49. package/protocol/samples/events/item.start.json +18 -0
  50. package/protocol/samples/events/state.changed.json +11 -0
  51. package/protocol/samples/news.json +37 -0
  52. package/protocol/samples/player-status.json +58 -0
  53. package/protocol/samples/weather.json +59 -0
  54. package/skill/wyndlass-app/SKILL.md +90 -0
  55. package/skill/wyndlass-app/references/contract.md +91 -0
  56. package/skill/wyndlass-app/references/mcp.md +79 -0
  57. package/skill/wyndlass-app/references/templates.md +38 -0
  58. package/templates/react/AGENTS.md +17 -0
  59. package/templates/react/README.md +23 -0
  60. package/templates/react/app.json +14 -0
  61. package/templates/react/gitignore +2 -0
  62. package/templates/react/package.json +22 -0
  63. package/templates/react/src/app.css +7 -0
  64. package/templates/react/src/app.tsx +39 -0
  65. package/templates/react/src/env.d.ts +13 -0
  66. package/templates/react/tsconfig.json +13 -0
  67. package/templates/vanilla/AGENTS.md +17 -0
  68. package/templates/vanilla/README.md +23 -0
  69. package/templates/vanilla/app.json +14 -0
  70. package/templates/vanilla/gitignore +2 -0
  71. package/templates/vanilla/package.json +18 -0
  72. package/templates/vanilla/src/app.css +7 -0
  73. package/templates/vanilla/src/app.ts +59 -0
  74. package/templates/vanilla/src/env.d.ts +13 -0
  75. package/templates/vanilla/tsconfig.json +12 -0
@@ -0,0 +1,172 @@
1
+ {
2
+ "v": 0,
3
+ "note": "Customers' app packages (WP-0100 decisions 2 and 5): one zip of exactly app.json and app.js. A reader answers valid, or the code of the first check that fails, in order. The zip: over limits.zip bytes (too-large); its end of central directory, entries and local headers (not-a-zip); an encrypted entry (encrypted), a folder (folder), a name with a / or \\ (path); not exactly app.json and app.js (entries); a declared size over its limit, app.json limits.definition and app.js limits.module (too-large); unpacked, other than it declares (size-mismatch). The definition: UTF-8 JSON, an object (definition-json); app-definition.schema.json (definition-schema); an id under com.wyndlass. (definition-id); each when names another param (definition-when); a url param's values and default are https addresses (definition-url); capabilities.peers true (definition-peers); data only dataSources (definition-data). The module: UTF-8, an ES2020 module (module-syntax); no import declaration, export … from or import() (module-import); a default export, export default or export { x as default } (module-default). zip is base64. Generated by protocol/scripts/make-app-package-vectors.mjs.",
4
+ "limits": {
5
+ "zip": 6291456,
6
+ "definition": 262144,
7
+ "module": 5242880
8
+ },
9
+ "dataSources": [
10
+ "weather",
11
+ "news",
12
+ "image",
13
+ "calendar"
14
+ ],
15
+ "cases": [
16
+ {
17
+ "name": "a definition and a module",
18
+ "expect": "valid",
19
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAD/AAAAAAA="
20
+ },
21
+ {
22
+ "name": "every capability it may ask for, params with conditions and https suggestions, and a bundler's ES2020 module",
23
+ "expect": "valid",
24
+ "zip": "UEsDBBQAAAgIAAAAIVv0IhEMGwEAAPIBAAAIAAAAYXBwLmpzb25lkctqw0AMRX/FaD110q1/ohS6K1konut6yLw6mqlrgv+9yOmD0J1AukcH6UrO0kBjCj0+OWSP/r2h4eGcuFgy9IEiLkUa6LE/9kcyFDmABnrWse5nDB4BsdJA93ELGYvL9YZ4ceMFVbqRvYc13VRS6OqMbg91skpF6MlQ5sJBaLiSpFZGaFXXrHsRW1Av9g1CwytdXJILGZoASyddOXHzqnLrbN+tP0Qr/o4w15plOBx2i987jCkcYloUucyI9zIc16dJs7et27ZthkbOfHbeVYfdPaIuqVx07B9asYIoqewKLuQC0UuLdrhZl2iopcFQ9ryi7F+KtSR1z4DmJvaCzZDlykpZwHVG0SdhETLkAr+B1MwjWi502r4AUEsDBBQAAAgIAAAAIVtXyUVFhwAAAJgAAAAGAAAAYXBwLmpzFcyxCsIwEIDh3acInRqEoHMJGURwqJN9gWty1uL1KrmLVErfXbr+fPxfyAZ8JBAxuChyEnPr7u2VcELWNc7MGBXTBYh6iO/a7k3UFD9Onzmrm1DBlUwhVFWjr1FcAgVBdewfmkce6vOJ7bEeaO6Bul0swf1CKHbbGlz2ywoGxCR8QiHdmsMfUEsBAhQAFAAACAgAAAAhW/QiEQwbAQAA8gEAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW1fJRUWHAAAAmAAAAAYAAAAAAAAAAAAAAAAAQQEAAGFwcC5qc1BLBQYAAAAAAgACAGoAAADsAQAAAAA="
25
+ },
26
+ {
27
+ "name": "not a zip",
28
+ "expect": "not-a-zip",
29
+ "zip": "YXBwLmpzb24gYW5kIGFwcC5qcywgYnV0IG5vdCB6aXBwZWQ="
30
+ },
31
+ {
32
+ "name": "no module",
33
+ "expect": "entries",
34
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLBQYAAAAAAQABADYAAABzAAAAAAA="
35
+ },
36
+ {
37
+ "name": "an entry more",
38
+ "expect": "entries",
39
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsDBBQAAAgIAAAAIVsmfNJKEAAAAA4AAAAJAAAAUkVBRE1FLm1kU1YILE0tTVVIyk8sSuECAFBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwECFAAUAAAICAAAACFbJnzSShAAAAAOAAAACQAAAAAAAAAAAAAAAAD/AAAAUkVBRE1FLm1kUEsFBgAAAAADAAMAoQAAADYBAAAAAA=="
40
+ },
41
+ {
42
+ "name": "the module twice",
43
+ "expect": "entries",
44
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsDBBQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAA/wAAAGFwcC5qc1BLBQYAAAAAAwADAJ4AAACLAQAAAAA="
45
+ },
46
+ {
47
+ "name": "a folder",
48
+ "expect": "folder",
49
+ "zip": "UEsDBBQAAAgIAAAAIVsAAAAAAgAAAAAAAAAHAAAAYXNzZXRzLwMAUEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWwAAAAACAAAAAAAAAAcAAAAAAAAAAAAQAAAAAAAAAGFzc2V0cy9QSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAnAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAACaAAAAYXBwLmpzUEsFBgAAAAADAAMAnwAAACYBAAAAAA=="
50
+ },
51
+ {
52
+ "name": "the module in a folder",
53
+ "expect": "path",
54
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAACwAAAGRpc3QvYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAACwAAAAAAAAAAAAAAAABzAAAAZGlzdC9hcHAuanNQSwUGAAAAAAIAAgBvAAAABAEAAAAA"
55
+ },
56
+ {
57
+ "name": "a name that leaves the package",
58
+ "expect": "path",
59
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAACQAAAC4uL2FwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAkAAAAAAAAAAAAAAAAAcwAAAC4uL2FwcC5qc1BLBQYAAAAAAgACAG0AAAACAQAAAAA="
60
+ },
61
+ {
62
+ "name": "an encrypted entry",
63
+ "expect": "encrypted",
64
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAEICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAABCAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAD/AAAAAAA="
65
+ },
66
+ {
67
+ "name": "a module over 5 MiB",
68
+ "expect": "too-large",
69
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbiHhu82QUAAB5AFAABgAAAGFwcC5qc+zNMUrEUBRA0T6reKU2zgIGG0Ww0ELGDQTz1IH4MyQvGBhm76KVizinvnDfxn5Z4mXNNe+mfh4it8o2LPH4+vz0MOZXtopzF7Gehr7yqk3f13GO+jwuN5Vb3U+tfpPbONR8bB9/wT4u3aXL7TTNFUO+9+tY/x77brcLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCnPTgkAAAAYBjk3z/wQtwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwWVBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVuIeG7zZBQAAHkAUAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA+xQAAAAA"
70
+ },
71
+ {
72
+ "name": "a definition over 256 KiB",
73
+ "expect": "too-large",
74
+ "zip": "UEsDBBQAAAgIAAAAIVs+8zJVZAEAAHAABAAIAAAAYXBwLmpzb27tzE0KggAUhdGtxBuX2NRdtATLNxD8Sy2EaO8R0aDWcM74u/cRbRNVXMa+yK3upy6L6y1veTiP9dzEPu45L+04RBXHoizK2MdQ9xlVnN7Z7ptll30Oa1TxO29yuczttH4uNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAP/F8AVBLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWz7zMlVkAQAAcAAEAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAigEAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAWAgAAAAA="
75
+ },
76
+ {
77
+ "name": "a module that unpacks to 6 MiB but says 1 KiB (a zip bomb)",
78
+ "expect": "size-mismatch",
79
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbrc0K1V0YAAAABAAABgAAAGFwcC5qc+zNMUrEUBRA0T6reKU2zgIGG0Ww0ELGDQTz1IH4MyQvGBhm76KVizinvnDfxn5Z4mXNNe+mfh4it8o2LPH4+vz0MOZXtopzF7Gehr7yqk3f13GO+jwuN5Vb3U+tfpPbONR8bB9/wT4u3aXL7TTNFUO+9+tY/x77brcLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCnPTgkAAAAYBjk3z/wYtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHC1AFBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVutzQrVXRgAAAAEAAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA9BgAAAAA"
80
+ },
81
+ {
82
+ "name": "a module that unpacks to less than it says",
83
+ "expect": "size-mismatch",
84
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbFoKRRWgAAACAAAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAgAAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAD/AAAAAAA="
85
+ },
86
+ {
87
+ "name": "a definition that is not JSON",
88
+ "expect": "definition-json",
89
+ "zip": "UEsDBBQAAAgIAAAAIVuHv9AdHgAAABwAAAAIAAAAYXBwLmpzb27LTLFSSM7P1UutSMwtyEnVKyxNLU3VTcpPLErhAgBQSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVuHv9AdHgAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAEQAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA0AAAAAAA"
90
+ },
91
+ {
92
+ "name": "a definition without an element",
93
+ "expect": "definition-schema",
94
+ "zip": "UEsDBBQAAAgIAAAAIVv0EkmaQwAAAEcAAAAIAAAAYXBwLmpzb26rVspMUbJSSs7P1UutSMwtyEnVKyxNLU3VTcpPLEpR0lEqSy0qzszPU7JSMtQz0DNQ0lHKS8xNVbJSCgQpU4AoqwUAUEsDBBQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFb9BJJmkMAAABHAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAABpAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAAPUAAAAAAA=="
95
+ },
96
+ {
97
+ "name": "a definition with a field it does not know",
98
+ "expect": "definition-schema",
99
+ "zip": "UEsDBBQAAAgIAAAAIVu5c/CtVwAAAG8AAAAIAAAAYXBwLmpzb25Vy70OQDAYBdBXkTvTsH6vYPII1d6hSX9okYp4dzEY7OdccBYCk4Ji1WHxVOvOnd2cdLZocTAXlyIEg+pVjxZRB0Iwvaz5GD0D4wbBvxeazG3kCUHF/QBQSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVu5c/CtVwAAAG8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAH0AAABhcHAuanNQSwUGAAAAAAIAAgBqAAAACQEAAAAA"
100
+ },
101
+ {
102
+ "name": "Wyndlass's own id",
103
+ "expect": "definition-id",
104
+ "zip": "UEsDBBQAAAgIAAAAIVvSVPQ7UAAAAFoAAAAIAAAAYXBwLmpzb24lyEEKgCAQBdCrxF+b2HZu0RFMZyHpDGkWEd09ord8N1IEIWix5yUx+9ZsyBpWGBxcW1IBYbLOOhiILwzC3LnzsKivEQacubDsIGzfj/8/L1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW9JU9DtQAAAAWgAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAdgAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAACAQAAAAA="
105
+ },
106
+ {
107
+ "name": "a condition on a param that is not there",
108
+ "expect": "definition-when",
109
+ "zip": "UEsDBBQAAAgIAAAAIVv8oJSFdgAAAKUAAAAIAAAAYXBwLmpzb25Vi8sKwjAURH9FZh1D3eYnxLW4uDZTLORl0qil+O9yERfOZobhnA2zh8OYo+VLYgm0987O/TVL9TB4sLY5Jzgc7GAHGCSJhMNJsd0PY2BkWuDwrxepEhvchon02staVO81wOB5Y9Kz5V5H6pK0Hie485e/vDUfUEsDBBQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAYXBwLmpzTc0xCsIwGAXgPad4o128QHGxCA46iL1AME8txD8lecFA6d1FJ/cPvlv0peBSWblPPgewiRYKjuP5dIh80YTFAXUOXtxYendYoOdUtmLTkExfssNVebLHD/RY3erY5pSFwLuvUX9H7z5QSwECFAAUAAAICAAAACFb/KCUhXYAAAClAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAAAAAAAAAAAAAACcAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAACgBAAAAAA=="
110
+ },
111
+ {
112
+ "name": "a condition on itself",
113
+ "expect": "definition-when",
114
+ "zip": "UEsDBBQAAAgIAAAAIVuT10PMdAAAAKMAAAAIAAAAYXBwLmpzb25VizEOwjAQBL+Ctg5WaO8TiBpRGLwBS/HZ2E5IFPF35AIJtpliZzZ4B8EtBsPFhjTSPCdO3F+jzQ4dZubio0JwML3p0UFtIASnpu2+GkcGaoXgP08221AgGwbSNdY1tbzU7PWODq8H9fe3uh4HyBkLLu+2D1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW5PXQ8x0AAAAowAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAmgAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAmAQAAAAA="
115
+ },
116
+ {
117
+ "name": "an http suggestion for a url",
118
+ "expect": "definition-url",
119
+ "zip": "UEsDBBQAAAgIAAAAIVthj3q9egAAAKoAAAAIAAAAYXBwLmpzb25VjssKwjAQRX9F7romdTt/4VpcjO2IhUwS87BKyb9LBAVXd3PO4W5YZhCmoEaerNGJuVepsr8ETjMGPCTlJXgQDmY0IwZ4VgHh2LHdFxMnKr6A8K9HTqwZtOEqMvctr9j1mlyvs6uSQSfcSolk7cf+XZmCWh9WnFtrb1BLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW2GPer16AAAAqgAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAoAAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAsAQAAAAA="
120
+ },
121
+ {
122
+ "name": "an http default for a url",
123
+ "expect": "definition-url",
124
+ "zip": "UEsDBBQAAAgIAAAAIVvs3U8ZeAAAAKkAAAAIAAAAYXBwLmpzb25VzksOAiEQhOGrmFojjNu+hUdoh544CQ3IgI9MuLvBRBNXtfm/pHasHoQ5qZUnaw5ib02aHC+Ji4fBXcq2pgjCyU52gkFkFRDOIzt8MwmiEisI/zxzYd1AOxYRP7a+8uCtBBh4WbiFwa61ZnLuo39X5qQupgd6729QSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVvs3U8ZeAAAAKkAAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAJ4AAABhcHAuanNQSwUGAAAAAAIAAgBqAAAAKgEAAAAA"
125
+ },
126
+ {
127
+ "name": "peers",
128
+ "expect": "definition-peers",
129
+ "zip": "UEsDBBQAAAgIAAAAIVtPS2M5XwAAAH0AAAAIAAAAYXBwLmpzb25VyzkKhEAQBdCryI+10bRuMUco9QcFvdnLMCDeXQwMJn/vhO0QbCk4/jRkT3d0dk5r0rJjxJelWooQLG52M0ZEDYTg87DhZfQMjA2C/75p1tW8NWOFnMhkqZBWOq/rBlBLAwQUAAAICAAAACFbFoKRRWgAAAB2AAAABgAAAGFwcC5qc03NMQrCMBgF4D2neKNdvEBxsQgOOoi9QDBPLcQ/JXnBQOndRSf3D75b9KXgUlm5Tz4HsIkWCo7j+XSIfNGExQF1Dl7cWHp3WKDnVLZi05BMX7LDVXmyxw/0WN3q2OaUhcC7r1F/R+8+UEsBAhQAFAAACAgAAAAhW09LYzlfAAAAfQAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAAAAAAAAAAAAAAAAhQAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAARAQAAAAA="
130
+ },
131
+ {
132
+ "name": "a data source customers' apps may not read",
133
+ "expect": "definition-data",
134
+ "zip": "UEsDBBQAAAgIAAAAIVsUDfkJYAAAAHsAAAAIAAAAYXBwLmpzb25Vy7EKwjAYhdFXkW9OQ13zFs7F4ddcsNAkNk1UkL67ODi4n/NmjgSuJXm9LN0X+bWra7gUqxHHQ3WbSyZw9KMfcWRLInD6ssOPaVFSbgT+e7RmhImnrN1Ucay9NG2c9w9QSwMEFAAACAgAAAAhWxaCkUVoAAAAdgAAAAYAAABhcHAuanNNzTEKwjAYBeA9p3ijXbxAcbEIDjqIvUAwTy3EPyV5wUDp3UUn9w++W/Sl4FJZuU8+B7CJFgqO4/l0iHzRhMUBdQ5e3Fh6d1ig51S2YtOQTF+yw1V5sscP9Fjd6tjmlIXAu69Rf0fvPlBLAQIUABQAAAgIAAAAIVsUDfkJYAAAAHsAAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsWgpFFaAAAAHYAAAAGAAAAAAAAAAAAAAAAAIYAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAAEgEAAAAA"
135
+ },
136
+ {
137
+ "name": "a module that is not JavaScript",
138
+ "expect": "module-syntax",
139
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbvkt36R8AAAAiAAAABgAAAGFwcC5qc7MpTi7KLCixS60oyC8qUUhJTUsszSlRMLTRh0pwAQBQSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbvkt36R8AAAAiAAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAALYAAAAAAA=="
140
+ },
141
+ {
142
+ "name": "ES2022: a class field",
143
+ "expect": "module-syntax",
144
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbTGIQAEkAAABQAAAABgAAAGFwcC5qc0vOSSwuVggsTS1NdcpPLEpRSK0oSc1LKVbwCPH1cc1JzU3NK1Go5lJQUM7LL1ewVTCw5qrlSq0oyC8qUUhJTUsszSlB0m3NBQBQSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbTGIQAEkAAABQAAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAAOAAAAAAAA=="
145
+ },
146
+ {
147
+ "name": "ES2021: logical assignment",
148
+ "expect": "module-syntax",
149
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbHyeQG0IAAABAAAAABgAAAGFwcC5qc8tJLVFIVLBVMLDmSlSoqbFVMLTmSq0oyC8qUUhJTUsszSlRSM5JLC5WSK0oSc1LKVbwCPH1cc1JzU3NK1GoruUCAFBLAQIUABQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAAAAAAAAAAAAAAAAAAABhcHAuanNvblBLAQIUABQAAAgIAAAAIVsfJ5AbQgAAAEAAAAAGAAAAAAAAAAAAAAAAAHMAAABhcHAuanNQSwUGAAAAAAIAAgBqAAAA2QAAAAAA"
150
+ },
151
+ {
152
+ "name": "an import",
153
+ "expect": "module-import",
154
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbZ+rTTX0AAACXAAAABgAAAGFwcC5qc03NvQrCMBgF0D1PcemkS32A4KIIDjqIvkAwX20kPyW5wUDpu4ud3A8cF6aUiRkjg8eCIaeArt95x/5dOq2e3pSCW5Uqh2SyhTRKtAXnx/Vy8hIkErMC6mQNZRPTZ4sZHF3pKY3HFPkje9yZXXytQGNRi5K23lYGUz3/Dq2+UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW2fq0019AAAAlwAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAAUAQAAAAA="
155
+ },
156
+ {
157
+ "name": "an export from another module",
158
+ "expect": "module-import",
159
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbi0CZLHoAAACRAAAABgAAAGFwcC5qc03NOwoCMRQF0D6ruEylFnEBwUYRLLQQ3UAwd3QknyF5wcAwexe1sT9w2MaUBSv0OQV0eh1Spn6Wzqibt6XgXFm5TTY7sAmjKzhcT8e9Z2AUTAqoo7PCRUyvJSbIYyha2GSXonzIBhfJQ7x/gcGsZsXf6tjb6uXvMOoNUEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW4tAmSx6AAAAkQAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAAARAQAAAAA="
160
+ },
161
+ {
162
+ "name": "an import()",
163
+ "expect": "module-import",
164
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbuvKmTFwAAABdAAAABgAAAGFwcC5qcxXMMQ5FQBQF0H5WcaOiYQFKkSj8zgaemSvBM37Mk0jE3sVZwOH13w9D4CSnGrxKSuBljCGhG359q9wYDbcD/B4jvTE0ojqKX/MCN+btK/KsrFSMR7mkrKjxuMe9UEsBAhQAFAAACAgAAAAhWy5ENk5NAAAAXwAAAAgAAAAAAAAAAAAAAAAAAAAAAGFwcC5qc29uUEsBAhQAFAAACAgAAAAhW7rypkxcAAAAXQAAAAYAAAAAAAAAAAAAAAAAcwAAAGFwcC5qc1BLBQYAAAAAAgACAGoAAADzAAAAAAA="
165
+ },
166
+ {
167
+ "name": "no default export",
168
+ "expect": "module-default",
169
+ "zip": "UEsDBBQAAAgIAAAAIVsuRDZOTQAAAF8AAAAIAAAAYXBwLmpzb25Ny0EKgCAQBdCrxF/bYFtv0REs/0JwtCwjiO4eLYL2712IAQ5zUeHpdUmUtbGxn4qvAQYH6xZLhsMgViwMslfCYXxZ9zEmKvMOh3+/H1BLAwQUAAAICAAAACFbkdDcdUkAAABVAAAABgAAAGFwcC5qc0utKMgvKlFIzkksLlYILE0tTXXKTyxKUUitKEnNSylW8Ajx9XHNSc1NzStRqK7lSoUqz88rLlFIhYrbKigVgnTqJoG0KllzAQBQSwECFAAUAAAICAAAACFbLkQ2Tk0AAABfAAAACAAAAAAAAAAAAAAAAAAAAAAAYXBwLmpzb25QSwECFAAUAAAICAAAACFbkdDcdUkAAABVAAAABgAAAAAAAAAAAAAAAABzAAAAYXBwLmpzUEsFBgAAAAACAAIAagAAAOAAAAAAAA=="
170
+ }
171
+ ]
172
+ }
@@ -0,0 +1,197 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.wyndlass.ai/protocol/v0/common.schema.json",
4
+ "title": "Common definitions",
5
+ "description": "Shared identifiers and value types used by every protocol message.",
6
+ "$defs": {
7
+ "tenantId": {
8
+ "type": "string",
9
+ "pattern": "^ten_[0-9a-hjkmnp-tv-z]{26}$",
10
+ "description": "Tenant id: type prefix plus a base32-encoded UUIDv7."
11
+ },
12
+ "nodeId": {
13
+ "type": "string",
14
+ "pattern": "^node_[0-9a-hjkmnp-tv-z]{26}$",
15
+ "description": "Org-tree node id."
16
+ },
17
+ "deviceId": {
18
+ "type": "string",
19
+ "pattern": "^dev_[0-9a-hjkmnp-tv-z]{26}$",
20
+ "description": "Device id."
21
+ },
22
+ "mediaId": {
23
+ "type": "string",
24
+ "pattern": "^med_[0-9a-hjkmnp-tv-z]{26}$",
25
+ "description": "Media item id (asset, app, composition, playlist or live source)."
26
+ },
27
+ "campaignId": {
28
+ "type": "string",
29
+ "pattern": "^cmp_[0-9a-hjkmnp-tv-z]{26}$",
30
+ "description": "Campaign id."
31
+ },
32
+ "adCampaignId": {
33
+ "type": "string",
34
+ "pattern": "^adc_[0-9a-hjkmnp-tv-z]{26}$",
35
+ "description": "Ad campaign id (WP-0075): a campaign sold to an advertiser."
36
+ },
37
+ "adDecisionId": {
38
+ "type": "string",
39
+ "pattern": "^add_[0-9a-hjkmnp-tv-z]{26}$",
40
+ "description": "Ad decision id (ADR 0075): the broker's answer for one ad slot."
41
+ },
42
+ "audienceId": {
43
+ "type": "string",
44
+ "pattern": "^aud_[0-9a-hjkmnp-tv-z]{26}$",
45
+ "description": "Audience id (saved targeting)."
46
+ },
47
+ "groupId": {
48
+ "type": "string",
49
+ "pattern": "^grp_[0-9a-hjkmnp-tv-z]{26}$",
50
+ "description": "Device group id."
51
+ },
52
+ "emergencyId": {
53
+ "type": "string",
54
+ "pattern": "^emg_[0-9a-hjkmnp-tv-z]{26}$",
55
+ "description": "Emergency message id."
56
+ },
57
+ "emergencySourceId": {
58
+ "type": "string",
59
+ "pattern": "^esr_[0-9a-hjkmnp-tv-z]{26}$",
60
+ "description": "Emergency source id: a CAP feed, the National Weather Service or IPAWS at a node (ADR 0127)."
61
+ },
62
+ "changeSetId": {
63
+ "type": "string",
64
+ "pattern": "^chg_[0-9a-hjkmnp-tv-z]{26}$",
65
+ "description": "Change set id."
66
+ },
67
+ "principalRef": {
68
+ "type": "string",
69
+ "pattern": "^(user|agent|device|client|system):[A-Za-z0-9_.:-]{1,128}$",
70
+ "description": "A principal, e.g. user:u_123, agent:fleet-guardian, device:dev_..."
71
+ },
72
+ "sha256": {
73
+ "type": "string",
74
+ "pattern": "^[0-9a-f]{64}$",
75
+ "description": "Lowercase hex SHA-256 digest."
76
+ },
77
+ "timestamp": {
78
+ "type": "string",
79
+ "format": "date-time",
80
+ "description": "RFC 3339 timestamp with offset."
81
+ },
82
+ "sourceKind": {
83
+ "type": "string",
84
+ "pattern": "^[a-z][a-z0-9-]{0,31}$",
85
+ "description": "A kind of sensor that measures impressions (WP-0105, ADR 0105): camera, proximity (WP-0043), and later ble, rfid, lidar and others. A pattern, not an enum, so a new kind is never a breaking change for players in the field."
86
+ },
87
+ "inputName": {
88
+ "type": "string",
89
+ "pattern": "^[a-z0-9][a-z0-9._-]{0,63}$",
90
+ "description": "A named input on a screen (WP-0043, ADR 0107), which a serial leaf's input names: a sensor map's, or one the player names itself from a sensor's family and channel, such as pickup-3, or button-2.1 for one button of several."
91
+ },
92
+ "sensorFamily": {
93
+ "enum": ["pickup", "presence", "lidar", "rfid", "button", "gesture", "motion", "light", "climate", "camera", "io"],
94
+ "description": "What a sensor on a controller's channel does (WP-0043, ADR 0107): pickup (a product lifted and put back), presence (a person's distance), lidar (people in zones), rfid (tags placed and lifted), button, gesture, motion, light, climate (temperature and humidity), camera (a person's presence, gaze and, where allowed, estimated age and gender) and io (an input that is on or off)."
95
+ },
96
+ "bleAddress": {
97
+ "type": "string",
98
+ "pattern": "^[0-9A-F]{2}(:[0-9A-F]{2}){5}$",
99
+ "description": "A Bluetooth device address (WP-0044, ADR 0108): six octets in upper-case hex, most significant first, such as 0C:F3:EE:00:12:34."
100
+ },
101
+ "beaconFrame": {
102
+ "enum": ["ibeacon", "eddystone-uid", "eddystone-url", "eddystone-tlm", "altbeacon"],
103
+ "description": "A beacon's advertisement as the player reads it (WP-0044, ADR 0108): iBeacon; Eddystone's UID, URL or TLM (telemetry: battery, temperature and counts); or AltBeacon."
104
+ },
105
+ "gpioPin": {
106
+ "type": "integer",
107
+ "minimum": 0,
108
+ "maximum": 63,
109
+ "description": "A GPIO pin as the shell numbers it (WP-0044, ADR 0108): its line on the box's GPIO chip, as the gpio leaf's pin names it."
110
+ },
111
+ "demographics": {
112
+ "description": "Impressions by estimated gender and age group, counted only where a place allows it (WP-0043, ADR 0107): each presence counted once, by the estimate its sensor gave most often. Never anything about one person.",
113
+ "type": "object",
114
+ "required": ["female", "male", "genderUnknown", "age", "ageUnknown"],
115
+ "additionalProperties": false,
116
+ "properties": {
117
+ "female": { "type": "integer", "minimum": 0 },
118
+ "male": { "type": "integer", "minimum": 0 },
119
+ "genderUnknown": { "type": "integer", "minimum": 0, "description": "Presences whose gender the sensor did not estimate, or was unsure of." },
120
+ "age": {
121
+ "type": "array",
122
+ "minItems": 8,
123
+ "maxItems": 8,
124
+ "items": { "type": "integer", "minimum": 0 },
125
+ "description": "Presences by the sensor's age group: 0 to 11, 12 to 17, 18 to 24, 25 to 34, 35 to 44, 45 to 54, 55 to 64, and 65 or more."
126
+ },
127
+ "ageUnknown": { "type": "integer", "minimum": 0 }
128
+ }
129
+ },
130
+ "date": {
131
+ "type": "string",
132
+ "format": "date"
133
+ },
134
+ "localTime": {
135
+ "type": "string",
136
+ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
137
+ "description": "Wall-clock time HH:MM in the device's time zone."
138
+ },
139
+ "timeZone": {
140
+ "type": "string",
141
+ "pattern": "^[A-Za-z_]+(/[A-Za-z0-9_+-]+){0,2}$|^UTC$",
142
+ "description": "IANA time zone name."
143
+ },
144
+ "locale": {
145
+ "type": "string",
146
+ "pattern": "^[a-z]{2,3}(-[A-Z][a-z]{3})?(-[A-Z]{2}|-[0-9]{3})?$",
147
+ "description": "BCP 47 language tag."
148
+ },
149
+ "semver": {
150
+ "type": "string",
151
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[0-9A-Za-z.-]+)?$"
152
+ },
153
+ "itemRef": {
154
+ "type": "object",
155
+ "description": "A pinned reference to a media item version.",
156
+ "required": [
157
+ "id",
158
+ "version"
159
+ ],
160
+ "additionalProperties": false,
161
+ "properties": {
162
+ "id": {
163
+ "$ref": "common.schema.json#/$defs/mediaId"
164
+ },
165
+ "version": {
166
+ "type": "integer",
167
+ "minimum": 1
168
+ }
169
+ }
170
+ },
171
+ "signature": {
172
+ "type": "object",
173
+ "description": "Detached Ed25519 signature over the UTF-8 bytes of the RFC 8785 canonical JSON of the message without this field. keyId names a public key the verifier already trusts (distributed at enrollment); never fetch a key named by the message.",
174
+ "required": [
175
+ "alg",
176
+ "keyId",
177
+ "value"
178
+ ],
179
+ "additionalProperties": false,
180
+ "properties": {
181
+ "alg": {
182
+ "const": "ed25519"
183
+ },
184
+ "keyId": {
185
+ "type": "string",
186
+ "minLength": 1,
187
+ "maxLength": 128
188
+ },
189
+ "value": {
190
+ "type": "string",
191
+ "contentEncoding": "base64",
192
+ "minLength": 16
193
+ }
194
+ }
195
+ }
196
+ }
197
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "calendar": {
3
+ "name": "Prairie Grocers"
4
+ },
5
+ "events": [
6
+ {
7
+ "id": "staff-meeting@prairie.test/20261012T133000Z",
8
+ "title": "Staff meeting, Store 12",
9
+ "location": "Back office; Store 12",
10
+ "start": "2026-10-12T13:30:00Z",
11
+ "end": "2026-10-12T14:00:00Z"
12
+ },
13
+ {
14
+ "id": "harvest@prairie.test",
15
+ "title": "Fall harvest sale",
16
+ "start": "2026-10-16",
17
+ "end": "2026-10-19",
18
+ "allDay": true
19
+ },
20
+ {
21
+ "id": "staff-meeting@prairie.test/20261019T133000Z",
22
+ "title": "Staff meeting, Store 12",
23
+ "location": "Back office; Store 12",
24
+ "start": "2026-10-19T13:30:00Z",
25
+ "end": "2026-10-19T14:00:00Z"
26
+ },
27
+ {
28
+ "id": "webinar@prairie.test",
29
+ "title": "Supplier webinar",
30
+ "start": "2026-10-20T15:00:00Z",
31
+ "end": "2026-10-20T15:45:00Z",
32
+ "tentative": true
33
+ },
34
+ {
35
+ "id": "staff-meeting@prairie.test/20261022T133000Z",
36
+ "title": "Staff meeting, Store 12",
37
+ "location": "Back office; Store 12",
38
+ "start": "2026-10-22T13:30:00Z",
39
+ "end": "2026-10-22T14:00:00Z"
40
+ },
41
+ {
42
+ "id": "staff-meeting@prairie.test/20261026T133000Z",
43
+ "title": "Staff meeting, Store 12",
44
+ "location": "Back office; Store 12",
45
+ "start": "2026-10-26T13:30:00Z",
46
+ "end": "2026-10-26T14:00:00Z"
47
+ },
48
+ {
49
+ "id": "staff-meeting@prairie.test/20261029T133000Z",
50
+ "title": "Staff meeting, Store 12",
51
+ "location": "Back office; Store 12",
52
+ "start": "2026-10-29T13:30:00Z",
53
+ "end": "2026-10-29T14:00:00Z"
54
+ },
55
+ {
56
+ "id": "staff-meeting@prairie.test/20261102T143000Z",
57
+ "title": "Staff meeting, Store 12",
58
+ "location": "Back office; Store 12",
59
+ "start": "2026-11-02T14:30:00Z",
60
+ "end": "2026-11-02T15:00:00Z"
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "type": "app.command",
3
+ "seq": 42,
4
+ "at": "2026-10-01T14:01:00Z",
5
+ "name": "showSpecial",
6
+ "argument": {
7
+ "sku": "1234"
8
+ },
9
+ "by": {
10
+ "kind": "app",
11
+ "app": "com.wyndlass.menu",
12
+ "instance": "zone-main-1"
13
+ }
14
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "type": "item.end",
3
+ "seq": 40,
4
+ "at": "2026-10-01T13:59:50Z",
5
+ "zone": "main",
6
+ "item": {
7
+ "id": "med_01jc8x5s3h9k2m4n6p8q0r2t4v",
8
+ "version": 3
9
+ },
10
+ "blob": "3c8e1f5a9b2d6e0c4f7a1b5d8e2c6f9a3b7d0e4c8f1a5b9d2e6c0f3a7b1d4e8c",
11
+ "endedAt": "2026-10-01T13:59:50Z",
12
+ "reason": "finished"
13
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "type": "item.start",
3
+ "seq": 41,
4
+ "at": "2026-10-01T13:59:50Z",
5
+ "zone": "main",
6
+ "item": {
7
+ "id": "med_01jc8x5s3h9k2m4n6p8q0r2t4v",
8
+ "version": 3
9
+ },
10
+ "blob": "3c8e1f5a9b2d6e0c4f7a1b5d8e2c6f9a3b7d0e4c8f1a5b9d2e6c0f3a7b1d4e8c",
11
+ "contentType": "video/mp4",
12
+ "startedAt": "2026-10-01T13:59:50Z",
13
+ "durationMs": 8000,
14
+ "transition": {
15
+ "asked": "crossfade",
16
+ "played": "cut"
17
+ }
18
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "type": "state.changed",
3
+ "seq": 41,
4
+ "at": "2026-10-01T14:00:00Z",
5
+ "state": "paused",
6
+ "previous": "playing",
7
+ "by": {
8
+ "kind": "remote",
9
+ "principal": "agent:fleet-guardian"
10
+ }
11
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "feed": {
3
+ "title": "Prairie Grocers News",
4
+ "url": "https://news.example.org/feed.xml",
5
+ "link": "https://news.example.org/",
6
+ "image": "https://news.example.org/logo.png"
7
+ },
8
+ "items": [
9
+ {
10
+ "id": "harvest-2026",
11
+ "title": "Fall harvest arrives & prices drop",
12
+ "link": "https://news.example.org/harvest",
13
+ "summary": "Squash, apples and more .",
14
+ "published": "2026-10-03T14:00:00.000Z",
15
+ "author": "Olive Owner",
16
+ "image": "/v0/image?url=https%3A%2F%2Fcdn.example.org%2Fharvest.jpg"
17
+ },
18
+ {
19
+ "title": "New bakery hours",
20
+ "link": "https://news.example.org/bakery",
21
+ "summary": "Open at 6 — every day.",
22
+ "published": "2026-10-02T14:30:00.000Z",
23
+ "image": "/v0/image?url=https%3A%2F%2Fcdn.example.org%2Fbakery.webp"
24
+ },
25
+ {
26
+ "title": "Meet our farmers",
27
+ "link": "https://news.example.org/farmers",
28
+ "summary": "Three families, one field.",
29
+ "image": "/v0/image?url=https%3A%2F%2Fcdn.example.org%2Ffarmers.png"
30
+ },
31
+ {
32
+ "title": "Store 12 reopens",
33
+ "link": "https://news.example.org/store-12",
34
+ "image": "/v0/image?url=https%3A%2F%2Fnews.example.org%2Fimg%2Fstore-12.jpg"
35
+ }
36
+ ]
37
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "apiVersion": 1,
3
+ "device": {
4
+ "id": "dev_01j9zq3k7m2p4r6t8v0w2x4y7a",
5
+ "type": "linux-player",
6
+ "shell": "universal-electron",
7
+ "shellVersion": "0.1.0",
8
+ "coreVersion": "0.1.0",
9
+ "model": "NUC 13 Pro",
10
+ "resolution": {
11
+ "width": 1920,
12
+ "height": 1080
13
+ },
14
+ "orientation": "landscape"
15
+ },
16
+ "mode": "player",
17
+ "timeZone": "America/Chicago",
18
+ "locale": "en-US",
19
+ "connection": "online",
20
+ "state": "paused",
21
+ "held": {
22
+ "by": {
23
+ "kind": "remote",
24
+ "principal": "agent:fleet-guardian"
25
+ },
26
+ "since": "2026-10-01T14:00:00Z"
27
+ },
28
+ "content": {
29
+ "manifest": "3c8e1f5a9b2d6e0c4f7a1b5d8e2c6f9a3b7d0e4c8f1a5b9d2e6c0f3a7b1d4e8c",
30
+ "issuedAt": "2026-10-01T13:00:00Z",
31
+ "switchedAt": "2026-10-01T13:00:04Z"
32
+ },
33
+ "now": [
34
+ {
35
+ "zone": "main",
36
+ "item": {
37
+ "id": "med_01jc8x5s3h9k2m4n6p8q0r2t4v",
38
+ "version": 3
39
+ },
40
+ "blob": "3c8e1f5a9b2d6e0c4f7a1b5d8e2c6f9a3b7d0e4c8f1a5b9d2e6c0f3a7b1d4e8c",
41
+ "contentType": "image/png",
42
+ "startedAt": "2026-10-01T13:59:50Z",
43
+ "durationMs": 10000,
44
+ "positionMs": 4200
45
+ }
46
+ ],
47
+ "audio": {
48
+ "volume": 40,
49
+ "muted": false
50
+ },
51
+ "capabilities": {
52
+ "audio": true,
53
+ "display": {
54
+ "power": false,
55
+ "brightness": false
56
+ }
57
+ }
58
+ }