@warpgogol/werkstatt-shared 0.14.0 → 0.15.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 (437) hide show
  1. package/README.md +31 -13
  2. package/README.uk.md +25 -15
  3. package/package.json +519 -762
  4. package/src/{share/agent → agent}/ard-catalog.ts +6 -1
  5. package/src/{share/agent → agent}/dns-aid.test.ts +2 -2
  6. package/src/{share/agent → agent}/manifest.ts +15 -1
  7. package/src/{share/agent → agent}/search.ts +6 -1
  8. package/src/{share → agent}/tests/api-catalog.test.ts +2 -2
  9. package/src/{share → agent}/tests/ard-catalog.test.ts +2 -2
  10. package/src/{share → agent}/tests/capability.test.ts +1 -1
  11. package/src/{share → agent}/tests/fleet-catalog.test.ts +1 -1
  12. package/src/{share → agent}/tests/knowledge.test.ts +2 -2
  13. package/src/{share → agent}/tests/manifest.test.ts +1 -1
  14. package/src/{share → agent}/tests/mcp-card.test.ts +2 -2
  15. package/src/agent/tests/omit-empty.test.ts +33 -0
  16. package/src/{share → agent}/tests/openapi.test.ts +2 -2
  17. package/src/{share → agent}/tests/proof.test.ts +1 -1
  18. package/src/{share → attribution}/material-credits.ts +4 -4
  19. package/src/{share → checks}/check-hints.ts +6 -1
  20. package/src/checks/index.ts +4 -1
  21. package/src/checks/lib/astro-site-url.ts +6 -1
  22. package/src/checks/lib/i18n.ts +14 -0
  23. package/src/checks/result-helpers.ts +22 -5
  24. package/src/checks/tests/remediation-auto-populate.test.ts +83 -0
  25. package/src/{share → client-scripts}/counter-utils.ts +6 -2
  26. package/src/{share/scripts → client-scripts}/external-link-qr.ts +11 -16
  27. package/src/{share/scripts → client-scripts}/external-links.ts +12 -1
  28. package/src/{share/scripts → client-scripts}/gsap-counter.ts +8 -3
  29. package/src/client-scripts/index.ts +35 -0
  30. package/src/{share/scripts → client-scripts}/inline-number-animation.ts +1 -1
  31. package/src/{share/scripts → client-scripts}/lenis.ts +6 -1
  32. package/src/{share/scripts → client-scripts}/lordicon.ts +6 -1
  33. package/src/{share/scripts → client-scripts}/orchestrator.ts +10 -1
  34. package/src/{share/scripts → client-scripts}/scheduler.ts +6 -1
  35. package/src/client-scripts/scroll-spy.ts +106 -0
  36. package/src/client-scripts/tests/external-link-qr.test.ts +8 -0
  37. package/src/client-scripts/tests/external-links.test.ts +25 -0
  38. package/src/client-scripts/tests/gsap-counter.test.ts +8 -0
  39. package/src/client-scripts/tests/gsap-mountain-journey.test.ts +8 -0
  40. package/src/client-scripts/tests/gsap-parallax.test.ts +8 -0
  41. package/src/client-scripts/tests/gsap-reveal.test.ts +8 -0
  42. package/src/client-scripts/tests/gsap-stagger.test.ts +8 -0
  43. package/src/client-scripts/tests/inline-number-animation.test.ts +8 -0
  44. package/src/client-scripts/tests/lenis.test.ts +8 -0
  45. package/src/client-scripts/tests/live-photos.test.ts +8 -0
  46. package/src/client-scripts/tests/lordicon.test.ts +8 -0
  47. package/src/client-scripts/tests/orchestrator.test.ts +47 -0
  48. package/src/client-scripts/tests/scheduler.test.ts +23 -0
  49. package/src/client-scripts/tests/scroll-spy.test.ts +204 -0
  50. package/src/{share/scripts → client-scripts/tests}/video-player.test.ts +51 -31
  51. package/src/component/contracts.ts +206 -0
  52. package/src/component/index.ts +11 -0
  53. package/src/{share → content}/content-reference.ts +3 -3
  54. package/src/{share/content → content}/entity-id.ts +6 -3
  55. package/src/content/index.ts +3 -0
  56. package/src/{share/content → content}/merge.ts +6 -1
  57. package/src/content/system-manifest.test.ts +107 -0
  58. package/src/content/system-manifest.ts +12 -94
  59. package/src/{share → content}/tests/resolve-field-path.test.ts +1 -1
  60. package/src/{share → content}/tests/substitute-deep.test.ts +1 -1
  61. package/src/content-discipline/index.ts +19 -0
  62. package/src/{share/content-discipline → content-discipline}/parsers.ts +2 -2
  63. package/src/{share/env.d.ts → env.d.ts} +6 -3
  64. package/src/fingerprint/canonical-json.ts +731 -0
  65. package/src/fingerprint/index.ts +12 -0
  66. package/src/fingerprint/primitives.ts +72 -0
  67. package/src/{share/i18n → i18n}/localization.ts +6 -2
  68. package/src/integration/adapters.ts +10 -71
  69. package/src/integration/dispatch.ts +1 -1
  70. package/src/integration/funnel.ts +6 -1
  71. package/src/integration/index.ts +101 -4
  72. package/src/integration/lagebild-destination-adapter.ts +108 -0
  73. package/src/integration/lagebild-ingress.ts +7 -12
  74. package/src/integration/orchestration.ts +11 -10
  75. package/src/integration/tests/deliver-event.test.ts +1 -1
  76. package/src/integration/tests/dispatch.test.ts +4 -4
  77. package/src/integration/tests/hub-runtime.test.ts +22 -14
  78. package/src/integration/vitest.config.ts +8 -0
  79. package/src/kernel/desired-state.ts +227 -0
  80. package/src/kernel/diagnostic.ts +289 -0
  81. package/src/kernel/fs-atomic.ts +131 -0
  82. package/src/kernel/index.ts +15 -0
  83. package/src/kernel/tests/fs-atomic.test.ts +150 -0
  84. package/src/kernel/tests/workspace-io.test.ts +187 -0
  85. package/src/kernel/types.ts +459 -0
  86. package/src/kernel/workspace-io.ts +248 -0
  87. package/src/{share → knowledge}/tests/claim.test.ts +1 -1
  88. package/src/{share → knowledge}/tests/derivation.test.ts +1 -1
  89. package/src/{share → knowledge}/tests/freshness.test.ts +1 -1
  90. package/src/{share → knowledge}/tests/ledger.test.ts +1 -1
  91. package/src/{share → knowledge}/tests/plan.test.ts +1 -1
  92. package/src/{share → knowledge}/tests/source.test.ts +1 -1
  93. package/src/legal/index.ts +15 -0
  94. package/src/{share/middleware → middleware}/access-protection.ts +8 -8
  95. package/src/{share → node}/dev-props-validator.ts +6 -1
  96. package/src/{share → node}/import-scan.ts +23 -3
  97. package/src/{share → node}/semantic/derived-prices-loader.ts +4 -2
  98. package/src/{share → node}/semantic/markdown-twin-provenance.ts +1 -1
  99. package/src/node/tests/derived-prices-loader.test.ts +59 -0
  100. package/src/node/tests/markdown-twin-provenance.test.ts +152 -0
  101. package/src/observability/env-resolver.ts +6 -1
  102. package/src/observability/index.ts +6 -1
  103. package/src/observability/otlp-converter.ts +6 -1
  104. package/src/observability/otlp-transport.ts +6 -1
  105. package/src/observability/pusher.ts +6 -1
  106. package/src/observability/redact.ts +6 -1
  107. package/src/observability/typed-refs.ts +6 -2
  108. package/src/observability/vitest.config.ts +1 -0
  109. package/src/{share → offers}/formula-eval.ts +3 -3
  110. package/src/{share → offers}/tests/formula-eval.test.ts +2 -2
  111. package/src/onboarding/index.ts +1 -0
  112. package/src/{share → onboarding}/tests/onboarding-yaml.test.ts +1 -1
  113. package/src/ontology/archetype-registry.ts +6 -1
  114. package/src/ontology/archetypes/index.json +33 -1
  115. package/src/ontology/archetypes/index.yaml +27 -1
  116. package/src/ontology/archetypes/sections/entity-grid.yaml +46 -0
  117. package/src/ontology/archetypes/sections/exit-diagram.yaml +43 -0
  118. package/src/ontology/biome-token-projection.ts +6 -1
  119. package/src/ontology/cosmic/index.ts +6 -1
  120. package/src/ontology/cosmic/moon-catalog.ts +6 -1
  121. package/src/ontology/cosmic/planet-catalog.ts +6 -1
  122. package/src/ontology/cosmic/star-catalog.ts +6 -1
  123. package/src/ontology/enums.ts +6 -1
  124. package/src/ontology/external-surfaces/index.ts +1 -1
  125. package/src/ontology/index.ts +6 -2
  126. package/src/ontology/manifest.ts +26 -4
  127. package/src/ontology/operations/artifact-store.ts +45 -0
  128. package/src/ontology/operations/dht.ts +98 -0
  129. package/src/ontology/operations/handoff.ts +92 -0
  130. package/src/ontology/operations/index.ts +187 -1
  131. package/src/ontology/operations/leitstand.ts +99 -0
  132. package/src/ontology/operations/materialization.ts +90 -0
  133. package/src/ontology/operations/mission.ts +111 -0
  134. package/src/ontology/operations/naming-policy.ts +132 -0
  135. package/src/ontology/operations/notausgang.ts +64 -0
  136. package/src/ontology/operations/release.ts +121 -0
  137. package/src/ontology/operations/sternsystem.ts +192 -0
  138. package/src/ontology/operations/werkstatt.ts +48 -0
  139. package/src/ontology/schemas/biome.ts +7 -2
  140. package/src/ontology/schemas/capability.ts +1 -1
  141. package/src/ontology/schemas/constellation.ts +6 -1
  142. package/src/ontology/schemas/index.ts +6 -2
  143. package/src/ontology/schemas/manifest-resolver.ts +6 -1
  144. package/src/ontology/schemas/page-entry.ts +9 -5
  145. package/src/ontology/schemas/system/growth.ts +6 -1
  146. package/src/ontology/schemas/system/manifest.ts +40 -1
  147. package/src/ontology/schemas/system/page-output.ts +7 -6
  148. package/src/ontology/schemas/system/tests/growth.test.ts +22 -0
  149. package/src/ontology/schemas/system/tests/integrations.test.ts +12 -0
  150. package/src/ontology/schemas/system/tests/manifest.test.ts +22 -0
  151. package/src/ontology/schemas/system/tests/page-output.test.ts +13 -0
  152. package/src/ontology/schemas/system/tests/release.test.ts +22 -0
  153. package/src/ontology/schemas/system/tests/text.test.ts +18 -0
  154. package/src/ontology/schemas/system/tests/verification.test.ts +12 -0
  155. package/src/ontology/schemas/system/text.ts +15 -0
  156. package/src/ontology/schemas/system.ts +6 -2
  157. package/src/ontology/schemas/tests/biome.test.ts +19 -0
  158. package/src/ontology/schemas/tests/capability.test.ts +22 -0
  159. package/src/ontology/schemas/tests/constellation.test.ts +22 -0
  160. package/src/ontology/schemas/tests/dns-records.test.ts +13 -0
  161. package/src/ontology/schemas/tests/manifest-resolver.test.ts +13 -0
  162. package/src/ontology/schemas/tests/page-entry.test.ts +22 -0
  163. package/src/ontology/schemas/tests/section-archetype.test.ts +12 -0
  164. package/src/ontology/schemas/tests/site-family.test.ts +18 -0
  165. package/src/ontology/schemas/tests/system.test.ts +20 -0
  166. package/src/ontology/shared-section-props/body-fragments.ts +2 -0
  167. package/src/ontology/tests/sternsystem-owner.test.ts +1 -1
  168. package/src/ontology/vitest.config.ts +1 -0
  169. package/src/{share → page}/page.ts +13 -9
  170. package/src/{share → page}/tests/dev-props-validator.test.ts +1 -1
  171. package/src/{share → page}/tests/hero-section-numbering-parity.test.ts +1 -1
  172. package/src/passport/index.ts +6 -1
  173. package/src/passport/key-rotate.ts +10 -2
  174. package/src/passport/schema.ts +6 -1
  175. package/src/passport/sign.ts +8 -3
  176. package/src/passport/vitest.config.ts +1 -0
  177. package/src/pbt/index.test.ts +95 -0
  178. package/src/pbt/index.ts +251 -0
  179. package/src/plugin/plugin-contract.ts +1 -1
  180. package/src/{share → policy}/entitlement.ts +24 -4
  181. package/src/{share → policy}/feature-policy.ts +8 -3
  182. package/src/{share → policy}/visibility.ts +7 -2
  183. package/src/redirects/redirects.ts +117 -0
  184. package/src/{share → redirects/tests}/redirects.test.ts +1 -1
  185. package/src/remediation/remediation-catalog.ts +316 -0
  186. package/src/{share/routes → routes}/template-filter.ts +1 -1
  187. package/src/{share → runtime}/runtime-context.ts +7 -2
  188. package/src/{share → runtime}/shared-context.ts +1 -1
  189. package/src/{share/schemas → schemas}/claims.ts +2 -2
  190. package/src/{share/schemas → schemas}/effects.ts +6 -1
  191. package/src/{share/schemas → schemas}/features.ts +1 -1
  192. package/src/{share/schemas → schemas}/index.ts +3 -3
  193. package/src/{share/schemas → schemas}/navigation.ts +6 -1
  194. package/src/{share/schemas → schemas}/page-base.ts +6 -2
  195. package/src/{share/schemas → schemas}/person.ts +1 -1
  196. package/src/{share/schemas → schemas}/standard-list-item.ts +1 -1
  197. package/src/schemas/tests/claim-records.test.ts +52 -0
  198. package/src/schemas/tests/claims.test.ts +23 -0
  199. package/src/schemas/tests/effects.test.ts +116 -0
  200. package/src/schemas/tests/features.test.ts +61 -0
  201. package/src/schemas/tests/horizontal-align.test.ts +16 -0
  202. package/src/schemas/tests/icon-color.test.ts +16 -0
  203. package/src/schemas/tests/live-photo.test.ts +40 -0
  204. package/src/schemas/tests/material-credit.test.ts +51 -0
  205. package/src/schemas/tests/media.test.ts +26 -0
  206. package/src/schemas/tests/navigation.test.ts +58 -0
  207. package/src/schemas/tests/page-base.test.ts +19 -0
  208. package/src/schemas/tests/participant.test.ts +26 -0
  209. package/src/schemas/tests/person.test.ts +12 -0
  210. package/src/schemas/tests/print.test.ts +30 -0
  211. package/src/schemas/tests/section-background.test.ts +31 -0
  212. package/src/schemas/tests/section-body.test.ts +16 -0
  213. package/src/schemas/tests/section-cards.test.ts +17 -0
  214. package/src/schemas/tests/section-cta.test.ts +41 -0
  215. package/src/schemas/tests/section-header.test.ts +31 -0
  216. package/src/schemas/tests/section-image.test.ts +24 -0
  217. package/src/schemas/tests/section-motion.test.ts +29 -0
  218. package/src/schemas/tests/section-shell.test.ts +42 -0
  219. package/src/schemas/tests/section-stats.test.ts +17 -0
  220. package/src/schemas/tests/site-background.test.ts +33 -0
  221. package/src/schemas/tests/standard-list-item.test.ts +16 -0
  222. package/src/{share → sections}/rfc0042-utils.ts +1 -1
  223. package/src/{share/semantic → semantic}/block-extractors/index.ts +20 -1
  224. package/src/{share/semantic → semantic}/business-projection.ts +95 -1
  225. package/src/semantic/canonical-uri.ts +54 -0
  226. package/src/{share/semantic → semantic}/extract.ts +100 -1
  227. package/src/semantic/fact-extraction.test.ts +47 -0
  228. package/src/semantic/fact-extraction.ts +46 -0
  229. package/src/semantic/freshness.ts +67 -0
  230. package/src/{share/semantic → semantic}/ids.ts +6 -1
  231. package/src/{share/semantic → semantic}/index.ts +9 -2
  232. package/src/{share/semantic → semantic}/jsonld/breadcrumb.ts +6 -2
  233. package/src/{share/semantic → semantic}/jsonld/context.ts +6 -2
  234. package/src/{share/semantic → semantic}/jsonld/faq.ts +6 -2
  235. package/src/{share/semantic → semantic}/jsonld/initiative.ts +6 -1
  236. package/src/{share/semantic → semantic}/jsonld/organization.ts +6 -1
  237. package/src/{share/semantic → semantic}/jsonld/person.ts +6 -2
  238. package/src/{share/semantic → semantic}/jsonld/service.ts +6 -2
  239. package/src/semantic/jsonld/shared.ts +36 -0
  240. package/src/semantic/jsonld/tests/article.test.ts +89 -0
  241. package/src/semantic/jsonld/tests/breadcrumb.test.ts +62 -0
  242. package/src/semantic/jsonld/tests/collection-list.test.ts +39 -0
  243. package/src/semantic/jsonld/tests/faq.test.ts +60 -0
  244. package/src/semantic/jsonld/tests/initiative.test.ts +56 -0
  245. package/src/semantic/jsonld/tests/organization.test.ts +123 -0
  246. package/src/semantic/jsonld/tests/person.test.ts +89 -0
  247. package/src/semantic/jsonld/tests/service.test.ts +65 -0
  248. package/src/semantic/jsonld/tests/shared.test.ts +41 -0
  249. package/src/semantic/jsonld/tests/video.test.ts +84 -0
  250. package/src/semantic/jsonld/tests/webpage.test.ts +93 -0
  251. package/src/semantic/jsonld/tests/website.test.ts +27 -0
  252. package/src/semantic/jsonld/types.ts +24 -0
  253. package/src/{share/semantic → semantic}/jsonld/webpage.ts +6 -1
  254. package/src/semantic/jsonld/website.ts +32 -0
  255. package/src/{share/semantic → semantic}/jsonld.ts +6 -1
  256. package/src/{share/semantic → semantic}/llms.ts +41 -3
  257. package/src/{share/semantic → semantic}/models.ts +27 -38
  258. package/src/{share/semantic → semantic}/organization-profile.ts +3 -0
  259. package/src/{share/semantic → semantic}/page-builders/markdown-page.ts +6 -3
  260. package/src/{share/semantic → semantic}/page-utils.ts +6 -3
  261. package/src/semantic/tests/ai.test.ts +55 -0
  262. package/src/semantic/tests/block-extraction.test.ts +34 -0
  263. package/src/{share/tests/breadcrumbs.test.ts → semantic/tests/breadcrumbs-0229.test.ts} +1 -1
  264. package/src/semantic/tests/breadcrumbs.test.ts +127 -0
  265. package/src/{share → semantic}/tests/build-page-price-markers.test.ts +2 -2
  266. package/src/semantic/tests/build-page.test.ts +122 -0
  267. package/src/semantic/tests/business-projection.test.ts +367 -0
  268. package/src/semantic/tests/canonical-uri.test.ts +56 -0
  269. package/src/semantic/tests/extract.test.ts +209 -0
  270. package/src/semantic/tests/feed.test.ts +113 -0
  271. package/src/semantic/tests/freshness.pbt.test.ts +108 -0
  272. package/src/semantic/tests/helpers.ts +32 -0
  273. package/src/semantic/tests/ids.test.ts +118 -0
  274. package/src/{share/tests/image-sitemap.test.ts → semantic/tests/image-sitemap-0150.test.ts} +1 -1
  275. package/src/semantic/tests/image-sitemap.test.ts +109 -0
  276. package/src/{share → semantic}/tests/jsonld-service.test.ts +2 -2
  277. package/src/{share → semantic}/tests/jsonld-video.test.ts +3 -3
  278. package/src/{share → semantic}/tests/jsonld-webpage.test.ts +3 -3
  279. package/src/semantic/tests/jsonld.test.ts +61 -0
  280. package/src/{share → semantic}/tests/llms-0789.test.ts +2 -2
  281. package/src/semantic/tests/llms-policy.test.ts +60 -0
  282. package/src/semantic/tests/llms.test.ts +164 -0
  283. package/src/semantic/tests/markdown-hygiene.test.ts +72 -0
  284. package/src/semantic/tests/markdown-page.test.ts +97 -0
  285. package/src/{share → semantic}/tests/organization-jsonld.test.ts +3 -3
  286. package/src/semantic/tests/organization-profile.test.ts +107 -0
  287. package/src/{share/tests/output-projection.test.ts → semantic/tests/output-projection-0143.test.ts} +1 -1
  288. package/src/semantic/tests/output-projection.test.ts +77 -0
  289. package/src/semantic/tests/page-markdown.test.ts +98 -0
  290. package/src/semantic/tests/page-utils.test.ts +88 -0
  291. package/src/{share/tests/price-marker-resolver.test.ts → semantic/tests/price-marker-resolver-0767.test.ts} +2 -2
  292. package/src/semantic/tests/price-marker-resolver.test.ts +90 -0
  293. package/src/semantic/tests/project-claims.pbt.test.ts +60 -0
  294. package/src/semantic/tests/robots.test.ts +70 -0
  295. package/src/{share/semantic → semantic}/tests/split-sentences.test.ts +1 -1
  296. package/src/{share → semantic}/tests/twin-path.test.ts +1 -1
  297. package/src/semantic/tests/update-stamp.test.ts +102 -0
  298. package/src/signing/index.ts +13 -0
  299. package/src/signing/key.ts +139 -0
  300. package/src/signing/sign.ts +66 -0
  301. package/src/signing/types.ts +29 -0
  302. package/src/{share/slug → slug}/slug-url.ts +4 -1
  303. package/src/stack/run-tool.ts +108 -0
  304. package/src/stack/stack-checks.ts +124 -0
  305. package/src/stack/tests/run-tool.test.ts +138 -0
  306. package/src/stack/tests/stack-checks.test.ts +141 -0
  307. package/src/stack/tests/walk-files.test.ts +131 -0
  308. package/src/stack/walk-files.ts +114 -0
  309. package/src/surface/blueprint.ts +342 -66
  310. package/src/surface/decision-composer.ts +6 -1
  311. package/src/surface/geo.ts +6 -1
  312. package/src/surface/index.ts +11 -7
  313. package/src/surface/types.ts +2 -2
  314. package/src/surface/vitest.config.ts +1 -0
  315. package/src/tests/signing-core.test.ts +129 -0
  316. package/src/{share → text}/css-value-normalize.ts +6 -1
  317. package/src/text/string-utils.ts +24 -0
  318. package/src/{share → text}/tests/text-normalize.test.ts +5 -0
  319. package/src/{share → text}/text-normalize.ts +4 -3
  320. package/src/{share → text}/wrap-inline-numbers.ts +1 -1
  321. package/src/types/axiom-study.d.ts +36 -0
  322. package/src/types/hls-js-light.d.ts +21 -0
  323. package/src/types/qrcode-browser.d.ts +23 -0
  324. package/src/typography/fix.pbt.test.ts +208 -0
  325. package/src/typography/fix.ts +148 -0
  326. package/src/typography/index.ts +54 -0
  327. package/src/typography/locale-defaults.ts +97 -0
  328. package/src/typography/rules-tier1.test.ts +459 -0
  329. package/src/typography/rules-tier1.ts +925 -0
  330. package/src/typography/rules-tier2-locale.pbt.test.ts +190 -0
  331. package/src/typography/rules-tier2-locale.test.ts +286 -0
  332. package/src/typography/rules-tier2-locale.ts +399 -0
  333. package/src/typography/rules-tier2-structure.test.ts +330 -0
  334. package/src/typography/rules-tier2-structure.ts +378 -0
  335. package/src/typography/rules-tier3-advisory.test.ts +290 -0
  336. package/src/typography/rules-tier3-advisory.ts +239 -0
  337. package/src/typography/text-surface.test.ts +244 -0
  338. package/src/typography/text-surface.ts +448 -0
  339. package/src/index.ts +0 -14
  340. package/src/integration/port-barrel.ts +0 -105
  341. package/src/share/content/index.ts +0 -16
  342. package/src/share/content-discipline/index.ts +0 -14
  343. package/src/share/index.ts +0 -86
  344. package/src/share/legal/index.ts +0 -1
  345. package/src/share/redirects.ts +0 -54
  346. package/src/share/scripts/index.ts +0 -26
  347. package/src/share/semantic/jsonld/shared.ts +0 -31
  348. package/src/share/semantic/jsonld/types.ts +0 -18
  349. package/src/share/semantic/jsonld/website.ts +0 -27
  350. package/src/share/string-utils.ts +0 -19
  351. package/src/share/types/axiom-study.d.ts +0 -22
  352. package/src/share/types/hls-js-light.d.ts +0 -16
  353. package/src/share/types/qrcode-browser.d.ts +0 -18
  354. package/src/share/utility-registry.yaml +0 -36
  355. package/src/share/vitest.config.ts +0 -8
  356. package/src/surface/blueprint-schema.ts +0 -314
  357. package/src/surface/blueprint-types.ts +0 -256
  358. /package/src/{share/agent → agent}/api-catalog.ts +0 -0
  359. /package/src/{share/agent → agent}/capability.ts +0 -0
  360. /package/src/{share/agent → agent}/dns-aid.ts +0 -0
  361. /package/src/{share/agent → agent}/fleet-catalog.ts +0 -0
  362. /package/src/{share/agent → agent}/index.ts +0 -0
  363. /package/src/{share/agent → agent}/knowledge.ts +0 -0
  364. /package/src/{share/agent → agent}/mcp-card.ts +0 -0
  365. /package/src/{share/agent → agent}/omit-empty.ts +0 -0
  366. /package/src/{share/agent → agent}/openapi.ts +0 -0
  367. /package/src/{share/agent → agent}/proof.ts +0 -0
  368. /package/src/{share/agent → agent}/search.test.ts +0 -0
  369. /package/src/{share → attribution}/attribution-display.ts +0 -0
  370. /package/src/{share/scripts → client-scripts}/gsap-mountain-journey.ts +0 -0
  371. /package/src/{share/scripts → client-scripts}/gsap-parallax.ts +0 -0
  372. /package/src/{share/scripts → client-scripts}/gsap-reveal.ts +0 -0
  373. /package/src/{share/scripts → client-scripts}/gsap-stagger.ts +0 -0
  374. /package/src/{share/scripts → client-scripts}/live-photos.ts +0 -0
  375. /package/src/{share/scripts → client-scripts}/video-player.ts +0 -0
  376. /package/src/{share/content → content}/resolve-field-path.ts +0 -0
  377. /package/src/{share/content → content}/substitute-deep.ts +0 -0
  378. /package/src/{share → content}/tests/content-ref-index.test.ts +0 -0
  379. /package/src/{share/content-discipline → content-discipline}/types.ts +0 -0
  380. /package/src/{share → image-provider}/image-provider.ts +0 -0
  381. /package/src/{share/knowledge → knowledge}/claim.ts +0 -0
  382. /package/src/{share/knowledge → knowledge}/derivation.ts +0 -0
  383. /package/src/{share/knowledge → knowledge}/freshness.ts +0 -0
  384. /package/src/{share/knowledge → knowledge}/index.ts +0 -0
  385. /package/src/{share/knowledge → knowledge}/ledger.ts +0 -0
  386. /package/src/{share/knowledge → knowledge}/plan.ts +0 -0
  387. /package/src/{share/knowledge → knowledge}/source.ts +0 -0
  388. /package/src/{share/legal → legal}/translation-policy.ts +0 -0
  389. /package/src/{share/middleware → middleware}/language-redirect.ts +0 -0
  390. /package/src/{share/middleware → middleware}/tests/access-protection.test.ts +0 -0
  391. /package/src/{share → node}/fs/index.ts +0 -0
  392. /package/src/{share/tests/markdown-twin-provenance.test.ts → node/tests/markdown-twin-provenance-0613.test.ts} +0 -0
  393. /package/src/{share → offers}/offer-capacity.ts +0 -0
  394. /package/src/{share/onboarding-yaml/index.ts → onboarding/yaml.ts} +0 -0
  395. /package/src/{share → ontology}/tests/ontology-role-by-cosmic-name.test.ts +0 -0
  396. /package/src/{share/routes → routes}/tests/template-filter.test.ts +0 -0
  397. /package/src/{share/schemas → schemas}/claim-records.ts +0 -0
  398. /package/src/{share/schemas → schemas}/horizontal-align.ts +0 -0
  399. /package/src/{share/schemas → schemas}/icon-color.ts +0 -0
  400. /package/src/{share/schemas → schemas}/live-photo.ts +0 -0
  401. /package/src/{share/schemas → schemas}/material-credit.ts +0 -0
  402. /package/src/{share/schemas → schemas}/media.ts +0 -0
  403. /package/src/{share/schemas → schemas}/participant.ts +0 -0
  404. /package/src/{share/schemas → schemas}/print.ts +0 -0
  405. /package/src/{share/schemas → schemas}/section-background.ts +0 -0
  406. /package/src/{share/schemas → schemas}/section-body.ts +0 -0
  407. /package/src/{share/schemas → schemas}/section-cards.ts +0 -0
  408. /package/src/{share/schemas → schemas}/section-cta.ts +0 -0
  409. /package/src/{share/schemas → schemas}/section-header.ts +0 -0
  410. /package/src/{share/schemas → schemas}/section-image.ts +0 -0
  411. /package/src/{share/schemas → schemas}/section-motion.ts +0 -0
  412. /package/src/{share/schemas → schemas}/section-shell.ts +0 -0
  413. /package/src/{share/schemas → schemas}/section-stats.ts +0 -0
  414. /package/src/{share/schemas → schemas}/site-background.ts +0 -0
  415. /package/src/{share/semantic → semantic}/ai.ts +0 -0
  416. /package/src/{share/semantic → semantic}/block-extraction.ts +0 -0
  417. /package/src/{share/semantic → semantic}/breadcrumbs.ts +0 -0
  418. /package/src/{share/semantic → semantic}/build-page.ts +0 -0
  419. /package/src/{share/semantic → semantic}/feed.ts +0 -0
  420. /package/src/{share/semantic → semantic}/image-sitemap.ts +0 -0
  421. /package/src/{share/semantic → semantic}/jsonld/article.ts +0 -0
  422. /package/src/{share/semantic → semantic}/jsonld/collection-list.ts +0 -0
  423. /package/src/{share/semantic → semantic}/jsonld/video.ts +0 -0
  424. /package/src/{share/semantic → semantic}/llms-policy.ts +0 -0
  425. /package/src/{share/semantic → semantic}/markdown-hygiene.ts +0 -0
  426. /package/src/{share/semantic → semantic}/output-projection.ts +0 -0
  427. /package/src/{share/semantic → semantic}/page-markdown.ts +0 -0
  428. /package/src/{share/semantic → semantic}/price-marker-resolver.ts +0 -0
  429. /package/src/{share/semantic → semantic}/robots.ts +0 -0
  430. /package/src/{share/semantic → semantic}/update-stamp.ts +0 -0
  431. /package/src/{share/slug → slug}/heading-slugger.ts +0 -0
  432. /package/src/{share/slug → slug}/index.ts +0 -0
  433. /package/src/{share/slug → slug}/slug-id.ts +0 -0
  434. /package/src/{share/slug → slug}/strategies.ts +0 -0
  435. /package/src/{share/slug → slug}/tests/slug.test.ts +0 -0
  436. /package/src/{share → text}/tests/text-normalize.pbt.test.ts +0 -0
  437. /package/src/{share → text}/text-position.ts +0 -0
