@tryvitris/website-harness 0.1.0-beta.5 → 0.1.0-beta.7

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 (458) hide show
  1. package/README.md +6 -4
  2. package/agent/graph.yaml +0 -2
  3. package/agent/refs/components.md +5 -41
  4. package/agent/refs/compose.md +1 -1
  5. package/agent/refs/implement.md +2 -2
  6. package/agent/refs/jev.md +1 -1
  7. package/agent/refs/layout.md +1 -1
  8. package/agent/refs/storyboard.md +1 -1
  9. package/agent/refs/template-adaptation.md +1 -1
  10. package/bin/api/agent/evaluate.js +10 -15
  11. package/bin/api/agent/grade.js +10 -15
  12. package/bin/api/cli/api.js +18 -23
  13. package/bin/api/cli.js +20 -25
  14. package/bin/api/engine.js +11 -16
  15. package/bin/api/hosting.js +12 -17
  16. package/bin/api/index.js +2 -3
  17. package/bin/api/references.js +1 -2
  18. package/bin/api/render.js +2 -4
  19. package/bin/chunks/{chunk-4GZCAWWK.js → chunk-4MFPATAB.js} +2 -4
  20. package/bin/chunks/{chunk-5OOPJNGN.js → chunk-5JTBC6UK.js} +1 -4
  21. package/bin/chunks/{chunk-Z2UNY47A.js → chunk-5YSPWKFF.js} +1 -1
  22. package/bin/chunks/{chunk-FYN4T4SV.js → chunk-7V3OKLKH.js} +15 -26
  23. package/bin/chunks/{chunk-3CTBXY5K.js → chunk-FRABKM65.js} +1936 -1899
  24. package/bin/chunks/{chunk-4DM5TTLG.js → chunk-H7Y72HXC.js} +5 -5
  25. package/bin/chunks/{chunk-R7YELY3C.js → chunk-HL6JVA4A.js} +100 -81
  26. package/bin/chunks/{chunk-54JC5L35.js → chunk-O55LAQ2C.js} +3 -5
  27. package/bin/chunks/{chunk-VH7PM7KJ.js → chunk-P56ZDMX7.js} +4 -6
  28. package/bin/chunks/{chunk-7VLBEAFW.js → chunk-PGFFKPK6.js} +2 -2
  29. package/bin/chunks/{chunk-YQYHROLZ.js → chunk-QRWGFLUU.js} +2 -2
  30. package/bin/chunks/{chunk-CBEJZO4L.js → chunk-TTAUU3AZ.js} +2 -2
  31. package/bin/chunks/{chunk-E5Y46VBX.js → chunk-VTI32UGJ.js} +200 -103
  32. package/bin/chunks/{chunk-DRJQ4OOU.js → chunk-WOORR67N.js} +0 -45
  33. package/bin/chunks/{chunk-B5I45LFD.js → chunk-YZWEXHT4.js} +11 -13
  34. package/bin/chunks/{chunk-YCVGD2CG.js → chunk-ZIROO2U4.js} +1204 -1176
  35. package/bin/chunks/{chunk-42IXFXUD.js → chunk-ZWFG4GPG.js} +11 -15
  36. package/bin/chunks/{design-context-store-IAT2P2OC.js → design-context-store-DCZOAK56.js} +10 -15
  37. package/bin/chunks/{packets-VBMY4SQJ.js → packets-QOLWPRNV.js} +10 -15
  38. package/bin/chunks/{policy-2I37JUU3.js → policy-MP2JZXI3.js} +1 -1
  39. package/bin/chunks/{preparation-S4MG3RPL.js → preparation-T2IOD5SJ.js} +10 -15
  40. package/bin/chunks/{questions-HKELBDFL.js → questions-XK545GCX.js} +1 -11
  41. package/bin/types/src/agent/composition-authoring.d.ts +2 -2
  42. package/bin/types/src/agent/jev/calibration.d.ts +2 -2
  43. package/bin/types/src/agent/jev/config.d.ts +1 -1
  44. package/bin/types/src/agent/jev/questions.d.ts +0 -10
  45. package/bin/types/src/agent/jev/types.d.ts +0 -2
  46. package/bin/types/src/agent/site-inputs.d.ts +9 -1
  47. package/bin/types/src/agent/template-catalog.d.ts +20 -0
  48. package/bin/types/src/agent/theme-selection.d.ts +4 -2
  49. package/bin/types/src/build/archives.d.ts +2 -0
  50. package/bin/vitris-art.js +10 -15
  51. package/bin/vitris-build.js +3 -5
  52. package/bin/vitris-create-site.js +12 -17
  53. package/bin/vitris-cursor-hook.js +10 -15
  54. package/bin/vitris-eval.js +12 -17
  55. package/bin/vitris-go.js +14 -19
  56. package/bin/vitris-harvest.js +11 -16
  57. package/bin/vitris-knowledge.js +11 -16
  58. package/bin/vitris-launch-preflight.js +11 -17
  59. package/bin/vitris-motion-view.js +13 -19
  60. package/bin/vitris-references.js +4 -7
  61. package/bin/vitris-refresh.js +11 -16
  62. package/bin/vitris-stock.js +1 -1
  63. package/bin/vitris-themes.js +10 -15
  64. package/bin/vitris-upgrade.js +11 -16
  65. package/bin/vitris-verify-browser.js +43 -8
  66. package/bin/vitris-verify-performance.js +3 -5
  67. package/bin/vitris.js +20 -25
  68. package/design-system/MASTER.md +2 -2
  69. package/docs/CLI.md +2 -1
  70. package/docs/DISTRIBUTION.md +1 -1
  71. package/package.json +2 -7
  72. package/templates/site/README.md +2 -0
  73. package/templates/site/gitignore +1 -0
  74. package/bin/chunks/chunk-6H3T46F5.js +0 -25
  75. package/bin/chunks/chunk-ANMJRJQ5.js +0 -31
  76. package/bin/chunks/chunk-FOXUQXTV.js +0 -278
  77. package/bin/chunks/chunk-HNORQ74T.js +0 -40
  78. package/bin/chunks/chunk-T7DGRVTP.js +0 -458
  79. package/bin/types/src/agent/jev/block-catalog.d.ts +0 -95
  80. package/bin/types/src/agent/jev/component-select.d.ts +0 -102
  81. package/bin/types/src/blocks/library-profile.d.ts +0 -9
  82. package/bin/types/src/blocks/metadata.d.ts +0 -65
  83. package/bin/vitris-blocks.js +0 -238
  84. package/blocks/CONVENTIONS.md +0 -121
  85. package/blocks/INDEX.md +0 -130
  86. package/blocks/about/about-awards/README.md +0 -36
  87. package/blocks/about/about-awards/styles.css +0 -13
  88. package/blocks/about/about-awards/template.html +0 -1
  89. package/blocks/about/about-credentials/README.md +0 -33
  90. package/blocks/about/about-credentials/block.meta.json +0 -85
  91. package/blocks/about/about-credentials/styles.css +0 -4
  92. package/blocks/about/about-credentials/template.html +0 -1
  93. package/blocks/about/about-founder/README.md +0 -35
  94. package/blocks/about/about-founder/styles.css +0 -9
  95. package/blocks/about/about-founder/template.html +0 -1
  96. package/blocks/about/about-mission/README.md +0 -31
  97. package/blocks/about/about-mission/styles.css +0 -5
  98. package/blocks/about/about-mission/template.html +0 -1
  99. package/blocks/about/about-statement/README.md +0 -28
  100. package/blocks/about/about-statement/styles.css +0 -7
  101. package/blocks/about/about-statement/template.html +0 -1
  102. package/blocks/about/about-story/README.md +0 -35
  103. package/blocks/about/about-story/styles.css +0 -5
  104. package/blocks/about/about-story/template.html +0 -1
  105. package/blocks/about/about-timeline/README.md +0 -33
  106. package/blocks/about/about-timeline/styles.css +0 -8
  107. package/blocks/about/about-timeline/template.html +0 -1
  108. package/blocks/about/about-values/README.md +0 -31
  109. package/blocks/about/about-values/styles.css +0 -3
  110. package/blocks/about/about-values/template.html +0 -1
  111. package/blocks/blog/blog-featured/README.md +0 -39
  112. package/blocks/blog/blog-featured/styles.css +0 -12
  113. package/blocks/blog/blog-featured/template.html +0 -1
  114. package/blocks/blog/blog-index/README.md +0 -34
  115. package/blocks/blog/blog-index/styles.css +0 -6
  116. package/blocks/blog/blog-index/template.html +0 -1
  117. package/blocks/blog/blog-post-header/README.md +0 -31
  118. package/blocks/blog/blog-post-header/styles.css +0 -8
  119. package/blocks/blog/blog-post-header/template.html +0 -1
  120. package/blocks/contact/contact-cards/README.md +0 -32
  121. package/blocks/contact/contact-cards/styles.css +0 -7
  122. package/blocks/contact/contact-cards/template.html +0 -1
  123. package/blocks/contact/contact-chips/README.md +0 -41
  124. package/blocks/contact/contact-chips/styles.css +0 -13
  125. package/blocks/contact/contact-chips/template.html +0 -1
  126. package/blocks/contact/contact-hours/README.md +0 -41
  127. package/blocks/contact/contact-hours/block.meta.json +0 -87
  128. package/blocks/contact/contact-hours/styles.css +0 -8
  129. package/blocks/contact/contact-hours/template.html +0 -1
  130. package/blocks/contact/contact-map/README.md +0 -39
  131. package/blocks/contact/contact-map/styles.css +0 -10
  132. package/blocks/contact/contact-map/template.html +0 -1
  133. package/blocks/contact/contact-offices/README.md +0 -32
  134. package/blocks/contact/contact-offices/styles.css +0 -8
  135. package/blocks/contact/contact-offices/template.html +0 -1
  136. package/blocks/contact/contact-phone-first/README.md +0 -33
  137. package/blocks/contact/contact-phone-first/block.meta.json +0 -86
  138. package/blocks/contact/contact-phone-first/styles.css +0 -11
  139. package/blocks/contact/contact-phone-first/template.html +0 -1
  140. package/blocks/contact/contact-split/README.md +0 -43
  141. package/blocks/contact/contact-split/styles.css +0 -12
  142. package/blocks/contact/contact-split/template.html +0 -1
  143. package/blocks/contact/contact-visit/README.md +0 -36
  144. package/blocks/contact/contact-visit/block.meta.json +0 -88
  145. package/blocks/contact/contact-visit/styles.css +0 -13
  146. package/blocks/contact/contact-visit/template.html +0 -1
  147. package/blocks/contact/service-areas/README.md +0 -32
  148. package/blocks/contact/service-areas/styles.css +0 -9
  149. package/blocks/contact/service-areas/template.html +0 -1
  150. package/blocks/content/glossary/README.md +0 -35
  151. package/blocks/content/glossary/styles.css +0 -6
  152. package/blocks/content/glossary/template.html +0 -1
  153. package/blocks/content/list-split/README.md +0 -33
  154. package/blocks/content/list-split/styles.css +0 -13
  155. package/blocks/content/list-split/template.html +0 -1
  156. package/blocks/content/prose-split/README.md +0 -32
  157. package/blocks/content/prose-split/styles.css +0 -12
  158. package/blocks/content/prose-split/template.html +0 -1
  159. package/blocks/content/specification-ledger/README.md +0 -32
  160. package/blocks/content/specification-ledger/block.meta.json +0 -85
  161. package/blocks/content/specification-ledger/styles.css +0 -10
  162. package/blocks/content/specification-ledger/template.html +0 -1
  163. package/blocks/cta/cta-band/README.md +0 -33
  164. package/blocks/cta/cta-band/styles.css +0 -11
  165. package/blocks/cta/cta-band/template.html +0 -1
  166. package/blocks/cta/cta-card/README.md +0 -35
  167. package/blocks/cta/cta-card/styles.css +0 -8
  168. package/blocks/cta/cta-card/template.html +0 -1
  169. package/blocks/cta/cta-floating-bar/README.md +0 -28
  170. package/blocks/cta/cta-floating-bar/styles.css +0 -8
  171. package/blocks/cta/cta-floating-bar/template.html +0 -1
  172. package/blocks/cta/cta-inline/README.md +0 -30
  173. package/blocks/cta/cta-inline/styles.css +0 -9
  174. package/blocks/cta/cta-inline/template.html +0 -1
  175. package/blocks/cta/cta-newsletter/README.md +0 -34
  176. package/blocks/cta/cta-newsletter/styles.css +0 -8
  177. package/blocks/cta/cta-newsletter/template.html +0 -1
  178. package/blocks/cta/cta-photo-fan/README.md +0 -36
  179. package/blocks/cta/cta-photo-fan/styles.css +0 -14
  180. package/blocks/cta/cta-photo-fan/template.html +0 -1
  181. package/blocks/cta/cta-split/README.md +0 -38
  182. package/blocks/cta/cta-split/styles.css +0 -10
  183. package/blocks/cta/cta-split/template.html +0 -1
  184. package/blocks/faq/faq-accordion/README.md +0 -36
  185. package/blocks/faq/faq-accordion/styles.css +0 -6
  186. package/blocks/faq/faq-accordion/template.html +0 -1
  187. package/blocks/faq/faq-grouped/README.md +0 -40
  188. package/blocks/faq/faq-grouped/styles.css +0 -20
  189. package/blocks/faq/faq-grouped/template.html +0 -1
  190. package/blocks/faq/faq-split/README.md +0 -37
  191. package/blocks/faq/faq-split/styles.css +0 -5
  192. package/blocks/faq/faq-split/template.html +0 -1
  193. package/blocks/faq/faq-tabs/README.md +0 -36
  194. package/blocks/faq/faq-tabs/styles.css +0 -3
  195. package/blocks/faq/faq-tabs/template.html +0 -1
  196. package/blocks/feature/feature-bento/README.md +0 -33
  197. package/blocks/feature/feature-bento/styles.css +0 -7
  198. package/blocks/feature/feature-bento/template.html +0 -1
  199. package/blocks/feature/feature-compare-table/README.md +0 -44
  200. package/blocks/feature/feature-compare-table/styles.css +0 -15
  201. package/blocks/feature/feature-compare-table/template.html +0 -1
  202. package/blocks/feature/feature-comparison/README.md +0 -34
  203. package/blocks/feature/feature-comparison/styles.css +0 -6
  204. package/blocks/feature/feature-comparison/template.html +0 -1
  205. package/blocks/feature/feature-grid-3/README.md +0 -34
  206. package/blocks/feature/feature-grid-3/styles.css +0 -8
  207. package/blocks/feature/feature-grid-3/template.html +0 -1
  208. package/blocks/feature/feature-icon-list/README.md +0 -39
  209. package/blocks/feature/feature-icon-list/styles.css +0 -9
  210. package/blocks/feature/feature-icon-list/template.html +0 -1
  211. package/blocks/feature/feature-spotlight/README.md +0 -39
  212. package/blocks/feature/feature-spotlight/styles.css +0 -5
  213. package/blocks/feature/feature-spotlight/template.html +0 -1
  214. package/blocks/feature/feature-stats-band/README.md +0 -33
  215. package/blocks/feature/feature-stats-band/styles.css +0 -8
  216. package/blocks/feature/feature-stats-band/template.html +0 -1
  217. package/blocks/feature/feature-tabs/README.md +0 -38
  218. package/blocks/feature/feature-tabs/styles.css +0 -7
  219. package/blocks/feature/feature-tabs/template.html +0 -1
  220. package/blocks/feature/feature-thumb-list/README.md +0 -38
  221. package/blocks/feature/feature-thumb-list/styles.css +0 -13
  222. package/blocks/feature/feature-thumb-list/template.html +0 -1
  223. package/blocks/feature/feature-zigzag/README.md +0 -31
  224. package/blocks/feature/feature-zigzag/styles.css +0 -6
  225. package/blocks/feature/feature-zigzag/template.html +0 -1
  226. package/blocks/footer/footer-columns/README.md +0 -39
  227. package/blocks/footer/footer-columns/styles.css +0 -16
  228. package/blocks/footer/footer-columns/template.html +0 -1
  229. package/blocks/footer/footer-compact/README.md +0 -33
  230. package/blocks/footer/footer-compact/styles.css +0 -12
  231. package/blocks/footer/footer-compact/template.html +0 -1
  232. package/blocks/footer/footer-cta/README.md +0 -37
  233. package/blocks/footer/footer-cta/styles.css +0 -18
  234. package/blocks/footer/footer-cta/template.html +0 -1
  235. package/blocks/footer/footer-social/README.md +0 -37
  236. package/blocks/footer/footer-social/styles.css +0 -17
  237. package/blocks/footer/footer-social/template.html +0 -1
  238. package/blocks/footer/footer-wordmark/README.md +0 -40
  239. package/blocks/footer/footer-wordmark/styles.css +0 -19
  240. package/blocks/footer/footer-wordmark/template.html +0 -1
  241. package/blocks/gallery/gallery-before-after/README.md +0 -31
  242. package/blocks/gallery/gallery-before-after/styles.css +0 -6
  243. package/blocks/gallery/gallery-before-after/template.html +0 -1
  244. package/blocks/gallery/gallery-carousel/README.md +0 -32
  245. package/blocks/gallery/gallery-carousel/styles.css +0 -7
  246. package/blocks/gallery/gallery-carousel/template.html +0 -1
  247. package/blocks/gallery/gallery-grid/README.md +0 -39
  248. package/blocks/gallery/gallery-grid/styles.css +0 -13
  249. package/blocks/gallery/gallery-grid/template.html +0 -1
  250. package/blocks/gallery/gallery-masonry/README.md +0 -33
  251. package/blocks/gallery/gallery-masonry/styles.css +0 -4
  252. package/blocks/gallery/gallery-masonry/template.html +0 -1
  253. package/blocks/gallery/gallery-mosaic-split/README.md +0 -40
  254. package/blocks/gallery/gallery-mosaic-split/styles.css +0 -15
  255. package/blocks/gallery/gallery-mosaic-split/template.html +0 -1
  256. package/blocks/hero/hero-asymmetric/README.md +0 -34
  257. package/blocks/hero/hero-asymmetric/styles.css +0 -13
  258. package/blocks/hero/hero-asymmetric/template.html +0 -10
  259. package/blocks/hero/hero-before-after/README.md +0 -38
  260. package/blocks/hero/hero-before-after/styles.css +0 -8
  261. package/blocks/hero/hero-before-after/template.html +0 -19
  262. package/blocks/hero/hero-editorial/README.md +0 -34
  263. package/blocks/hero/hero-editorial/block.meta.json +0 -85
  264. package/blocks/hero/hero-editorial/styles.css +0 -6
  265. package/blocks/hero/hero-editorial/template.html +0 -10
  266. package/blocks/hero/hero-evidence/README.md +0 -32
  267. package/blocks/hero/hero-evidence/block.meta.json +0 -85
  268. package/blocks/hero/hero-evidence/styles.css +0 -13
  269. package/blocks/hero/hero-evidence/template.html +0 -1
  270. package/blocks/hero/hero-form/README.md +0 -46
  271. package/blocks/hero/hero-form/styles.css +0 -11
  272. package/blocks/hero/hero-form/template.html +0 -15
  273. package/blocks/hero/hero-menu/README.md +0 -36
  274. package/blocks/hero/hero-menu/styles.css +0 -7
  275. package/blocks/hero/hero-menu/template.html +0 -10
  276. package/blocks/hero/hero-overlay/README.md +0 -35
  277. package/blocks/hero/hero-overlay/styles.css +0 -14
  278. package/blocks/hero/hero-overlay/template.html +0 -10
  279. package/blocks/hero/hero-page/README.md +0 -35
  280. package/blocks/hero/hero-page/styles.css +0 -19
  281. package/blocks/hero/hero-page/template.html +0 -1
  282. package/blocks/hero/hero-product/README.md +0 -41
  283. package/blocks/hero/hero-product/styles.css +0 -11
  284. package/blocks/hero/hero-product/template.html +0 -14
  285. package/blocks/hero/hero-service/README.md +0 -37
  286. package/blocks/hero/hero-service/block.meta.json +0 -85
  287. package/blocks/hero/hero-service/styles.css +0 -17
  288. package/blocks/hero/hero-service/template.html +0 -1
  289. package/blocks/hero/hero-split/README.md +0 -36
  290. package/blocks/hero/hero-split/styles.css +0 -7
  291. package/blocks/hero/hero-split/template.html +0 -11
  292. package/blocks/hero/hero-statement/README.md +0 -33
  293. package/blocks/hero/hero-statement/styles.css +0 -8
  294. package/blocks/hero/hero-statement/template.html +0 -1
  295. package/blocks/hero/hero-stats/README.md +0 -37
  296. package/blocks/hero/hero-stats/styles.css +0 -10
  297. package/blocks/hero/hero-stats/template.html +0 -10
  298. package/blocks/hero/hero-video-still/README.md +0 -36
  299. package/blocks/hero/hero-video-still/styles.css +0 -9
  300. package/blocks/hero/hero-video-still/template.html +0 -13
  301. package/blocks/icons.md +0 -44
  302. package/blocks/incentives/incentive-banner/README.md +0 -28
  303. package/blocks/incentives/incentive-banner/styles.css +0 -7
  304. package/blocks/incentives/incentive-banner/template.html +0 -1
  305. package/blocks/incentives/incentive-cards/README.md +0 -31
  306. package/blocks/incentives/incentive-cards/styles.css +0 -4
  307. package/blocks/incentives/incentive-cards/template.html +0 -1
  308. package/blocks/navbar/nav-announcement/README.md +0 -35
  309. package/blocks/navbar/nav-announcement/styles.css +0 -10
  310. package/blocks/navbar/nav-announcement/template.html +0 -14
  311. package/blocks/navbar/nav-centered/README.md +0 -35
  312. package/blocks/navbar/nav-centered/styles.css +0 -11
  313. package/blocks/navbar/nav-centered/template.html +0 -12
  314. package/blocks/navbar/nav-minimal/README.md +0 -29
  315. package/blocks/navbar/nav-minimal/styles.css +0 -5
  316. package/blocks/navbar/nav-minimal/template.html +0 -6
  317. package/blocks/navbar/nav-split/README.md +0 -34
  318. package/blocks/navbar/nav-split/styles.css +0 -11
  319. package/blocks/navbar/nav-split/template.html +0 -11
  320. package/blocks/navbar/nav-utility/README.md +0 -37
  321. package/blocks/navbar/nav-utility/styles.css +0 -17
  322. package/blocks/navbar/nav-utility/template.html +0 -12
  323. package/blocks/pricing/menu-featured/README.md +0 -34
  324. package/blocks/pricing/menu-featured/styles.css +0 -4
  325. package/blocks/pricing/menu-featured/template.html +0 -1
  326. package/blocks/pricing/menu-sections/README.md +0 -33
  327. package/blocks/pricing/menu-sections/styles.css +0 -9
  328. package/blocks/pricing/menu-sections/template.html +0 -1
  329. package/blocks/pricing/pricing-table/README.md +0 -40
  330. package/blocks/pricing/pricing-table/styles.css +0 -9
  331. package/blocks/pricing/pricing-table/template.html +0 -1
  332. package/blocks/pricing/pricing-tiers/README.md +0 -34
  333. package/blocks/pricing/pricing-tiers/styles.css +0 -7
  334. package/blocks/pricing/pricing-tiers/template.html +0 -1
  335. package/blocks/pricing/pricing-toggle/README.md +0 -34
  336. package/blocks/pricing/pricing-toggle/styles.css +0 -10
  337. package/blocks/pricing/pricing-toggle/template.html +0 -1
  338. package/blocks/process/process-carousel/README.md +0 -33
  339. package/blocks/process/process-carousel/styles.css +0 -5
  340. package/blocks/process/process-carousel/template.html +0 -1
  341. package/blocks/process/process-split/README.md +0 -35
  342. package/blocks/process/process-split/styles.css +0 -6
  343. package/blocks/process/process-split/template.html +0 -1
  344. package/blocks/process/process-stepper/README.md +0 -40
  345. package/blocks/process/process-stepper/styles.css +0 -11
  346. package/blocks/process/process-stepper/template.html +0 -1
  347. package/blocks/process/process-steps/README.md +0 -35
  348. package/blocks/process/process-steps/styles.css +0 -6
  349. package/blocks/process/process-steps/template.html +0 -1
  350. package/blocks/process/process-sticky/README.md +0 -38
  351. package/blocks/process/process-sticky/styles.css +0 -12
  352. package/blocks/process/process-sticky/template.html +0 -1
  353. package/blocks/process/process-timeline/README.md +0 -35
  354. package/blocks/process/process-timeline/styles.css +0 -10
  355. package/blocks/process/process-timeline/template.html +0 -1
  356. package/blocks/services/services-cards/README.md +0 -34
  357. package/blocks/services/services-cards/styles.css +0 -3
  358. package/blocks/services/services-cards/template.html +0 -1
  359. package/blocks/services/services-carousel/README.md +0 -34
  360. package/blocks/services/services-carousel/styles.css +0 -6
  361. package/blocks/services/services-carousel/template.html +0 -1
  362. package/blocks/services/services-list/README.md +0 -32
  363. package/blocks/services/services-list/block.meta.json +0 -85
  364. package/blocks/services/services-list/styles.css +0 -10
  365. package/blocks/services/services-list/template.html +0 -1
  366. package/blocks/services/services-menu/README.md +0 -39
  367. package/blocks/services/services-menu/styles.css +0 -6
  368. package/blocks/services/services-menu/template.html +0 -1
  369. package/blocks/services/services-packages/README.md +0 -34
  370. package/blocks/services/services-packages/styles.css +0 -6
  371. package/blocks/services/services-packages/template.html +0 -1
  372. package/blocks/services/services-panels/README.md +0 -36
  373. package/blocks/services/services-panels/styles.css +0 -15
  374. package/blocks/services/services-panels/template.html +0 -1
  375. package/blocks/services/services-photo-grid/README.md +0 -39
  376. package/blocks/services/services-photo-grid/styles.css +0 -10
  377. package/blocks/services/services-photo-grid/template.html +0 -1
  378. package/blocks/services/services-priority/README.md +0 -33
  379. package/blocks/services/services-priority/block.meta.json +0 -86
  380. package/blocks/services/services-priority/styles.css +0 -16
  381. package/blocks/services/services-priority/template.html +0 -1
  382. package/blocks/stats/stats-cards/README.md +0 -31
  383. package/blocks/stats/stats-cards/styles.css +0 -4
  384. package/blocks/stats/stats-cards/template.html +0 -1
  385. package/blocks/stats/stats-mosaic/README.md +0 -27
  386. package/blocks/stats/stats-mosaic/styles.css +0 -9
  387. package/blocks/stats/stats-mosaic/template.html +0 -1
  388. package/blocks/stats/stats-row/README.md +0 -29
  389. package/blocks/stats/stats-row/styles.css +0 -8
  390. package/blocks/stats/stats-row/template.html +0 -1
  391. package/blocks/stats/stats-split/README.md +0 -35
  392. package/blocks/stats/stats-split/styles.css +0 -3
  393. package/blocks/stats/stats-split/template.html +0 -1
  394. package/blocks/team/team-featured/README.md +0 -42
  395. package/blocks/team/team-featured/styles.css +0 -9
  396. package/blocks/team/team-featured/template.html +0 -1
  397. package/blocks/team/team-grid/README.md +0 -35
  398. package/blocks/team/team-grid/styles.css +0 -8
  399. package/blocks/team/team-grid/template.html +0 -1
  400. package/blocks/team/team-list/README.md +0 -32
  401. package/blocks/team/team-list/styles.css +0 -7
  402. package/blocks/team/team-list/template.html +0 -1
  403. package/blocks/testimonial/testimonial-carousel/README.md +0 -32
  404. package/blocks/testimonial/testimonial-carousel/styles.css +0 -7
  405. package/blocks/testimonial/testimonial-carousel/template.html +0 -1
  406. package/blocks/testimonial/testimonial-grid/README.md +0 -32
  407. package/blocks/testimonial/testimonial-grid/styles.css +0 -5
  408. package/blocks/testimonial/testimonial-grid/template.html +0 -1
  409. package/blocks/testimonial/testimonial-mosaic/README.md +0 -38
  410. package/blocks/testimonial/testimonial-mosaic/styles.css +0 -14
  411. package/blocks/testimonial/testimonial-mosaic/template.html +0 -1
  412. package/blocks/testimonial/testimonial-platform/README.md +0 -34
  413. package/blocks/testimonial/testimonial-platform/styles.css +0 -17
  414. package/blocks/testimonial/testimonial-platform/template.html +0 -1
  415. package/blocks/testimonial/testimonial-rating/README.md +0 -28
  416. package/blocks/testimonial/testimonial-rating/styles.css +0 -6
  417. package/blocks/testimonial/testimonial-rating/template.html +0 -1
  418. package/blocks/testimonial/testimonial-spotlight/README.md +0 -31
  419. package/blocks/testimonial/testimonial-spotlight/styles.css +0 -9
  420. package/blocks/testimonial/testimonial-spotlight/template.html +0 -1
  421. package/blocks/testimonial/testimonial-switcher/README.md +0 -39
  422. package/blocks/testimonial/testimonial-switcher/styles.css +0 -23
  423. package/blocks/testimonial/testimonial-switcher/template.html +0 -1
  424. package/blocks/testimonial/testimonial-wall/README.md +0 -34
  425. package/blocks/testimonial/testimonial-wall/styles.css +0 -7
  426. package/blocks/testimonial/testimonial-wall/template.html +0 -1
  427. package/blocks/trust-strip/trust-badges/README.md +0 -30
  428. package/blocks/trust-strip/trust-badges/styles.css +0 -5
  429. package/blocks/trust-strip/trust-badges/template.html +0 -1
  430. package/blocks/trust-strip/trust-certs/README.md +0 -31
  431. package/blocks/trust-strip/trust-certs/styles.css +0 -12
  432. package/blocks/trust-strip/trust-certs/template.html +0 -1
  433. package/blocks/trust-strip/trust-logos/README.md +0 -32
  434. package/blocks/trust-strip/trust-logos/styles.css +0 -5
  435. package/blocks/trust-strip/trust-logos/template.html +0 -1
  436. package/blocks/trust-strip/trust-quote/README.md +0 -29
  437. package/blocks/trust-strip/trust-quote/styles.css +0 -5
  438. package/blocks/trust-strip/trust-quote/template.html +0 -1
  439. package/blocks/trust-strip/trust-reviews/README.md +0 -35
  440. package/blocks/trust-strip/trust-reviews/styles.css +0 -9
  441. package/blocks/trust-strip/trust-reviews/template.html +0 -1
  442. package/blocks/work/case-alternating/README.md +0 -34
  443. package/blocks/work/case-alternating/block.meta.json +0 -86
  444. package/blocks/work/case-alternating/styles.css +0 -7
  445. package/blocks/work/case-alternating/template.html +0 -1
  446. package/blocks/work/case-carousel/README.md +0 -26
  447. package/blocks/work/case-carousel/styles.css +0 -7
  448. package/blocks/work/case-carousel/template.html +0 -1
  449. package/blocks/work/case-header/README.md +0 -38
  450. package/blocks/work/case-header/styles.css +0 -18
  451. package/blocks/work/case-header/template.html +0 -1
  452. package/blocks/work/project-evidence/README.md +0 -35
  453. package/blocks/work/project-evidence/block.meta.json +0 -87
  454. package/blocks/work/project-evidence/styles.css +0 -12
  455. package/blocks/work/project-evidence/template.html +0 -1
  456. package/blocks/work/project-grid/README.md +0 -38
  457. package/blocks/work/project-grid/styles.css +0 -9
  458. package/blocks/work/project-grid/template.html +0 -1
