@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
@@ -12,7 +12,12 @@ passes it here.
12
12
  </non-goals>
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
- <item>Initial ARD ai-catalog.json projection for isitagentready.com ARD check.</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
 
@@ -11,8 +11,8 @@ Verifies determinism, domain extraction, and content URL construction.
11
11
  */
12
12
 
13
13
  import { describe, it, expect } from "vitest";
14
- import { buildDnsAidRecord } from "@warpgogol/werkstatt-shared/share/agent";
15
- import type { AgentSurfaceManifest } from "@warpgogol/werkstatt-shared/share/agent";
14
+ import { buildDnsAidRecord } from "@warpgogol/werkstatt-shared/agent";
15
+ import type { AgentSurfaceManifest } from "@warpgogol/werkstatt-shared/agent";
16
16
 
17
17
  function makeManifest(baseUrl: string): AgentSurfaceManifest {
18
18
  return {
@@ -15,6 +15,7 @@ two runs on unchanged input are byte-identical (AS-7).
15
15
  <CHANGE_SUMMARY>
16
16
  <item>RFC-0286: initial manifest contract and pure builder.</item>
17
17
  <item>RFC-0954: add search interface to AgentSurfaceManifest.interfaces.</item>
18
+ <item>RFC-1076: add claims field to AgentSurfaceManifest, AgentClaimRef type, bump AGENT_SURFACE_VERSION to 1.1.0.</item>
18
19
  </CHANGE_SUMMARY>
19
20
  */
20
21
 
@@ -22,7 +23,7 @@ import { createHash } from "node:crypto";
22
23
  import type { AgentSurfaceProof } from "./proof.ts";
23
24
 
24
25
  /** Semver of THIS manifest schema. Bump only via an RFC amending RFC-0286 (AS-7). */
25
- export const AGENT_SURFACE_VERSION = "1.0.0";
26
+ export const AGENT_SURFACE_VERSION = "1.1.0";
26
27
 
27
28
  export interface AgentKnowledgeRef {
28
29
  /** A BusinessDomain with visibility "public" (RFC-0287). */
@@ -41,6 +42,14 @@ export interface AgentActionRef {
41
42
  entitlement: "agent.actions";
42
43
  }
43
44
 
45
+ export interface AgentClaimRef {
46
+ id: string;
47
+ claimClass: string;
48
+ statement: string;
49
+ verificationLevel?: string;
50
+ evidenceCount: number;
51
+ }
52
+
44
53
  export interface AgentSurfaceManifest {
45
54
  surfaceVersion: string;
46
55
  site: string;
@@ -50,6 +59,8 @@ export interface AgentSurfaceManifest {
50
59
  contentHash: string;
51
60
  knowledge: AgentKnowledgeRef[];
52
61
  actions: AgentActionRef[];
62
+ /** RFC-1076: claim provenance chain — claims with their evidence references. */
63
+ claims: AgentClaimRef[];
53
64
  interfaces: {
54
65
  llms: string;
55
66
  twins: { pattern: string } | null;
@@ -67,6 +78,8 @@ export interface AgentSurfaceManifestInput {
67
78
  languages: { default: string; supported: string[] };
68
79
  knowledge?: AgentKnowledgeRef[];
69
80
  actions?: AgentActionRef[];
81
+ /** RFC-1076: claim provenance summaries for the manifest. */
82
+ claims?: AgentClaimRef[];
70
83
  hasTwins?: boolean;
71
84
  openapiUrl?: string | null;
72
85
  mcp?: { url: string; protocolVersion: string } | null;
@@ -135,6 +148,7 @@ export function buildAgentSurfaceManifest(input: AgentSurfaceManifestInput): Age
135
148
  },
136
149
  knowledge: [...(input.knowledge ?? [])].sort((a, b) => a.domain.localeCompare(b.domain)),
137
150
  actions: [...(input.actions ?? [])].sort((a, b) => a.id.localeCompare(b.id)),
151
+ claims: [...(input.claims ?? [])].sort((a, b) => a.id.localeCompare(b.id)),
138
152
  interfaces: {
139
153
  llms: "/llms.txt",
140
154
  twins: input.hasTwins ? { pattern: "/**.md" } : null,
@@ -14,7 +14,12 @@ no timestamps in the hash payload.
14
14
  </MODULE_CONTRACT>
15
15
  <CHANGE_SUMMARY>
16
16
  <item>RFC-0954: initial search manifest contract, query/response types, and pure builder.</item>
17
- <item>m000101: add NON_KNOWLEDGE_FILES and isNonKnowledgeFile for shared non-knowledge-file exclusion.</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>
18
23
  </CHANGE_SUMMARY>
19
24
  */
20
25
 
@@ -12,8 +12,8 @@
12
12
  */
13
13
 
14
14
  import { test, expect } from "vitest";
15
- import { buildApiCatalog } from "../agent/api-catalog.ts";
16
- import { buildAgentSurfaceManifest } from "../agent/manifest.ts";
15
+ import { buildApiCatalog } from "../api-catalog.ts";
16
+ import { buildAgentSurfaceManifest } from "../manifest.ts";
17
17
 
18
18
  test("buildApiCatalog: empty manifest yields service-meta + service-doc links", () => {
19
19
  const manifest = buildAgentSurfaceManifest({
@@ -9,8 +9,8 @@
9
9
  */
10
10
 
11
11
  import { test, expect } from "vitest";
12
- import { buildArdCatalog } from "../agent/ard-catalog.ts";
13
- import { buildAgentSurfaceManifest } from "../agent/manifest.ts";
12
+ import { buildArdCatalog } from "../ard-catalog.ts";
13
+ import { buildAgentSurfaceManifest } from "../manifest.ts";
14
14
 
15
15
  test("buildArdCatalog: produces specVersion, host, and entries array", () => {
16
16
  const manifest = buildAgentSurfaceManifest({
@@ -16,7 +16,7 @@ import {
16
16
  resolveActiveCapabilities,
17
17
  capabilityToActionRef,
18
18
  type CapabilityRecord,
19
- } from "../agent/capability.ts";
19
+ } from "../capability.ts";
20
20
 
21
21
  function makeCap(overrides: Partial<CapabilityRecord> = {}): CapabilityRecord {
22
22
  return {
@@ -16,7 +16,7 @@ import {
16
16
  buildFleetAgentCatalog,
17
17
  computeFleetCatalogContentHash,
18
18
  FLEET_AGENT_CATALOG_SCHEMA,
19
- } from "../agent/fleet-catalog.ts";
19
+ } from "../fleet-catalog.ts";
20
20
 
21
21
  const sampleDoc = {
22
22
  surfaceVersion: "1.0.0",
@@ -16,8 +16,8 @@ import {
16
16
  AGENT_KNOWLEDGE_DOMAINS,
17
17
  isAgentKnowledgeDomain,
18
18
  formatAgentKnowledge,
19
- } from "../agent/knowledge.ts";
20
- import { BUSINESS_DOMAIN_VISIBILITY } from "../semantic/business-projection.ts";
19
+ } from "../knowledge.ts";
20
+ import { BUSINESS_DOMAIN_VISIBILITY } from "../../semantic/business-projection.ts";
21
21
 
22
22
  test("AGENT_KNOWLEDGE_DOMAINS: matches exactly the `public` BUSINESS_DOMAIN_VISIBILITY keys", () => {
23
23
  const publicDomains = Object.entries(BUSINESS_DOMAIN_VISIBILITY)
@@ -19,7 +19,7 @@ import {
19
19
  computeAgentManifestContentHash,
20
20
  computeSignedContentHash,
21
21
  canonicalJson,
22
- } from "../agent/manifest.ts";
22
+ } from "../manifest.ts";
23
23
 
24
24
  const baseInput = {
25
25
  site: "warpgogol-com",
@@ -12,8 +12,8 @@
12
12
  */
13
13
 
14
14
  import { test, expect } from "vitest";
15
- import { buildMcpServerCard } from "../agent/mcp-card.ts";
16
- import { buildAgentSurfaceManifest } from "../agent/manifest.ts";
15
+ import { buildMcpServerCard } from "../mcp-card.ts";
16
+ import { buildAgentSurfaceManifest } from "../manifest.ts";
17
17
 
18
18
  test("buildMcpServerCard: null mcp → returns null", () => {
19
19
  const manifest = buildAgentSurfaceManifest({
@@ -0,0 +1,33 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { omitEmptyKnowledgeValues } from "../omit-empty.ts";
3
+
4
+ describe("omitEmptyKnowledgeValues", () => {
5
+ it("is a function", () => {
6
+ expect(typeof omitEmptyKnowledgeValues).toBe("function");
7
+ });
8
+
9
+ it("removes empty strings, null, undefined, empty arrays, and empty objects", () => {
10
+ const input = { a: "value", b: "", c: null, d: undefined, e: [], f: {} };
11
+ const result = omitEmptyKnowledgeValues(input);
12
+ expect(result).not.toHaveProperty("b");
13
+ expect(result).not.toHaveProperty("c");
14
+ expect(result).not.toHaveProperty("d");
15
+ expect(result).not.toHaveProperty("e");
16
+ expect(result).not.toHaveProperty("f");
17
+ expect(result).toHaveProperty("a", "value");
18
+ });
19
+
20
+ it("preserves false and 0 (schema-allowed falsy values)", () => {
21
+ const input = { enabled: false, count: 0 };
22
+ const result = omitEmptyKnowledgeValues(input);
23
+ expect(result).toHaveProperty("enabled", false);
24
+ expect(result).toHaveProperty("count", 0);
25
+ });
26
+
27
+ it("preserves non-empty arrays and objects", () => {
28
+ const input = { items: [1, 2], nested: { x: 1 } };
29
+ const result = omitEmptyKnowledgeValues(input);
30
+ expect(result).toHaveProperty("items", [1, 2]);
31
+ expect(result).toHaveProperty("nested", { x: 1 });
32
+ });
33
+ });
@@ -13,8 +13,8 @@
13
13
  */
14
14
 
15
15
  import { test, expect } from "vitest";
16
- import { formatAgentOpenApi } from "../agent/openapi.ts";
17
- import { buildAgentSurfaceManifest } from "../agent/manifest.ts";
16
+ import { formatAgentOpenApi } from "../openapi.ts";
17
+ import { buildAgentSurfaceManifest } from "../manifest.ts";
18
18
 
19
19
  test("formatAgentOpenApi: empty manifest yields a valid document with no paths", () => {
20
20
  const manifest = buildAgentSurfaceManifest({
@@ -16,7 +16,7 @@ import {
16
16
  buildAgentSigningPayload,
17
17
  AGENT_PROOF_DOMAIN,
18
18
  type AgentProofArtifactKind,
19
- } from "../agent/proof.ts";
19
+ } from "../proof.ts";
20
20
 
21
21
  function decodePayload(bytes: Uint8Array): string {
22
22
  return new TextDecoder().decode(bytes);
@@ -25,19 +25,19 @@ import {
25
25
  materialCreditSchema,
26
26
  materialTargetKey,
27
27
  formatMaterialCreditLine,
28
- } from "./schemas/material-credit.ts";
28
+ } from "../schemas/material-credit.ts";
29
29
 
30
- // RFC-0488: re-export label mapping helpers for @warpgogol/werkstatt-shared/share/material-credits consumers.
30
+ // RFC-0488: re-export label mapping helpers for @warpgogol/werkstatt-shared/attribution/material-credits consumers.
31
31
  export {
32
32
  labelForSourceType,
33
33
  labelForStatus,
34
34
  labelForUsageBasis,
35
- } from "./schemas/material-credit.ts";
35
+ } from "../schemas/material-credit.ts";
36
36
  export type {
37
37
  MaterialSourceType,
38
38
  MaterialCreditStatus,
39
39
  UsageBasisType,
40
- } from "./schemas/material-credit.ts";
40
+ } from "../schemas/material-credit.ts";
41
41
 
42
42
  export interface MaterialCreditRecord {
43
43
  file: string;
@@ -6,7 +6,12 @@
6
6
  </non-goals>
7
7
  </MODULE_CONTRACT>
8
8
  <CHANGE_SUMMARY>
9
- <item>Initial implementation for check-warpgogol hints support.</item>
9
+ <item>RFC-1097: step 6 — compass.migrate codemod run
10
+
11
+ 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>
12
+ <item>RFC-1097: sweep — werkstatt-engine clean
13
+
14
+ 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>
10
15
  </CHANGE_SUMMARY>
11
16
  */
12
17
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  <MODULE_CONTRACT>
3
- <purpose>Shared check infrastructure barrel for @warpgogol/werkstatt-shared — exports diagnosticsResult, suppressions, i18n, and astro-site-url helpers (RFC-0868).</purpose>
3
+ <purpose>Shared checks index barrel for @warpgogol/werkstatt-shared — exports diagnosticsResult, suppressions, i18n, and astro-site-url helpers (RFC-0868).</purpose>
4
4
  <non-goals>
5
5
  <item>Do not export site-specific validators or pipeline definitions.</item>
6
6
  <item>Do not import from @warpgogol/werkstatt-site or any stack plugin.</item>
@@ -8,6 +8,9 @@
8
8
  </MODULE_CONTRACT>
9
9
  <CHANGE_SUMMARY>
10
10
  <item>RFC-0868: extracted from werkstatt-site/src/checks as shared infrastructure.</item>
11
+ <item>RFC-1097: sweep — tail packages clean
12
+
13
+ Sweep batch 3: rewrote ~95 purposes across werkstatt-knowledge, werkstatt-shared, godot-game, phaser-game, lifecycle-core, projektarchiv-*, portal-*, billing-*, typescript (CONTRACT-02/PURPOSE-02). Real KEY_DECISIONS on 5 godot utils, non-goals on 5 CONTRACT-03 files, headers on 4 headerless files, CS-07 history literal fix on 2 files. Policy: vitest.config.ts + test-fixtures testPatterns, worker-configuration.d.ts excludedPath. All non-site/engine packages now 0 diagnostics.</item>
11
14
  </CHANGE_SUMMARY>
12
15
  */
13
16
 
@@ -6,7 +6,12 @@
6
6
  </non-goals>
7
7
  </MODULE_CONTRACT>
8
8
  <CHANGE_SUMMARY>
9
- <item>Added Compass scaffolding.</item>
9
+ <item>RFC-1097: step 6 — compass.migrate codemod run
10
+
11
+ 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>
12
+ <item>RFC-1097: sweep — werkstatt-engine clean
13
+
14
+ 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>
10
15
  </CHANGE_SUMMARY>
11
16
  */
12
17
 
@@ -1,3 +1,17 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>i18n helpers for check validators — read the default language code from a site system.md frontmatter.</purpose>
4
+ <non-goals>
5
+ <item>Do not load translation catalogs — this module only resolves the default language code.</item>
6
+ </non-goals>
7
+ </MODULE_CONTRACT>
8
+ <CHANGE_SUMMARY>
9
+ <item>RFC-1097: sweep — tail packages clean
10
+
11
+ Sweep batch 3: rewrote ~95 purposes across werkstatt-knowledge, werkstatt-shared, godot-game, phaser-game, lifecycle-core, projektarchiv-*, portal-*, billing-*, typescript (CONTRACT-02/PURPOSE-02). Real KEY_DECISIONS on 5 godot utils, non-goals on 5 CONTRACT-03 files, headers on 4 headerless files, CS-07 history literal fix on 2 files. Policy: vitest.config.ts + test-fixtures testPatterns, worker-configuration.d.ts excludedPath. All non-site/engine packages now 0 diagnostics.</item>
12
+ </CHANGE_SUMMARY>
13
+ */
14
+
1
15
  import { join } from "node:path";
2
16
  import { readFile } from "node:fs/promises";
3
17
  import { parse as parseYaml } from "yaml";
@@ -13,6 +13,7 @@ ruleId = command; diagnosticsResult takes rich Diagnostic[] with registered ids.
13
13
  </MODULE_CONTRACT>
14
14
  <CHANGE_SUMMARY>
15
15
  <item>RFC-0029 review: Initial creation to fix systemic exit-code bug across check files.</item>
16
+ <item>RFC-1027: Auto-populate Diagnostic.remediation from REMEDIATION_CATALOG in diagnosticsResult().</item>
16
17
  </CHANGE_SUMMARY>
17
18
  */
18
19
 
@@ -21,7 +22,8 @@ import type {
21
22
  Diagnostic,
22
23
  KernelCommandResult,
23
24
  KernelNextStep,
24
- } from "@warpgogol/werkstatt-engine/kernel";
25
+ } from "@warpgogol/werkstatt-shared/kernel";
26
+ import { lookupRemediation } from "../remediation/remediation-catalog.ts";
25
27
 
26
28
  function defaultFailNextSteps(command: string): KernelNextStep[] {
27
29
  return [
@@ -66,10 +68,25 @@ export function diagnosticsResult(
66
68
  diagnostics: Diagnostic[],
67
69
  nextSteps?: KernelNextStep[],
68
70
  ): KernelCommandResult<CheckResult> {
71
+ const enrichedDiagnostics = diagnostics.map((d) => {
72
+ if (d.remediation) return d;
73
+ const pattern = lookupRemediation(d.ruleId);
74
+ if (!pattern) return d;
75
+ return {
76
+ ...d,
77
+ remediation: {
78
+ ruleId: pattern.ruleId,
79
+ action: pattern.action,
80
+ ...(pattern.template !== undefined && { template: pattern.template }),
81
+ ...(pattern.docRef !== undefined && { docRef: pattern.docRef }),
82
+ ...(pattern.targetFiles !== undefined && { targetFiles: pattern.targetFiles }),
83
+ },
84
+ };
85
+ });
69
86
  const summary = {
70
- error: diagnostics.filter((d) => d.severity === "error").length,
71
- warning: diagnostics.filter((d) => d.severity === "warning").length,
72
- info: diagnostics.filter((d) => d.severity === "info").length,
87
+ error: enrichedDiagnostics.filter((d) => d.severity === "error").length,
88
+ warning: enrichedDiagnostics.filter((d) => d.severity === "warning").length,
89
+ info: enrichedDiagnostics.filter((d) => d.severity === "info").length,
73
90
  };
74
91
  const status: CheckResult["status"] =
75
92
  summary.error > 0 ? "fail" : summary.warning > 0 ? "warn" : "pass";
@@ -77,7 +94,7 @@ export function diagnosticsResult(
77
94
  nextSteps ?? (summary.error > 0 ? defaultFailNextSteps(command) : undefined);
78
95
  const counts = formatCounts(summary.error, summary.warning);
79
96
  return {
80
- data: { command, status, diagnostics, summary },
97
+ data: { command, status, diagnostics: enrichedDiagnostics, summary },
81
98
  exitCode: summary.error > 0 ? 1 : 0,
82
99
  summary: counts ? `[${command}] ${counts}` : `[${command}]`,
83
100
  nextSteps: resolvedNextSteps,
@@ -0,0 +1,83 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>RFC-1027: unit tests for diagnosticsResult() remediation auto-population.</purpose>
4
+ </MODULE_CONTRACT>
5
+ <CHANGE_SUMMARY>
6
+ <item>RFC-1027: initial tests for remediation auto-population from REMEDIATION_CATALOG.</item>
7
+ </CHANGE_SUMMARY>
8
+ */
9
+
10
+ import { test, expect } from "vitest";
11
+ import { diagnosticsResult } from "../result-helpers.ts";
12
+ import type { Diagnostic } from "@warpgogol/werkstatt-shared/kernel";
13
+
14
+ test("diagnosticsResult: auto-populates remediation from catalog for known ruleId", () => {
15
+ const diagnostics: Diagnostic[] = [
16
+ {
17
+ ruleId: "GEN-FILES-01",
18
+ severity: "error",
19
+ message: "Generated file is stale",
20
+ },
21
+ ];
22
+ const result = diagnosticsResult("test.command", diagnostics);
23
+ expect(result.data!.diagnostics[0].remediation).toBeDefined();
24
+ expect(result.data!.diagnostics[0].remediation?.ruleId).toBe("GEN-FILES-01");
25
+ expect(result.data!.diagnostics[0].remediation?.action).toContain("Regenerate");
26
+ expect(result.data!.diagnostics[0].remediation?.docRef).toBe(
27
+ "docs/authoring/generated-files-and-templates.md",
28
+ );
29
+ });
30
+
31
+ test("diagnosticsResult: does not overwrite existing remediation field", () => {
32
+ const diagnostics: Diagnostic[] = [
33
+ {
34
+ ruleId: "GEN-FILES-01",
35
+ severity: "error",
36
+ message: "Stale file",
37
+ remediation: {
38
+ ruleId: "GEN-FILES-01",
39
+ action: "Custom action — do not overwrite",
40
+ },
41
+ },
42
+ ];
43
+ const result = diagnosticsResult("test.command", diagnostics);
44
+ expect(result.data!.diagnostics[0].remediation?.action).toBe("Custom action — do not overwrite");
45
+ });
46
+
47
+ test("diagnosticsResult: no remediation for unknown ruleId", () => {
48
+ const diagnostics: Diagnostic[] = [
49
+ {
50
+ ruleId: "UNKNOWN-RULE-999",
51
+ severity: "warning",
52
+ message: "Some warning",
53
+ },
54
+ ];
55
+ const result = diagnosticsResult("test.command", diagnostics);
56
+ expect(result.data!.diagnostics[0].remediation).toBeUndefined();
57
+ });
58
+
59
+ test("diagnosticsResult: preserves fixHint alongside remediation", () => {
60
+ const diagnostics: Diagnostic[] = [
61
+ {
62
+ ruleId: "GEN-FILES-01",
63
+ severity: "error",
64
+ message: "Stale",
65
+ fixHint: "Run the generator",
66
+ },
67
+ ];
68
+ const result = diagnosticsResult("test.command", diagnostics);
69
+ expect(result.data!.diagnostics[0].fixHint).toBe("Run the generator");
70
+ expect(result.data!.diagnostics[0].remediation).toBeDefined();
71
+ });
72
+
73
+ test("diagnosticsResult: multiple diagnostics get independent remediation", () => {
74
+ const diagnostics: Diagnostic[] = [
75
+ { ruleId: "GEN-FILES-01", severity: "error", message: "err 1" },
76
+ { ruleId: "PARITY-SECTION-COUNT", severity: "error", message: "err 2" },
77
+ { ruleId: "UNKNOWN", severity: "info", message: "info 1" },
78
+ ];
79
+ const result = diagnosticsResult("test.command", diagnostics);
80
+ expect(result.data!.diagnostics[0].remediation?.ruleId).toBe("GEN-FILES-01");
81
+ expect(result.data!.diagnostics[1].remediation?.ruleId).toBe("PARITY-SECTION-COUNT");
82
+ expect(result.data!.diagnostics[2].remediation).toBeUndefined();
83
+ });
@@ -7,8 +7,12 @@
7
7
  </non-goals>
8
8
  </MODULE_CONTRACT>
9
9
  <CHANGE_SUMMARY>
10
- <item>Created shared counter utilities to eliminate duplication between hero and impact sections.</item>
11
- <item>getStartValue now generates "1" in highest digit (e.g., "1,000" instead of "0,000") for better visual feedback during count-up.</item>
10
+ <item>RFC-1097: step 6 — compass.migrate codemod run
11
+
12
+ 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>
13
+ <item>RFC-1097: sweep — werkstatt-engine clean
14
+
15
+ 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
16
  </CHANGE_SUMMARY>
13
17
  */
14
18
 
@@ -114,29 +114,27 @@ export function initExternalLinkQr(options?: ExternalLinkQrOptions): void {
114
114
  return !modal.hidden;
115
115
  }
116
116
 
117
- function handleTriggerClick(e: Event): void {
118
- const trigger = e.currentTarget as HTMLElement;
119
- const anchor = trigger.closest("a");
117
+ function handleDelegatedClick(e: Event): void {
118
+ const anchor = (e.target as HTMLElement)?.closest?.("a[data-external-link]");
120
119
  if (!anchor) return;
121
120
 
122
121
  const href = anchor.getAttribute("href");
123
122
  if (!href) return;
124
123
 
125
124
  e.preventDefault();
126
- e.stopPropagation();
127
- openModal(href, trigger);
125
+ openModal(href, anchor as HTMLElement);
128
126
  }
129
127
 
130
- function handleTriggerKeydown(e: KeyboardEvent): void {
128
+ function handleDelegatedKeydown(e: KeyboardEvent): void {
131
129
  if (e.key !== "Enter" && e.key !== " ") return;
132
- e.preventDefault();
133
- e.stopPropagation();
134
- const trigger = e.currentTarget as HTMLElement;
135
- const anchor = trigger.closest("a");
130
+ const anchor = (e.target as HTMLElement)?.closest?.("a[data-external-link]");
136
131
  if (!anchor) return;
132
+
137
133
  const href = anchor.getAttribute("href");
138
134
  if (!href) return;
139
- openModal(href, trigger);
135
+
136
+ e.preventDefault();
137
+ openModal(href, anchor as HTMLElement);
140
138
  }
141
139
 
142
140
  function handleKeydown(e: KeyboardEvent): void {
@@ -173,11 +171,8 @@ export function initExternalLinkQr(options?: ExternalLinkQrOptions): void {
173
171
  }
174
172
 
175
173
  function attachTriggers(): void {
176
- const triggers = document.querySelectorAll<HTMLElement>("[data-qr-trigger]");
177
- for (const trigger of triggers) {
178
- trigger.addEventListener("click", handleTriggerClick);
179
- trigger.addEventListener("keydown", handleTriggerKeydown);
180
- }
174
+ document.addEventListener("click", handleDelegatedClick);
175
+ document.addEventListener("keydown", handleDelegatedKeydown);
181
176
  }
182
177
 
183
178
  overlay.addEventListener("click", closeModal);
@@ -10,8 +10,13 @@ external-link-qr entitlement is active, also injects a QR trigger span into each
10
10
  </MODULE_CONTRACT>
11
11
  <CHANGE_SUMMARY>
12
12
  <item>RFC-0011 Phase 2: Extracted from layout.astro inline script into src/scripts canonical pattern.</item>
13
- <item>Migrated to @warpgogol/werkstatt-shared/share/scripts for platform-wide reuse.</item>
14
13
  <item>RFC-0932: accept ExternalLinkBehaviorOptions, inject QR trigger span when entitled.</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
 
@@ -52,6 +57,12 @@ export function applyExternalLinkBehavior(options?: ExternalLinkBehaviorOptions)
52
57
  anchor.setAttribute("rel", "noopener noreferrer");
53
58
 
54
59
  if (qrEntitled && anchor.getAttribute("data-external-link-qr") !== "off") {
60
+ // Skip QR trigger for anchors wrapping media elements — a text arrow
61
+ // appended after an image/SVG/canvas looks visually wrong.
62
+ const hasMediaChild = anchor.querySelector("img, svg, canvas, picture");
63
+ if (hasMediaChild) {
64
+ continue;
65
+ }
55
66
  if (!anchor.querySelector("[data-qr-trigger]")) {
56
67
  const trigger = document.createElement("span");
57
68
  trigger.className = "external-link-qr-trigger";
@@ -8,15 +8,20 @@
8
8
  </non-goals>
9
9
  </MODULE_CONTRACT>
10
10
  <CHANGE_SUMMARY>
11
- <item>RFC-0040: Created as shared GSAP counter initialization module in @warpgogol/werkstatt-shared/share/scripts.</item>
12
- <item>Extended selector to support .hero__stat in addition to .impact-section__stat.</item>
11
+ <item>RFC-0040: Created as shared GSAP counter initialization module in @warpgogol/werkstatt-shared/client-scripts.</item>
13
12
  <item>RFC-0758: Extended selector to support .dynamic-status-block__stat.</item>
13
+ <item>RFC-1097: step 6 — compass.migrate codemod run
14
+
15
+ 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>
16
+ <item>RFC-1097: sweep — werkstatt-engine clean
17
+
18
+ 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>
14
19
  </CHANGE_SUMMARY>
15
20
  */
16
21
 
17
22
  // @ai-invariant: RFC-0040. Do not import gsap at the top level. Always dynamic-import inside initGsapCounter.
18
23
 
19
- import { parseNumeric } from "../counter-utils.ts";
24
+ import { parseNumeric } from "./counter-utils.ts";
20
25
 
21
26
  export interface GsapCounterOptions {
22
27
  prefersReducedMotion?: boolean;
@@ -0,0 +1,35 @@
1
+ /*
2
+ <MODULE_CONTRACT>
3
+ <purpose>scripts index — central export point for the script modules used in dynamic loading contexts.</purpose>
4
+
5
+
6
+ <non-goals>
7
+ <item>Do not define new modules or components.</item>
8
+ <item>Do not manage application state or business logic.</item>
9
+ </non-goals>
10
+ </MODULE_CONTRACT>
11
+
12
+ <CHANGE_SUMMARY>
13
+ <item>RFC-1097: step 6 — compass.migrate codemod run
14
+
15
+ 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>
16
+ <item>RFC-1097: sweep — tail packages clean
17
+
18
+ Sweep batch 3: rewrote ~95 purposes across werkstatt-knowledge, werkstatt-shared, godot-game, phaser-game, lifecycle-core, projektarchiv-*, portal-*, billing-*, typescript (CONTRACT-02/PURPOSE-02). Real KEY_DECISIONS on 5 godot utils, non-goals on 5 CONTRACT-03 files, headers on 4 headerless files, CS-07 history literal fix on 2 files. Policy: vitest.config.ts + test-fixtures testPatterns, worker-configuration.d.ts excludedPath. All non-site/engine packages now 0 diagnostics.</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>
22
+ </CHANGE_SUMMARY>
23
+ */
24
+
25
+ // scheduler.ts is loaded dynamically by orchestrator.ts and lordicon.ts
26
+ export * from "./lordicon.ts";
27
+ export * from "./external-links.ts";
28
+ export * from "./external-link-qr.ts";
29
+ export * from "./lenis.ts";
30
+ export * from "./scroll-spy.ts";
31
+ export * from "./orchestrator.ts";
32
+ // gsap-counter.ts (RFC-0040) is loaded dynamically by orchestrator.ts
33
+ // inline-number-animation.ts (RFC-0041) is loaded dynamically by orchestrator.ts
34
+ // gsap-reveal.ts / gsap-parallax.ts / gsap-stagger.ts (RFC-0106) are loaded
35
+ // dynamically by orchestrator.ts via the reveal / parallax / stagger opt-ins.
@@ -8,7 +8,7 @@
8
8
  </non-goals>
9
9
  </MODULE_CONTRACT>
10
10
  <CHANGE_SUMMARY>
11
- <item>RFC-0041: Created as shared GSAP inline number animation module in @warpgogol/werkstatt-shared/share/scripts.</item>
11
+ <item>RFC-0041: Created as shared GSAP inline number animation module in @warpgogol/werkstatt-shared/client-scripts.</item>
12
12
  </CHANGE_SUMMARY>
13
13
  */
14
14