groundwork-method 0.0.1 → 0.11.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 (647) hide show
  1. package/CHANGELOG.md +823 -0
  2. package/LICENSE +21 -0
  3. package/README.md +44 -29
  4. package/bin/groundwork.js +1723 -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 +173 -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 +79 -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 +108 -0
  106. package/src/docs/principles/index.md +24 -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 +123 -0
  128. package/src/engineer-skills/groundwork-electron-engineer/references/documentation.md +126 -0
  129. package/src/engineer-skills/groundwork-electron-engineer/references/ipc-contracts.md +138 -0
  130. package/src/engineer-skills/groundwork-electron-engineer/references/observability.md +37 -0
  131. package/src/engineer-skills/groundwork-electron-engineer/references/packaging-and-updates.md +82 -0
  132. package/src/engineer-skills/groundwork-electron-engineer/references/performance-and-reliability.md +80 -0
  133. package/src/engineer-skills/groundwork-electron-engineer/references/process-model.md +94 -0
  134. package/src/engineer-skills/groundwork-electron-engineer/references/security.md +107 -0
  135. package/src/engineer-skills/groundwork-electron-engineer/references/testing-and-smoke.md +129 -0
  136. package/src/engineer-skills/groundwork-electron-engineer/references/theming-and-tokens.md +74 -0
  137. package/src/engineer-skills/groundwork-electron-engineer/sync-anchor.md +22 -0
  138. package/src/engineer-skills/groundwork-flutter-engineer/SKILL.md +114 -0
  139. package/src/engineer-skills/groundwork-flutter-engineer/references/accessibility.md +92 -0
  140. package/src/engineer-skills/groundwork-flutter-engineer/references/architecture.md +189 -0
  141. package/src/engineer-skills/groundwork-flutter-engineer/references/data-and-contracts.md +136 -0
  142. package/src/engineer-skills/groundwork-flutter-engineer/references/documentation.md +122 -0
  143. package/src/engineer-skills/groundwork-flutter-engineer/references/navigation.md +122 -0
  144. package/src/engineer-skills/groundwork-flutter-engineer/references/observability.md +37 -0
  145. package/src/engineer-skills/groundwork-flutter-engineer/references/performance-and-reliability.md +100 -0
  146. package/src/engineer-skills/groundwork-flutter-engineer/references/platform-channels.md +93 -0
  147. package/src/engineer-skills/groundwork-flutter-engineer/references/releases-and-distribution.md +84 -0
  148. package/src/engineer-skills/groundwork-flutter-engineer/references/security.md +96 -0
  149. package/src/engineer-skills/groundwork-flutter-engineer/references/state-management.md +166 -0
  150. package/src/engineer-skills/groundwork-flutter-engineer/references/testing.md +160 -0
  151. package/src/engineer-skills/groundwork-flutter-engineer/references/theming-and-design-tokens.md +109 -0
  152. package/src/engineer-skills/groundwork-flutter-engineer/references/widgets-and-composition.md +123 -0
  153. package/src/engineer-skills/groundwork-flutter-engineer/sync-anchor.md +24 -0
  154. package/src/engineer-skills/groundwork-go-engineer/SKILL.md +174 -0
  155. package/src/engineer-skills/groundwork-go-engineer/references/api-design.md +82 -0
  156. package/src/engineer-skills/groundwork-go-engineer/references/architecture.md +42 -0
  157. package/src/engineer-skills/groundwork-go-engineer/references/capability-ports.md +50 -0
  158. package/src/engineer-skills/groundwork-go-engineer/references/code-craft-security.md +34 -0
  159. package/src/engineer-skills/groundwork-go-engineer/references/concurrency.md +108 -0
  160. package/src/engineer-skills/groundwork-go-engineer/references/documentation.md +130 -0
  161. package/src/engineer-skills/groundwork-go-engineer/references/go-services.md +77 -0
  162. package/src/engineer-skills/groundwork-go-engineer/references/http-handlers.md +172 -0
  163. package/src/engineer-skills/groundwork-go-engineer/references/implementation-patterns.md +156 -0
  164. package/src/engineer-skills/groundwork-go-engineer/references/integration-realtime-data.md +57 -0
  165. package/src/engineer-skills/groundwork-go-engineer/references/observability.md +49 -0
  166. package/src/engineer-skills/groundwork-go-engineer/references/postgres.md +41 -0
  167. package/src/engineer-skills/groundwork-go-engineer/references/reliability-performance.md +105 -0
  168. package/src/engineer-skills/groundwork-go-engineer/references/testing.md +201 -0
  169. package/src/engineer-skills/groundwork-go-engineer/sync-anchor.md +20 -0
  170. package/src/engineer-skills/groundwork-nextjs-engineer/SKILL.md +112 -0
  171. package/src/engineer-skills/groundwork-nextjs-engineer/references/accessibility.md +111 -0
  172. package/src/engineer-skills/groundwork-nextjs-engineer/references/architecture.md +323 -0
  173. package/src/engineer-skills/groundwork-nextjs-engineer/references/data-fetching.md +458 -0
  174. package/src/engineer-skills/groundwork-nextjs-engineer/references/documentation.md +324 -0
  175. package/src/engineer-skills/groundwork-nextjs-engineer/references/error-boundaries.md +383 -0
  176. package/src/engineer-skills/groundwork-nextjs-engineer/references/mutations-and-forms.md +396 -0
  177. package/src/engineer-skills/groundwork-nextjs-engineer/references/observability.md +48 -0
  178. package/src/engineer-skills/groundwork-nextjs-engineer/references/performance-and-deployment.md +947 -0
  179. package/src/engineer-skills/groundwork-nextjs-engineer/references/routing-and-navigation.md +405 -0
  180. package/src/engineer-skills/groundwork-nextjs-engineer/references/security.md +131 -0
  181. package/src/engineer-skills/groundwork-nextjs-engineer/references/server-components.md +394 -0
  182. package/src/engineer-skills/groundwork-nextjs-engineer/references/tailwind-and-styling.md +134 -0
  183. package/src/engineer-skills/groundwork-nextjs-engineer/references/testing.md +491 -0
  184. package/src/engineer-skills/groundwork-nextjs-engineer/references/type-system.md +368 -0
  185. package/src/engineer-skills/groundwork-nextjs-engineer/references/ux-principles.md +230 -0
  186. package/src/engineer-skills/groundwork-nextjs-engineer/references/visual-language.md +69 -0
  187. package/src/engineer-skills/groundwork-nextjs-engineer/sync-anchor.md +16 -0
  188. package/src/engineer-skills/groundwork-python-engineer/SKILL.md +199 -0
  189. package/src/engineer-skills/groundwork-python-engineer/references/api-standards.md +88 -0
  190. package/src/engineer-skills/groundwork-python-engineer/references/architecture.md +57 -0
  191. package/src/engineer-skills/groundwork-python-engineer/references/async-patterns.md +103 -0
  192. package/src/engineer-skills/groundwork-python-engineer/references/capability-ports.md +44 -0
  193. package/src/engineer-skills/groundwork-python-engineer/references/database.md +88 -0
  194. package/src/engineer-skills/groundwork-python-engineer/references/documentation-mcp.md +167 -0
  195. package/src/engineer-skills/groundwork-python-engineer/references/implementation-patterns.md +166 -0
  196. package/src/engineer-skills/groundwork-python-engineer/references/ml-pipelines.md +119 -0
  197. package/src/engineer-skills/groundwork-python-engineer/references/ml-systems-ai-engineering.md +74 -0
  198. package/src/engineer-skills/groundwork-python-engineer/references/observability.md +57 -0
  199. package/src/engineer-skills/groundwork-python-engineer/references/resilience.md +126 -0
  200. package/src/engineer-skills/groundwork-python-engineer/references/security.md +148 -0
  201. package/src/engineer-skills/groundwork-python-engineer/references/testing.md +216 -0
  202. package/src/engineer-skills/groundwork-python-engineer/sync-anchor.md +20 -0
  203. package/src/generators/add-capability/generator.ts +70 -0
  204. package/src/generators/add-capability/schema.json +30 -0
  205. package/src/generators/capabilities/llm/capability.json +28 -0
  206. package/src/generators/capabilities/llm/providers/anthropic/footprint.json +13 -0
  207. package/src/generators/capabilities/llm/providers/anthropic/stacks/go/internal/llm/llm.go.template +102 -0
  208. package/src/generators/capabilities/llm/providers/anthropic/stacks/python/src/__packageName__/adapters/llm.py.template +61 -0
  209. package/src/generators/capabilities/llm/providers/local/footprint.json +13 -0
  210. package/src/generators/capabilities/llm/providers/local/stacks/go/internal/llm/llm.go.template +102 -0
  211. package/src/generators/capabilities/llm/providers/local/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  212. package/src/generators/capabilities/llm/providers/localai/footprint.json +29 -0
  213. package/src/generators/capabilities/llm/providers/localai/stacks/go/internal/llm/llm.go.template +102 -0
  214. package/src/generators/capabilities/llm/providers/localai/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  215. package/src/generators/capabilities/llm/providers/none/footprint.json +9 -0
  216. package/src/generators/capabilities/llm/providers/none/stacks/go/internal/llm/llm.go.template +35 -0
  217. package/src/generators/capabilities/llm/providers/none/stacks/python/src/__packageName__/adapters/llm.py.template +25 -0
  218. package/src/generators/capabilities/llm/providers/ollama/footprint.json +20 -0
  219. package/src/generators/capabilities/llm/providers/ollama/stacks/go/internal/llm/llm.go.template +102 -0
  220. package/src/generators/capabilities/llm/providers/ollama/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  221. package/src/generators/capabilities/llm/providers/openai/footprint.json +13 -0
  222. package/src/generators/capabilities/llm/providers/openai/stacks/go/internal/llm/llm.go.template +98 -0
  223. package/src/generators/capabilities/llm/providers/openai/stacks/python/src/__packageName__/adapters/llm.py.template +60 -0
  224. package/src/generators/capabilities/llm/stacks/go/internal/core/service/llm.go.template +12 -0
  225. package/src/generators/capabilities/llm/stacks/go/internal/llm/llm_test.go.template +33 -0
  226. package/src/generators/capabilities/llm/stacks/python/src/__packageName__/core/llm.py.template +15 -0
  227. package/src/generators/capabilities/llm/stacks/python/tests/contracts/test_llm.py.template +37 -0
  228. package/src/generators/cli-app/files/README.md.template +76 -0
  229. package/src/generators/cli-app/files/build.mjs.template +15 -0
  230. package/src/generators/cli-app/files/package.json.template +21 -0
  231. package/src/generators/cli-app/files/src/cli.ts.template +67 -0
  232. package/src/generators/cli-app/files/src/commands/hello.ts.template +17 -0
  233. package/src/generators/cli-app/files/src/commands/status.ts.template +23 -0
  234. package/src/generators/cli-app/files/src/core/client.test.ts.template +80 -0
  235. package/src/generators/cli-app/files/src/core/client.ts.template +64 -0
  236. package/src/generators/cli-app/files/src/registry.test.ts.template +35 -0
  237. package/src/generators/cli-app/files/src/registry.ts.template +31 -0
  238. package/src/generators/cli-app/files/tsconfig.json.template +16 -0
  239. package/src/generators/cli-app/files/tsconfig.test.json.template +11 -0
  240. package/src/generators/cli-app/generator.ts +138 -0
  241. package/src/generators/cli-app/schema.json +24 -0
  242. package/src/generators/docs-site/files/.gitignore.ejs +40 -0
  243. package/src/generators/docs-site/files/app/docs/__slug__/page.tsx +101 -0
  244. package/src/generators/docs-site/files/app/docs/layout.tsx +14 -0
  245. package/src/generators/docs-site/files/app/docs.css +43 -0
  246. package/src/generators/docs-site/files/app/layout.tsx +24 -0
  247. package/src/generators/docs-site/files/app/page.tsx +135 -0
  248. package/src/generators/docs-site/files/app/source.ts +8 -0
  249. package/src/generators/docs-site/files/components/mermaid.tsx +67 -0
  250. package/src/generators/docs-site/files/next.config.mjs +10 -0
  251. package/src/generators/docs-site/files/package.json +32 -0
  252. package/src/generators/docs-site/files/pnpm-workspace.yaml +7 -0
  253. package/src/generators/docs-site/files/postcss.config.mjs +6 -0
  254. package/src/generators/docs-site/files/source.config.ts +77 -0
  255. package/src/generators/docs-site/files/tailwind.config.js +10 -0
  256. package/src/generators/docs-site/files/tsconfig.json +27 -0
  257. package/src/generators/docs-site/generator.ts +476 -0
  258. package/src/generators/docs-site/schema.json +17 -0
  259. package/src/generators/electron-app/docs/principles/stack/electron/index.md +49 -0
  260. package/src/generators/electron-app/docs/principles/stack/electron/ipc-contracts.md +71 -0
  261. package/src/generators/electron-app/docs/principles/stack/electron/packaging-and-updates.md +59 -0
  262. package/src/generators/electron-app/docs/principles/stack/electron/process-model.md +53 -0
  263. package/src/generators/electron-app/docs/principles/stack/electron/security.md +70 -0
  264. package/src/generators/electron-app/docs/principles/stack/typescript/frontend.md +65 -0
  265. package/src/generators/electron-app/files/.gitignore.template +20 -0
  266. package/src/generators/electron-app/files/README.md.template +125 -0
  267. package/src/generators/electron-app/files/electron.vite.config.ts +31 -0
  268. package/src/generators/electron-app/files/eslint.config.mjs +92 -0
  269. package/src/generators/electron-app/files/forge.config.ts.template +44 -0
  270. package/src/generators/electron-app/files/package.json.template +54 -0
  271. package/src/generators/electron-app/files/playwright.config.ts +18 -0
  272. package/src/generators/electron-app/files/project.json.template +65 -0
  273. package/src/generators/electron-app/files/src/main/core-client.test.ts +81 -0
  274. package/src/generators/electron-app/files/src/main/core-client.ts +55 -0
  275. package/src/generators/electron-app/files/src/main/index.ts +157 -0
  276. package/src/generators/electron-app/files/src/main/ipc.ts +52 -0
  277. package/src/generators/electron-app/files/src/main/policy.test.ts +71 -0
  278. package/src/generators/electron-app/files/src/main/policy.ts +73 -0
  279. package/src/generators/electron-app/files/src/preload/index.ts +23 -0
  280. package/src/generators/electron-app/files/src/renderer/index.html.template +20 -0
  281. package/src/generators/electron-app/files/src/renderer/src/App.test.tsx +61 -0
  282. package/src/generators/electron-app/files/src/renderer/src/App.tsx.template +43 -0
  283. package/src/generators/electron-app/files/src/renderer/src/assets/main.css +40 -0
  284. package/src/generators/electron-app/files/src/renderer/src/env.d.ts +14 -0
  285. package/src/generators/electron-app/files/src/renderer/src/main.tsx +25 -0
  286. package/src/generators/electron-app/files/src/shared/ipc.ts +54 -0
  287. package/src/generators/electron-app/files/tests/smoke/app.spec.ts.template +133 -0
  288. package/src/generators/electron-app/files/tool/electron_exec.sh.template +83 -0
  289. package/src/generators/electron-app/files/tsconfig.json +7 -0
  290. package/src/generators/electron-app/files/tsconfig.node.json +27 -0
  291. package/src/generators/electron-app/files/tsconfig.web.json +22 -0
  292. package/src/generators/electron-app/files/vitest.config.ts +32 -0
  293. package/src/generators/electron-app/files/vitest.setup.ts +1 -0
  294. package/src/generators/electron-app/generator.ts +288 -0
  295. package/src/generators/electron-app/schema.json +23 -0
  296. package/src/generators/flutter-app/docs/principles/stack/flutter/architecture.md +78 -0
  297. package/src/generators/flutter-app/docs/principles/stack/flutter/index.md +38 -0
  298. package/src/generators/flutter-app/docs/principles/stack/flutter/platform-channels.md +51 -0
  299. package/src/generators/flutter-app/docs/principles/stack/flutter/releases-and-distribution.md +59 -0
  300. package/src/generators/flutter-app/docs/principles/stack/flutter/state-management.md +85 -0
  301. package/src/generators/flutter-app/docs/principles/stack/flutter/testing.md +86 -0
  302. package/src/generators/flutter-app/docs/principles/stack/flutter/widgets-and-composition.md +69 -0
  303. package/src/generators/flutter-app/files/.gitignore.template +30 -0
  304. package/src/generators/flutter-app/files/README.md.template +100 -0
  305. package/src/generators/flutter-app/files/analysis_options.yaml.template +18 -0
  306. package/src/generators/flutter-app/files/integration_test/app_test.dart.template +64 -0
  307. package/src/generators/flutter-app/files/lib/app.dart.template +24 -0
  308. package/src/generators/flutter-app/files/lib/config/app_config.dart +15 -0
  309. package/src/generators/flutter-app/files/lib/data/repositories/status_repository.dart +36 -0
  310. package/src/generators/flutter-app/files/lib/data/services/api_client.dart +71 -0
  311. package/src/generators/flutter-app/files/lib/domain/models/health_status.dart +23 -0
  312. package/src/generators/flutter-app/files/lib/main.dart +11 -0
  313. package/src/generators/flutter-app/files/lib/router.dart +23 -0
  314. package/src/generators/flutter-app/files/lib/ui/core/theme/app_theme.dart +110 -0
  315. package/src/generators/flutter-app/files/lib/ui/home/home_view.dart +89 -0
  316. package/src/generators/flutter-app/files/lib/ui/home/home_view_model.dart.template +38 -0
  317. package/src/generators/flutter-app/files/project.json.template +51 -0
  318. package/src/generators/flutter-app/files/pubspec.yaml.template +47 -0
  319. package/src/generators/flutter-app/files/test/api_client_test.dart.template +63 -0
  320. package/src/generators/flutter-app/files/test/fakes/fake_status_repository.dart.template +19 -0
  321. package/src/generators/flutter-app/files/test/home_view_test.dart.template +58 -0
  322. package/src/generators/flutter-app/files/tool/flutter_exec.sh.template +60 -0
  323. package/src/generators/flutter-app/generator.ts +362 -0
  324. package/src/generators/flutter-app/schema.json +23 -0
  325. package/src/generators/go-microservice/docs/principles/stack/go/concurrency.md +123 -0
  326. package/src/generators/go-microservice/docs/principles/stack/go/index.md +70 -0
  327. package/src/generators/go-microservice/docs/principles/stack/go/testing.md +168 -0
  328. package/src/generators/go-microservice/files/.air.toml.template +38 -0
  329. package/src/generators/go-microservice/files/.env.template +4 -0
  330. package/src/generators/go-microservice/files/.golangci.yml.template +82 -0
  331. package/src/generators/go-microservice/files/Dockerfile.dev.template +12 -0
  332. package/src/generators/go-microservice/files/asyncapi-pubsub.yaml.template +33 -0
  333. package/src/generators/go-microservice/files/asyncapi-ws.yaml.template +34 -0
  334. package/src/generators/go-microservice/files/cmd/api/main.go.template +149 -0
  335. package/src/generators/go-microservice/files/cmd/api/main_test.go.template +99 -0
  336. package/src/generators/go-microservice/files/cmd/worker/cleanup/main.go.template +39 -0
  337. package/src/generators/go-microservice/files/db/schema.sql.template +24 -0
  338. package/src/generators/go-microservice/files/go.mod.template +39 -0
  339. package/src/generators/go-microservice/files/internal/config/config.go.template +52 -0
  340. package/src/generators/go-microservice/files/internal/config/otel.go.template +93 -0
  341. package/src/generators/go-microservice/files/internal/core/domain/errors.go.template +16 -0
  342. package/src/generators/go-microservice/files/internal/core/domain/model.go.template +28 -0
  343. package/src/generators/go-microservice/files/internal/core/domain/user.go.template +13 -0
  344. package/src/generators/go-microservice/files/internal/core/pagination.go.template +16 -0
  345. package/src/generators/go-microservice/files/internal/core/service/app_service.go.template +79 -0
  346. package/src/generators/go-microservice/files/internal/core/service/event_hub.go.template +9 -0
  347. package/src/generators/go-microservice/files/internal/core/service/message_queue.go.template +10 -0
  348. package/src/generators/go-microservice/files/internal/core/service/outbox_repository.go.template +31 -0
  349. package/src/generators/go-microservice/files/internal/core/service/repository.go.template +23 -0
  350. package/src/generators/go-microservice/files/internal/core/service/user_repository.go.template +15 -0
  351. package/src/generators/go-microservice/files/internal/core/service/user_service.go.template +43 -0
  352. package/src/generators/go-microservice/files/internal/entrypoints/api/app_handler.go.template +108 -0
  353. package/src/generators/go-microservice/files/internal/entrypoints/api/auth_middleware_test.go.template +52 -0
  354. package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook.go.template +202 -0
  355. package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook_test.go.template +82 -0
  356. package/src/generators/go-microservice/files/internal/entrypoints/api/health_handler.go.template +80 -0
  357. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware.go.template +87 -0
  358. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware_test.go.template +76 -0
  359. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/repository.go.template +37 -0
  360. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_auth.go.template +40 -0
  361. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_loadshed.go.template +38 -0
  362. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_logging.go.template +40 -0
  363. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_ratelimit.go.template +48 -0
  364. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_test.go.template +81 -0
  365. package/src/generators/go-microservice/files/internal/entrypoints/api/router.go.template +105 -0
  366. package/src/generators/go-microservice/files/internal/entrypoints/api/types.go.template +70 -0
  367. package/src/generators/go-microservice/files/internal/entrypoints/api/websocket_handler.go.template +39 -0
  368. package/src/generators/go-microservice/files/internal/httpclient/http_client.go.template +87 -0
  369. package/src/generators/go-microservice/files/internal/kafka/kafka.go.template +34 -0
  370. package/src/generators/go-microservice/files/internal/postgres/postgres.go.template +195 -0
  371. package/src/generators/go-microservice/files/internal/postgres/postgres_test.go.template +156 -0
  372. package/src/generators/go-microservice/files/internal/postgres/user_repository.go.template +56 -0
  373. package/src/generators/go-microservice/files/internal/pubsub/gcp_pubsub.go.template +35 -0
  374. package/src/generators/go-microservice/files/internal/websocket/client.go.template +151 -0
  375. package/src/generators/go-microservice/files/internal/websocket/hub.go.template +261 -0
  376. package/src/generators/go-microservice/files/scripts/apply-schema.sh.template +21 -0
  377. package/src/generators/go-microservice/files/tools/tools.go.template +10 -0
  378. package/src/generators/go-microservice/generator.ts +240 -0
  379. package/src/generators/go-microservice/schema.json +63 -0
  380. package/src/generators/nextjs-app/docs/principles/stack/typescript/frontend.md +65 -0
  381. package/src/generators/nextjs-app/files/.dockerignore.template +7 -0
  382. package/src/generators/nextjs-app/files/.env.example.template +24 -0
  383. package/src/generators/nextjs-app/files/.gitignore.template +5 -0
  384. package/src/generators/nextjs-app/files/Dockerfile +53 -0
  385. package/src/generators/nextjs-app/files/app/(auth)/sign-in/__sign-in__/page.tsx.template +9 -0
  386. package/src/generators/nextjs-app/files/app/(auth)/sign-up/__sign-up__/page.tsx.template +9 -0
  387. package/src/generators/nextjs-app/files/app/api/config/route.ts.template +39 -0
  388. package/src/generators/nextjs-app/files/app/api/healthz/route.test.ts +15 -0
  389. package/src/generators/nextjs-app/files/app/api/healthz/route.ts +5 -0
  390. package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.test.ts.template +55 -0
  391. package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.ts.template +126 -0
  392. package/src/generators/nextjs-app/files/app/error.tsx +39 -0
  393. package/src/generators/nextjs-app/files/app/global-error.tsx +68 -0
  394. package/src/generators/nextjs-app/files/app/globals.css +105 -0
  395. package/src/generators/nextjs-app/files/app/layout.tsx +59 -0
  396. package/src/generators/nextjs-app/files/app/loading.tsx +13 -0
  397. package/src/generators/nextjs-app/files/app/not-found.tsx +30 -0
  398. package/src/generators/nextjs-app/files/app/page.tsx +20 -0
  399. package/src/generators/nextjs-app/files/components/providers/default.tsx +19 -0
  400. package/src/generators/nextjs-app/files/components/providers/production.tsx +32 -0
  401. package/src/generators/nextjs-app/files/components/providers/telemetry.tsx +76 -0
  402. package/src/generators/nextjs-app/files/components/render-smoke.test.tsx +29 -0
  403. package/src/generators/nextjs-app/files/components/theme-provider.tsx +11 -0
  404. package/src/generators/nextjs-app/files/components.json +21 -0
  405. package/src/generators/nextjs-app/files/eslint.config.mjs +120 -0
  406. package/src/generators/nextjs-app/files/hooks/use-toast.ts +7 -0
  407. package/src/generators/nextjs-app/files/instrumentation.ts +90 -0
  408. package/src/generators/nextjs-app/files/lib/api/fetcher.ts.template +130 -0
  409. package/src/generators/nextjs-app/files/lib/config.ts +21 -0
  410. package/src/generators/nextjs-app/files/lib/logger.ts +29 -0
  411. package/src/generators/nextjs-app/files/lib/schemas/index.ts +19 -0
  412. package/src/generators/nextjs-app/files/lib/utils.ts +6 -0
  413. package/src/generators/nextjs-app/files/next.config.mjs +9 -0
  414. package/src/generators/nextjs-app/files/package.json +70 -0
  415. package/src/generators/nextjs-app/files/postcss.config.mjs +8 -0
  416. package/src/generators/nextjs-app/files/proxy.test.ts.template +30 -0
  417. package/src/generators/nextjs-app/files/proxy.ts +31 -0
  418. package/src/generators/nextjs-app/files/public/.gitkeep +1 -0
  419. package/src/generators/nextjs-app/files/tsconfig.json +42 -0
  420. package/src/generators/nextjs-app/files/vitest.config.mts +15 -0
  421. package/src/generators/nextjs-app/files/vitest.setup.ts +7 -0
  422. package/src/generators/nextjs-app/generator.ts +307 -0
  423. package/src/generators/nextjs-app/schema.json +44 -0
  424. package/src/generators/python-microservice/docs/principles/stack/python/async.md +168 -0
  425. package/src/generators/python-microservice/docs/principles/stack/python/documentation.md +240 -0
  426. package/src/generators/python-microservice/docs/principles/stack/python/mcp.md +147 -0
  427. package/src/generators/python-microservice/docs/principles/stack/python/resilience.md +193 -0
  428. package/src/generators/python-microservice/docs/principles/stack/python/testing.md +322 -0
  429. package/src/generators/python-microservice/files/.env.example.template +30 -0
  430. package/src/generators/python-microservice/files/Dockerfile.template +36 -0
  431. package/src/generators/python-microservice/files/db/schema.sql.template +19 -0
  432. package/src/generators/python-microservice/files/pyproject.toml.template +76 -0
  433. package/src/generators/python-microservice/files/scripts/apply-schema.sh.template +25 -0
  434. package/src/generators/python-microservice/files/src/__packageName__/adapters/comfyui.py.template +87 -0
  435. package/src/generators/python-microservice/files/src/__packageName__/adapters/config.py.template +48 -0
  436. package/src/generators/python-microservice/files/src/__packageName__/adapters/database.py.template +21 -0
  437. package/src/generators/python-microservice/files/src/__packageName__/adapters/message_queue.py.template +29 -0
  438. package/src/generators/python-microservice/files/src/__packageName__/adapters/repository.py.template +130 -0
  439. package/src/generators/python-microservice/files/src/__packageName__/adapters/telemetry.py.template +68 -0
  440. package/src/generators/python-microservice/files/src/__packageName__/adapters/websocket_hub.py.template +36 -0
  441. package/src/generators/python-microservice/files/src/__packageName__/core/domain/entities.py.template +22 -0
  442. package/src/generators/python-microservice/files/src/__packageName__/core/domain/exceptions.py.template +43 -0
  443. package/src/generators/python-microservice/files/src/__packageName__/core/ports.py.template +42 -0
  444. package/src/generators/python-microservice/files/src/__packageName__/core/service/example_service.py.template +68 -0
  445. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/dependencies.py.template +50 -0
  446. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/middleware.py.template +131 -0
  447. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/router.py.template +37 -0
  448. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/websocket_handler.py.template +20 -0
  449. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/cleanup.py.template +35 -0
  450. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/worker.py.template +28 -0
  451. package/src/generators/python-microservice/files/src/__packageName__/main.py.template +108 -0
  452. package/src/generators/python-microservice/files/tests/test_main.py.template +74 -0
  453. package/src/generators/python-microservice/files/tests/test_middleware.py.template +109 -0
  454. package/src/generators/python-microservice/files/tests/test_worker.py.template +16 -0
  455. package/src/generators/python-microservice/generator.ts +286 -0
  456. package/src/generators/python-microservice/schema.json +86 -0
  457. package/src/generators/shared/brand-tokens.ts +301 -0
  458. package/src/generators/shared/capabilities.ts +349 -0
  459. package/src/generators/shared/provenance.ts +61 -0
  460. package/src/generators/shared/scaffold-helpers.ts +309 -0
  461. package/src/generators/system-test-runner/NATIVE-CHECK-CONTRACT.md +20 -0
  462. package/src/generators/system-test-runner/files/tests/bets/.gitkeep +0 -0
  463. package/src/generators/system-test-runner/files/tests/bets/_archive/.gitkeep +0 -0
  464. package/src/generators/system-test-runner/files/tests/conftest.py.template +503 -0
  465. package/src/generators/system-test-runner/files/tests/pyproject.toml.template +20 -0
  466. package/src/generators/system-test-runner/files/tests/system/pages/__init__.py.template +9 -0
  467. package/src/generators/system-test-runner/files/tests/system/pages/base_page.py.template +36 -0
  468. package/src/generators/system-test-runner/files/tests/system/test_a11y_smoke.py.template +132 -0
  469. package/src/generators/system-test-runner/files/tests/system/test_contract_conformance.py.template +140 -0
  470. package/src/generators/system-test-runner/files/tests/system/test_layout_geometry.py.template +109 -0
  471. package/src/generators/system-test-runner/files/tests/system/test_render_smoke.py.template +257 -0
  472. package/src/generators/system-test-runner/files/tests/system/test_system.py.template +158 -0
  473. package/src/generators/system-test-runner/files/tests/system/test_token_conformance.py.template +206 -0
  474. package/src/generators/system-test-runner/files/tests/system/test_visual_regression.py.template +104 -0
  475. package/src/generators/system-test-runner/generator.ts +196 -0
  476. package/src/generators/system-test-runner/schema.json +24 -0
  477. package/src/generators/workspace-dev-cli/cli-src/build.mjs +42 -0
  478. package/src/generators/workspace-dev-cli/cli-src/dist/dev-bundle.js +2168 -0
  479. package/src/generators/workspace-dev-cli/cli-src/src/commands/bet.ts +442 -0
  480. package/src/generators/workspace-dev-cli/cli-src/src/commands/completion.ts +87 -0
  481. package/src/generators/workspace-dev-cli/cli-src/src/commands/doctor.ts +139 -0
  482. package/src/generators/workspace-dev-cli/cli-src/src/commands/lifecycle.ts +548 -0
  483. package/src/generators/workspace-dev-cli/cli-src/src/commands/quality.ts +127 -0
  484. package/src/generators/workspace-dev-cli/cli-src/src/commands/surface.ts +214 -0
  485. package/src/generators/workspace-dev-cli/cli-src/src/index.ts +127 -0
  486. package/src/generators/workspace-dev-cli/cli-src/src/registry.ts +194 -0
  487. package/src/generators/workspace-dev-cli/cli-src/src/theme/color.ts +130 -0
  488. package/src/generators/workspace-dev-cli/cli-src/src/theme/render.ts +158 -0
  489. package/src/generators/workspace-dev-cli/cli-src/src/theme/tokens.ts +122 -0
  490. package/src/generators/workspace-dev-cli/cli-src/src/util/context.ts +43 -0
  491. package/src/generators/workspace-dev-cli/cli-src/src/util/extensions.ts +99 -0
  492. package/src/generators/workspace-dev-cli/cli-src/src/util/paths.ts +46 -0
  493. package/src/generators/workspace-dev-cli/cli-src/src/util/proc.ts +106 -0
  494. package/src/generators/workspace-dev-cli/cli-src/src/util/prompt.ts +108 -0
  495. package/src/generators/workspace-dev-cli/cli-src/src/util/runners.ts +70 -0
  496. package/src/generators/workspace-dev-cli/cli-src/src/util/services.ts +221 -0
  497. package/src/generators/workspace-dev-cli/cli-src/src/util/version.ts +21 -0
  498. package/src/generators/workspace-dev-cli/cli-src/tsconfig.json +16 -0
  499. package/src/generators/workspace-dev-cli/files/.agents/skills/workspace-cli/SKILL.md.template +74 -0
  500. package/src/generators/workspace-dev-cli/files/dev.template +16 -0
  501. package/src/generators/workspace-dev-cli/files/docker-compose.yml.template +20 -0
  502. package/src/generators/workspace-dev-cli/files/scripts/cli/templates/milestone-test.pytmpl.template +46 -0
  503. package/src/generators/workspace-dev-cli/files/scripts/cli/templates/slice-test.pytmpl.template +38 -0
  504. package/src/generators/workspace-dev-cli/generator.ts +136 -0
  505. package/src/generators/workspace-dev-cli/schema.json +22 -0
  506. package/src/hidden-skills/code-intelligence.md +135 -0
  507. package/src/hidden-skills/groundwork-architect/SKILL.md +114 -0
  508. package/src/hidden-skills/groundwork-architect/references/agentic-systems.md +44 -0
  509. package/src/hidden-skills/groundwork-architect/references/ai-native-architecture.md +37 -0
  510. package/src/hidden-skills/groundwork-architect/references/api-and-contracts.md +45 -0
  511. package/src/hidden-skills/groundwork-architect/references/core-and-boundaries.md +45 -0
  512. package/src/hidden-skills/groundwork-architect/references/data-architecture.md +33 -0
  513. package/src/hidden-skills/groundwork-architect/references/decision-records.md +34 -0
  514. package/src/hidden-skills/groundwork-architect/references/durable-execution.md +45 -0
  515. package/src/hidden-skills/groundwork-architect/references/evolutionary-architecture.md +37 -0
  516. package/src/hidden-skills/groundwork-architect/references/identity-and-access.md +41 -0
  517. package/src/hidden-skills/groundwork-architect/references/integration-patterns.md +39 -0
  518. package/src/hidden-skills/groundwork-architect/references/observability.md +36 -0
  519. package/src/hidden-skills/groundwork-architect/references/performance-and-scale.md +41 -0
  520. package/src/hidden-skills/groundwork-architect/references/platform-and-delivery.md +47 -0
  521. package/src/hidden-skills/groundwork-architect/references/realtime-and-async.md +28 -0
  522. package/src/hidden-skills/groundwork-architect/references/reliability.md +31 -0
  523. package/src/hidden-skills/groundwork-architect/references/security-and-trust.md +47 -0
  524. package/src/hidden-skills/groundwork-architect/references/surface-architecture.md +40 -0
  525. package/src/hidden-skills/groundwork-architect/sync-anchor.md +34 -0
  526. package/src/hidden-skills/groundwork-architecture/architecture-template.md +50 -0
  527. package/src/hidden-skills/groundwork-architecture/instructions.md +139 -0
  528. package/src/hidden-skills/groundwork-architecture/phases/01-context-ingestion.md +18 -0
  529. package/src/hidden-skills/groundwork-architecture/phases/02-technical-constraints.md +27 -0
  530. package/src/hidden-skills/groundwork-architecture/phases/03-service-design.md +19 -0
  531. package/src/hidden-skills/groundwork-architecture/phases/04-data-flow-communication.md +23 -0
  532. package/src/hidden-skills/groundwork-architecture/phases/05-component-boundaries-contracts.md +17 -0
  533. package/src/hidden-skills/groundwork-architecture/phases/06-draft-review-present.md +38 -0
  534. package/src/hidden-skills/groundwork-architecture/phases/07-commit.md +33 -0
  535. package/src/hidden-skills/groundwork-architecture/templates/architecture-cache.md +43 -0
  536. package/src/hidden-skills/groundwork-architecture-extract/instructions.md +163 -0
  537. package/src/hidden-skills/groundwork-architecture-extract/templates/architecture-extract-cache.md +21 -0
  538. package/src/hidden-skills/groundwork-bet/briefs/acceptance-auditor.md +68 -0
  539. package/src/hidden-skills/groundwork-bet/briefs/blind-reviewer.md +56 -0
  540. package/src/hidden-skills/groundwork-bet/briefs/coverage-auditor.md +95 -0
  541. package/src/hidden-skills/groundwork-bet/briefs/edge-case-tracer.md +64 -0
  542. package/src/hidden-skills/groundwork-bet/briefs/experience-auditor.md +83 -0
  543. package/src/hidden-skills/groundwork-bet/briefs/slice-worker.md +257 -0
  544. package/src/hidden-skills/groundwork-bet/instructions.md +88 -0
  545. package/src/hidden-skills/groundwork-bet/templates/bet-progress-test.md +115 -0
  546. package/src/hidden-skills/groundwork-bet/templates/change-proposal.md +38 -0
  547. package/src/hidden-skills/groundwork-bet/templates/decomposition/meta.json +4 -0
  548. package/src/hidden-skills/groundwork-bet/templates/decomposition/milestone-index.md +31 -0
  549. package/src/hidden-skills/groundwork-bet/templates/decomposition/slice.md +31 -0
  550. package/src/hidden-skills/groundwork-bet/templates/pitch.md +45 -0
  551. package/src/hidden-skills/groundwork-bet/templates/technical-design/01-ui-design.md +51 -0
  552. package/src/hidden-skills/groundwork-bet/templates/technical-design/02-data-flows.md +36 -0
  553. package/src/hidden-skills/groundwork-bet/templates/technical-design/03-api-design.md +90 -0
  554. package/src/hidden-skills/groundwork-bet/templates/technical-design/04-data-design.md +29 -0
  555. package/src/hidden-skills/groundwork-bet/workflows/01-discovery.md +200 -0
  556. package/src/hidden-skills/groundwork-bet/workflows/02-design.md +178 -0
  557. package/src/hidden-skills/groundwork-bet/workflows/03-decomposition.md +242 -0
  558. package/src/hidden-skills/groundwork-bet/workflows/04-delivery.md +226 -0
  559. package/src/hidden-skills/groundwork-bet/workflows/05-validation.md +210 -0
  560. package/src/hidden-skills/groundwork-design-system/instructions.md +125 -0
  561. package/src/hidden-skills/groundwork-design-system/templates/brand-tokens.md +182 -0
  562. package/src/hidden-skills/groundwork-design-system/templates/design-system-cache.md +64 -0
  563. package/src/hidden-skills/groundwork-design-system/tracks/_foundation.md +136 -0
  564. package/src/hidden-skills/groundwork-design-system/tracks/agentic-protocol.md +269 -0
  565. package/src/hidden-skills/groundwork-design-system/tracks/cli.md +355 -0
  566. package/src/hidden-skills/groundwork-design-system/tracks/graphical-ui.md +330 -0
  567. package/src/hidden-skills/groundwork-design-system-extract/instructions.md +124 -0
  568. package/src/hidden-skills/groundwork-design-system-extract/templates/design-system-extract-cache.md +19 -0
  569. package/src/hidden-skills/groundwork-designer/SKILL.md +108 -0
  570. package/src/hidden-skills/groundwork-designer/references/accessibility.md +33 -0
  571. package/src/hidden-skills/groundwork-designer/references/ai-native-design.md +37 -0
  572. package/src/hidden-skills/groundwork-designer/references/design-review.md +29 -0
  573. package/src/hidden-skills/groundwork-designer/references/design-systems-and-tokens.md +33 -0
  574. package/src/hidden-skills/groundwork-designer/references/interaction-and-motion.md +37 -0
  575. package/src/hidden-skills/groundwork-designer/references/layout-and-space.md +33 -0
  576. package/src/hidden-skills/groundwork-designer/references/usability-and-ux.md +33 -0
  577. package/src/hidden-skills/groundwork-designer/references/visual-craft.md +49 -0
  578. package/src/hidden-skills/groundwork-designer/sync-anchor.md +20 -0
  579. package/src/hidden-skills/groundwork-doc-sync/instructions.md +100 -0
  580. package/src/hidden-skills/groundwork-elicit/instructions.md +66 -0
  581. package/src/hidden-skills/groundwork-elicit/methods.md +65 -0
  582. package/src/hidden-skills/groundwork-infra-adopt/instructions.md +168 -0
  583. package/src/hidden-skills/groundwork-infra-adopt/templates/infra-adopt-cache.md +21 -0
  584. package/src/hidden-skills/groundwork-mvp/instructions.md +223 -0
  585. package/src/hidden-skills/groundwork-mvp/templates/mvp-cache.md +9 -0
  586. package/src/hidden-skills/groundwork-patch/instructions.md +40 -0
  587. package/src/hidden-skills/groundwork-persona/instructions.md +65 -0
  588. package/src/hidden-skills/groundwork-product/SKILL.md +102 -0
  589. package/src/hidden-skills/groundwork-product/references/ai-native-product.md +45 -0
  590. package/src/hidden-skills/groundwork-product/references/discovery-and-opportunity.md +38 -0
  591. package/src/hidden-skills/groundwork-product/references/product-risks.md +52 -0
  592. package/src/hidden-skills/groundwork-product/references/requirements-and-specs.md +39 -0
  593. package/src/hidden-skills/groundwork-product/references/scope-and-sequencing.md +35 -0
  594. package/src/hidden-skills/groundwork-product/references/shaping-and-appetite.md +48 -0
  595. package/src/hidden-skills/groundwork-product/references/success-metrics-and-signals.md +37 -0
  596. package/src/hidden-skills/groundwork-product/sync-anchor.md +19 -0
  597. package/src/hidden-skills/groundwork-product-brief/instructions.md +231 -0
  598. package/src/hidden-skills/groundwork-product-brief-extract/instructions.md +139 -0
  599. package/src/hidden-skills/groundwork-product-brief-extract/templates/product-brief-extract-cache.md +17 -0
  600. package/src/hidden-skills/groundwork-review/checklists/architecture.md +93 -0
  601. package/src/hidden-skills/groundwork-review/checklists/bet-pitch.md +94 -0
  602. package/src/hidden-skills/groundwork-review/checklists/decomposition.md +135 -0
  603. package/src/hidden-skills/groundwork-review/checklists/design-system.md +85 -0
  604. package/src/hidden-skills/groundwork-review/checklists/domain-entity.md +66 -0
  605. package/src/hidden-skills/groundwork-review/checklists/implementation-readiness.md +47 -0
  606. package/src/hidden-skills/groundwork-review/checklists/infrastructure.md +68 -0
  607. package/src/hidden-skills/groundwork-review/checklists/maturity.md +71 -0
  608. package/src/hidden-skills/groundwork-review/checklists/product-brief.md +69 -0
  609. package/src/hidden-skills/groundwork-review/checklists/technical-design.md +112 -0
  610. package/src/hidden-skills/groundwork-review/instructions.md +181 -0
  611. package/src/hidden-skills/groundwork-scaffold/instructions.md +254 -0
  612. package/src/hidden-skills/groundwork-scaffold/phases/01-ingestion-service-mapping.md +87 -0
  613. package/src/hidden-skills/groundwork-scaffold/phases/02-scaffolding-execution.md +15 -0
  614. package/src/hidden-skills/groundwork-scaffold/phases/03-service-documentation-api-stubs.md +100 -0
  615. package/src/hidden-skills/groundwork-scaffold/phases/04-infrastructure-verification.md +17 -0
  616. package/src/hidden-skills/groundwork-scaffold/phases/05-draft-review.md +19 -0
  617. package/src/hidden-skills/groundwork-scaffold/phases/06-commit.md +19 -0
  618. package/src/hidden-skills/groundwork-scaffold/templates/scaffold-cache.md +23 -0
  619. package/src/hidden-skills/groundwork-scan/instructions.md +164 -0
  620. package/src/hidden-skills/groundwork-scan/references/digest-schema.md +66 -0
  621. package/src/hidden-skills/groundwork-scan/references/exclusions.md +44 -0
  622. package/src/hidden-skills/groundwork-scan/templates/architecture-findings.md +42 -0
  623. package/src/hidden-skills/groundwork-scan/templates/design-findings.md +23 -0
  624. package/src/hidden-skills/groundwork-scan/templates/overview.md +26 -0
  625. package/src/hidden-skills/groundwork-scan/templates/product-findings.md +23 -0
  626. package/src/hidden-skills/groundwork-scan/templates/scan-state.json +19 -0
  627. package/src/hidden-skills/groundwork-stack-forge/instructions.md +150 -0
  628. package/src/hidden-skills/groundwork-stack-forge/references/authoring-engineer-skills.md +107 -0
  629. package/src/hidden-skills/groundwork-surface-activation/instructions.md +138 -0
  630. package/src/hidden-skills/groundwork-update/briefs/reconcile-worker.md +196 -0
  631. package/src/hidden-skills/groundwork-update/instructions.md +200 -0
  632. package/src/hidden-skills/groundwork-writer/SKILL.md +278 -0
  633. package/src/hidden-skills/maturity-model.md +125 -0
  634. package/src/hidden-skills/operating-contract.md +400 -0
  635. package/src/hidden-skills/repo-map-schema.md +90 -0
  636. package/src/hidden-skills/templates/adr.md +57 -0
  637. package/src/hidden-skills/templates/capability-ports.md +71 -0
  638. package/src/hidden-skills/templates/discovery-notes.md +33 -0
  639. package/src/hidden-skills/templates/domain-entity.md +80 -0
  640. package/src/hidden-skills/templates/gap-ledger.md +21 -0
  641. package/src/hidden-skills/templates/handoff.md +37 -0
  642. package/src/hidden-skills/templates/maturity.md +39 -0
  643. package/src/hidden-skills/templates/surfaces.md +207 -0
  644. package/src/skills/groundwork-check/SKILL.md +56 -0
  645. package/src/skills/groundwork-check/instructions.md +70 -0
  646. package/src/skills/groundwork-orchestrator/SKILL.md +176 -0
  647. package/src/skills/groundwork-orchestrator/workflow-index.md +50 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,823 @@
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
+ ## [0.11.0] - 2026-06-27
12
+
13
+ ### Fixed (the update report no longer reads as if it deletes authored skills, 2026-06-27)
14
+
15
+ `groundwork update` computed its `.agents/skills/` diff against the package's shipped skills alone, so any skill authored beside the framework ones — a promoted engineer skill, a hand-written one — showed up as a red `-` removal line, reading as "your skill is being deleted." The install never touched those skills (it scopes its cleanup to framework-owned names), so the report contradicted the behavior, and the phantom removals also inflated the change total enough to suppress the calm "Already up to date" message on a run that changed nothing real. The report now reads ownership from the same set the installer uses (`ownedRegisteredSkillNames`): authored skills never appear in the diff, and a run whose only difference is an authored skill reports up-to-date.
16
+
17
+ - [no-migration] Reporting-only change in the CLI; no project artifact shape, install behavior, or migration change. Authored skills were always preserved on disk — only the printed diff was wrong.
18
+
19
+ ### Changed (a bet lands as working, usable software — proven at the front door, 2026-06-27)
20
+
21
+ A live test run exposed a structural hole: a bet closed all-green — UI tests plus a full package suite — yet the shipped app could not do its core job, because every proof faked the real work (a scripted driver, a fake worker path, hand-written thumbnails, a pre-loaded fake library) and no test ever drove the real product on real data the way a user would. The method *told* it to build this way: decomposition split milestones into a "capability" kind proven headless behind a fake and a "surface" kind wired later, even allowing a bet to finish headless. This release resets the core so a bet cannot be called done unless the real product works, looks right, and is usable.
22
+
23
+ The milestone model collapses to one shape. A **milestone** is a thin, user-visible step proven by driving the shipping build through its real front door, on the real pipeline and real data, for a named consumer (a person at a screen, a developer calling an SDK, an operator reading a dashboard, a system calling the API — a pure-API product's front door is the API). A **slice** is a vertical cut through one service that builds toward a milestone, slices run in sequence each on the last, and the design system lands in the running app at the first user-visible milestone. The "un-mockable" rule is rewritten as drive-the-real-product-through-the-front-door plus **a fake a test leans on needs a real test behind it** (seeded inputs are fine; faking the work in the middle is the violation), and the ladder must sum to a complete, well-rounded experience — a dead-end screen or a silent-progress view is a *missing milestone*. Delivery proves each milestone at the front door (folding the visual tiers in and adding a polish pass), extends honest-green with the fake-behind-real and shipping-build checks, and Validation's success signal is the owner driving the real shipping product through the agreed front-door cases.
24
+
25
+ Integrity moves from a heavyweight seal to a **lightweight recorded amendment trail**: the approved decomposition commit is the baseline, steering how slices break down is free, and changing *what a milestone proves* is an owner-approved amendment recorded in git history with a reason — the prose-integrity reconciliation reads that trail instead of a ratcheting `bet/<slug>/approved` tag (retired). The design phase gains a **proof-of-concept step** to de-risk unknowns (throwaway code, learning written into the technical design, a POC result never standing in for a milestone proof) and a best-in-class-pattern discipline (chosen per UX problem, implemented in full, accumulated into the design system). A new **experience-auditor** review lens (the designer persona) judges the assembled, running milestone and the whole bet for patterns-in-full, no dead ends, present states, design-system match, and the joy-to-use bar — distinct from the per-slice coverage auditor. The manifesto gains the front-door proof (belief #4 rewritten) and a UX-first-class belief (#9); `foundations/testing.md` gains the front-door-proof level above the honeycomb; `design/usability-and-ux.md` names the checkable floor (no dead ends, full async states) and the judged ceiling.
26
+
27
+ The visual gate no longer fails silently on a surface it cannot test: when a graphical surface's platform has no runnable UI check, the `system-test-runner` generator emits a **fail-closed placeholder check** that fails with the named gap (pointing to `NATIVE-CHECK-CONTRACT.md`) instead of silently deleting the checks, and the web render-smoke floor gains a no-dead-end navigation assertion. The actual native UI checks (Flutter/Electron/native) are the named follow-on the placeholder turns green.
28
+
29
+ - [no-migration] The bet workflows, templates, review briefs, principle docs, and engineer-skill references are framework-owned and clean-replace on update; the `system-test-runner` change only affects newly generated test suites. No project artifact shape, CLI, or migration change. In-flight bets carrying the retired `bet/<slug>/approved` tag are unaffected — the tag simply stops being read; reconciliation falls back to the git history of the decomposition prose.
30
+
31
+ ### Changed (engineer skills brought to full topic parity, and the canon→skill review chain healed, 2026-06-26)
32
+
33
+ The five engineer skills are brought to deliberate coverage parity against the principle canon, and the structural gap that let them drift is closed. On testing, property-based testing and fuzzing (the canon's input-generation principle) are now first-class in the Go, Next.js, Flutter, and Electron testing references — `rapid` + `go test -fuzz`, `fast-check` + Schemathesis, `glados`, and policy-module fuzzing respectively — and the behaviour-naming template is explicit on every surface. Beyond testing, every cross-cutting concern is now consciously covered or marked not-applicable-with-reason on every stack: dedicated `security.md` (Python/Next.js/Flutter), `documentation.md` (Go/Flutter/Electron), `performance-and-reliability.md` (Flutter/Electron), and `observability.md` (Next.js/Flutter/Electron, client-adapted — distributed tracing stays at the capability core, the client carries crash/RUM telemetry); Next.js accessibility is promoted from a `ux-principles.md` section to its own reference. The per-stack principle docs that ship to projects (`docs/principles/stack/{go,python,flutter}/testing.md`) are refreshed to carry the current canon (honeycomb, in-memory span exporter, mutation, input-generation). Repo-map + Serena orientation is wired into each skill's mandatory first-action flow (Required First Checks / first How-to-Use step), not left as skippable advisory prose.
34
+
35
+ The recurring-drift root cause is fixed. Each engineer skill's `sync-anchor.md` now pins the central-canon files it distils (testing, observability, security, documentation, performance, reliability, code-craft, accessibility — as applicable per stack) in addition to the per-stack idiom docs. Previously the skills pinned only the per-stack files, so a central-canon change forced zero engineer-skill review; now a canon edit fails `./dev test contracts` for every skill that embeds it, forcing the skill review and a per-stack reconcile in the same commit.
36
+
37
+ - [no-migration] Engineer skills and their references are framework-owned and promoted into scaffolded projects' `.agents/skills/` per language (clean-replaced on update); the refreshed per-stack principle docs ship through their generators. No project artifact shape, CLI, or migration change.
38
+
39
+ ### Changed (delivery subagents orient through the repo map and Serena, 2026-06-26)
40
+
41
+ The code-intelligence layer (the deterministic repo map + the Serena MCP server) was prescribed for the engineer persona but never threaded into the delivery orchestration capsules, so a slice-worker or reviewer used it only by chance — a live run found the delivery subagents navigating and verifying with ordinary reads and the compiler while an empty `.serena/` and no `repo-map.json` sat in the bet worktree. This closes the seam. The **slice-worker** brief now opens its context-assembly step by orienting through the map (refresh, read `centrality` for the hubs it lands among — qualified honestly, since centrality is real only for graph-fidelity stacks and a symbols-fidelity stack leans on the symbol index plus Serena) and running live impact analysis with `find_referencing_symbols` before changing any depended-on symbol. The **edge-case tracer** lens — the one review lens that already follows paths out of the diff into existing code — gains a reference-graph pass that enumerates a changed symbol's callers (Serena, or the repo-map edges offline) to catch the caller a dynamically-typed stack's compiler would miss; the blind reviewer stays deliberately diff-only so its blindness remains a distinct instrument. The **Delivery worktree bootstrap** now builds the map in the worktree and documents the `--project .` caveat (Serena resolves to the session root, so it is best-effort in a worktree — lean on the freshly-built map). Every addition carries the existing graceful-degradation contract: when the map or Serena is absent, fall back to ordinary reads and let the compiler and tests be the backstop.
42
+
43
+ - [no-migration] The bet workflow, review briefs, and `code-intelligence.md` are framework-owned and clean-replace on update. No project artifact shape, CLI, or migration change — and no change to the repo-map generator or Serena registration; the tooling already existed, the delivery capsules simply now point workers at it.
44
+
45
+ ### Changed (delivery rolls out reviewed, comprehensive test coverage, 2026-06-26)
46
+
47
+ The bet loop gated the *honesty* of a slice's headline proof but left the seam to comprehensive coverage ungated: permanent best-practice tests were rolled out *after* the slice review, so no lens ever judged them, and "the project's testing strategy" they were rolled out against named nothing. This closes that seam end to end. The slice-worker now rolls out the permanent best-practice tests as part of its own job (a new step), so they land in the reviewed diff; a fourth review lens — the **coverage auditor** — holds that suite against the stack's engineer-skill testing strategy for completeness (error/boundary matrix to happy-path rigour, complex-logic unit tests, critical-path trace assertions, named `graphical-ui` states) and assertion quality (a sociable test that executes a branch without asserting is a gap; a surviving mutant on changed high-risk code is the evidence). The four review lenses (blind reviewer, edge-case tracer, acceptance auditor, coverage auditor) are now first-class briefs the driver dispatches by path.
48
+
49
+ The testing-principles canon is raised to current best practice and the five engineer skills realigned to it: the honeycomb is named as a stack-appropriate heuristic (the trophy for the frontend) anchored on independent-oracles-and-reproducibility, trace-first/ODD is made concrete with in-memory span-exporter assertions and helpers, mutation testing is positioned as the honeycomb's signal-only assertion-quality read-out (degrading gracefully where tooling is weak), and a new input-generation principle covers property-based testing, fuzzing, Schemathesis, and deterministic simulation. Flutter and Electron gain the Bet Slice Rollout sections they were missing.
50
+
51
+ - [no-migration] The bet workflow, review briefs, review checklist, and engineer skills are framework-owned and clean-replace on update; the `src/docs/principles/` testing and observability canon propagate through `groundwork update`'s Tier-2 refresh/reconcile path. No project artifact shape, CLI, or migration change — existing bets in flight finish under the lens count they started with.
52
+
53
+ ### Fixed (`update` prints a scannable change summary instead of dumping the whole changelog, 2026-06-26)
54
+
55
+ 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.
56
+
57
+ - [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.
58
+
59
+ ## [0.10.0] - 2026-06-25
60
+
61
+ ### Changed (the Naming family now reconciles the relocated hidden-skills path, 2026-06-25)
62
+
63
+ 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).
64
+
65
+ - [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.
66
+
67
+ ### Changed ("update groundwork" reliably routes through the orchestrator, 2026-06-25)
68
+
69
+ 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.
70
+
71
+ - [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.
72
+
73
+ ### Changed (groundwork-update orchestrates the catch-up as a context-lean driver, 2026-06-25)
74
+
75
+ `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.
76
+
77
+ - [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.
78
+
79
+ ### Changed (one update lane, reconciled to the current canonical, 2026-06-24)
80
+
81
+ 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.
82
+
83
+ - [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`.
84
+
85
+ ### Changed (the bet becomes pure prose; tests and contracts are built in code at Delivery, 2026-06-24)
86
+
87
+ 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/`).
88
+
89
+ - [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)
90
+
91
+ ### Changed (the docs site routes two audiences and orders its sidebar as a learning journey, 2026-06-24)
92
+
93
+ 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.
94
+
95
+ - **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.
96
+ - **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.
97
+ - **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.
98
+ - **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.
99
+ - **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.
100
+ - [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
101
+
102
+ ### Changed (the bet test-suite SHA seal is replaced by a documented-vs-actual reconciliation, 2026-06-23)
103
+
104
+ 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.
105
+
106
+ - **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.
107
+ - **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.
108
+ - **`./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.
109
+ - [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)
110
+
111
+ ### Added (docs site is branded, draws diagrams, and orders its own sidebar, 2026-06-23)
112
+
113
+ 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).
114
+
115
+ - **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.
116
+ - **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.
117
+ - **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.
118
+ - **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.
119
+ - **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.
120
+ - [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.
121
+
122
+ ### Changed (setup context split out of published docs/, 2026-06-23)
123
+
124
+ 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.
125
+
126
+ - **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.
127
+ - **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.
128
+ - [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
129
+ ### Changed (repo-map is now multi-language and extensible, 2026-06-23)
130
+
131
+ 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.
132
+
133
+ - **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.
134
+ - **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).
135
+ - [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.
136
+
137
+ ### Fixed (docs site no longer 404s at its `/docs` root, 2026-06-23)
138
+
139
+ 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`.
140
+
141
+ - 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`.
142
+ - [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.
143
+
144
+ ### Changed (hidden skills relocated out of `.agents/` into `.groundwork/skills/`, 2026-06-21)
145
+
146
+ 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/`.
147
+
148
+ - **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.
149
+ - **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).
150
+ - [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)
151
+
152
+ ### Added (high-end micro-polish: per-app atmosphere tokens, token-driven engineer, deterministic conformance, 2026-06-21)
153
+
154
+ 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.
155
+
156
+ - **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.
157
+ - **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`).
158
+ - **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.
159
+ - **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.
160
+ - **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.
161
+ - **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.
162
+ - [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
163
+
164
+ ### Added (off-script support: composable `./dev`, the Day-2 baseline, and customization guidance, 2026-06-21)
165
+
166
+ 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`).
167
+
168
+ - **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).
169
+ - **`./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).
170
+ - **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.
171
+ - **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.
172
+ - [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.
173
+
174
+ ### Changed (architecture de-jargoned — keep the discipline, drop the label, 2026-06-19)
175
+
176
+ The structural discipline is unchanged — a pure domain core, dependencies pointing inward,
177
+ swappable edges, the rule enforced in CI — but it is no longer named after the "hexagonal /
178
+ ports-and-adapters" framework, and the generated services now use each language's own idiom
179
+ instead of a cross-language metaphor (plan: `docs/plans/archive/pragmatic-architecture-naming.md`).
180
+
181
+ - **Principle reframed.** `system-design/hexagonal-architecture.md` → `code-structure.md` ("How
182
+ We Structure Code"); the manifesto, `llms.txt`, the architect persona, and every cross-reference
183
+ follow. The whole principles corpus was deep-rewritten to research-backed, decision-grade depth.
184
+ - **Go scaffold made idiomatic.** Interfaces move from `internal/core/gateway/` into the consuming
185
+ `internal/core/service` package; `internal/provider/` splits into technology-named packages
186
+ (`internal/postgres`, `internal/kafka`, `internal/pubsub`, `internal/httpclient`,
187
+ `internal/websocket`, `internal/llm`). A real `depguard` config now fails the build when the core
188
+ imports an edge package — the inward-flow rule is an enforced gate, not a comment.
189
+ - **Python scaffold made idiomatic.** `core/domain/protocols.py` → `core/ports.py`; `src/provider/`
190
+ → `src/adapters/` with technology-prefixed implementations. The service now uses a proper PEP
191
+ src-layout: the importable package is `src/<service>/` (the service name in snake_case) rather
192
+ than a flat `src`, so imports read `from <service>.core.ports import …` and the hatch wheel,
193
+ Docker entrypoints, native runner, and `import-linter` root all target the real package. A real
194
+ `import-linter` contract now fails when `<service>.core` imports an adapter, an entrypoint, or a
195
+ web/db framework.
196
+ - **Engineer skills + methodology** re-expressed in the new idiom; the capability registry, the
197
+ cross-phase "Capability Ports & Providers" contract, and the brownfield extractor de-jargoned.
198
+ The vendor "provider" concept and the `capability-ports.json` machine twin are kept verbatim.
199
+ - New generation produces the idiomatic layout; skills clean-copy on update — `[no-migration]` for
200
+ scaffold templates and engineer skills, which carry forward by clean-copy and affect new
201
+ generation only. A user's already-scaffolded service code is theirs and is documented-forward,
202
+ not rewritten.
203
+ - [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
204
+
205
+ ### Changed (docs-site generator now actually serves docs/, as a native runner, 2026-06-19) `[no-migration]`
206
+
207
+ The `docs-site` generator (plan: `docs/plans/archive/docs-site-scaffold.md`) is finished and verified
208
+ against a real `next build`. It now:
209
+
210
+ - **Serves the live `docs/` tree as a native `./dev` runner**, not a docker-compose service. The
211
+ site compiles the repo-root `docs/` at build time, which is outside any per-service Docker build
212
+ context — so the old containerized build could never see the docs. It registers a non-autostart
213
+ surface runner (`pnpm dev`) via the runner registry and no longer touches `docker-compose.yml`;
214
+ the Dockerfile is removed.
215
+ - **Renders GroundWork's frontmatter-free docs with real titles.** Fumadocs requires a `title`;
216
+ GroundWork docs carry none. `source.config.ts` now derives each page's title (sidebar + header)
217
+ from its first `# H1`, so bets and lifecycle docs are browsable with correct labels — and the
218
+ sidebar floats the **Bets** section to the top.
219
+ - **Pins a build-clean stack** (`fumadocs-* 14.7.7` / `fumadocs-mdx 11.10.1`, Next `15.1.8`, React
220
+ `19.0.0` stable, matching React 19 types, `autoprefixer`) and runs `fumadocs-mdx` on `postinstall`
221
+ so `@/.source` type-checks. The compilation test is no longer `xfail`.
222
+ - **Installs and runs cleanly under pnpm 10+.** A `pnpm-workspace.yaml` allows the first-party Next
223
+ build deps (esbuild/sharp) to run, so `pnpm install` exits 0 and the `pnpm dev`/`pnpm build`
224
+ pre-run dependency check passes — otherwise pnpm's build-script gating exits non-zero and blocks
225
+ the runner from starting. Verified end-to-end: `./dev start` boots the runner and serves `/docs`.
226
+
227
+ Offered as an **optional, default-off** step in the scaffold flow. Additive for existing installs:
228
+ the generator is Tier-1/Tier-3 (clean-replaced / regenerated on upgrade), and a project without a
229
+ docs site needs nothing.
230
+
231
+ ### Added (orchestrator answers scaffold-capability questions, 2026-06-18) `[no-migration]`
232
+
233
+ The orchestrator now has a capability-discovery intent handler: when a user asks "can we scaffold a
234
+ docs site?", "what can GroundWork generate?", or "is there a generator for X?", it answers from the
235
+ shipped generator catalog (`.groundwork/config/generators.json`, already deployed on init/update)
236
+ rather than guessing or loading the scaffold flow. Flag-level detail (auth, messaging, LLM provider,
237
+ docs-site engine) is read read-only from the scaffold skill's single mapping table — no second
238
+ catalog to drift. Skills are Tier-1 (clean-replaced on update), so existing installs pick this up on
239
+ their next `npx groundwork-method update` with no migration.
240
+
241
+ The framework upgrade path (design: `docs/plans/archive/framework-upgrade-path.md`): every
242
+ installed artifact gets an owner and a provenance record, and every framework change
243
+ that touches installed projects ships with a migration — so no project is left behind
244
+ as the framework improves.
245
+
246
+ ### Added (deterministic code map generator, 2026-06-19) `[no-migration]`
247
+
248
+ `npx groundwork-method repo-map` builds `.groundwork/cache/repo-map.json` deterministically:
249
+ a tree-sitter pass (Go, Python, TypeScript/JavaScript) resolves import edges and ranks files
250
+ by PageRank centrality, with a per-file parse cache keyed by content hash so reruns reparse
251
+ only what changed. This makes the code map a first-class, regenerable artifact rather than
252
+ something assembled from LLM inference — closing maturity dimension D5's "regenerable on
253
+ demand" honestly. Serena stays the live, per-symbol complement (navigation, editing, impact
254
+ analysis); the generator is the whole-repo aggregate it cannot export. `repo-map --check`
255
+ (and `groundwork check`) report staleness against `generated_at_commit` as an advisory; refresh
256
+ is detect-and-lazy by default, with no git hook unless opted in. Schema: the installed
257
+ `repo-map-schema.md` reference. The installed `code-intelligence.md` guide (renamed from
258
+ `serena-tools.md`) gives a working agent the orientation workflow — build/refresh the map,
259
+ read centrality for the hubs, navigate and edit with Serena — and the engineer skills point
260
+ to it. Adds runtime deps `web-tree-sitter` and `tree-sitter-wasms` (pinned; bundled grammars,
261
+ no network at run time). The greenfield scaffold seeds an initial map at verification time
262
+ (Phase 4) so a project is born with one, and `getting-started.md` documents a CI lane
263
+ (`repo-map` then `check`).
264
+
265
+ ### Changed (honest dev infrastructure + native runner registry, 2026-06-16) `[no-migration]`
266
+
267
+ The scaffolded `./dev` CLI no longer assumes a server (plan: `docs/plans/archive/dev-cli-native-runners.md`).
268
+ db (Postgres+pgvector) and jaeger are no longer seeded into the base docker-compose — they are
269
+ injected on demand by the service generators that use them, exactly like redis/pubsub. A workspace
270
+ with no containerized service (a desktop, CLI, or local-first app) provisions no infrastructure, and
271
+ `./dev start` reports "nothing to start" instead of faking a success on an empty stack.
272
+
273
+ A native **runner registry** decouples "managed by `./dev`" from "is a docker-compose service": the
274
+ `runners` array in `.dev/dev.config.json` declares native processes (surfaces, sidecars) that
275
+ `./dev` start/stop/status/logs now manage. Surface generators (electron-app, flutter-app, cli-app)
276
+ and `python-microservice --native` self-register their runner, so a desktop app and a native sidecar
277
+ finally appear in `./dev status` and boot with `./dev start`.
278
+
279
+ Additive for existing installs: the CLI bundle is Tier-1 (clean-replaced on update), the `runners`
280
+ field is optional (configs without it manage zero runners), and existing docker-compose files are
281
+ left untouched (the template change affects new generation only) — hence `[no-migration]`.
282
+ Retro-registering surfaces in pre-existing projects ships as the `gw-runner-retro-registration` agent migration (below).
283
+
284
+ - **`workspace-dev-cli`**: db/jaeger removed from `docker-compose.yml.template`; CLI bundle gains
285
+ `cli-src/util/runners.ts`, runner-aware start (Phase C) / stop / clean / status / logs, an honest
286
+ empty-start notice, a db-less `migrate` no-op, and `runners: []` seeding + preservation on re-run.
287
+ - **`ensureOptionalInfra`**: injects db (+`db_data` volume) and jaeger on demand; `createNode` fix
288
+ for creating the services/volumes maps when the base compose ships neither.
289
+ - **Service generators** (go / python / nextjs / docs-site): create the compose services map on
290
+ demand and inject db/jaeger per what each service uses.
291
+ - **Surface/sidecar generators**: electron / flutter / cli / `python --native` self-register a
292
+ runner via the new shared `registerRunner` helper; `./dev status --json` gains a `runners` array.
293
+
294
+ ### Added (composable capability ports & providers, 2026-06-17) `[no-migration]`
295
+
296
+ Infrastructure is now a consequence of providers, not a default (plan: `docs/plans/archive/dev-cli-native-runners.md`,
297
+ WS-F core). A **capability** is a hexagonal port plus a catalog of swappable **providers**; choosing a
298
+ provider chooses an adapter, and each provider declares an operational **footprint** — `env`,
299
+ `compose-service`, `runner`, or `none`. The registry is data, not code
300
+ (`src/generators/capabilities/<capability>/`), so adding a provider is a folder, not a generator change.
301
+
302
+ LLM ships as the first worked family (`capabilities/llm/`, Python stack) with providers `anthropic`,
303
+ `openai`, `local` (self-hosted, OpenAI-compatible), and **`none`** — the raw gateway: the `LLMGateway`
304
+ port + a not-yet-implemented stub + a strict-xfail contract test. `none` is GroundWork's own thesis
305
+ turned on the scaffold — the port is the spec, the adapter is a **bet**; the suite stays green while the
306
+ bet is open and flips red the moment you implement it.
307
+
308
+ - **`add-capability` generator** (new): bolts a capability port + provider (or a raw `none` gateway)
309
+ onto an existing service on Day 2 / inside a bet — the standalone surface over the shared injector.
310
+ - **`src/generators/shared/capabilities.ts`** (new): one `applyCapability` injector consumed by both
311
+ the service generators (scaffold time) and `add-capability` (Day 2) — port + adapter + contract test
312
+ + provider dependency + env footprint, no per-provider drift.
313
+ - **`python-microservice`**: `--llm` now routes through the capability registry; `--llmProvider` gains
314
+ `local` and `none`. The `LLMGateway` port moved from `protocols.py` to its own `llm_port.py` so the
315
+ port is reusable by `add-capability`. Generated output for the existing `anthropic`/`openai` providers
316
+ is unchanged. Additive for installs (new generator + registry; existing services untouched) — `[no-migration]`.
317
+
318
+ Still open in WS-F: architecture phase declaring capabilities (F7), scaffold reconciliation (F8/WS-D),
319
+ engineer-skill alignment doc (F6), and provider families for the Go/Next.js stacks (F5/O9).
320
+
321
+ ### Added (architecture declares capability ports; scaffold reconciles, 2026-06-17) `[no-migration]`
322
+
323
+ 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.
324
+
325
+ - **`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`).
326
+ - **`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`.
327
+ - 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]`.
328
+
329
+ ### Added (Go LLM capability family, 2026-06-17) `[no-migration]`
330
+
331
+ 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).
332
+
333
+ - `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`.
334
+ - 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.
335
+ - `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`.
336
+
337
+ ### Added (capability footprint completion + retro-registration, 2026-06-17)
338
+
339
+ WS-F rounding-out (plan: `docs/plans/archive/dev-cli-native-runners.md`, F6/F9/D2 + WS-E1). The footprint
340
+ matrix is now complete and the runner registry is reachable by existing installs.
341
+
342
+ - **`applyCapability` materializes all four footprints.** It already wrote `env`/`none`; it now
343
+ injects a `compose-service` footprint's container into the workspace `docker-compose.yml` (the
344
+ capability-driven form of WS-A's on-demand db/jaeger) and registers a `runner` footprint with
345
+ `./dev` via `dev.config.json`. Two new LLM providers exercise these arms and prove "swap the
346
+ footprint, keep the port and adapter": **`ollama`** (runner — `ollama serve`) and **`localai`**
347
+ (compose-service — a model-server container), both reusing the OpenAI-compatible adapter.
348
+ - **Engineer-skill reference** `capability-ports.md` added to `groundwork-go-engineer` and
349
+ `groundwork-python-engineer` (the stacks that emit ports): the generated port/adapter/footprint
350
+ shape and the `none` bet, so a hand-written adapter matches the generated one. Skills clean-copy
351
+ on update — `[no-migration]`.
352
+ - **`infrastructure.md` gains a "What `./dev start` does" section** (scaffold Phase 5): one row per
353
+ managed unit (container / native app-service / runner) with its run mode, cross-checked against
354
+ `./dev status --json`, so the doc can never describe a stack the CLI cannot run.
355
+ - Generation tests cover the full footprint matrix (env / compose-service / runner / none).
356
+ - [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
357
+
358
+ ### Changed (resize work on worth + stakes, not effort, 2026-06-16)
359
+
360
+ Refines the unreleased product-principles corpus (plan: `docs/plans/archive/appetite-stakes-resize.md`).
361
+ Reframes how GroundWork sizes work for an AI-native shop: appetite is re-denominated from
362
+ calendar time to **worth** (opportunity cost), and **stakes** (blast radius × reversibility ×
363
+ review/judgement load) is promoted to a first-class measure of a bet's size — effort/complexity
364
+ named as the axis AI deflated. No shipped surface has changed yet (the corpus is unreleased), so
365
+ no migration is involved.
366
+
367
+ - **`foundations/prioritization-and-appetite`**: re-denominated appetite (worth, not a
368
+ time-budget — "N weeks" demoted to one optional lens); new principle **"Size is stakes, not
369
+ effort"**; "Sizing by complexity" added to the anti-patterns.
370
+ - **`foundations/product-risks`** §6: stakes named as blast radius × reversibility × review load,
371
+ cross-linked to the canonical definition; effort framing dropped.
372
+ - **`groundwork-product` references** (`shaping-and-appetite`, `scope-and-sequencing`) + sync-anchor
373
+ re-pinned to the edited sources.
374
+ - **Bet artifacts**: pitch template gains a **Stakes** line and a worth-framed appetite; bet
375
+ discovery + MVP workflows elicit worth + stakes; `bet-pitch` and `technical-design` review
376
+ checklists verify stakes is sized and not confused with effort.
377
+ - **Vocabulary aligned** in `product-engineering` §3, `ways-of-working/units-of-work`, `docs/product.md`.
378
+
379
+ ### Added (product-discipline persona + product-principles corpus, 2026-06-14) `[no-migration]`
380
+
381
+ The second discipline-expert persona (after `groundwork-architect`), with a first-class
382
+ product-principles corpus behind it (plan: `docs/plans/archive/architecture-2026-refresh.md`
383
+ sibling — product wave). Modelled on the same persona-in-a-workflow-route pattern;
384
+ research-grounded against 2026 product practice (Cagan's four risks, Torres's continuous
385
+ discovery, AI-native product).
386
+
387
+ - **`groundwork-product` skill** (new hidden skill): a persistent product-discipline persona
388
+ (Cagan/Torres/Bezos lineage) owning the **value + viability** risks. Persona header +
389
+ operating contract + context routing + four-risk handoffs, with **7 self-contained
390
+ `references/`** (discovery-and-opportunity, product-risks, requirements-and-specs,
391
+ success-metrics-and-signals, shaping-and-appetite, scope-and-sequencing, ai-native-product)
392
+ sync-anchored to the source pages. Ships on `init`; present in every project.
393
+ - **Product-principles corpus** (6 new first-class pages): `foundations/continuous-discovery`
394
+ (opportunity-solution tree, problem space before solution), `foundations/product-risks`
395
+ (the four risks + owner table), `foundations/success-metrics` (North Star, counter-metrics,
396
+ signal before ship), `foundations/requirements-and-specs` (JTBD, journeys, stable-ID FRs,
397
+ Given/When/Then), `foundations/prioritization-and-appetite` (the portfolio view: appetite,
398
+ the bet, scoring frameworks in their place), and `ai-native/ai-native-product` (the AI-native
399
+ loop, evals as a product responsibility, dual metrics, the three cost layers). `product-engineering`
400
+ refreshed as the corpus anchor; 6 `llms.txt` entries added.
401
+ - **Persona wired into the lifecycle**: product-brief setup (`Step 0` activation), bet discovery
402
+ (`01-discovery.md` — the pitch shaped as the persona, both tracks), bet validation
403
+ (`05-validation.md` — product-brief refinements + re-pitch judgement). Architect's product
404
+ handoff flipped from "(when available)" to active; the two personas now divide the product-risk
405
+ space (product: value + viability · architect/engineers: feasibility · designer *planned*:
406
+ usability). Orchestrator + contributor guide updated.
407
+
408
+ ### Added (architecture 2026 refresh — P0, 2026-06-14)
409
+
410
+ Research-driven refresh of the architecture guidance against 2026 best practices
411
+ (plan: `docs/plans/archive/architecture-2026-refresh.md`). P0 — the AI/agentic cross-cut +
412
+ enforcement layer:
413
+
414
+ - **`agentic-systems` principle + architect reference** (new): architecting systems where
415
+ AI agents are first-class actors — single-agent-first topology (naive multi-agent is the
416
+ anti-pattern), the MCP + A2A + AG-UI protocol stack, context engineering + tiered memory,
417
+ durable execution for long-running agents, the prompt-injection threat model + guardrails,
418
+ least-agency + human-in/on-the-loop, and trace/eval-based reliability.
419
+ - **`evolutionary-architecture` principle + architect reference** (new): designing for change
420
+ and governing it with **fitness functions** ("a record documents; a fitness function
421
+ assures"), architecture-as-code, strangler-fig modernization, reversibility, and advisory
422
+ governance (advice process / guild) over a review-board gate.
423
+ - **`ai-native-architecture` reference sharpened**: the agent protocol stack (A2A/AG-UI beside
424
+ MCP, Resources vs Tools), the RAG pattern taxonomy (naive→advanced→agentic→adaptive,
425
+ GraphRAG), and cost mechanism (model routing, semantic caching, AI gateway); topology/memory/
426
+ durability/guardrails handed to `agentic-systems`.
427
+ - **AI-ops + 2026 cross-cut** woven through the operational principles + architect references:
428
+ reliability (cell-based isolation, living burn-reviewed SLOs, AI semantic-failure + per-SLI
429
+ budgets), observability (OTel GenAI conventions, eBPF/OBI auto-instrumentation, wide events),
430
+ security (SPIFFE workload identity, Sigstore provenance/SLSA levels, prompt-injection + agent
431
+ security as OWASP LLM01), performance (compute placement / edge / WebAssembly, KEDA event-driven
432
+ scale-to-zero, model-routing + semantic-caching cost levers), platform/delivery (OpenTofu vs
433
+ Terraform vs Pulumi, OpenFeature, GitOps rollout engines, AI gateway control plane, carbon-aware
434
+ scheduling).
435
+ - **Enforcement/governance**: contract testing + `can-i-deploy` gate + Spectral linting + RFC 9457
436
+ + protocol-selection added to API guidance; advice-process governance + fitness-function pairing
437
+ added to decision records.
438
+ - **Three new structural principle pages + architect references** (P1): **`surface-architecture`**
439
+ (surfaces as adapters over the core — the BFF seam, micro-frontend decomposition, render
440
+ placement, design-system-as-contract), **`identity-and-access`** (authn/authz as architecture —
441
+ OIDC/OAuth 2.1, SPIFFE workload identity, first-class agent identity + delegation, modelled
442
+ authorization), and **`durable-execution`** (workflow-as-code — checkpointed long-running and
443
+ multi-step processes, orchestration vs choreography, the reliability substrate for durable agents).
444
+ - **Topic improvements** (P2) to existing principles + references: integration (dead-letter handling,
445
+ backoff-with-jitter, orchestration-vs-choreography, modern webhooks via JWKS/CloudEvents), data
446
+ (CDC vs outbox, registry-enforced schema compatibility, the AI-era vector/RAG/feature-store layer,
447
+ lakehouse + Iceberg), real-time (SSE as the per-direction default + LLM token-streaming pattern,
448
+ CRDTs/local-first, WebTransport deferred), and boundaries (modular-monolith-default, the
449
+ distributed-monolith smell + consolidation signal, Conway/Team-Topologies). Edge/WebAssembly +
450
+ carbon-aware (P3) folded into performance/platform/cost rather than promoted to standalone pages.
451
+ - Tier-2 manifesto pages refresh on `update`; architect skill is clean-copied. `[no-migration]`.
452
+
453
+
454
+
455
+ - **`groundwork-architect`** (new hidden skill): a persistent architecture-discipline
456
+ persona built on the engineer-skill anatomy (`SKILL.md` + `sync-anchor.md` +
457
+ self-contained `references/`). It is adopted *within* the architecture setup workflow
458
+ and the bet design phase (`groundwork-bet/workflows/02-design.md`) — bringing the
459
+ house engineering principles (boundaries/hexagonal, contracts, integration,
460
+ reliability, security, performance, observability, data, platform/delivery,
461
+ AI-native, ADRs) to bear at every point an architecture decision is made. The
462
+ principles are distilled into the skill's own `references/` and sync-anchored to
463
+ `src/docs/principles/*`, which previously had no reader in the design flow.
464
+ `[no-migration]` — skills are carried forward by clean-copy on `update`.
465
+ - **Architecture Decisions principle + governed ADR template**: a new first-class
466
+ principle page (`docs/principles/system-design/architecture-decisions.md`) establishing
467
+ the modern governed-decision standard — records carry **assumptions**, a **review
468
+ trigger**, and an **owner**; they are immutable as records (superseded, never overwritten)
469
+ and double as the decision-context layer humans and agents read before revisiting a
470
+ choice. The shipped ADR template (`templates/adr.md`) and manifesto belief #7 are updated
471
+ to match; the architecture commit phase now emits the governed fields. Tier-2 docs refresh
472
+ on `update`; the template is framework-owned (clean-replaced).
473
+
474
+ ### Added (upgrade path, 2026-06-12)
475
+
476
+ - **Install manifest**: init/update write `.groundwork/config/manifest.json` — every
477
+ deployed tier-1/tier-2 file with source, package version, and SHA-256 at deploy;
478
+ generators record provenance (name, version, options, file hashes) into the same
479
+ ledger. Pre-manifest installs are backfilled on their next update (pristine vs
480
+ `adopted` classification).
481
+ - **Migration registry**: `migrations/index.json` ships in the package. `cli`
482
+ migrations (detect-first, idempotent, forward-only) run inside `update` and record
483
+ completions in `state.json`; `agent` migrations are Detect/Transform/Accept briefs
484
+ executed by the new skill. Changelog `[migration]` lines now reference registry ids.
485
+ - **Seeded docs stop fossilizing**: `update` hash-classifies `docs/` foundations,
486
+ `AGENTS.md`, and `llms.txt` — pristine copies refresh to the current package, edited
487
+ copies are queued for a skill-mediated merge, absent ones are copied as before.
488
+ - **The `./dev` bundle is framework-owned**: `update` clean-replaces `.dev/dev-bundle.js`
489
+ and the `dev` launcher (a customized launcher is queued for judgment instead); the
490
+ bundle embeds its version (`./dev --version`) and `./dev doctor` flags a bundle that
491
+ trails the framework stamp.
492
+ - **`groundwork-upgrade`** (nineteenth hidden skill): executes the upgrade brief
493
+ `update` compiles — one item, one explained proposal, one commit. Distinct from
494
+ `groundwork-update` (project docs); the orchestrator surfaces an unconsumed brief at
495
+ session start.
496
+ - **`update --dry-run`** prints the full plan (skill diff, tier-2 classification,
497
+ pending migrations, brief contents) without writing; `groundwork check` gains a
498
+ framework section (version gap, pending migrations, tier-1 corruption, unconsumed
499
+ brief) that needs no network.
500
+ - **Upgrade-path tests**: frozen old-install fixtures (`tests/fixtures/installs/`),
501
+ convergence/preservation/idempotency/detect-honesty contract tests, a
502
+ migration-coverage gate in the contracts lane, and an `upgrade` simulation suite.
503
+ - [migration] Old installs never received `.groundwork/config/config.toml`; update now seeds the commented default (gw-seed-config-toml)
504
+ - [migration] Register the Serena code-intelligence MCP server in `.mcp.json` and remove the retired depwire server (gw-register-serena-mcp)
505
+ - [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
506
+ - [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
507
+ - [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
508
+ - [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
509
+
510
+ Multi-surface restructure: every product is modelled as one headless **capability
511
+ core** plus zero or more **surfaces** (web, mobile, CLI, MCP), with parity tracked
512
+ per capability instead of presumed. A single-surface product pays zero added
513
+ ceremony — every phase degrades to its prior behaviour when the registry holds one
514
+ surface or none exists.
515
+
516
+ ### Added (multi-surface, 2026-06-12)
517
+
518
+ - **Surface registry + capability ledger**: architecture (greenfield) and
519
+ architecture-extract (brownfield) write `docs/surfaces.md` with a machine twin at
520
+ `.groundwork/surfaces.json`; bet validation fills a capability × surface ledger row
521
+ per delivered capability (`delivered`/`planned`/`omitted`/`n/a`; empty cells
522
+ illegal; retired columns freeze).
523
+ - **The bet loop's core/surface spine**: pitches declare `surfaces:` scope and surface
524
+ no-gos; technical designs split into Surface Design (per-surface, per-type
525
+ vocabulary) and Capability Design (headless; the contract must serve every in-scope
526
+ surface and presume none); milestones are typed capability-first vs surface, with
527
+ prove-once enforcement (surface tests never re-prove core logic); headless delivery
528
+ is legal and ledger-recorded.
529
+ - **`groundwork-surface-activation`** (eighteenth hidden skill): register → design
530
+ (lazy track run) → scaffold → triage the ledger column → hand off; bootstraps the
531
+ registry on pre-restructure products.
532
+ - **Two new solution types, full chains**: `flutter-app` (mobile) and `electron-app`
533
+ (desktop) generators with survey-dated stack principles
534
+ (`docs/principles/stack/{flutter,electron}/`), hidden engineer skills with
535
+ hash-pinned sync anchors, brand-token theme projection, and toolchain guards that
536
+ skip-with-reason (never silently green).
537
+ - **Multi-medium system tests**: `system-test-runner --surfaces` generates a
538
+ `surfaces` fixture (slug → `{slug, medium, reach}`) with per-surface
539
+ page/runner/client fixtures across five mediums; `frontend_base_url` survives as a
540
+ deprecated alias for single-graphical-surface products.
541
+ - **Tooling**: `./dev surface status` renders the registry, ledger matrix, and
542
+ planned-cell sync backlog; `groundwork-check` gains five surface signals (twin
543
+ drift, empty cells, stale planned intent, untested active surface, missing
544
+ registry).
545
+ - **Design system**: shared brand foundation runs once; tracks run per interface type
546
+ in use; brand tokens carry per-type Tier-2 blocks (`terminal` + new `visual`, with
547
+ platform ergonomics); the graphical-ui track gains web/mobile/desktop platform
548
+ subsections.
549
+ - **Maturity + evals**: dimensions D8 (surface parity discipline) and D9 (contract
550
+ compatibility); seeded `multi_surface` and `headless_api` simulation suites.
551
+ - Contract spec formats follow the core's deployment (OpenAPI/AsyncAPI hosted, proto
552
+ for gRPC, typed module API embedded).
553
+
554
+ ### Fixed (multi-surface, 2026-06-12)
555
+
556
+ - The brownfield eval fixture's `services/` tree was silently excluded by the repo
557
+ `.gitignore` and never tracked; negation rules added and the fixture committed.
558
+
559
+ ### Fixed (multi-surface live bake-out, 2026-06-12)
560
+
561
+ End-to-end sandbox run of the full chain — Go core + Flutter + Electron scaffolds
562
+ booted together, both surfaces proven live against the running core (real SDKs:
563
+ Flutter 3.44.2, Electron via Playwright `_electron`):
564
+
565
+ - **Flutter wiring proof now true out of the box**: the scaffold's `ApiClient`
566
+ probed `/api/healthz` (the Next.js BFF route) while Go/Python cores serve
567
+ `/health` — a freshly scaffolded mobile app rendered "unreachable" against its
568
+ own healthy core. The client now probes `/health` (BFF variance documented).
569
+ - **Electron surface actually wired to the core**: the scaffold never consumed the
570
+ `API_BASE_URL` the test harness passes. New `src/main/core-client.ts` seam (main
571
+ fetches the gateway; the CSP-sandboxed renderer rides the typed `core:health`
572
+ channel), rendered as a wiring-proof line in the home view, asserted in the
573
+ Playwright smoke, unit-tested with injected fetch.
574
+ - **Auth seams on both surfaces**: Flutter gains `authTokenProvider` + a tested
575
+ Bearer interceptor; Electron's core client exposes `coreAuthHeaders` —
576
+ unauthenticated by default, identity-provider wiring documented at the seam.
577
+ - **`flutter create` pollution at bootstrap**: the platform-shell bootstrap now uses
578
+ `--empty`, keeping the counter-app sample `widget_test.dart` (which references a
579
+ `MyApp` the scaffold doesn't have) from breaking analyze/test post-bootstrap.
580
+ - **Re-running `workspace-dev-cli` no longer resets docker-compose.yml**: the
581
+ topology accreted by service generators is preserved verbatim (a re-run erased
582
+ the core's registration, and `./dev migrate` silently migrated nothing).
583
+ - **`./dev` lifecycle commands no longer treat surfaces as backends**: app services
584
+ are now the `services/` directories wired into compose, so migrate/start/doctor
585
+ skip mobile/desktop surface apps instead of creating phantom databases for them.
586
+ - **Flutter runner device probe counts only android/ios devices**: host "devices"
587
+ (macOS, Chrome) no longer turn the intended skip into a hard no-devices failure;
588
+ the skip names the missing device class.
589
+ - All of the above locked in by new generation tests (core-access seam wiring,
590
+ `--empty` bootstrap, auth seams, compose preservation, device-probe filter).
591
+
592
+ Contract-grade delivery: the bet loop's design → tests → delivery chain becomes
593
+ machine-enforced end to end. Design emits specs, the proof suite is reviewed
594
+ assertion-by-assertion and sealed by hash manifest, delivery is tracked per-slice in a
595
+ machine-readable manifest, and the loop closes with a retrospective. Plus the package
596
+ rename and the BMAD delivery-loop adoptions. Also includes the second-pass quality
597
+ sweep over the 0.9.0 surface.
598
+
599
+ ### Added (contract-grade delivery, 2026-06-10)
600
+
601
+ - **Specs at design time**: Design Foundations writes `docs/bets/<slug>/contracts/`
602
+ (`openapi.yaml`, `asyncapi.yaml`, `schema.sql`); decomposition tests derive every shape
603
+ from the specs; validation promotes them to `docs/architecture/api/<service>/` as the canonical record.
604
+ - **The signing gate**: a generated `test-review.md` puts every test's verbatim assertions
605
+ and traceability in front of the user at Proof of Work; on approval `./dev bet sign`
606
+ seals the suite with a SHA-256 manifest. `./dev test bet` refuses a tampered suite; the
607
+ delivery workflow forbids test edits; a wrong test routes through the Amendment Protocol
608
+ with user sign-off and a re-seal.
609
+ - **The progress surface**: `.groundwork/bets/<slug>/decomposition.json` mirrors the
610
+ decomposition machine-readably; delivery records per-slice status, baseline/delivered
611
+ commits, file lists, and notes; `./dev bet status [--json]` renders the milestone/slice
612
+ board with seal verification.
613
+ - **Delivery-loop mechanics adopted from BMAD**: per-slice context capsule (read every file
614
+ the slice modifies before changing it), three-lens slice review (blind reviewer, edge-case
615
+ tracer, acceptance auditor against the specs) with decision/patch/defer/dismiss triage
616
+ wired to the maturity ledger, the bet retrospective (slice-record mining, previous-retro
617
+ follow-through audit, significant-discovery detection, readiness exploration), and Change
618
+ Navigation with written before/after change proposals.
619
+ - **`groundwork-patch`**: the small-change lane — one bounded user-facing goal, tested,
620
+ Living-Documents-passed, logged to `docs/bets/patch-ledger.md`; clustering patches surface
621
+ as a bet signal in discovery. Contract/schema changes never qualify.
622
+ - **Generated test surface**: contract-conformance system test (served spec vs promoted
623
+ spec), Playwright page-object scaffold + axe a11y smoke for graphical-ui projects, and a
624
+ per-stack "Bet Slice Rollout" permanent-test taxonomy in the engineer skills.
625
+ - **1.0 criteria** written down in `docs/plans/archive/contract-grade-delivery.md` §9.5.
626
+
627
+ ### Changed (contract-grade delivery, 2026-06-10)
628
+
629
+ - [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 …`
630
+ - Rename context: the bare npm name is held by an unrelated package, and the `-method` suffix matches the methodology-package convention.
631
+ - Release workflow publishes for real (dry-run gate removed); requires the `NPM_TOKEN` secret.
632
+ - Infra images pinned (`postgres:16`, `redis:7`); `groundwork check` exit codes documented.
633
+ - `docs/groundwork-vs-bmad.md` corrected: BMAD does deliver (full implementation phase);
634
+ GroundWork's differentiators are the executable layer and the sealed design-locked test
635
+ contract, not "they stop at documents."
636
+
637
+ ### Added
638
+
639
+ - **`groundwork-elicit`**: structured elicitation as an anytime utility skill — diagnoses a
640
+ weak draft section, proposes the one best-fit technique (24 curated methods, loaded only at
641
+ invocation), executes it conversationally, and applies the strengthened section to the open
642
+ draft with the review gate re-run before commit. Offered from the draft walkthroughs of
643
+ product brief, architecture, the design-system tracks, and bet design.
644
+ - **Operating contract Protocol 9 (Review Invocation)**: the review-dispatch mechanics and the
645
+ failure procedure now live in one place. A review that errors, hangs, or returns no verdict
646
+ stops the phase — never a silent self-review; an inline self-review requires explicit user
647
+ authorisation and is loudly labelled as not satisfying the gate. Additive; contract stays v1.
648
+
649
+ ### Changed
650
+
651
+ - **Per-phase step files**: `groundwork-architecture` and `groundwork-scaffold` (31KB each)
652
+ split into slim entries plus `phases/NN-*.md` loaded at each phase's start — a session in a
653
+ late phase no longer carries every earlier phase's instructions. Content-preserving move.
654
+ - **Extract-path consistency**: Adopt/Upgrade detection is one structural rule stated
655
+ identically across all three extract skills; `brand-tokens.json` is preserved when valid;
656
+ state recording and frontmatter exemptions are stated as intent instead of left implicit;
657
+ infra-adopt halts on a service-count mismatch and records a gap row.
658
+ - **Greenfield lifecycle gaps**: product-brief gains the sibling resume protocol; MVP defines
659
+ its post-review refine path; scaffold flags unverified output with a Verification Status
660
+ section; the reversal-protocol sentence is aligned across all phases.
661
+ - **Registered-skill context cost**: persona description cut 77→36 words; check loses its
662
+ duplicated description and dead reference; orchestrator anchors the operating contract and
663
+ explains its rules.
664
+ - `groundwork check` prints a friendly guard when run outside a git repository; the seeded
665
+ `llms.txt` states that setup-phase docs appear as each phase commits.
666
+
667
+ ### Removed
668
+
669
+ - The in-repo `BMAD/` reference clone (the analysis it informed is committed; the clone lives
670
+ outside the repo). Stale `main` field in package.json and stale `.npmignore` entries.
671
+
672
+ ### Fixed (full-corpus skill audit, 2026-06-12)
673
+
674
+ Every SKILL.md, instructions file, template, and checklist in the shipped corpus was
675
+ read and ~1,076 cross-references mechanically verified; the findings ledger executed:
676
+
677
+ - **Security**: `package.json` gains a `files` allowlist — a local `npm pack` previously
678
+ shipped the repo's `.env` (live API keys), `.nx/` caches, and stray workspaces
679
+ (2,832 files → 482). The CI release path was never affected. [no-migration]
680
+ - **Sandbox leak scrubbed from the Next.js engineer skill**: 12 live `wordloop.app`/
681
+ cloudinary identifiers replaced with generic hosts, 14 "the the Next.js application"
682
+ find/replace artifacts repaired across 8 reference files, and an invalid
683
+ attribute-position JSX comment fixed in `mutations-and-forms.md`. [no-migration]
684
+ - **infra-adopt joins the multi-surface seam**: Phase 2 now runs
685
+ `system-test-runner --surfaces` from `.groundwork/surfaces.json` instead of the
686
+ deprecated single-surface `--interfaceMedium` alias — brownfield always has a
687
+ registry by then, and the alias produced a fixture-less harness plus false
688
+ groundwork-check warnings. [no-migration]
689
+ - **Broken shipped paths**: scaffold Phase 2's missing-skill fallback pointed at the
690
+ repo-internal `src/hidden-skills/` (now `.agents/groundwork/skills/`);
691
+ groundwork-writer's document-type table caught up with the canon
692
+ (`docs/services/<service>.md`, `docs/decisions/`, `docs/api/<service>.md`, root
693
+ `llms.txt`, new Domain Entity row). [no-migration]
694
+ - **Engineer-skill contract drift**: Go validation responses unified on 422 across
695
+ SKILL.md, `api-design.md`, and `http-handlers.md` (matching the Python skill and
696
+ huma's default); the insecure `tempfile.mktemp` exemplar (CWE-377) replaced with
697
+ `mkstemp`; the "flat package layout" claim corrected to the nested `internal/`
698
+ layout the generator actually scaffolds (fixed in the pinned principle and
699
+ re-anchored); the phantom `--run-integration` pytest flag replaced with real
700
+ `-m live` marker selection. [no-migration]
701
+ - **Protocol-list drift**: all bet workflow headers now carry the contract's
702
+ Continuous Bet set (Protocols 1, 2, 4, 8, 9); the contract's Maintenance mode
703
+ gains `groundwork-upgrade`; update/upgrade headers name Protocol 9. [no-migration]
704
+ - **Bet activation**: routes added for `status: discovery` (resume into design) and
705
+ `status: delivered` (terminal — next work is a new bet), plus multi-pitch
706
+ disambiguation when several active pitches exist. [no-migration]
707
+ - **Scan digest schema**: four new fields (`inferred_users`, `licensing_signals`,
708
+ `theme_framework`, `interaction_a11y`) and routing so the brownfield extracts'
709
+ findings-template sections (Inferred Users, Licensing, Product Surface, Theme &
710
+ Framework, Interaction/A11y) are actually populated by the scan. [no-migration]
711
+ - **Governance (repo-side)**: engineer-skill mirror rule documented (canon =
712
+ `src/hidden-skills/`, `.agents/skills/` copies are read-only) and enforced by two
713
+ new gates in `./dev test contracts` (mirror byte-identity + sync-anchor hash
714
+ verification — the anchors' "CI verifies" claim is now true); CLAUDE.md routes Go
715
+ work to `groundwork-go-engineer` (was the vendored `golang-pro`) and gains a Python
716
+ route; `skills-lock.json` hashes recomputed against the vendored files with the
717
+ recipe documented; the contributor guide's repo map lists all eight dev skills and
718
+ its phantom `./dev check contracts` reference now names the real conformance path.
719
+ - **Minors**: MVP phases renumbered contiguously (1–4); maturity prose reconciled
720
+ with its four-row table (`n/a` is a precondition marker, not a state); `dormant`
721
+ surfaces keep their recorded `testMedium` (exercised only while `active`); three
722
+ electron cross-skill reference paths qualified; "Workstream F" plan leak removed
723
+ from bet decomposition; scripted discovery questions converted to intent; dead
724
+ `last_reviewed` dropped from the pitch template; groundwork-check's dimension
725
+ range updated for D8/D9. [no-migration]
726
+ - **Audit backlog sweep** (second pass, same day): the Next.js engineer SKILL.md
727
+ rejoined its family template (capability-core clause, named principle path, real
728
+ reference files behind every Task Routing entry, hedge-free safety gates); sandbox
729
+ `Story*` identifiers generalized out of the Python database reference; Python DI
730
+ exemplar re-typed against the gateway Protocol; idempotency-key scope unified on
731
+ POST/PATCH with PUT's HTTP-semantics exemption stated; stale Go 1.22 loop-var
732
+ idiom removed and the provider-boundary `%v` wrap given its rationale; snapshot
733
+ testing scoped to genuinely opaque artefacts (matching the Go rule); electron's
734
+ sync-anchor now pins its `typescript/frontend.md` deferral target; the review
735
+ skill documents `implementation-readiness.md` as deliberately outside the
736
+ `document_type` enum and its upstream chain includes `decomposition`; digest
737
+ routing labels exact-match the `## Service / Partition Map` header; the engineer
738
+ two-family SKILL.md split and the vendored-skill style policy are now recorded in
739
+ the contributor guide; scaffold-designer's checklists carry a summaries-not-canon
740
+ caveat and its stale `workspace.json` claim is gone. [no-migration]
741
+
742
+ ### Fixed (production-readiness pass, 2026-06-12)
743
+
744
+ - **`update` fails closed on copy errors**: the mechanical lane (skill trees,
745
+ generators config, tier-2 docs, dev bundle) now aborts on any I/O failure
746
+ *before* the version stamp and manifest advance — a partial apply reads as
747
+ "update failed, re-run", never as a clean update whose half-copied files
748
+ classify as user edits on the next run. `init` likewise aborts instead of
749
+ printing success over a failed skill install. [no-migration]
750
+ - **Bet workflows pin the contract version**: all five `groundwork-bet`
751
+ workflow headers now reference the operating contract as `(contract v1)`,
752
+ matching every other methodology skill. [no-migration]
753
+ - **License metadata**: `package.json` declared ISC while the LICENSE file is
754
+ MIT; the manifest now says MIT. [no-migration]
755
+ - **Repo hygiene** (dev-only): nine committed scratch scripts (Gemini SDK
756
+ explorations) and an accidentally committed session lock file removed from
757
+ the repo root; the lock path is now gitignored. The contributor guide's
758
+ release section no longer claims the publish workflow is dry-run gated.
759
+
760
+ ## [0.9.0] - 2026-06-09
761
+
762
+ First tracked release. GroundWork adopts semver from `0.x` honestly — the framework is
763
+ feature-complete across both setup paths but its operational surface is still hardening.
764
+
765
+ ### Added
766
+
767
+ - **Update engine**: `groundwork-update` rebuilt as a full maintenance skill — change-set
768
+ resolution, three-pass code→doc mapping (path intersection, Serena impact analysis,
769
+ semantic mapping), surgical edits under the Living Documents protocol, fail-closed review
770
+ gate per mutated doc.
771
+ - **Real CLI `update` and `check`**: `update` diffs installed skills against the package and
772
+ refreshes them (preserving `.groundwork/config`, cache, and docs); `check` runs deterministic
773
+ doc-drift detection (git history vs `last_reviewed`/`source_of_truth` frontmatter), CI-ready
774
+ with meaningful exit codes.
775
+ - **Version stamping**: init/update write `groundwork.version` into `.groundwork/config/state.json`;
776
+ the operating contract carries a contract version; the CLI warns on mismatch and prints the
777
+ changelog slice between installed and current versions on update.
778
+ - **Help surface**: a workflow index generated from the orchestrator routing tables
779
+ (`npm run gen:workflow-index`), served by the orchestrator's help intent and `npx groundwork help`;
780
+ freshness is CI-gated.
781
+ - **Maturity steering (D8)**: a seven-dimension maturity model defining GroundWork's target
782
+ state, a living `docs/maturity.md` (assessment + tracked gap roadmap) written by both setup
783
+ paths, bet-loop steering (discovery proposes pulling gaps in, validation closes rows), and
784
+ continuous re-assessment in `groundwork-check`. Supersedes the one-shot onboarding report.
785
+ - **Shipped review checklists**: per-document-type named-failure-mode checklists under
786
+ `groundwork-review/checklists/`, cited by item name in review findings.
787
+ - **Skill conformance linter**: `./dev lint skills` (CI-gated) — frontmatter, versioned
788
+ contract references, fail-closed review-gate blocks, canonical discovery-notes headers,
789
+ routing↔filesystem agreement, llms.txt links, skill↔doc pairs, workflow-index freshness.
790
+ - **User config surface**: `.groundwork/config/config.toml` seeded once at init —
791
+ `[defaults]` proposals (stack, models, generator flags) read by architecture/scaffold,
792
+ `[skills]` custom routing merged after the built-in table.
793
+ - **CLI contract tests**: `./dev test cli` (CI-gated) covering init/update/check semantics;
794
+ exposed and fixed a self-copy guard bug that could have deleted the source repo's own skills.
795
+ - **Adversarial simulation suites**: ambiguous, terse, mid-flow-reversal, and scope-creep
796
+ personas for the simulation harness.
797
+ - **Host support statement** (`docs/host-support.md`), a greenfield output showcase
798
+ (`docs/examples/greenfield-verse.md`), and BMAD-artifact ingestion named explicitly in all
799
+ three brownfield extract skills (Adopt/Upgrade mode).
800
+ - Root `README.md` and `docs/getting-started.md` (walkthrough with excerpts from a real
801
+ greenfield simulation session).
802
+ - `Maintenance (anytime)` lifecycle mode in the operating contract, defining which protocols
803
+ bind `groundwork-update` and `groundwork-check`.
804
+ - `contracts` CI job: dev-CLI bundle freshness, adopt-merge idempotency, workflow-index freshness.
805
+
806
+ ### Changed
807
+
808
+ - [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.
809
+ - `groundwork-persona` editorial pass to the skill-writer standard (stays registered — always-on
810
+ conversational posture cannot load on demand).
811
+ - Lifecycle docs cover the brownfield path (scan → extract ×3 → infra adoption) and Adopt/Upgrade
812
+ mode; `docs/lifecycle/index.md` no longer claims greenfield-only.
813
+
814
+ ### Pre-history
815
+
816
+ Before 0.9.0 the package was unversioned (hardcoded `1.0.0`, no releases). Major capabilities
817
+ built in that period: the two-layer skill architecture and orchestrator routing; greenfield setup
818
+ phases (product brief, design system, architecture, scaffold, MVP); the brownfield track (scan,
819
+ three extract phases, infra adoption, gap ledger); the operating contract (discovery notes,
820
+ living documents, phase lifecycle, summaries, hand-off cache, cache isolation, review gate);
821
+ Nx generators for Go/Python microservices, Next.js apps, CLI apps, docs sites, and the
822
+ system-test runner; the bundled `./dev` workspace CLI; Serena MCP registration; the scaffold
823
+ test harness (generation/contracts/compilation/e2e) and the simulation harness with checkpoints.