@@ -7,19 +7,19 @@ import {
7
7
  import {
8
8
  gatherBlankOnboard,
9
9
  persistOnboard
10
- } from "./chunk-Z2UNY47A.js";
10
+ } from "./chunk-5YSPWKFF.js";
11
11
  import {
12
12
  persistSiteInputs,
13
13
  recordManagedKit,
14
- resolveSiteInputs
15
- } from "./chunk-3CTBXY5K.js";
14
+ resolveSiteInputsLive
15
+ } from "./chunk-FRABKM65.js";
16
16
  import {
17
17
  initialState,
18
18
  parseGraphYaml
19
19
  } from "./chunk-BBV7PMFC.js";
20
20
  import {
21
21
  findHarnessRoot
22
- } from "./chunk-HNORQ74T.js";
22
+ } from "./chunk-VTI32UGJ.js";
23
23
  import {
24
24
  save
25
25
  } from "./chunk-T6PE4KN4.js";
@@ -66,7 +66,7 @@ async function createSite(opts) {
66
66
  }
67
67
  let inputs;
68
68
  try {
69
- inputs = resolveSiteInputs(opts);
69
+ inputs = await resolveSiteInputsLive(opts);
70
70
  if (mode === "preserve" && (inputs.template || inputs.content !== void 0)) throw Error("Template and additional content inputs require redesign mode");
71
71
  } catch (error) {
72
72
  return { ok: false, exitCode: EXIT_CODES.CONFIG_OR_CLI_ERROR, error: error instanceof Error ? error.message : String(error) };
@@ -1,10 +1,6 @@
1
1
  import {
2
2
  KNOWLEDGE_RELEASE
3
3
  } from "./chunk-BIEDSEL2.js";
4
- import {
5
- COMPOSITION_LESSON_RELEASE,
6
- resolveDesignAuthoring
7
- } from "./chunk-6H3T46F5.js";
8
4
  import {
9
5
  json
10
6
  } from "./chunk-T6PE4KN4.js";
@@ -97,9 +93,9 @@ function complementaryFit(pool, limit, tie, precise = false) {
97
93
  }
98
94
 
99
95
  // src/agent/reference-library.ts
100
- import { createHash as createHash6 } from "node:crypto";
101
- import { existsSync as existsSync6, readFileSync as readFileSync6, readdirSync, statSync } from "node:fs";
102
- import { isAbsolute as isAbsolute2, join as join6, relative as relative4, resolve as resolve5, sep as sep2 } from "node:path";
96
+ import { createHash as createHash7 } from "node:crypto";
97
+ import { existsSync as existsSync7, readFileSync as readFileSync7, readdirSync, statSync } from "node:fs";
98
+ import { isAbsolute as isAbsolute2, join as join7, relative as relative4, resolve as resolve5, sep as sep2 } from "node:path";
103
99
 
104
100
  // src/agent/design-calibration.ts
105
101
  import { createHash } from "node:crypto";
@@ -202,21 +198,42 @@ function calibrationPackHash(kernel) {
202
198
  }
203
199
 
204
200
  // src/agent/composition-context.ts
205
- import { createHash as createHash4 } from "node:crypto";
206
- import { existsSync as existsSync4, readFileSync as readFileSync4 } from "node:fs";
207
- import { join as join4 } from "node:path";
201
+ import { createHash as createHash5 } from "node:crypto";
202
+ import { existsSync as existsSync5, readFileSync as readFileSync5 } from "node:fs";
203
+ import { join as join5 } from "node:path";
208
204
 
209
205
  // src/knowledge/composition.ts
210
- import { createHash as createHash3 } from "node:crypto";
211
- import { existsSync as existsSync3, lstatSync, readFileSync as readFileSync3 } from "node:fs";
212
- import { dirname as dirname2, join as join3, relative as relative2, resolve as resolve3 } from "node:path";
206
+ import { createHash as createHash4 } from "node:crypto";
207
+ import { existsSync as existsSync4, lstatSync, readFileSync as readFileSync4 } from "node:fs";
208
+ import { dirname as dirname2, join as join4, relative as relative2, resolve as resolve3 } from "node:path";
213
209
 
214
- // src/knowledge/pack.ts
210
+ // src/agent/composition-authoring.ts
215
211
  import { createHash as createHash2 } from "node:crypto";
216
212
  import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
217
- import { join as join2, relative, resolve as resolve2 } from "node:path";
213
+ import { join as join2 } from "node:path";
214
+ var COMPOSITION_LESSON_RELEASE = "2026-09-28.1";
215
+ function resolveDesignAuthoring(root) {
216
+ const path = join2(root, "launch.json");
217
+ const launch = existsSync2(path) ? JSON.parse(readFileSync2(path, "utf8")) : {};
218
+ const raw = launch.designAuthoring;
219
+ if (raw === void 0) return policy("theme-v1", null);
220
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error("launch.json designAuthoring must be an object");
221
+ const config = raw;
222
+ if ((config.mode === "theme-v1" || config.mode === "blocks-v0") && (config.lessonRelease === void 0 || config.lessonRelease === null)) return policy("theme-v1", null);
223
+ if (config.mode === "composition-v1" && config.lessonRelease === COMPOSITION_LESSON_RELEASE) return policy("composition-v1", COMPOSITION_LESSON_RELEASE);
224
+ throw new Error(`Unsupported launch.json designAuthoring mode/release: ${String(config.mode)}/${String(config.lessonRelease)}. Use theme-v1, or composition-v1 with ${COMPOSITION_LESSON_RELEASE}.`);
225
+ }
226
+ function policy(mode, lessonRelease) {
227
+ const hash2 = createHash2("sha256").update(JSON.stringify({ mode, lessonRelease })).digest("hex");
228
+ return { mode, lessonRelease, hash: hash2 };
229
+ }
230
+
231
+ // src/knowledge/pack.ts
232
+ import { createHash as createHash3 } from "node:crypto";
233
+ import { existsSync as existsSync3, readFileSync as readFileSync3 } from "node:fs";
234
+ import { join as join3, relative, resolve as resolve2 } from "node:path";
218
235
  function sha256(bytes) {
219
- return createHash2("sha256").update(bytes).digest("hex");
236
+ return createHash3("sha256").update(bytes).digest("hex");
220
237
  }
221
238
  function confined(dir, file) {
222
239
  if (!file || file.includes("..") || file.startsWith("/") || /^[A-Za-z]:/.test(file)) return void 0;
@@ -226,11 +243,11 @@ function confined(dir, file) {
226
243
  return target;
227
244
  }
228
245
  function knowledgeV2Dir(kernel) {
229
- return join2(resolve2(kernel), "design-system", "knowledge", "v2");
246
+ return join3(resolve2(kernel), "design-system", "knowledge", "v2");
230
247
  }
231
248
  function readJson(path) {
232
249
  try {
233
- return JSON.parse(readFileSync2(path, "utf8"));
250
+ return JSON.parse(readFileSync3(path, "utf8"));
234
251
  } catch {
235
252
  return void 0;
236
253
  }
@@ -238,16 +255,16 @@ function readJson(path) {
238
255
  function verifyKnowledgeV2(kernel) {
239
256
  const dir = knowledgeV2Dir(kernel);
240
257
  const errors = [];
241
- const manifestPath = join2(dir, "manifest.json");
242
- if (!existsSync2(manifestPath)) return ["Missing design-system/knowledge/v2 pack"];
258
+ const manifestPath = join3(dir, "manifest.json");
259
+ if (!existsSync3(manifestPath)) return ["Missing design-system/knowledge/v2 pack"];
243
260
  const manifest = readJson(manifestPath);
244
261
  if (!manifest || manifest.schemaVersion !== 1) errors.push("v2 manifest schema mismatch");
245
262
  if (manifest && manifest.knowledgeRelease !== KNOWLEDGE_RELEASE) errors.push("v2 release mismatch");
246
263
  if (manifest && manifest.labeledPreferenceData !== false) errors.push("v2 pack must not claim labeled preference data");
247
264
  for (const file of manifest?.files || []) {
248
265
  const target = confined(dir, file.path);
249
- if (!target || !existsSync2(target)) errors.push(`Missing or unconfined v2 file: ${file.path}`);
250
- else if (sha256(readFileSync2(target)) !== file.sha256) errors.push(`v2 hash mismatch: ${file.path}`);
266
+ if (!target || !existsSync3(target)) errors.push(`Missing or unconfined v2 file: ${file.path}`);
267
+ else if (sha256(readFileSync3(target)) !== file.sha256) errors.push(`v2 hash mismatch: ${file.path}`);
251
268
  }
252
269
  return errors;
253
270
  }
@@ -256,15 +273,15 @@ function loadKnowledgeV2(siteOrKernel) {
256
273
  if (!kernel) return void 0;
257
274
  const dir = knowledgeV2Dir(kernel);
258
275
  const errors = verifyKnowledgeV2(kernel);
259
- const siteConfig = readJson(join2(resolve2(siteOrKernel), "site.json"));
276
+ const siteConfig = readJson(join3(resolve2(siteOrKernel), "site.json"));
260
277
  if (siteConfig?.knowledgeRelease && siteConfig.knowledgeRelease !== KNOWLEDGE_RELEASE) {
261
278
  errors.push(`Site pins knowledge release ${siteConfig.knowledgeRelease}; installed kernel provides ${KNOWLEDGE_RELEASE}. Review and upgrade explicitly.`);
262
279
  }
263
- const sources = readJson(join2(dir, "sources.json")) || [];
264
- const requirements = readJson(join2(dir, "requirements.json")) || [];
265
- const extensions = readJson(join2(dir, "lesson-extensions.json")) || [];
266
- const replacements = readJson(join2(dir, "replacements.json")) || [];
267
- const assets = readJson(join2(dir, "assets.json")) || [];
280
+ const sources = readJson(join3(dir, "sources.json")) || [];
281
+ const requirements = readJson(join3(dir, "requirements.json")) || [];
282
+ const extensions = readJson(join3(dir, "lesson-extensions.json")) || [];
283
+ const replacements = readJson(join3(dir, "replacements.json")) || [];
284
+ const assets = readJson(join3(dir, "assets.json")) || [];
268
285
  for (const source of sources) {
269
286
  if (sha256(source.summary) !== source.summarySha256) errors.push(`Source summary hash mismatch: ${source.id}`);
270
287
  if (source.reviewStatus === "live-checked" && !source.lastReviewed) errors.push(`Live-checked source missing review date: ${source.id}`);
@@ -289,14 +306,14 @@ function coverageReport(pack) {
289
306
  }
290
307
 
291
308
  // src/knowledge/composition.ts
292
- var sha = (bytes) => createHash3("sha256").update(bytes).digest("hex");
309
+ var sha = (bytes) => createHash4("sha256").update(bytes).digest("hex");
293
310
  var hex = (value) => typeof value === "string" && /^[a-f0-9]{64}$/.test(value);
294
311
  var unique = (values) => new Set(values).size === values.length;
295
312
  function confined2(dir, path) {
296
313
  if (!path || path.includes("..") || path.startsWith("/") || path.includes("\\") || /^[A-Za-z]:/.test(path)) throw new Error(`Unconfined composition pack path: ${path}`);
297
314
  const target = resolve3(dir, path);
298
315
  if (relative2(dir, target).startsWith("..")) throw new Error(`Unconfined composition pack path: ${path}`);
299
- for (let cursor = target; cursor !== dir; cursor = dirname2(cursor)) if (existsSync3(cursor) && lstatSync(cursor).isSymbolicLink()) throw new Error(`Symlink in composition pack path: ${path}`);
316
+ for (let cursor = target; cursor !== dir; cursor = dirname2(cursor)) if (existsSync4(cursor) && lstatSync(cursor).isSymbolicLink()) throw new Error(`Symlink in composition pack path: ${path}`);
300
317
  return target;
301
318
  }
302
319
  function object(value, label) {
@@ -318,10 +335,10 @@ function loadCompositionPack(siteOrKernel, requestedRelease = COMPOSITION_LESSON
318
335
  if (requestedRelease !== COMPOSITION_LESSON_RELEASE) throw new Error(`Unknown composition lesson release ${requestedRelease}`);
319
336
  const kernel = resolveKernelRoot(siteOrKernel);
320
337
  if (!kernel) throw new Error("Installed harness root is unavailable for composition lessons");
321
- const dir = join3(kernel, "design-system/knowledge/v3");
322
- const manifestPath = join3(dir, "manifest.json");
323
- if (!existsSync3(manifestPath)) throw new Error(`Missing composition lesson release ${requestedRelease}`);
324
- const manifestBytes = readFileSync3(manifestPath);
338
+ const dir = join4(kernel, "design-system/knowledge/v3");
339
+ const manifestPath = join4(dir, "manifest.json");
340
+ if (!existsSync4(manifestPath)) throw new Error(`Missing composition lesson release ${requestedRelease}`);
341
+ const manifestBytes = readFileSync4(manifestPath);
325
342
  const manifest = parsed(manifestBytes, "manifest");
326
343
  if (manifest.schemaVersion !== 1 || manifest.lessonRelease !== requestedRelease || manifest.standardsRelease !== KNOWLEDGE_RELEASE || manifest.labeledPreferenceData !== false) throw new Error("Composition manifest version or dependency mismatch");
327
344
  const v2Errors = verifyKnowledgeV2(kernel);
@@ -334,8 +351,8 @@ function loadCompositionPack(siteOrKernel, requestedRelease = COMPOSITION_LESSON
334
351
  if (typeof file.path !== "string" || !hex(file.sha256)) throw new Error("Invalid composition manifest file entry");
335
352
  if (bytes.has(file.path)) throw new Error(`Duplicate composition file ${file.path}`);
336
353
  const target = confined2(dir, file.path);
337
- if (!existsSync3(target)) throw new Error(`Missing composition file ${file.path}`);
338
- const content = readFileSync3(target);
354
+ if (!existsSync4(target)) throw new Error(`Missing composition file ${file.path}`);
355
+ const content = readFileSync4(target);
339
356
  if (sha(content) !== file.sha256) throw new Error(`Composition hash mismatch: ${file.path}`);
340
357
  bytes.set(file.path, content);
341
358
  }
@@ -388,11 +405,11 @@ function loadCompositionPack(siteOrKernel, requestedRelease = COMPOSITION_LESSON
388
405
 
389
406
  // src/agent/composition-context.ts
390
407
  var COMPOSITION_SELECTOR_VERSION = "composition-selector-1";
391
- var sha2 = (value) => createHash4("sha256").update(value).digest("hex");
408
+ var sha2 = (value) => createHash5("sha256").update(value).digest("hex");
392
409
  var read = (root, path) => {
393
- const file = join4(root, path);
394
- if (!existsSync4(file)) return void 0;
395
- return JSON.parse(readFileSync4(file, "utf8"));
410
+ const file = join5(root, path);
411
+ if (!existsSync5(file)) return void 0;
412
+ return JSON.parse(readFileSync5(file, "utf8"));
396
413
  };
397
414
  function compositionSignalsFromSite(root, page) {
398
415
  const narrative = read(root, "onboarding/narrative-brief.json");
@@ -503,18 +520,18 @@ function selectCompositionLessons(input) {
503
520
  };
504
521
  }
505
522
  function compositionContextForStage(root, stage, page, limit) {
506
- const policy = resolveDesignAuthoring(root);
507
- if (policy.mode !== "composition-v1") return void 0;
508
- const pack = loadCompositionPack(root, policy.lessonRelease);
509
- const receipt = selectCompositionLessons({ pack, stage, page, signals: compositionSignalsFromSite(root, page), policyHash: policy.hash, limit });
510
- return { policy, pack, receipt };
523
+ const policy2 = resolveDesignAuthoring(root);
524
+ if (policy2.mode !== "composition-v1") return void 0;
525
+ const pack = loadCompositionPack(root, policy2.lessonRelease);
526
+ const receipt = selectCompositionLessons({ pack, stage, page, signals: compositionSignalsFromSite(root, page), policyHash: policy2.hash, limit });
527
+ return { policy: policy2, pack, receipt };
511
528
  }
512
529
 
513
530
  // src/agent/reference-studies.ts
514
- import { createHash as createHash5 } from "node:crypto";
515
- import { existsSync as existsSync5, readFileSync as readFileSync5 } from "node:fs";
516
- import { isAbsolute, join as join5, relative as relative3, resolve as resolve4, sep } from "node:path";
517
- var hash = (v) => createHash5("sha256").update(v).digest("hex");
531
+ import { createHash as createHash6 } from "node:crypto";
532
+ import { existsSync as existsSync6, readFileSync as readFileSync6 } from "node:fs";
533
+ import { isAbsolute, join as join6, relative as relative3, resolve as resolve4, sep } from "node:path";
534
+ var hash = (v) => createHash6("sha256").update(v).digest("hex");
518
535
  function confined3(base, path) {
519
536
  const target = resolve4(base, path), rel = relative3(base, target);
520
537
  if (!rel || isAbsolute(path) || isAbsolute(rel) || rel === ".." || rel.startsWith(`..${sep}`)) throw new Error(`Study path escapes release: ${path}`);
@@ -523,14 +540,14 @@ function confined3(base, path) {
523
540
  function loadReferenceStudies(kernel, release = "2026-10-05.1") {
524
541
  if (!["2026-10-05.1", "2026-10-06.1", "2026-10-06.2"].includes(release)) throw new Error(`Unsupported original study release: ${release}`);
525
542
  const dataRoot = process.env.VITRIS_REFERENCE_DATA ? resolve4(process.env.VITRIS_REFERENCE_DATA) : kernel;
526
- const base = join5(dataRoot, release === "2026-10-05.1" ? "design-system/compositions/v2" : release === "2026-10-06.1" ? "design-system/compositions/v3" : "design-system/compositions/v4"), manifestPath = join5(base, "manifest.json");
527
- if (!existsSync5(manifestPath)) throw new Error("Original reference study release unavailable. Corrected teaching releases are optional data; set VITRIS_REFERENCE_DATA to the verified teaching bundle root (see docs/DISTRIBUTION.md).");
528
- const bytes = readFileSync5(manifestPath), manifest = JSON.parse(bytes.toString());
543
+ const base = join6(dataRoot, release === "2026-10-05.1" ? "design-system/compositions/v2" : release === "2026-10-06.1" ? "design-system/compositions/v3" : "design-system/compositions/v4"), manifestPath = join6(base, "manifest.json");
544
+ if (!existsSync6(manifestPath)) throw new Error("Original reference study release unavailable. Corrected teaching releases are optional data; set VITRIS_REFERENCE_DATA to the verified teaching bundle root (see docs/DISTRIBUTION.md).");
545
+ const bytes = readFileSync6(manifestPath), manifest = JSON.parse(bytes.toString());
529
546
  if (manifest.schemaVersion !== 1 || manifest.release !== release || manifest.labeledPreferenceData !== false || !Array.isArray(manifest.files)) throw new Error("Unsupported original study manifest");
530
547
  const readPinned = (pin) => {
531
548
  const path = confined3(base, pin.path);
532
- if (!existsSync5(path) || hash(readFileSync5(path)) !== pin.sha256) throw new Error(`Missing or changed original study file: ${pin.path}`);
533
- return readFileSync5(path);
549
+ if (!existsSync6(path) || hash(readFileSync6(path)) !== pin.sha256) throw new Error(`Missing or changed original study file: ${pin.path}`);
550
+ return readFileSync6(path);
534
551
  };
535
552
  const catalog = JSON.parse(readPinned(manifest.catalog).toString());
536
553
  if (catalog.schemaVersion !== 1 || catalog.release !== manifest.release || !Array.isArray(catalog.studies)) throw new Error("Unsupported original study catalog");
@@ -614,15 +631,15 @@ var referenceReleaseDirectory = (release = REFERENCE_RELEASE) => {
614
631
  throw new Error(`Unsupported reference release: ${release}`);
615
632
  };
616
633
  var REFERENCE_FAMILIES = ["swiss", "editorial", "expressive-type", "quiet-luxury", "documentary", "campaign", "hospitality", "maximalism", "handmade", "industrial", "technical", "retro", "athletic", "civic", "text-first", "spatial"];
617
- var referenceHash = (value) => createHash6("sha256").update(value).digest("hex");
618
- var read2 = (path) => JSON.parse(readFileSync6(path, "utf8"));
634
+ var referenceHash = (value) => createHash7("sha256").update(value).digest("hex");
635
+ var read2 = (path) => JSON.parse(readFileSync7(path, "utf8"));
619
636
  function confinedReferencePath(base, path) {
620
637
  const target = resolve5(base, path), rel = relative4(resolve5(base), target);
621
638
  if (isAbsolute2(path) || !rel || rel === ".." || rel.startsWith(`..${sep2}`) || isAbsolute2(rel)) throw new Error(`Reference path escapes release: ${path}`);
622
639
  return target;
623
640
  }
624
641
  function referencePolicy(root) {
625
- const launch = existsSync6(join6(root, "launch.json")) ? read2(join6(root, "launch.json")) : {};
642
+ const launch = existsSync7(join7(root, "launch.json")) ? read2(join7(root, "launch.json")) : {};
626
643
  const raw = launch.designReferences;
627
644
  if (raw === void 0) return void 0;
628
645
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) throw new Error("designReferences must be an object");
@@ -692,27 +709,27 @@ function validateReferenceCatalog(catalog) {
692
709
  return errors;
693
710
  }
694
711
  function loadReferenceCatalog(root, kernel, release = referencePolicy(root)?.release || REFERENCE_RELEASE) {
695
- const base = join6(kernel || resolveKernelRoot(root) || root, `design-system/references/${referenceReleaseDirectory(release)}`);
696
- const manifestPath = join6(base, "manifest.json");
697
- if (!existsSync6(manifestPath)) throw new Error("Reference release unavailable; restore the pinned harness package");
712
+ const base = join7(kernel || resolveKernelRoot(root) || root, `design-system/references/${referenceReleaseDirectory(release)}`);
713
+ const manifestPath = join7(base, "manifest.json");
714
+ if (!existsSync7(manifestPath)) throw new Error("Reference release unavailable; restore the pinned harness package");
698
715
  const manifest = read2(manifestPath);
699
716
  if (manifest.schemaVersion !== 1 || manifest.release !== release || manifest.labeledPreferenceData !== false) throw new Error("Unsupported reference manifest");
700
- const body = readFileSync6(confinedReferencePath(base, manifest.catalog.path));
717
+ const body = readFileSync7(confinedReferencePath(base, manifest.catalog.path));
701
718
  if (referenceHash(body) !== manifest.catalog.sha256) throw new Error("Reference catalog hash mismatch");
702
719
  const catalog = JSON.parse(body.toString());
703
720
  const errors = validateReferenceCatalog(catalog);
704
721
  if (errors.length) throw new Error(`Reference catalog quarantined: ${errors.join("; ")}`);
705
722
  validateReferenceDependencies(catalog, resolve5(base, "../../.."), base);
706
- return { base, kernel: resolve5(base, "../../.."), manifest, catalog, manifestHash: referenceHash(readFileSync6(manifestPath)) };
723
+ return { base, kernel: resolve5(base, "../../.."), manifest, catalog, manifestHash: referenceHash(readFileSync7(manifestPath)) };
707
724
  }
708
725
  function validateReferenceDependencies(catalog, releaseKernel, base) {
709
726
  for (const record of catalog.records) for (const view of record.temporalEvidence || []) {
710
727
  const path = confinedReferencePath(base, view.recording.path);
711
- if (!existsSync6(path) || referenceHash(readFileSync6(path)) !== view.recording.sha256) throw new Error(`Missing or changed reference recording: ${record.id}`);
728
+ if (!existsSync7(path) || referenceHash(readFileSync7(path)) !== view.recording.sha256) throw new Error(`Missing or changed reference recording: ${record.id}`);
712
729
  }
713
730
  for (const record of catalog.records) for (const view of record.views) if (view.capture) {
714
731
  const path = confinedReferencePath(base, view.capture.path);
715
- if (!existsSync6(path) || referenceHash(readFileSync6(path)) !== view.capture.sha256) throw new Error(`Missing or changed reference capture: ${record.id}/${view.id}`);
732
+ if (!existsSync7(path) || referenceHash(readFileSync7(path)) !== view.capture.sha256) throw new Error(`Missing or changed reference capture: ${record.id}/${view.id}`);
716
733
  }
717
734
  const lessons = new Set(loadCompositionPack(releaseKernel).lessons.map((l) => l.id)), studies = loadReferenceStudies(releaseKernel, catalog.release);
718
735
  const studyIds = new Set(studies.catalog.studies.map((s) => s.id)), referenceIds = new Set(catalog.records.map((r) => r.id));
@@ -725,7 +742,7 @@ function validateReferenceDependencies(catalog, releaseKernel, base) {
725
742
  }
726
743
  function referenceSignals(root, release = referencePolicy(root)?.release || REFERENCE_RELEASE) {
727
744
  const signals = compositionSignalsFromSite(root);
728
- const text = (path) => existsSync6(join6(root, path)) ? read2(join6(root, path)) : {};
745
+ const text = (path) => existsSync7(join7(root, path)) ? read2(join7(root, path)) : {};
729
746
  const business = text("onboarding/business.json"), request = text("agent/request.json"), story = text("onboarding/storyboard.json"), narrative = text("onboarding/narrative-brief.json"), media = text("onboarding/media-inventory.json");
730
747
  const businessText = JSON.stringify([business.offer, business.audience, business.engagement]);
731
748
  const extra = [];
@@ -800,13 +817,13 @@ function selectReferences(pack, signals, acceptedIds, workingLimit = 4) {
800
817
  return { schemaVersion: 1, selectorVersion: REFERENCE_SELECTOR, release: pack.catalog.release, manifestHash: pack.manifestHash, catalogHash: pack.manifest.catalog.sha256, inputSignalHash: referenceHash(JSON.stringify(signals)), signals, eligible, excluded, shortlist, selected, accepted: !!acceptedIds, gaps: selected.length < 3 ? ["Fewer than three appropriate references; expand researched coverage or establish missing brief signals"] : [], inspectedEvidence: [], ties: [...new Set(eligible.map((r) => r.score))].map((score) => ({ score, ids: eligible.filter((r) => r.score === score).map((r) => r.id) })).filter((t) => t.ids.length > 1) };
801
818
  }
802
819
  function frozenReferenceSignals(root, accepted) {
803
- const runs = join6(root, "agent/runs");
804
- for (const name of existsSync6(runs) ? readdirSync(runs).filter((n) => n.endsWith(".design-context.json")) : []) {
805
- const path = join6(runs, name);
820
+ const runs = join7(root, "agent/runs");
821
+ for (const name of existsSync7(runs) ? readdirSync(runs).filter((n) => n.endsWith(".design-context.json")) : []) {
822
+ const path = join7(runs, name);
806
823
  if (statSync(path).size > 2e6) continue;
807
824
  const wrapper = read2(path), m = wrapper.manifest;
808
- const receipt = m?.referenceSelection, preparation = join6(root, "agent/preparations", name.slice(0, -".design-context.json".length) + ".json");
809
- if (m?.nodeId !== "reference-analysis" || receipt?.inputSignalHash !== accepted.inputSignalHash || receipt.manifestHash !== accepted.manifestHash || !existsSync6(preparation)) continue;
825
+ const receipt = m?.referenceSelection, preparation = join7(root, "agent/preparations", name.slice(0, -".design-context.json".length) + ".json");
826
+ if (m?.nodeId !== "reference-analysis" || receipt?.inputSignalHash !== accepted.inputSignalHash || receipt.manifestHash !== accepted.manifestHash || !existsSync7(preparation)) continue;
810
827
  const p = read2(preparation);
811
828
  if (p.nodeId === "reference-analysis" && ["prepared", "consumed"].includes(p.status) && referenceHash(JSON.stringify(receipt.signals)) === accepted.inputSignalHash) return receipt.signals;
812
829
  }
@@ -846,17 +863,17 @@ function selectCorrectedReferences(pack, signals, acceptedIds, workingLimit = 3)
846
863
  return { schemaVersion: 1, selectorVersion: referenceSelectorVersion(pack.catalog.release), release: pack.catalog.release, manifestHash: pack.manifestHash, catalogHash: pack.manifest.catalog.sha256, inputSignalHash, signals, eligible, excluded, shortlist, selected, accepted: !!acceptedIds, gaps, inspectedEvidence: [], ties: [...new Set(eligible.map((r) => r.score))].map((score) => ({ score, ids: eligible.filter((r) => r.score === score).map((r) => r.id) })).filter((t) => t.ids.length > 1) };
847
864
  }
848
865
  function referenceContext(root, stage, kernel) {
849
- const policy = referencePolicy(root);
850
- if (!policy || !["reference-analysis", "direction", "storyboard", "representative", "representative-quality", "pages", "visual-review", "content-review", "refine"].includes(stage)) return void 0;
851
- const pack = loadReferenceCatalog(root, kernel, policy.release);
852
- if (policy.manifestHash && policy.manifestHash !== pack.manifestHash) throw new Error("Pinned reference manifest changed");
853
- const path = join6(root, "onboarding/reference-analysis.json");
854
- const analysis = existsSync6(path) ? read2(path) : void 0;
866
+ const policy2 = referencePolicy(root);
867
+ if (!policy2 || !["reference-analysis", "direction", "storyboard", "representative", "representative-quality", "pages", "visual-review", "content-review", "refine"].includes(stage)) return void 0;
868
+ const pack = loadReferenceCatalog(root, kernel, policy2.release);
869
+ if (policy2.manifestHash && policy2.manifestHash !== pack.manifestHash) throw new Error("Pinned reference manifest changed");
870
+ const path = join7(root, "onboarding/reference-analysis.json");
871
+ const analysis = existsSync7(path) ? read2(path) : void 0;
855
872
  const accepted = stage !== "reference-analysis" ? analysis?.referenceSelection : void 0;
856
- if (accepted && policy.release !== REFERENCE_RELEASE && accepted.selectorVersion !== referenceSelectorVersion(policy.release)) throw new Error("Accepted selector version changed; explicitly revise reference analysis");
873
+ if (accepted && policy2.release !== REFERENCE_RELEASE && accepted.selectorVersion !== referenceSelectorVersion(policy2.release)) throw new Error("Accepted selector version changed; explicitly revise reference analysis");
857
874
  if (accepted && accepted.manifestHash !== pack.manifestHash) throw new Error("Accepted reference release changed; explicitly revise reference analysis");
858
875
  for (const chosen of accepted?.selected || []) if (!pack.catalog.records.some((r) => r.id === chosen.id && r.revision === chosen.revision)) throw new Error(`Accepted reference revision changed: ${chosen.id}`);
859
- const receipt = selectReferences(pack, accepted && policy.release !== REFERENCE_RELEASE ? frozenReferenceSignals(root, accepted) : referenceSignals(root), accepted?.selected.map((r) => r.id), 3);
876
+ const receipt = selectReferences(pack, accepted && policy2.release !== REFERENCE_RELEASE ? frozenReferenceSignals(root, accepted) : referenceSignals(root), accepted?.selected.map((r) => r.id), 3);
860
877
  const summaries = receipt.selected.map((s) => {
861
878
  const r = pack.catalog.records.find((r2) => r2.id === s.id);
862
879
  return { id: s.id, revision: s.revision, reason: s.reasons.join(", "), summary: `${r.title}: ${r.adds}`, avoid: r.avoidWhen.join("; "), handle: `reference-${s.id}-r${s.revision}` };
@@ -869,12 +886,12 @@ function referenceContext(root, stage, kernel) {
869
886
  });
870
887
  const discoveryText = JSON.stringify(receipt, null, 2);
871
888
  expansions.push({ id: "reference-discovery", hash: referenceHash(discoveryText), chars: discoveryText.length, text: discoveryText });
872
- const teaching = referenceStudyExpansions(pack.kernel, receipt.signals, receipt.selected.map((r) => r.id), accepted?.teachingSelected, policy.release);
873
- if (policy.teachingManifestHash && policy.teachingManifestHash !== teaching.pack.manifestHash) throw new Error("Pinned original teaching manifest changed");
889
+ const teaching = referenceStudyExpansions(pack.kernel, receipt.signals, receipt.selected.map((r) => r.id), accepted?.teachingSelected, policy2.release);
890
+ if (policy2.teachingManifestHash && policy2.teachingManifestHash !== teaching.pack.manifestHash) throw new Error("Pinned original teaching manifest changed");
874
891
  if (accepted?.teachingManifestHash && accepted.teachingManifestHash !== teaching.pack.manifestHash) throw new Error("Accepted original teaching release changed; explicitly revise reference analysis");
875
892
  expansions.push(...teaching.expansions);
876
893
  const teachingText = teaching.selected.map((s) => `- Original study ${s.id}@${s.revision}: ${s.idea} Expand ${s.handle}; inspect its pinned desktop/mobile homepage and interior previews. Fictional facts never transfer.`).join("\n");
877
- return { policy, pack, receipt: { ...receipt, gaps: [...receipt.gaps, ...teaching.gaps], teachingManifestHash: teaching.pack.manifestHash, teachingSelected: teaching.selected }, text: [text, teachingText, ...teaching.gaps].filter(Boolean).join("\n"), expansions };
894
+ return { policy: policy2, pack, receipt: { ...receipt, gaps: [...receipt.gaps, ...teaching.gaps], teachingManifestHash: teaching.pack.manifestHash, teachingSelected: teaching.selected }, text: [text, teachingText, ...teaching.gaps].filter(Boolean).join("\n"), expansions };
878
895
  }
879
896
  function referenceCoverage(catalog) {
880
897
  const screened = catalog.records.filter((r) => ["live-screened", "deep-reviewed"].includes(r.evidenceLevel)), deep = screened.filter((r) => r.evidenceLevel === "deep-reviewed");
@@ -892,6 +909,8 @@ export {
892
909
  calibrationPackDir,
893
910
  loadCalibrationManifest,
894
911
  calibrationPackHash,
912
+ COMPOSITION_LESSON_RELEASE,
913
+ resolveDesignAuthoring,
895
914
  loadKnowledgeV2,
896
915
  lessonExtension,
897
916
  coverageReport,
@@ -7,7 +7,7 @@ import {
7
7
  sourceRevision,
8
8
  verifyRefine,
9
9
  withMutationLock
10
- } from "./chunk-3CTBXY5K.js";
10
+ } from "./chunk-FRABKM65.js";
11
11
  import {
12
12
  assertRequestId,
13
13
  parseChangePlan,
@@ -15,11 +15,9 @@ import {
15
15
  parseSiteIdentity
16
16
  } from "./chunk-M4LNHYYR.js";
17
17
  import {
18
- buildVerified
19
- } from "./chunk-E5Y46VBX.js";
20
- import {
18
+ buildVerified,
21
19
  findHarnessRoot
22
- } from "./chunk-HNORQ74T.js";
20
+ } from "./chunk-VTI32UGJ.js";
23
21
  import {
24
22
  files,
25
23
  fingerprint,
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-2NW7KSPA.js";
4
4
  import {
5
5
  verifyPreservedSite
6
- } from "./chunk-YQYHROLZ.js";
6
+ } from "./chunk-QRWGFLUU.js";
7
7
  import {
8
8
  EXIT_CODES
9
9
  } from "./chunk-JCRGE6AL.js";
@@ -13,17 +13,15 @@ import {
13
13
  import {
14
14
  gradeAll,
15
15
  sourceRevision
16
- } from "./chunk-3CTBXY5K.js";
16
+ } from "./chunk-FRABKM65.js";
17
17
  import {
18
18
  parseReleaseRecord
19
19
  } from "./chunk-M4LNHYYR.js";
20
20
  import {
21
21
  buildVerified,
22
+ findHarnessRoot,
22
23
  isPreserveSite
23
- } from "./chunk-E5Y46VBX.js";
24
- import {
25
- findHarnessRoot
26
- } from "./chunk-HNORQ74T.js";
24
+ } from "./chunk-VTI32UGJ.js";
27
25
  import {
28
26
  json,
29
27
  save
@@ -6,10 +6,10 @@ import {
6
6
  planKitUpgrade,
7
7
  recoverKitUpgrade,
8
8
  rollbackKitUpgrade
9
- } from "./chunk-3CTBXY5K.js";
9
+ } from "./chunk-FRABKM65.js";
10
10
  import {
11
11
  findHarnessRoot
12
- } from "./chunk-HNORQ74T.js";
12
+ } from "./chunk-VTI32UGJ.js";
13
13
  import {
14
14
  json,
15
15
  save
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-XL2DRAYI.js";
4
4
  import {
5
5
  sourceRevision
6
- } from "./chunk-3CTBXY5K.js";
6
+ } from "./chunk-FRABKM65.js";
7
7
  import {
8
8
  previewServer
9
9
  } from "./chunk-WEFDVXFX.js";
@@ -22,7 +22,7 @@ import {
22
22
  providerConsoleWarning,
23
23
  readOnlyEmbedProvider,
24
24
  unresolvedCaptureBlockers
25
- } from "./chunk-E5Y46VBX.js";
25
+ } from "./chunk-VTI32UGJ.js";
26
26
  import {
27
27
  save,
28
28
  within
@@ -6,11 +6,11 @@ import {
6
6
  selectStageKnowledge,
7
7
  signalsFromSite,
8
8
  siteWidgets
9
- } from "./chunk-3CTBXY5K.js";
9
+ } from "./chunk-FRABKM65.js";
10
10
  import {
11
11
  coverageReport,
12
12
  loadKnowledgeV2
13
- } from "./chunk-R7YELY3C.js";
13
+ } from "./chunk-HL6JVA4A.js";
14
14
  import {
15
15
  KNOWLEDGE_RELEASE
16
16
  } from "./chunk-BIEDSEL2.js";