@warpgogol/werkstatt-shared 0.14.1 → 0.16.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 (451) hide show
  1. package/README.md +23 -15
  2. package/README.uk.md +1 -1
  3. package/package.json +534 -766
  4. package/src/{share/agent → agent}/api-catalog.ts +14 -1
  5. package/src/{share/agent → agent}/ard-catalog.ts +6 -1
  6. package/src/{share/agent → agent}/dns-aid.test.ts +2 -2
  7. package/src/agent/guidance.ts +52 -0
  8. package/src/agent/health.ts +68 -0
  9. package/src/{share/agent → agent}/index.ts +5 -1
  10. package/src/{share/agent → agent}/manifest.ts +83 -6
  11. package/src/{share/agent → agent}/openapi.ts +97 -4
  12. package/src/agent/receipt.ts +123 -0
  13. package/src/{share/agent → agent}/search.test.ts +3 -0
  14. package/src/{share/agent → agent}/search.ts +31 -5
  15. package/src/{share → agent}/tests/api-catalog.test.ts +8 -2
  16. package/src/{share → agent}/tests/ard-catalog.test.ts +11 -2
  17. package/src/{share → agent}/tests/capability.test.ts +1 -1
  18. package/src/{share → agent}/tests/fleet-catalog.test.ts +1 -1
  19. package/src/{share → agent}/tests/knowledge.test.ts +2 -2
  20. package/src/{share → agent}/tests/manifest.test.ts +72 -1
  21. package/src/{share → agent}/tests/mcp-card.test.ts +6 -2
  22. package/src/{share → agent}/tests/openapi.test.ts +119 -2
  23. package/src/{share → agent}/tests/proof.test.ts +1 -1
  24. package/src/{share → attribution}/material-credits.ts +4 -4
  25. package/src/{share → checks}/check-hints.ts +6 -1
  26. package/src/checks/index.ts +4 -1
  27. package/src/checks/lib/astro-site-url.ts +6 -1
  28. package/src/checks/lib/i18n.ts +14 -0
  29. package/src/checks/result-helpers.ts +2 -2
  30. package/src/checks/tests/remediation-auto-populate.test.ts +1 -1
  31. package/src/{share → client-scripts}/counter-utils.ts +6 -2
  32. package/src/{share/scripts → client-scripts}/external-link-qr.ts +11 -16
  33. package/src/{share/scripts → client-scripts}/external-links.ts +12 -1
  34. package/src/{share/scripts → client-scripts}/gsap-counter.ts +8 -3
  35. package/src/client-scripts/index.ts +35 -0
  36. package/src/{share/scripts → client-scripts}/inline-number-animation.ts +1 -1
  37. package/src/{share/scripts → client-scripts}/lenis.ts +6 -1
  38. package/src/{share/scripts → client-scripts}/lordicon.ts +6 -1
  39. package/src/{share/scripts → client-scripts}/orchestrator.ts +10 -1
  40. package/src/{share/scripts → client-scripts}/scheduler.ts +6 -1
  41. package/src/client-scripts/scroll-spy.ts +106 -0
  42. package/src/client-scripts/tests/orchestrator.test.ts +47 -0
  43. package/src/client-scripts/tests/scroll-spy.test.ts +204 -0
  44. package/src/{share/scripts → client-scripts/tests}/video-player.test.ts +51 -31
  45. package/src/component/contracts.ts +206 -0
  46. package/src/component/index.ts +13 -0
  47. package/src/{share → content}/content-reference.ts +3 -3
  48. package/src/{share/content → content}/entity-id.ts +6 -3
  49. package/src/content/index.ts +3 -0
  50. package/src/{share/content → content}/merge.ts +6 -1
  51. package/src/content/system-manifest.test.ts +107 -0
  52. package/src/content/system-manifest.ts +12 -94
  53. package/src/{share → content}/tests/resolve-field-path.test.ts +1 -1
  54. package/src/{share → content}/tests/substitute-deep.test.ts +1 -1
  55. package/src/content-discipline/index.ts +19 -0
  56. package/src/{share/content-discipline → content-discipline}/parsers.ts +2 -2
  57. package/src/{share/env.d.ts → env.d.ts} +6 -3
  58. package/src/fingerprint/canonical-json.ts +731 -0
  59. package/src/fingerprint/index.ts +14 -0
  60. package/src/fingerprint/primitives.ts +72 -0
  61. package/src/{share/i18n → i18n}/localization.ts +6 -2
  62. package/src/integration/adapters.ts +10 -71
  63. package/src/integration/dispatch.ts +1 -1
  64. package/src/integration/funnel.ts +6 -1
  65. package/src/integration/idempotency.ts +88 -0
  66. package/src/integration/index.ts +105 -4
  67. package/src/integration/lagebild-destination-adapter.ts +108 -0
  68. package/src/integration/lagebild-ingress.ts +7 -12
  69. package/src/integration/orchestration.ts +11 -10
  70. package/src/integration/tests/deliver-event.test.ts +1 -1
  71. package/src/integration/tests/dispatch.test.ts +4 -4
  72. package/src/integration/tests/hub-runtime.test.ts +22 -14
  73. package/src/integration/tests/idempotency.test.ts +81 -0
  74. package/src/integration/vitest.config.ts +1 -0
  75. package/src/kernel/desired-state.ts +227 -0
  76. package/src/kernel/diagnostic.ts +289 -0
  77. package/src/kernel/drift-guard.ts +166 -0
  78. package/src/kernel/fs-atomic.ts +131 -0
  79. package/src/kernel/index.ts +22 -0
  80. package/src/kernel/tests/drift-guard.test.ts +112 -0
  81. package/src/kernel/tests/fs-atomic.test.ts +150 -0
  82. package/src/kernel/tests/workpiece-env.test.ts +44 -0
  83. package/src/kernel/tests/workspace-io.test.ts +187 -0
  84. package/src/kernel/types.ts +518 -0
  85. package/src/kernel/workpiece-env.ts +48 -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 +11 -8
  95. package/src/{share/middleware → middleware}/language-redirect.ts +3 -0
  96. package/src/{share → node}/dev-props-validator.ts +6 -1
  97. package/src/{share → node}/import-scan.ts +23 -3
  98. package/src/{share → node}/semantic/derived-prices-loader.ts +4 -2
  99. package/src/{share → node}/semantic/markdown-twin-provenance.ts +1 -1
  100. package/src/{share/semantic → node}/tests/derived-prices-loader.test.ts +14 -1
  101. package/src/{share/semantic → node}/tests/markdown-twin-provenance.test.ts +1 -1
  102. package/src/observability/env-resolver.ts +6 -1
  103. package/src/observability/index.ts +14 -1
  104. package/src/observability/otlp-converter.ts +6 -1
  105. package/src/observability/otlp-transport.ts +6 -1
  106. package/src/observability/pipeline-log.ts +81 -0
  107. package/src/observability/pusher.ts +6 -1
  108. package/src/observability/redact.ts +6 -1
  109. package/src/observability/typed-refs.ts +6 -2
  110. package/src/observability/vitest.config.ts +1 -0
  111. package/src/{share → offers}/formula-eval.ts +3 -3
  112. package/src/{share → offers}/tests/formula-eval.test.ts +2 -2
  113. package/src/onboarding/index.ts +1 -0
  114. package/src/{share → onboarding}/tests/onboarding-yaml.test.ts +1 -1
  115. package/src/ontology/archetype-registry.ts +6 -1
  116. package/src/ontology/archetypes/index.json +33 -1
  117. package/src/ontology/archetypes/index.yaml +27 -1
  118. package/src/ontology/archetypes/sections/entity-grid.yaml +46 -0
  119. package/src/ontology/archetypes/sections/exit-diagram.yaml +43 -0
  120. package/src/ontology/biome-token-projection.ts +6 -1
  121. package/src/ontology/capabilities/lead.prepare.yaml +44 -0
  122. package/src/ontology/capabilities/lead.submit.yaml +20 -3
  123. package/src/ontology/cosmic/index.ts +6 -1
  124. package/src/ontology/cosmic/moon-catalog.ts +6 -1
  125. package/src/ontology/cosmic/planet-catalog.ts +6 -1
  126. package/src/ontology/cosmic/star-catalog.ts +6 -1
  127. package/src/ontology/enums.ts +6 -1
  128. package/src/ontology/external-surfaces/index.ts +1 -1
  129. package/src/ontology/index.ts +6 -2
  130. package/src/ontology/manifest.ts +7 -4
  131. package/src/ontology/operations/artifact-store.ts +45 -0
  132. package/src/ontology/operations/dht.ts +98 -0
  133. package/src/ontology/operations/handoff.ts +92 -0
  134. package/src/ontology/operations/index.ts +193 -1
  135. package/src/ontology/operations/leitstand.ts +99 -0
  136. package/src/ontology/operations/materialization.ts +90 -0
  137. package/src/ontology/operations/mission.ts +111 -0
  138. package/src/ontology/operations/naming-policy.ts +132 -0
  139. package/src/ontology/operations/notausgang.ts +108 -0
  140. package/src/ontology/operations/release.ts +121 -0
  141. package/src/ontology/operations/sternsystem.ts +192 -0
  142. package/src/ontology/operations/werkstatt.ts +48 -0
  143. package/src/ontology/schemas/biome.ts +7 -2
  144. package/src/ontology/schemas/capability.ts +56 -4
  145. package/src/ontology/schemas/constellation.ts +6 -1
  146. package/src/ontology/schemas/index.ts +6 -2
  147. package/src/ontology/schemas/manifest-resolver.ts +6 -1
  148. package/src/ontology/schemas/page-entry.ts +9 -5
  149. package/src/ontology/schemas/system/growth.ts +6 -1
  150. package/src/ontology/schemas/system/manifest.ts +40 -1
  151. package/src/ontology/schemas/system/page-output.ts +7 -6
  152. package/src/ontology/schemas/system/text.ts +15 -0
  153. package/src/ontology/schemas/system.ts +6 -2
  154. package/src/ontology/shared-section-props/body-fragments.ts +2 -0
  155. package/src/ontology/tests/sternsystem-owner.test.ts +1 -1
  156. package/src/ontology/vitest.config.ts +1 -0
  157. package/src/{share → page}/page.ts +13 -9
  158. package/src/{share → page}/tests/dev-props-validator.test.ts +1 -1
  159. package/src/{share → page}/tests/hero-section-numbering-parity.test.ts +1 -1
  160. package/src/passport/claim-sign.ts +120 -0
  161. package/src/passport/index.ts +9 -1
  162. package/src/passport/key-rotate.ts +10 -2
  163. package/src/passport/schema.ts +6 -1
  164. package/src/passport/sign.ts +8 -3
  165. package/src/passport/vitest.config.ts +1 -0
  166. package/src/pbt/index.test.ts +95 -0
  167. package/src/pbt/index.ts +251 -0
  168. package/src/plugin/plugin-contract.ts +2 -2
  169. package/src/{share → policy}/entitlement.ts +24 -4
  170. package/src/{share → policy}/feature-policy.ts +8 -3
  171. package/src/{share → policy}/visibility.ts +7 -2
  172. package/src/redirects/redirects.ts +117 -0
  173. package/src/{share → redirects/tests}/redirects.test.ts +1 -1
  174. package/src/remediation/remediation-catalog.ts +316 -0
  175. package/src/{share/routes → routes}/template-filter.ts +1 -1
  176. package/src/{share → runtime}/runtime-context.ts +7 -2
  177. package/src/{share → runtime}/shared-context.ts +1 -1
  178. package/src/{share/schemas → schemas}/claims.ts +2 -2
  179. package/src/{share/schemas → schemas}/effects.ts +6 -1
  180. package/src/{share/schemas → schemas}/features.ts +1 -1
  181. package/src/{share/schemas → schemas}/index.ts +3 -3
  182. package/src/{share/schemas → schemas}/navigation.ts +6 -1
  183. package/src/{share/schemas → schemas}/page-base.ts +6 -2
  184. package/src/{share/schemas → schemas}/person.ts +1 -1
  185. package/src/{share/schemas → schemas}/standard-list-item.ts +1 -1
  186. package/src/{share → sections}/rfc0042-utils.ts +1 -1
  187. package/src/{share/semantic → semantic}/block-extractors/index.ts +20 -1
  188. package/src/{share/semantic → semantic}/business-projection.ts +95 -1
  189. package/src/semantic/canonical-uri.ts +74 -0
  190. package/src/{share/semantic → semantic}/extract.ts +100 -1
  191. package/src/semantic/fact-extraction.test.ts +47 -0
  192. package/src/semantic/fact-extraction.ts +46 -0
  193. package/src/semantic/freshness.ts +67 -0
  194. package/src/{share/semantic → semantic}/ids.ts +6 -1
  195. package/src/{share/semantic → semantic}/index.ts +9 -2
  196. package/src/{share/semantic → semantic}/jsonld/breadcrumb.ts +6 -2
  197. package/src/{share/semantic → semantic}/jsonld/context.ts +6 -2
  198. package/src/{share/semantic → semantic}/jsonld/faq.ts +6 -2
  199. package/src/{share/semantic → semantic}/jsonld/initiative.ts +6 -1
  200. package/src/{share/semantic → semantic}/jsonld/organization.ts +6 -1
  201. package/src/{share/semantic → semantic}/jsonld/person.ts +6 -2
  202. package/src/{share/semantic → semantic}/jsonld/service.ts +6 -2
  203. package/src/semantic/jsonld/shared.ts +36 -0
  204. package/src/semantic/jsonld/types.ts +24 -0
  205. package/src/{share/semantic → semantic}/jsonld/webpage.ts +6 -1
  206. package/src/semantic/jsonld/website.ts +32 -0
  207. package/src/{share/semantic → semantic}/jsonld.ts +6 -1
  208. package/src/{share/semantic → semantic}/llms.ts +51 -5
  209. package/src/{share/semantic → semantic}/models.ts +26 -38
  210. package/src/{share/semantic → semantic}/organization-profile.ts +3 -0
  211. package/src/{share/semantic → semantic}/page-builders/markdown-page.ts +6 -3
  212. package/src/{share/semantic → semantic}/page-utils.ts +6 -3
  213. package/src/{share/tests/breadcrumbs.test.ts → semantic/tests/breadcrumbs-0229.test.ts} +1 -1
  214. package/src/{share → semantic}/tests/build-page-price-markers.test.ts +2 -2
  215. package/src/{share/semantic → semantic}/tests/business-projection.test.ts +179 -0
  216. package/src/semantic/tests/canonical-uri.test.ts +68 -0
  217. package/src/{share/semantic → semantic}/tests/extract.test.ts +83 -0
  218. package/src/semantic/tests/freshness.pbt.test.ts +108 -0
  219. package/src/{share/tests/image-sitemap.test.ts → semantic/tests/image-sitemap-0150.test.ts} +1 -1
  220. package/src/{share → semantic}/tests/jsonld-service.test.ts +2 -2
  221. package/src/{share → semantic}/tests/jsonld-video.test.ts +3 -3
  222. package/src/{share → semantic}/tests/jsonld-webpage.test.ts +3 -3
  223. package/src/{share → semantic}/tests/llms-0789.test.ts +2 -2
  224. package/src/{share/semantic → semantic}/tests/llms.test.ts +46 -0
  225. package/src/{share → semantic}/tests/organization-jsonld.test.ts +3 -3
  226. package/src/{share/tests/output-projection.test.ts → semantic/tests/output-projection-0143.test.ts} +1 -1
  227. package/src/{share/tests/price-marker-resolver.test.ts → semantic/tests/price-marker-resolver-0767.test.ts} +2 -2
  228. package/src/{share/semantic → semantic}/tests/price-marker-resolver.test.ts +4 -2
  229. package/src/semantic/tests/project-claims.pbt.test.ts +60 -0
  230. package/src/{share/semantic → semantic}/tests/split-sentences.test.ts +1 -1
  231. package/src/{share → semantic}/tests/twin-path.test.ts +1 -1
  232. package/src/signing/index.ts +15 -0
  233. package/src/signing/key.ts +139 -0
  234. package/src/signing/sign.ts +66 -0
  235. package/src/signing/types.ts +29 -0
  236. package/src/{share/slug → slug}/slug-url.ts +4 -1
  237. package/src/stack/run-tool.ts +106 -0
  238. package/src/stack/stack-checks.ts +124 -0
  239. package/src/stack/tests/run-tool.test.ts +138 -0
  240. package/src/stack/tests/stack-checks.test.ts +141 -0
  241. package/src/stack/tests/walk-files.test.ts +131 -0
  242. package/src/stack/walk-files.ts +114 -0
  243. package/src/surface/blueprint.ts +342 -66
  244. package/src/surface/decision-composer.ts +6 -1
  245. package/src/surface/geo.ts +6 -1
  246. package/src/surface/index.ts +11 -7
  247. package/src/surface/types.ts +2 -2
  248. package/src/surface/vitest.config.ts +1 -0
  249. package/src/tests/signing-core.test.ts +129 -0
  250. package/src/{share → text}/css-value-normalize.ts +6 -1
  251. package/src/text/string-utils.ts +24 -0
  252. package/src/{share → text}/tests/text-normalize.test.ts +5 -0
  253. package/src/{share → text}/text-normalize.ts +4 -3
  254. package/src/{share → text}/wrap-inline-numbers.ts +1 -1
  255. package/src/types/axiom-study.d.ts +36 -0
  256. package/src/types/hls-js-light.d.ts +21 -0
  257. package/src/types/qrcode-browser.d.ts +23 -0
  258. package/src/typography/fix.pbt.test.ts +208 -0
  259. package/src/typography/fix.ts +148 -0
  260. package/src/typography/index.ts +54 -0
  261. package/src/typography/locale-defaults.ts +97 -0
  262. package/src/typography/rules-tier1.test.ts +459 -0
  263. package/src/typography/rules-tier1.ts +925 -0
  264. package/src/typography/rules-tier2-locale.pbt.test.ts +190 -0
  265. package/src/typography/rules-tier2-locale.test.ts +286 -0
  266. package/src/typography/rules-tier2-locale.ts +399 -0
  267. package/src/typography/rules-tier2-structure.test.ts +330 -0
  268. package/src/typography/rules-tier2-structure.ts +378 -0
  269. package/src/typography/rules-tier3-advisory.test.ts +290 -0
  270. package/src/typography/rules-tier3-advisory.ts +239 -0
  271. package/src/typography/text-surface.test.ts +244 -0
  272. package/src/typography/text-surface.ts +448 -0
  273. package/src/index.ts +0 -14
  274. package/src/integration/port-barrel.ts +0 -105
  275. package/src/share/agent/tests/api-catalog.test.ts +0 -8
  276. package/src/share/agent/tests/ard-catalog.test.ts +0 -8
  277. package/src/share/agent/tests/capability.test.ts +0 -14
  278. package/src/share/agent/tests/fleet-catalog.test.ts +0 -15
  279. package/src/share/agent/tests/knowledge.test.ts +0 -20
  280. package/src/share/agent/tests/manifest.test.ts +0 -9
  281. package/src/share/agent/tests/mcp-card.test.ts +0 -8
  282. package/src/share/agent/tests/openapi.test.ts +0 -8
  283. package/src/share/agent/tests/proof.test.ts +0 -15
  284. package/src/share/content/index.ts +0 -16
  285. package/src/share/content-discipline/index.ts +0 -14
  286. package/src/share/index.ts +0 -86
  287. package/src/share/knowledge/tests/claim.test.ts +0 -11
  288. package/src/share/knowledge/tests/derivation.test.ts +0 -30
  289. package/src/share/knowledge/tests/freshness.test.ts +0 -18
  290. package/src/share/knowledge/tests/ledger.test.ts +0 -35
  291. package/src/share/knowledge/tests/plan.test.ts +0 -19
  292. package/src/share/knowledge/tests/source.test.ts +0 -19
  293. package/src/share/legal/index.ts +0 -1
  294. package/src/share/redirects.ts +0 -54
  295. package/src/share/remediation/remediation-catalog.ts +0 -196
  296. package/src/share/scripts/index.ts +0 -26
  297. package/src/share/scripts/tests/orchestrator.test.ts +0 -8
  298. package/src/share/semantic/jsonld/shared.ts +0 -31
  299. package/src/share/semantic/jsonld/types.ts +0 -19
  300. package/src/share/semantic/jsonld/website.ts +0 -27
  301. package/src/share/string-utils.ts +0 -19
  302. package/src/share/types/axiom-study.d.ts +0 -22
  303. package/src/share/types/hls-js-light.d.ts +0 -16
  304. package/src/share/types/qrcode-browser.d.ts +0 -18
  305. package/src/share/utility-registry.yaml +0 -50
  306. package/src/share/vitest.config.ts +0 -8
  307. package/src/surface/blueprint-schema.ts +0 -314
  308. package/src/surface/blueprint-types.ts +0 -256
  309. /package/src/{share/agent → agent}/capability.ts +0 -0
  310. /package/src/{share/agent → agent}/dns-aid.ts +0 -0
  311. /package/src/{share/agent → agent}/fleet-catalog.ts +0 -0
  312. /package/src/{share/agent → agent}/knowledge.ts +0 -0
  313. /package/src/{share/agent → agent}/mcp-card.ts +0 -0
  314. /package/src/{share/agent → agent}/omit-empty.ts +0 -0
  315. /package/src/{share/agent → agent}/proof.ts +0 -0
  316. /package/src/{share/agent → agent}/tests/omit-empty.test.ts +0 -0
  317. /package/src/{share → attribution}/attribution-display.ts +0 -0
  318. /package/src/{share/scripts → client-scripts}/gsap-mountain-journey.ts +0 -0
  319. /package/src/{share/scripts → client-scripts}/gsap-parallax.ts +0 -0
  320. /package/src/{share/scripts → client-scripts}/gsap-reveal.ts +0 -0
  321. /package/src/{share/scripts → client-scripts}/gsap-stagger.ts +0 -0
  322. /package/src/{share/scripts → client-scripts}/live-photos.ts +0 -0
  323. /package/src/{share/scripts → client-scripts}/tests/external-link-qr.test.ts +0 -0
  324. /package/src/{share/scripts → client-scripts}/tests/external-links.test.ts +0 -0
  325. /package/src/{share/scripts → client-scripts}/tests/gsap-counter.test.ts +0 -0
  326. /package/src/{share/scripts → client-scripts}/tests/gsap-mountain-journey.test.ts +0 -0
  327. /package/src/{share/scripts → client-scripts}/tests/gsap-parallax.test.ts +0 -0
  328. /package/src/{share/scripts → client-scripts}/tests/gsap-reveal.test.ts +0 -0
  329. /package/src/{share/scripts → client-scripts}/tests/gsap-stagger.test.ts +0 -0
  330. /package/src/{share/scripts → client-scripts}/tests/inline-number-animation.test.ts +0 -0
  331. /package/src/{share/scripts → client-scripts}/tests/lenis.test.ts +0 -0
  332. /package/src/{share/scripts → client-scripts}/tests/live-photos.test.ts +0 -0
  333. /package/src/{share/scripts → client-scripts}/tests/lordicon.test.ts +0 -0
  334. /package/src/{share/scripts → client-scripts}/tests/scheduler.test.ts +0 -0
  335. /package/src/{share/scripts → client-scripts}/video-player.ts +0 -0
  336. /package/src/{share/content → content}/resolve-field-path.ts +0 -0
  337. /package/src/{share/content → content}/substitute-deep.ts +0 -0
  338. /package/src/{share → content}/tests/content-ref-index.test.ts +0 -0
  339. /package/src/{share/content-discipline → content-discipline}/types.ts +0 -0
  340. /package/src/{share → image-provider}/image-provider.ts +0 -0
  341. /package/src/{share/knowledge → knowledge}/claim.ts +0 -0
  342. /package/src/{share/knowledge → knowledge}/derivation.ts +0 -0
  343. /package/src/{share/knowledge → knowledge}/freshness.ts +0 -0
  344. /package/src/{share/knowledge → knowledge}/index.ts +0 -0
  345. /package/src/{share/knowledge → knowledge}/ledger.ts +0 -0
  346. /package/src/{share/knowledge → knowledge}/plan.ts +0 -0
  347. /package/src/{share/knowledge → knowledge}/source.ts +0 -0
  348. /package/src/{share/legal → legal}/translation-policy.ts +0 -0
  349. /package/src/{share/middleware → middleware}/tests/access-protection.test.ts +0 -0
  350. /package/src/{share → node}/fs/index.ts +0 -0
  351. /package/src/{share/tests/markdown-twin-provenance.test.ts → node/tests/markdown-twin-provenance-0613.test.ts} +0 -0
  352. /package/src/{share → offers}/offer-capacity.ts +0 -0
  353. /package/src/{share/onboarding-yaml/index.ts → onboarding/yaml.ts} +0 -0
  354. /package/src/{share → ontology}/tests/ontology-role-by-cosmic-name.test.ts +0 -0
  355. /package/src/{share/routes → routes}/tests/template-filter.test.ts +0 -0
  356. /package/src/{share/schemas → schemas}/claim-records.ts +0 -0
  357. /package/src/{share/schemas → schemas}/horizontal-align.ts +0 -0
  358. /package/src/{share/schemas → schemas}/icon-color.ts +0 -0
  359. /package/src/{share/schemas → schemas}/live-photo.ts +0 -0
  360. /package/src/{share/schemas → schemas}/material-credit.ts +0 -0
  361. /package/src/{share/schemas → schemas}/media.ts +0 -0
  362. /package/src/{share/schemas → schemas}/participant.ts +0 -0
  363. /package/src/{share/schemas → schemas}/print.ts +0 -0
  364. /package/src/{share/schemas → schemas}/section-background.ts +0 -0
  365. /package/src/{share/schemas → schemas}/section-body.ts +0 -0
  366. /package/src/{share/schemas → schemas}/section-cards.ts +0 -0
  367. /package/src/{share/schemas → schemas}/section-cta.ts +0 -0
  368. /package/src/{share/schemas → schemas}/section-header.ts +0 -0
  369. /package/src/{share/schemas → schemas}/section-image.ts +0 -0
  370. /package/src/{share/schemas → schemas}/section-motion.ts +0 -0
  371. /package/src/{share/schemas → schemas}/section-shell.ts +0 -0
  372. /package/src/{share/schemas → schemas}/section-stats.ts +0 -0
  373. /package/src/{share/schemas → schemas}/site-background.ts +0 -0
  374. /package/src/{share/schemas → schemas}/tests/claim-records.test.ts +0 -0
  375. /package/src/{share/schemas → schemas}/tests/claims.test.ts +0 -0
  376. /package/src/{share/schemas → schemas}/tests/effects.test.ts +0 -0
  377. /package/src/{share/schemas → schemas}/tests/features.test.ts +0 -0
  378. /package/src/{share/schemas → schemas}/tests/horizontal-align.test.ts +0 -0
  379. /package/src/{share/schemas → schemas}/tests/icon-color.test.ts +0 -0
  380. /package/src/{share/schemas → schemas}/tests/live-photo.test.ts +0 -0
  381. /package/src/{share/schemas → schemas}/tests/material-credit.test.ts +0 -0
  382. /package/src/{share/schemas → schemas}/tests/media.test.ts +0 -0
  383. /package/src/{share/schemas → schemas}/tests/navigation.test.ts +0 -0
  384. /package/src/{share/schemas → schemas}/tests/page-base.test.ts +0 -0
  385. /package/src/{share/schemas → schemas}/tests/participant.test.ts +0 -0
  386. /package/src/{share/schemas → schemas}/tests/person.test.ts +0 -0
  387. /package/src/{share/schemas → schemas}/tests/print.test.ts +0 -0
  388. /package/src/{share/schemas → schemas}/tests/section-background.test.ts +0 -0
  389. /package/src/{share/schemas → schemas}/tests/section-body.test.ts +0 -0
  390. /package/src/{share/schemas → schemas}/tests/section-cards.test.ts +0 -0
  391. /package/src/{share/schemas → schemas}/tests/section-cta.test.ts +0 -0
  392. /package/src/{share/schemas → schemas}/tests/section-header.test.ts +0 -0
  393. /package/src/{share/schemas → schemas}/tests/section-image.test.ts +0 -0
  394. /package/src/{share/schemas → schemas}/tests/section-motion.test.ts +0 -0
  395. /package/src/{share/schemas → schemas}/tests/section-shell.test.ts +0 -0
  396. /package/src/{share/schemas → schemas}/tests/section-stats.test.ts +0 -0
  397. /package/src/{share/schemas → schemas}/tests/site-background.test.ts +0 -0
  398. /package/src/{share/schemas → schemas}/tests/standard-list-item.test.ts +0 -0
  399. /package/src/{share/semantic → semantic}/ai.ts +0 -0
  400. /package/src/{share/semantic → semantic}/block-extraction.ts +0 -0
  401. /package/src/{share/semantic → semantic}/breadcrumbs.ts +0 -0
  402. /package/src/{share/semantic → semantic}/build-page.ts +0 -0
  403. /package/src/{share/semantic → semantic}/feed.ts +0 -0
  404. /package/src/{share/semantic → semantic}/image-sitemap.ts +0 -0
  405. /package/src/{share/semantic → semantic}/jsonld/article.ts +0 -0
  406. /package/src/{share/semantic → semantic}/jsonld/collection-list.ts +0 -0
  407. /package/src/{share/semantic → semantic}/jsonld/tests/article.test.ts +0 -0
  408. /package/src/{share/semantic → semantic}/jsonld/tests/breadcrumb.test.ts +0 -0
  409. /package/src/{share/semantic → semantic}/jsonld/tests/collection-list.test.ts +0 -0
  410. /package/src/{share/semantic → semantic}/jsonld/tests/faq.test.ts +0 -0
  411. /package/src/{share/semantic → semantic}/jsonld/tests/initiative.test.ts +0 -0
  412. /package/src/{share/semantic → semantic}/jsonld/tests/organization.test.ts +0 -0
  413. /package/src/{share/semantic → semantic}/jsonld/tests/person.test.ts +0 -0
  414. /package/src/{share/semantic → semantic}/jsonld/tests/service.test.ts +0 -0
  415. /package/src/{share/semantic → semantic}/jsonld/tests/shared.test.ts +0 -0
  416. /package/src/{share/semantic → semantic}/jsonld/tests/video.test.ts +0 -0
  417. /package/src/{share/semantic → semantic}/jsonld/tests/webpage.test.ts +0 -0
  418. /package/src/{share/semantic → semantic}/jsonld/tests/website.test.ts +0 -0
  419. /package/src/{share/semantic → semantic}/jsonld/video.ts +0 -0
  420. /package/src/{share/semantic → semantic}/llms-policy.ts +0 -0
  421. /package/src/{share/semantic → semantic}/markdown-hygiene.ts +0 -0
  422. /package/src/{share/semantic → semantic}/output-projection.ts +0 -0
  423. /package/src/{share/semantic → semantic}/page-markdown.ts +0 -0
  424. /package/src/{share/semantic → semantic}/price-marker-resolver.ts +0 -0
  425. /package/src/{share/semantic → semantic}/robots.ts +0 -0
  426. /package/src/{share/semantic → semantic}/tests/ai.test.ts +0 -0
  427. /package/src/{share/semantic → semantic}/tests/block-extraction.test.ts +0 -0
  428. /package/src/{share/semantic → semantic}/tests/breadcrumbs.test.ts +0 -0
  429. /package/src/{share/semantic → semantic}/tests/build-page.test.ts +0 -0
  430. /package/src/{share/semantic → semantic}/tests/feed.test.ts +0 -0
  431. /package/src/{share/semantic → semantic}/tests/helpers.ts +0 -0
  432. /package/src/{share/semantic → semantic}/tests/ids.test.ts +0 -0
  433. /package/src/{share/semantic → semantic}/tests/image-sitemap.test.ts +0 -0
  434. /package/src/{share/semantic → semantic}/tests/jsonld.test.ts +0 -0
  435. /package/src/{share/semantic → semantic}/tests/llms-policy.test.ts +0 -0
  436. /package/src/{share/semantic → semantic}/tests/markdown-hygiene.test.ts +0 -0
  437. /package/src/{share/semantic → semantic}/tests/markdown-page.test.ts +0 -0
  438. /package/src/{share/semantic → semantic}/tests/organization-profile.test.ts +0 -0
  439. /package/src/{share/semantic → semantic}/tests/output-projection.test.ts +0 -0
  440. /package/src/{share/semantic → semantic}/tests/page-markdown.test.ts +0 -0
  441. /package/src/{share/semantic → semantic}/tests/page-utils.test.ts +0 -0
  442. /package/src/{share/semantic → semantic}/tests/robots.test.ts +0 -0
  443. /package/src/{share/semantic → semantic}/tests/update-stamp.test.ts +0 -0
  444. /package/src/{share/semantic → semantic}/update-stamp.ts +0 -0
  445. /package/src/{share/slug → slug}/heading-slugger.ts +0 -0
  446. /package/src/{share/slug → slug}/index.ts +0 -0
  447. /package/src/{share/slug → slug}/slug-id.ts +0 -0
  448. /package/src/{share/slug → slug}/strategies.ts +0 -0
  449. /package/src/{share/slug → slug}/tests/slug.test.ts +0 -0
  450. /package/src/{share → text}/tests/text-normalize.pbt.test.ts +0 -0
  451. /package/src/{share → text}/text-position.ts +0 -0
