groundwork-method 0.0.1 → 0.10.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 (629) hide show
  1. package/CHANGELOG.md +781 -0
  2. package/LICENSE +21 -0
  3. package/README.md +44 -29
  4. package/bin/groundwork.js +1654 -0
  5. package/dist/src/generators/add-capability/generator.d.ts +8 -0
  6. package/dist/src/generators/add-capability/generator.js +60 -0
  7. package/dist/src/generators/add-capability/generator.js.map +1 -0
  8. package/dist/src/generators/cli-app/generator.d.ts +9 -0
  9. package/dist/src/generators/cli-app/generator.js +140 -0
  10. package/dist/src/generators/cli-app/generator.js.map +1 -0
  11. package/dist/src/generators/docs-site/generator.d.ts +5 -0
  12. package/dist/src/generators/docs-site/generator.js +441 -0
  13. package/dist/src/generators/docs-site/generator.js.map +1 -0
  14. package/dist/src/generators/electron-app/generator.d.ts +6 -0
  15. package/dist/src/generators/electron-app/generator.js +261 -0
  16. package/dist/src/generators/electron-app/generator.js.map +1 -0
  17. package/dist/src/generators/flutter-app/generator.d.ts +6 -0
  18. package/dist/src/generators/flutter-app/generator.js +314 -0
  19. package/dist/src/generators/flutter-app/generator.js.map +1 -0
  20. package/dist/src/generators/go-microservice/generator.d.ts +8 -0
  21. package/dist/src/generators/go-microservice/generator.js +232 -0
  22. package/dist/src/generators/go-microservice/generator.js.map +1 -0
  23. package/dist/src/generators/nextjs-app/generator.d.ts +8 -0
  24. package/dist/src/generators/nextjs-app/generator.js +294 -0
  25. package/dist/src/generators/nextjs-app/generator.js.map +1 -0
  26. package/dist/src/generators/python-microservice/generator.d.ts +13 -0
  27. package/dist/src/generators/python-microservice/generator.js +265 -0
  28. package/dist/src/generators/python-microservice/generator.js.map +1 -0
  29. package/dist/src/generators/shared/brand-tokens.d.ts +89 -0
  30. package/dist/src/generators/shared/brand-tokens.js +308 -0
  31. package/dist/src/generators/shared/brand-tokens.js.map +1 -0
  32. package/dist/src/generators/shared/capabilities.d.ts +101 -0
  33. package/dist/src/generators/shared/capabilities.js +279 -0
  34. package/dist/src/generators/shared/capabilities.js.map +1 -0
  35. package/dist/src/generators/shared/provenance.d.ts +2 -0
  36. package/dist/src/generators/shared/provenance.js +85 -0
  37. package/dist/src/generators/shared/provenance.js.map +1 -0
  38. package/dist/src/generators/shared/scaffold-helpers.d.ts +72 -0
  39. package/dist/src/generators/shared/scaffold-helpers.js +309 -0
  40. package/dist/src/generators/shared/scaffold-helpers.js.map +1 -0
  41. package/dist/src/generators/system-test-runner/generator.d.ts +23 -0
  42. package/dist/src/generators/system-test-runner/generator.js +125 -0
  43. package/dist/src/generators/system-test-runner/generator.js.map +1 -0
  44. package/dist/src/generators/workspace-dev-cli/generator.d.ts +7 -0
  45. package/dist/src/generators/workspace-dev-cli/generator.js +138 -0
  46. package/dist/src/generators/workspace-dev-cli/generator.js.map +1 -0
  47. package/generators.json +57 -0
  48. package/lib/repo-map/grammars/tree-sitter-c.wasm +0 -0
  49. package/lib/repo-map/grammars/tree-sitter-cpp.wasm +0 -0
  50. package/lib/repo-map/grammars/tree-sitter-csharp.wasm +0 -0
  51. package/lib/repo-map/grammars/tree-sitter-dart.wasm +0 -0
  52. package/lib/repo-map/grammars/tree-sitter-go.wasm +0 -0
  53. package/lib/repo-map/grammars/tree-sitter-java.wasm +0 -0
  54. package/lib/repo-map/grammars/tree-sitter-javascript.wasm +0 -0
  55. package/lib/repo-map/grammars/tree-sitter-kotlin.wasm +0 -0
  56. package/lib/repo-map/grammars/tree-sitter-lua.wasm +0 -0
  57. package/lib/repo-map/grammars/tree-sitter-php.wasm +0 -0
  58. package/lib/repo-map/grammars/tree-sitter-python.wasm +0 -0
  59. package/lib/repo-map/grammars/tree-sitter-ruby.wasm +0 -0
  60. package/lib/repo-map/grammars/tree-sitter-rust.wasm +0 -0
  61. package/lib/repo-map/grammars/tree-sitter-scala.wasm +0 -0
  62. package/lib/repo-map/grammars/tree-sitter-swift.wasm +0 -0
  63. package/lib/repo-map/grammars/tree-sitter-tsx.wasm +0 -0
  64. package/lib/repo-map/grammars/tree-sitter-typescript.wasm +0 -0
  65. package/lib/repo-map/index.js +386 -0
  66. package/lib/repo-map/languages.js +514 -0
  67. package/lib/repo-map/pagerank.js +59 -0
  68. package/migrations/README.md +60 -0
  69. package/migrations/_template/cli-migration.js +27 -0
  70. package/migrations/gw-bet-prose-redesign.js +105 -0
  71. package/migrations/gw-drop-test-manifest.js +37 -0
  72. package/migrations/gw-register-serena-mcp.js +42 -0
  73. package/migrations/gw-relocate-hidden-skills.js +40 -0
  74. package/migrations/gw-seed-config-toml.js +24 -0
  75. package/migrations/index.json +40 -0
  76. package/package.json +70 -6
  77. package/src/AGENTS.md +36 -0
  78. package/src/config/config.toml +30 -0
  79. package/src/config/groundwork-state.json +5 -0
  80. package/src/docs/llms.txt +72 -0
  81. package/src/docs/principles/ai-native/agent-native-systems.md +90 -0
  82. package/src/docs/principles/ai-native/agentic-systems.md +78 -0
  83. package/src/docs/principles/ai-native/ai-engineering.md +100 -0
  84. package/src/docs/principles/ai-native/ai-native-product.md +76 -0
  85. package/src/docs/principles/delivery/cost-engineering.md +89 -0
  86. package/src/docs/principles/delivery/day-2-operational-baseline.md +57 -0
  87. package/src/docs/principles/delivery/devex.md +88 -0
  88. package/src/docs/principles/delivery/platform.md +101 -0
  89. package/src/docs/principles/delivery/progressive-delivery.md +92 -0
  90. package/src/docs/principles/design/ai-native-design.md +73 -0
  91. package/src/docs/principles/design/design-foundations.md +80 -0
  92. package/src/docs/principles/design/design-systems-and-tokens.md +72 -0
  93. package/src/docs/principles/design/interaction-and-motion.md +69 -0
  94. package/src/docs/principles/design/layout-and-space.md +72 -0
  95. package/src/docs/principles/design/usability-and-ux.md +68 -0
  96. package/src/docs/principles/design/visual-design.md +84 -0
  97. package/src/docs/principles/foundations/code-craft.md +86 -0
  98. package/src/docs/principles/foundations/continuous-discovery.md +75 -0
  99. package/src/docs/principles/foundations/documentation.md +102 -0
  100. package/src/docs/principles/foundations/prioritization-and-appetite.md +78 -0
  101. package/src/docs/principles/foundations/product-engineering.md +90 -0
  102. package/src/docs/principles/foundations/product-risks.md +89 -0
  103. package/src/docs/principles/foundations/requirements-and-specs.md +80 -0
  104. package/src/docs/principles/foundations/success-metrics.md +66 -0
  105. package/src/docs/principles/foundations/testing.md +82 -0
  106. package/src/docs/principles/index.md +23 -0
  107. package/src/docs/principles/quality/accessibility.md +88 -0
  108. package/src/docs/principles/quality/observability.md +84 -0
  109. package/src/docs/principles/quality/performance.md +84 -0
  110. package/src/docs/principles/quality/privacy.md +92 -0
  111. package/src/docs/principles/quality/reliability.md +89 -0
  112. package/src/docs/principles/quality/security.md +78 -0
  113. package/src/docs/principles/stack/postgres.md +100 -0
  114. package/src/docs/principles/system-design/api-design.md +86 -0
  115. package/src/docs/principles/system-design/architecture-decisions.md +81 -0
  116. package/src/docs/principles/system-design/code-structure.md +104 -0
  117. package/src/docs/principles/system-design/data-engineering.md +87 -0
  118. package/src/docs/principles/system-design/durable-execution.md +89 -0
  119. package/src/docs/principles/system-design/evolutionary-architecture.md +81 -0
  120. package/src/docs/principles/system-design/identity-and-access.md +76 -0
  121. package/src/docs/principles/system-design/integration-patterns.md +84 -0
  122. package/src/docs/principles/system-design/real-time.md +83 -0
  123. package/src/docs/principles/system-design/surface-architecture.md +74 -0
  124. package/src/docs/ways-of-working/documentation.md +69 -0
  125. package/src/docs/ways-of-working/how-we-work.md +76 -0
  126. package/src/docs/ways-of-working/units-of-work.md +40 -0
  127. package/src/engineer-skills/groundwork-electron-engineer/SKILL.md +118 -0
  128. package/src/engineer-skills/groundwork-electron-engineer/references/ipc-contracts.md +138 -0
  129. package/src/engineer-skills/groundwork-electron-engineer/references/packaging-and-updates.md +82 -0
  130. package/src/engineer-skills/groundwork-electron-engineer/references/process-model.md +94 -0
  131. package/src/engineer-skills/groundwork-electron-engineer/references/security.md +107 -0
  132. package/src/engineer-skills/groundwork-electron-engineer/references/testing-and-smoke.md +107 -0
  133. package/src/engineer-skills/groundwork-electron-engineer/references/theming-and-tokens.md +74 -0
  134. package/src/engineer-skills/groundwork-electron-engineer/sync-anchor.md +14 -0
  135. package/src/engineer-skills/groundwork-flutter-engineer/SKILL.md +108 -0
  136. package/src/engineer-skills/groundwork-flutter-engineer/references/accessibility.md +92 -0
  137. package/src/engineer-skills/groundwork-flutter-engineer/references/architecture.md +189 -0
  138. package/src/engineer-skills/groundwork-flutter-engineer/references/data-and-contracts.md +136 -0
  139. package/src/engineer-skills/groundwork-flutter-engineer/references/navigation.md +122 -0
  140. package/src/engineer-skills/groundwork-flutter-engineer/references/platform-channels.md +93 -0
  141. package/src/engineer-skills/groundwork-flutter-engineer/references/releases-and-distribution.md +84 -0
  142. package/src/engineer-skills/groundwork-flutter-engineer/references/state-management.md +166 -0
  143. package/src/engineer-skills/groundwork-flutter-engineer/references/testing.md +135 -0
  144. package/src/engineer-skills/groundwork-flutter-engineer/references/theming-and-design-tokens.md +109 -0
  145. package/src/engineer-skills/groundwork-flutter-engineer/references/widgets-and-composition.md +123 -0
  146. package/src/engineer-skills/groundwork-flutter-engineer/sync-anchor.md +15 -0
  147. package/src/engineer-skills/groundwork-go-engineer/SKILL.md +171 -0
  148. package/src/engineer-skills/groundwork-go-engineer/references/api-design.md +82 -0
  149. package/src/engineer-skills/groundwork-go-engineer/references/architecture.md +42 -0
  150. package/src/engineer-skills/groundwork-go-engineer/references/capability-ports.md +50 -0
  151. package/src/engineer-skills/groundwork-go-engineer/references/code-craft-security.md +34 -0
  152. package/src/engineer-skills/groundwork-go-engineer/references/concurrency.md +108 -0
  153. package/src/engineer-skills/groundwork-go-engineer/references/go-services.md +77 -0
  154. package/src/engineer-skills/groundwork-go-engineer/references/http-handlers.md +172 -0
  155. package/src/engineer-skills/groundwork-go-engineer/references/implementation-patterns.md +156 -0
  156. package/src/engineer-skills/groundwork-go-engineer/references/integration-realtime-data.md +57 -0
  157. package/src/engineer-skills/groundwork-go-engineer/references/observability.md +49 -0
  158. package/src/engineer-skills/groundwork-go-engineer/references/postgres.md +41 -0
  159. package/src/engineer-skills/groundwork-go-engineer/references/reliability-performance.md +105 -0
  160. package/src/engineer-skills/groundwork-go-engineer/references/testing.md +139 -0
  161. package/src/engineer-skills/groundwork-go-engineer/sync-anchor.md +11 -0
  162. package/src/engineer-skills/groundwork-nextjs-engineer/SKILL.md +107 -0
  163. package/src/engineer-skills/groundwork-nextjs-engineer/references/architecture.md +323 -0
  164. package/src/engineer-skills/groundwork-nextjs-engineer/references/data-fetching.md +458 -0
  165. package/src/engineer-skills/groundwork-nextjs-engineer/references/documentation.md +324 -0
  166. package/src/engineer-skills/groundwork-nextjs-engineer/references/error-boundaries.md +383 -0
  167. package/src/engineer-skills/groundwork-nextjs-engineer/references/mutations-and-forms.md +396 -0
  168. package/src/engineer-skills/groundwork-nextjs-engineer/references/performance-and-deployment.md +947 -0
  169. package/src/engineer-skills/groundwork-nextjs-engineer/references/routing-and-navigation.md +405 -0
  170. package/src/engineer-skills/groundwork-nextjs-engineer/references/server-components.md +394 -0
  171. package/src/engineer-skills/groundwork-nextjs-engineer/references/tailwind-and-styling.md +134 -0
  172. package/src/engineer-skills/groundwork-nextjs-engineer/references/testing.md +433 -0
  173. package/src/engineer-skills/groundwork-nextjs-engineer/references/type-system.md +368 -0
  174. package/src/engineer-skills/groundwork-nextjs-engineer/references/ux-principles.md +278 -0
  175. package/src/engineer-skills/groundwork-nextjs-engineer/references/visual-language.md +69 -0
  176. package/src/engineer-skills/groundwork-nextjs-engineer/sync-anchor.md +9 -0
  177. package/src/engineer-skills/groundwork-python-engineer/SKILL.md +196 -0
  178. package/src/engineer-skills/groundwork-python-engineer/references/api-standards.md +88 -0
  179. package/src/engineer-skills/groundwork-python-engineer/references/architecture.md +57 -0
  180. package/src/engineer-skills/groundwork-python-engineer/references/async-patterns.md +103 -0
  181. package/src/engineer-skills/groundwork-python-engineer/references/capability-ports.md +44 -0
  182. package/src/engineer-skills/groundwork-python-engineer/references/database.md +88 -0
  183. package/src/engineer-skills/groundwork-python-engineer/references/documentation-mcp.md +167 -0
  184. package/src/engineer-skills/groundwork-python-engineer/references/implementation-patterns.md +166 -0
  185. package/src/engineer-skills/groundwork-python-engineer/references/ml-pipelines.md +119 -0
  186. package/src/engineer-skills/groundwork-python-engineer/references/ml-systems-ai-engineering.md +74 -0
  187. package/src/engineer-skills/groundwork-python-engineer/references/observability.md +57 -0
  188. package/src/engineer-skills/groundwork-python-engineer/references/resilience.md +126 -0
  189. package/src/engineer-skills/groundwork-python-engineer/references/testing.md +177 -0
  190. package/src/engineer-skills/groundwork-python-engineer/sync-anchor.md +13 -0
  191. package/src/generators/add-capability/generator.ts +70 -0
  192. package/src/generators/add-capability/schema.json +30 -0
  193. package/src/generators/capabilities/llm/capability.json +28 -0
  194. package/src/generators/capabilities/llm/providers/anthropic/footprint.json +13 -0
  195. package/src/generators/capabilities/llm/providers/anthropic/stacks/go/internal/llm/llm.go.template +102 -0
  196. package/src/generators/capabilities/llm/providers/anthropic/stacks/python/src/__packageName__/adapters/llm.py.template +61 -0
  197. package/src/generators/capabilities/llm/providers/local/footprint.json +13 -0
  198. package/src/generators/capabilities/llm/providers/local/stacks/go/internal/llm/llm.go.template +102 -0
  199. package/src/generators/capabilities/llm/providers/local/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  200. package/src/generators/capabilities/llm/providers/localai/footprint.json +29 -0
  201. package/src/generators/capabilities/llm/providers/localai/stacks/go/internal/llm/llm.go.template +102 -0
  202. package/src/generators/capabilities/llm/providers/localai/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  203. package/src/generators/capabilities/llm/providers/none/footprint.json +9 -0
  204. package/src/generators/capabilities/llm/providers/none/stacks/go/internal/llm/llm.go.template +35 -0
  205. package/src/generators/capabilities/llm/providers/none/stacks/python/src/__packageName__/adapters/llm.py.template +25 -0
  206. package/src/generators/capabilities/llm/providers/ollama/footprint.json +20 -0
  207. package/src/generators/capabilities/llm/providers/ollama/stacks/go/internal/llm/llm.go.template +102 -0
  208. package/src/generators/capabilities/llm/providers/ollama/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  209. package/src/generators/capabilities/llm/providers/openai/footprint.json +13 -0
  210. package/src/generators/capabilities/llm/providers/openai/stacks/go/internal/llm/llm.go.template +98 -0
  211. package/src/generators/capabilities/llm/providers/openai/stacks/python/src/__packageName__/adapters/llm.py.template +60 -0
  212. package/src/generators/capabilities/llm/stacks/go/internal/core/service/llm.go.template +12 -0
  213. package/src/generators/capabilities/llm/stacks/go/internal/llm/llm_test.go.template +33 -0
  214. package/src/generators/capabilities/llm/stacks/python/src/__packageName__/core/llm.py.template +15 -0
  215. package/src/generators/capabilities/llm/stacks/python/tests/contracts/test_llm.py.template +37 -0
  216. package/src/generators/cli-app/files/README.md.template +76 -0
  217. package/src/generators/cli-app/files/build.mjs.template +15 -0
  218. package/src/generators/cli-app/files/package.json.template +21 -0
  219. package/src/generators/cli-app/files/src/cli.ts.template +67 -0
  220. package/src/generators/cli-app/files/src/commands/hello.ts.template +17 -0
  221. package/src/generators/cli-app/files/src/commands/status.ts.template +23 -0
  222. package/src/generators/cli-app/files/src/core/client.test.ts.template +80 -0
  223. package/src/generators/cli-app/files/src/core/client.ts.template +64 -0
  224. package/src/generators/cli-app/files/src/registry.test.ts.template +35 -0
  225. package/src/generators/cli-app/files/src/registry.ts.template +31 -0
  226. package/src/generators/cli-app/files/tsconfig.json.template +16 -0
  227. package/src/generators/cli-app/files/tsconfig.test.json.template +11 -0
  228. package/src/generators/cli-app/generator.ts +138 -0
  229. package/src/generators/cli-app/schema.json +24 -0
  230. package/src/generators/docs-site/files/.gitignore.ejs +40 -0
  231. package/src/generators/docs-site/files/app/docs/__slug__/page.tsx +101 -0
  232. package/src/generators/docs-site/files/app/docs/layout.tsx +14 -0
  233. package/src/generators/docs-site/files/app/docs.css +43 -0
  234. package/src/generators/docs-site/files/app/layout.tsx +24 -0
  235. package/src/generators/docs-site/files/app/page.tsx +135 -0
  236. package/src/generators/docs-site/files/app/source.ts +8 -0
  237. package/src/generators/docs-site/files/components/mermaid.tsx +67 -0
  238. package/src/generators/docs-site/files/next.config.mjs +10 -0
  239. package/src/generators/docs-site/files/package.json +32 -0
  240. package/src/generators/docs-site/files/pnpm-workspace.yaml +7 -0
  241. package/src/generators/docs-site/files/postcss.config.mjs +6 -0
  242. package/src/generators/docs-site/files/source.config.ts +77 -0
  243. package/src/generators/docs-site/files/tailwind.config.js +10 -0
  244. package/src/generators/docs-site/files/tsconfig.json +27 -0
  245. package/src/generators/docs-site/generator.ts +476 -0
  246. package/src/generators/docs-site/schema.json +17 -0
  247. package/src/generators/electron-app/docs/principles/stack/electron/index.md +47 -0
  248. package/src/generators/electron-app/docs/principles/stack/electron/ipc-contracts.md +71 -0
  249. package/src/generators/electron-app/docs/principles/stack/electron/packaging-and-updates.md +59 -0
  250. package/src/generators/electron-app/docs/principles/stack/electron/process-model.md +53 -0
  251. package/src/generators/electron-app/docs/principles/stack/electron/security.md +70 -0
  252. package/src/generators/electron-app/docs/principles/stack/typescript/frontend.md +65 -0
  253. package/src/generators/electron-app/files/.gitignore.template +20 -0
  254. package/src/generators/electron-app/files/README.md.template +125 -0
  255. package/src/generators/electron-app/files/electron.vite.config.ts +31 -0
  256. package/src/generators/electron-app/files/eslint.config.mjs +92 -0
  257. package/src/generators/electron-app/files/forge.config.ts.template +44 -0
  258. package/src/generators/electron-app/files/package.json.template +54 -0
  259. package/src/generators/electron-app/files/playwright.config.ts +18 -0
  260. package/src/generators/electron-app/files/project.json.template +65 -0
  261. package/src/generators/electron-app/files/src/main/core-client.test.ts +81 -0
  262. package/src/generators/electron-app/files/src/main/core-client.ts +55 -0
  263. package/src/generators/electron-app/files/src/main/index.ts +157 -0
  264. package/src/generators/electron-app/files/src/main/ipc.ts +52 -0
  265. package/src/generators/electron-app/files/src/main/policy.test.ts +71 -0
  266. package/src/generators/electron-app/files/src/main/policy.ts +73 -0
  267. package/src/generators/electron-app/files/src/preload/index.ts +23 -0
  268. package/src/generators/electron-app/files/src/renderer/index.html.template +20 -0
  269. package/src/generators/electron-app/files/src/renderer/src/App.test.tsx +61 -0
  270. package/src/generators/electron-app/files/src/renderer/src/App.tsx.template +43 -0
  271. package/src/generators/electron-app/files/src/renderer/src/assets/main.css +40 -0
  272. package/src/generators/electron-app/files/src/renderer/src/env.d.ts +14 -0
  273. package/src/generators/electron-app/files/src/renderer/src/main.tsx +25 -0
  274. package/src/generators/electron-app/files/src/shared/ipc.ts +54 -0
  275. package/src/generators/electron-app/files/tests/smoke/app.spec.ts.template +68 -0
  276. package/src/generators/electron-app/files/tool/electron_exec.sh.template +83 -0
  277. package/src/generators/electron-app/files/tsconfig.json +7 -0
  278. package/src/generators/electron-app/files/tsconfig.node.json +27 -0
  279. package/src/generators/electron-app/files/tsconfig.web.json +22 -0
  280. package/src/generators/electron-app/files/vitest.config.ts +32 -0
  281. package/src/generators/electron-app/files/vitest.setup.ts +1 -0
  282. package/src/generators/electron-app/generator.ts +288 -0
  283. package/src/generators/electron-app/schema.json +23 -0
  284. package/src/generators/flutter-app/docs/principles/stack/flutter/architecture.md +78 -0
  285. package/src/generators/flutter-app/docs/principles/stack/flutter/index.md +38 -0
  286. package/src/generators/flutter-app/docs/principles/stack/flutter/platform-channels.md +51 -0
  287. package/src/generators/flutter-app/docs/principles/stack/flutter/releases-and-distribution.md +59 -0
  288. package/src/generators/flutter-app/docs/principles/stack/flutter/state-management.md +85 -0
  289. package/src/generators/flutter-app/docs/principles/stack/flutter/testing.md +74 -0
  290. package/src/generators/flutter-app/docs/principles/stack/flutter/widgets-and-composition.md +69 -0
  291. package/src/generators/flutter-app/files/.gitignore.template +30 -0
  292. package/src/generators/flutter-app/files/README.md.template +100 -0
  293. package/src/generators/flutter-app/files/analysis_options.yaml.template +18 -0
  294. package/src/generators/flutter-app/files/integration_test/app_test.dart.template +30 -0
  295. package/src/generators/flutter-app/files/lib/app.dart.template +24 -0
  296. package/src/generators/flutter-app/files/lib/config/app_config.dart +15 -0
  297. package/src/generators/flutter-app/files/lib/data/repositories/status_repository.dart +36 -0
  298. package/src/generators/flutter-app/files/lib/data/services/api_client.dart +71 -0
  299. package/src/generators/flutter-app/files/lib/domain/models/health_status.dart +23 -0
  300. package/src/generators/flutter-app/files/lib/main.dart +11 -0
  301. package/src/generators/flutter-app/files/lib/router.dart +23 -0
  302. package/src/generators/flutter-app/files/lib/ui/core/theme/app_theme.dart +110 -0
  303. package/src/generators/flutter-app/files/lib/ui/home/home_view.dart +89 -0
  304. package/src/generators/flutter-app/files/lib/ui/home/home_view_model.dart.template +38 -0
  305. package/src/generators/flutter-app/files/project.json.template +51 -0
  306. package/src/generators/flutter-app/files/pubspec.yaml.template +47 -0
  307. package/src/generators/flutter-app/files/test/api_client_test.dart.template +63 -0
  308. package/src/generators/flutter-app/files/test/fakes/fake_status_repository.dart.template +19 -0
  309. package/src/generators/flutter-app/files/test/home_view_test.dart.template +58 -0
  310. package/src/generators/flutter-app/files/tool/flutter_exec.sh.template +60 -0
  311. package/src/generators/flutter-app/generator.ts +362 -0
  312. package/src/generators/flutter-app/schema.json +23 -0
  313. package/src/generators/go-microservice/docs/principles/stack/go/concurrency.md +123 -0
  314. package/src/generators/go-microservice/docs/principles/stack/go/index.md +70 -0
  315. package/src/generators/go-microservice/docs/principles/stack/go/testing.md +152 -0
  316. package/src/generators/go-microservice/files/.air.toml.template +38 -0
  317. package/src/generators/go-microservice/files/.env.template +4 -0
  318. package/src/generators/go-microservice/files/.golangci.yml.template +82 -0
  319. package/src/generators/go-microservice/files/Dockerfile.dev.template +12 -0
  320. package/src/generators/go-microservice/files/asyncapi-pubsub.yaml.template +33 -0
  321. package/src/generators/go-microservice/files/asyncapi-ws.yaml.template +34 -0
  322. package/src/generators/go-microservice/files/cmd/api/main.go.template +149 -0
  323. package/src/generators/go-microservice/files/cmd/api/main_test.go.template +99 -0
  324. package/src/generators/go-microservice/files/cmd/worker/cleanup/main.go.template +39 -0
  325. package/src/generators/go-microservice/files/db/schema.sql.template +24 -0
  326. package/src/generators/go-microservice/files/go.mod.template +39 -0
  327. package/src/generators/go-microservice/files/internal/config/config.go.template +52 -0
  328. package/src/generators/go-microservice/files/internal/config/otel.go.template +93 -0
  329. package/src/generators/go-microservice/files/internal/core/domain/errors.go.template +16 -0
  330. package/src/generators/go-microservice/files/internal/core/domain/model.go.template +28 -0
  331. package/src/generators/go-microservice/files/internal/core/domain/user.go.template +13 -0
  332. package/src/generators/go-microservice/files/internal/core/pagination.go.template +16 -0
  333. package/src/generators/go-microservice/files/internal/core/service/app_service.go.template +79 -0
  334. package/src/generators/go-microservice/files/internal/core/service/event_hub.go.template +9 -0
  335. package/src/generators/go-microservice/files/internal/core/service/message_queue.go.template +10 -0
  336. package/src/generators/go-microservice/files/internal/core/service/outbox_repository.go.template +31 -0
  337. package/src/generators/go-microservice/files/internal/core/service/repository.go.template +23 -0
  338. package/src/generators/go-microservice/files/internal/core/service/user_repository.go.template +15 -0
  339. package/src/generators/go-microservice/files/internal/core/service/user_service.go.template +43 -0
  340. package/src/generators/go-microservice/files/internal/entrypoints/api/app_handler.go.template +108 -0
  341. package/src/generators/go-microservice/files/internal/entrypoints/api/auth_middleware_test.go.template +52 -0
  342. package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook.go.template +202 -0
  343. package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook_test.go.template +82 -0
  344. package/src/generators/go-microservice/files/internal/entrypoints/api/health_handler.go.template +80 -0
  345. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware.go.template +87 -0
  346. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware_test.go.template +76 -0
  347. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/repository.go.template +37 -0
  348. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_auth.go.template +40 -0
  349. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_loadshed.go.template +38 -0
  350. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_logging.go.template +40 -0
  351. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_ratelimit.go.template +48 -0
  352. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_test.go.template +81 -0
  353. package/src/generators/go-microservice/files/internal/entrypoints/api/router.go.template +105 -0
  354. package/src/generators/go-microservice/files/internal/entrypoints/api/types.go.template +70 -0
  355. package/src/generators/go-microservice/files/internal/entrypoints/api/websocket_handler.go.template +39 -0
  356. package/src/generators/go-microservice/files/internal/httpclient/http_client.go.template +87 -0
  357. package/src/generators/go-microservice/files/internal/kafka/kafka.go.template +34 -0
  358. package/src/generators/go-microservice/files/internal/postgres/postgres.go.template +195 -0
  359. package/src/generators/go-microservice/files/internal/postgres/postgres_test.go.template +156 -0
  360. package/src/generators/go-microservice/files/internal/postgres/user_repository.go.template +56 -0
  361. package/src/generators/go-microservice/files/internal/pubsub/gcp_pubsub.go.template +35 -0
  362. package/src/generators/go-microservice/files/internal/websocket/client.go.template +151 -0
  363. package/src/generators/go-microservice/files/internal/websocket/hub.go.template +261 -0
  364. package/src/generators/go-microservice/files/scripts/apply-schema.sh.template +21 -0
  365. package/src/generators/go-microservice/files/tools/tools.go.template +10 -0
  366. package/src/generators/go-microservice/generator.ts +240 -0
  367. package/src/generators/go-microservice/schema.json +63 -0
  368. package/src/generators/nextjs-app/docs/principles/stack/typescript/frontend.md +65 -0
  369. package/src/generators/nextjs-app/files/.dockerignore.template +7 -0
  370. package/src/generators/nextjs-app/files/.env.example.template +24 -0
  371. package/src/generators/nextjs-app/files/.gitignore.template +5 -0
  372. package/src/generators/nextjs-app/files/Dockerfile +53 -0
  373. package/src/generators/nextjs-app/files/app/(auth)/sign-in/__sign-in__/page.tsx.template +9 -0
  374. package/src/generators/nextjs-app/files/app/(auth)/sign-up/__sign-up__/page.tsx.template +9 -0
  375. package/src/generators/nextjs-app/files/app/api/config/route.ts.template +39 -0
  376. package/src/generators/nextjs-app/files/app/api/healthz/route.test.ts +15 -0
  377. package/src/generators/nextjs-app/files/app/api/healthz/route.ts +5 -0
  378. package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.test.ts.template +55 -0
  379. package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.ts.template +126 -0
  380. package/src/generators/nextjs-app/files/app/error.tsx +39 -0
  381. package/src/generators/nextjs-app/files/app/global-error.tsx +68 -0
  382. package/src/generators/nextjs-app/files/app/globals.css +105 -0
  383. package/src/generators/nextjs-app/files/app/layout.tsx +59 -0
  384. package/src/generators/nextjs-app/files/app/loading.tsx +13 -0
  385. package/src/generators/nextjs-app/files/app/not-found.tsx +30 -0
  386. package/src/generators/nextjs-app/files/app/page.tsx +20 -0
  387. package/src/generators/nextjs-app/files/components/providers/default.tsx +19 -0
  388. package/src/generators/nextjs-app/files/components/providers/production.tsx +32 -0
  389. package/src/generators/nextjs-app/files/components/providers/telemetry.tsx +76 -0
  390. package/src/generators/nextjs-app/files/components/render-smoke.test.tsx +29 -0
  391. package/src/generators/nextjs-app/files/components/theme-provider.tsx +11 -0
  392. package/src/generators/nextjs-app/files/components.json +21 -0
  393. package/src/generators/nextjs-app/files/eslint.config.mjs +120 -0
  394. package/src/generators/nextjs-app/files/hooks/use-toast.ts +7 -0
  395. package/src/generators/nextjs-app/files/instrumentation.ts +90 -0
  396. package/src/generators/nextjs-app/files/lib/api/fetcher.ts.template +130 -0
  397. package/src/generators/nextjs-app/files/lib/config.ts +21 -0
  398. package/src/generators/nextjs-app/files/lib/logger.ts +29 -0
  399. package/src/generators/nextjs-app/files/lib/schemas/index.ts +19 -0
  400. package/src/generators/nextjs-app/files/lib/utils.ts +6 -0
  401. package/src/generators/nextjs-app/files/next.config.mjs +9 -0
  402. package/src/generators/nextjs-app/files/package.json +70 -0
  403. package/src/generators/nextjs-app/files/postcss.config.mjs +8 -0
  404. package/src/generators/nextjs-app/files/proxy.test.ts.template +30 -0
  405. package/src/generators/nextjs-app/files/proxy.ts +31 -0
  406. package/src/generators/nextjs-app/files/public/.gitkeep +1 -0
  407. package/src/generators/nextjs-app/files/tsconfig.json +42 -0
  408. package/src/generators/nextjs-app/files/vitest.config.mts +15 -0
  409. package/src/generators/nextjs-app/files/vitest.setup.ts +7 -0
  410. package/src/generators/nextjs-app/generator.ts +307 -0
  411. package/src/generators/nextjs-app/schema.json +44 -0
  412. package/src/generators/python-microservice/docs/principles/stack/python/async.md +168 -0
  413. package/src/generators/python-microservice/docs/principles/stack/python/documentation.md +240 -0
  414. package/src/generators/python-microservice/docs/principles/stack/python/mcp.md +147 -0
  415. package/src/generators/python-microservice/docs/principles/stack/python/resilience.md +193 -0
  416. package/src/generators/python-microservice/docs/principles/stack/python/testing.md +281 -0
  417. package/src/generators/python-microservice/files/.env.example.template +30 -0
  418. package/src/generators/python-microservice/files/Dockerfile.template +36 -0
  419. package/src/generators/python-microservice/files/db/schema.sql.template +19 -0
  420. package/src/generators/python-microservice/files/pyproject.toml.template +76 -0
  421. package/src/generators/python-microservice/files/scripts/apply-schema.sh.template +25 -0
  422. package/src/generators/python-microservice/files/src/__packageName__/adapters/comfyui.py.template +87 -0
  423. package/src/generators/python-microservice/files/src/__packageName__/adapters/config.py.template +48 -0
  424. package/src/generators/python-microservice/files/src/__packageName__/adapters/database.py.template +21 -0
  425. package/src/generators/python-microservice/files/src/__packageName__/adapters/message_queue.py.template +29 -0
  426. package/src/generators/python-microservice/files/src/__packageName__/adapters/repository.py.template +130 -0
  427. package/src/generators/python-microservice/files/src/__packageName__/adapters/telemetry.py.template +68 -0
  428. package/src/generators/python-microservice/files/src/__packageName__/adapters/websocket_hub.py.template +36 -0
  429. package/src/generators/python-microservice/files/src/__packageName__/core/domain/entities.py.template +22 -0
  430. package/src/generators/python-microservice/files/src/__packageName__/core/domain/exceptions.py.template +43 -0
  431. package/src/generators/python-microservice/files/src/__packageName__/core/ports.py.template +42 -0
  432. package/src/generators/python-microservice/files/src/__packageName__/core/service/example_service.py.template +68 -0
  433. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/dependencies.py.template +50 -0
  434. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/middleware.py.template +131 -0
  435. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/router.py.template +37 -0
  436. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/websocket_handler.py.template +20 -0
  437. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/cleanup.py.template +35 -0
  438. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/worker.py.template +28 -0
  439. package/src/generators/python-microservice/files/src/__packageName__/main.py.template +108 -0
  440. package/src/generators/python-microservice/files/tests/test_main.py.template +74 -0
  441. package/src/generators/python-microservice/files/tests/test_middleware.py.template +109 -0
  442. package/src/generators/python-microservice/files/tests/test_worker.py.template +16 -0
  443. package/src/generators/python-microservice/generator.ts +286 -0
  444. package/src/generators/python-microservice/schema.json +86 -0
  445. package/src/generators/shared/brand-tokens.ts +301 -0
  446. package/src/generators/shared/capabilities.ts +349 -0
  447. package/src/generators/shared/provenance.ts +61 -0
  448. package/src/generators/shared/scaffold-helpers.ts +309 -0
  449. package/src/generators/system-test-runner/files/tests/bets/.gitkeep +0 -0
  450. package/src/generators/system-test-runner/files/tests/bets/_archive/.gitkeep +0 -0
  451. package/src/generators/system-test-runner/files/tests/conftest.py.template +503 -0
  452. package/src/generators/system-test-runner/files/tests/pyproject.toml.template +20 -0
  453. package/src/generators/system-test-runner/files/tests/system/pages/__init__.py.template +9 -0
  454. package/src/generators/system-test-runner/files/tests/system/pages/base_page.py.template +36 -0
  455. package/src/generators/system-test-runner/files/tests/system/test_a11y_smoke.py.template +132 -0
  456. package/src/generators/system-test-runner/files/tests/system/test_contract_conformance.py.template +140 -0
  457. package/src/generators/system-test-runner/files/tests/system/test_layout_geometry.py.template +109 -0
  458. package/src/generators/system-test-runner/files/tests/system/test_render_smoke.py.template +227 -0
  459. package/src/generators/system-test-runner/files/tests/system/test_system.py.template +158 -0
  460. package/src/generators/system-test-runner/files/tests/system/test_token_conformance.py.template +206 -0
  461. package/src/generators/system-test-runner/files/tests/system/test_visual_regression.py.template +104 -0
  462. package/src/generators/system-test-runner/generator.ts +142 -0
  463. package/src/generators/system-test-runner/schema.json +24 -0
  464. package/src/generators/workspace-dev-cli/cli-src/build.mjs +42 -0
  465. package/src/generators/workspace-dev-cli/cli-src/dist/dev-bundle.js +2168 -0
  466. package/src/generators/workspace-dev-cli/cli-src/src/commands/bet.ts +442 -0
  467. package/src/generators/workspace-dev-cli/cli-src/src/commands/completion.ts +87 -0
  468. package/src/generators/workspace-dev-cli/cli-src/src/commands/doctor.ts +139 -0
  469. package/src/generators/workspace-dev-cli/cli-src/src/commands/lifecycle.ts +548 -0
  470. package/src/generators/workspace-dev-cli/cli-src/src/commands/quality.ts +127 -0
  471. package/src/generators/workspace-dev-cli/cli-src/src/commands/surface.ts +214 -0
  472. package/src/generators/workspace-dev-cli/cli-src/src/index.ts +127 -0
  473. package/src/generators/workspace-dev-cli/cli-src/src/registry.ts +194 -0
  474. package/src/generators/workspace-dev-cli/cli-src/src/theme/color.ts +130 -0
  475. package/src/generators/workspace-dev-cli/cli-src/src/theme/render.ts +158 -0
  476. package/src/generators/workspace-dev-cli/cli-src/src/theme/tokens.ts +122 -0
  477. package/src/generators/workspace-dev-cli/cli-src/src/util/context.ts +43 -0
  478. package/src/generators/workspace-dev-cli/cli-src/src/util/extensions.ts +99 -0
  479. package/src/generators/workspace-dev-cli/cli-src/src/util/paths.ts +46 -0
  480. package/src/generators/workspace-dev-cli/cli-src/src/util/proc.ts +106 -0
  481. package/src/generators/workspace-dev-cli/cli-src/src/util/prompt.ts +108 -0
  482. package/src/generators/workspace-dev-cli/cli-src/src/util/runners.ts +70 -0
  483. package/src/generators/workspace-dev-cli/cli-src/src/util/services.ts +221 -0
  484. package/src/generators/workspace-dev-cli/cli-src/src/util/version.ts +21 -0
  485. package/src/generators/workspace-dev-cli/cli-src/tsconfig.json +16 -0
  486. package/src/generators/workspace-dev-cli/files/.agents/skills/workspace-cli/SKILL.md.template +74 -0
  487. package/src/generators/workspace-dev-cli/files/dev.template +16 -0
  488. package/src/generators/workspace-dev-cli/files/docker-compose.yml.template +20 -0
  489. package/src/generators/workspace-dev-cli/files/scripts/cli/templates/milestone-test.pytmpl.template +46 -0
  490. package/src/generators/workspace-dev-cli/files/scripts/cli/templates/slice-test.pytmpl.template +38 -0
  491. package/src/generators/workspace-dev-cli/generator.ts +136 -0
  492. package/src/generators/workspace-dev-cli/schema.json +22 -0
  493. package/src/hidden-skills/code-intelligence.md +129 -0
  494. package/src/hidden-skills/groundwork-architect/SKILL.md +114 -0
  495. package/src/hidden-skills/groundwork-architect/references/agentic-systems.md +44 -0
  496. package/src/hidden-skills/groundwork-architect/references/ai-native-architecture.md +37 -0
  497. package/src/hidden-skills/groundwork-architect/references/api-and-contracts.md +45 -0
  498. package/src/hidden-skills/groundwork-architect/references/core-and-boundaries.md +45 -0
  499. package/src/hidden-skills/groundwork-architect/references/data-architecture.md +33 -0
  500. package/src/hidden-skills/groundwork-architect/references/decision-records.md +34 -0
  501. package/src/hidden-skills/groundwork-architect/references/durable-execution.md +45 -0
  502. package/src/hidden-skills/groundwork-architect/references/evolutionary-architecture.md +37 -0
  503. package/src/hidden-skills/groundwork-architect/references/identity-and-access.md +41 -0
  504. package/src/hidden-skills/groundwork-architect/references/integration-patterns.md +39 -0
  505. package/src/hidden-skills/groundwork-architect/references/observability.md +36 -0
  506. package/src/hidden-skills/groundwork-architect/references/performance-and-scale.md +41 -0
  507. package/src/hidden-skills/groundwork-architect/references/platform-and-delivery.md +47 -0
  508. package/src/hidden-skills/groundwork-architect/references/realtime-and-async.md +28 -0
  509. package/src/hidden-skills/groundwork-architect/references/reliability.md +31 -0
  510. package/src/hidden-skills/groundwork-architect/references/security-and-trust.md +47 -0
  511. package/src/hidden-skills/groundwork-architect/references/surface-architecture.md +40 -0
  512. package/src/hidden-skills/groundwork-architect/sync-anchor.md +34 -0
  513. package/src/hidden-skills/groundwork-architecture/architecture-template.md +50 -0
  514. package/src/hidden-skills/groundwork-architecture/instructions.md +139 -0
  515. package/src/hidden-skills/groundwork-architecture/phases/01-context-ingestion.md +18 -0
  516. package/src/hidden-skills/groundwork-architecture/phases/02-technical-constraints.md +27 -0
  517. package/src/hidden-skills/groundwork-architecture/phases/03-service-design.md +19 -0
  518. package/src/hidden-skills/groundwork-architecture/phases/04-data-flow-communication.md +23 -0
  519. package/src/hidden-skills/groundwork-architecture/phases/05-component-boundaries-contracts.md +17 -0
  520. package/src/hidden-skills/groundwork-architecture/phases/06-draft-review-present.md +38 -0
  521. package/src/hidden-skills/groundwork-architecture/phases/07-commit.md +33 -0
  522. package/src/hidden-skills/groundwork-architecture/templates/architecture-cache.md +43 -0
  523. package/src/hidden-skills/groundwork-architecture-extract/instructions.md +163 -0
  524. package/src/hidden-skills/groundwork-architecture-extract/templates/architecture-extract-cache.md +21 -0
  525. package/src/hidden-skills/groundwork-bet/briefs/slice-worker.md +191 -0
  526. package/src/hidden-skills/groundwork-bet/instructions.md +88 -0
  527. package/src/hidden-skills/groundwork-bet/templates/bet-progress-test.md +126 -0
  528. package/src/hidden-skills/groundwork-bet/templates/change-proposal.md +38 -0
  529. package/src/hidden-skills/groundwork-bet/templates/decomposition/meta.json +4 -0
  530. package/src/hidden-skills/groundwork-bet/templates/decomposition/milestone-index.md +35 -0
  531. package/src/hidden-skills/groundwork-bet/templates/decomposition/slice.md +35 -0
  532. package/src/hidden-skills/groundwork-bet/templates/pitch.md +45 -0
  533. package/src/hidden-skills/groundwork-bet/templates/technical-design/01-ui-design.md +51 -0
  534. package/src/hidden-skills/groundwork-bet/templates/technical-design/02-data-flows.md +36 -0
  535. package/src/hidden-skills/groundwork-bet/templates/technical-design/03-api-design.md +90 -0
  536. package/src/hidden-skills/groundwork-bet/templates/technical-design/04-data-design.md +29 -0
  537. package/src/hidden-skills/groundwork-bet/workflows/01-discovery.md +198 -0
  538. package/src/hidden-skills/groundwork-bet/workflows/02-design.md +168 -0
  539. package/src/hidden-skills/groundwork-bet/workflows/03-decomposition.md +246 -0
  540. package/src/hidden-skills/groundwork-bet/workflows/04-delivery.md +193 -0
  541. package/src/hidden-skills/groundwork-bet/workflows/05-validation.md +199 -0
  542. package/src/hidden-skills/groundwork-design-system/instructions.md +125 -0
  543. package/src/hidden-skills/groundwork-design-system/templates/brand-tokens.md +182 -0
  544. package/src/hidden-skills/groundwork-design-system/templates/design-system-cache.md +64 -0
  545. package/src/hidden-skills/groundwork-design-system/tracks/_foundation.md +136 -0
  546. package/src/hidden-skills/groundwork-design-system/tracks/agentic-protocol.md +269 -0
  547. package/src/hidden-skills/groundwork-design-system/tracks/cli.md +355 -0
  548. package/src/hidden-skills/groundwork-design-system/tracks/graphical-ui.md +330 -0
  549. package/src/hidden-skills/groundwork-design-system-extract/instructions.md +124 -0
  550. package/src/hidden-skills/groundwork-design-system-extract/templates/design-system-extract-cache.md +19 -0
  551. package/src/hidden-skills/groundwork-designer/SKILL.md +108 -0
  552. package/src/hidden-skills/groundwork-designer/references/accessibility.md +33 -0
  553. package/src/hidden-skills/groundwork-designer/references/ai-native-design.md +37 -0
  554. package/src/hidden-skills/groundwork-designer/references/design-review.md +29 -0
  555. package/src/hidden-skills/groundwork-designer/references/design-systems-and-tokens.md +33 -0
  556. package/src/hidden-skills/groundwork-designer/references/interaction-and-motion.md +37 -0
  557. package/src/hidden-skills/groundwork-designer/references/layout-and-space.md +33 -0
  558. package/src/hidden-skills/groundwork-designer/references/usability-and-ux.md +33 -0
  559. package/src/hidden-skills/groundwork-designer/references/visual-craft.md +49 -0
  560. package/src/hidden-skills/groundwork-designer/sync-anchor.md +20 -0
  561. package/src/hidden-skills/groundwork-doc-sync/instructions.md +100 -0
  562. package/src/hidden-skills/groundwork-elicit/instructions.md +66 -0
  563. package/src/hidden-skills/groundwork-elicit/methods.md +65 -0
  564. package/src/hidden-skills/groundwork-infra-adopt/instructions.md +168 -0
  565. package/src/hidden-skills/groundwork-infra-adopt/templates/infra-adopt-cache.md +21 -0
  566. package/src/hidden-skills/groundwork-mvp/instructions.md +223 -0
  567. package/src/hidden-skills/groundwork-mvp/templates/mvp-cache.md +9 -0
  568. package/src/hidden-skills/groundwork-patch/instructions.md +40 -0
  569. package/src/hidden-skills/groundwork-persona/instructions.md +54 -0
  570. package/src/hidden-skills/groundwork-product/SKILL.md +102 -0
  571. package/src/hidden-skills/groundwork-product/references/ai-native-product.md +45 -0
  572. package/src/hidden-skills/groundwork-product/references/discovery-and-opportunity.md +38 -0
  573. package/src/hidden-skills/groundwork-product/references/product-risks.md +52 -0
  574. package/src/hidden-skills/groundwork-product/references/requirements-and-specs.md +39 -0
  575. package/src/hidden-skills/groundwork-product/references/scope-and-sequencing.md +35 -0
  576. package/src/hidden-skills/groundwork-product/references/shaping-and-appetite.md +48 -0
  577. package/src/hidden-skills/groundwork-product/references/success-metrics-and-signals.md +37 -0
  578. package/src/hidden-skills/groundwork-product/sync-anchor.md +19 -0
  579. package/src/hidden-skills/groundwork-product-brief/instructions.md +231 -0
  580. package/src/hidden-skills/groundwork-product-brief-extract/instructions.md +139 -0
  581. package/src/hidden-skills/groundwork-product-brief-extract/templates/product-brief-extract-cache.md +17 -0
  582. package/src/hidden-skills/groundwork-review/checklists/architecture.md +93 -0
  583. package/src/hidden-skills/groundwork-review/checklists/bet-pitch.md +94 -0
  584. package/src/hidden-skills/groundwork-review/checklists/decomposition.md +135 -0
  585. package/src/hidden-skills/groundwork-review/checklists/design-system.md +85 -0
  586. package/src/hidden-skills/groundwork-review/checklists/domain-entity.md +66 -0
  587. package/src/hidden-skills/groundwork-review/checklists/implementation-readiness.md +46 -0
  588. package/src/hidden-skills/groundwork-review/checklists/infrastructure.md +68 -0
  589. package/src/hidden-skills/groundwork-review/checklists/maturity.md +71 -0
  590. package/src/hidden-skills/groundwork-review/checklists/product-brief.md +69 -0
  591. package/src/hidden-skills/groundwork-review/checklists/technical-design.md +112 -0
  592. package/src/hidden-skills/groundwork-review/instructions.md +181 -0
  593. package/src/hidden-skills/groundwork-scaffold/instructions.md +254 -0
  594. package/src/hidden-skills/groundwork-scaffold/phases/01-ingestion-service-mapping.md +87 -0
  595. package/src/hidden-skills/groundwork-scaffold/phases/02-scaffolding-execution.md +15 -0
  596. package/src/hidden-skills/groundwork-scaffold/phases/03-service-documentation-api-stubs.md +100 -0
  597. package/src/hidden-skills/groundwork-scaffold/phases/04-infrastructure-verification.md +17 -0
  598. package/src/hidden-skills/groundwork-scaffold/phases/05-draft-review.md +19 -0
  599. package/src/hidden-skills/groundwork-scaffold/phases/06-commit.md +19 -0
  600. package/src/hidden-skills/groundwork-scaffold/templates/scaffold-cache.md +23 -0
  601. package/src/hidden-skills/groundwork-scan/instructions.md +164 -0
  602. package/src/hidden-skills/groundwork-scan/references/digest-schema.md +66 -0
  603. package/src/hidden-skills/groundwork-scan/references/exclusions.md +44 -0
  604. package/src/hidden-skills/groundwork-scan/templates/architecture-findings.md +42 -0
  605. package/src/hidden-skills/groundwork-scan/templates/design-findings.md +23 -0
  606. package/src/hidden-skills/groundwork-scan/templates/overview.md +26 -0
  607. package/src/hidden-skills/groundwork-scan/templates/product-findings.md +23 -0
  608. package/src/hidden-skills/groundwork-scan/templates/scan-state.json +19 -0
  609. package/src/hidden-skills/groundwork-stack-forge/instructions.md +150 -0
  610. package/src/hidden-skills/groundwork-stack-forge/references/authoring-engineer-skills.md +107 -0
  611. package/src/hidden-skills/groundwork-surface-activation/instructions.md +138 -0
  612. package/src/hidden-skills/groundwork-update/briefs/reconcile-worker.md +196 -0
  613. package/src/hidden-skills/groundwork-update/instructions.md +200 -0
  614. package/src/hidden-skills/groundwork-writer/SKILL.md +278 -0
  615. package/src/hidden-skills/maturity-model.md +125 -0
  616. package/src/hidden-skills/operating-contract.md +400 -0
  617. package/src/hidden-skills/repo-map-schema.md +90 -0
  618. package/src/hidden-skills/templates/adr.md +57 -0
  619. package/src/hidden-skills/templates/capability-ports.md +71 -0
  620. package/src/hidden-skills/templates/discovery-notes.md +33 -0
  621. package/src/hidden-skills/templates/domain-entity.md +80 -0
  622. package/src/hidden-skills/templates/gap-ledger.md +21 -0
  623. package/src/hidden-skills/templates/handoff.md +37 -0
  624. package/src/hidden-skills/templates/maturity.md +39 -0
  625. package/src/hidden-skills/templates/surfaces.md +207 -0
  626. package/src/skills/groundwork-check/SKILL.md +56 -0
  627. package/src/skills/groundwork-check/instructions.md +70 -0
  628. package/src/skills/groundwork-orchestrator/SKILL.md +176 -0
  629. package/src/skills/groundwork-orchestrator/workflow-index.md +50 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,781 @@