@@ -0,0 +1,316 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>
4
+ Canonical remediation catalog mapping ruleId to structured remediation patterns.
5
+ Consumed by diagnosticsResult() for auto-population and by remediation.hint.validate
6
+ for coverage checking (RFC-1027).
7
+ </purpose>
8
+ <non-goals>
9
+ <item>Does not own the Diagnostic schema — that lives in werkstatt-engine schemas.</item>
10
+ <item>Does not aggregate remediation hints into KernelExecutionReport — that is the engine's job.</item>
11
+ </non-goals>
12
+ </MODULE_CONTRACT>
13
+ <CHANGE_SUMMARY>
14
+ <item>RFC-1027: Create REMEDIATION_CATALOG with 30+ patterns for the most common ruleIds.</item>
15
+ </CHANGE_SUMMARY>
16
+ */
17
+
18
+ export interface RemediationPattern {
19
+ ruleId: string;
20
+ action: string;
21
+ template?: string;
22
+ docRef?: string;
23
+ targetFiles?: string[];
24
+ }
25
+
26
+ const REMEDIATION_ENTRIES: RemediationPattern[] = [
27
+ {
28
+ ruleId: "SEO-RUNTIME.CANONICAL-MISMATCH",
29
+ action:
30
+ "Ensure the canonical URL in the rendered HTML matches the production domain without language prefix for the default locale.",
31
+ docRef: "docs/authoring/site-composition.md",
32
+ targetFiles: ["src/layouts/**/*.astro"],
33
+ },
34
+ {
35
+ ruleId: "WORKSPACE.SURFACE.VALIDATE",
36
+ action:
37
+ "Fix surface validation errors by checking the surface block declarations against the schema.",
38
+ docRef: "docs/authoring/site-composition.md",
39
+ },
40
+ {
41
+ ruleId: "TEST.SIGNAL.POLICY.VALIDATE",
42
+ action:
43
+ "Align test signal declarations with the policy schema — check signal name, severity, and evidence path.",
44
+ docRef: "docs/agents/domain.md",
45
+ },
46
+ {
47
+ ruleId: "PUBLIC.ICONS.VALIDATE",
48
+ action:
49
+ "Replace invalid icon references with valid SurfaceLabels entries or remove the icon field.",
50
+ docRef: "docs/authoring/site-composition.md",
51
+ },
52
+ {
53
+ ruleId: "PARITY-SECTION-COUNT",
54
+ action: "Add or remove sections so the locale overlay matches the base locale section count.",
55
+ docRef: "docs/authoring/preventive-measures-parity-and-templates.md",
56
+ },
57
+ {
58
+ ruleId: "GEN-FILES-01",
59
+ action:
60
+ "Regenerate generated files by running the owning kernel command, then commit the updated output.",
61
+ docRef: "docs/authoring/generated-files-and-templates.md",
62
+ },
63
+ {
64
+ ruleId: "DEPS-GEN-01",
65
+ action:
66
+ "Run pnpm exec werkstatt run deps.peer.check to regenerate the peer dependency manifest.",
67
+ docRef: "docs/authoring/generated-files-and-templates.md",
68
+ },
69
+ {
70
+ ruleId: "AGC-01",
71
+ action:
72
+ "Fix the agent gate configuration — ensure the gate metadata matches the declared gate catalog.",
73
+ docRef: "docs/agents/domain.md",
74
+ },
75
+ {
76
+ ruleId: "WORKPIECE-IMPORTS-01",
77
+ action:
78
+ "Resolve the broken import in the workpiece — check the module path and ensure the package is installed.",
79
+ },
80
+ {
81
+ ruleId: "SNAP-01",
82
+ action:
83
+ "Regenerate the behavior snapshot by running pnpm exec werkstatt run behavior.snapshot.generate.",
84
+ },
85
+ {
86
+ ruleId: "CREG-04",
87
+ action:
88
+ "Fix the content regression — review the content diff and update the review.yaml before closing the mission.",
89
+ docRef: "docs/authoring/site-composition.md",
90
+ },
91
+ {
92
+ ruleId: "CREG-03",
93
+ action:
94
+ "Fix the content regression — ensure all locale overlays are consistent with the base content.",
95
+ docRef: "docs/authoring/preventive-measures-parity-and-templates.md",
96
+ },
97
+ {
98
+ ruleId: "CREG-01",
99
+ action:
100
+ "Fix the content regression — the base content was changed without a review.yaml. Run content.regression.review.generate.",
101
+ docRef: "docs/authoring/site-composition.md",
102
+ },
103
+ {
104
+ ruleId: "BRK-04",
105
+ action:
106
+ "Fix the bordbuch entry — ensure the hash chain is intact and the entry is properly signed.",
107
+ },
108
+ {
109
+ ruleId: "PROPS-01",
110
+ action:
111
+ "Fix the content props schema violation — check the frontmatter against the schema declaration.",
112
+ },
113
+ {
114
+ ruleId: "MAINTENANCE.DEBT.BASELINE.VALIDATE",
115
+ action:
116
+ "Regenerate the maintenance debt baseline by running pnpm exec werkstatt run maintenance.debt.baseline.generate.",
117
+ },
118
+ {
119
+ ruleId: "HDR-04",
120
+ action: "Fix the header configuration — ensure the header block matches the surface schema.",
121
+ docRef: "docs/authoring/site-composition.md",
122
+ },
123
+ {
124
+ ruleId: "HDR-02",
125
+ action: "Fix the header navigation — ensure all nav items have valid href and label.",
126
+ docRef: "docs/authoring/site-composition.md",
127
+ },
128
+ {
129
+ ruleId: "HDR-01",
130
+ action:
131
+ "Fix the header structure — ensure the header block is declared in the surface composition.",
132
+ docRef: "docs/authoring/site-composition.md",
133
+ },
134
+ {
135
+ ruleId: "GEN-EDIT-01",
136
+ action: "Do not hand-edit generated files. Modify the source template and regenerate.",
137
+ docRef: "docs/authoring/generated-files-and-templates.md",
138
+ },
139
+ {
140
+ ruleId: "DEPS-PEER-01",
141
+ action:
142
+ "Add the missing peer dependency to the package.json or remove the import that requires it.",
143
+ },
144
+ {
145
+ ruleId: "CW-EVID-01",
146
+ action:
147
+ "Fix the changelog evidence — ensure the evidence file exists and is referenced correctly.",
148
+ },
149
+ {
150
+ ruleId: "CMD-MAN-03",
151
+ action:
152
+ "Regenerate the command manifest by running pnpm exec werkstatt run command.manifest.generate.",
153
+ },
154
+ {
155
+ ruleId: "CI-LOCAL-05",
156
+ action:
157
+ "Fix the CI configuration — ensure the local CI workflow matches the pipeline definitions.",
158
+ },
159
+ {
160
+ ruleId: "AGS-05",
161
+ action:
162
+ "Fix the agent gate search configuration — ensure the search manifest is generated and accessible.",
163
+ docRef: "docs/agents/domain.md",
164
+ },
165
+ {
166
+ ruleId: "AGS-02",
167
+ action:
168
+ "Fix the agent gate search schema — ensure the search chunk text is within the max length.",
169
+ docRef: "docs/agents/domain.md",
170
+ },
171
+ {
172
+ ruleId: "AGO-01",
173
+ action: "Fix the agent gate output — ensure the gate output matches the declared schema.",
174
+ docRef: "docs/agents/domain.md",
175
+ },
176
+ {
177
+ ruleId: "AGK-03",
178
+ action:
179
+ "Fix the agent gate key — ensure the gate key is unique and matches the declared catalog.",
180
+ docRef: "docs/agents/domain.md",
181
+ },
182
+ {
183
+ ruleId: "WS-WRITE-02",
184
+ action:
185
+ "Fix the workspace write — ensure the write intent is declared and the path is within the workspace root.",
186
+ },
187
+ {
188
+ ruleId: "SUPPRESS-VAL-04",
189
+ action:
190
+ "Fix the suppression validation — ensure the suppression rule matches the declared schema.",
191
+ docRef: "docs/authoring/guide-suppression-matching.md",
192
+ },
193
+ {
194
+ ruleId: "ENV-CONTRACT-02",
195
+ action:
196
+ "Fix the environment contract — ensure the env variable is declared in .env.example and matches the contract.",
197
+ },
198
+ {
199
+ ruleId: "ENV-CONTRACT-04",
200
+ action:
201
+ "Fix the environment contract — ensure the env variable type matches the declared schema.",
202
+ },
203
+ {
204
+ ruleId: "ENV-CONTRACT-05",
205
+ action:
206
+ "Fix the environment contract — ensure the env variable is documented in the .env.example file.",
207
+ },
208
+ {
209
+ ruleId: "DEPLOY-SCRIPTS-03",
210
+ action:
211
+ "Fix the deploy script — ensure the script is executable and matches the deployment pipeline.",
212
+ },
213
+ {
214
+ ruleId: "FLEET-05",
215
+ action: "Fix the fleet configuration — ensure the fleet entry matches the declared schema.",
216
+ },
217
+ {
218
+ ruleId: "TYPO-NUM-01",
219
+ action:
220
+ "Replace English number format (1,234.56) with German format (1.234,56) in German text.",
221
+ docRef:
222
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
223
+ targetFiles: ["src/content/**/*.md"],
224
+ },
225
+ {
226
+ ruleId: "TYPO-NUM-02",
227
+ action:
228
+ "Replace dot-thousands format (1.234,56) with Ukrainian format using NNBSP (1\u202F234,56) in Ukrainian text.",
229
+ docRef:
230
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
231
+ targetFiles: ["src/content/**/*.md"],
232
+ },
233
+ {
234
+ ruleId: "TYPO-NUM-03",
235
+ action: "Replace regular space thousands separator with NNBSP (U+202F) in Ukrainian numbers.",
236
+ docRef:
237
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
238
+ targetFiles: ["src/content/**/*.md"],
239
+ },
240
+ {
241
+ ruleId: "TYPO-ABBR-01",
242
+ action: "Add the required trailing period to the abbreviation (e.g. Nr → Nr., usw → usw.).",
243
+ docRef:
244
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
245
+ targetFiles: ["src/content/**/*.md"],
246
+ },
247
+ {
248
+ ruleId: "TYPO-ABBR-02",
249
+ action:
250
+ "Add the required internal space in German multi-part abbreviations (e.g. z.B. → z. B., u.a. → u. a.).",
251
+ docRef:
252
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
253
+ targetFiles: ["src/content/**/*.md"],
254
+ },
255
+ {
256
+ ruleId: "TYPO-APOS-01",
257
+ action: "Replace curly apostrophe (U+2019) with straight apostrophe (') in Ukrainian text.",
258
+ docRef:
259
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
260
+ targetFiles: ["src/content/**/*.md"],
261
+ },
262
+ {
263
+ ruleId: "TYPO-APOS-02",
264
+ action:
265
+ "Replace modifier letter apostrophe (U+02BC) with straight apostrophe (') in Ukrainian text.",
266
+ docRef:
267
+ "docs/rfcs/rfc-1070-extend-typography-validate-with-tier-2-locale-rules-for-numbers-abbreviations-and-apostrophes.md",
268
+ targetFiles: ["src/content/**/*.md"],
269
+ },
270
+ {
271
+ ruleId: "TYPO-UNICODE-01",
272
+ action: "Remove zero-width characters (U+200B, U+200C, U+200D, U+FEFF) from the source text.",
273
+ docRef:
274
+ "docs/rfcs/rfc-1071-extend-typography-validate-with-tier-3-advisory-rules-for-unicode-hygiene-link-text-and-sentence-length.md",
275
+ targetFiles: ["src/content/**/*.md"],
276
+ },
277
+ {
278
+ ruleId: "TYPO-UNICODE-02",
279
+ action:
280
+ "Remove soft hyphen (U+00AD) from the source text — it is invisible in most editors but affects rendering.",
281
+ docRef:
282
+ "docs/rfcs/rfc-1071-extend-typography-validate-with-tier-3-advisory-rules-for-unicode-hygiene-link-text-and-sentence-length.md",
283
+ targetFiles: ["src/content/**/*.md"],
284
+ },
285
+ {
286
+ ruleId: "TYPO-LINK-01",
287
+ action:
288
+ "Replace bare URL link text with descriptive link text (e.g. [Learn more](url) instead of [https://example.com](url)).",
289
+ docRef:
290
+ "docs/rfcs/rfc-1071-extend-typography-validate-with-tier-3-advisory-rules-for-unicode-hygiene-link-text-and-sentence-length.md",
291
+ targetFiles: ["src/content/**/*.md"],
292
+ },
293
+ {
294
+ ruleId: "TYPO-LINK-02",
295
+ action:
296
+ "Replace generic link text (click here, hier klicken, тут, here, hier) with a descriptive phrase that indicates the link target.",
297
+ docRef:
298
+ "docs/rfcs/rfc-1071-extend-typography-validate-with-tier-3-advisory-rules-for-unicode-hygiene-link-text-and-sentence-length.md",
299
+ targetFiles: ["src/content/**/*.md"],
300
+ },
301
+ {
302
+ ruleId: "TYPO-SENT-01",
303
+ action: "Split the long sentence (more than 40 words) into shorter sentences for readability.",
304
+ docRef:
305
+ "docs/rfcs/rfc-1071-extend-typography-validate-with-tier-3-advisory-rules-for-unicode-hygiene-link-text-and-sentence-length.md",
306
+ targetFiles: ["src/content/**/*.md"],
307
+ },
308
+ ];
309
+
310
+ export const REMEDIATION_CATALOG: ReadonlyMap<string, RemediationPattern> = new Map(
311
+ REMEDIATION_ENTRIES.map((entry) => [entry.ruleId, entry]),
312
+ );
313
+
314
+ export function lookupRemediation(ruleId: string): RemediationPattern | undefined {
315
+ return REMEDIATION_CATALOG.get(ruleId);
316
+ }
@@ -25,7 +25,7 @@ utility instead of reimplementing the bracket-detection check inline.
25
25
  * that avoids false positives when routes are missing or not yet resolved.