@@ -0,0 +1,48 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>
4
+ RFC-0362: Zod schemas for Werkstatt consistency primitives — lock files and
5
+ operation records. These schemas are the machine-checkable contract for all
6
+ Werkstatt lock and idempotency operations.
7
+ </purpose>
8
+ <non-goals>
9
+ <item>Do not perform file IO — pure shape only.</item>
10
+ <item>Do not define hash-chain Bordbuch format — that is RFC-0276/RFC-0355.</item>
11
+ </non-goals>
12
+ </MODULE_CONTRACT>
13
+ <CHANGE_SUMMARY>
14
+ <item>RFC-0362: initial Werkstatt schemas (WerkstattLock, WerkstattOperationRecord).</item>
15
+ </CHANGE_SUMMARY>
16
+ */
17
+
18
+ import { z } from "zod";
19
+
20
+ export const werkstattLockSchema = z.object({
21
+ schemaVersion: z.literal("1.0.0"),
22
+ scope: z.string().min(1),
23
+ operationId: z.string().min(1),
24
+ command: z.string().min(1),
25
+ owner: z.string().min(1),
26
+ pid: z.number().int(),
27
+ startedAt: z.string().datetime(),
28
+ heartbeatAt: z.string().datetime(),
29
+ timeoutSeconds: z.number().positive(),
30
+ depth: z.number().int().positive().optional(),
31
+ });
32
+
33
+ export const werkstattOperationRecordSchema = z.object({
34
+ schemaVersion: z.literal("1.0.0"),
35
+ operationId: z.string().min(1),
36
+ command: z.string().min(1),
37
+ scopes: z.array(z.string().min(1)),
38
+ state: z.enum(["started", "completed", "failed"]),
39
+ startedAt: z.string().datetime(),
40
+ completedAt: z.string().datetime().nullable(),
41
+ inputHash: z.string().min(1),
42
+ resultHash: z.string().nullable(),
43
+ artifacts: z.array(z.string()),
44
+ error: z.string().nullable(),
45
+ });
46
+
47
+ export type WerkstattLock = z.infer<typeof werkstattLockSchema>;
48
+ export type WerkstattOperationRecord = z.infer<typeof werkstattOperationRecordSchema>;
@@ -14,9 +14,14 @@ Applied via html[data-biome="<id>"] in the cascade layer stack.
14
14
  </non-goals>