1
+ # Changelog
2
+
3
+ All notable changes to GroundWork are documented here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to
5
+ [Semantic Versioning](https://semver.org/). Entries that require action when upgrading an
6
+ existing installation are prefixed `[migration]` — `npx groundwork update` surfaces them
7
+ automatically when it detects a version jump.
8
+
9
+ ## [Unreleased]
10
+
11
+ ### Fixed (`update` prints a scannable change summary instead of dumping the whole changelog, 2026-06-26)
12
+
13
+ A version-jump `groundwork update` dumped every line of every changelog entry in the range verbatim — for a 0.9.0 → 0.10.0 jump that is a multi-screen wall of prose. Worse, the "Migration required" list matched *any* line containing the `[migration]` token, so a prose sentence that merely mentions the token in backticks ("Changelog `[migration]` lines now reference registry ids") leaked into the list as a stray, prefix-stripped bullet ("Changelog `` lines now reference registry ids"). The renderer (`bin/groundwork.js`) now prints one bullet per change — `Category — headline`, derived from each `### Category (headline, date)` section header — and surfaces only genuine `- [migration]` bullets, with the token prefix stripped and the registry id preserved. `update --full` restores the verbatim entry dump for anyone who wants it, and a footer points at `CHANGELOG.md` / `--full` for detail.
14
+
15
+ - [no-migration] CLI output only; `bin/groundwork.js` is framework-owned and clean-replaces on update. No project artifact, migration, or behavior change — only what `update` prints.
16
+
17
+ ## [0.10.0] - 2026-06-25
18
+
19
+ ### Changed (the Naming family now reconciles the relocated hidden-skills path, 2026-06-25)
20
+
21
+ A live update run surfaced a gap: the hidden methodology skills moved from `.agents/groundwork/skills/` to `.groundwork/skills/`, but `groundwork-update`'s Naming family only carried the `ux-design`/`hexagonal-architecture` renames and the `npx groundwork` → `npx groundwork-method` rewrite — nothing swept doc/script references to the old skills path. Stale references survived an update and were only caught when a review gate happened to read the doc that held one. The Naming family now lists `.agents/groundwork/skills/` → `.groundwork/skills/` as a legacy signal, and the reconcile-worker gains an explicit **reference rewrite** recipe covering both that path and the `npx` rename (touch only the changed token; leave the user-owned `config.toml`, lockfiles, and historical records alone).
22
+
23
+ - [no-migration] Skill-text only; the `groundwork-update` skill clean-replaces on update. The reconcile it now performs runs against existing installs the next time `update groundwork` is invoked.
24
+
25
+ ### Changed ("update groundwork" reliably routes through the orchestrator, 2026-06-25)
26
+
27
+ The orchestrator is the front door for framework maintenance, but nothing told the agent so — a project agent that heard "update groundwork" had no signal connecting that intent to `groundwork-orchestrator`, so it would guess (probe npm, grep for a skill) instead of routing. The orchestrator's skill `description` now explicitly claims "update groundwork" / "upgrade groundwork" / "bring this project up to date" as triggers (the description is the only thing a skill-matcher reads), and the consumer `AGENTS.md` "Start here" names the orchestrator as the maintenance entry point too — "don't go hunting for a CLI command or a specific skill." The internal route to `groundwork-update` already existed; this closes the discovery gap that kept agents from reaching it.
28
+
29
+ - [no-migration] Skill-description and instruction-doc text only; `AGENTS.md` and the orchestrator skill clean-replace on update. No CLI or project-artifact change.
30
+
31
+ ### Changed (groundwork-update orchestrates the catch-up as a context-lean driver, 2026-06-25)
32
+
33
+ `groundwork-update` no longer runs the whole catch-up inline. It is now a **driver**: the main session holds the thin spine — the upgrade brief, the Family Index, the cheap structural detection, the user pacing, the review gate, and the commits — and farms each unit of work (one brief item, or one reconcile family) to a disposable `reconcile-worker` sub-agent that reads the canonical and the project's instances *in its own context*, makes the change, and returns a short structured report, leaving its edits unstaged for the driver to review and commit. The transform reasoning dies with the worker's context, so the driver stays small enough to reason about the update as a whole. It reuses the bet-delivery driver/slice-worker pattern and the `fan_out` hint convention: with a sub-agent dispatch tool it farms out; without one it degrades to advancing each unit inline, one at a time (it must run everywhere). Units run serially in dependency order — no concurrency.
34
+
35
+ - [no-migration] Skill-execution-model change only; the `groundwork-update` skill (and its new `briefs/reconcile-worker.md`) clean-replace on update like every framework skill. No project artifact or CLI behavior changes.
36
+
37
+ ### Changed (one update lane, reconciled to the current canonical, 2026-06-24)
38
+
39
+ The framework now has a single call to bring a project current, and one durable engine behind it. `groundwork-upgrade` is renamed `groundwork-update` and reframed: Phase A still works the residual upgrade brief the CLI compiles (edited seeded docs, a customized launcher, generator output behind its generator), and a new Phase B **reconciles each artifact family to the framework's current canonical** — reading the live shape that ships in `.groundwork/skills/`, detecting divergence, and advancing legacy structure forward with agent judgment. This replaces the change-indexed agent-migration registry: structural advancement is no longer a per-change migration but a target-state reconcile driven by a small ownership map (the skill's Family Index), so a future structural change is picked up for free when its owning skill changes. The standalone `groundwork-docs-uplift` skill folds in as the Docs-site family. The former `groundwork-update` (docs-kept-in-sync-with-your-own-code) is renamed `groundwork-doc-sync` to end the name collision; its behavior is unchanged. The migration registry keeps only its mechanical `cli` migrations; the ten `agent` migrations are retired, their transform knowledge relocated into the Family Index.
40
+
41
+ - [no-migration] Skill renames clean-replace on update like every framework skill (`installSkillTrees`), and no project artifact stores a skill directory name. Structural advancement that the retired agent-migrations performed is now carried by the `groundwork-update` skill's Phase B reconcile against the current canonical — run it after `npx groundwork-method update`.
42
+
43
+ ### Changed (the bet becomes pure prose; tests and contracts are built in code at Delivery, 2026-06-24)
44
+
45
+ The bet is now pure prose, and every machine-readable artifact is built in code at Delivery rather than authored up front. Decomposition is a browsable prose tree at `docs/bets/<slug>/decomposition/` (`meta.json` + a milestone `index.md` + a file per slice, each with a **Proof of work** section); the monolithic `decomposition.md`, the `decomposition.json` mirror, and the separate `test-review.md` surface are gone. The bet-progress suite is materialized red at Delivery start from the approved prose, turned green slice by slice — the suite is the board (`./dev bet status`, derived), git is the record. The API/data design prose carries the shapes at design fidelity, so `docs/bets/<slug>/contracts/` is removed; the canonical machine-readable contract is captured code-first into `docs/architecture/api/<service>/` from the running service at Validation. The approval baseline moved from `approval_commit` to the git tag `bet/<slug>/approved` on the approved-prose commit, and the integrity model inverts: the prose is frozen (tamper-checked against the tag) while the code — tests and the generated contract — is free to change. The whole bet is archived at Delivery (`docs/bets/<slug>/` and `tests/bets/<slug>/` → `_archive/`).
46
+
47
+ - [migration] Existing installs carry old-shape bet artifacts; `decomposition.md` becomes a `decomposition/` prose tree, `decomposition.json` is dropped (the suite + git are the record), `docs/bets/<slug>/contracts/` is removed (the prose design carries shapes; the canonical contract is captured into `docs/architecture/api/<service>/` from running code), and the approval baseline is the git tag `bet/<slug>/approved`. Largely advisory — it names active bets to restructure by hand and mechanically removes obsolete `decomposition.json`/`contracts/` from archived bets and stray `.groundwork/bets/<slug>/decomposition.json` (gw-bet-prose-redesign)
48
+
49
+ ### Changed (the docs site routes two audiences and orders its sidebar as a learning journey, 2026-06-24)
50
+
51
+ The scaffolded docs site opened on an undifferentiated link dump and rendered its canonical docs as a flat eleven-item sidebar. It now greets two audiences and reads as a product-learning journey. The architecture docs nest under one section, and a skill-authored getting-started on-ramp gives a fresh-clone developer a real front door.
52
+
53
+ - **Two-audience landing.** `app/page.tsx` keeps the brand hero, then offers two on-ramps over the section grid — "new here — get it running" → `docs/getting-started`, and "understand the product" → `docs/product-brief`. Each card renders only when its target doc exists (a route-existence guard over `source.getPages()`), so a half-populated scaffold degrades gracefully instead of linking to a 404.
54
+ - **Product-learning sidebar order.** `seedDocsMeta` orders the top level product-brief → design-system → architecture → ways-of-working → getting-started → bets → … → principles (sunk last and collapsed). Architecture is now a nested folder ordered by a seeded `docs/architecture/meta.json` (index → infrastructure → domain → services → api → decisions), and getting-started by `docs/getting-started/meta.json` (index → setup → dev-cli-reference). Each sub-meta is seeded only when absent, so a hand-tuned project is never clobbered.
55
+ - **Nested architecture docs.** `docs/architecture.md` becomes `docs/architecture/index.md`, and `infrastructure.md`, `domain/`, `services/`, `api/`, and `decisions/` move under `docs/architecture/`. The authoring skills (architecture, architecture-extract, scaffold, infra-adopt) and every live cross-reference across the skill corpus, review checklists, orchestrator, and `./dev` now point at the nested paths; the two raw `cat > docs/architecture/index.md` assemble steps gained a `mkdir -p` guard.
56
+ - **Skill-authored getting-started on-ramp.** `groundwork-scaffold` (greenfield) and `groundwork-infra-adopt` (brownfield) now author `docs/getting-started/{index,setup,dev-cli-reference}.md` — a routing index, a fresh-clone setup walkthrough (prerequisites → `./dev doctor` → install dependencies → `./dev start`, the content `infrastructure.md` never carried), and a `./dev` command reference derived from `./dev help`. `infrastructure.md` slims to the running-system shape plus the canonical three commands and a pointer to the on-ramp.
57
+ - **Docs-uplift target state.** `groundwork-docs-uplift` T4/T5 are rewritten to the nested order and two-audience landing, and route existing flat-layout sites through the migration first.
58
+ - [no-migration] Existing installs carry the flat architecture layout (`docs/architecture.md`, `docs/infrastructure.md`, `docs/domain/`, `docs/services/`, `docs/api/`, `docs/decisions/`); the `groundwork-update` skill's Architecture-docs family relocates them under `docs/architecture/` with `architecture.md` becoming `index.md`, rewrites the sidebar metas, and carries live cross-references forward
59
+
60
+ ### Changed (the bet test-suite SHA seal is replaced by a documented-vs-actual reconciliation, 2026-06-23)
61
+
62
+ The sealed test manifest (`./dev bet sign` writing a SHA-256 `test-manifest.json`, and `./dev test bet` refusing a "tampered" suite) is removed. It hashed the *test files* while the user actually approved the *doc* (`test-review.md`), caught only the crudest cheat (editing a test file) while being blind to implementation-gaming, was applied uniformly against the project's own "proportionality, not ceremony" principle, and in projects without the dev CLI degraded to a hand-written manifest nothing ever verified. The protective intent — an approved test is the fixed definition of done, changing one is a deliberate decision — is kept, but enforced by the artifacts that already exist.
63
+
64
+ - **Approval commit replaces the seal.** At Decomposition close the agent commits the approved `tests/bets/<slug>/` together with `docs/bets/<slug>/test-review.md` and records that commit's SHA as `approval_commit` in `decomposition.json`. The commit is the signature and the git baseline.
65
+ - **Delivery reconciliation replaces the hash gate.** The per-slice review (and a once-over at Validation) reconciles the documented assertions (verbatim in `test-review.md`) against the code and against `git log <approval_commit>..HEAD -- tests/bets/<slug>/`: any test change not paired with an approved amendment is a finding. The existing Acceptance auditor lens additionally owns *honest green* — implementation gamed to the test (hardcoded returns, special-cased inputs, test-only branches) is a finding even when the suite passes.
66
+ - **`./dev bet sign` is removed**; `./dev bet status` and `./dev test bet` are unchanged except that `test bet` no longer runs a seal check before pytest.
67
+ - [migration] Existing installs carry orphaned `.groundwork/bets/*/test-manifest.json` seal files; the obsolete `bet sign` command goes away with the dev-bundle update, and the stray manifests are deleted (gw-drop-test-manifest)
68
+
69
+ ### Added (docs site is branded, draws diagrams, and orders its own sidebar, 2026-06-23)
70
+
71
+ The scaffolded Fumadocs site (`docs-site` generator) consumed none of the brand system GroundWork already generates, drew no diagrams, and rendered its sidebar in raw filesystem order patched by a JS hack. It now wears the project's brand, renders Mermaid client-side, orders the canonical doc set declaratively, and opens on a generated landing instead of a redirect (plan: `docs/plans/docs-quality-uplift.md`, WS-F + WS-G).
72
+
73
+ - **Shared brand projection.** The brand-token projection (`resolveVisual`, the `ResolvedVisual` type, the colour/length validators, and the neutral/role constants) is extracted from `nextjs-app` into `src/generators/shared/brand-tokens.ts`; both generators import it. The nextjs-app emitted `app/brand.css` is byte-identical — only the import path moved.
74
+ - **Branded docs theme.** `docs-site` projects the brand palette onto Fumadocs v14's `--fd-*` theme variables (HSL channel triplets) in a generated `app/brand.css`, adds an `app/docs.css` typography sheet (≈68ch measure, 1.6 line-height, an explicit h1–h4 scale), and wires the brand font + wordmark in `app/layout.tsx`. With no `brand-tokens.json`, neither file is emitted and `layout.tsx` imports nothing extra — the unbranded site is the stock Fumadocs starter, unchanged.
75
+ - **Client-side Mermaid.** A small remark transform in `source.config.ts` rewrites each fenced ` ```mermaid ` block into a `<Mermaid chart="…" />` node, and a `Mermaid` client component (`mermaid` added to deps, passed via the docs page's MDX components map) renders it in the browser, re-rendering on light/dark toggle. `rehype-mermaid` is deliberately avoided — it transitively imports `mermaid-isomorphic` → `playwright`, so merely importing it makes `next build`/codegen require Playwright even when nothing renders at build. This keeps `next build` Playwright-free and unable to fail on a diagram, while the same plain-Markdown block GitHub renders natively, so content stays dual-render.
76
+ - **Declarative sidebar order + branded landing.** The generator seeds `docs/meta.json` ordering the canonical set (product-brief → … → principles, with principles sunk last and collapsed via `docs/principles/meta.json`); the `betsFirst()` JS hack in `app/docs/layout.tsx` is retired. `app/page.tsx` is now a brand-driven hero + section cards derived live from the doc tree, with the existing `/docs` index as the fallback. `tsconfig.json` gains `target: ES2017`, fixing a pre-existing docs-site type-check failure on `Map` iteration.
77
+ - **New `groundwork-docs-uplift` maintenance skill.** The companion to the generator: it brings an *existing* doc site — one that predates the branding, was hand-built, or has drifted — to the same target state (brand theme, rendered diagrams, ordered nav, landing page), and gives the docs a reader-first pass that strips any leftover `## Summary for Downstream` residue. Routed from the orchestrator's anytime lane.
78
+ - [no-migration] The docs site is generator-produced (Tier 3); existing installs regenerate it through the normal upgrade path and pick up the branding, diagrams, and ordering — no dedicated migration step is required. The new skill clean-installs like every framework skill. The seeded `docs/meta.json` is Tier-2 sidebar config that lands in the project tree on regeneration (and is never clobbered if the project has hand-tuned it); GitHub and agents ignore it, so the docs/ tree stays effectively content-pristine.
79
+
80
+ ### Changed (setup context split out of published docs/, 2026-06-23)
81
+
82
+ GroundWork's setup flows produced one artifact serving two masters: the cross-phase `## Summary for Downstream` block the *flow* reads, and the product documentation a reader needs — both crammed atop every `docs/*.md`, which made the published docs read as a report-out of the setup conversation. The two are now separate. Each setup phase writes its cross-phase contract to a temporary `.groundwork/context/<phase>.md` store; published `docs/` carry only clean reference documentation.
83
+
84
+ - **The Downstream Context store (Protocol 5).** The four-subsection contract (Key Decisions / Binding Constraints / Deferred Questions / Out of Scope) moves to `.groundwork/context/<phase>.md`, read by downstream setup phases. Published setup docs no longer open with a `## Summary for Downstream` section. The writer skill, every setup-phase commit, and the review checklists follow.
85
+ - **Setup Graduation (Protocol 10).** The context store is scaffolding, not a ledger: at the setup→delivery transition the orchestrator graduates every still-binding decision into a `docs/decisions/` ADR, reconciles the rest into `docs/`, then tears the store down. By the end of setup everything durable lives in `docs/`; nothing setup-only remains.
86
+ - [no-migration] Existing installs carry a stale summary section atop each setup doc; the `groundwork-update` skill's Doc-contracts family graduates it in place — binding decisions promoted to ADRs or the doc body, then the section stripped — leaving docs/ as clean reference documentation
87
+ ### Changed (repo-map is now multi-language and extensible, 2026-06-23)
88
+
89
+ The deterministic code map grew from four languages to a fidelity-tiered, project-extensible map. Graph fidelity (real import edges + PageRank centrality) now covers Go, Python, TypeScript/JavaScript, **Java, and Dart**; a further ten languages (Rust, Kotlin, C#, C/C++, Scala, Swift, PHP, Ruby, Lua) map at symbols fidelity (symbol index + module shape + external deps). `repo-map.json` gains `coverage` (per-language file count + fidelity) and `unmapped` (languages present but not mapped, with reasons), and the CLI nudges toward enabling them.
90
+
91
+ - **Project extension seam.** A repo enables any language repo-map does not cover — or overrides a built-in — by committing `.groundwork/config/repo-map.languages.js` (grammar + tree-sitter queries + an optional resolver). No fork required. A grammar that fails to load degrades gracefully (reported in `unmapped`) instead of crashing the run.
92
+ - **Grammar supply chain owned in-repo.** Enabling Dart required tree-sitter ABI 15, which forced `web-tree-sitter` `0.22.6` → `0.26.9` (a changed wasm format that the old `tree-sitter-wasms` pack could not satisfy). The shipped grammars are now built from pinned sources by `scripts/build-grammars.mjs` (tree-sitter CLI + a self-contained wasi-sdk — no Docker) and vendored under `lib/repo-map/grammars/`, replacing the `tree-sitter-wasms` dependency. Net install footprint drops (a 49 MB dependency removed; ~2.5 MB gzipped vendored).
93
+ - [no-migration] `repo-map` is run via `npx groundwork-method`; existing installs pick up the new engine and grammars automatically, and the added cache fields are regenerated on next run.
94
+
95
+ ### Fixed (docs site no longer 404s at its `/docs` root, 2026-06-23)
96
+
97
+ The scaffolded Fumadocs site (`docs-site` generator) compiles the pristine root `docs/` tree untouched, which ships without an `index.md`. The home route redirects `/` → `/docs`, but the empty slug had no backing page, so a freshly provisioned site 404'd on first load even though every real page (`/docs/architecture`, `/docs/product-brief`, …) served correctly — the failure mode seen running `./dev docs`.
98
+
99
+ - The catch-all route now renders a generated overview at the `/docs` root instead of 404ing: it lists every doc grouped by its top-level section, derived live from the page list. The root `docs/` tree stays pristine (no injected `index.md`), unknown slugs still 404, and the landing title comes from the project's `navTitle`.
100
+ - [no-migration] The docs site is generator-produced (Tier 3); existing installs regenerate it through the normal upgrade path and pick up the fix — no dedicated migration step is required.
101
+
102
+ ### Changed (hidden skills relocated out of `.agents/` into `.groundwork/skills/`, 2026-06-21)
103
+
104
+ On-demand methodology skills, the discipline personas, `groundwork-writer`, and the shared references are GroundWork's private, orchestrator-routed instruction files — never meant for an agent's skill scanner to discover. They now install into `.groundwork/skills/` (GroundWork's home directory) instead of `.agents/groundwork/skills/`, so no agent's discovery rules can pick them up. Only the genuinely-registered skills (`groundwork-orchestrator`, `groundwork-check`) remain under `.agents/skills/`.
105
+
106
+ - **Install destination moved.** `npx groundwork init`/`update` now copy `src/hidden-skills/*` to `.groundwork/skills/`; the orchestrator routing table, every inter-skill path reference, the install manifest (tier 1), and the docs follow.
107
+ - **Engineer skills are canon-in-`src`, promoted at scaffold only.** The five engineer skills moved to `src/engineer-skills/` and are no longer installed at the GroundWork root. A service generator still promotes the matching skill into the scaffolded project's `.agents/skills/` (the only place it becomes a registered skill).
108
+ - [migration] Existing installs have the orphaned `.agents/groundwork/skills/` tree removed on update; the new tree installs at `.groundwork/skills/`, and any promoted `.agents/skills/groundwork-*-engineer/` is left untouched (gw-relocate-hidden-skills)
109
+
110
+ ### Added (high-end micro-polish: per-app atmosphere tokens, token-driven engineer, deterministic conformance, 2026-06-21)
111
+
112
+ Design craft is now specified as per-app tokens and verified deterministically, so agents deliver the micro-level polish — atmosphere, motion, optical finish — that separates high-end UI from a framework default. The lever is "specify concretely → build to spec → verify against spec," not vision-grading screenshots.
113
+
114
+ - **brand-tokens `visual` contract extended** with the atmosphere layer: `elevation` (multi-layer shadow stacks), `blur`, `gradients`, `surface` treatments (glass/elevated/hero), `motion.interactions`, and `typography.roles` (per-role line-height/tracking + `numeric`). The design system fills these per app.
115
+ - **Next.js token projection (parity with electron/flutter).** The nextjs-app generator now reads `brand-tokens.json` and projects the palette + atmosphere into a generated `app/brand.css`; `app/globals.css` maps them into Tailwind token utilities (`shadow-low/mid/high`, `backdrop-blur-*`, semantic `success/warning/info`) and surface classes (`.surface-glass/.surface-elevated/.surface-hero`).
116
+ - **Engineer skill is token-driven.** `groundwork-nextjs-engineer` no longer carries a fixed aesthetic catalogue (the glass variants, the 4-layer shadow values, named themes, the Geist mandate); its references teach the stack mechanics and point at the app's design system. Atmosphere is delivered per app, never baked into a skill.
117
+ - **Designer canon deepened** with the atmosphere/material layer (translucency, ambient glow, grain, multi-plane depth) and optical finish (optical alignment, crisp 1px rendering, tabular numerals), anti-mimicry framed.
118
+ - **Per-surface micro-polish spec + convergent technique research.** Bet design requires a token-traceable motion/atmosphere/static-micro spec per graphical surface (concreteness-gated at review); at design-settle the design system runs a convergent pass over high-end exemplars of the chosen aesthetic, recording concrete techniques (not images) as a technique library.
119
+ - **Deterministic verification.** New `test_token_conformance.py` (Tier 1) asserts the atmosphere actually landed (tokens resolve, multi-layer elevation, backdrop blur on surface treatments); the token-conformance lint now also bans raw shadow/blur/gradient literals. The vision-grading Tier-3 `visual-fidelity` review is removed — the craft bar is the concrete spec, judged for conformance by the deterministic gate and a designer spec-conformance pass at delivery.
120
+ - [no-migration] Existing Next.js apps regenerate their token layer — gaining `app/brand.css`, the restructured token-driven `globals.css`, and `test_token_conformance.py` — with hand-edited `globals.css` reconciled rather than clobbered; the `groundwork-update` skill's Next.js-token-layer family drives this via the generator-regenerate path
121
+
122
+ ### Added (off-script support: composable `./dev`, the Day-2 baseline, and customization guidance, 2026-06-21)
123
+
124
+ GroundWork now treats its shipped scaffolds and `./dev` CLI as a starting point the project owns and grows, and holds off-script work to the same bar as the paved road (plan: `docs/plans/archive/customization-and-forge.md`).
125
+
126
+ - **The `./dev` CLI is composable.** A project adds its own commands without touching the framework bundle — a JSON file under `.dev/commands/`, or a `commands` block in `.dev/dev.config.json`. Project commands appear in `./dev help` and shell completion beside the built-ins, run as subprocesses with extra args appended, and may shadow a built-in (e.g. redefine `start` for a stack the default lifecycle does not fit). The command layer is project-owned: `update` never overwrites it (the bundle that reads it is framework-owned and clean-replaces as before).
127
+ - **`./dev start` never no-ops silently.** An empty workspace — no containers, native services, or runners — prints an honest "nothing registered" notice pointing at how to register a runner or add a command (the *no empty capabilities* rule).
128
+ - **New principle — the Day-2 Operational Baseline** (`docs/principles/delivery/day-2-operational-baseline.md`): the stack-agnostic bar (config validation, typed errors, a debug entry point, observability, graceful shutdown, a pure core, a fast test, dev-CLI integration) every project clears, plus the *no empty capabilities* and *off-script still lands well* rules.
129
+ - **Customization guidance** woven into the scaffold and bet-delivery flows: adapt shipped tooling to fit, never leave a command inert, never build a parallel tool beside it.
130
+ - [no-migration] The new `./dev` bundle clean-replaces on update like any framework-owned bundle; the project command layer it reads is additive and project-owned, so old installs need nothing beyond the normal bundle refresh, and the new principle doc arrives through the Tier-2 doc refresh.
131
+
132
+ ### Changed (architecture de-jargoned — keep the discipline, drop the label, 2026-06-19)
133
+
134
+ The structural discipline is unchanged — a pure domain core, dependencies pointing inward,
135
+ swappable edges, the rule enforced in CI — but it is no longer named after the "hexagonal /
136
+ ports-and-adapters" framework, and the generated services now use each language's own idiom
137
+ instead of a cross-language metaphor (plan: `docs/plans/archive/pragmatic-architecture-naming.md`).
138
+
139
+ - **Principle reframed.** `system-design/hexagonal-architecture.md` → `code-structure.md` ("How
140
+ We Structure Code"); the manifesto, `llms.txt`, the architect persona, and every cross-reference
141
+ follow. The whole principles corpus was deep-rewritten to research-backed, decision-grade depth.
142
+ - **Go scaffold made idiomatic.** Interfaces move from `internal/core/gateway/` into the consuming
143
+ `internal/core/service` package; `internal/provider/` splits into technology-named packages
144
+ (`internal/postgres`, `internal/kafka`, `internal/pubsub`, `internal/httpclient`,
145
+ `internal/websocket`, `internal/llm`). A real `depguard` config now fails the build when the core
146
+ imports an edge package — the inward-flow rule is an enforced gate, not a comment.
147
+ - **Python scaffold made idiomatic.** `core/domain/protocols.py` → `core/ports.py`; `src/provider/`
148
+ → `src/adapters/` with technology-prefixed implementations. The service now uses a proper PEP
149
+ src-layout: the importable package is `src/<service>/` (the service name in snake_case) rather
150
+ than a flat `src`, so imports read `from <service>.core.ports import …` and the hatch wheel,
151
+ Docker entrypoints, native runner, and `import-linter` root all target the real package. A real
152
+ `import-linter` contract now fails when `<service>.core` imports an adapter, an entrypoint, or a
153
+ web/db framework.
154
+ - **Engineer skills + methodology** re-expressed in the new idiom; the capability registry, the
155
+ cross-phase "Capability Ports & Providers" contract, and the brownfield extractor de-jargoned.
156
+ The vendor "provider" concept and the `capability-ports.json` machine twin are kept verbatim.
157
+ - New generation produces the idiomatic layout; skills clean-copy on update — `[no-migration]` for
158
+ scaffold templates and engineer skills, which carry forward by clean-copy and affect new
159
+ generation only. A user's already-scaffolded service code is theirs and is documented-forward,
160
+ not rewritten.
161
+ - [no-migration] Installs carrying the orphaned `hexagonal-architecture.md` from before the reframe have it retired and its live cross-references carried forward to `code-structure.md` by the `groundwork-update` skill's Naming family
162
+
163
+ ### Changed (docs-site generator now actually serves docs/, as a native runner, 2026-06-19) `[no-migration]`
164
+
165
+ The `docs-site` generator (plan: `docs/plans/archive/docs-site-scaffold.md`) is finished and verified
166
+ against a real `next build`. It now:
167
+
168
+ - **Serves the live `docs/` tree as a native `./dev` runner**, not a docker-compose service. The
169
+ site compiles the repo-root `docs/` at build time, which is outside any per-service Docker build
170
+ context — so the old containerized build could never see the docs. It registers a non-autostart
171
+ surface runner (`pnpm dev`) via the runner registry and no longer touches `docker-compose.yml`;
172
+ the Dockerfile is removed.
173
+ - **Renders GroundWork's frontmatter-free docs with real titles.** Fumadocs requires a `title`;
174
+ GroundWork docs carry none. `source.config.ts` now derives each page's title (sidebar + header)
175
+ from its first `# H1`, so bets and lifecycle docs are browsable with correct labels — and the
176
+ sidebar floats the **Bets** section to the top.
177
+ - **Pins a build-clean stack** (`fumadocs-* 14.7.7` / `fumadocs-mdx 11.10.1`, Next `15.1.8`, React
178
+ `19.0.0` stable, matching React 19 types, `autoprefixer`) and runs `fumadocs-mdx` on `postinstall`
179
+ so `@/.source` type-checks. The compilation test is no longer `xfail`.
180
+ - **Installs and runs cleanly under pnpm 10+.** A `pnpm-workspace.yaml` allows the first-party Next
181
+ build deps (esbuild/sharp) to run, so `pnpm install` exits 0 and the `pnpm dev`/`pnpm build`
182
+ pre-run dependency check passes — otherwise pnpm's build-script gating exits non-zero and blocks
183
+ the runner from starting. Verified end-to-end: `./dev start` boots the runner and serves `/docs`.
184
+
185
+ Offered as an **optional, default-off** step in the scaffold flow. Additive for existing installs:
186
+ the generator is Tier-1/Tier-3 (clean-replaced / regenerated on upgrade), and a project without a
187
+ docs site needs nothing.
188
+
189
+ ### Added (orchestrator answers scaffold-capability questions, 2026-06-18) `[no-migration]`
190
+
191
+ The orchestrator now has a capability-discovery intent handler: when a user asks "can we scaffold a
192
+ docs site?", "what can GroundWork generate?", or "is there a generator for X?", it answers from the
193
+ shipped generator catalog (`.groundwork/config/generators.json`, already deployed on init/update)
194
+ rather than guessing or loading the scaffold flow. Flag-level detail (auth, messaging, LLM provider,
195
+ docs-site engine) is read read-only from the scaffold skill's single mapping table — no second
196
+ catalog to drift. Skills are Tier-1 (clean-replaced on update), so existing installs pick this up on
197
+ their next `npx groundwork-method update` with no migration.
198
+
199
+ The framework upgrade path (design: `docs/plans/archive/framework-upgrade-path.md`): every
200
+ installed artifact gets an owner and a provenance record, and every framework change
201
+ that touches installed projects ships with a migration — so no project is left behind
202
+ as the framework improves.
203
+
204
+ ### Added (deterministic code map generator, 2026-06-19) `[no-migration]`
205
+
206
+ `npx groundwork-method repo-map` builds `.groundwork/cache/repo-map.json` deterministically:
207
+ a tree-sitter pass (Go, Python, TypeScript/JavaScript) resolves import edges and ranks files
208
+ by PageRank centrality, with a per-file parse cache keyed by content hash so reruns reparse
209
+ only what changed. This makes the code map a first-class, regenerable artifact rather than
210
+ something assembled from LLM inference — closing maturity dimension D5's "regenerable on
211
+ demand" honestly. Serena stays the live, per-symbol complement (navigation, editing, impact
212
+ analysis); the generator is the whole-repo aggregate it cannot export. `repo-map --check`
213
+ (and `groundwork check`) report staleness against `generated_at_commit` as an advisory; refresh
214
+ is detect-and-lazy by default, with no git hook unless opted in. Schema: the installed
215
+ `repo-map-schema.md` reference. The installed `code-intelligence.md` guide (renamed from
216
+ `serena-tools.md`) gives a working agent the orientation workflow — build/refresh the map,
217
+ read centrality for the hubs, navigate and edit with Serena — and the engineer skills point
218
+ to it. Adds runtime deps `web-tree-sitter` and `tree-sitter-wasms` (pinned; bundled grammars,
219
+ no network at run time). The greenfield scaffold seeds an initial map at verification time
220
+ (Phase 4) so a project is born with one, and `getting-started.md` documents a CI lane
221
+ (`repo-map` then `check`).
222
+
223
+ ### Changed (honest dev infrastructure + native runner registry, 2026-06-16) `[no-migration]`
224
+
225
+ The scaffolded `./dev` CLI no longer assumes a server (plan: `docs/plans/archive/dev-cli-native-runners.md`).
226
+ db (Postgres+pgvector) and jaeger are no longer seeded into the base docker-compose — they are
227
+ injected on demand by the service generators that use them, exactly like redis/pubsub. A workspace
228
+ with no containerized service (a desktop, CLI, or local-first app) provisions no infrastructure, and
229
+ `./dev start` reports "nothing to start" instead of faking a success on an empty stack.
230
+
231
+ A native **runner registry** decouples "managed by `./dev`" from "is a docker-compose service": the
232
+ `runners` array in `.dev/dev.config.json` declares native processes (surfaces, sidecars) that
233
+ `./dev` start/stop/status/logs now manage. Surface generators (electron-app, flutter-app, cli-app)
234
+ and `python-microservice --native` self-register their runner, so a desktop app and a native sidecar
235
+ finally appear in `./dev status` and boot with `./dev start`.
236
+
237
+ Additive for existing installs: the CLI bundle is Tier-1 (clean-replaced on update), the `runners`
238
+ field is optional (configs without it manage zero runners), and existing docker-compose files are
239
+ left untouched (the template change affects new generation only) — hence `[no-migration]`.
240
+ Retro-registering surfaces in pre-existing projects ships as the `gw-runner-retro-registration` agent migration (below).
241
+
242
+ - **`workspace-dev-cli`**: db/jaeger removed from `docker-compose.yml.template`; CLI bundle gains
243
+ `cli-src/util/runners.ts`, runner-aware start (Phase C) / stop / clean / status / logs, an honest
244
+ empty-start notice, a db-less `migrate` no-op, and `runners: []` seeding + preservation on re-run.
245
+ - **`ensureOptionalInfra`**: injects db (+`db_data` volume) and jaeger on demand; `createNode` fix
246
+ for creating the services/volumes maps when the base compose ships neither.
247
+ - **Service generators** (go / python / nextjs / docs-site): create the compose services map on
248
+ demand and inject db/jaeger per what each service uses.
249
+ - **Surface/sidecar generators**: electron / flutter / cli / `python --native` self-register a
250
+ runner via the new shared `registerRunner` helper; `./dev status --json` gains a `runners` array.
251
+
252
+ ### Added (composable capability ports & providers, 2026-06-17) `[no-migration]`
253
+
254
+ Infrastructure is now a consequence of providers, not a default (plan: `docs/plans/archive/dev-cli-native-runners.md`,
255
+ WS-F core). A **capability** is a hexagonal port plus a catalog of swappable **providers**; choosing a
256
+ provider chooses an adapter, and each provider declares an operational **footprint** — `env`,
257
+ `compose-service`, `runner`, or `none`. The registry is data, not code
258
+ (`src/generators/capabilities/<capability>/`), so adding a provider is a folder, not a generator change.
259
+
260
+ LLM ships as the first worked family (`capabilities/llm/`, Python stack) with providers `anthropic`,
261
+ `openai`, `local` (self-hosted, OpenAI-compatible), and **`none`** — the raw gateway: the `LLMGateway`
262
+ port + a not-yet-implemented stub + a strict-xfail contract test. `none` is GroundWork's own thesis
263
+ turned on the scaffold — the port is the spec, the adapter is a **bet**; the suite stays green while the
264
+ bet is open and flips red the moment you implement it.
265
+
266
+ - **`add-capability` generator** (new): bolts a capability port + provider (or a raw `none` gateway)
267
+ onto an existing service on Day 2 / inside a bet — the standalone surface over the shared injector.
268
+ - **`src/generators/shared/capabilities.ts`** (new): one `applyCapability` injector consumed by both
269
+ the service generators (scaffold time) and `add-capability` (Day 2) — port + adapter + contract test
270
+ + provider dependency + env footprint, no per-provider drift.
271
+ - **`python-microservice`**: `--llm` now routes through the capability registry; `--llmProvider` gains
272
+ `local` and `none`. The `LLMGateway` port moved from `protocols.py` to its own `llm_port.py` so the
273
+ port is reusable by `add-capability`. Generated output for the existing `anthropic`/`openai` providers
274
+ is unchanged. Additive for installs (new generator + registry; existing services untouched) — `[no-migration]`.
275
+
276
+ Still open in WS-F: architecture phase declaring capabilities (F7), scaffold reconciliation (F8/WS-D),
277
+ engineer-skill alignment doc (F6), and provider families for the Go/Next.js stacks (F5/O9).
278
+
279
+ ### Added (architecture declares capability ports; scaffold reconciles, 2026-06-17) `[no-migration]`
280
+
281
+ The composable capability-port model (above) is now driven by the architecture, not just generator flags (plan: `docs/plans/archive/dev-cli-native-runners.md`, WS-F F7/F8). The architecture phase elicits, per technical capability, its **provider** and **operational footprint** (`env` / `compose-service` / `runner` / `none`) and records them in `docs/architecture.md` §3 "Capability Ports & Providers" plus a machine twin `.groundwork/capability-ports.json`. The scaffold reads that twin to choose generator flags (or an `add-capability` invocation), injects only the infrastructure providers require, and **reconciles** at boot: every `compose-service` footprint is a running container, every `runner` is in `./dev status`, every `env` is documented, every `none` raw gateway has its strict-xfail contract test — a declared footprint with no materialization is a build error, not a silent gap.
282
+
283
+ - **`groundwork-architecture`**: template §3 gains the Capability Ports & Providers table; Phase 5 elicits provider + footprint per port (`none` = raw gateway / bet); Phase 7 writes the `.groundwork/capability-ports.json` twin. `groundwork-architecture-extract` recovers ports from brownfield code (unimplemented port → `none`).
284
+ - **`groundwork-scaffold`**: Phase 1 reads the registry and maps ports to flags / `add-capability`; Phases 2 + 4 reconcile footprints. `--llmProvider` mapping extended with `local` and `none`.
285
+ - New contract `.agents/groundwork/skills/templates/capability-ports.md` (schema + footprint model, disambiguated from the surface capability *ledger*); Cross-Phase Contracts table updated. Skills clean-copy on update — `[no-migration]`.
286
+
287
+ ### Added (Go LLM capability family, 2026-06-17) `[no-migration]`
288
+
289
+ The capability layer (above) now spans the Go stack, proving it is genuinely general and not Python-only (plan: `docs/plans/archive/dev-cli-native-runners.md`, WS-F F5/O9 — Go only; surfaces and frontend stacks consume the LLM via the backend's contract rather than embedding an adapter, keeping keys server-side and one port per owner).
290
+
291
+ - `capabilities/llm` gains a `go` stack: the `gateway.LLMGateway` port (`internal/core/gateway/`), adapters in `internal/provider/`, and a contract test with a compile-time `var _ gateway.LLMGateway` conformance assertion plus a Skip-based bet test for `none`.
292
+ - Go adapters are **`net/http` against the provider REST APIs** (Anthropic Messages, OpenAI/`local` Chat Completions) — no SDK dependency, so `go.mod` is untouched and the generated code compiles standalone. A transparent starting point to extend or swap for an SDK behind the same port.
293
+ - `add-capability` detects the Go stack (go.mod) and is the entry point for adding the LLM port to a Go service; `applyCapability` resolves the module import path from `go.mod` and records the env footprint in `.env`.
294
+
295
+ ### Added (capability footprint completion + retro-registration, 2026-06-17)
296
+
297
+ WS-F rounding-out (plan: `docs/plans/archive/dev-cli-native-runners.md`, F6/F9/D2 + WS-E1). The footprint
298
+ matrix is now complete and the runner registry is reachable by existing installs.
299
+
300
+ - **`applyCapability` materializes all four footprints.** It already wrote `env`/`none`; it now
301
+ injects a `compose-service` footprint's container into the workspace `docker-compose.yml` (the
302
+ capability-driven form of WS-A's on-demand db/jaeger) and registers a `runner` footprint with
303
+ `./dev` via `dev.config.json`. Two new LLM providers exercise these arms and prove "swap the
304
+ footprint, keep the port and adapter": **`ollama`** (runner — `ollama serve`) and **`localai`**
305
+ (compose-service — a model-server container), both reusing the OpenAI-compatible adapter.
306
+ - **Engineer-skill reference** `capability-ports.md` added to `groundwork-go-engineer` and
307
+ `groundwork-python-engineer` (the stacks that emit ports): the generated port/adapter/footprint
308
+ shape and the `none` bet, so a hand-written adapter matches the generated one. Skills clean-copy
309
+ on update — `[no-migration]`.
310
+ - **`infrastructure.md` gains a "What `./dev start` does" section** (scaffold Phase 5): one row per
311
+ managed unit (container / native app-service / runner) with its run mode, cross-checked against
312
+ `./dev status --json`, so the doc can never describe a stack the CLI cannot run.
313
+ - Generation tests cover the full footprint matrix (env / compose-service / runner / none).
314
+ - [no-migration] Projects scaffolded before the runner registry have a runner-less `dev.config.json`; the `groundwork-update` skill's Surfaces-registry family registers their surfaces and native sidecars as runners without touching db/jaeger compose
315
+
316
+ ### Changed (resize work on worth + stakes, not effort, 2026-06-16)
317
+
318
+ Refines the unreleased product-principles corpus (plan: `docs/plans/archive/appetite-stakes-resize.md`).
319
+ Reframes how GroundWork sizes work for an AI-native shop: appetite is re-denominated from
320
+ calendar time to **worth** (opportunity cost), and **stakes** (blast radius × reversibility ×
321
+ review/judgement load) is promoted to a first-class measure of a bet's size — effort/complexity
322
+ named as the axis AI deflated. No shipped surface has changed yet (the corpus is unreleased), so
323
+ no migration is involved.
324
+
325
+ - **`foundations/prioritization-and-appetite`**: re-denominated appetite (worth, not a
326
+ time-budget — "N weeks" demoted to one optional lens); new principle **"Size is stakes, not
327
+ effort"**; "Sizing by complexity" added to the anti-patterns.
328
+ - **`foundations/product-risks`** §6: stakes named as blast radius × reversibility × review load,
329
+ cross-linked to the canonical definition; effort framing dropped.
330
+ - **`groundwork-product` references** (`shaping-and-appetite`, `scope-and-sequencing`) + sync-anchor
331
+ re-pinned to the edited sources.
332
+ - **Bet artifacts**: pitch template gains a **Stakes** line and a worth-framed appetite; bet
333
+ discovery + MVP workflows elicit worth + stakes; `bet-pitch` and `technical-design` review
334
+ checklists verify stakes is sized and not confused with effort.
335
+ - **Vocabulary aligned** in `product-engineering` §3, `ways-of-working/units-of-work`, `docs/product.md`.
336
+
337
+ ### Added (product-discipline persona + product-principles corpus, 2026-06-14) `[no-migration]`
338
+
339
+ The second discipline-expert persona (after `groundwork-architect`), with a first-class
340
+ product-principles corpus behind it (plan: `docs/plans/archive/architecture-2026-refresh.md`
341
+ sibling — product wave). Modelled on the same persona-in-a-workflow-route pattern;
342
+ research-grounded against 2026 product practice (Cagan's four risks, Torres's continuous
343
+ discovery, AI-native product).
344
+
345
+ - **`groundwork-product` skill** (new hidden skill): a persistent product-discipline persona
346
+ (Cagan/Torres/Bezos lineage) owning the **value + viability** risks. Persona header +
347
+ operating contract + context routing + four-risk handoffs, with **7 self-contained
348
+ `references/`** (discovery-and-opportunity, product-risks, requirements-and-specs,
349
+ success-metrics-and-signals, shaping-and-appetite, scope-and-sequencing, ai-native-product)
350
+ sync-anchored to the source pages. Ships on `init`; present in every project.
351
+ - **Product-principles corpus** (6 new first-class pages): `foundations/continuous-discovery`
352
+ (opportunity-solution tree, problem space before solution), `foundations/product-risks`
353
+ (the four risks + owner table), `foundations/success-metrics` (North Star, counter-metrics,
354
+ signal before ship), `foundations/requirements-and-specs` (JTBD, journeys, stable-ID FRs,
355
+ Given/When/Then), `foundations/prioritization-and-appetite` (the portfolio view: appetite,
356
+ the bet, scoring frameworks in their place), and `ai-native/ai-native-product` (the AI-native
357
+ loop, evals as a product responsibility, dual metrics, the three cost layers). `product-engineering`
358
+ refreshed as the corpus anchor; 6 `llms.txt` entries added.
359
+ - **Persona wired into the lifecycle**: product-brief setup (`Step 0` activation), bet discovery
360
+ (`01-discovery.md` — the pitch shaped as the persona, both tracks), bet validation
361
+ (`05-validation.md` — product-brief refinements + re-pitch judgement). Architect's product
362
+ handoff flipped from "(when available)" to active; the two personas now divide the product-risk
363
+ space (product: value + viability · architect/engineers: feasibility · designer *planned*:
364
+ usability). Orchestrator + contributor guide updated.
365
+
366
+ ### Added (architecture 2026 refresh — P0, 2026-06-14)
367
+
368
+ Research-driven refresh of the architecture guidance against 2026 best practices
369
+ (plan: `docs/plans/archive/architecture-2026-refresh.md`). P0 — the AI/agentic cross-cut +
370
+ enforcement layer:
371
+
372
+ - **`agentic-systems` principle + architect reference** (new): architecting systems where
373
+ AI agents are first-class actors — single-agent-first topology (naive multi-agent is the
374
+ anti-pattern), the MCP + A2A + AG-UI protocol stack, context engineering + tiered memory,
375
+ durable execution for long-running agents, the prompt-injection threat model + guardrails,
376
+ least-agency + human-in/on-the-loop, and trace/eval-based reliability.
377
+ - **`evolutionary-architecture` principle + architect reference** (new): designing for change
378
+ and governing it with **fitness functions** ("a record documents; a fitness function
379
+ assures"), architecture-as-code, strangler-fig modernization, reversibility, and advisory
380
+ governance (advice process / guild) over a review-board gate.
381
+ - **`ai-native-architecture` reference sharpened**: the agent protocol stack (A2A/AG-UI beside
382
+ MCP, Resources vs Tools), the RAG pattern taxonomy (naive→advanced→agentic→adaptive,
383
+ GraphRAG), and cost mechanism (model routing, semantic caching, AI gateway); topology/memory/
384
+ durability/guardrails handed to `agentic-systems`.
385
+ - **AI-ops + 2026 cross-cut** woven through the operational principles + architect references:
386
+ reliability (cell-based isolation, living burn-reviewed SLOs, AI semantic-failure + per-SLI
387
+ budgets), observability (OTel GenAI conventions, eBPF/OBI auto-instrumentation, wide events),
388
+ security (SPIFFE workload identity, Sigstore provenance/SLSA levels, prompt-injection + agent
389
+ security as OWASP LLM01), performance (compute placement / edge / WebAssembly, KEDA event-driven
390
+ scale-to-zero, model-routing + semantic-caching cost levers), platform/delivery (OpenTofu vs
391
+ Terraform vs Pulumi, OpenFeature, GitOps rollout engines, AI gateway control plane, carbon-aware
392
+ scheduling).
393
+ - **Enforcement/governance**: contract testing + `can-i-deploy` gate + Spectral linting + RFC 9457
394
+ + protocol-selection added to API guidance; advice-process governance + fitness-function pairing
395
+ added to decision records.
396
+ - **Three new structural principle pages + architect references** (P1): **`surface-architecture`**
397
+ (surfaces as adapters over the core — the BFF seam, micro-frontend decomposition, render
398
+ placement, design-system-as-contract), **`identity-and-access`** (authn/authz as architecture —
399
+ OIDC/OAuth 2.1, SPIFFE workload identity, first-class agent identity + delegation, modelled
400
+ authorization), and **`durable-execution`** (workflow-as-code — checkpointed long-running and
401
+ multi-step processes, orchestration vs choreography, the reliability substrate for durable agents).
402
+ - **Topic improvements** (P2) to existing principles + references: integration (dead-letter handling,
403
+ backoff-with-jitter, orchestration-vs-choreography, modern webhooks via JWKS/CloudEvents), data
404
+ (CDC vs outbox, registry-enforced schema compatibility, the AI-era vector/RAG/feature-store layer,
405
+ lakehouse + Iceberg), real-time (SSE as the per-direction default + LLM token-streaming pattern,
406
+ CRDTs/local-first, WebTransport deferred), and boundaries (modular-monolith-default, the
407
+ distributed-monolith smell + consolidation signal, Conway/Team-Topologies). Edge/WebAssembly +
408
+ carbon-aware (P3) folded into performance/platform/cost rather than promoted to standalone pages.
409
+ - Tier-2 manifesto pages refresh on `update`; architect skill is clean-copied. `[no-migration]`.
410
+
411
+
412
+
413
+ - **`groundwork-architect`** (new hidden skill): a persistent architecture-discipline
414
+ persona built on the engineer-skill anatomy (`SKILL.md` + `sync-anchor.md` +
415
+ self-contained `references/`). It is adopted *within* the architecture setup workflow
416
+ and the bet design phase (`groundwork-bet/workflows/02-design.md`) — bringing the
417
+ house engineering principles (boundaries/hexagonal, contracts, integration,
418
+ reliability, security, performance, observability, data, platform/delivery,
419
+ AI-native, ADRs) to bear at every point an architecture decision is made. The
420
+ principles are distilled into the skill's own `references/` and sync-anchored to
421
+ `src/docs/principles/*`, which previously had no reader in the design flow.
422
+ `[no-migration]` — skills are carried forward by clean-copy on `update`.
423
+ - **Architecture Decisions principle + governed ADR template**: a new first-class
424
+ principle page (`docs/principles/system-design/architecture-decisions.md`) establishing
425
+ the modern governed-decision standard — records carry **assumptions**, a **review
426
+ trigger**, and an **owner**; they are immutable as records (superseded, never overwritten)
427
+ and double as the decision-context layer humans and agents read before revisiting a
428
+ choice. The shipped ADR template (`templates/adr.md`) and manifesto belief #7 are updated
429
+ to match; the architecture commit phase now emits the governed fields. Tier-2 docs refresh
430
+ on `update`; the template is framework-owned (clean-replaced).
431
+
432
+ ### Added (upgrade path, 2026-06-12)
433
+
434
+ - **Install manifest**: init/update write `.groundwork/config/manifest.json` — every
435
+ deployed tier-1/tier-2 file with source, package version, and SHA-256 at deploy;
436
+ generators record provenance (name, version, options, file hashes) into the same
437
+ ledger. Pre-manifest installs are backfilled on their next update (pristine vs
438
+ `adopted` classification).
439
+ - **Migration registry**: `migrations/index.json` ships in the package. `cli`
440
+ migrations (detect-first, idempotent, forward-only) run inside `update` and record
441
+ completions in `state.json`; `agent` migrations are Detect/Transform/Accept briefs
442
+ executed by the new skill. Changelog `[migration]` lines now reference registry ids.
443
+ - **Seeded docs stop fossilizing**: `update` hash-classifies `docs/` foundations,
444
+ `AGENTS.md`, and `llms.txt` — pristine copies refresh to the current package, edited
445
+ copies are queued for a skill-mediated merge, absent ones are copied as before.
446
+ - **The `./dev` bundle is framework-owned**: `update` clean-replaces `.dev/dev-bundle.js`
447
+ and the `dev` launcher (a customized launcher is queued for judgment instead); the
448
+ bundle embeds its version (`./dev --version`) and `./dev doctor` flags a bundle that
449
+ trails the framework stamp.
450
+ - **`groundwork-upgrade`** (nineteenth hidden skill): executes the upgrade brief
451
+ `update` compiles — one item, one explained proposal, one commit. Distinct from
452
+ `groundwork-update` (project docs); the orchestrator surfaces an unconsumed brief at
453
+ session start.
454
+ - **`update --dry-run`** prints the full plan (skill diff, tier-2 classification,
455
+ pending migrations, brief contents) without writing; `groundwork check` gains a
456
+ framework section (version gap, pending migrations, tier-1 corruption, unconsumed
457
+ brief) that needs no network.
458
+ - **Upgrade-path tests**: frozen old-install fixtures (`tests/fixtures/installs/`),
459
+ convergence/preservation/idempotency/detect-honesty contract tests, a
460
+ migration-coverage gate in the contracts lane, and an `upgrade` simulation suite.
461
+ - [migration] Old installs never received `.groundwork/config/config.toml`; update now seeds the commented default (gw-seed-config-toml)
462
+ - [migration] Register the Serena code-intelligence MCP server in `.mcp.json` and remove the retired depwire server (gw-register-serena-mcp)
463
+ - [no-migration] Projects carrying `docs/ux-design.md` from before the Design System reframe get the rename and reference uplift from the `groundwork-update` skill's Naming family
464
+ - [no-migration] Products set up before the multi-surface restructure get the surface registry + capability ledger bootstrapped by the `groundwork-update` skill's Surfaces-registry family
465
+ - [no-migration] Code-coupled docs written before drift tracking get `last_reviewed`/`source_of_truth` frontmatter stamped by the `groundwork-update` skill's Doc-contracts family
466
+ - [no-migration] Bets opened before the bet-loop restructure have their tracking files uplifted to the current shape by the `groundwork-update` skill's Bets family
467
+
468
+ Multi-surface restructure: every product is modelled as one headless **capability
469
+ core** plus zero or more **surfaces** (web, mobile, CLI, MCP), with parity tracked
470
+ per capability instead of presumed. A single-surface product pays zero added
471
+ ceremony — every phase degrades to its prior behaviour when the registry holds one
472
+ surface or none exists.
473
+
474
+ ### Added (multi-surface, 2026-06-12)
475
+
476
+ - **Surface registry + capability ledger**: architecture (greenfield) and
477
+ architecture-extract (brownfield) write `docs/surfaces.md` with a machine twin at
478
+ `.groundwork/surfaces.json`; bet validation fills a capability × surface ledger row
479
+ per delivered capability (`delivered`/`planned`/`omitted`/`n/a`; empty cells
480
+ illegal; retired columns freeze).
481
+ - **The bet loop's core/surface spine**: pitches declare `surfaces:` scope and surface
482
+ no-gos; technical designs split into Surface Design (per-surface, per-type
483
+ vocabulary) and Capability Design (headless; the contract must serve every in-scope
484
+ surface and presume none); milestones are typed capability-first vs surface, with
485
+ prove-once enforcement (surface tests never re-prove core logic); headless delivery
486
+ is legal and ledger-recorded.
487
+ - **`groundwork-surface-activation`** (eighteenth hidden skill): register → design
488
+ (lazy track run) → scaffold → triage the ledger column → hand off; bootstraps the
489
+ registry on pre-restructure products.
490
+ - **Two new solution types, full chains**: `flutter-app` (mobile) and `electron-app`
491
+ (desktop) generators with survey-dated stack principles
492
+ (`docs/principles/stack/{flutter,electron}/`), hidden engineer skills with
493
+ hash-pinned sync anchors, brand-token theme projection, and toolchain guards that
494
+ skip-with-reason (never silently green).
495
+ - **Multi-medium system tests**: `system-test-runner --surfaces` generates a
496
+ `surfaces` fixture (slug → `{slug, medium, reach}`) with per-surface
497
+ page/runner/client fixtures across five mediums; `frontend_base_url` survives as a
498
+ deprecated alias for single-graphical-surface products.
499
+ - **Tooling**: `./dev surface status` renders the registry, ledger matrix, and
500
+ planned-cell sync backlog; `groundwork-check` gains five surface signals (twin
501
+ drift, empty cells, stale planned intent, untested active surface, missing
502
+ registry).
503
+ - **Design system**: shared brand foundation runs once; tracks run per interface type
504
+ in use; brand tokens carry per-type Tier-2 blocks (`terminal` + new `visual`, with
505
+ platform ergonomics); the graphical-ui track gains web/mobile/desktop platform
506
+ subsections.
507
+ - **Maturity + evals**: dimensions D8 (surface parity discipline) and D9 (contract
508
+ compatibility); seeded `multi_surface` and `headless_api` simulation suites.
509
+ - Contract spec formats follow the core's deployment (OpenAPI/AsyncAPI hosted, proto
510
+ for gRPC, typed module API embedded).
511
+
512
+ ### Fixed (multi-surface, 2026-06-12)
513
+
514
+ - The brownfield eval fixture's `services/` tree was silently excluded by the repo
515
+ `.gitignore` and never tracked; negation rules added and the fixture committed.
516
+
517
+ ### Fixed (multi-surface live bake-out, 2026-06-12)
518
+
519
+ End-to-end sandbox run of the full chain — Go core + Flutter + Electron scaffolds
520
+ booted together, both surfaces proven live against the running core (real SDKs:
521
+ Flutter 3.44.2, Electron via Playwright `_electron`):
522
+
523
+ - **Flutter wiring proof now true out of the box**: the scaffold's `ApiClient`
524
+ probed `/api/healthz` (the Next.js BFF route) while Go/Python cores serve
525
+ `/health` — a freshly scaffolded mobile app rendered "unreachable" against its
526
+ own healthy core. The client now probes `/health` (BFF variance documented).
527
+ - **Electron surface actually wired to the core**: the scaffold never consumed the
528
+ `API_BASE_URL` the test harness passes. New `src/main/core-client.ts` seam (main
529
+ fetches the gateway; the CSP-sandboxed renderer rides the typed `core:health`
530
+ channel), rendered as a wiring-proof line in the home view, asserted in the
531
+ Playwright smoke, unit-tested with injected fetch.
532
+ - **Auth seams on both surfaces**: Flutter gains `authTokenProvider` + a tested
533
+ Bearer interceptor; Electron's core client exposes `coreAuthHeaders` —
534
+ unauthenticated by default, identity-provider wiring documented at the seam.
535
+ - **`flutter create` pollution at bootstrap**: the platform-shell bootstrap now uses
536
+ `--empty`, keeping the counter-app sample `widget_test.dart` (which references a
537
+ `MyApp` the scaffold doesn't have) from breaking analyze/test post-bootstrap.
538
+ - **Re-running `workspace-dev-cli` no longer resets docker-compose.yml**: the
539
+ topology accreted by service generators is preserved verbatim (a re-run erased
540
+ the core's registration, and `./dev migrate` silently migrated nothing).
541
+ - **`./dev` lifecycle commands no longer treat surfaces as backends**: app services
542
+ are now the `services/` directories wired into compose, so migrate/start/doctor
543
+ skip mobile/desktop surface apps instead of creating phantom databases for them.
544
+ - **Flutter runner device probe counts only android/ios devices**: host "devices"
545
+ (macOS, Chrome) no longer turn the intended skip into a hard no-devices failure;
546
+ the skip names the missing device class.
547
+ - All of the above locked in by new generation tests (core-access seam wiring,
548
+ `--empty` bootstrap, auth seams, compose preservation, device-probe filter).
549
+
550
+ Contract-grade delivery: the bet loop's design → tests → delivery chain becomes
551
+ machine-enforced end to end. Design emits specs, the proof suite is reviewed
552
+ assertion-by-assertion and sealed by hash manifest, delivery is tracked per-slice in a
553
+ machine-readable manifest, and the loop closes with a retrospective. Plus the package
554
+ rename and the BMAD delivery-loop adoptions. Also includes the second-pass quality
555
+ sweep over the 0.9.0 surface.
556
+
557
+ ### Added (contract-grade delivery, 2026-06-10)
558
+
559
+ - **Specs at design time**: Design Foundations writes `docs/bets/<slug>/contracts/`
560
+ (`openapi.yaml`, `asyncapi.yaml`, `schema.sql`); decomposition tests derive every shape
561
+ from the specs; validation promotes them to `docs/architecture/api/<service>/` as the canonical record.
562
+ - **The signing gate**: a generated `test-review.md` puts every test's verbatim assertions
563
+ and traceability in front of the user at Proof of Work; on approval `./dev bet sign`
564
+ seals the suite with a SHA-256 manifest. `./dev test bet` refuses a tampered suite; the
565
+ delivery workflow forbids test edits; a wrong test routes through the Amendment Protocol
566
+ with user sign-off and a re-seal.
567
+ - **The progress surface**: `.groundwork/bets/<slug>/decomposition.json` mirrors the
568
+ decomposition machine-readably; delivery records per-slice status, baseline/delivered
569
+ commits, file lists, and notes; `./dev bet status [--json]` renders the milestone/slice
570
+ board with seal verification.
571
+ - **Delivery-loop mechanics adopted from BMAD**: per-slice context capsule (read every file
572
+ the slice modifies before changing it), three-lens slice review (blind reviewer, edge-case
573
+ tracer, acceptance auditor against the specs) with decision/patch/defer/dismiss triage
574
+ wired to the maturity ledger, the bet retrospective (slice-record mining, previous-retro
575
+ follow-through audit, significant-discovery detection, readiness exploration), and Change
576
+ Navigation with written before/after change proposals.
577
+ - **`groundwork-patch`**: the small-change lane — one bounded user-facing goal, tested,
578
+ Living-Documents-passed, logged to `docs/bets/patch-ledger.md`; clustering patches surface
579
+ as a bet signal in discovery. Contract/schema changes never qualify.
580
+ - **Generated test surface**: contract-conformance system test (served spec vs promoted
581
+ spec), Playwright page-object scaffold + axe a11y smoke for graphical-ui projects, and a
582
+ per-stack "Bet Slice Rollout" permanent-test taxonomy in the engineer skills.
583
+ - **1.0 criteria** written down in `docs/plans/archive/contract-grade-delivery.md` §9.5.
584
+
585
+ ### Changed (contract-grade delivery, 2026-06-10)
586
+
587
+ - [no-migration] Package renamed `groundwork` → `groundwork-method` — the binary stays `groundwork`; the `groundwork-update` skill's Naming family rewrites any `npx groundwork …` invocations in your scripts to `npx groundwork-method …`
588
+ - Rename context: the bare npm name is held by an unrelated package, and the `-method` suffix matches the methodology-package convention.
589
+ - Release workflow publishes for real (dry-run gate removed); requires the `NPM_TOKEN` secret.
590
+ - Infra images pinned (`postgres:16`, `redis:7`); `groundwork check` exit codes documented.
591
+ - `docs/groundwork-vs-bmad.md` corrected: BMAD does deliver (full implementation phase);
592
+ GroundWork's differentiators are the executable layer and the sealed design-locked test
593
+ contract, not "they stop at documents."
594
+
595
+ ### Added
596
+
597
+ - **`groundwork-elicit`**: structured elicitation as an anytime utility skill — diagnoses a
598
+ weak draft section, proposes the one best-fit technique (24 curated methods, loaded only at
599
+ invocation), executes it conversationally, and applies the strengthened section to the open
600
+ draft with the review gate re-run before commit. Offered from the draft walkthroughs of
601
+ product brief, architecture, the design-system tracks, and bet design.
602
+ - **Operating contract Protocol 9 (Review Invocation)**: the review-dispatch mechanics and the
603
+ failure procedure now live in one place. A review that errors, hangs, or returns no verdict
604
+ stops the phase — never a silent self-review; an inline self-review requires explicit user
605
+ authorisation and is loudly labelled as not satisfying the gate. Additive; contract stays v1.
606
+
607
+ ### Changed
608
+
609
+ - **Per-phase step files**: `groundwork-architecture` and `groundwork-scaffold` (31KB each)
610
+ split into slim entries plus `phases/NN-*.md` loaded at each phase's start — a session in a
611
+ late phase no longer carries every earlier phase's instructions. Content-preserving move.
612
+ - **Extract-path consistency**: Adopt/Upgrade detection is one structural rule stated
613
+ identically across all three extract skills; `brand-tokens.json` is preserved when valid;
614
+ state recording and frontmatter exemptions are stated as intent instead of left implicit;
615
+ infra-adopt halts on a service-count mismatch and records a gap row.
616
+ - **Greenfield lifecycle gaps**: product-brief gains the sibling resume protocol; MVP defines
617
+ its post-review refine path; scaffold flags unverified output with a Verification Status
618
+ section; the reversal-protocol sentence is aligned across all phases.
619
+ - **Registered-skill context cost**: persona description cut 77→36 words; check loses its
620
+ duplicated description and dead reference; orchestrator anchors the operating contract and
621
+ explains its rules.
622
+ - `groundwork check` prints a friendly guard when run outside a git repository; the seeded
623
+ `llms.txt` states that setup-phase docs appear as each phase commits.
624
+
625
+ ### Removed
626
+
627
+ - The in-repo `BMAD/` reference clone (the analysis it informed is committed; the clone lives
628
+ outside the repo). Stale `main` field in package.json and stale `.npmignore` entries.
629
+
630
+ ### Fixed (full-corpus skill audit, 2026-06-12)
631
+
632
+ Every SKILL.md, instructions file, template, and checklist in the shipped corpus was
633
+ read and ~1,076 cross-references mechanically verified; the findings ledger executed:
634
+
635
+ - **Security**: `package.json` gains a `files` allowlist — a local `npm pack` previously
636
+ shipped the repo's `.env` (live API keys), `.nx/` caches, and stray workspaces
637
+ (2,832 files → 482). The CI release path was never affected. [no-migration]
638
+ - **Sandbox leak scrubbed from the Next.js engineer skill**: 12 live `wordloop.app`/
639
+ cloudinary identifiers replaced with generic hosts, 14 "the the Next.js application"
640
+ find/replace artifacts repaired across 8 reference files, and an invalid
641
+ attribute-position JSX comment fixed in `mutations-and-forms.md`. [no-migration]
642
+ - **infra-adopt joins the multi-surface seam**: Phase 2 now runs
643
+ `system-test-runner --surfaces` from `.groundwork/surfaces.json` instead of the
644
+ deprecated single-surface `--interfaceMedium` alias — brownfield always has a
645
+ registry by then, and the alias produced a fixture-less harness plus false
646
+ groundwork-check warnings. [no-migration]
647
+ - **Broken shipped paths**: scaffold Phase 2's missing-skill fallback pointed at the
648
+ repo-internal `src/hidden-skills/` (now `.agents/groundwork/skills/`);
649
+ groundwork-writer's document-type table caught up with the canon
650
+ (`docs/services/<service>.md`, `docs/decisions/`, `docs/api/<service>.md`, root
651
+ `llms.txt`, new Domain Entity row). [no-migration]
652
+ - **Engineer-skill contract drift**: Go validation responses unified on 422 across
653
+ SKILL.md, `api-design.md`, and `http-handlers.md` (matching the Python skill and
654
+ huma's default); the insecure `tempfile.mktemp` exemplar (CWE-377) replaced with
655
+ `mkstemp`; the "flat package layout" claim corrected to the nested `internal/`
656
+ layout the generator actually scaffolds (fixed in the pinned principle and
657
+ re-anchored); the phantom `--run-integration` pytest flag replaced with real
658
+ `-m live` marker selection. [no-migration]
659
+ - **Protocol-list drift**: all bet workflow headers now carry the contract's
660
+ Continuous Bet set (Protocols 1, 2, 4, 8, 9); the contract's Maintenance mode
661
+ gains `groundwork-upgrade`; update/upgrade headers name Protocol 9. [no-migration]
662
+ - **Bet activation**: routes added for `status: discovery` (resume into design) and
663
+ `status: delivered` (terminal — next work is a new bet), plus multi-pitch
664
+ disambiguation when several active pitches exist. [no-migration]
665
+ - **Scan digest schema**: four new fields (`inferred_users`, `licensing_signals`,
666
+ `theme_framework`, `interaction_a11y`) and routing so the brownfield extracts'
667
+ findings-template sections (Inferred Users, Licensing, Product Surface, Theme &
668
+ Framework, Interaction/A11y) are actually populated by the scan. [no-migration]
669
+ - **Governance (repo-side)**: engineer-skill mirror rule documented (canon =
670
+ `src/hidden-skills/`, `.agents/skills/` copies are read-only) and enforced by two
671
+ new gates in `./dev test contracts` (mirror byte-identity + sync-anchor hash
672
+ verification — the anchors' "CI verifies" claim is now true); CLAUDE.md routes Go
673
+ work to `groundwork-go-engineer` (was the vendored `golang-pro`) and gains a Python
674
+ route; `skills-lock.json` hashes recomputed against the vendored files with the
675
+ recipe documented; the contributor guide's repo map lists all eight dev skills and
676
+ its phantom `./dev check contracts` reference now names the real conformance path.
677
+ - **Minors**: MVP phases renumbered contiguously (1–4); maturity prose reconciled
678
+ with its four-row table (`n/a` is a precondition marker, not a state); `dormant`
679
+ surfaces keep their recorded `testMedium` (exercised only while `active`); three
680
+ electron cross-skill reference paths qualified; "Workstream F" plan leak removed
681
+ from bet decomposition; scripted discovery questions converted to intent; dead
682
+ `last_reviewed` dropped from the pitch template; groundwork-check's dimension
683
+ range updated for D8/D9. [no-migration]
684
+ - **Audit backlog sweep** (second pass, same day): the Next.js engineer SKILL.md
685
+ rejoined its family template (capability-core clause, named principle path, real
686
+ reference files behind every Task Routing entry, hedge-free safety gates); sandbox
687
+ `Story*` identifiers generalized out of the Python database reference; Python DI
688
+ exemplar re-typed against the gateway Protocol; idempotency-key scope unified on
689
+ POST/PATCH with PUT's HTTP-semantics exemption stated; stale Go 1.22 loop-var
690
+ idiom removed and the provider-boundary `%v` wrap given its rationale; snapshot
691
+ testing scoped to genuinely opaque artefacts (matching the Go rule); electron's
692
+ sync-anchor now pins its `typescript/frontend.md` deferral target; the review
693
+ skill documents `implementation-readiness.md` as deliberately outside the
694
+ `document_type` enum and its upstream chain includes `decomposition`; digest
695
+ routing labels exact-match the `## Service / Partition Map` header; the engineer
696
+ two-family SKILL.md split and the vendored-skill style policy are now recorded in
697
+ the contributor guide; scaffold-designer's checklists carry a summaries-not-canon
698
+ caveat and its stale `workspace.json` claim is gone. [no-migration]
699
+
700
+ ### Fixed (production-readiness pass, 2026-06-12)
701
+
702
+ - **`update` fails closed on copy errors**: the mechanical lane (skill trees,
703
+ generators config, tier-2 docs, dev bundle) now aborts on any I/O failure
704
+ *before* the version stamp and manifest advance — a partial apply reads as
705
+ "update failed, re-run", never as a clean update whose half-copied files
706
+ classify as user edits on the next run. `init` likewise aborts instead of
707
+ printing success over a failed skill install. [no-migration]
708
+ - **Bet workflows pin the contract version**: all five `groundwork-bet`
709
+ workflow headers now reference the operating contract as `(contract v1)`,
710
+ matching every other methodology skill. [no-migration]
711
+ - **License metadata**: `package.json` declared ISC while the LICENSE file is
712
+ MIT; the manifest now says MIT. [no-migration]
713
+ - **Repo hygiene** (dev-only): nine committed scratch scripts (Gemini SDK
714
+ explorations) and an accidentally committed session lock file removed from
715
+ the repo root; the lock path is now gitignored. The contributor guide's
716
+ release section no longer claims the publish workflow is dry-run gated.
717
+
718
+ ## [0.9.0] - 2026-06-09
719
+
720
+ First tracked release. GroundWork adopts semver from `0.x` honestly — the framework is
721
+ feature-complete across both setup paths but its operational surface is still hardening.
722
+
723
+ ### Added
724
+
725
+ - **Update engine**: `groundwork-update` rebuilt as a full maintenance skill — change-set
726
+ resolution, three-pass code→doc mapping (path intersection, Serena impact analysis,
727
+ semantic mapping), surgical edits under the Living Documents protocol, fail-closed review
728
+ gate per mutated doc.
729
+ - **Real CLI `update` and `check`**: `update` diffs installed skills against the package and
730
+ refreshes them (preserving `.groundwork/config`, cache, and docs); `check` runs deterministic
731
+ doc-drift detection (git history vs `last_reviewed`/`source_of_truth` frontmatter), CI-ready
732
+ with meaningful exit codes.
733
+ - **Version stamping**: init/update write `groundwork.version` into `.groundwork/config/state.json`;
734
+ the operating contract carries a contract version; the CLI warns on mismatch and prints the
735
+ changelog slice between installed and current versions on update.
736
+ - **Help surface**: a workflow index generated from the orchestrator routing tables
737
+ (`npm run gen:workflow-index`), served by the orchestrator's help intent and `npx groundwork help`;
738
+ freshness is CI-gated.
739
+ - **Maturity steering (D8)**: a seven-dimension maturity model defining GroundWork's target
740
+ state, a living `docs/maturity.md` (assessment + tracked gap roadmap) written by both setup
741
+ paths, bet-loop steering (discovery proposes pulling gaps in, validation closes rows), and
742
+ continuous re-assessment in `groundwork-check`. Supersedes the one-shot onboarding report.
743
+ - **Shipped review checklists**: per-document-type named-failure-mode checklists under
744
+ `groundwork-review/checklists/`, cited by item name in review findings.
745
+ - **Skill conformance linter**: `./dev lint skills` (CI-gated) — frontmatter, versioned
746
+ contract references, fail-closed review-gate blocks, canonical discovery-notes headers,
747
+ routing↔filesystem agreement, llms.txt links, skill↔doc pairs, workflow-index freshness.
748
+ - **User config surface**: `.groundwork/config/config.toml` seeded once at init —
749
+ `[defaults]` proposals (stack, models, generator flags) read by architecture/scaffold,
750
+ `[skills]` custom routing merged after the built-in table.
751
+ - **CLI contract tests**: `./dev test cli` (CI-gated) covering init/update/check semantics;
752
+ exposed and fixed a self-copy guard bug that could have deleted the source repo's own skills.
753
+ - **Adversarial simulation suites**: ambiguous, terse, mid-flow-reversal, and scope-creep
754
+ personas for the simulation harness.
755
+ - **Host support statement** (`docs/host-support.md`), a greenfield output showcase
756
+ (`docs/examples/greenfield-verse.md`), and BMAD-artifact ingestion named explicitly in all
757
+ three brownfield extract skills (Adopt/Upgrade mode).
758
+ - Root `README.md` and `docs/getting-started.md` (walkthrough with excerpts from a real
759
+ greenfield simulation session).
760
+ - `Maintenance (anytime)` lifecycle mode in the operating contract, defining which protocols
761
+ bind `groundwork-update` and `groundwork-check`.
762
+ - `contracts` CI job: dev-CLI bundle freshness, adopt-merge idempotency, workflow-index freshness.
763
+
764
+ ### Changed
765
+
766
+ - [migration] Installs made before 0.9.0 carry no version stamp — run `npx groundwork update` once to stamp `groundwork.version` into `.groundwork/config/state.json` and enable migration notes for future upgrades.
767
+ - `groundwork-persona` editorial pass to the skill-writer standard (stays registered — always-on
768
+ conversational posture cannot load on demand).
769
+ - Lifecycle docs cover the brownfield path (scan → extract ×3 → infra adoption) and Adopt/Upgrade
770
+ mode; `docs/lifecycle/index.md` no longer claims greenfield-only.
771
+
772
+ ### Pre-history
773
+
774
+ Before 0.9.0 the package was unversioned (hardcoded `1.0.0`, no releases). Major capabilities
775
+ built in that period: the two-layer skill architecture and orchestrator routing; greenfield setup
776
+ phases (product brief, design system, architecture, scaffold, MVP); the brownfield track (scan,
777
+ three extract phases, infra adoption, gap ledger); the operating contract (discovery notes,
778
+ living documents, phase lifecycle, summaries, hand-off cache, cache isolation, review gate);
779
+ Nx generators for Go/Python microservices, Next.js apps, CLI apps, docs sites, and the
780
+ system-test runner; the bundled `./dev` workspace CLI; Serena MCP registration; the scaffold
781
+ test harness (generation/contracts/compilation/e2e) and the simulation harness with checkpoints.