groundwork-method 0.0.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (629) hide show
  1. package/CHANGELOG.md +781 -0
  2. package/LICENSE +21 -0
  3. package/README.md +44 -29
  4. package/bin/groundwork.js +1654 -0
  5. package/dist/src/generators/add-capability/generator.d.ts +8 -0
  6. package/dist/src/generators/add-capability/generator.js +60 -0
  7. package/dist/src/generators/add-capability/generator.js.map +1 -0
  8. package/dist/src/generators/cli-app/generator.d.ts +9 -0
  9. package/dist/src/generators/cli-app/generator.js +140 -0
  10. package/dist/src/generators/cli-app/generator.js.map +1 -0
  11. package/dist/src/generators/docs-site/generator.d.ts +5 -0
  12. package/dist/src/generators/docs-site/generator.js +441 -0
  13. package/dist/src/generators/docs-site/generator.js.map +1 -0
  14. package/dist/src/generators/electron-app/generator.d.ts +6 -0
  15. package/dist/src/generators/electron-app/generator.js +261 -0
  16. package/dist/src/generators/electron-app/generator.js.map +1 -0
  17. package/dist/src/generators/flutter-app/generator.d.ts +6 -0
  18. package/dist/src/generators/flutter-app/generator.js +314 -0
  19. package/dist/src/generators/flutter-app/generator.js.map +1 -0
  20. package/dist/src/generators/go-microservice/generator.d.ts +8 -0
  21. package/dist/src/generators/go-microservice/generator.js +232 -0
  22. package/dist/src/generators/go-microservice/generator.js.map +1 -0
  23. package/dist/src/generators/nextjs-app/generator.d.ts +8 -0
  24. package/dist/src/generators/nextjs-app/generator.js +294 -0
  25. package/dist/src/generators/nextjs-app/generator.js.map +1 -0
  26. package/dist/src/generators/python-microservice/generator.d.ts +13 -0
  27. package/dist/src/generators/python-microservice/generator.js +265 -0
  28. package/dist/src/generators/python-microservice/generator.js.map +1 -0
  29. package/dist/src/generators/shared/brand-tokens.d.ts +89 -0
  30. package/dist/src/generators/shared/brand-tokens.js +308 -0
  31. package/dist/src/generators/shared/brand-tokens.js.map +1 -0
  32. package/dist/src/generators/shared/capabilities.d.ts +101 -0
  33. package/dist/src/generators/shared/capabilities.js +279 -0
  34. package/dist/src/generators/shared/capabilities.js.map +1 -0
  35. package/dist/src/generators/shared/provenance.d.ts +2 -0
  36. package/dist/src/generators/shared/provenance.js +85 -0
  37. package/dist/src/generators/shared/provenance.js.map +1 -0
  38. package/dist/src/generators/shared/scaffold-helpers.d.ts +72 -0
  39. package/dist/src/generators/shared/scaffold-helpers.js +309 -0
  40. package/dist/src/generators/shared/scaffold-helpers.js.map +1 -0
  41. package/dist/src/generators/system-test-runner/generator.d.ts +23 -0
  42. package/dist/src/generators/system-test-runner/generator.js +125 -0
  43. package/dist/src/generators/system-test-runner/generator.js.map +1 -0
  44. package/dist/src/generators/workspace-dev-cli/generator.d.ts +7 -0
  45. package/dist/src/generators/workspace-dev-cli/generator.js +138 -0
  46. package/dist/src/generators/workspace-dev-cli/generator.js.map +1 -0
  47. package/generators.json +57 -0
  48. package/lib/repo-map/grammars/tree-sitter-c.wasm +0 -0
  49. package/lib/repo-map/grammars/tree-sitter-cpp.wasm +0 -0
  50. package/lib/repo-map/grammars/tree-sitter-csharp.wasm +0 -0
  51. package/lib/repo-map/grammars/tree-sitter-dart.wasm +0 -0
  52. package/lib/repo-map/grammars/tree-sitter-go.wasm +0 -0
  53. package/lib/repo-map/grammars/tree-sitter-java.wasm +0 -0
  54. package/lib/repo-map/grammars/tree-sitter-javascript.wasm +0 -0
  55. package/lib/repo-map/grammars/tree-sitter-kotlin.wasm +0 -0
  56. package/lib/repo-map/grammars/tree-sitter-lua.wasm +0 -0
  57. package/lib/repo-map/grammars/tree-sitter-php.wasm +0 -0
  58. package/lib/repo-map/grammars/tree-sitter-python.wasm +0 -0
  59. package/lib/repo-map/grammars/tree-sitter-ruby.wasm +0 -0
  60. package/lib/repo-map/grammars/tree-sitter-rust.wasm +0 -0
  61. package/lib/repo-map/grammars/tree-sitter-scala.wasm +0 -0
  62. package/lib/repo-map/grammars/tree-sitter-swift.wasm +0 -0
  63. package/lib/repo-map/grammars/tree-sitter-tsx.wasm +0 -0
  64. package/lib/repo-map/grammars/tree-sitter-typescript.wasm +0 -0
  65. package/lib/repo-map/index.js +386 -0
  66. package/lib/repo-map/languages.js +514 -0
  67. package/lib/repo-map/pagerank.js +59 -0
  68. package/migrations/README.md +60 -0
  69. package/migrations/_template/cli-migration.js +27 -0
  70. package/migrations/gw-bet-prose-redesign.js +105 -0
  71. package/migrations/gw-drop-test-manifest.js +37 -0
  72. package/migrations/gw-register-serena-mcp.js +42 -0
  73. package/migrations/gw-relocate-hidden-skills.js +40 -0
  74. package/migrations/gw-seed-config-toml.js +24 -0
  75. package/migrations/index.json +40 -0
  76. package/package.json +70 -6
  77. package/src/AGENTS.md +36 -0
  78. package/src/config/config.toml +30 -0
  79. package/src/config/groundwork-state.json +5 -0
  80. package/src/docs/llms.txt +72 -0
  81. package/src/docs/principles/ai-native/agent-native-systems.md +90 -0
  82. package/src/docs/principles/ai-native/agentic-systems.md +78 -0
  83. package/src/docs/principles/ai-native/ai-engineering.md +100 -0
  84. package/src/docs/principles/ai-native/ai-native-product.md +76 -0
  85. package/src/docs/principles/delivery/cost-engineering.md +89 -0
  86. package/src/docs/principles/delivery/day-2-operational-baseline.md +57 -0
  87. package/src/docs/principles/delivery/devex.md +88 -0
  88. package/src/docs/principles/delivery/platform.md +101 -0
  89. package/src/docs/principles/delivery/progressive-delivery.md +92 -0
  90. package/src/docs/principles/design/ai-native-design.md +73 -0
  91. package/src/docs/principles/design/design-foundations.md +80 -0
  92. package/src/docs/principles/design/design-systems-and-tokens.md +72 -0
  93. package/src/docs/principles/design/interaction-and-motion.md +69 -0
  94. package/src/docs/principles/design/layout-and-space.md +72 -0
  95. package/src/docs/principles/design/usability-and-ux.md +68 -0
  96. package/src/docs/principles/design/visual-design.md +84 -0
  97. package/src/docs/principles/foundations/code-craft.md +86 -0
  98. package/src/docs/principles/foundations/continuous-discovery.md +75 -0
  99. package/src/docs/principles/foundations/documentation.md +102 -0
  100. package/src/docs/principles/foundations/prioritization-and-appetite.md +78 -0
  101. package/src/docs/principles/foundations/product-engineering.md +90 -0
  102. package/src/docs/principles/foundations/product-risks.md +89 -0
  103. package/src/docs/principles/foundations/requirements-and-specs.md +80 -0
  104. package/src/docs/principles/foundations/success-metrics.md +66 -0
  105. package/src/docs/principles/foundations/testing.md +82 -0
  106. package/src/docs/principles/index.md +23 -0
  107. package/src/docs/principles/quality/accessibility.md +88 -0
  108. package/src/docs/principles/quality/observability.md +84 -0
  109. package/src/docs/principles/quality/performance.md +84 -0
  110. package/src/docs/principles/quality/privacy.md +92 -0
  111. package/src/docs/principles/quality/reliability.md +89 -0
  112. package/src/docs/principles/quality/security.md +78 -0
  113. package/src/docs/principles/stack/postgres.md +100 -0
  114. package/src/docs/principles/system-design/api-design.md +86 -0
  115. package/src/docs/principles/system-design/architecture-decisions.md +81 -0
  116. package/src/docs/principles/system-design/code-structure.md +104 -0
  117. package/src/docs/principles/system-design/data-engineering.md +87 -0
  118. package/src/docs/principles/system-design/durable-execution.md +89 -0
  119. package/src/docs/principles/system-design/evolutionary-architecture.md +81 -0
  120. package/src/docs/principles/system-design/identity-and-access.md +76 -0
  121. package/src/docs/principles/system-design/integration-patterns.md +84 -0
  122. package/src/docs/principles/system-design/real-time.md +83 -0
  123. package/src/docs/principles/system-design/surface-architecture.md +74 -0
  124. package/src/docs/ways-of-working/documentation.md +69 -0
  125. package/src/docs/ways-of-working/how-we-work.md +76 -0
  126. package/src/docs/ways-of-working/units-of-work.md +40 -0
  127. package/src/engineer-skills/groundwork-electron-engineer/SKILL.md +118 -0
  128. package/src/engineer-skills/groundwork-electron-engineer/references/ipc-contracts.md +138 -0
  129. package/src/engineer-skills/groundwork-electron-engineer/references/packaging-and-updates.md +82 -0
  130. package/src/engineer-skills/groundwork-electron-engineer/references/process-model.md +94 -0
  131. package/src/engineer-skills/groundwork-electron-engineer/references/security.md +107 -0
  132. package/src/engineer-skills/groundwork-electron-engineer/references/testing-and-smoke.md +107 -0
  133. package/src/engineer-skills/groundwork-electron-engineer/references/theming-and-tokens.md +74 -0
  134. package/src/engineer-skills/groundwork-electron-engineer/sync-anchor.md +14 -0
  135. package/src/engineer-skills/groundwork-flutter-engineer/SKILL.md +108 -0
  136. package/src/engineer-skills/groundwork-flutter-engineer/references/accessibility.md +92 -0
  137. package/src/engineer-skills/groundwork-flutter-engineer/references/architecture.md +189 -0
  138. package/src/engineer-skills/groundwork-flutter-engineer/references/data-and-contracts.md +136 -0
  139. package/src/engineer-skills/groundwork-flutter-engineer/references/navigation.md +122 -0
  140. package/src/engineer-skills/groundwork-flutter-engineer/references/platform-channels.md +93 -0
  141. package/src/engineer-skills/groundwork-flutter-engineer/references/releases-and-distribution.md +84 -0
  142. package/src/engineer-skills/groundwork-flutter-engineer/references/state-management.md +166 -0
  143. package/src/engineer-skills/groundwork-flutter-engineer/references/testing.md +135 -0
  144. package/src/engineer-skills/groundwork-flutter-engineer/references/theming-and-design-tokens.md +109 -0
  145. package/src/engineer-skills/groundwork-flutter-engineer/references/widgets-and-composition.md +123 -0
  146. package/src/engineer-skills/groundwork-flutter-engineer/sync-anchor.md +15 -0
  147. package/src/engineer-skills/groundwork-go-engineer/SKILL.md +171 -0
  148. package/src/engineer-skills/groundwork-go-engineer/references/api-design.md +82 -0
  149. package/src/engineer-skills/groundwork-go-engineer/references/architecture.md +42 -0
  150. package/src/engineer-skills/groundwork-go-engineer/references/capability-ports.md +50 -0
  151. package/src/engineer-skills/groundwork-go-engineer/references/code-craft-security.md +34 -0
  152. package/src/engineer-skills/groundwork-go-engineer/references/concurrency.md +108 -0
  153. package/src/engineer-skills/groundwork-go-engineer/references/go-services.md +77 -0
  154. package/src/engineer-skills/groundwork-go-engineer/references/http-handlers.md +172 -0
  155. package/src/engineer-skills/groundwork-go-engineer/references/implementation-patterns.md +156 -0
  156. package/src/engineer-skills/groundwork-go-engineer/references/integration-realtime-data.md +57 -0
  157. package/src/engineer-skills/groundwork-go-engineer/references/observability.md +49 -0
  158. package/src/engineer-skills/groundwork-go-engineer/references/postgres.md +41 -0
  159. package/src/engineer-skills/groundwork-go-engineer/references/reliability-performance.md +105 -0
  160. package/src/engineer-skills/groundwork-go-engineer/references/testing.md +139 -0
  161. package/src/engineer-skills/groundwork-go-engineer/sync-anchor.md +11 -0
  162. package/src/engineer-skills/groundwork-nextjs-engineer/SKILL.md +107 -0
  163. package/src/engineer-skills/groundwork-nextjs-engineer/references/architecture.md +323 -0
  164. package/src/engineer-skills/groundwork-nextjs-engineer/references/data-fetching.md +458 -0
  165. package/src/engineer-skills/groundwork-nextjs-engineer/references/documentation.md +324 -0
  166. package/src/engineer-skills/groundwork-nextjs-engineer/references/error-boundaries.md +383 -0
  167. package/src/engineer-skills/groundwork-nextjs-engineer/references/mutations-and-forms.md +396 -0
  168. package/src/engineer-skills/groundwork-nextjs-engineer/references/performance-and-deployment.md +947 -0
  169. package/src/engineer-skills/groundwork-nextjs-engineer/references/routing-and-navigation.md +405 -0
  170. package/src/engineer-skills/groundwork-nextjs-engineer/references/server-components.md +394 -0
  171. package/src/engineer-skills/groundwork-nextjs-engineer/references/tailwind-and-styling.md +134 -0
  172. package/src/engineer-skills/groundwork-nextjs-engineer/references/testing.md +433 -0
  173. package/src/engineer-skills/groundwork-nextjs-engineer/references/type-system.md +368 -0
  174. package/src/engineer-skills/groundwork-nextjs-engineer/references/ux-principles.md +278 -0
  175. package/src/engineer-skills/groundwork-nextjs-engineer/references/visual-language.md +69 -0
  176. package/src/engineer-skills/groundwork-nextjs-engineer/sync-anchor.md +9 -0
  177. package/src/engineer-skills/groundwork-python-engineer/SKILL.md +196 -0
  178. package/src/engineer-skills/groundwork-python-engineer/references/api-standards.md +88 -0
  179. package/src/engineer-skills/groundwork-python-engineer/references/architecture.md +57 -0
  180. package/src/engineer-skills/groundwork-python-engineer/references/async-patterns.md +103 -0
  181. package/src/engineer-skills/groundwork-python-engineer/references/capability-ports.md +44 -0
  182. package/src/engineer-skills/groundwork-python-engineer/references/database.md +88 -0
  183. package/src/engineer-skills/groundwork-python-engineer/references/documentation-mcp.md +167 -0
  184. package/src/engineer-skills/groundwork-python-engineer/references/implementation-patterns.md +166 -0
  185. package/src/engineer-skills/groundwork-python-engineer/references/ml-pipelines.md +119 -0
  186. package/src/engineer-skills/groundwork-python-engineer/references/ml-systems-ai-engineering.md +74 -0
  187. package/src/engineer-skills/groundwork-python-engineer/references/observability.md +57 -0
  188. package/src/engineer-skills/groundwork-python-engineer/references/resilience.md +126 -0
  189. package/src/engineer-skills/groundwork-python-engineer/references/testing.md +177 -0
  190. package/src/engineer-skills/groundwork-python-engineer/sync-anchor.md +13 -0
  191. package/src/generators/add-capability/generator.ts +70 -0
  192. package/src/generators/add-capability/schema.json +30 -0
  193. package/src/generators/capabilities/llm/capability.json +28 -0
  194. package/src/generators/capabilities/llm/providers/anthropic/footprint.json +13 -0
  195. package/src/generators/capabilities/llm/providers/anthropic/stacks/go/internal/llm/llm.go.template +102 -0
  196. package/src/generators/capabilities/llm/providers/anthropic/stacks/python/src/__packageName__/adapters/llm.py.template +61 -0
  197. package/src/generators/capabilities/llm/providers/local/footprint.json +13 -0
  198. package/src/generators/capabilities/llm/providers/local/stacks/go/internal/llm/llm.go.template +102 -0
  199. package/src/generators/capabilities/llm/providers/local/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  200. package/src/generators/capabilities/llm/providers/localai/footprint.json +29 -0
  201. package/src/generators/capabilities/llm/providers/localai/stacks/go/internal/llm/llm.go.template +102 -0
  202. package/src/generators/capabilities/llm/providers/localai/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  203. package/src/generators/capabilities/llm/providers/none/footprint.json +9 -0
  204. package/src/generators/capabilities/llm/providers/none/stacks/go/internal/llm/llm.go.template +35 -0
  205. package/src/generators/capabilities/llm/providers/none/stacks/python/src/__packageName__/adapters/llm.py.template +25 -0
  206. package/src/generators/capabilities/llm/providers/ollama/footprint.json +20 -0
  207. package/src/generators/capabilities/llm/providers/ollama/stacks/go/internal/llm/llm.go.template +102 -0
  208. package/src/generators/capabilities/llm/providers/ollama/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
  209. package/src/generators/capabilities/llm/providers/openai/footprint.json +13 -0
  210. package/src/generators/capabilities/llm/providers/openai/stacks/go/internal/llm/llm.go.template +98 -0
  211. package/src/generators/capabilities/llm/providers/openai/stacks/python/src/__packageName__/adapters/llm.py.template +60 -0
  212. package/src/generators/capabilities/llm/stacks/go/internal/core/service/llm.go.template +12 -0
  213. package/src/generators/capabilities/llm/stacks/go/internal/llm/llm_test.go.template +33 -0
  214. package/src/generators/capabilities/llm/stacks/python/src/__packageName__/core/llm.py.template +15 -0
  215. package/src/generators/capabilities/llm/stacks/python/tests/contracts/test_llm.py.template +37 -0
  216. package/src/generators/cli-app/files/README.md.template +76 -0
  217. package/src/generators/cli-app/files/build.mjs.template +15 -0
  218. package/src/generators/cli-app/files/package.json.template +21 -0
  219. package/src/generators/cli-app/files/src/cli.ts.template +67 -0
  220. package/src/generators/cli-app/files/src/commands/hello.ts.template +17 -0
  221. package/src/generators/cli-app/files/src/commands/status.ts.template +23 -0
  222. package/src/generators/cli-app/files/src/core/client.test.ts.template +80 -0
  223. package/src/generators/cli-app/files/src/core/client.ts.template +64 -0
  224. package/src/generators/cli-app/files/src/registry.test.ts.template +35 -0
  225. package/src/generators/cli-app/files/src/registry.ts.template +31 -0
  226. package/src/generators/cli-app/files/tsconfig.json.template +16 -0
  227. package/src/generators/cli-app/files/tsconfig.test.json.template +11 -0
  228. package/src/generators/cli-app/generator.ts +138 -0
  229. package/src/generators/cli-app/schema.json +24 -0
  230. package/src/generators/docs-site/files/.gitignore.ejs +40 -0
  231. package/src/generators/docs-site/files/app/docs/__slug__/page.tsx +101 -0
  232. package/src/generators/docs-site/files/app/docs/layout.tsx +14 -0
  233. package/src/generators/docs-site/files/app/docs.css +43 -0
  234. package/src/generators/docs-site/files/app/layout.tsx +24 -0
  235. package/src/generators/docs-site/files/app/page.tsx +135 -0
  236. package/src/generators/docs-site/files/app/source.ts +8 -0
  237. package/src/generators/docs-site/files/components/mermaid.tsx +67 -0
  238. package/src/generators/docs-site/files/next.config.mjs +10 -0
  239. package/src/generators/docs-site/files/package.json +32 -0
  240. package/src/generators/docs-site/files/pnpm-workspace.yaml +7 -0
  241. package/src/generators/docs-site/files/postcss.config.mjs +6 -0
  242. package/src/generators/docs-site/files/source.config.ts +77 -0
  243. package/src/generators/docs-site/files/tailwind.config.js +10 -0
  244. package/src/generators/docs-site/files/tsconfig.json +27 -0
  245. package/src/generators/docs-site/generator.ts +476 -0
  246. package/src/generators/docs-site/schema.json +17 -0
  247. package/src/generators/electron-app/docs/principles/stack/electron/index.md +47 -0
  248. package/src/generators/electron-app/docs/principles/stack/electron/ipc-contracts.md +71 -0
  249. package/src/generators/electron-app/docs/principles/stack/electron/packaging-and-updates.md +59 -0
  250. package/src/generators/electron-app/docs/principles/stack/electron/process-model.md +53 -0
  251. package/src/generators/electron-app/docs/principles/stack/electron/security.md +70 -0
  252. package/src/generators/electron-app/docs/principles/stack/typescript/frontend.md +65 -0
  253. package/src/generators/electron-app/files/.gitignore.template +20 -0
  254. package/src/generators/electron-app/files/README.md.template +125 -0
  255. package/src/generators/electron-app/files/electron.vite.config.ts +31 -0
  256. package/src/generators/electron-app/files/eslint.config.mjs +92 -0
  257. package/src/generators/electron-app/files/forge.config.ts.template +44 -0
  258. package/src/generators/electron-app/files/package.json.template +54 -0
  259. package/src/generators/electron-app/files/playwright.config.ts +18 -0
  260. package/src/generators/electron-app/files/project.json.template +65 -0
  261. package/src/generators/electron-app/files/src/main/core-client.test.ts +81 -0
  262. package/src/generators/electron-app/files/src/main/core-client.ts +55 -0
  263. package/src/generators/electron-app/files/src/main/index.ts +157 -0
  264. package/src/generators/electron-app/files/src/main/ipc.ts +52 -0
  265. package/src/generators/electron-app/files/src/main/policy.test.ts +71 -0
  266. package/src/generators/electron-app/files/src/main/policy.ts +73 -0
  267. package/src/generators/electron-app/files/src/preload/index.ts +23 -0
  268. package/src/generators/electron-app/files/src/renderer/index.html.template +20 -0
  269. package/src/generators/electron-app/files/src/renderer/src/App.test.tsx +61 -0
  270. package/src/generators/electron-app/files/src/renderer/src/App.tsx.template +43 -0
  271. package/src/generators/electron-app/files/src/renderer/src/assets/main.css +40 -0
  272. package/src/generators/electron-app/files/src/renderer/src/env.d.ts +14 -0
  273. package/src/generators/electron-app/files/src/renderer/src/main.tsx +25 -0
  274. package/src/generators/electron-app/files/src/shared/ipc.ts +54 -0
  275. package/src/generators/electron-app/files/tests/smoke/app.spec.ts.template +68 -0
  276. package/src/generators/electron-app/files/tool/electron_exec.sh.template +83 -0
  277. package/src/generators/electron-app/files/tsconfig.json +7 -0
  278. package/src/generators/electron-app/files/tsconfig.node.json +27 -0
  279. package/src/generators/electron-app/files/tsconfig.web.json +22 -0
  280. package/src/generators/electron-app/files/vitest.config.ts +32 -0
  281. package/src/generators/electron-app/files/vitest.setup.ts +1 -0
  282. package/src/generators/electron-app/generator.ts +288 -0
  283. package/src/generators/electron-app/schema.json +23 -0
  284. package/src/generators/flutter-app/docs/principles/stack/flutter/architecture.md +78 -0
  285. package/src/generators/flutter-app/docs/principles/stack/flutter/index.md +38 -0
  286. package/src/generators/flutter-app/docs/principles/stack/flutter/platform-channels.md +51 -0
  287. package/src/generators/flutter-app/docs/principles/stack/flutter/releases-and-distribution.md +59 -0
  288. package/src/generators/flutter-app/docs/principles/stack/flutter/state-management.md +85 -0
  289. package/src/generators/flutter-app/docs/principles/stack/flutter/testing.md +74 -0
  290. package/src/generators/flutter-app/docs/principles/stack/flutter/widgets-and-composition.md +69 -0
  291. package/src/generators/flutter-app/files/.gitignore.template +30 -0
  292. package/src/generators/flutter-app/files/README.md.template +100 -0
  293. package/src/generators/flutter-app/files/analysis_options.yaml.template +18 -0
  294. package/src/generators/flutter-app/files/integration_test/app_test.dart.template +30 -0
  295. package/src/generators/flutter-app/files/lib/app.dart.template +24 -0
  296. package/src/generators/flutter-app/files/lib/config/app_config.dart +15 -0
  297. package/src/generators/flutter-app/files/lib/data/repositories/status_repository.dart +36 -0
  298. package/src/generators/flutter-app/files/lib/data/services/api_client.dart +71 -0
  299. package/src/generators/flutter-app/files/lib/domain/models/health_status.dart +23 -0
  300. package/src/generators/flutter-app/files/lib/main.dart +11 -0
  301. package/src/generators/flutter-app/files/lib/router.dart +23 -0
  302. package/src/generators/flutter-app/files/lib/ui/core/theme/app_theme.dart +110 -0
  303. package/src/generators/flutter-app/files/lib/ui/home/home_view.dart +89 -0
  304. package/src/generators/flutter-app/files/lib/ui/home/home_view_model.dart.template +38 -0
  305. package/src/generators/flutter-app/files/project.json.template +51 -0
  306. package/src/generators/flutter-app/files/pubspec.yaml.template +47 -0
  307. package/src/generators/flutter-app/files/test/api_client_test.dart.template +63 -0
  308. package/src/generators/flutter-app/files/test/fakes/fake_status_repository.dart.template +19 -0
  309. package/src/generators/flutter-app/files/test/home_view_test.dart.template +58 -0
  310. package/src/generators/flutter-app/files/tool/flutter_exec.sh.template +60 -0
  311. package/src/generators/flutter-app/generator.ts +362 -0
  312. package/src/generators/flutter-app/schema.json +23 -0
  313. package/src/generators/go-microservice/docs/principles/stack/go/concurrency.md +123 -0
  314. package/src/generators/go-microservice/docs/principles/stack/go/index.md +70 -0
  315. package/src/generators/go-microservice/docs/principles/stack/go/testing.md +152 -0
  316. package/src/generators/go-microservice/files/.air.toml.template +38 -0
  317. package/src/generators/go-microservice/files/.env.template +4 -0
  318. package/src/generators/go-microservice/files/.golangci.yml.template +82 -0
  319. package/src/generators/go-microservice/files/Dockerfile.dev.template +12 -0
  320. package/src/generators/go-microservice/files/asyncapi-pubsub.yaml.template +33 -0
  321. package/src/generators/go-microservice/files/asyncapi-ws.yaml.template +34 -0
  322. package/src/generators/go-microservice/files/cmd/api/main.go.template +149 -0
  323. package/src/generators/go-microservice/files/cmd/api/main_test.go.template +99 -0
  324. package/src/generators/go-microservice/files/cmd/worker/cleanup/main.go.template +39 -0
  325. package/src/generators/go-microservice/files/db/schema.sql.template +24 -0
  326. package/src/generators/go-microservice/files/go.mod.template +39 -0
  327. package/src/generators/go-microservice/files/internal/config/config.go.template +52 -0
  328. package/src/generators/go-microservice/files/internal/config/otel.go.template +93 -0
  329. package/src/generators/go-microservice/files/internal/core/domain/errors.go.template +16 -0
  330. package/src/generators/go-microservice/files/internal/core/domain/model.go.template +28 -0
  331. package/src/generators/go-microservice/files/internal/core/domain/user.go.template +13 -0
  332. package/src/generators/go-microservice/files/internal/core/pagination.go.template +16 -0
  333. package/src/generators/go-microservice/files/internal/core/service/app_service.go.template +79 -0
  334. package/src/generators/go-microservice/files/internal/core/service/event_hub.go.template +9 -0
  335. package/src/generators/go-microservice/files/internal/core/service/message_queue.go.template +10 -0
  336. package/src/generators/go-microservice/files/internal/core/service/outbox_repository.go.template +31 -0
  337. package/src/generators/go-microservice/files/internal/core/service/repository.go.template +23 -0
  338. package/src/generators/go-microservice/files/internal/core/service/user_repository.go.template +15 -0
  339. package/src/generators/go-microservice/files/internal/core/service/user_service.go.template +43 -0
  340. package/src/generators/go-microservice/files/internal/entrypoints/api/app_handler.go.template +108 -0
  341. package/src/generators/go-microservice/files/internal/entrypoints/api/auth_middleware_test.go.template +52 -0
  342. package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook.go.template +202 -0
  343. package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook_test.go.template +82 -0
  344. package/src/generators/go-microservice/files/internal/entrypoints/api/health_handler.go.template +80 -0
  345. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware.go.template +87 -0
  346. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware_test.go.template +76 -0
  347. package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/repository.go.template +37 -0
  348. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_auth.go.template +40 -0
  349. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_loadshed.go.template +38 -0
  350. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_logging.go.template +40 -0
  351. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_ratelimit.go.template +48 -0
  352. package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_test.go.template +81 -0
  353. package/src/generators/go-microservice/files/internal/entrypoints/api/router.go.template +105 -0
  354. package/src/generators/go-microservice/files/internal/entrypoints/api/types.go.template +70 -0
  355. package/src/generators/go-microservice/files/internal/entrypoints/api/websocket_handler.go.template +39 -0
  356. package/src/generators/go-microservice/files/internal/httpclient/http_client.go.template +87 -0
  357. package/src/generators/go-microservice/files/internal/kafka/kafka.go.template +34 -0
  358. package/src/generators/go-microservice/files/internal/postgres/postgres.go.template +195 -0
  359. package/src/generators/go-microservice/files/internal/postgres/postgres_test.go.template +156 -0
  360. package/src/generators/go-microservice/files/internal/postgres/user_repository.go.template +56 -0
  361. package/src/generators/go-microservice/files/internal/pubsub/gcp_pubsub.go.template +35 -0
  362. package/src/generators/go-microservice/files/internal/websocket/client.go.template +151 -0
  363. package/src/generators/go-microservice/files/internal/websocket/hub.go.template +261 -0
  364. package/src/generators/go-microservice/files/scripts/apply-schema.sh.template +21 -0
  365. package/src/generators/go-microservice/files/tools/tools.go.template +10 -0
  366. package/src/generators/go-microservice/generator.ts +240 -0
  367. package/src/generators/go-microservice/schema.json +63 -0
  368. package/src/generators/nextjs-app/docs/principles/stack/typescript/frontend.md +65 -0
  369. package/src/generators/nextjs-app/files/.dockerignore.template +7 -0
  370. package/src/generators/nextjs-app/files/.env.example.template +24 -0
  371. package/src/generators/nextjs-app/files/.gitignore.template +5 -0
  372. package/src/generators/nextjs-app/files/Dockerfile +53 -0
  373. package/src/generators/nextjs-app/files/app/(auth)/sign-in/__sign-in__/page.tsx.template +9 -0
  374. package/src/generators/nextjs-app/files/app/(auth)/sign-up/__sign-up__/page.tsx.template +9 -0
  375. package/src/generators/nextjs-app/files/app/api/config/route.ts.template +39 -0
  376. package/src/generators/nextjs-app/files/app/api/healthz/route.test.ts +15 -0
  377. package/src/generators/nextjs-app/files/app/api/healthz/route.ts +5 -0
  378. package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.test.ts.template +55 -0
  379. package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.ts.template +126 -0
  380. package/src/generators/nextjs-app/files/app/error.tsx +39 -0
  381. package/src/generators/nextjs-app/files/app/global-error.tsx +68 -0
  382. package/src/generators/nextjs-app/files/app/globals.css +105 -0
  383. package/src/generators/nextjs-app/files/app/layout.tsx +59 -0
  384. package/src/generators/nextjs-app/files/app/loading.tsx +13 -0
  385. package/src/generators/nextjs-app/files/app/not-found.tsx +30 -0
  386. package/src/generators/nextjs-app/files/app/page.tsx +20 -0
  387. package/src/generators/nextjs-app/files/components/providers/default.tsx +19 -0
  388. package/src/generators/nextjs-app/files/components/providers/production.tsx +32 -0
  389. package/src/generators/nextjs-app/files/components/providers/telemetry.tsx +76 -0
  390. package/src/generators/nextjs-app/files/components/render-smoke.test.tsx +29 -0
  391. package/src/generators/nextjs-app/files/components/theme-provider.tsx +11 -0
  392. package/src/generators/nextjs-app/files/components.json +21 -0
  393. package/src/generators/nextjs-app/files/eslint.config.mjs +120 -0
  394. package/src/generators/nextjs-app/files/hooks/use-toast.ts +7 -0
  395. package/src/generators/nextjs-app/files/instrumentation.ts +90 -0
  396. package/src/generators/nextjs-app/files/lib/api/fetcher.ts.template +130 -0
  397. package/src/generators/nextjs-app/files/lib/config.ts +21 -0
  398. package/src/generators/nextjs-app/files/lib/logger.ts +29 -0
  399. package/src/generators/nextjs-app/files/lib/schemas/index.ts +19 -0
  400. package/src/generators/nextjs-app/files/lib/utils.ts +6 -0
  401. package/src/generators/nextjs-app/files/next.config.mjs +9 -0
  402. package/src/generators/nextjs-app/files/package.json +70 -0
  403. package/src/generators/nextjs-app/files/postcss.config.mjs +8 -0
  404. package/src/generators/nextjs-app/files/proxy.test.ts.template +30 -0
  405. package/src/generators/nextjs-app/files/proxy.ts +31 -0
  406. package/src/generators/nextjs-app/files/public/.gitkeep +1 -0
  407. package/src/generators/nextjs-app/files/tsconfig.json +42 -0
  408. package/src/generators/nextjs-app/files/vitest.config.mts +15 -0
  409. package/src/generators/nextjs-app/files/vitest.setup.ts +7 -0
  410. package/src/generators/nextjs-app/generator.ts +307 -0
  411. package/src/generators/nextjs-app/schema.json +44 -0
  412. package/src/generators/python-microservice/docs/principles/stack/python/async.md +168 -0
  413. package/src/generators/python-microservice/docs/principles/stack/python/documentation.md +240 -0
  414. package/src/generators/python-microservice/docs/principles/stack/python/mcp.md +147 -0
  415. package/src/generators/python-microservice/docs/principles/stack/python/resilience.md +193 -0
  416. package/src/generators/python-microservice/docs/principles/stack/python/testing.md +281 -0
  417. package/src/generators/python-microservice/files/.env.example.template +30 -0
  418. package/src/generators/python-microservice/files/Dockerfile.template +36 -0
  419. package/src/generators/python-microservice/files/db/schema.sql.template +19 -0
  420. package/src/generators/python-microservice/files/pyproject.toml.template +76 -0
  421. package/src/generators/python-microservice/files/scripts/apply-schema.sh.template +25 -0
  422. package/src/generators/python-microservice/files/src/__packageName__/adapters/comfyui.py.template +87 -0
  423. package/src/generators/python-microservice/files/src/__packageName__/adapters/config.py.template +48 -0
  424. package/src/generators/python-microservice/files/src/__packageName__/adapters/database.py.template +21 -0
  425. package/src/generators/python-microservice/files/src/__packageName__/adapters/message_queue.py.template +29 -0
  426. package/src/generators/python-microservice/files/src/__packageName__/adapters/repository.py.template +130 -0
  427. package/src/generators/python-microservice/files/src/__packageName__/adapters/telemetry.py.template +68 -0
  428. package/src/generators/python-microservice/files/src/__packageName__/adapters/websocket_hub.py.template +36 -0
  429. package/src/generators/python-microservice/files/src/__packageName__/core/domain/entities.py.template +22 -0
  430. package/src/generators/python-microservice/files/src/__packageName__/core/domain/exceptions.py.template +43 -0
  431. package/src/generators/python-microservice/files/src/__packageName__/core/ports.py.template +42 -0
  432. package/src/generators/python-microservice/files/src/__packageName__/core/service/example_service.py.template +68 -0
  433. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/dependencies.py.template +50 -0
  434. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/middleware.py.template +131 -0
  435. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/router.py.template +37 -0
  436. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/websocket_handler.py.template +20 -0
  437. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/cleanup.py.template +35 -0
  438. package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/worker.py.template +28 -0
  439. package/src/generators/python-microservice/files/src/__packageName__/main.py.template +108 -0
  440. package/src/generators/python-microservice/files/tests/test_main.py.template +74 -0
  441. package/src/generators/python-microservice/files/tests/test_middleware.py.template +109 -0
  442. package/src/generators/python-microservice/files/tests/test_worker.py.template +16 -0
  443. package/src/generators/python-microservice/generator.ts +286 -0
  444. package/src/generators/python-microservice/schema.json +86 -0
  445. package/src/generators/shared/brand-tokens.ts +301 -0
  446. package/src/generators/shared/capabilities.ts +349 -0
  447. package/src/generators/shared/provenance.ts +61 -0
  448. package/src/generators/shared/scaffold-helpers.ts +309 -0
  449. package/src/generators/system-test-runner/files/tests/bets/.gitkeep +0 -0
  450. package/src/generators/system-test-runner/files/tests/bets/_archive/.gitkeep +0 -0
  451. package/src/generators/system-test-runner/files/tests/conftest.py.template +503 -0
  452. package/src/generators/system-test-runner/files/tests/pyproject.toml.template +20 -0
  453. package/src/generators/system-test-runner/files/tests/system/pages/__init__.py.template +9 -0
  454. package/src/generators/system-test-runner/files/tests/system/pages/base_page.py.template +36 -0
  455. package/src/generators/system-test-runner/files/tests/system/test_a11y_smoke.py.template +132 -0
  456. package/src/generators/system-test-runner/files/tests/system/test_contract_conformance.py.template +140 -0
  457. package/src/generators/system-test-runner/files/tests/system/test_layout_geometry.py.template +109 -0
  458. package/src/generators/system-test-runner/files/tests/system/test_render_smoke.py.template +227 -0
  459. package/src/generators/system-test-runner/files/tests/system/test_system.py.template +158 -0
  460. package/src/generators/system-test-runner/files/tests/system/test_token_conformance.py.template +206 -0
  461. package/src/generators/system-test-runner/files/tests/system/test_visual_regression.py.template +104 -0
  462. package/src/generators/system-test-runner/generator.ts +142 -0
  463. package/src/generators/system-test-runner/schema.json +24 -0
  464. package/src/generators/workspace-dev-cli/cli-src/build.mjs +42 -0
  465. package/src/generators/workspace-dev-cli/cli-src/dist/dev-bundle.js +2168 -0
  466. package/src/generators/workspace-dev-cli/cli-src/src/commands/bet.ts +442 -0
  467. package/src/generators/workspace-dev-cli/cli-src/src/commands/completion.ts +87 -0
  468. package/src/generators/workspace-dev-cli/cli-src/src/commands/doctor.ts +139 -0
  469. package/src/generators/workspace-dev-cli/cli-src/src/commands/lifecycle.ts +548 -0
  470. package/src/generators/workspace-dev-cli/cli-src/src/commands/quality.ts +127 -0
  471. package/src/generators/workspace-dev-cli/cli-src/src/commands/surface.ts +214 -0
  472. package/src/generators/workspace-dev-cli/cli-src/src/index.ts +127 -0
  473. package/src/generators/workspace-dev-cli/cli-src/src/registry.ts +194 -0
  474. package/src/generators/workspace-dev-cli/cli-src/src/theme/color.ts +130 -0
  475. package/src/generators/workspace-dev-cli/cli-src/src/theme/render.ts +158 -0
  476. package/src/generators/workspace-dev-cli/cli-src/src/theme/tokens.ts +122 -0
  477. package/src/generators/workspace-dev-cli/cli-src/src/util/context.ts +43 -0
  478. package/src/generators/workspace-dev-cli/cli-src/src/util/extensions.ts +99 -0
  479. package/src/generators/workspace-dev-cli/cli-src/src/util/paths.ts +46 -0
  480. package/src/generators/workspace-dev-cli/cli-src/src/util/proc.ts +106 -0
  481. package/src/generators/workspace-dev-cli/cli-src/src/util/prompt.ts +108 -0
  482. package/src/generators/workspace-dev-cli/cli-src/src/util/runners.ts +70 -0
  483. package/src/generators/workspace-dev-cli/cli-src/src/util/services.ts +221 -0
  484. package/src/generators/workspace-dev-cli/cli-src/src/util/version.ts +21 -0
  485. package/src/generators/workspace-dev-cli/cli-src/tsconfig.json +16 -0
  486. package/src/generators/workspace-dev-cli/files/.agents/skills/workspace-cli/SKILL.md.template +74 -0
  487. package/src/generators/workspace-dev-cli/files/dev.template +16 -0
  488. package/src/generators/workspace-dev-cli/files/docker-compose.yml.template +20 -0
  489. package/src/generators/workspace-dev-cli/files/scripts/cli/templates/milestone-test.pytmpl.template +46 -0
  490. package/src/generators/workspace-dev-cli/files/scripts/cli/templates/slice-test.pytmpl.template +38 -0
  491. package/src/generators/workspace-dev-cli/generator.ts +136 -0
  492. package/src/generators/workspace-dev-cli/schema.json +22 -0
  493. package/src/hidden-skills/code-intelligence.md +129 -0
  494. package/src/hidden-skills/groundwork-architect/SKILL.md +114 -0
  495. package/src/hidden-skills/groundwork-architect/references/agentic-systems.md +44 -0
  496. package/src/hidden-skills/groundwork-architect/references/ai-native-architecture.md +37 -0
  497. package/src/hidden-skills/groundwork-architect/references/api-and-contracts.md +45 -0
  498. package/src/hidden-skills/groundwork-architect/references/core-and-boundaries.md +45 -0
  499. package/src/hidden-skills/groundwork-architect/references/data-architecture.md +33 -0
  500. package/src/hidden-skills/groundwork-architect/references/decision-records.md +34 -0
  501. package/src/hidden-skills/groundwork-architect/references/durable-execution.md +45 -0
  502. package/src/hidden-skills/groundwork-architect/references/evolutionary-architecture.md +37 -0
  503. package/src/hidden-skills/groundwork-architect/references/identity-and-access.md +41 -0
  504. package/src/hidden-skills/groundwork-architect/references/integration-patterns.md +39 -0
  505. package/src/hidden-skills/groundwork-architect/references/observability.md +36 -0
  506. package/src/hidden-skills/groundwork-architect/references/performance-and-scale.md +41 -0
  507. package/src/hidden-skills/groundwork-architect/references/platform-and-delivery.md +47 -0
  508. package/src/hidden-skills/groundwork-architect/references/realtime-and-async.md +28 -0
  509. package/src/hidden-skills/groundwork-architect/references/reliability.md +31 -0
  510. package/src/hidden-skills/groundwork-architect/references/security-and-trust.md +47 -0
  511. package/src/hidden-skills/groundwork-architect/references/surface-architecture.md +40 -0
  512. package/src/hidden-skills/groundwork-architect/sync-anchor.md +34 -0
  513. package/src/hidden-skills/groundwork-architecture/architecture-template.md +50 -0
  514. package/src/hidden-skills/groundwork-architecture/instructions.md +139 -0
  515. package/src/hidden-skills/groundwork-architecture/phases/01-context-ingestion.md +18 -0
  516. package/src/hidden-skills/groundwork-architecture/phases/02-technical-constraints.md +27 -0
  517. package/src/hidden-skills/groundwork-architecture/phases/03-service-design.md +19 -0
  518. package/src/hidden-skills/groundwork-architecture/phases/04-data-flow-communication.md +23 -0
  519. package/src/hidden-skills/groundwork-architecture/phases/05-component-boundaries-contracts.md +17 -0
  520. package/src/hidden-skills/groundwork-architecture/phases/06-draft-review-present.md +38 -0
  521. package/src/hidden-skills/groundwork-architecture/phases/07-commit.md +33 -0
  522. package/src/hidden-skills/groundwork-architecture/templates/architecture-cache.md +43 -0
  523. package/src/hidden-skills/groundwork-architecture-extract/instructions.md +163 -0
  524. package/src/hidden-skills/groundwork-architecture-extract/templates/architecture-extract-cache.md +21 -0
  525. package/src/hidden-skills/groundwork-bet/briefs/slice-worker.md +191 -0
  526. package/src/hidden-skills/groundwork-bet/instructions.md +88 -0
  527. package/src/hidden-skills/groundwork-bet/templates/bet-progress-test.md +126 -0
  528. package/src/hidden-skills/groundwork-bet/templates/change-proposal.md +38 -0
  529. package/src/hidden-skills/groundwork-bet/templates/decomposition/meta.json +4 -0
  530. package/src/hidden-skills/groundwork-bet/templates/decomposition/milestone-index.md +35 -0
  531. package/src/hidden-skills/groundwork-bet/templates/decomposition/slice.md +35 -0
  532. package/src/hidden-skills/groundwork-bet/templates/pitch.md +45 -0
  533. package/src/hidden-skills/groundwork-bet/templates/technical-design/01-ui-design.md +51 -0
  534. package/src/hidden-skills/groundwork-bet/templates/technical-design/02-data-flows.md +36 -0
  535. package/src/hidden-skills/groundwork-bet/templates/technical-design/03-api-design.md +90 -0
  536. package/src/hidden-skills/groundwork-bet/templates/technical-design/04-data-design.md +29 -0
  537. package/src/hidden-skills/groundwork-bet/workflows/01-discovery.md +198 -0
  538. package/src/hidden-skills/groundwork-bet/workflows/02-design.md +168 -0
  539. package/src/hidden-skills/groundwork-bet/workflows/03-decomposition.md +246 -0
  540. package/src/hidden-skills/groundwork-bet/workflows/04-delivery.md +193 -0
  541. package/src/hidden-skills/groundwork-bet/workflows/05-validation.md +199 -0
  542. package/src/hidden-skills/groundwork-design-system/instructions.md +125 -0
  543. package/src/hidden-skills/groundwork-design-system/templates/brand-tokens.md +182 -0
  544. package/src/hidden-skills/groundwork-design-system/templates/design-system-cache.md +64 -0
  545. package/src/hidden-skills/groundwork-design-system/tracks/_foundation.md +136 -0
  546. package/src/hidden-skills/groundwork-design-system/tracks/agentic-protocol.md +269 -0
  547. package/src/hidden-skills/groundwork-design-system/tracks/cli.md +355 -0
  548. package/src/hidden-skills/groundwork-design-system/tracks/graphical-ui.md +330 -0
  549. package/src/hidden-skills/groundwork-design-system-extract/instructions.md +124 -0
  550. package/src/hidden-skills/groundwork-design-system-extract/templates/design-system-extract-cache.md +19 -0
  551. package/src/hidden-skills/groundwork-designer/SKILL.md +108 -0
  552. package/src/hidden-skills/groundwork-designer/references/accessibility.md +33 -0
  553. package/src/hidden-skills/groundwork-designer/references/ai-native-design.md +37 -0
  554. package/src/hidden-skills/groundwork-designer/references/design-review.md +29 -0
  555. package/src/hidden-skills/groundwork-designer/references/design-systems-and-tokens.md +33 -0
  556. package/src/hidden-skills/groundwork-designer/references/interaction-and-motion.md +37 -0
  557. package/src/hidden-skills/groundwork-designer/references/layout-and-space.md +33 -0
  558. package/src/hidden-skills/groundwork-designer/references/usability-and-ux.md +33 -0
  559. package/src/hidden-skills/groundwork-designer/references/visual-craft.md +49 -0
  560. package/src/hidden-skills/groundwork-designer/sync-anchor.md +20 -0
  561. package/src/hidden-skills/groundwork-doc-sync/instructions.md +100 -0
  562. package/src/hidden-skills/groundwork-elicit/instructions.md +66 -0
  563. package/src/hidden-skills/groundwork-elicit/methods.md +65 -0
  564. package/src/hidden-skills/groundwork-infra-adopt/instructions.md +168 -0
  565. package/src/hidden-skills/groundwork-infra-adopt/templates/infra-adopt-cache.md +21 -0
  566. package/src/hidden-skills/groundwork-mvp/instructions.md +223 -0
  567. package/src/hidden-skills/groundwork-mvp/templates/mvp-cache.md +9 -0
  568. package/src/hidden-skills/groundwork-patch/instructions.md +40 -0
  569. package/src/hidden-skills/groundwork-persona/instructions.md +54 -0
  570. package/src/hidden-skills/groundwork-product/SKILL.md +102 -0
  571. package/src/hidden-skills/groundwork-product/references/ai-native-product.md +45 -0
  572. package/src/hidden-skills/groundwork-product/references/discovery-and-opportunity.md +38 -0
  573. package/src/hidden-skills/groundwork-product/references/product-risks.md +52 -0
  574. package/src/hidden-skills/groundwork-product/references/requirements-and-specs.md +39 -0
  575. package/src/hidden-skills/groundwork-product/references/scope-and-sequencing.md +35 -0
  576. package/src/hidden-skills/groundwork-product/references/shaping-and-appetite.md +48 -0
  577. package/src/hidden-skills/groundwork-product/references/success-metrics-and-signals.md +37 -0
  578. package/src/hidden-skills/groundwork-product/sync-anchor.md +19 -0
  579. package/src/hidden-skills/groundwork-product-brief/instructions.md +231 -0
  580. package/src/hidden-skills/groundwork-product-brief-extract/instructions.md +139 -0
  581. package/src/hidden-skills/groundwork-product-brief-extract/templates/product-brief-extract-cache.md +17 -0
  582. package/src/hidden-skills/groundwork-review/checklists/architecture.md +93 -0
  583. package/src/hidden-skills/groundwork-review/checklists/bet-pitch.md +94 -0
  584. package/src/hidden-skills/groundwork-review/checklists/decomposition.md +135 -0
  585. package/src/hidden-skills/groundwork-review/checklists/design-system.md +85 -0
  586. package/src/hidden-skills/groundwork-review/checklists/domain-entity.md +66 -0
  587. package/src/hidden-skills/groundwork-review/checklists/implementation-readiness.md +46 -0
  588. package/src/hidden-skills/groundwork-review/checklists/infrastructure.md +68 -0
  589. package/src/hidden-skills/groundwork-review/checklists/maturity.md +71 -0
  590. package/src/hidden-skills/groundwork-review/checklists/product-brief.md +69 -0
  591. package/src/hidden-skills/groundwork-review/checklists/technical-design.md +112 -0
  592. package/src/hidden-skills/groundwork-review/instructions.md +181 -0
  593. package/src/hidden-skills/groundwork-scaffold/instructions.md +254 -0
  594. package/src/hidden-skills/groundwork-scaffold/phases/01-ingestion-service-mapping.md +87 -0
  595. package/src/hidden-skills/groundwork-scaffold/phases/02-scaffolding-execution.md +15 -0
  596. package/src/hidden-skills/groundwork-scaffold/phases/03-service-documentation-api-stubs.md +100 -0
  597. package/src/hidden-skills/groundwork-scaffold/phases/04-infrastructure-verification.md +17 -0
  598. package/src/hidden-skills/groundwork-scaffold/phases/05-draft-review.md +19 -0
  599. package/src/hidden-skills/groundwork-scaffold/phases/06-commit.md +19 -0
  600. package/src/hidden-skills/groundwork-scaffold/templates/scaffold-cache.md +23 -0
  601. package/src/hidden-skills/groundwork-scan/instructions.md +164 -0
  602. package/src/hidden-skills/groundwork-scan/references/digest-schema.md +66 -0
  603. package/src/hidden-skills/groundwork-scan/references/exclusions.md +44 -0
  604. package/src/hidden-skills/groundwork-scan/templates/architecture-findings.md +42 -0
  605. package/src/hidden-skills/groundwork-scan/templates/design-findings.md +23 -0
  606. package/src/hidden-skills/groundwork-scan/templates/overview.md +26 -0
  607. package/src/hidden-skills/groundwork-scan/templates/product-findings.md +23 -0
  608. package/src/hidden-skills/groundwork-scan/templates/scan-state.json +19 -0
  609. package/src/hidden-skills/groundwork-stack-forge/instructions.md +150 -0
  610. package/src/hidden-skills/groundwork-stack-forge/references/authoring-engineer-skills.md +107 -0
  611. package/src/hidden-skills/groundwork-surface-activation/instructions.md +138 -0
  612. package/src/hidden-skills/groundwork-update/briefs/reconcile-worker.md +196 -0
  613. package/src/hidden-skills/groundwork-update/instructions.md +200 -0
  614. package/src/hidden-skills/groundwork-writer/SKILL.md +278 -0
  615. package/src/hidden-skills/maturity-model.md +125 -0
  616. package/src/hidden-skills/operating-contract.md +400 -0
  617. package/src/hidden-skills/repo-map-schema.md +90 -0
  618. package/src/hidden-skills/templates/adr.md +57 -0
  619. package/src/hidden-skills/templates/capability-ports.md +71 -0
  620. package/src/hidden-skills/templates/discovery-notes.md +33 -0
  621. package/src/hidden-skills/templates/domain-entity.md +80 -0
  622. package/src/hidden-skills/templates/gap-ledger.md +21 -0
  623. package/src/hidden-skills/templates/handoff.md +37 -0
  624. package/src/hidden-skills/templates/maturity.md +39 -0
  625. package/src/hidden-skills/templates/surfaces.md +207 -0
  626. package/src/skills/groundwork-check/SKILL.md +56 -0
  627. package/src/skills/groundwork-check/instructions.md +70 -0
  628. package/src/skills/groundwork-orchestrator/SKILL.md +176 -0
  629. package/src/skills/groundwork-orchestrator/workflow-index.md +50 -0