15
15
  </MODULE_CONTRACT>
16
16
  <CHANGE_SUMMARY>
17
- <item>Wave 1 (RFC-0025): Initial creation.</item>
18
17
  <item>RFC-0071: Replace narrow token overrides with the extended biome visual-DNA contract.</item>
19
18
  <item>RFC-0371: Add optional <code>fonts</code> field for biome-driven Fontsource CSS imports.</item>
19
+ <item>RFC-1097: step 6 — compass.migrate codemod run
20
+
21
+ 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>
22
+ <item>RFC-1097: sweep — werkstatt-engine clean
23
+
24
+ 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>
20
25
  </CHANGE_SUMMARY>
21
26
  */
22
27
 
@@ -186,7 +191,7 @@ export const biomeConstraintsSchema = z
186
191
  .strict();
187
192
 
188
193
  // RFC-0114: site-background layer schema mirrored from
189
- // @warpgogol/werkstatt-shared/share/schemas/site-background. Defined locally to avoid a
194
+ // @warpgogol/werkstatt-shared/schemas/site-background. Defined locally to avoid a
190
195
  // cross-package import dependency (ontology must not depend on share).
191
196
  const biomeSiteBackgroundLayerSchema = z.discriminatedUnion("kind", [
192
197
  z
@@ -8,13 +8,15 @@ lossless projection to both OpenAPI (RFC-0289) and MCP tool schemas (RFC-0290).
8
8
  </purpose>
9
9
  <non-goals>
10
10
  <item>Do not resolve entitlements or active-capability logic here — that is
11
- @warpgogol/werkstatt-shared/share/agent/capability.ts (resolveActiveCapabilities).</item>
11
+ @warpgogol/werkstatt-shared/agent/capability.ts (resolveActiveCapabilities).</item>
12
12
  <item>Do not widen the JSON-Schema subset beyond what OpenAPI + MCP both
13
13
  accept verbatim — widening requires an RFC amending RFC-0288.</item>
14
14
  </non-goals>
15
15
  </MODULE_CONTRACT>
16
16
  <CHANGE_SUMMARY>
17
17
  <item>RFC-0288: initial capability record schema.</item>
18
+ <item>RFC-1112: add sideEffect ("write"|"none"); integration + humanEquivalent become optional and are required unless sideEffect is "none".</item>
19
+ <item>RFC-1115: add optional agentGuidance block (sideEffect, whenToUse, whenNotToUse, retrySemantics) rendered into MCP tool descriptions and OpenAPI operation docs.</item>
18
20
  </CHANGE_SUMMARY>
19
21
  */
20
22
 
@@ -80,6 +82,22 @@ const capabilityLimitsSchema = z
80
82
  })