26
26
  *
27
27
  * Canonical utility (RFC-0917). All `system.md` consumers
28
- * MUST import from `@warpgogol/werkstatt-shared/share/routes/template-filter`.
28
+ * MUST import from `@warpgogol/werkstatt-shared/routes/template-filter`.
29
29
  * Enforcement: `utility.provenance.validate` (RFC-0916).
30
30
  */
31
31
  export function hasPlaceholderRoutes(routes?: Record<string, string> | null): boolean {
@@ -13,7 +13,12 @@ become active when RFC-0027 activates the Growth Layer.
13
13
  </non-goals>
14
14
  </MODULE_CONTRACT>
15
15
  <CHANGE_SUMMARY>
16
- <item>Wave 1 (RFC-0026): Initial creation — RuntimeContext shape and EMPTY_RUNTIME_CONTEXT factory.</item>
16
+ <item>RFC-1097: step 6 — compass.migrate codemod run
17
+
18
+ Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
19
+ <item>RFC-1097: sweep — werkstatt-engine clean
20
+
21
+ Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
17
22
  </CHANGE_SUMMARY>
18
23
  */
19
24
 
@@ -56,7 +61,7 @@ export interface RuntimeContext {
56
61
  *
57
62
  * Usage in page routes:
58
63
  * ```ts
59
- * import { EMPTY_RUNTIME_CONTEXT } from "@warpgogol/werkstatt-shared/share";
64
+ * import { EMPTY_RUNTIME_CONTEXT } from "@warpgogol/werkstatt-shared/runtime";
60
65
  * const ctx = EMPTY_RUNTIME_CONTEXT(lang);
61
66
  * const page = await buildPage(entry, ctx);
62
67
  * ```
@@ -15,7 +15,7 @@ priority order derived from system.md.
15
15
  </CHANGE_SUMMARY>
16
16
  */
17
17
 
18
- import { deepMergeEntryData } from "./content/merge.ts";
18
+ import { deepMergeEntryData } from "../content/merge.ts";
19
19
 
20
20
  export interface SharedContextBlockLike {
21
21
  id?: string;
@@ -6,7 +6,7 @@ RFC-0212: the claim annotation surface. A per-record provenance sidecar
6
6
  into a CKL claim (RFC-0211) without touching the editable record body. Closed Zod
7
7
  schema so `content.claim.validate` can shape-check every sidecar.
8
8
 
9
- Moved from @warpgogol/business/schemas to @warpgogol/werkstatt-shared/share/schemas as part of RFC-0470
9
+ Moved from @warpgogol/business/schemas to @warpgogol/werkstatt-shared/schemas as part of RFC-0470
10
10
  (legacy business layer deletion). This is Content Knowledge Lifecycle (CKL)
11
11
  infrastructure, not business-layer code.
12
12
  </purpose>
@@ -17,7 +17,7 @@ infrastructure, not business-layer code.
17
17
  </MODULE_CONTRACT>
18
18
  <CHANGE_SUMMARY>
19
19
  <item>RFC-0212: initial claim annotation + record-claims schemas.</item>
20
- <item>RFC-0470: moved from @warpgogol/business/schemas/claims.ts to @warpgogol/werkstatt-shared/share/schemas/claims.ts.</item>
20
+ <item>RFC-0470: moved from @warpgogol/business/schemas/claims.ts to @warpgogol/werkstatt-shared/schemas/claims.ts.</item>
21
21
  </CHANGE_SUMMARY>
22
22
  */
23
23
 
@@ -11,7 +11,12 @@ schema validation for the RFC-0134 glass-first effects model.
11
11
  </non-goals>
12
12
  </MODULE_CONTRACT>
13
13
  <CHANGE_SUMMARY>
14
- <item>Introduces RFC-0134 composable effects contracts with glass as the first supported effect kind.</item>
14
+ <item>RFC-1097: step 6 — compass.migrate codemod run
15
+
16
+ Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
17
+ <item>RFC-1097: sweep — werkstatt-engine clean
18
+
19
+ Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
15
20
  </CHANGE_SUMMARY>
16
21
  */
17
22
 
@@ -12,7 +12,7 @@ copy-pasting. Canonical home per RFC-0033.
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>RFC-0033: Moved from app content schemas/features to @warpgogol/werkstatt-shared/share. Import switched from "astro/zod" to "zod" for framework neutrality.</item>
15
+ <item>RFC-0033: Moved from app content schemas/features to @warpgogol/werkstatt-shared/schemas. Import switched from "astro/zod" to "zod" for framework neutrality.</item>
16
16
  <item>RFC-0183: Added Feature Policy schema for policy embedded in existing RFC-0047 content domains.</item>
17
17
  </CHANGE_SUMMARY>
18
18
  */
@@ -1,10 +1,10 @@
1
1
  /*
2
2
  <MODULE_CONTRACT>
3
3
  <purpose>
4
- RFC-0264: barrel for the entire @warpgogol/werkstatt-shared/share schemas domain — base page schema,
4
+ RFC-0264: barrel for the entire @warpgogol/werkstatt-shared/schemas domain — base page schema,
5
5
  navigation, feature policy, and the RFC-0101..0106/0202/0210/0220/0231/0257
6
6
  canonical section-visual / section-content / media / material-credit / print
7
- contracts. Consumers should prefer `@warpgogol/werkstatt-shared/share/schemas` over the deprecated
7
+ contracts. Consumers should prefer `@warpgogol/werkstatt-shared/schemas` over the deprecated
8
8
  root barrel.
9
9
  </purpose>
10
10
  <non-goals>
@@ -12,7 +12,7 @@ root barrel.
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>RFC-0264: initial creation — aggregates the schemas/ domain for the @warpgogol/werkstatt-shared/share/schemas subpath.</item>
15
+ <item>RFC-0264: initial creation — aggregates the schemas/ domain for the @warpgogol/werkstatt-shared/schemas subpath.</item>
16
16
  </CHANGE_SUMMARY>
17
17
  */
18
18
 
@@ -8,7 +8,12 @@
8
8
  </non-goals>
9
9
  </MODULE_CONTRACT>
10
10
  <CHANGE_SUMMARY>
11
- <item>Implement RFC-0046: Move navigation schema to shared package with configurable groups.</item>
11
+ <item>RFC-1097: step 6 — compass.migrate codemod run
12
+
13
+ Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
14
+ <item>RFC-1097: sweep — werkstatt-engine clean
15
+
16
+ Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
12
17
  </CHANGE_SUMMARY>
13
18
  */
14
19
 
@@ -12,8 +12,12 @@ Depends only on the zod peer dependency; no Astro or app-specific imports.
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>Initial extraction from app content schemas/pages/base into packages/share.</item>
16
- <item>Switched import from "astro/zod" to "zod" so the package is Astro-agnostic.</item>
15
+ <item>RFC-1097: step 6 — compass.migrate codemod run
16
+
17
+ Mechanical v1 to v2 header migration across the workspace: 942 files rewritten — CHANGE_SUMMARY windows collapsed into history, forbidden v1 blocks stripped, KEY_DECISIONS seeded from @ai-invariant comments (5 files) or TODO placeholders (103 files), blocks reordered to canonical order.</item>
18
+ <item>RFC-1097: sweep — werkstatt-engine clean
19
+
20
+ Sweep batch 4: 73 Compass headers on headerless engine files (certification, component-runtime, isolation, evolution, testing), real KEY_DECISIONS on 75 files (kernel, cache, dht, swim, gitmesh, runtime), ~80 purpose expansions (CONTRACT-02/PURPOSE-02), non-goals on 13 CONTRACT-03 files, CS-07 history literal fix repo-wide (253 files). Policy: .template.ts/.template.astro excludedPaths. werkstatt-engine now 0 diagnostics.</item>
17
21
  </CHANGE_SUMMARY>
18
22
  */
19
23
 
@@ -10,7 +10,7 @@ This is a closed vocabulary used by check infrastructure, not PBP entity code.
10
10
  </non-goals>
11
11
  </MODULE_CONTRACT>
12
12
  <CHANGE_SUMMARY>
13
- <item>RFC-0470: moved PERSON_AFFILIATIONS from @warpgogol/business/schemas/person.ts to @warpgogol/werkstatt-shared/share/schemas/person.ts.</item>
13
+ <item>RFC-0470: moved PERSON_AFFILIATIONS from @warpgogol/business/schemas/person.ts to @warpgogol/werkstatt-shared/schemas/person.ts.</item>
14
14
  <item>RFC-0471: @warpgogol/business package deleted. Person records now live in a standalone `people` content collection.</item>
15
15
  </CHANGE_SUMMARY>
16
16
  */
@@ -2,7 +2,7 @@
2
2
  <MODULE_CONTRACT>
3
3
  <purpose>
4
4
  [RFC-0100 + RFC-0103] Canonical StandardListItem schema mirrored in
5
- @warpgogol/werkstatt-shared/share so body components can validate items without importing from
5
+ @warpgogol/werkstatt-shared/schemas so body components can validate items without importing from
6
6
  @warpgogol/werkstatt-site/ui (which would create a cyclic dependency). The same shape is
7
7
  re-exported by @warpgogol/werkstatt-site/ui/icons/icon-resolver for backwards compatibility.
8
8
  </purpose>
@@ -0,0 +1,52 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { claimSourceRefSchema } from "../claim-records.ts";
3
+
4
+ describe("claimSourceRefSchema", () => {
5
+ it("accepts a valid source ref", () => {
6
+ const ref = {
7
+ sourceId: "src-1",
8
+ url: "https://example.com",
9
+ title: "Example",
10
+ retrievedAt: "2026-01-01",
11
+ };
12
+ expect(claimSourceRefSchema.parse(ref)).toEqual(ref);
13
+ });
14
+
15
+ it("rejects missing required fields", () => {
16
+ expect(() => claimSourceRefSchema.parse({ sourceId: "src-1" })).toThrow();
17
+ });
18
+
19
+ it("rejects invalid URL", () => {
20
+ expect(() =>
21
+ claimSourceRefSchema.parse({
22
+ sourceId: "src-1",
23
+ url: "not-a-url",
24
+ title: "Example",
25
+ retrievedAt: "2026-01-01",
26
+ }),
27
+ ).toThrow();
28
+ });
29
+
30
+ it("rejects invalid date format", () => {
31
+ expect(() =>
32
+ claimSourceRefSchema.parse({
33
+ sourceId: "src-1",
34
+ url: "https://example.com",
35
+ title: "Example",
36
+ retrievedAt: "01/01/2026",
37
+ }),
38
+ ).toThrow();
39
+ });
40
+
41
+ it("rejects extra keys (strict)", () => {
42
+ expect(() =>
43
+ claimSourceRefSchema.parse({
44
+ sourceId: "src-1",
45
+ url: "https://example.com",
46
+ title: "Example",
47
+ retrievedAt: "2026-01-01",
48
+ extra: true,
49
+ }),
50
+ ).toThrow();
51
+ });
52
+ });
@@ -0,0 +1,23 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { recordClaimsSchema } from "../claims.ts";
3
+
4
+ describe("recordClaimsSchema", () => {
5
+ it("accepts empty record", () => {
6
+ expect(recordClaimsSchema.parse({})).toEqual({});
7
+ });
8
+
9
+ it("accepts a valid claims record", () => {
10
+ const claims = {
11
+ field1: {
12
+ provenance: "external",
13
+ asOf: "2026-01-01",
14
+ },
15
+ };
16
+ const result = recordClaimsSchema.safeParse(claims);
17
+ expect(result.success).toBe(true);
18
+ });
19
+
20
+ it("rejects non-object", () => {
21
+ expect(() => recordClaimsSchema.parse("not an object")).toThrow();
22
+ });
23
+ });
@@ -0,0 +1,116 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import {
3
+ namedEffectTargetSchema,
4
+ effectTargetSchema,
5
+ glassEffectSchema,
6
+ effectSchema,
7
+ EFFECT_KIND_META,
8
+ allowedKindsForTarget,
9
+ resolveEffectsForTarget,
10
+ hasEnabledGlassEffect,
11
+ } from "../effects.ts";
12
+ import type { EffectAssignment } from "../effects.ts";
13
+ import { z } from "zod";
14
+
15
+ type ParsedEffect = z.infer<typeof effectSchema>;
16
+
17
+ describe("namedEffectTargetSchema", () => {
18
+ it("accepts valid targets", () => {
19
+ expect(namedEffectTargetSchema.parse("section")).toBe("section");
20
+ expect(namedEffectTargetSchema.parse("heading")).toBe("heading");
21
+ });
22
+
23
+ it("rejects invalid target", () => {
24
+ expect(() => namedEffectTargetSchema.parse("unknown")).toThrow();
25
+ });
26
+ });
27
+
28
+ describe("effectTargetSchema", () => {
29
+ it("accepts slot targets", () => {
30
+ expect(effectTargetSchema.parse("slot:my-slot")).toBe("slot:my-slot");
31
+ });
32
+
33
+ it("rejects invalid slot format", () => {
34
+ expect(() => effectTargetSchema.parse("slot:")).toThrow();
35
+ });
36
+ });
37
+
38
+ describe("glassEffectSchema", () => {
39
+ it("accepts valid glass effect", () => {
40
+ const result = glassEffectSchema.safeParse({ kind: "glass", enabled: true });
41
+ expect(result.success).toBe(true);
42
+ });
43
+
44
+ it("rejects missing required fields", () => {
45
+ expect(() => glassEffectSchema.parse({ kind: "glass" })).toThrow();
46
+ });
47
+
48
+ it("rejects extra keys (strict)", () => {
49
+ expect(() => glassEffectSchema.parse({ kind: "glass", enabled: true, extra: true })).toThrow();
50
+ });
51
+ });
52
+
53
+ describe("effectSchema (discriminated union)", () => {
54
+ it("accepts glass effect", () => {
55
+ const result = effectSchema.safeParse({ kind: "glass", enabled: true });
56
+ expect(result.success).toBe(true);
57
+ });
58
+
59
+ it("accepts shadow effect", () => {
60
+ const result = effectSchema.safeParse({ kind: "shadow", enabled: true });
61
+ expect(result.success).toBe(true);
62
+ });
63
+
64
+ it("rejects unknown kind", () => {
65
+ expect(() => effectSchema.parse({ kind: "unknown", enabled: true })).toThrow();
66
+ });
67
+ });
68
+
69
+ describe("EFFECT_KIND_META", () => {
70
+ it("has metadata for all effect kinds", () => {
71
+ expect(EFFECT_KIND_META.glass.strategy).toBe("surface");
72
+ expect(EFFECT_KIND_META.shadow.strategy).toBe("text");
73
+ });
74
+ });
75
+
76
+ describe("allowedKindsForTarget", () => {
77
+ it("returns text kinds for heading", () => {
78
+ const kinds = allowedKindsForTarget("heading");
79
+ expect(kinds).toContain("shadow");
80
+ expect(kinds).not.toContain("glass");
81
+ });
82
+
83
+ it("returns glass-only default for body", () => {
84
+ const kinds = allowedKindsForTarget("body");
85
+ expect(kinds).toEqual(["glass"]);
86
+ });
87
+ });
88
+
89
+ describe("resolveEffectsForTarget", () => {
90
+ it("returns empty array when no assignments", () => {
91
+ expect(resolveEffectsForTarget(undefined, "section")).toEqual([]);
92
+ });
93
+
94
+ it("returns effects for matching target", () => {
95
+ const glassEffect: ParsedEffect = effectSchema.parse({ kind: "glass", enabled: true });
96
+ const assignments: EffectAssignment[] = [{ target: "section", stack: [glassEffect] }];
97
+ const effects = resolveEffectsForTarget(assignments, "section");
98
+ expect(effects).toHaveLength(1);
99
+ });
100
+ });
101
+
102
+ describe("hasEnabledGlassEffect", () => {
103
+ it("returns true when glass effect is enabled", () => {
104
+ const e: ParsedEffect = effectSchema.parse({ kind: "glass", enabled: true });
105
+ expect(hasEnabledGlassEffect([e])).toBe(true);
106
+ });
107
+
108
+ it("returns false when glass effect is disabled", () => {
109
+ const e: ParsedEffect = effectSchema.parse({ kind: "glass", enabled: false });
110
+ expect(hasEnabledGlassEffect([e])).toBe(false);
111
+ });
112
+
113
+ it("returns false when no effects", () => {
114
+ expect(hasEnabledGlassEffect(undefined)).toBe(false);
115
+ });
116
+ });