@@ -0,0 +1,33 @@
1
+ # Discovery Notes
2
+
3
+ > Signals captured out-of-phase during GroundWork conversations. Each skill reads its section before starting and removes lines once incorporated into output. Section headers match the canonical set defined in `operating-contract.md` — do not add, rename, or reorder them.
4
+
5
+ ---
6
+
7
+ ## Product Brief
8
+
9
+ <!-- Vision-level signals captured during later phases — new user types, missing capabilities, refined success criteria. -->
10
+
11
+ ---
12
+
13
+ ## Design System
14
+
15
+ <!-- What the user sees or does: interaction patterns, search/browse/navigation flows, aesthetic instincts. User-facing signals go here even when they name a concrete mechanism (e.g. faceted vs conversational search). Internal mechanisms belong in ## Design Details. -->
16
+
17
+ ---
18
+
19
+ ## Architecture
20
+
21
+ <!-- Infrastructure preferences, scaling instincts, technology opinions surfaced outside the architecture phase. -->
22
+
23
+ ---
24
+
25
+ ## Design Details
26
+
27
+ <!-- Internal mechanisms the user never sees directly — async flows, callback patterns, job lifecycles, data ownership, contract format choices, resiliency patterns. Not user-facing interaction patterns; those go to ## Design System. -->
28
+
29
+ ---
30
+
31
+ ## Bets
32
+
33
+ <!-- Delivery priorities, MVP scope instincts, feature sequencing for future bets. -->
@@ -0,0 +1,80 @@
1
+ ---
2
+ title: <Entity Name>
3
+ description: <One-line definition>
4
+ status: active
5
+ last_reviewed: <YYYY-MM-DD>
6
+ ---
7
+
8
+ # <Entity Name>
9
+
10
+ **Owner:** <service-name>
11
+
12
+ ## What it is
13
+
14
+ One paragraph describing the entity and its role in the system. State the
15
+ invariant the entity exists to enforce.
16
+
17
+ ## Fields
18
+
19
+ | Field | Type | Description |
20
+ |---|---|---|
21
+ | id | uuid | Primary identifier. |
22
+ | ... | ... | ... |
23
+
24
+ ## Lifecycle
25
+
26
+ States and what triggers each transition. If the entity has no meaningful
27
+ state machine (e.g. immutable record), say so explicitly and remove both the
28
+ diagram and the table.
29
+
30
+ When the entity does have a state machine, draw it as a `stateDiagram-v2` so a
31
+ reader sees the shape before reading the triggers. The table below the diagram
32
+ carries the detail the diagram cannot.
33
+
34
+ ```mermaid
35
+ stateDiagram-v2
36
+ [*] --> draft: creation
37
+ draft --> active: <trigger>
38
+ active --> [*]: <trigger>
39
+ ```
40
+
41
+ Every trigger must be mechanically detectable — backed by a field in the
42
+ Fields table or an emitted event. A state reached by the passage of time or
43
+ inactivity needs the field that makes it detectable (e.g. `last_active_at`); a
44
+ state with no detectable trigger cannot be enforced and is invalid.
45
+
46
+ | State | Triggered by | Description |
47
+ |---|---|---|
48
+ | draft | creation | Initial state on insert. |
49
+ | ... | ... | ... |
50
+
51
+ ## Domain events
52
+
53
+ Significant state changes this entity models, named `<entity>.<verb>`. These
54
+ are domain-modeling concepts, not a commitment to publish messages. Whether an
55
+ event is actually published to a broker or bus is an architecture decision — if
56
+ the architecture provisions no message broker, these remain in-process domain
57
+ events with no external publish channel. Do not imply a publish mechanism the
58
+ architecture has not provided.
59
+
60
+ | Event | Trigger | Payload summary |
61
+ |---|---|---|
62
+ | <entity>.created | initial insert | id, owner, created_at |
63
+ | ... | ... | ... |
64
+
65
+ ## Invariants
66
+
67
+ Constraints that must hold for the entity to be valid. Listed explicitly so
68
+ that violations are detectable in tests and at boundaries.
69
+
70
+ An invariant may only assert a guarantee the architecture and accepted ADRs
71
+ actually provide. When an ADR records that a guarantee was deliberately
72
+ surrendered — a monitor rather than a pre-screen, eventual rather than
73
+ immediate consistency — state the weaker guarantee the system enforces, never
74
+ the stronger one the ADR gave up.
75
+
76
+ - ...
77
+
78
+ ## Notes
79
+
80
+ Anything non-obvious — historical decisions, edge cases, known gotchas.
@@ -0,0 +1,21 @@
1
+ # Gap Ledger
2
+
3
+ > Working file. Each brownfield phase appends the divergences from GroundWork standard it discovers. `groundwork-infra-adopt` consolidates this into the roadmap table of `docs/maturity.md` at the end of setup (model: `.groundwork/skills/maturity-model.md`), and the bet loop reads it when planning every bet.
4
+
5
+ Each entry records what diverges, the standard it violates, a severity, and a recommendation. Severity and Recommendation are closed value sets defined by the maturity model — write the values exactly as spelled below, because the roadmap reuses these strings verbatim and a drifted spelling orphans the row.
6
+
7
+ **Severity** — exactly one of `blocks-delivery` | `standard-divergence` | `cosmetic`:
8
+
9
+ - **`blocks-delivery`** — undermines GroundWork's ability to deliver and verify work. The bet loop cannot run well around it. Examples: a service exposes routes with no machine-readable contract (the contract-driven bet loop depends on OpenAPI/AsyncAPI); no system-test harness exists (progress and proof-of-work cannot be tracked across services).
10
+ - **`standard-divergence`** — works, but off the pattern GroundWork's templates encode. Example: events cross services with no transactional outbox; a service has no health endpoint; config is hard-coded rather than externalised.
11
+ - **`cosmetic`** — naming, doc structure, minor layout.
12
+
13
+ **Recommendation** — exactly one of `fix-now` | `defer` | `blocks-delivery`:
14
+
15
+ - **`fix-now`** — worth resolving before the first bet.
16
+ - **`defer`** — real, but value lies elsewhere first.
17
+ - **`blocks-delivery`** — must be the first bet, or close to it. It shares its spelling with the severity tier but is a distinct value in a distinct column.
18
+
19
+ | Gap | Standard violated | Severity | Recommendation | Evidence |
20
+ |---|---|---|---|---|
21
+ <!-- One row per gap. Phases append; none rewrite prior rows. -->
@@ -0,0 +1,37 @@
1
+ # Hand-off from <phase-name>
2
+
3
+ > Post-commit context drop from the phase that just committed. The next phase reads this file once at init and deletes it on its own commit. Distinct from `discovery-notes.md`, which captures in-conversation out-of-phase signals.
4
+ >
5
+ > Fill in only the sections that have content. Omit empty sections entirely — do not leave empty headings.
6
+
7
+ ---
8
+
9
+ ## Rejected Options
10
+
11
+ <!-- Alternatives considered and ruled out during this phase. Format: option — why rejected. Lets the next phase avoid re-litigating decisions the user has already weighed. -->
12
+
13
+ - <option> — <why rejected>
14
+
15
+ ---
16
+
17
+ ## Deferred Decisions
18
+
19
+ <!-- Decisions explicitly left open, with the trigger that should reopen them. Distinct from the Deferred Questions in the phase's Downstream Context file (Protocol 5) — these entries carry the conversational context behind the deferral. Format: decision — context — revisit trigger. -->
20
+
21
+ - <decision> — <context> — <revisit trigger>
22
+
23
+ ---
24
+
25
+ ## User Instincts
26
+
27
+ <!-- Uncommitted signals the user voiced that the next phase should honour but this phase did not formalise. These are not approved decisions — they are leanings the next phase should test against. -->
28
+
29
+ - <signal> — <how the next phase should treat it>
30
+
31
+ ---
32
+
33
+ ## Context Drop
34
+
35
+ <!-- Anything else the next phase needs that does not fit the categories above. Keep entries short and concrete — if a note is not load-bearing for the next phase's work, do not write it. -->
36
+
37
+ - <note>
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: Maturity Roadmap
3
+ service: "cross-cutting"
4
+ type: "index"
5
+ last_reviewed: <YYYY-MM-DD>
6
+ ---
7
+
8
+ # Maturity Roadmap
9
+
10
+ This document tracks the project against the GroundWork maturity model — the nine dimensions of the target state defined in `.groundwork/skills/maturity-model.md`. The assessment says where the project stands; the roadmap says what closing the distance is worth and what it costs. Gaps are proposals, not obligations: `accepted` is a legitimate terminal status.
11
+
12
+ ## Current Assessment
13
+
14
+ | Dimension | State | Evidence |
15
+ |---|---|---|
16
+ | D1. Documented truth | ✅ / 🟡 / 🔴 | <file or command output that justifies the state> |
17
+ | D2. Machine-readable contracts | ✅ / 🟡 / 🔴 | |
18
+ | D3. One-command operations | ✅ / 🟡 / 🔴 | |
19
+ | D4. System-level proof | ✅ / 🟡 / 🔴 | |
20
+ | D5. Code intelligence | ✅ / 🟡 / 🔴 | |
21
+ | D6. Doc currency automation | ✅ / 🟡 / 🔴 | |
22
+ | D7. Delivery discipline | ✅ / 🟡 / 🔴 | |
23
+ | D8. Surface parity discipline | ✅ / 🟡 / 🔴 / n/a | <`n/a` when no surface registry exists — name that as the evidence> |
24
+ | D9. Contract compatibility | ✅ / 🟡 / 🔴 / n/a | <`n/a` below two independently deployed surfaces — name that as the evidence> |
25
+
26
+ **Assessed:** <YYYY-MM-DD> by <phase or skill that ran the assessment>
27
+
28
+ ## Roadmap
29
+
30
+ One row per gap. Severity/recommendation reuse the gap-ledger tiers; status moves `open` → `in-bet (<slug>)` → `closed (<slug>)`, or to `accepted` when the user decides the gap stays.
31
+
32
+ | # | Gap | Dimension | Severity | Recommendation | Status | Evidence / Notes |
33
+ |---|---|---|---|---|---|---|
34
+ | G1 | <what diverges from the target state> | D1–D9 | blocks-delivery / standard-divergence / cosmetic | fix-now / defer / blocks-delivery | open | <evidence; for accepted: who accepted and why> |
35
+
36
+ ## History
37
+
38
+ <!-- Append-only log: one line per assessment or status change.
39
+ e.g. "2026-06-09 — initial assessment by groundwork-infra-adopt; G1–G5 opened." -->
@@ -0,0 +1,207 @@
1
+ # Surface Registry & Capability Ledger Contract
2
+
3
+ `docs/surfaces.md` is the canonical record of a product's surfaces and the capability core they adapt. The prose document is the human source of truth; `.groundwork/surfaces.json` is its machine-readable twin, kept in lockstep by the same commits (the contract-grade rule: every reviewed artifact has a machine-checkable twin). The architecture commit writes both at greenfield setup; `groundwork-architecture-extract` writes both at brownfield adoption; `groundwork-surface-activation` and bet validation maintain them for the life of the product.
4
+
5
+ **The model:** a product is one **capability core** — the domain logic, data, and contracts, always designed and validated headless — plus zero or more **surfaces**, the deployed artifacts consumers interact with (a web app, a CLI binary, a mobile app, an MCP server). Surfaces are adapters over the core. The registry names the surfaces; the **capability ledger** records which capabilities reached which surfaces, so divergence between surfaces is a decision on record, never a silent drift.
6
+
7
+ ---
8
+
9
+ ## Document structure
10
+
11
+ `docs/surfaces.md` carries three sections, in this order:
12
+
13
+ ### 1. Capability Core
14
+
15
+ One short section describing the core: what it owns (domain logic, persistence, contracts), its **deployment** — `hosted` (services reached over a network) or `embedded` (a library in-process with its single surface) — and where its contracts live. The deployment decision is made in the architecture phase; it determines the contract spec format (OpenAPI/AsyncAPI for hosted HTTP/event boundaries, proto for gRPC, a typed public module API for an embedded core) and the transport capability tests run against. Nothing else branches on it.
16
+
17
+ ### 2. Surface Registry
18
+
19
+ One entry per surface, current and planned. Each entry is a heading (`### <slug>`) with a field table:
20
+
21
+ | Field | Values | Meaning |
22
+ |---|---|---|
23
+ | `type` | `graphical-ui` \| `cli` \| `agentic-protocol` | The interface type — owns the design track, vocabulary, and test medium family. |
24
+ | `platform` | `web` \| `mobile` \| `desktop` \| `terminal` \| `protocol` | Where the artifact runs. Several surfaces can share a type across platforms (web and mobile are both `graphical-ui`). |
25
+ | `status` | `active` \| `planned` \| `dormant` \| `retired` | `active` ships and is tested; `planned` is on the roadmap with no code; `dormant` exists but is not currently maintained; `retired` is decommissioned (see the retired-column rule below). |
26
+ | `core access` | e.g. `http-gateway`, `http-direct`, `grpc`, `in-process` | How this surface reaches the core — the access path the architecture phase settled (direct, gateway, BFF). |
27
+ | `auth` | free text | The auth model this surface uses against the core. |
28
+ | `scaffold` | a generator name (`nextjs-app`, `cli-app`, `flutter-app`, `electron-app`), `forged`, or `manual` | What generates the surface's app. `manual` is first-class: a surface participates fully in design, bets, the ledger, and tests before a generator exists for it — the registry never blocks on tooling. `forged` means no generator exists but `groundwork-stack-forge` built a Day-2 seed and a stack engineer skill for it — like `manual`, no generator invocation, but unlike `manual`, a real seed already boots. |
29
+ | `test medium` | e.g. `playwright`, `subprocess-cli`, `protocol-client`, `flutter-integration`, `playwright-electron` | The fixture family `system-test-runner` provisions for this surface. |
30
+ | `design track` | section reference into `docs/design-system.md` | The interface-type section that governs this surface's design vocabulary. |
31
+
32
+ A product with zero surface entries is legal: a headless API product's only surface *is* its protocol — register the protocol itself as an `agentic-protocol` surface, or leave the registry empty and let the core's contracts stand alone.
33
+
34
+ ### 3. Capability Ledger
35
+
36
+ A capability × surface matrix. **Rows** are user-meaningful capabilities, named at bet validation — typically 1–3 per bet, coarse enough to stay readable, never per-endpoint (endpoints already have `docs/architecture/api/` promotion). Row keys follow `<bet-slug>/<capability-slug>` — stable, greppable, collision-free. **Columns** are the registry's surfaces. Each cell carries exactly one state:
37
+
38
+ | State | Meaning | Required payload |
39
+ |---|---|---|
40
+ | `delivered` | Shipped on this surface | the delivering bet's slug |
41
+ | `planned` | Will ship here; not yet | a bet ref or discovery-notes pointer |
42
+ | `omitted` | Deliberate decision not to ship here | one-line rationale |
43
+ | `n/a` | Capability does not apply to this surface | — |
44
+
45
+ `omitted` and `n/a` are distinct on purpose: `n/a` is structural (offline sync has no meaning on a stateless web client), `omitted` is a product choice a future bet may revisit. **An empty cell is the only illegal state once a capability row exists** — bet validation fills every column or the bet does not close. The ledger records decisions; it never nags toward 100% parity — admin tooling belongs on web only, offline mode belongs on mobile only, and the ledger's job is to say so on the record.
46
+
47
+ ### The retired-column rule
48
+
49
+ When a surface's status moves to `retired`, its ledger column freezes: existing cells keep their last state as history, new capability rows fill the retired column `n/a` automatically, and tooling (`./dev surface status`, `groundwork-check`) excludes it from sync-backlog and staleness counts. A retired surface is history, not backlog.
50
+
51
+ ---
52
+
53
+ ## Example — two active surfaces plus a retired one
54
+
55
+ ```markdown
56
+ # Surfaces
57
+
58
+ ## Capability Core
59
+
60
+ Hosted core: three Go services behind an HTTP gateway own ordering, inventory,
61
+ and notification logic. Contracts are OpenAPI 3.x, promoted to `docs/architecture/api/` at
62
+ bet validation. All capability behaviour is provable against these contracts
63
+ with no surface running.
64
+
65
+ ## Surface Registry
66
+
67
+ ### web-app
68
+
69
+ | Field | Value |
70
+ |---|---|
71
+ | type | graphical-ui |
72
+ | platform | web |
73
+ | status | active |
74
+ | core access | http-gateway |
75
+ | auth | session cookie via gateway |
76
+ | scaffold | nextjs-app |
77
+ | test medium | playwright |
78
+ | design track | docs/design-system.md § Graphical UI |
79
+
80
+ ### admin-cli
81
+
82
+ | Field | Value |
83
+ |---|---|
84
+ | type | cli |
85
+ | platform | terminal |
86
+ | status | active |
87
+ | core access | http-direct (service tokens) |
88
+ | auth | API token |
89
+ | scaffold | cli-app |
90
+ | test medium | subprocess-cli |
91
+ | design track | docs/design-system.md § CLI |
92
+
93
+ ### beta-dashboard
94
+
95
+ | Field | Value |
96
+ |---|---|
97
+ | type | graphical-ui |
98
+ | platform | desktop |
99
+ | status | retired |
100
+ | core access | http-gateway |
101
+ | auth | session cookie via gateway |
102
+ | scaffold | manual |
103
+ | test medium | — (retired) |
104
+ | design track | docs/design-system.md § Graphical UI |
105
+
106
+ ## Capability Ledger
107
+
108
+ | Capability | web-app | admin-cli | beta-dashboard (retired) |
109
+ |---|---|---|---|
110
+ | `order-flow/place-order` | delivered (`order-flow`) | omitted — operators never place orders | delivered (`order-flow`) |
111
+ | `order-flow/order-status` | delivered (`order-flow`) | delivered (`order-flow`) | delivered (`order-flow`) |
112
+ | `bulk-ops/bulk-reprice` | omitted — admin tooling is CLI-only | delivered (`bulk-ops`) | n/a |
113
+ ```
114
+
115
+ The `bulk-ops/bulk-reprice` row landed after `beta-dashboard` retired, so its retired column is `n/a` automatically; the two `order-flow` rows predate the retirement and keep their `delivered` history.
116
+
117
+ ---
118
+
119
+ ## Machine-readable twin: `.groundwork/surfaces.json`
120
+
121
+ Written and updated in the same commit as `docs/surfaces.md` — the two never disagree because both are projections of the same decisions. Read by `./dev surface status` and `groundwork-check`.
122
+
123
+ ```json
124
+ {
125
+ "schema": "groundwork.surfaces",
126
+ "version": 1,
127
+ "core": {
128
+ "deployment": "hosted",
129
+ "contractFormat": "openapi",
130
+ "contractsPath": "docs/architecture/api/"
131
+ },
132
+ "surfaces": [
133
+ {
134
+ "slug": "web-app",
135
+ "type": "graphical-ui",
136
+ "platform": "web",
137
+ "status": "active",
138
+ "coreAccess": "http-gateway",
139
+ "auth": "session cookie via gateway",
140
+ "scaffold": "nextjs-app",
141
+ "testMedium": "playwright",
142
+ "designTrack": "graphical-ui"
143
+ },
144
+ {
145
+ "slug": "admin-cli",
146
+ "type": "cli",
147
+ "platform": "terminal",
148
+ "status": "active",
149
+ "coreAccess": "http-direct",
150
+ "auth": "API token",
151
+ "scaffold": "cli-app",
152
+ "testMedium": "subprocess-cli",
153
+ "designTrack": "cli"
154
+ },
155
+ {
156
+ "slug": "beta-dashboard",
157
+ "type": "graphical-ui",
158
+ "platform": "desktop",
159
+ "status": "retired",
160
+ "coreAccess": "http-gateway",
161
+ "auth": "session cookie via gateway",
162
+ "scaffold": "manual",
163
+ "testMedium": null,
164
+ "designTrack": "graphical-ui"
165
+ }
166
+ ],
167
+ "capabilities": [
168
+ {
169
+ "key": "order-flow/place-order",
170
+ "name": "Place an order",
171
+ "cells": {
172
+ "web-app": { "state": "delivered", "bet": "order-flow" },
173
+ "admin-cli": { "state": "omitted", "rationale": "operators never place orders" },
174
+ "beta-dashboard": { "state": "delivered", "bet": "order-flow" }
175
+ }
176
+ },
177
+ {
178
+ "key": "order-flow/order-status",
179
+ "name": "Track order status",
180
+ "cells": {
181
+ "web-app": { "state": "delivered", "bet": "order-flow" },
182
+ "admin-cli": { "state": "delivered", "bet": "order-flow" },
183
+ "beta-dashboard": { "state": "delivered", "bet": "order-flow" }
184
+ }
185
+ },
186
+ {
187
+ "key": "bulk-ops/bulk-reprice",
188
+ "name": "Bulk reprice inventory",
189
+ "cells": {
190
+ "web-app": { "state": "omitted", "rationale": "admin tooling is CLI-only" },
191
+ "admin-cli": { "state": "delivered", "bet": "bulk-ops" },
192
+ "beta-dashboard": { "state": "n/a" }
193
+ }
194
+ }
195
+ ]
196
+ }
197
+ ```
198
+
199
+ ### Schema rules
200
+
201
+ - `core.deployment` — `"hosted"` or `"embedded"`. `core.contractFormat` — `"openapi"`, `"asyncapi"`, `"proto"`, or `"typed-module-api"`; a core with several boundary kinds lists the dominant one and the prose section carries the rest.
202
+ - `surfaces[].slug` is the join key everywhere: ledger cells, test fixtures (`surfaces["web-app"]`), pitch `surfaces:` frontmatter, decomposition slice `surface` fields. Slugs are kebab-case and never renamed — rename means retire + add.
203
+ - `surfaces[].testMedium` is `null` only for `planned` and `retired` surfaces; a `dormant` surface keeps its medium — recorded so reactivation knows the fixture family, exercised only while the surface is `active`; an `active` surface without a test medium is a `groundwork-check` finding.
204
+ - `capabilities[].cells` carries one entry per registry surface (including retired ones — frozen history or auto-`n/a` per the retired-column rule). A missing cell key is the machine form of the illegal empty cell.
205
+ - Cell payloads: `delivered` requires `bet`; `planned` requires `ref` (a bet slug or `discovery-notes` pointer); `omitted` requires `rationale`; `n/a` carries no payload.
206
+ - **Versioned contract.** `version` bumps only when the shape changes. Consumers ignore unknown fields. Keep changes additive.
207
+ - **One writer per moment, many readers.** Architecture (or architecture-extract) creates it; bet validation appends capability rows; surface activation appends surface entries and triages columns. `./dev surface status` and `groundwork-check` only read.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: groundwork-check
3
+ description: Analyzes GroundWork architecture docs for staleness against the codebase by checking git logs for `source_of_truth` paths since `last_reviewed`. Designed to run in CI.
4
+ ---
5
+
6
+ # GroundWork Check Skill
7
+
8
+ The full staleness workflow lives in `instructions.md`, colocated with this file; load it when invoked.
9
+
10
+ ## Doc-Type Behaviours
11
+
12
+ Different doc types have different drift semantics. Apply these rules when scanning `docs/`:
13
+
14
+ ### `docs/principles/**` and `docs/ways-of-working/**`
15
+
16
+ These are project-stable docs not derived from code. Do **not** flag them for code drift. Do surface a low-severity advisory (not a build failure) for any file whose `last_reviewed` date is more than 12 months old. Advisory format: "Advisory: `<path>` has not been reviewed in over 12 months — consider a manual review pass."
17
+
18
+ ### `docs/architecture/domain/<entity>.md`
19
+
20
+ Entity docs should reflect the domain as it appears in code. When discoverable (schema migration files, model definitions), compare entity names found in code against the names of files in `docs/architecture/domain/`. Flag two conditions as warnings:
21
+
22
+ - An entity file exists in `docs/architecture/domain/` but no corresponding code definition can be found — possible deletion or rename.
23
+ - A code definition exists but no entity file exists in `docs/architecture/domain/` — the architecture phase may have missed it, or a bet added it without documentation.
24
+
25
+ Do not fail the build on domain mismatches — these are advisory warnings requiring human judgement.
26
+
27
+ ### `docs/architecture/decisions/NNNN-*.md`
28
+
29
+ ADRs are append-only historical records. Do **not** check for code drift. Do check:
30
+
31
+ - Numbering is sequential with no gaps (0001, 0002, 0003, ... with no missing integers).
32
+ - Every file's `status` frontmatter field is either `accepted` or begins with `superseded by`.
33
+
34
+ Report numbering gaps and invalid statuses as build failures — they indicate a corrupted ADR history.
35
+
36
+ ### `docs/surfaces.md` and `.groundwork/surfaces.json`
37
+
38
+ The surface registry and capability ledger are twins: the prose doc and the JSON are projections of the same decisions, written by the same commits (contract: `.groundwork/skills/templates/surfaces.md`). Exclude `retired` surfaces from every staleness and backlog count below — a retired column is frozen history, never backlog.
39
+
40
+ Report as build failures:
41
+
42
+ - **Twin drift** — the doc and the JSON disagree on the surface set, a surface's status, or a cell's state. The twin rule exists so machine checks can stand in for the prose; a disagreement means a commit updated one projection and not the other, and neither can be trusted until they are reconciled.
43
+ - **Empty ledger cells** — a capability row missing a cell for a registry surface (retired columns included — they carry frozen history or auto-`n/a`), or a cell with no recognised state. An empty cell is the only illegal ledger state: bet validation fills every column or the bet does not close, so an empty cell means a bet closed past its gate.
44
+
45
+ Report as warnings:
46
+
47
+ - **Stale planned intent** — a `planned` cell older than three closed bets with no referencing pitch. Date the cell from the commit that introduced it in `.groundwork/surfaces.json`, count closed bets — the directories under `docs/bets/_archive/` — whose pitch was created after that date (date each from the commit that first added its `docs/bets/<slug>/pitch.md`), and search `docs/bets/` for a pitch that references the capability key or names the surface in its `surfaces:` frontmatter. The threshold is bets, not months, because ledger intent ages at the betting table: each closed bet is a table that passed on the cell, and three passes mark intent that no longer reflects a plan. The other staleness heuristics in this skill are calendar-based; capability work is not scheduled by the calendar.
48
+ - **Untested active surface** — an `active` surface absent from the system-test conftest's `surfaces` fixture mapping (`_SURFACE_SPECS` in `tests/conftest.py`), or carrying `testMedium: null`. `active` means shipped and tested; an active surface no test can reach is a claim without proof.
49
+
50
+ Report as an advisory (not a build failure):
51
+
52
+ - **No registry** — GroundWork docs exist but neither `docs/surfaces.md` nor `.groundwork/surfaces.json` does. This is a pre-restructure adoption, not drift. Point at `groundwork-surface-activation`, whose first move on such a product is to bootstrap the registry from `docs/architecture/index.md` and the existing scaffold.
53
+
54
+ ### `docs/architecture/services/**`
55
+
56
+ Out of scope for the current check implementation.
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: groundwork-check
3
+ description: >
4
+ Detects drift between the committed documentation and the system it describes — code
5
+ changes after a doc's last_reviewed, maturity-roadmap rows that disagree with observed
6
+ state — and reports it with recovery routes. Read-only and CI-safe: it mutates nothing
7
+ and exits non-zero on critical drift.
8
+ ---
9
+
10
+ # groundwork-check
11
+
12
+ You are the project's drift detector. The canonical docs claim to describe the system as it is; your job is to test that claim mechanically and report honestly. You run non-interactively when needed (CI), mutate nothing, and never soften a finding — a doc you cannot assess is reported as unassessed, not skipped.
13
+
14
+ The shared operating contract at `.groundwork/skills/operating-contract.md` (contract v1) defines your mode: **Maintenance**, read-only and diagnostic. From `.groundwork/cache/` you read only `repo-map.json`.
15
+
16
+ The deterministic core of this skill also runs without an agent as `npx groundwork-method check` — that command covers Step 1's git-log baseline. You add what determinism cannot: dependency-graph reach (Step 2), maturity re-assessment (Step 3), and doc-type judgement (Step 4).
17
+
18
+ ---
19
+
20
+ ## Step 0: Framework staleness
21
+
22
+ Before doc drift, test whether the install itself has been left behind — the CLI's
23
+ framework section (`npx groundwork-method check`) covers this deterministically; mirror
24
+ its reading when you run instead of it:
25
+
26
+ - Compare `groundwork.version` in `.groundwork/config/state.json` against the installed
27
+ package version. A gap means the mechanical lane is owed: report it with the route
28
+ `npx groundwork-method update` (never attempt the refresh yourself — the CLI owns it).
29
+ - `.groundwork/cache/upgrade-brief.json` with pending items means judgment-lane work is
30
+ waiting: report the pending count with the route `groundwork-update`.
31
+ - No `.groundwork/config/manifest.json` on an otherwise current install means the
32
+ project predates install manifests — one `npx groundwork-method update` bootstraps it.
33
+
34
+ Framework staleness is a **warning**, not a build failure — the project's docs may be
35
+ perfectly current while the framework trails. Report it first so the reader knows which
36
+ tooling vintage produced the rest of the report.
37
+
38
+ ## Step 1: Staleness baseline
39
+
40
+ Find every code-coupled doc: the files under `docs/architecture/services/`, `docs/architecture/api/`, and `docs/architecture/domain/`, plus `docs/architecture/index.md`. From each doc's frontmatter take `last_reviewed`, `source_of_truth`, and `generation_mode`.
41
+
42
+ For each doc with both fields, run `git log --since="<last_reviewed>" --oneline -- <source_of_truth paths>`. Commits found → the doc is **STALE**, with the commit list as evidence. A doc missing the fields is **UNASSESSED** — report it as such; an unassessable doc that silently passes is the failure mode this skill exists to prevent.
43
+
44
+ ## Step 2: Reference-graph reach (Serena)
45
+
46
+ Path-filtered git history misses drift by construction: a contract doc goes stale when a type it references moves in a file outside its `source_of_truth`. When the Serena MCP server is available, run impact analysis with `find_referencing_symbols` on the symbols changed since each doc's `last_reviewed` and add any doc whose sources depend on changed code through the reference graph. `.groundwork/cache/repo-map.json` serves the same purpose offline. Without either, the Step 1 baseline stands alone — say so in the report rather than implying graph coverage.
47
+
48
+ ## Step 3: Maturity re-assessment
49
+
50
+ If `docs/maturity.md` exists, re-evaluate the mechanical signals of the maturity model (`.groundwork/skills/maturity-model.md`, dimensions D1–D6 plus D8's registry and ledger signals — D7 is judgement-based and D9 is re-assessed by bet validation, so both are out of scope for a check run):
51
+
52
+ - For each assessment row, test its signal now: do the canonical docs exist with summaries (D1)? does each service have a referenced contract (D2)? does `./dev` exist (D3)? is the system-test runner present (D4)? is Serena registered with a code map (D5)? does CI invoke the check (D6)? do the registry twins agree with every ledger cell filled (D8 — `n/a` when no registry exists)?
53
+ - Flag every **disagreement** between observed state and the doc: a dimension marked ✅ whose signal now fails (regression — critical), a roadmap row `closed` whose gap is observably back (critical), and a row `open` whose signal now passes (good news — propose closing it via `groundwork-doc-sync`).
54
+ - Rows marked `accepted` are settled; verify nothing, report nothing, unless the underlying severity escalated to `blocks-delivery`.
55
+
56
+ Do not edit `docs/maturity.md` — you are read-only. Disagreements are findings for `groundwork-doc-sync` to apply.
57
+
58
+ ## Step 4: Doc-type judgement
59
+
60
+ Apply the Doc-Type Behaviours defined in this skill's `SKILL.md`: principles and ways-of-working docs get a 12-month advisory instead of code-drift checks; domain entity docs are cross-checked against code definitions in both directions (advisory); ADRs are checked for sequential numbering and valid `status` fields (build failure on corruption); the surface registry and capability ledger are cross-checked against their prose twin, the test fixtures, and the bet history (twin drift and empty cells are build failures; stale `planned` intent and untested active surfaces are warnings; a missing registry is an advisory); `docs/architecture/services/` deep integration is deferred.
61
+
62
+ ## Step 5: Report
63
+
64
+ Group findings by service, severity first:
65
+
66
+ 1. **Critical** — stale contract-bearing docs (API, schema, events), ADR corruption, surface-ledger corruption (twin drift, empty cells), maturity regressions, `closed` rows whose gap is back. These fail the build: end with a failing status.
67
+ 2. **Warnings** — other stale docs, domain cross-check mismatches, unassessed docs, stale `planned` ledger cells, untested active surfaces.
68
+ 3. **Advisory** — aging stable docs, `open` roadmap rows whose signal now passes, GroundWork docs with no surface registry (route: `groundwork-surface-activation` bootstraps it).
69
+
70
+ For every finding name the recovery route: `generation_mode: generated` → re-run the generator that produced it; `extracted` or prose docs → run the `groundwork-doc-sync` skill; maturity disagreements → `groundwork-doc-sync` with this report as the change-set anchor. If nothing drifted, say exactly that — and state which steps ran (with or without Serena, with or without a maturity doc), so a clean report is auditable.