81
83
  .strict();
82
84
 
85
+ /**
86
+ * RFC-1115: model-oriented guidance rendered into MCP tool descriptions and
87
+ * OpenAPI operation docs. `sideEffect` restates the record-level sideEffect so
88
+ * the guidance block is self-contained — a superRefine keeps them consistent.
89
+ * `retrySemantics` describes the RFC-1112 Idempotency-Key contract
90
+ * descriptively; the mechanism stays owned by RFC-1112.
91
+ */
92
+ const capabilityAgentGuidanceSchema = z
93
+ .object({
94
+ sideEffect: z.enum(["write", "none"]),
95
+ whenToUse: z.string().min(1),
96
+ whenNotToUse: z.string().min(1).optional(),
97
+ retrySemantics: z.string().min(1).optional(),
98
+ })
99
+ .strict();
100
+
83
101
  /** RFC-0288: one capability catalog record (packages/werkstatt-site/src/domain/ontology/capabilities/<id>.yaml). */
84
102
  export const capabilityRecordSchema = z
85
103
  .object({
@@ -90,15 +108,49 @@ export const capabilityRecordSchema = z
90
108
  /** Integer; bump on breaking input/output change (by RFC). */
91
109
  version: z.number().int().positive(),
92
110
  kind: z.literal("action"),
111
+ /**
112
+ * RFC-1112: "write" (default when absent) dispatches an IntegrationEvent;
113
+ * "none" marks a side-effect-free preview that validates input and returns
114
+ * a draftId without dispatching.
115
+ */
116
+ sideEffect: z.enum(["write", "none"]).optional(),
93
117
  title: localizedStringSchema,
94
118
  description: localizedStringSchema,
95
119
  input: capabilityInputOutputSchema,
96
120
  output: capabilityInputOutputSchema,
97
- integration: capabilityIntegrationSchema,
121
+ integration: capabilityIntegrationSchema.optional(),
98
122
  requires: capabilityRequiresSchema,
99
- humanEquivalent: capabilityHumanEquivalentSchema,
123
+ humanEquivalent: capabilityHumanEquivalentSchema.optional(),
100
124
  limits: capabilityLimitsSchema,
125
+ agentGuidance: capabilityAgentGuidanceSchema.optional(),
101
126
  })
102
- .strict();
127
+ .strict()
128
+ .superRefine((record, ctx) => {
129
+ // RFC-1115: agentGuidance.sideEffect must restate the effective record-level
130
+ // sideEffect (absent means "write") — contradictory declarations are drift.
131
+ const effectiveSideEffect = record.sideEffect ?? "write";
132
+ if (record.agentGuidance && record.agentGuidance.sideEffect !== effectiveSideEffect) {
133
+ ctx.addIssue({
134
+ code: "custom",
135
+ path: ["agentGuidance", "sideEffect"],
136
+ message: `must match the record-level sideEffect ("${effectiveSideEffect}")`,
137
+ });
138
+ }
139
+ if (record.sideEffect === "none") return;
140
+ if (!record.integration) {
141
+ ctx.addIssue({
142
+ code: "custom",
143
+ path: ["integration"],
144
+ message: 'required unless sideEffect is "none"',
145
+ });
146
+ }
147
+ if (!record.humanEquivalent) {
148
+ ctx.addIssue({
149
+ code: "custom",
150
+ path: ["humanEquivalent"],
151
+ message: 'required unless sideEffect is "none"',
152
+ });
153
+ }
154
+ });
103
155
 
104
156
  export type CapabilityRecord = z.infer<typeof capabilityRecordSchema>;
@@ -12,7 +12,12 @@ section archetypes that forms a proven page structure for a given intent
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>Wave 1 (RFC-0025): Initial creation.</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>
16
21
  </CHANGE_SUMMARY>
17
22
  */
18
23
 
@@ -9,10 +9,14 @@ Re-exports the Constellation, Biome, SiteFamily, and SystemManifest schemas and
9
9
  </non-goals>
10
10
  </MODULE_CONTRACT>
11
11
  <CHANGE_SUMMARY>
12
- <item>Wave 1 (RFC-0025): Initial creation.</item>
13
12
  <item>RFC-0071: Re-export site-family contract and expanded biome surface.</item>
14
13
  <item>RFC-0371: Re-export biome font entry schema and types.</item>
15
- <item>Architecture review 2026-07-10: extracted platform operations schemas to @warpgogol/werkstatt-shared/ontology/operations; re-export getSectionPropsSchema from manifest-resolver.ts.</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>
16
20
  </CHANGE_SUMMARY>
17
21
  */
18
22
 
@@ -11,8 +11,13 @@ filesystem I/O, YAML parsing, and fragment composition behind one interface.
11
11
  </non-goals>
12
12
  </MODULE_CONTRACT>
13
13
  <CHANGE_SUMMARY>
14
- <item>Architecture review 2026-07-10: extracted from page-entry.ts to separate declarative schemas from runtime I/O.</item>
15
14
  <item>RFC-0484: suppress console.debug for directories without manifests — group directories are expected to have none.</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>
16
21
  </CHANGE_SUMMARY>
17
22
  */
18
23
 
@@ -6,14 +6,18 @@ Every page .md file under apps/<app>/src/content/pages/ must conform to PageEntr
6
6
  Exports BlockEntrySchema and PageEntrySchema — pure declarative schemas, no I/O.
7
7
  </purpose>
8
8
  <non-goals>
9
- <item>Do not implement the buildPage pipeline here — that lives in @warpgogol/werkstatt-shared/share/page.</item>
9
+ <item>Do not implement the buildPage pipeline here — that lives in @warpgogol/werkstatt-shared/page.</item>
10
10
  <item>Do not parse YAML here; callers provide parsed objects to schema.parse().</item>
11
11
  <item>Do not validate cross-system.yaml references — that is page.block.validate's job.</item>
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>Wave 1 (RFC-0026): Initial creation.</item>
16
- <item>Architecture review 2026-07-10: extracted getSectionPropsSchema into manifest-resolver.ts — page-entry.ts is now pure declarative schemas with no I/O.</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
 
@@ -35,8 +39,8 @@ const PRINT_REGIONS = [
35
39
  ] as const;
36
40
 
37
41
  // ---------------------------------------------------------------------------
38
- // VisibilityExprSchema (re-declared here to avoid cross-package dep on @warpgogol/werkstatt-shared/share)
39
- // page.block.validate uses the canonical one from @warpgogol/werkstatt-shared/share;
42
+ // VisibilityExprSchema (re-declared here to avoid cross-package dep on @warpgogol/werkstatt-shared/page)
43
+ // page.block.validate uses the canonical one from @warpgogol/werkstatt-shared/page;
40
44
  // the schema here is for Astro content-collection integration.
41
45
  // ---------------------------------------------------------------------------
42
46
 
@@ -8,7 +8,12 @@ Exports growthVendorSchema as the canonical vendor config shape, reused by @warp
8
8
  </MODULE_CONTRACT>
9
9
  <CHANGE_SUMMARY>
10
10
  <item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
11
- <item>Architecture review 2026-07-10: Extracted growthVendorSchema so @warpgogol/werkstatt-site/growth/config.ts can import it instead of duplicating the shape.</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
 
@@ -9,6 +9,9 @@
9
9
  <item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
10
10
  <item>RFC-0377: added optional `audience` field to the per-page pin schema.</item>
11
11
  <item>ADR-0062: added `ctaTarget` to identity, `sectionNav` + `ctaTarget` to page pins, created `systemCollectionSchema` for content collection typing.</item>
12
+ <item>RFC-1106: step 2 — extend systemManifestSchema
13
+
14
+ Add identity.legal (RFC-0096) and seo.anchorText.extraStopPhrases (RFC-0911) to systemManifestSchema — the two interface-only fields with living consumers. No dead fields found: all other interface fields already exist in the schema.</item>
12
15
  </CHANGE_SUMMARY>
13
16
  */
14
17
 
@@ -16,7 +19,7 @@ import { z } from "zod";
16
19
 
17
20
  import { systemSharedContextSchema, systemGrowthSchema } from "./growth.ts";
18
21
  import { systemReleaseSchema } from "./release.ts";
19
- import { systemTextSchema } from "./text.ts";
22
+ import { systemTextSchema, systemTypographySchema } from "./text.ts";
20
23
  import { systemIntegrationsSchema } from "./integrations.ts";
21
24
  import { systemVerificationSchema } from "./verification.ts";
22
25
  import { semanticPageTypeSchema, articleMetadataSchema, pageOutputSchema } from "./page-output.ts";
@@ -87,6 +90,18 @@ export const systemManifestSchema = z.object({
87
90
  * Used by resolve-route.ts to populate `ctaTarget` in PageRouteData.
88
91
  */
89
92
  ctaTarget: z.string().min(1).optional(),
93
+
94
+ /**
95
+ * RFC-0096: Operator details consumed by legal.scaffold to fill
96
+ * Impressum / Datenschutz stubs.
97
+ */
98
+ legal: z
99
+ .object({
100
+ responsibleName: z.string().min(1).optional(),
101
+ address: z.string().min(1).optional(),
102
+ email: z.string().min(1).optional(),
103
+ })
104
+ .optional(),
90
105
  }),
91
106
 
92
107
  /**
@@ -294,6 +309,12 @@ export const systemManifestSchema = z.object({
294
309
  */
295
310
  text: systemTextSchema.optional(),
296
311
 
312
+ /**
313
+ * RFC-1070: typography validator configuration. Allowed tokens and
314
+ * per-locale abbreviation overrides. Client-writable.
315
+ */
316
+ typography: systemTypographySchema.optional(),
317
+
297
318
  /**
298
319
  * RFC-0169: subscription billing binding. `billing.stripeCustomerId` is the
299
320
  * Stripe customer whose active Entitlements gate this site's paid modules.
@@ -494,6 +515,8 @@ export const systemManifestSchema = z.object({
494
515
  * `responsibilityBlock.swapOrder` is true, the page handler swaps
495
516
  * primaryItems/secondaryItems and labels.primary/labels.secondary at
496
517
  * render time. Default false = render as authored in content.
518
+ * RFC-1087: `codeHighlightTheme` selects the Shiki theme for build-time
519
+ * syntax highlighting. Default "github-light" when absent.
497
520
  */
498
521
  ui: z
499
522
  .object({
@@ -502,6 +525,7 @@ export const systemManifestSchema = z.object({
502
525
  swapOrder: z.boolean().optional().default(false),
503
526
  })
504
527
  .optional(),
528
+ codeHighlightTheme: z.string().min(1).optional(),
505
529
  })
506
530
  .optional(),
507
531
 
@@ -511,6 +535,21 @@ export const systemManifestSchema = z.object({
511
535
  * When absent, search.verification.validate emits SEARCH-VERIFY-01.
512
536
  */
513
537
  verification: systemVerificationSchema.optional(),
538
+
539
+ /**
540
+ * RFC-0911: SEO validator configuration extension point.
541
+ * Sites extend the built-in de/uk anchor-text stop-list via
542
+ * `seo.anchorText.extraStopPhrases` (lang → phrases).
543
+ */
544
+ seo: z
545
+ .object({
546
+ anchorText: z
547
+ .object({
548
+ extraStopPhrases: z.record(z.string(), z.array(z.string())).optional(),
549
+ })
550
+ .optional(),
551
+ })
552
+ .optional(),
514
553
  });
515
554
 
516
555
  export type SystemManifest = z.infer<typeof systemManifestSchema>;
@@ -7,6 +7,9 @@
7
7
  </MODULE_CONTRACT>
8
8
  <CHANGE_SUMMARY>
9
9
  <item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
10
+ <item>RFC-1106: step 4 — single-source SemanticPageType
11
+
12
+ semanticPageTypeSchema (ontology/schemas/system/page-output.ts) is now the sole declaration of the closed DNA-19 vocabulary. semantic/models.ts derives the type via z.infer and SEMANTIC_PAGE_TYPES via schema.options — the hand-synced union/array and stale circular-dependency comments are deleted.</item>
10
13
  </CHANGE_SUMMARY>
11
14
  */
12
15
 
@@ -15,13 +18,11 @@ import { z } from "zod";
15
18
  /**
16
19
  * RFC-0042/RFC-0050: the semantic role of a page. Drives semantic model
17
20
  * construction and the default llms inclusion depth. Mirrors
18
- * SemanticPageType in @warpgogol/werkstatt-shared/share/semantic.
21
+ * SemanticPageType in @warpgogol/werkstatt-shared/semantic.
19
22
  */
20
- // NOTE: This enum is mirrored by the `SemanticPageType` union in
21
- // `@warpgogol/werkstatt-shared/share/src/semantic/models.ts`. The Zod schema here is the runtime
22
- // validator for `system.md`; the TypeScript union in `share` is the
23
- // compile-time contract. They are kept in sync manually to avoid a circular
24
- // dependency between `ontology` and `share`.
23
+ // RFC-1106: this schema is the sole declaration of the SemanticPageType closed
24
+ // vocabulary (DNA-19). `semantic/models.ts` derives the type and the runtime
25
+ // array from it — do not declare a parallel union elsewhere.
25
26
  export const semanticPageTypeSchema = z.enum([
26
27
  "home",
27
28
  "about",
@@ -7,6 +7,7 @@
7
7
  </MODULE_CONTRACT>
8
8
  <CHANGE_SUMMARY>
9
9
  <item>RFC-0303 Phase 3: extracted from schemas/system.ts as part of the domain split.</item>
10
+ <item>RFC-1070: added systemTypographySchema for typography validator configuration.</item>
10
11
  </CHANGE_SUMMARY>
11
12
  */
12
13
 
@@ -49,6 +50,20 @@ export const systemTextNormalizeSchema = z
49
50
  })
50
51
  .strict();
51
52
 
53
+ /**
54
+ * The `typography` block in system.yaml (RFC-1070). Controls typography validator
55
+ * configuration: allowed tokens and per-locale abbreviation overrides.
56
+ * CLIENT-WRITABLE.
57
+ */
58
+ export const systemTypographySchema = z
59
+ .object({
60
+ /** Additional allowed tokens exempt from TYPO-CASE-01 and TYPO-APOS rules. */
61
+ allowedTokens: z.array(z.string()).optional(),
62
+ /** Per-locale abbreviation overrides. Merged into built-in locale defaults. */
63
+ abbreviations: z.record(z.string(), z.array(z.string())).optional(),
64
+ })
65
+ .strict();
66
+
52
67
  export const systemTextSchema = z
53
68
  .object({
54
69
  normalize: systemTextNormalizeSchema.optional(),
@@ -13,10 +13,14 @@ Stored at apps/<app-slug>/system.yaml.
13
13
  </non-goals>
14
14
  </MODULE_CONTRACT>
15
15
  <CHANGE_SUMMARY>
16
- <item>Wave 1 (RFC-0025): Initial creation.</item>
17
- <item>Wave 1 (RFC-0027): Added growth block — vendor adapter binding, active funnels, active experiments.</item>
18
16
  <item>RFC-0328: Added "legal" to semanticPageTypeSchema.</item>
19
17
  <item>RFC-0303 Phase 3: split the flat 822-line file into sub-modules under system/; this file is now the re-export shim.</item>
18
+ <item>RFC-1097: step 6 — compass.migrate codemod run
19
+
20
+ 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>
21
+ <item>RFC-1097: sweep — werkstatt-engine clean
22
+
23
+ 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>
20
24
  </CHANGE_SUMMARY>
21
25
  */
22
26
 
@@ -33,6 +33,8 @@ export const BODY_LIST_FRAGMENT: JsonSchemaFragment = {
33
33
  note: { type: "string" },
34
34
  iconColor: ICON_COLOR_ENUM,
35
35
  align: ALIGN_ENUM,
36
+ itemAlign: ALIGN_ENUM,
37
+ hideMarkers: { type: "boolean" },
36
38
  effects: EFFECTS_ARRAY_SCHEMA,
37
39
  },
38
40
  },
@@ -1,5 +1,5 @@
1
1
  import { test, expect, describe } from "vitest";
2
- import { systemConfigSchema } from "@warpgogol/werkstatt-engine/schemas";
2
+ import { systemConfigSchema } from "@warpgogol/werkstatt-shared/ontology/operations";
3
3
 
4
4
  const validBaseEntry = {
5
5
  schemaVersion: "system-config/v1",
@@ -3,6 +3,7 @@ import { defineConfig } from "vitest/config";
3
3
  export default defineConfig({
4
4
  test: {
5
5
  environment: "node",
6
+ testTimeout: 30_000,
6
7
  include: ["src/**/*.test.ts"],
7
8
  },
8
9
  });
@@ -11,17 +11,21 @@ pipeline for each block defined in a page's content.
11
11
  </non-goals>
12
12
  </MODULE_CONTRACT>
13
13
  <CHANGE_SUMMARY>
14
- <item>Wave 1 (RFC-0026): Initial creation — ResolvedPage/ResolvedBlock types and buildPage pipeline.</item>
15
- <item>Moved SectionProps into shared package for cross-app consumption.</item>
16
- <item>RFC-0091: PLANET_IMPORT_PATHS and BLOCK_TYPE_TO_COSMIC_NAME now derived from registry; import from @warpgogol/werkstatt-shared/ontology/archetypes instead of literal constants.</item>
17
14
  <item>RFC-0262: add the optional BuildPageOptions.validateProps dev-time fail-fast hook, called once per resolved shell and content block.</item>
18
15
  <item>RFC-0263: hideSectionNumber injection now keyed off registry-derived roleByCosmicName[planetName] === "hero" instead of the hardcoded UNNUMBERED_HERO_PLANETS literal set (deleted).</item>
19
- <item>RFC-0264: relocated SectionProps/SectionPageOverride here from the @warpgogol/werkstatt-shared/share root barrel (its natural domain owner); consumers now import from @warpgogol/werkstatt-shared/share/page.</item>
16
+ <item>RFC-0264: relocated SectionProps/SectionPageOverride here from the @warpgogol/werkstatt-shared root barrel (its natural domain owner); consumers now import from @warpgogol/werkstatt-shared/page.</item>
17
+ <item>RFC-1097: step 6 — compass.migrate codemod run
18
+
19
+ 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>
20
+ <item>RFC-1097: sweep — werkstatt-engine clean
21
+
22
+ 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>
23
+ <history>RFC-0091</history>
20
24
  </CHANGE_SUMMARY>
21
25
  */
22
26
 
23
- import type { RuntimeContext } from "./runtime-context.ts";
24
- import { evalVisibility, type ResolvedFeatureGraph, EMPTY_FEATURE_GRAPH } from "./visibility.ts";
27
+ import type { RuntimeContext } from "../runtime/runtime-context.ts";
28
+ import { evalVisibility, type ResolvedFeatureGraph, EMPTY_FEATURE_GRAPH } from "../policy/visibility.ts";
25
29
  import {
26
30
  planetImportPaths as registryPlanetImportPaths,
27
31
  blockTypeToCosmicName as registryBlockTypeToCosmicName,
@@ -48,7 +52,7 @@ export interface BlockEntry {
48
52
  type?: string; // CMS-facing archetype slug — validated by page.block.validate
49
53
  use?: string; // PlanetName or MoonName — normalized from type for internal resolution
50
54
  props: Record<string, unknown>;
51
- visibility?: import("./visibility.ts").VisibilityExpr;
55
+ visibility?: import("../policy/visibility.ts").VisibilityExpr;
52
56
  /** Block layer — shell blocks render before content blocks (RFC-0036). */
53
57
  layer?: "shell" | "section";
54
58
  }
@@ -89,7 +93,7 @@ export interface ResolvedBlock {
89
93
  /** Props already evaluated and ready to spread into the component. */
90
94
  readonly props: Record<string, unknown>;
91
95
  /** The raw visibility expression (retained for attribution / debugging). null if absent. */
92
- readonly visibility: import("./visibility.ts").VisibilityExpr | null;
96
+ readonly visibility: import("../policy/visibility.ts").VisibilityExpr | null;
93
97
  /** Block layer — shell blocks are prepended and render before content blocks (RFC-0036). */
94
98
  readonly layer?: "shell" | "section";
95
99
  }
@@ -111,7 +115,7 @@ export interface ResolvedPage {
111
115
  }
112
116
 
113
117
  // RFC-0035: Universal Section Props Contract — every resolved content block's
114
- // props extend this shape. RFC-0264: relocated from the @warpgogol/werkstatt-shared/share root
118
+ // props extend this shape. RFC-0264: relocated from the @warpgogol/werkstatt-shared root
115
119
  // barrel to page.ts (its natural domain owner); re-exported from the `./page`
116
120
  // subpath.
117
121
  export interface SectionProps {
@@ -1,6 +1,6 @@
1
1
  import { test, expect } from "vitest";
2
2
  import { buildPage, type PageEntry } from "../page.ts";
3
- import { EMPTY_RUNTIME_CONTEXT } from "../runtime-context.ts";
3
+ import { EMPTY_RUNTIME_CONTEXT } from "../../runtime/runtime-context.ts";
4
4
 
5
5
  /*
6
6
  <MODULE_CONTRACT>
@@ -1,6 +1,6 @@
1
1
  import { test, expect } from "vitest";
2
2
  import { buildPage, type PageEntry } from "../page.ts";
3
- import { EMPTY_RUNTIME_CONTEXT } from "../runtime-context.ts";
3
+ import { EMPTY_RUNTIME_CONTEXT } from "../../runtime/runtime-context.ts";
4
4
 
5
5
  /*
6
6
  <MODULE_CONTRACT>