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.
- package/CHANGELOG.md +823 -0
- package/LICENSE +21 -0
- package/README.md +44 -29
- package/bin/groundwork.js +1723 -0
- package/dist/src/generators/add-capability/generator.d.ts +8 -0
- package/dist/src/generators/add-capability/generator.js +60 -0
- package/dist/src/generators/add-capability/generator.js.map +1 -0
- package/dist/src/generators/cli-app/generator.d.ts +9 -0
- package/dist/src/generators/cli-app/generator.js +140 -0
- package/dist/src/generators/cli-app/generator.js.map +1 -0
- package/dist/src/generators/docs-site/generator.d.ts +5 -0
- package/dist/src/generators/docs-site/generator.js +441 -0
- package/dist/src/generators/docs-site/generator.js.map +1 -0
- package/dist/src/generators/electron-app/generator.d.ts +6 -0
- package/dist/src/generators/electron-app/generator.js +261 -0
- package/dist/src/generators/electron-app/generator.js.map +1 -0
- package/dist/src/generators/flutter-app/generator.d.ts +6 -0
- package/dist/src/generators/flutter-app/generator.js +314 -0
- package/dist/src/generators/flutter-app/generator.js.map +1 -0
- package/dist/src/generators/go-microservice/generator.d.ts +8 -0
- package/dist/src/generators/go-microservice/generator.js +232 -0
- package/dist/src/generators/go-microservice/generator.js.map +1 -0
- package/dist/src/generators/nextjs-app/generator.d.ts +8 -0
- package/dist/src/generators/nextjs-app/generator.js +294 -0
- package/dist/src/generators/nextjs-app/generator.js.map +1 -0
- package/dist/src/generators/python-microservice/generator.d.ts +13 -0
- package/dist/src/generators/python-microservice/generator.js +265 -0
- package/dist/src/generators/python-microservice/generator.js.map +1 -0
- package/dist/src/generators/shared/brand-tokens.d.ts +89 -0
- package/dist/src/generators/shared/brand-tokens.js +308 -0
- package/dist/src/generators/shared/brand-tokens.js.map +1 -0
- package/dist/src/generators/shared/capabilities.d.ts +101 -0
- package/dist/src/generators/shared/capabilities.js +279 -0
- package/dist/src/generators/shared/capabilities.js.map +1 -0
- package/dist/src/generators/shared/provenance.d.ts +2 -0
- package/dist/src/generators/shared/provenance.js +85 -0
- package/dist/src/generators/shared/provenance.js.map +1 -0
- package/dist/src/generators/shared/scaffold-helpers.d.ts +72 -0
- package/dist/src/generators/shared/scaffold-helpers.js +309 -0
- package/dist/src/generators/shared/scaffold-helpers.js.map +1 -0
- package/dist/src/generators/system-test-runner/generator.d.ts +23 -0
- package/dist/src/generators/system-test-runner/generator.js +173 -0
- package/dist/src/generators/system-test-runner/generator.js.map +1 -0
- package/dist/src/generators/workspace-dev-cli/generator.d.ts +7 -0
- package/dist/src/generators/workspace-dev-cli/generator.js +138 -0
- package/dist/src/generators/workspace-dev-cli/generator.js.map +1 -0
- package/generators.json +57 -0
- package/lib/repo-map/grammars/tree-sitter-c.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-cpp.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-csharp.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-dart.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-go.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-java.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-javascript.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-kotlin.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-lua.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-php.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-python.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-ruby.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-rust.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-scala.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-swift.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-tsx.wasm +0 -0
- package/lib/repo-map/grammars/tree-sitter-typescript.wasm +0 -0
- package/lib/repo-map/index.js +386 -0
- package/lib/repo-map/languages.js +514 -0
- package/lib/repo-map/pagerank.js +59 -0
- package/migrations/README.md +60 -0
- package/migrations/_template/cli-migration.js +27 -0
- package/migrations/gw-bet-prose-redesign.js +105 -0
- package/migrations/gw-drop-test-manifest.js +37 -0
- package/migrations/gw-register-serena-mcp.js +42 -0
- package/migrations/gw-relocate-hidden-skills.js +40 -0
- package/migrations/gw-seed-config-toml.js +24 -0
- package/migrations/index.json +40 -0
- package/package.json +70 -6
- package/src/AGENTS.md +36 -0
- package/src/config/config.toml +30 -0
- package/src/config/groundwork-state.json +5 -0
- package/src/docs/llms.txt +72 -0
- package/src/docs/principles/ai-native/agent-native-systems.md +90 -0
- package/src/docs/principles/ai-native/agentic-systems.md +78 -0
- package/src/docs/principles/ai-native/ai-engineering.md +100 -0
- package/src/docs/principles/ai-native/ai-native-product.md +76 -0
- package/src/docs/principles/delivery/cost-engineering.md +89 -0
- package/src/docs/principles/delivery/day-2-operational-baseline.md +57 -0
- package/src/docs/principles/delivery/devex.md +88 -0
- package/src/docs/principles/delivery/platform.md +101 -0
- package/src/docs/principles/delivery/progressive-delivery.md +92 -0
- package/src/docs/principles/design/ai-native-design.md +73 -0
- package/src/docs/principles/design/design-foundations.md +80 -0
- package/src/docs/principles/design/design-systems-and-tokens.md +72 -0
- package/src/docs/principles/design/interaction-and-motion.md +69 -0
- package/src/docs/principles/design/layout-and-space.md +72 -0
- package/src/docs/principles/design/usability-and-ux.md +79 -0
- package/src/docs/principles/design/visual-design.md +84 -0
- package/src/docs/principles/foundations/code-craft.md +86 -0
- package/src/docs/principles/foundations/continuous-discovery.md +75 -0
- package/src/docs/principles/foundations/documentation.md +102 -0
- package/src/docs/principles/foundations/prioritization-and-appetite.md +78 -0
- package/src/docs/principles/foundations/product-engineering.md +90 -0
- package/src/docs/principles/foundations/product-risks.md +89 -0
- package/src/docs/principles/foundations/requirements-and-specs.md +80 -0
- package/src/docs/principles/foundations/success-metrics.md +66 -0
- package/src/docs/principles/foundations/testing.md +108 -0
- package/src/docs/principles/index.md +24 -0
- package/src/docs/principles/quality/accessibility.md +88 -0
- package/src/docs/principles/quality/observability.md +84 -0
- package/src/docs/principles/quality/performance.md +84 -0
- package/src/docs/principles/quality/privacy.md +92 -0
- package/src/docs/principles/quality/reliability.md +89 -0
- package/src/docs/principles/quality/security.md +78 -0
- package/src/docs/principles/stack/postgres.md +100 -0
- package/src/docs/principles/system-design/api-design.md +86 -0
- package/src/docs/principles/system-design/architecture-decisions.md +81 -0
- package/src/docs/principles/system-design/code-structure.md +104 -0
- package/src/docs/principles/system-design/data-engineering.md +87 -0
- package/src/docs/principles/system-design/durable-execution.md +89 -0
- package/src/docs/principles/system-design/evolutionary-architecture.md +81 -0
- package/src/docs/principles/system-design/identity-and-access.md +76 -0
- package/src/docs/principles/system-design/integration-patterns.md +84 -0
- package/src/docs/principles/system-design/real-time.md +83 -0
- package/src/docs/principles/system-design/surface-architecture.md +74 -0
- package/src/docs/ways-of-working/documentation.md +69 -0
- package/src/docs/ways-of-working/how-we-work.md +76 -0
- package/src/docs/ways-of-working/units-of-work.md +40 -0
- package/src/engineer-skills/groundwork-electron-engineer/SKILL.md +123 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/documentation.md +126 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/ipc-contracts.md +138 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/observability.md +37 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/packaging-and-updates.md +82 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/performance-and-reliability.md +80 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/process-model.md +94 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/security.md +107 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/testing-and-smoke.md +129 -0
- package/src/engineer-skills/groundwork-electron-engineer/references/theming-and-tokens.md +74 -0
- package/src/engineer-skills/groundwork-electron-engineer/sync-anchor.md +22 -0
- package/src/engineer-skills/groundwork-flutter-engineer/SKILL.md +114 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/accessibility.md +92 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/architecture.md +189 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/data-and-contracts.md +136 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/documentation.md +122 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/navigation.md +122 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/observability.md +37 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/performance-and-reliability.md +100 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/platform-channels.md +93 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/releases-and-distribution.md +84 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/security.md +96 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/state-management.md +166 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/testing.md +160 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/theming-and-design-tokens.md +109 -0
- package/src/engineer-skills/groundwork-flutter-engineer/references/widgets-and-composition.md +123 -0
- package/src/engineer-skills/groundwork-flutter-engineer/sync-anchor.md +24 -0
- package/src/engineer-skills/groundwork-go-engineer/SKILL.md +174 -0
- package/src/engineer-skills/groundwork-go-engineer/references/api-design.md +82 -0
- package/src/engineer-skills/groundwork-go-engineer/references/architecture.md +42 -0
- package/src/engineer-skills/groundwork-go-engineer/references/capability-ports.md +50 -0
- package/src/engineer-skills/groundwork-go-engineer/references/code-craft-security.md +34 -0
- package/src/engineer-skills/groundwork-go-engineer/references/concurrency.md +108 -0
- package/src/engineer-skills/groundwork-go-engineer/references/documentation.md +130 -0
- package/src/engineer-skills/groundwork-go-engineer/references/go-services.md +77 -0
- package/src/engineer-skills/groundwork-go-engineer/references/http-handlers.md +172 -0
- package/src/engineer-skills/groundwork-go-engineer/references/implementation-patterns.md +156 -0
- package/src/engineer-skills/groundwork-go-engineer/references/integration-realtime-data.md +57 -0
- package/src/engineer-skills/groundwork-go-engineer/references/observability.md +49 -0
- package/src/engineer-skills/groundwork-go-engineer/references/postgres.md +41 -0
- package/src/engineer-skills/groundwork-go-engineer/references/reliability-performance.md +105 -0
- package/src/engineer-skills/groundwork-go-engineer/references/testing.md +201 -0
- package/src/engineer-skills/groundwork-go-engineer/sync-anchor.md +20 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/SKILL.md +112 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/accessibility.md +111 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/architecture.md +323 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/data-fetching.md +458 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/documentation.md +324 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/error-boundaries.md +383 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/mutations-and-forms.md +396 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/observability.md +48 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/performance-and-deployment.md +947 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/routing-and-navigation.md +405 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/security.md +131 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/server-components.md +394 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/tailwind-and-styling.md +134 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/testing.md +491 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/type-system.md +368 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/ux-principles.md +230 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/references/visual-language.md +69 -0
- package/src/engineer-skills/groundwork-nextjs-engineer/sync-anchor.md +16 -0
- package/src/engineer-skills/groundwork-python-engineer/SKILL.md +199 -0
- package/src/engineer-skills/groundwork-python-engineer/references/api-standards.md +88 -0
- package/src/engineer-skills/groundwork-python-engineer/references/architecture.md +57 -0
- package/src/engineer-skills/groundwork-python-engineer/references/async-patterns.md +103 -0
- package/src/engineer-skills/groundwork-python-engineer/references/capability-ports.md +44 -0
- package/src/engineer-skills/groundwork-python-engineer/references/database.md +88 -0
- package/src/engineer-skills/groundwork-python-engineer/references/documentation-mcp.md +167 -0
- package/src/engineer-skills/groundwork-python-engineer/references/implementation-patterns.md +166 -0
- package/src/engineer-skills/groundwork-python-engineer/references/ml-pipelines.md +119 -0
- package/src/engineer-skills/groundwork-python-engineer/references/ml-systems-ai-engineering.md +74 -0
- package/src/engineer-skills/groundwork-python-engineer/references/observability.md +57 -0
- package/src/engineer-skills/groundwork-python-engineer/references/resilience.md +126 -0
- package/src/engineer-skills/groundwork-python-engineer/references/security.md +148 -0
- package/src/engineer-skills/groundwork-python-engineer/references/testing.md +216 -0
- package/src/engineer-skills/groundwork-python-engineer/sync-anchor.md +20 -0
- package/src/generators/add-capability/generator.ts +70 -0
- package/src/generators/add-capability/schema.json +30 -0
- package/src/generators/capabilities/llm/capability.json +28 -0
- package/src/generators/capabilities/llm/providers/anthropic/footprint.json +13 -0
- package/src/generators/capabilities/llm/providers/anthropic/stacks/go/internal/llm/llm.go.template +102 -0
- package/src/generators/capabilities/llm/providers/anthropic/stacks/python/src/__packageName__/adapters/llm.py.template +61 -0
- package/src/generators/capabilities/llm/providers/local/footprint.json +13 -0
- package/src/generators/capabilities/llm/providers/local/stacks/go/internal/llm/llm.go.template +102 -0
- package/src/generators/capabilities/llm/providers/local/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
- package/src/generators/capabilities/llm/providers/localai/footprint.json +29 -0
- package/src/generators/capabilities/llm/providers/localai/stacks/go/internal/llm/llm.go.template +102 -0
- package/src/generators/capabilities/llm/providers/localai/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
- package/src/generators/capabilities/llm/providers/none/footprint.json +9 -0
- package/src/generators/capabilities/llm/providers/none/stacks/go/internal/llm/llm.go.template +35 -0
- package/src/generators/capabilities/llm/providers/none/stacks/python/src/__packageName__/adapters/llm.py.template +25 -0
- package/src/generators/capabilities/llm/providers/ollama/footprint.json +20 -0
- package/src/generators/capabilities/llm/providers/ollama/stacks/go/internal/llm/llm.go.template +102 -0
- package/src/generators/capabilities/llm/providers/ollama/stacks/python/src/__packageName__/adapters/llm.py.template +53 -0
- package/src/generators/capabilities/llm/providers/openai/footprint.json +13 -0
- package/src/generators/capabilities/llm/providers/openai/stacks/go/internal/llm/llm.go.template +98 -0
- package/src/generators/capabilities/llm/providers/openai/stacks/python/src/__packageName__/adapters/llm.py.template +60 -0
- package/src/generators/capabilities/llm/stacks/go/internal/core/service/llm.go.template +12 -0
- package/src/generators/capabilities/llm/stacks/go/internal/llm/llm_test.go.template +33 -0
- package/src/generators/capabilities/llm/stacks/python/src/__packageName__/core/llm.py.template +15 -0
- package/src/generators/capabilities/llm/stacks/python/tests/contracts/test_llm.py.template +37 -0
- package/src/generators/cli-app/files/README.md.template +76 -0
- package/src/generators/cli-app/files/build.mjs.template +15 -0
- package/src/generators/cli-app/files/package.json.template +21 -0
- package/src/generators/cli-app/files/src/cli.ts.template +67 -0
- package/src/generators/cli-app/files/src/commands/hello.ts.template +17 -0
- package/src/generators/cli-app/files/src/commands/status.ts.template +23 -0
- package/src/generators/cli-app/files/src/core/client.test.ts.template +80 -0
- package/src/generators/cli-app/files/src/core/client.ts.template +64 -0
- package/src/generators/cli-app/files/src/registry.test.ts.template +35 -0
- package/src/generators/cli-app/files/src/registry.ts.template +31 -0
- package/src/generators/cli-app/files/tsconfig.json.template +16 -0
- package/src/generators/cli-app/files/tsconfig.test.json.template +11 -0
- package/src/generators/cli-app/generator.ts +138 -0
- package/src/generators/cli-app/schema.json +24 -0
- package/src/generators/docs-site/files/.gitignore.ejs +40 -0
- package/src/generators/docs-site/files/app/docs/__slug__/page.tsx +101 -0
- package/src/generators/docs-site/files/app/docs/layout.tsx +14 -0
- package/src/generators/docs-site/files/app/docs.css +43 -0
- package/src/generators/docs-site/files/app/layout.tsx +24 -0
- package/src/generators/docs-site/files/app/page.tsx +135 -0
- package/src/generators/docs-site/files/app/source.ts +8 -0
- package/src/generators/docs-site/files/components/mermaid.tsx +67 -0
- package/src/generators/docs-site/files/next.config.mjs +10 -0
- package/src/generators/docs-site/files/package.json +32 -0
- package/src/generators/docs-site/files/pnpm-workspace.yaml +7 -0
- package/src/generators/docs-site/files/postcss.config.mjs +6 -0
- package/src/generators/docs-site/files/source.config.ts +77 -0
- package/src/generators/docs-site/files/tailwind.config.js +10 -0
- package/src/generators/docs-site/files/tsconfig.json +27 -0
- package/src/generators/docs-site/generator.ts +476 -0
- package/src/generators/docs-site/schema.json +17 -0
- package/src/generators/electron-app/docs/principles/stack/electron/index.md +49 -0
- package/src/generators/electron-app/docs/principles/stack/electron/ipc-contracts.md +71 -0
- package/src/generators/electron-app/docs/principles/stack/electron/packaging-and-updates.md +59 -0
- package/src/generators/electron-app/docs/principles/stack/electron/process-model.md +53 -0
- package/src/generators/electron-app/docs/principles/stack/electron/security.md +70 -0
- package/src/generators/electron-app/docs/principles/stack/typescript/frontend.md +65 -0
- package/src/generators/electron-app/files/.gitignore.template +20 -0
- package/src/generators/electron-app/files/README.md.template +125 -0
- package/src/generators/electron-app/files/electron.vite.config.ts +31 -0
- package/src/generators/electron-app/files/eslint.config.mjs +92 -0
- package/src/generators/electron-app/files/forge.config.ts.template +44 -0
- package/src/generators/electron-app/files/package.json.template +54 -0
- package/src/generators/electron-app/files/playwright.config.ts +18 -0
- package/src/generators/electron-app/files/project.json.template +65 -0
- package/src/generators/electron-app/files/src/main/core-client.test.ts +81 -0
- package/src/generators/electron-app/files/src/main/core-client.ts +55 -0
- package/src/generators/electron-app/files/src/main/index.ts +157 -0
- package/src/generators/electron-app/files/src/main/ipc.ts +52 -0
- package/src/generators/electron-app/files/src/main/policy.test.ts +71 -0
- package/src/generators/electron-app/files/src/main/policy.ts +73 -0
- package/src/generators/electron-app/files/src/preload/index.ts +23 -0
- package/src/generators/electron-app/files/src/renderer/index.html.template +20 -0
- package/src/generators/electron-app/files/src/renderer/src/App.test.tsx +61 -0
- package/src/generators/electron-app/files/src/renderer/src/App.tsx.template +43 -0
- package/src/generators/electron-app/files/src/renderer/src/assets/main.css +40 -0
- package/src/generators/electron-app/files/src/renderer/src/env.d.ts +14 -0
- package/src/generators/electron-app/files/src/renderer/src/main.tsx +25 -0
- package/src/generators/electron-app/files/src/shared/ipc.ts +54 -0
- package/src/generators/electron-app/files/tests/smoke/app.spec.ts.template +133 -0
- package/src/generators/electron-app/files/tool/electron_exec.sh.template +83 -0
- package/src/generators/electron-app/files/tsconfig.json +7 -0
- package/src/generators/electron-app/files/tsconfig.node.json +27 -0
- package/src/generators/electron-app/files/tsconfig.web.json +22 -0
- package/src/generators/electron-app/files/vitest.config.ts +32 -0
- package/src/generators/electron-app/files/vitest.setup.ts +1 -0
- package/src/generators/electron-app/generator.ts +288 -0
- package/src/generators/electron-app/schema.json +23 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/architecture.md +78 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/index.md +38 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/platform-channels.md +51 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/releases-and-distribution.md +59 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/state-management.md +85 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/testing.md +86 -0
- package/src/generators/flutter-app/docs/principles/stack/flutter/widgets-and-composition.md +69 -0
- package/src/generators/flutter-app/files/.gitignore.template +30 -0
- package/src/generators/flutter-app/files/README.md.template +100 -0
- package/src/generators/flutter-app/files/analysis_options.yaml.template +18 -0
- package/src/generators/flutter-app/files/integration_test/app_test.dart.template +64 -0
- package/src/generators/flutter-app/files/lib/app.dart.template +24 -0
- package/src/generators/flutter-app/files/lib/config/app_config.dart +15 -0
- package/src/generators/flutter-app/files/lib/data/repositories/status_repository.dart +36 -0
- package/src/generators/flutter-app/files/lib/data/services/api_client.dart +71 -0
- package/src/generators/flutter-app/files/lib/domain/models/health_status.dart +23 -0
- package/src/generators/flutter-app/files/lib/main.dart +11 -0
- package/src/generators/flutter-app/files/lib/router.dart +23 -0
- package/src/generators/flutter-app/files/lib/ui/core/theme/app_theme.dart +110 -0
- package/src/generators/flutter-app/files/lib/ui/home/home_view.dart +89 -0
- package/src/generators/flutter-app/files/lib/ui/home/home_view_model.dart.template +38 -0
- package/src/generators/flutter-app/files/project.json.template +51 -0
- package/src/generators/flutter-app/files/pubspec.yaml.template +47 -0
- package/src/generators/flutter-app/files/test/api_client_test.dart.template +63 -0
- package/src/generators/flutter-app/files/test/fakes/fake_status_repository.dart.template +19 -0
- package/src/generators/flutter-app/files/test/home_view_test.dart.template +58 -0
- package/src/generators/flutter-app/files/tool/flutter_exec.sh.template +60 -0
- package/src/generators/flutter-app/generator.ts +362 -0
- package/src/generators/flutter-app/schema.json +23 -0
- package/src/generators/go-microservice/docs/principles/stack/go/concurrency.md +123 -0
- package/src/generators/go-microservice/docs/principles/stack/go/index.md +70 -0
- package/src/generators/go-microservice/docs/principles/stack/go/testing.md +168 -0
- package/src/generators/go-microservice/files/.air.toml.template +38 -0
- package/src/generators/go-microservice/files/.env.template +4 -0
- package/src/generators/go-microservice/files/.golangci.yml.template +82 -0
- package/src/generators/go-microservice/files/Dockerfile.dev.template +12 -0
- package/src/generators/go-microservice/files/asyncapi-pubsub.yaml.template +33 -0
- package/src/generators/go-microservice/files/asyncapi-ws.yaml.template +34 -0
- package/src/generators/go-microservice/files/cmd/api/main.go.template +149 -0
- package/src/generators/go-microservice/files/cmd/api/main_test.go.template +99 -0
- package/src/generators/go-microservice/files/cmd/worker/cleanup/main.go.template +39 -0
- package/src/generators/go-microservice/files/db/schema.sql.template +24 -0
- package/src/generators/go-microservice/files/go.mod.template +39 -0
- package/src/generators/go-microservice/files/internal/config/config.go.template +52 -0
- package/src/generators/go-microservice/files/internal/config/otel.go.template +93 -0
- package/src/generators/go-microservice/files/internal/core/domain/errors.go.template +16 -0
- package/src/generators/go-microservice/files/internal/core/domain/model.go.template +28 -0
- package/src/generators/go-microservice/files/internal/core/domain/user.go.template +13 -0
- package/src/generators/go-microservice/files/internal/core/pagination.go.template +16 -0
- package/src/generators/go-microservice/files/internal/core/service/app_service.go.template +79 -0
- package/src/generators/go-microservice/files/internal/core/service/event_hub.go.template +9 -0
- package/src/generators/go-microservice/files/internal/core/service/message_queue.go.template +10 -0
- package/src/generators/go-microservice/files/internal/core/service/outbox_repository.go.template +31 -0
- package/src/generators/go-microservice/files/internal/core/service/repository.go.template +23 -0
- package/src/generators/go-microservice/files/internal/core/service/user_repository.go.template +15 -0
- package/src/generators/go-microservice/files/internal/core/service/user_service.go.template +43 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/app_handler.go.template +108 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/auth_middleware_test.go.template +52 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook.go.template +202 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/clerk_webhook_test.go.template +82 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/health_handler.go.template +80 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware.go.template +87 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/middleware_test.go.template +76 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/idempotency/repository.go.template +37 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_auth.go.template +40 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_loadshed.go.template +38 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_logging.go.template +40 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_ratelimit.go.template +48 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/middleware_test.go.template +81 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/router.go.template +105 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/types.go.template +70 -0
- package/src/generators/go-microservice/files/internal/entrypoints/api/websocket_handler.go.template +39 -0
- package/src/generators/go-microservice/files/internal/httpclient/http_client.go.template +87 -0
- package/src/generators/go-microservice/files/internal/kafka/kafka.go.template +34 -0
- package/src/generators/go-microservice/files/internal/postgres/postgres.go.template +195 -0
- package/src/generators/go-microservice/files/internal/postgres/postgres_test.go.template +156 -0
- package/src/generators/go-microservice/files/internal/postgres/user_repository.go.template +56 -0
- package/src/generators/go-microservice/files/internal/pubsub/gcp_pubsub.go.template +35 -0
- package/src/generators/go-microservice/files/internal/websocket/client.go.template +151 -0
- package/src/generators/go-microservice/files/internal/websocket/hub.go.template +261 -0
- package/src/generators/go-microservice/files/scripts/apply-schema.sh.template +21 -0
- package/src/generators/go-microservice/files/tools/tools.go.template +10 -0
- package/src/generators/go-microservice/generator.ts +240 -0
- package/src/generators/go-microservice/schema.json +63 -0
- package/src/generators/nextjs-app/docs/principles/stack/typescript/frontend.md +65 -0
- package/src/generators/nextjs-app/files/.dockerignore.template +7 -0
- package/src/generators/nextjs-app/files/.env.example.template +24 -0
- package/src/generators/nextjs-app/files/.gitignore.template +5 -0
- package/src/generators/nextjs-app/files/Dockerfile +53 -0
- package/src/generators/nextjs-app/files/app/(auth)/sign-in/__sign-in__/page.tsx.template +9 -0
- package/src/generators/nextjs-app/files/app/(auth)/sign-up/__sign-up__/page.tsx.template +9 -0
- package/src/generators/nextjs-app/files/app/api/config/route.ts.template +39 -0
- package/src/generators/nextjs-app/files/app/api/healthz/route.test.ts +15 -0
- package/src/generators/nextjs-app/files/app/api/healthz/route.ts +5 -0
- package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.test.ts.template +55 -0
- package/src/generators/nextjs-app/files/app/api/proxy/__path__/route.ts.template +126 -0
- package/src/generators/nextjs-app/files/app/error.tsx +39 -0
- package/src/generators/nextjs-app/files/app/global-error.tsx +68 -0
- package/src/generators/nextjs-app/files/app/globals.css +105 -0
- package/src/generators/nextjs-app/files/app/layout.tsx +59 -0
- package/src/generators/nextjs-app/files/app/loading.tsx +13 -0
- package/src/generators/nextjs-app/files/app/not-found.tsx +30 -0
- package/src/generators/nextjs-app/files/app/page.tsx +20 -0
- package/src/generators/nextjs-app/files/components/providers/default.tsx +19 -0
- package/src/generators/nextjs-app/files/components/providers/production.tsx +32 -0
- package/src/generators/nextjs-app/files/components/providers/telemetry.tsx +76 -0
- package/src/generators/nextjs-app/files/components/render-smoke.test.tsx +29 -0
- package/src/generators/nextjs-app/files/components/theme-provider.tsx +11 -0
- package/src/generators/nextjs-app/files/components.json +21 -0
- package/src/generators/nextjs-app/files/eslint.config.mjs +120 -0
- package/src/generators/nextjs-app/files/hooks/use-toast.ts +7 -0
- package/src/generators/nextjs-app/files/instrumentation.ts +90 -0
- package/src/generators/nextjs-app/files/lib/api/fetcher.ts.template +130 -0
- package/src/generators/nextjs-app/files/lib/config.ts +21 -0
- package/src/generators/nextjs-app/files/lib/logger.ts +29 -0
- package/src/generators/nextjs-app/files/lib/schemas/index.ts +19 -0
- package/src/generators/nextjs-app/files/lib/utils.ts +6 -0
- package/src/generators/nextjs-app/files/next.config.mjs +9 -0
- package/src/generators/nextjs-app/files/package.json +70 -0
- package/src/generators/nextjs-app/files/postcss.config.mjs +8 -0
- package/src/generators/nextjs-app/files/proxy.test.ts.template +30 -0
- package/src/generators/nextjs-app/files/proxy.ts +31 -0
- package/src/generators/nextjs-app/files/public/.gitkeep +1 -0
- package/src/generators/nextjs-app/files/tsconfig.json +42 -0
- package/src/generators/nextjs-app/files/vitest.config.mts +15 -0
- package/src/generators/nextjs-app/files/vitest.setup.ts +7 -0
- package/src/generators/nextjs-app/generator.ts +307 -0
- package/src/generators/nextjs-app/schema.json +44 -0
- package/src/generators/python-microservice/docs/principles/stack/python/async.md +168 -0
- package/src/generators/python-microservice/docs/principles/stack/python/documentation.md +240 -0
- package/src/generators/python-microservice/docs/principles/stack/python/mcp.md +147 -0
- package/src/generators/python-microservice/docs/principles/stack/python/resilience.md +193 -0
- package/src/generators/python-microservice/docs/principles/stack/python/testing.md +322 -0
- package/src/generators/python-microservice/files/.env.example.template +30 -0
- package/src/generators/python-microservice/files/Dockerfile.template +36 -0
- package/src/generators/python-microservice/files/db/schema.sql.template +19 -0
- package/src/generators/python-microservice/files/pyproject.toml.template +76 -0
- package/src/generators/python-microservice/files/scripts/apply-schema.sh.template +25 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/comfyui.py.template +87 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/config.py.template +48 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/database.py.template +21 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/message_queue.py.template +29 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/repository.py.template +130 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/telemetry.py.template +68 -0
- package/src/generators/python-microservice/files/src/__packageName__/adapters/websocket_hub.py.template +36 -0
- package/src/generators/python-microservice/files/src/__packageName__/core/domain/entities.py.template +22 -0
- package/src/generators/python-microservice/files/src/__packageName__/core/domain/exceptions.py.template +43 -0
- package/src/generators/python-microservice/files/src/__packageName__/core/ports.py.template +42 -0
- package/src/generators/python-microservice/files/src/__packageName__/core/service/example_service.py.template +68 -0
- package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/dependencies.py.template +50 -0
- package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/middleware.py.template +131 -0
- package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/router.py.template +37 -0
- package/src/generators/python-microservice/files/src/__packageName__/entrypoints/api/websocket_handler.py.template +20 -0
- package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/cleanup.py.template +35 -0
- package/src/generators/python-microservice/files/src/__packageName__/entrypoints/worker/worker.py.template +28 -0
- package/src/generators/python-microservice/files/src/__packageName__/main.py.template +108 -0
- package/src/generators/python-microservice/files/tests/test_main.py.template +74 -0
- package/src/generators/python-microservice/files/tests/test_middleware.py.template +109 -0
- package/src/generators/python-microservice/files/tests/test_worker.py.template +16 -0
- package/src/generators/python-microservice/generator.ts +286 -0
- package/src/generators/python-microservice/schema.json +86 -0
- package/src/generators/shared/brand-tokens.ts +301 -0
- package/src/generators/shared/capabilities.ts +349 -0
- package/src/generators/shared/provenance.ts +61 -0
- package/src/generators/shared/scaffold-helpers.ts +309 -0
- package/src/generators/system-test-runner/NATIVE-CHECK-CONTRACT.md +20 -0
- package/src/generators/system-test-runner/files/tests/bets/.gitkeep +0 -0
- package/src/generators/system-test-runner/files/tests/bets/_archive/.gitkeep +0 -0
- package/src/generators/system-test-runner/files/tests/conftest.py.template +503 -0
- package/src/generators/system-test-runner/files/tests/pyproject.toml.template +20 -0
- package/src/generators/system-test-runner/files/tests/system/pages/__init__.py.template +9 -0
- package/src/generators/system-test-runner/files/tests/system/pages/base_page.py.template +36 -0
- package/src/generators/system-test-runner/files/tests/system/test_a11y_smoke.py.template +132 -0
- package/src/generators/system-test-runner/files/tests/system/test_contract_conformance.py.template +140 -0
- package/src/generators/system-test-runner/files/tests/system/test_layout_geometry.py.template +109 -0
- package/src/generators/system-test-runner/files/tests/system/test_render_smoke.py.template +257 -0
- package/src/generators/system-test-runner/files/tests/system/test_system.py.template +158 -0
- package/src/generators/system-test-runner/files/tests/system/test_token_conformance.py.template +206 -0
- package/src/generators/system-test-runner/files/tests/system/test_visual_regression.py.template +104 -0
- package/src/generators/system-test-runner/generator.ts +196 -0
- package/src/generators/system-test-runner/schema.json +24 -0
- package/src/generators/workspace-dev-cli/cli-src/build.mjs +42 -0
- package/src/generators/workspace-dev-cli/cli-src/dist/dev-bundle.js +2168 -0
- package/src/generators/workspace-dev-cli/cli-src/src/commands/bet.ts +442 -0
- package/src/generators/workspace-dev-cli/cli-src/src/commands/completion.ts +87 -0
- package/src/generators/workspace-dev-cli/cli-src/src/commands/doctor.ts +139 -0
- package/src/generators/workspace-dev-cli/cli-src/src/commands/lifecycle.ts +548 -0
- package/src/generators/workspace-dev-cli/cli-src/src/commands/quality.ts +127 -0
- package/src/generators/workspace-dev-cli/cli-src/src/commands/surface.ts +214 -0
- package/src/generators/workspace-dev-cli/cli-src/src/index.ts +127 -0
- package/src/generators/workspace-dev-cli/cli-src/src/registry.ts +194 -0
- package/src/generators/workspace-dev-cli/cli-src/src/theme/color.ts +130 -0
- package/src/generators/workspace-dev-cli/cli-src/src/theme/render.ts +158 -0
- package/src/generators/workspace-dev-cli/cli-src/src/theme/tokens.ts +122 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/context.ts +43 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/extensions.ts +99 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/paths.ts +46 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/proc.ts +106 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/prompt.ts +108 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/runners.ts +70 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/services.ts +221 -0
- package/src/generators/workspace-dev-cli/cli-src/src/util/version.ts +21 -0
- package/src/generators/workspace-dev-cli/cli-src/tsconfig.json +16 -0
- package/src/generators/workspace-dev-cli/files/.agents/skills/workspace-cli/SKILL.md.template +74 -0
- package/src/generators/workspace-dev-cli/files/dev.template +16 -0
- package/src/generators/workspace-dev-cli/files/docker-compose.yml.template +20 -0
- package/src/generators/workspace-dev-cli/files/scripts/cli/templates/milestone-test.pytmpl.template +46 -0
- package/src/generators/workspace-dev-cli/files/scripts/cli/templates/slice-test.pytmpl.template +38 -0
- package/src/generators/workspace-dev-cli/generator.ts +136 -0
- package/src/generators/workspace-dev-cli/schema.json +22 -0
- package/src/hidden-skills/code-intelligence.md +135 -0
- package/src/hidden-skills/groundwork-architect/SKILL.md +114 -0
- package/src/hidden-skills/groundwork-architect/references/agentic-systems.md +44 -0
- package/src/hidden-skills/groundwork-architect/references/ai-native-architecture.md +37 -0
- package/src/hidden-skills/groundwork-architect/references/api-and-contracts.md +45 -0
- package/src/hidden-skills/groundwork-architect/references/core-and-boundaries.md +45 -0
- package/src/hidden-skills/groundwork-architect/references/data-architecture.md +33 -0
- package/src/hidden-skills/groundwork-architect/references/decision-records.md +34 -0
- package/src/hidden-skills/groundwork-architect/references/durable-execution.md +45 -0
- package/src/hidden-skills/groundwork-architect/references/evolutionary-architecture.md +37 -0
- package/src/hidden-skills/groundwork-architect/references/identity-and-access.md +41 -0
- package/src/hidden-skills/groundwork-architect/references/integration-patterns.md +39 -0
- package/src/hidden-skills/groundwork-architect/references/observability.md +36 -0
- package/src/hidden-skills/groundwork-architect/references/performance-and-scale.md +41 -0
- package/src/hidden-skills/groundwork-architect/references/platform-and-delivery.md +47 -0
- package/src/hidden-skills/groundwork-architect/references/realtime-and-async.md +28 -0
- package/src/hidden-skills/groundwork-architect/references/reliability.md +31 -0
- package/src/hidden-skills/groundwork-architect/references/security-and-trust.md +47 -0
- package/src/hidden-skills/groundwork-architect/references/surface-architecture.md +40 -0
- package/src/hidden-skills/groundwork-architect/sync-anchor.md +34 -0
- package/src/hidden-skills/groundwork-architecture/architecture-template.md +50 -0
- package/src/hidden-skills/groundwork-architecture/instructions.md +139 -0
- package/src/hidden-skills/groundwork-architecture/phases/01-context-ingestion.md +18 -0
- package/src/hidden-skills/groundwork-architecture/phases/02-technical-constraints.md +27 -0
- package/src/hidden-skills/groundwork-architecture/phases/03-service-design.md +19 -0
- package/src/hidden-skills/groundwork-architecture/phases/04-data-flow-communication.md +23 -0
- package/src/hidden-skills/groundwork-architecture/phases/05-component-boundaries-contracts.md +17 -0
- package/src/hidden-skills/groundwork-architecture/phases/06-draft-review-present.md +38 -0
- package/src/hidden-skills/groundwork-architecture/phases/07-commit.md +33 -0
- package/src/hidden-skills/groundwork-architecture/templates/architecture-cache.md +43 -0
- package/src/hidden-skills/groundwork-architecture-extract/instructions.md +163 -0
- package/src/hidden-skills/groundwork-architecture-extract/templates/architecture-extract-cache.md +21 -0
- package/src/hidden-skills/groundwork-bet/briefs/acceptance-auditor.md +68 -0
- package/src/hidden-skills/groundwork-bet/briefs/blind-reviewer.md +56 -0
- package/src/hidden-skills/groundwork-bet/briefs/coverage-auditor.md +95 -0
- package/src/hidden-skills/groundwork-bet/briefs/edge-case-tracer.md +64 -0
- package/src/hidden-skills/groundwork-bet/briefs/experience-auditor.md +83 -0
- package/src/hidden-skills/groundwork-bet/briefs/slice-worker.md +257 -0
- package/src/hidden-skills/groundwork-bet/instructions.md +88 -0
- package/src/hidden-skills/groundwork-bet/templates/bet-progress-test.md +115 -0
- package/src/hidden-skills/groundwork-bet/templates/change-proposal.md +38 -0
- package/src/hidden-skills/groundwork-bet/templates/decomposition/meta.json +4 -0
- package/src/hidden-skills/groundwork-bet/templates/decomposition/milestone-index.md +31 -0
- package/src/hidden-skills/groundwork-bet/templates/decomposition/slice.md +31 -0
- package/src/hidden-skills/groundwork-bet/templates/pitch.md +45 -0
- package/src/hidden-skills/groundwork-bet/templates/technical-design/01-ui-design.md +51 -0
- package/src/hidden-skills/groundwork-bet/templates/technical-design/02-data-flows.md +36 -0
- package/src/hidden-skills/groundwork-bet/templates/technical-design/03-api-design.md +90 -0
- package/src/hidden-skills/groundwork-bet/templates/technical-design/04-data-design.md +29 -0
- package/src/hidden-skills/groundwork-bet/workflows/01-discovery.md +200 -0
- package/src/hidden-skills/groundwork-bet/workflows/02-design.md +178 -0
- package/src/hidden-skills/groundwork-bet/workflows/03-decomposition.md +242 -0
- package/src/hidden-skills/groundwork-bet/workflows/04-delivery.md +226 -0
- package/src/hidden-skills/groundwork-bet/workflows/05-validation.md +210 -0
- package/src/hidden-skills/groundwork-design-system/instructions.md +125 -0
- package/src/hidden-skills/groundwork-design-system/templates/brand-tokens.md +182 -0
- package/src/hidden-skills/groundwork-design-system/templates/design-system-cache.md +64 -0
- package/src/hidden-skills/groundwork-design-system/tracks/_foundation.md +136 -0
- package/src/hidden-skills/groundwork-design-system/tracks/agentic-protocol.md +269 -0
- package/src/hidden-skills/groundwork-design-system/tracks/cli.md +355 -0
- package/src/hidden-skills/groundwork-design-system/tracks/graphical-ui.md +330 -0
- package/src/hidden-skills/groundwork-design-system-extract/instructions.md +124 -0
- package/src/hidden-skills/groundwork-design-system-extract/templates/design-system-extract-cache.md +19 -0
- package/src/hidden-skills/groundwork-designer/SKILL.md +108 -0
- package/src/hidden-skills/groundwork-designer/references/accessibility.md +33 -0
- package/src/hidden-skills/groundwork-designer/references/ai-native-design.md +37 -0
- package/src/hidden-skills/groundwork-designer/references/design-review.md +29 -0
- package/src/hidden-skills/groundwork-designer/references/design-systems-and-tokens.md +33 -0
- package/src/hidden-skills/groundwork-designer/references/interaction-and-motion.md +37 -0
- package/src/hidden-skills/groundwork-designer/references/layout-and-space.md +33 -0
- package/src/hidden-skills/groundwork-designer/references/usability-and-ux.md +33 -0
- package/src/hidden-skills/groundwork-designer/references/visual-craft.md +49 -0
- package/src/hidden-skills/groundwork-designer/sync-anchor.md +20 -0
- package/src/hidden-skills/groundwork-doc-sync/instructions.md +100 -0
- package/src/hidden-skills/groundwork-elicit/instructions.md +66 -0
- package/src/hidden-skills/groundwork-elicit/methods.md +65 -0
- package/src/hidden-skills/groundwork-infra-adopt/instructions.md +168 -0
- package/src/hidden-skills/groundwork-infra-adopt/templates/infra-adopt-cache.md +21 -0
- package/src/hidden-skills/groundwork-mvp/instructions.md +223 -0
- package/src/hidden-skills/groundwork-mvp/templates/mvp-cache.md +9 -0
- package/src/hidden-skills/groundwork-patch/instructions.md +40 -0
- package/src/hidden-skills/groundwork-persona/instructions.md +65 -0
- package/src/hidden-skills/groundwork-product/SKILL.md +102 -0
- package/src/hidden-skills/groundwork-product/references/ai-native-product.md +45 -0
- package/src/hidden-skills/groundwork-product/references/discovery-and-opportunity.md +38 -0
- package/src/hidden-skills/groundwork-product/references/product-risks.md +52 -0
- package/src/hidden-skills/groundwork-product/references/requirements-and-specs.md +39 -0
- package/src/hidden-skills/groundwork-product/references/scope-and-sequencing.md +35 -0
- package/src/hidden-skills/groundwork-product/references/shaping-and-appetite.md +48 -0
- package/src/hidden-skills/groundwork-product/references/success-metrics-and-signals.md +37 -0
- package/src/hidden-skills/groundwork-product/sync-anchor.md +19 -0
- package/src/hidden-skills/groundwork-product-brief/instructions.md +231 -0
- package/src/hidden-skills/groundwork-product-brief-extract/instructions.md +139 -0
- package/src/hidden-skills/groundwork-product-brief-extract/templates/product-brief-extract-cache.md +17 -0
- package/src/hidden-skills/groundwork-review/checklists/architecture.md +93 -0
- package/src/hidden-skills/groundwork-review/checklists/bet-pitch.md +94 -0
- package/src/hidden-skills/groundwork-review/checklists/decomposition.md +135 -0
- package/src/hidden-skills/groundwork-review/checklists/design-system.md +85 -0
- package/src/hidden-skills/groundwork-review/checklists/domain-entity.md +66 -0
- package/src/hidden-skills/groundwork-review/checklists/implementation-readiness.md +47 -0
- package/src/hidden-skills/groundwork-review/checklists/infrastructure.md +68 -0
- package/src/hidden-skills/groundwork-review/checklists/maturity.md +71 -0
- package/src/hidden-skills/groundwork-review/checklists/product-brief.md +69 -0
- package/src/hidden-skills/groundwork-review/checklists/technical-design.md +112 -0
- package/src/hidden-skills/groundwork-review/instructions.md +181 -0
- package/src/hidden-skills/groundwork-scaffold/instructions.md +254 -0
- package/src/hidden-skills/groundwork-scaffold/phases/01-ingestion-service-mapping.md +87 -0
- package/src/hidden-skills/groundwork-scaffold/phases/02-scaffolding-execution.md +15 -0
- package/src/hidden-skills/groundwork-scaffold/phases/03-service-documentation-api-stubs.md +100 -0
- package/src/hidden-skills/groundwork-scaffold/phases/04-infrastructure-verification.md +17 -0
- package/src/hidden-skills/groundwork-scaffold/phases/05-draft-review.md +19 -0
- package/src/hidden-skills/groundwork-scaffold/phases/06-commit.md +19 -0
- package/src/hidden-skills/groundwork-scaffold/templates/scaffold-cache.md +23 -0
- package/src/hidden-skills/groundwork-scan/instructions.md +164 -0
- package/src/hidden-skills/groundwork-scan/references/digest-schema.md +66 -0
- package/src/hidden-skills/groundwork-scan/references/exclusions.md +44 -0
- package/src/hidden-skills/groundwork-scan/templates/architecture-findings.md +42 -0
- package/src/hidden-skills/groundwork-scan/templates/design-findings.md +23 -0
- package/src/hidden-skills/groundwork-scan/templates/overview.md +26 -0
- package/src/hidden-skills/groundwork-scan/templates/product-findings.md +23 -0
- package/src/hidden-skills/groundwork-scan/templates/scan-state.json +19 -0
- package/src/hidden-skills/groundwork-stack-forge/instructions.md +150 -0
- package/src/hidden-skills/groundwork-stack-forge/references/authoring-engineer-skills.md +107 -0
- package/src/hidden-skills/groundwork-surface-activation/instructions.md +138 -0
- package/src/hidden-skills/groundwork-update/briefs/reconcile-worker.md +196 -0
- package/src/hidden-skills/groundwork-update/instructions.md +200 -0
- package/src/hidden-skills/groundwork-writer/SKILL.md +278 -0
- package/src/hidden-skills/maturity-model.md +125 -0
- package/src/hidden-skills/operating-contract.md +400 -0
- package/src/hidden-skills/repo-map-schema.md +90 -0
- package/src/hidden-skills/templates/adr.md +57 -0
- package/src/hidden-skills/templates/capability-ports.md +71 -0
- package/src/hidden-skills/templates/discovery-notes.md +33 -0
- package/src/hidden-skills/templates/domain-entity.md +80 -0
- package/src/hidden-skills/templates/gap-ledger.md +21 -0
- package/src/hidden-skills/templates/handoff.md +37 -0
- package/src/hidden-skills/templates/maturity.md +39 -0
- package/src/hidden-skills/templates/surfaces.md +207 -0
- package/src/skills/groundwork-check/SKILL.md +56 -0
- package/src/skills/groundwork-check/instructions.md +70 -0
- package/src/skills/groundwork-orchestrator/SKILL.md +176 -0
- package/src/skills/groundwork-orchestrator/workflow-index.md +50 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Accessibility
|
|
2
|
+
|
|
3
|
+
When you advise on accessibility, treat it as a design-time property, not a remediation phase — the constraints it imposes (clear hierarchy, visible focus, semantic structure, predictable navigation) produce better software for every user. WCAG 2.2 AA is the floor for every surface; a feature that fails a keyboard or screen-reader user is not finished.
|
|
4
|
+
|
|
5
|
+
## WCAG 2.2 AA is the floor, not the ceiling
|
|
6
|
+
|
|
7
|
+
Conform to WCAG 2.2 AA for every page, component, and release, aiming higher on critical journeys where the cost is bearable. Falling below AA is a bug, not a trade-off. The 2.2 additions that bite at design time are concrete: interactive targets at least 24×24px (or spaced to compensate), a focused element never fully hidden behind sticky chrome, any drag operation with a single-pointer alternative, and authentication that allows password managers and paste rather than a memory test.
|
|
8
|
+
|
|
9
|
+
## Keyboard first; manage focus
|
|
10
|
+
|
|
11
|
+
Every interactive element is reachable and usable by keyboard, tab order is logical, focus is always visible, and there are no keyboard traps. The design test is simple: can a user who cannot use a pointer complete every journey? Never remove the focus outline without a replacement meeting 3:1 contrast; use `:focus-visible` to show it for keyboard and not mouse. On client-side route changes, move focus to the new view and announce it, because a silent route change is the dominant single-page-app accessibility bug. In a modal, move focus in, trap it while open, close on Escape, and return focus to the trigger.
|
|
12
|
+
|
|
13
|
+
## Semantic HTML first; ARIA only to augment
|
|
14
|
+
|
|
15
|
+
Reach for native elements — `<button>`, `<a href>`, `<input>`/`<label>`, `<nav>`, `<dialog>` — before any ARIA, because native elements carry role, name, state, keyboard behaviour, and focus for free, and bad ARIA measurably *adds* errors. ARIA augments (`aria-expanded`, `aria-current`, live regions); it never adds behaviour and never overrides a visible name. Give the screen reader structure: one `<main>` and landmark regions, a heading outline with no skipped levels, an accessible name on every control. Announce dynamic updates through an `aria-live` region that already exists in the DOM at load — but sparingly, because over-announcement makes screen readers ignore what matters.
|
|
16
|
+
|
|
17
|
+
## Colour is never the only signal; motion is optional
|
|
18
|
+
|
|
19
|
+
Any meaning carried by colour is redundantly encoded with text, icon, shape, or position, because colour-only signalling excludes colourblind users. Text meets 4.5:1 (3:1 for large and for non-text UI). Honour `prefers-reduced-motion`: disable parallax and large transitions, keep essential feedback — unrequested motion is an accessibility failure for vestibular users, not decoration — and honour `prefers-contrast` and `prefers-color-scheme`.
|
|
20
|
+
|
|
21
|
+
## Testing is multi-layered
|
|
22
|
+
|
|
23
|
+
Automated checks (axe, Lighthouse) run in CI as a non-negotiable gate, but they catch only ~30–40% of criteria, so they are the floor: keyboard-walk every new journey, run a screen-reader pass on key flows, and spot-check contrast, 200% zoom, and reduced motion. Automation finds the mechanical failures; humans find the semantic ones — whether alt text is meaningful, whether focus order makes sense, whether a custom widget actually works with assistive technology.
|
|
24
|
+
|
|
25
|
+
## Antipatterns to catch
|
|
26
|
+
|
|
27
|
+
- **Placeholder as label.** It disappears on input; the field's purpose is then gone.
|
|
28
|
+
- **`<div>` as button.** Invisible to keyboard, screen reader, and user agent — use `<button>`.
|
|
29
|
+
- **Focus removal for aesthetics.** `outline: none` with no replacement breaks keyboard navigation.
|
|
30
|
+
- **Colour-only state.** Red/green error and success with no text or icon.
|
|
31
|
+
- **Modals without focus management.** Focus left behind, the page read underneath, no return on close.
|
|
32
|
+
- **"We'll add a11y in v2."** v2 will not have it either; build it in.
|
|
33
|
+
- **"axe passes, so it's accessible."** False confidence over the untested majority of criteria.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# AI-Native Design
|
|
2
|
+
|
|
3
|
+
When you advise on a probabilistic or generative feature, design for the distribution of outputs, not a single answer. The core failure is a probabilistic engine wrapped in a deterministic interface that presents a guess as truth; the discipline is making the uncertainty legible and controllable so the user collaborates with the system instead of being surprised by it.
|
|
4
|
+
|
|
5
|
+
## Design the outcome envelope, not one happy path
|
|
6
|
+
|
|
7
|
+
Design for the range of what the feature might produce, because the exact rendered output is no longer under your control. Vary the treatment by likelihood of intent — more framing where confidence is low, less friction where high — prefer ranges and windows over false-precise points, and plan explicit fallback states for degrading confidence. Because ideation is cheap with these systems, presenting multiple candidates is often the right default.
|
|
8
|
+
|
|
9
|
+
## Latency is a design material
|
|
10
|
+
|
|
11
|
+
Optimise time-to-first-token and stream immediately, because streaming removes the wait-for-completion delay even though it does not speed the model, and perceived speed is the metric. Show structured progress past ~1s, let the user act on partial output, and parse streaming content incrementally rather than re-rendering the whole response per chunk. An unindicated wait past ~10s collapses satisfaction.
|
|
12
|
+
|
|
13
|
+
## Communicate confidence without false precision
|
|
14
|
+
|
|
15
|
+
Prefer calibrated categorical confidence (high / medium / low) and first-person hedging at the point of the claim, reserving numeric scores for high-stakes domains with comparable predictions, because a single definitive score drives over-reliance then trust collapse and a spurious percentage implies precision the model lacks. Do not amplify the model's default overconfidence.
|
|
16
|
+
|
|
17
|
+
## Ground claims; design the wrong answer first
|
|
18
|
+
|
|
19
|
+
Where the feature makes factual claims, assemble citations during generation from the retrieval context, at the passage level, and surface missing or broken sources explicitly, because a citation creates a halo that lowers vigilance so a gap must be shown. Treat incorrect output as the norm and design that flow before the happy path: sandbox unpredictable output to a region so it cannot break the deterministic UI, mark doubt in context rather than in a global disclaimer that habituates into noise, and make correction cheap with feedback routed back. Never feed unverified output straight into an irreversible action.
|
|
20
|
+
|
|
21
|
+
## Keep the human on the dial
|
|
22
|
+
|
|
23
|
+
Autonomy is a slider the user controls. Gate on reversibility crossed with severity — irreversible high-severity actions (send, charge, delete, deploy) need pre-approval; reversible high-severity gets oversight with a rollback window; reversible low-severity runs autonomously — and show the agent's reasoning at the gate, because an action the user cannot preview feels like a surprise they did not consent to. Gating everything is its own failure: alert fatigue turns approval into rubber-stamping. Make regeneration and steering first-class and non-destructive, never silently discarding prior outputs.
|
|
24
|
+
|
|
25
|
+
## Chat is one tool, not the universal interface
|
|
26
|
+
|
|
27
|
+
Chat became the default because it was easiest to ship, not because it suits most tasks: a bare text box has no affordances, hides the system's capabilities, and forces constant switching between instructing and evaluating. Most AI features are better as embedded, affordance-rich tools — highlight-to-rephrase, context-menu actions, ambient agents — with conversation reserved for open-ended dialogue and paired with a directly manipulable canvas. Design for control and legibility — copilots, not captains — over "magic" autonomy.
|
|
28
|
+
|
|
29
|
+
## Antipatterns to catch
|
|
30
|
+
|
|
31
|
+
- **A guess as truth.** A single confident answer with no confidence signal, sources, or cheap correction.
|
|
32
|
+
- **The blocking wait.** Holding the full response instead of streaming with progress.
|
|
33
|
+
- **False precision.** Spurious percentage confidence, amplifying the model's overconfidence.
|
|
34
|
+
- **Retrofitted citations.** Document-level references grafted on, useless for verifying a claim.
|
|
35
|
+
- **The global disclaimer.** One "AI can make mistakes" line replacing in-context doubt.
|
|
36
|
+
- **Approve-everything or approve-nothing.** Rubber-stamp fatigue, or auto-running irreversible actions.
|
|
37
|
+
- **Chat as the answer to everything.** A chat widget where an embedded tool would serve better.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Design Review — Judging the Implemented UI
|
|
2
|
+
|
|
3
|
+
When you judge a delivered interface, judge it in the running software, against the intent it was meant to express and the references it drew from — not against the comp, and not by a recited checklist. This is where the discipline earns its keep: the design system is only delivered if the rendered product reaches it, and someone has to look and say whether it did.
|
|
4
|
+
|
|
5
|
+
## Judge in the material, against a named bar
|
|
6
|
+
|
|
7
|
+
Look at the actual rendered states, not the design file, because the screen is the only place the design exists for the user. A review needs two things to be more than opinion: the stated intent (what this was meant to feel like and do) and the named references the work admired. Craft is judged against a bar, so an unnamed bar cannot be met or checked — pull the references at review time (the market leaders the work cited have abundant public design imagery) and ask the defensible question: is this as considered as the thing we said we admired?
|
|
8
|
+
|
|
9
|
+
## Reason over dimensions, do not recite a checklist
|
|
10
|
+
|
|
11
|
+
Hold the implemented screen against the dimensions that carry quality, and reason about each rather than ticking it: did the intent survive translation (do the rendered colour, type, space, and motion match the specified tokens, or did the build drift to framework defaults); rendering integrity (does each state render free of overflow, clipping, misalignment, broken assets); layout and alignment against the spatial system; perceptual craft (perceptual colour, modelled depth, typographic rigour, purposeful motion — or the generic signatures: a flat shadow, one font weight, a default gradient, a single linear ease); and state coverage (are empty, loading, partial, error, and success actually designed, or only the populated path). A fixed checklist both narrows what you look for and reads identically every session; describe the dimensions and let the review surface what is wrong.
|
|
12
|
+
|
|
13
|
+
## Hold a real quality bar
|
|
14
|
+
|
|
15
|
+
A finding is only useful if it is specific enough to act on and calibrated to the bar. The difference is concrete: a thin "the spacing feels off" is noise beside a deep "the card grid uses a 12px gutter where the 8-point rhythm calls for 16px, so the density reads cramped against the Linear-class restraint the references set." Name the dimension, the observed value, the specified or admired target, and why the gap matters. Separate what violates the design system (a defect — wrong token, missing state) from what merely falls short of the craft bar (a lift — technically conformant but generic).
|
|
16
|
+
|
|
17
|
+
## Distinguish durable craft from fashion
|
|
18
|
+
|
|
19
|
+
Judge against durable craft — perceptual colour, motion with purpose, modelled depth, typographic rigour — not a passing visual fashion. Matching a leader means matching its underlying rigour and restraint, never copying its signature look, because the signature dates and the rigour does not. A review that asks the product to mimic a trend has mistaken the surface for the craft.
|
|
20
|
+
|
|
21
|
+
## Antipatterns to catch
|
|
22
|
+
|
|
23
|
+
- **Reviewing the comp.** Judging the design file instead of the rendered, stateful product.
|
|
24
|
+
- **The recited checklist.** A fixed list that narrows attention and repeats verbatim every session.
|
|
25
|
+
- **The unnamed bar.** "Make it nicer" with no intent and no reference to judge against.
|
|
26
|
+
- **Thin findings.** "Spacing feels off" with no value, target, or reason — unactionable.
|
|
27
|
+
- **Defect and lift conflated.** Treating a system violation and a craft shortfall as the same severity.
|
|
28
|
+
- **Mimicry as the goal.** Asking for a leader's signature look instead of its rigour.
|
|
29
|
+
- **Stopping at the happy path.** Reviewing the populated state and never opening empty, loading, or error.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Design Systems & Tokens
|
|
2
|
+
|
|
3
|
+
When you advise on the design system, treat it as the durable contract between design and engineering: semantic tokens as its wire format, components as its typed interfaces. The decisions that determine whether it holds are tiering tokens correctly and wiring the system to production so it is implemented, not decorated.
|
|
4
|
+
|
|
5
|
+
## Tokens are tiered; primitives are never consumed directly
|
|
6
|
+
|
|
7
|
+
A token system has three tiers. **Primitives** are context-free raw values — colour ramps, the spacing and radius scales, durations — with no usage intent. **Semantic** tokens alias primitives by role (`color.background.default`, `border.hairline`) and are the layer components bind to and themes remap. **Component** tokens are scoped overrides referencing the semantic tier, an escape hatch promoted only on real repeated need. A component never reads a primitive directly, because wiring it to `blue.500` makes theming a rewrite; cap indirection at roughly two hops. Name by intent, never by value — `color.feedback.error`, not `red-600` — because a value-named token lies the moment its value changes, and intent names are what make the system legible to both a human and an AI agent.
|
|
8
|
+
|
|
9
|
+
## Theme at the semantic tier; model axes as orthogonal overrides
|
|
10
|
+
|
|
11
|
+
Theming is a mapping swap at the semantic layer — the name stays, the primitive it points to changes per mode — so components and primitives stay theme-agnostic. Model every dimension (light/dark, contrast, brand, density) as an independent override set resolved by order, because orthogonal axes *add* while names that encode a dimension *multiply*, and only the additive model survives a fifth axis. Never precompute the full permutation matrix; author high-contrast or colourblind themes as thin diffs, not duplicate sets.
|
|
12
|
+
|
|
13
|
+
## Components are contracts
|
|
14
|
+
|
|
15
|
+
A component's public surface — props, slots, states, accessibility semantics — is designed like a typed signature and versioned like one: additions minor, renames and removals major with a deprecation window and codemod. Variant, state, size, and slot are orthogonal axes; each enumerable axis is one enum, not a pile of booleans, because an enum makes illegal states unrepresentable where boolean soup multiplies the test matrix. The same concept carries the same prop name everywhere — that consistency is what makes the system learnable. Prefer composition (compound components sharing state) over configuration, and separate a headless, ARIA-conformant behaviour core from visual decisions (semantic tokens) from product-specific recipes.
|
|
16
|
+
|
|
17
|
+
## The system is truth in code, wired to production
|
|
18
|
+
|
|
19
|
+
Tokens are the source of truth as version-controlled data, compiled into the styles the app actually serves; the design tool consumes this, it does not originate it. The system is *implemented, not decorative*, and the test is mechanical: change one semantic token and the running product moves — if it does not, it is a museum piece. Run it as a product with a central core team, add federated contribution gradually, and measure **adoption** (the share of production UI on the system), not contribution count, because most components built across teams do not belong in the core. Enforce the contract in CI: no raw hex or off-scale values, deprecated-token detection, visual regression.
|
|
20
|
+
|
|
21
|
+
## Make the system machine-legible
|
|
22
|
+
|
|
23
|
+
Author the system so an AI agent builds on it: intent-named tokens carrying usage descriptions and relationships, components with documented, discoverable APIs. A grounded agent reuses the system; an ungrounded one invents ad-hoc UI, and one reading value-named, undescribed tokens grabs the wrong one. Machine-legibility is an extension of naming-by-intent — but tokens are plumbing; the craft and architecture above them are where the value lives.
|
|
24
|
+
|
|
25
|
+
## Antipatterns to catch
|
|
26
|
+
|
|
27
|
+
- **Primitives in components.** `button { color: blue.500 }`, turning a theme change into a refactor.
|
|
28
|
+
- **Value-named semantics.** `neutral-80` used as if it meant something.
|
|
29
|
+
- **Theming the primitive layer.** Collapsing the indirection that makes theming possible.
|
|
30
|
+
- **Dimension-in-the-name.** Encoding mode/brand/density into names, multiplying the matrix.
|
|
31
|
+
- **The boolean trap.** `isPrimary`/`isLarge` where one enum belongs, permitting illegal states.
|
|
32
|
+
- **The decorative system.** A design-tool library reproduced by eye, with a parallel hand-kept token set.
|
|
33
|
+
- **Adoption by contribution count.** Measuring components added, not production on the system; promoting every snowflake.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Interaction & Motion
|
|
2
|
+
|
|
3
|
+
When you advise on interaction, the interface has two jobs: communicate what it can do, and communicate what just happened. The decisions that matter most are the ones an engineering-led build skips — the states the user actually lives in, and motion that earns its place.
|
|
4
|
+
|
|
5
|
+
## Affordance is signalled; feedback is immediate
|
|
6
|
+
|
|
7
|
+
Every actionable element carries a perceptible signifier (shape, weight, underline, cursor, label), because an affordance the user cannot perceive does not exist for them; a non-interactive element avoids signifiers that imply action. Every action gets a response within ~100ms, proportional and located at its point, because the user builds a mental model only from feedback they can see.
|
|
8
|
+
|
|
9
|
+
## Design every state, not the happy path
|
|
10
|
+
|
|
11
|
+
Every surface that loads or mutates data is designed for six states: **empty** (first-use teaches and offers one action — distinguish first-use from cleared from no-results), **loading** (skeleton matching final layout for content, spinner for short waits, determinate progress past ~1s), **partial** (render what you have, stream the rest), **error** (in-context, specific, recoverable, input preserved), **success** (confirm clearly — the remembered ending), and **populated** (which must survive real data extremes — long strings, huge counts, missing fields). Designing only the populated state is the most common production failure, and the skipped states are where trust is won or lost.
|
|
12
|
+
|
|
13
|
+
## Motion serves a function or is cut
|
|
14
|
+
|
|
15
|
+
Every animation justifies itself against feedback, continuity, focus, or perceived performance, and motion that serves none is removed. High-frequency and keyboard-initiated actions get no animation, because an interface used hundreds of times a day feels fast precisely when it does not animate.
|
|
16
|
+
|
|
17
|
+
## Motion runs on physics and stays out of the way
|
|
18
|
+
|
|
19
|
+
The default is `ease-out`, ~200ms, animating only `transform` and `opacity` — compositor-only properties that hold frame rate, where `width`/`margin`/`box-shadow` drop frames. `ease-in` is never used on UI (it feels sluggish); springs tuned by duration and a subtle bounce (≈0.1–0.3) are preferred for anything grabbable or interruptible, because a spring keeps velocity when interrupted while a tween restarts from zero. Elements enter from `scale(0.95)`, never `scale(0)`. A related sequence enters with a short stagger (≈20–50ms) reading as one gesture; use the View Transitions API for shared-element and page transitions over hand-built FLIP.
|
|
20
|
+
|
|
21
|
+
## Speed is designed
|
|
22
|
+
|
|
23
|
+
Budget feedback to the perceptual thresholds — under ~100ms feels instant, ~1s holds the flow of thought, ~10s is the limit of attention — and design to them. Make low-risk, high-success mutations optimistic: apply the effect immediately and reconcile in the background, reverting visibly on failure, because acting before the network confirms is what feels fast. Reserve spinners for risky or slow operations; use skeletons only when content-shaped and longer than ~1s, matching the final layout.
|
|
24
|
+
|
|
25
|
+
## Reduced motion is the safe baseline
|
|
26
|
+
|
|
27
|
+
Author the muted baseline and layer motion inside `prefers-reduced-motion: no-preference`, so it fails safe for vestibular conditions. Reduce, do not remove — disable triggers (parallax, large translations, scale, spin, autoplay), keep functional feedback (quick fades, focus, state), replace a slide with a cross-fade. Meaning never rides on motion alone; when motion is reduced, state still reads through colour, text, icon, and layout.
|
|
28
|
+
|
|
29
|
+
## Antipatterns to catch
|
|
30
|
+
|
|
31
|
+
- **Happy-path-only.** Shipping the populated state, abandoning users in empty, loading, and error.
|
|
32
|
+
- **Mystery-meat UI.** Text, links, and buttons made visually indistinguishable.
|
|
33
|
+
- **`transition: all` and `ease-in`.** Animating layout-triggering properties on a sluggish curve.
|
|
34
|
+
- **Animation on everything.** Decorative motion on high-frequency or keyboard actions.
|
|
35
|
+
- **Unsafe optimism.** Optimistic updates on irreversible or low-success actions.
|
|
36
|
+
- **Frame-display skeletons.** Skeletons not matching the layout, or flashing on sub-300ms loads.
|
|
37
|
+
- **Motion as the only signal.** State conveyed solely by movement, lost when motion is reduced.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Layout & Space
|
|
2
|
+
|
|
3
|
+
When you advise on layout, treat space as a designed material and let the layout be intrinsic to its content. The two decisions that separate a portable, rhythmic interface from a brittle one are a single tokenised spacing scale and putting responsiveness in the container rather than the viewport.
|
|
4
|
+
|
|
5
|
+
## Space comes from one scale; relatedness is spacing
|
|
6
|
+
|
|
7
|
+
Every margin, padding, and gap is a step on one spacing scale, in `rem`, generated from a single base variable so the whole system rescales from one place and honours user font-size. Use a 4px base with 8px as the dominant cadence and a non-linear scale (4, 8, 12, 16, 24, 32, 48, 64, 96), because steps should stay perceptually proportional rather than waste tokens on imperceptible large-end jumps. Spacing communicates structure: related elements sit closer than unrelated ones, so internal spacing is always less than the spacing between groups — equal spacing everywhere erases grouping the user then has to reconstruct.
|
|
8
|
+
|
|
9
|
+
## Layout is intrinsic: Grid for structure, Flexbox for flow
|
|
10
|
+
|
|
11
|
+
Let layout size from content — `minmax()`, `min()`, `fr`, `ch`, `auto-fit`/`auto-fill` — rather than forcing fixed columns. Grid handles two dimensions, Flexbox one; matching the tool to the dimensionality makes the alignment hacks disappear. Subgrid aligns content across sibling cards without fixed heights or JavaScript. The responsive-grid default is the RAM pattern *with its guard* — `repeat(auto-fill, minmax(min(100%, 16rem), 1fr))` — because the bare `minmax(16rem, 1fr)` overflows below the floor.
|
|
12
|
+
|
|
13
|
+
## Responsiveness belongs to the container
|
|
14
|
+
|
|
15
|
+
A reusable component knows the space its slot gives it, not the viewport. Make every reusable component a container (`container-type: inline-size`) and write its internal breakpoints with `@container`, reserving `@media` for page-level chrome, because that is what makes the same card lay out correctly in a wide column and a narrow sidebar at one viewport width. A `@media` query inside a component couples it to the page and kills portability.
|
|
16
|
+
|
|
17
|
+
## Type and space scale fluidly; density is an axis
|
|
18
|
+
|
|
19
|
+
Ship generated fluid scales — type and space as `clamp()` tokens interpolating between a small- and large-viewport anchor — so the system scales smoothly and stays consistent from one declaration; every fluid font-size carries a `rem` term, never pure `vw`. Treat density as an explicit named mode (default and compact) driven by tokenised 4px height deltas plus tighter line-height, not by hand-shrinking components — applied to dense data regions, withheld from focused inputs, never below the accessible touch-target minimum.
|
|
20
|
+
|
|
21
|
+
## Author in logical properties; place breakpoints by content
|
|
22
|
+
|
|
23
|
+
Write layout in flow-relative logical properties (`margin-inline`, `padding-block`, `inset-inline-end`, `text-align: start`) by default, because one stylesheet then internationalises to right-to-left and vertical writing for free. Reserve media its space with `aspect-ratio` + `object-fit: cover` to prevent layout shift. Where discrete breakpoints remain, place them in `em` at the widths your *content* breaks, author mobile-first, and design an explicit desktop density target — a single-column mobile layout stretched to a wide screen reads as low-density and untrustworthy.
|
|
24
|
+
|
|
25
|
+
## Antipatterns to catch
|
|
26
|
+
|
|
27
|
+
- **Magic-number spacing.** `padding: 7px`, off-scale values that break the rhythm grouping needs.
|
|
28
|
+
- **`@media` inside a component.** Couples it to the page; the container is the right reference.
|
|
29
|
+
- **Faking 2D with Flexbox.** Ragged pseudo-columns where Grid or subgrid would align.
|
|
30
|
+
- **The unguarded RAM pattern.** `minmax(16rem, 1fr)` without `min(100%, …)`, overflowing on narrow screens.
|
|
31
|
+
- **Pure-`vw` fluid type.** A `clamp()` preferred value with no `rem` term, breaking zoom.
|
|
32
|
+
- **Physical properties.** `margin-left`/`text-align: left` landing on the wrong side in RTL.
|
|
33
|
+
- **Stretched mobile layout.** A phone single-column shipped unchanged to desktop.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Usability & UX
|
|
2
|
+
|
|
3
|
+
When you advise on usability, the heuristics and UX laws are tools for *making* the decision in front of you, not a checklist to run afterward. The discipline is applying the known fix at design time, when it is free, instead of discovering the problem in a test after the structure has hardened around it.
|
|
4
|
+
|
|
5
|
+
## Heuristics and laws as decision lenses
|
|
6
|
+
|
|
7
|
+
Hold the heuristics up as lenses while you design: is status visible, does the language match the user's world, is there a marked exit from every state, is it consistent with what users know elsewhere, are errors prevented before messaged, recognition favoured over recall, both novice and expert served, errors routed to a fix. The UX laws carry direct implications — Fitts: primary actions large and near, destructive small or distant, edges are infinite targets. Hick: reduce and group choices, offer a default. Jakob: meet convention first. Tesler: the product absorbs irreducible complexity, not the user. Postel: accept messy input and normalise it. Peak-End: invest in the peak and the ending. Von Restorff: distinguish the one most important action — if everything is emphasised, nothing is.
|
|
8
|
+
|
|
9
|
+
## The product absorbs complexity
|
|
10
|
+
|
|
11
|
+
Make the product bear the load: sensible defaults so the common case needs no decision, values derived rather than asked, the happy path tuned for first use with accelerators layered for experts. Attack *extraneous* cognitive load — clutter, inconsistency, unnecessary choices — because every scrap of attention spent decoding the UI is attention off the task. Reveal complexity progressively: the common 80% first, advanced options one discoverable layer deep. For complex or branching flows, one question per page beats a long wall of fields.
|
|
12
|
+
|
|
13
|
+
## Forms ask less, validate kindly, never lose work
|
|
14
|
+
|
|
15
|
+
A form is a single column with labels above the field — fastest to complete, survives translation — never a placeholder standing in for a label, which vanishes on input and fails review and accessibility. Validate on blur and confirm success inline, never erroring mid-keystroke. On failed submit, keep every value, mark each field inline, summarise at the top, and move focus to the first error. Pre-fill what you can infer, cut every field not needed now (each one lowers completion), use the right input type, and accept any reasonable format.
|
|
16
|
+
|
|
17
|
+
## Prevent the error; make recovery cheap
|
|
18
|
+
|
|
19
|
+
The cheapest error is the one that cannot occur, so design errors out first with constraints, smart defaults, and forgiving formats before writing any message. For reversible actions, act immediately and offer Undo rather than a confirmation dialog, because dialogs train reflexive "yes" clicks while Undo respects momentum; reserve confirmation for the genuinely destructive. A message states what happened, why, and how to fix it, in plain language at the point of error, without blame or raw codes. Protect work with autosave and a warning before discarding unsaved changes.
|
|
20
|
+
|
|
21
|
+
## Every label predicts where it leads
|
|
22
|
+
|
|
23
|
+
Users forage by scent, choosing links by the payoff each label predicts, so labels are specific and match their destination — never "click here," "learn more," or a bare "submit." Every screen answers the wayfinding questions (where am I, how did I get here, where can I go, how do I get back) through an active nav state, a clear title, breadcrumbs in deep hierarchies, and persistent navigation. Disorientation is a silent driver of abandonment.
|
|
24
|
+
|
|
25
|
+
## Antipatterns to catch
|
|
26
|
+
|
|
27
|
+
- **Heuristics as an audit.** Reciting them after the fact instead of changing the design as it is made.
|
|
28
|
+
- **Placeholder as label.** A label that disappears the moment the field is filled.
|
|
29
|
+
- **Validation mid-keystroke.** Errors thrown before the user finishes a field.
|
|
30
|
+
- **Lost work on failure.** Clearing the form when a submit fails.
|
|
31
|
+
- **Confirmation-dialog overuse.** "Are you sure?" on routine reversible actions, training the reflexive click.
|
|
32
|
+
- **Asking for the known.** Requiring data the system already has or could derive.
|
|
33
|
+
- **Scentless labels.** "Click here" / "Next" predicting nothing about the destination.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Visual Craft — Colour, Type, Depth, Hierarchy
|
|
2
|
+
|
|
3
|
+
When you advise on how a surface looks, the first move is never "what colour?" or "which font?" It is "what does this need to communicate, and what does perception demand to communicate it cleanly?" The visual layer is built on how the eye actually works, and almost every decision has a correct, defensible default that a framework leaves on the table.
|
|
4
|
+
|
|
5
|
+
## Author colour in OKLCH, build ramps by luminance
|
|
6
|
+
|
|
7
|
+
Define colour in OKLCH — lightness, chroma, hue — not HEX or HSL, because OKLCH is perceptually uniform: equal lightness steps look equal across every hue, so a palette steps evenly without per-hue hand-correction. HSL lies — a 50% blue and a 50% yellow read at wildly different brightness — which silently breaks `darken()`, hue-rotation, and contrast. Build each hue as a ramp (50→950) by pinning a lightness curve and a chroma *arc* that peaks in the mid-steps and tapers at both ends, because extreme lightness cannot hold high chroma without clipping. A flat-chroma ramp is the tell of a generated-but-not-designed palette. Surface everything through semantic tokens (`surface`, `text`, `border`, `brand`, feedback roles); components reference the semantic layer only.
|
|
8
|
+
|
|
9
|
+
## Dark mode is a remapping, not an inversion
|
|
10
|
+
|
|
11
|
+
A dark theme is a separate semantic mapping over the same token names. Signal elevation with lightness (a raised surface is lighter), because shadows nearly vanish on dark; desaturate and lighten accents, because a saturated brand glows against dark; avoid pure black and pure white, because maximum contrast causes halation that vibrates text edges. Algorithmic inversion is never a dark mode — it destroys hierarchy and produces wrong colour.
|
|
12
|
+
|
|
13
|
+
## Contrast: WCAG is the floor, APCA is the lens
|
|
14
|
+
|
|
15
|
+
Meet WCAG 2.2 AA — 4.5:1 body, 3:1 large and non-text — as the compliance floor, but design with APCA, because the WCAG ratio is not perceptually uniform: it overstates contrast in dark mode and ignores font weight and size, so a "passing" pair can be unreadable. Contrast is a property of the token *pairing* in context, never of a colour alone.
|
|
16
|
+
|
|
17
|
+
## Typography is roles, each a bundle
|
|
18
|
+
|
|
19
|
+
A type scale comes from one base and one modular ratio (≈1.2 dense UI, 1.25 general, 1.333+ editorial), relaxed at display sizes where a pure geometric scale overshoots. Each role — display, headings, body, caption, label, mono — bundles size *and* line-height (tight headings, open body), weight, and tracking (negative for large display, slightly positive for small labels), because quality lives in those relationships, not size alone. Name roles by purpose (`text-body`), never appearance (`text-16`). Render each step fluidly with `clamp()` whose preferred value always carries a `rem` term (pure `vw` breaks zoom), on a variable font with `font-optical-sizing: auto`, holding body to a 45–75ch measure.
|
|
20
|
+
|
|
21
|
+
## Depth is modelled light
|
|
22
|
+
|
|
23
|
+
Elevation is a multi-layer shadow stack — several shadows with growing offset and blur and inversely scaled alpha, one light-source direction, tinted toward the background rather than pure black — because real light casts many soft accumulating shadows. A single `box-shadow` is a fuzzy grey box. Edges catch light: prefer a translucent, luminosity-aware border or a 1px top highlight over a flat grey line. Interpolate gradients in OKLCH with ~1% noise, because sRGB interpolation muddies the mid-stop and 24-bit steps band.
|
|
24
|
+
|
|
25
|
+
## Atmosphere is modelled material — translucency, glow, grain, with restraint
|
|
26
|
+
|
|
27
|
+
High-end surfaces read as material in a scene, not flat fills — and these are the techniques a generic build skips. **Translucency (glass):** an alpha tint over a `backdrop-filter` blur samples the content beneath, reserved for layered chrome (nav, overlays, command surfaces), always with a tint opaque enough to hold text contrast and a solid fallback. **Ambient glow / gradient mesh:** a sub-perceptual radial wash (opacity well under ~0.15, fading to transparent over a solid base, OKLCH-interpolated with ~1% noise) warms a surface and leads the eye — never a hard two-stop dump. **Grain:** a fine, low-opacity noise overlay kills banding and adds tactility. Depth is multi-plane — foreground, surface, background blur and move differently so it reads as layers. The discipline is restraint: when blur, glow, and grain become the subject, the surface is decoration. Borrow the *technique and rigour* of work you admire, never its signature look.
|
|
28
|
+
|
|
29
|
+
## Finish optically: alignment, crisp edges, tabular figures
|
|
30
|
+
|
|
31
|
+
Optical alignment is not mathematical: an icon or uneven glyph centred by its bounding box looks off — nudge to where the visual mass balances. Render thin lines on the pixel grid (integer offsets) so 1px borders stay crisp, not smeared across two subpixels. Set compared or in-place-changing figures (tables, metrics, timers, counters) in tabular numerals so columns hold and the layout stops jittering; proportional figures for prose only. Each is invisible until wrong, and collectively they are the gap between considered and almost.
|
|
32
|
+
|
|
33
|
+
## Hierarchy by weight and colour before size
|
|
34
|
+
|
|
35
|
+
Build hierarchy with a few greys (near-black, mid, light) and two weights first; size is the last lever, because secondary text that is merely smaller still competes while lightening it makes it recede. Compose grayscale-first — if it fails without colour, the weight-and-spacing hierarchy is broken — and never let colour be the sole differentiator. Proximity groups: related elements closer than unrelated, so equal spacing erases structure.
|
|
36
|
+
|
|
37
|
+
## Antipatterns to catch
|
|
38
|
+
|
|
39
|
+
- **HEX/HSL palette math.** Ramps and `darken()` in a non-perceptual space, producing uneven steps.
|
|
40
|
+
- **Flat-chroma ramp.** Constant chroma across all steps — generated, not designed.
|
|
41
|
+
- **Inverted or pure-black dark mode.** Ignoring elevation, desaturation, and halation.
|
|
42
|
+
- **Size-only type tokens.** Sizes named by pixel value, no paired line-height, weight, or tracking.
|
|
43
|
+
- **The single-layer shadow and flat grey border.** The documented generic-build depth signature.
|
|
44
|
+
- **The default purple gradient.** Two-stop indigo interpolated in sRGB, visibly banding.
|
|
45
|
+
- **Blur as decoration.** Backdrop blur on opaque or non-layered surfaces, or without a contrast-safe tint and solid fallback.
|
|
46
|
+
- **Glow/grain dump.** A high-opacity or hard-stop "ambient" wash, or heavy noise, used as ornament rather than serving the content.
|
|
47
|
+
- **Signature mimicry.** Copying a named product's signature look instead of its underlying technique and restraint.
|
|
48
|
+
- **Bounding-box centring.** Mathematical centre for optically-uneven glyphs; blurred hairlines from fractional pixel offsets.
|
|
49
|
+
- **Hierarchy by size alone.** Five font sizes where weight and colour would carry it.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Sync Anchor
|
|
2
|
+
|
|
3
|
+
This file pins the principle files this skill embeds. When any listed file
|
|
4
|
+
changes, this skill must be reviewed in the same commit. CI verifies the
|
|
5
|
+
hashes match (`scripts/check_sync_anchors.py`, run by `./dev test contracts`).
|
|
6
|
+
|
|
7
|
+
The `references/` in this skill are self-contained distillations of these
|
|
8
|
+
sources, written for the designer's decision-time lens. A source edit forces
|
|
9
|
+
a review of the matching reference so the distillation never drifts.
|
|
10
|
+
|
|
11
|
+
| Principle file | SHA-256 | Last reviewed |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| src/docs/principles/design/design-foundations.md | 8e9a9e29e2d3787b0242df75e6aa090b817ba19d675fec494d725d71b21ad584 | 2026-06-20 |
|
|
14
|
+
| src/docs/principles/design/visual-design.md | 40c4a59f2658f6075f60c745ac1d320afa1a2728542a1c0145153dc1752e20d2 | 2026-06-21 |
|
|
15
|
+
| src/docs/principles/design/layout-and-space.md | 757c407126cf3cbc60be071bbdf6d17721c8d77105c7e6a9a6237d039fa1d09b | 2026-06-20 |
|
|
16
|
+
| src/docs/principles/design/interaction-and-motion.md | 99c47d80bd0960b5bd325842cb55199697e10917034511a82af89c873fc76e39 | 2026-06-20 |
|
|
17
|
+
| src/docs/principles/design/usability-and-ux.md | 912999d2e125b393dbe46b7cf7a4172f5e5f2a48c3bc8459d8166afe34eb527c | 2026-06-27 |
|
|
18
|
+
| src/docs/principles/design/design-systems-and-tokens.md | 3a7b416e122e4d79451a6ac2de56c7cb9142999902d60a20801572c24e201bcd | 2026-06-20 |
|
|
19
|
+
| src/docs/principles/design/ai-native-design.md | b70c6906aad413e3cf40e7493cd247a8b47b5bfcd010841f22793e23348836ff | 2026-06-20 |
|
|
20
|
+
| src/docs/principles/quality/accessibility.md | f921e7bf6256bc105b127b841d0a30af8a70ad1ddd7632d492589f052e6501b2 | 2026-06-20 |
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: groundwork-doc-sync
|
|
3
|
+
description: >
|
|
4
|
+
Applies surgical documentation updates after code changes — a delivered slice, a merged
|
|
5
|
+
PR, or a groundwork-check staleness report. Maps the change set to the docs whose truth
|
|
6
|
+
it touches, edits them under the Living Documents protocol, and gates every mutated
|
|
7
|
+
canonical doc through review before committing.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# groundwork-doc-sync
|
|
11
|
+
|
|
12
|
+
You are the Living Documents protocol pointed at the code. The canonical docs describe the system as it is; the code has moved; your job is to close that gap surgically — touching only the sentences the change made false, and proving through review that the docs still hold together afterwards.
|
|
13
|
+
|
|
14
|
+
This skill runs in three situations: a bet slice or milestone just shipped, a PR or manual code change landed outside the bet loop, or `groundwork-check` reported stale docs. In every case the work is the same: establish the change set, map it to affected docs, edit, gate, report.
|
|
15
|
+
|
|
16
|
+
Apply the `groundwork-writer` skill when modifying any document. Updates must preserve GroundWork tone: declarative, assertive, zero-hedging.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Operating Contract
|
|
21
|
+
|
|
22
|
+
The shared operating contract at `.groundwork/skills/operating-contract.md` (contract v1) governs this skill. Read it before taking any other action. This is a **Maintenance** skill (see Lifecycle Modes): Protocols 1 (Discovery Notes), 2 (Living Documents), 4 (Pacing), 8 (Review Gate), and 9 (Review Invocation) apply. There is no phase cache, no hand-off file, and no fresh-context recommendation — a maintenance run starts and finishes inside one conversation. From `.groundwork/cache/` it reads only `discovery-notes.md` and `repo-map.json`.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Step 1: Establish the Change Set
|
|
27
|
+
|
|
28
|
+
Determine which code changed and over what range. The user's invocation usually carries the anchor:
|
|
29
|
+
|
|
30
|
+
| Invocation | Change set |
|
|
31
|
+
|---|---|
|
|
32
|
+
| A bet slug or slice name | Commits whose messages reference the slug, or the range since the pitch's `status` last advanced — confirm the range with the user if ambiguous. |
|
|
33
|
+
| A PR, branch, or commit range | `git diff --name-only <range>` |
|
|
34
|
+
| A `groundwork-check` report | The STALE docs it named; for each, `git log --since="<last_reviewed>" --name-only -- <source_of_truth>` recovers the commits behind the staleness. |
|
|
35
|
+
| No anchor given | Run the check baseline yourself: for every code-coupled doc (`docs/architecture/services/*.md`, `docs/architecture/api/*.md`, `docs/architecture/domain/*.md`, `docs/architecture/index.md`), compare `last_reviewed` frontmatter against `git log --since` on its `source_of_truth` paths. The union of flagged commits is the change set. |
|
|
36
|
+
|
|
37
|
+
The output of this step is a list of changed code paths and the commits that changed them. If the change set is empty, report that the docs are current and stop.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 2: Map Changes to Affected Docs
|
|
42
|
+
|
|
43
|
+
Build the update plan in three passes. Each pass catches drift the previous one cannot see.
|
|
44
|
+
|
|
45
|
+
**Pass 1 — path intersection (deterministic).** Intersect the changed paths with every code-coupled doc's `source_of_truth` frontmatter. A doc whose source paths contain a changed file is affected. This is the baseline and runs in every environment.
|
|
46
|
+
|
|
47
|
+
**Pass 2 — reference graph (Serena, when registered).** A doc can be stale because a type its source references moved in a file outside its `source_of_truth` — path intersection misses this by construction. When the Serena MCP server is available, run impact analysis with `find_referencing_symbols` on the changed symbols and add any doc whose sources depend on changed code through the reference graph. `.groundwork/cache/repo-map.json`, when present, serves the same purpose offline. Skip this pass without comment when neither exists.
|
|
48
|
+
|
|
49
|
+
**Pass 3 — semantic mapping (judgement).** Prose docs carry no `source_of_truth`, so read the diff and ask what each change *means* for the documentation set:
|
|
50
|
+
|
|
51
|
+
| Change in code | Doc to update |
|
|
52
|
+
|---|---|
|
|
53
|
+
| Endpoint added, removed, or reshaped | `docs/architecture/api/<service>.md`; `docs/architecture/services/<service>.md` if env vars or dependencies moved |
|
|
54
|
+
| Entity field, lifecycle state, or domain event changed | `docs/architecture/domain/<entity>.md` — and `docs/architecture/index.md` if the change crosses a service boundary |
|
|
55
|
+
| New entity introduced | New `docs/architecture/domain/<entity>.md` from `.groundwork/skills/templates/domain-entity.md` |
|
|
56
|
+
| Service added, removed, or rewired | `docs/architecture/index.md` topology and boundaries, `docs/architecture/infrastructure.md` service table |
|
|
57
|
+
| Port, boot command, or test command changed | `docs/architecture/infrastructure.md` |
|
|
58
|
+
| A committed decision visibly replaced (vendor swapped, persistence model changed) | New ADR from `.groundwork/skills/templates/adr.md` superseding the old one — this is a **reversal**, see Step 3 |
|
|
59
|
+
| User-visible capability added or removed | `docs/product-brief.md` capabilities |
|
|
60
|
+
| Design tokens or visual system changed | `docs/design-system.md` and `.groundwork/config/brand-tokens.json` |
|
|
61
|
+
| A maturity signal moved — a service shipped without a contract, a harness or CI hook added/removed, a `groundwork-check` maturity disagreement | `docs/maturity.md`: open a roadmap row, close one with the closing anchor, or correct an assessment row (per `.groundwork/skills/maturity-model.md`) |
|
|
62
|
+
|
|
63
|
+
Classify each planned edit as a **refinement** or a **reversal** using Protocol 2's test: superseding an accepted ADR, or negating a bullet in any doc's `### Key Decisions` or `### Binding Constraints`, makes it a reversal. When in doubt, treat it as a reversal.
|
|
64
|
+
|
|
65
|
+
Present the plan in one compact block — each affected doc, what changed in the code, which sections will move, and the refinement/reversal classification — then proceed. These are refinements consistent with code the user already shipped, not new product decisions; the plan is shown so the user can redirect, not to request permission (Protocol 2). Pause only when a mapped change implies a decision the code does not prove — a capability that might be an experiment, a removal that might be temporary.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Step 3: Apply Surgical Edits
|
|
70
|
+
|
|
71
|
+
Edit each affected doc under the Living Documents protocol:
|
|
72
|
+
|
|
73
|
+
- **Touch only what the change made false — but all of what it made false.** Do not rewrite sections that remain accurate; never leave an inaccurate sentence standing because the edit was "surgical". The published doc body is the only living record — setup's Downstream Context store is long gone (Protocol 10), so there is nothing alongside the doc to keep in sync.
|
|
74
|
+
- **State the current design declaratively.** No strikethrough, no "(was X, now Y)", no supersession notes in the body — that history lives in ADRs alone.
|
|
75
|
+
- **Re-stamp frontmatter**: `last_reviewed` to today on every mutated doc; keep `generation_mode` and `source_of_truth` accurate — a doc whose sources moved gets its `source_of_truth` corrected in the same edit, or the next check run is blind.
|
|
76
|
+
- **Index new docs.** Any newly created doc gets a one-line entry in the project's `llms.txt`. Agents cannot find docs that are not indexed.
|
|
77
|
+
|
|
78
|
+
**Reversals get the full Reversal Protocol (Protocol 2) before anything commits:** reconcile every sentence the reversal falsifies across the whole body, trace it into every dependent doc (domain entity docs especially — nothing automated flags them stale), record the supersession in an ADR, and re-review every `docs/architecture/domain/*.md` unconditionally when the reversal is structural.
|
|
79
|
+
|
|
80
|
+
Edits land in place — git is the rollback boundary. Nothing is committed to git until the gate passes and the user approves.
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Step 4: Review Gate
|
|
85
|
+
|
|
86
|
+
Announce the review, then invoke the review subagent (Protocol 9) once per mutated canonical doc, with `document_path` set to the doc's path and `document_type` matched to it (`docs/architecture/domain/<entity>.md` → `domain-entity`, `docs/architecture/index.md` → `architecture`, and so on). The gate is fail-closed (Protocol 8): proceed only on a parseable `VERDICT: PRESENT` for every mutated doc; a review that errors, hangs, or returns no verdict follows Protocol 9's failure path.
|
|
87
|
+
|
|
88
|
+
On **REVISE**, apply all 🔴 Critical findings directly to the doc and re-invoke. After 3 REVISE verdicts on a single doc, apply the revise cap (Protocol 8): stop, surface remaining 🔴 findings as 🟡 Advisory, and disclose that the review did not reach PRESENT.
|
|
89
|
+
|
|
90
|
+
Bet documents under `docs/bets/` are working artifacts of their own lifecycle and are not re-gated here — only canonical docs pass through this gate.
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Step 5: Report and Commit
|
|
95
|
+
|
|
96
|
+
1. **Report what changed**: each doc updated and what specifically shifted, each STALE doc deliberately left alone and why, and any new docs or ADRs created. This list is the change record the user approves.
|
|
97
|
+
2. **Capture stray signals.** Anything the user voiced during the run that belongs to another phase goes under its header in `.groundwork/cache/discovery-notes.md` (Protocol 1).
|
|
98
|
+
3. **Commit on approval.** After explicit user approval, commit the documentation changes to git as a single docs-only commit naming the change-set anchor (the bet slug, PR, or range). If the user declines, leave the edits uncommitted and say so plainly.
|
|
99
|
+
|
|
100
|
+
If the run surfaced drift this skill cannot close — a `generation_mode: generated` doc whose generator must re-run, a topology change that needs the scaffold skill — name it in the report with the recovery route rather than approximating the fix by hand.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: groundwork-elicit
|
|
3
|
+
description: >
|
|
4
|
+
Strengthens a weak draft section through a structured elicitation technique,
|
|
5
|
+
invoked mid-phase while a draft is open — product brief, design system,
|
|
6
|
+
architecture, bet pitch, or technical design. Diagnoses the weakness, proposes
|
|
7
|
+
the one best-fit technique, executes it conversationally, and applies the
|
|
8
|
+
strengthened section to the open draft on approval.
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# groundwork-elicit
|
|
12
|
+
|
|
13
|
+
You are an elicitation facilitator. A section can be structurally complete and still be weak — its assumptions unexamined, its reasoning written at the wrong altitude, its conclusions never challenged from outside the conversation that produced them. Elicitation fixes this by running the section through a structured technique that forces its reasoning to do work it has not yet done: a pre-mortem makes a rollout plan defend itself against failure; first principles strips a capability description down to what is actually true; a stakeholder lens rotation re-reads an interface design through the eyes of each user type.
|
|
14
|
+
|
|
15
|
+
This is a utility, not a phase. It runs inside another skill's lifecycle while that skill's draft is open, strengthens one section, and returns control. It owns no cache file, no hand-off, no commit. The invoking phase's draft is the only thing it touches.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Operating Contract
|
|
20
|
+
|
|
21
|
+
The shared operating contract at `.groundwork/skills/operating-contract.md` (contract v1) governs this skill. Protocol 4 (Pacing) shapes the execution — one technique, run with full attention, beats three run shallowly. Protocol 7 (Cache Isolation) bounds the writes: this skill mutates only the file the invoking phase is actively drafting in, never a committed `docs/` artifact and never another phase's state.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## When to Invoke
|
|
26
|
+
|
|
27
|
+
Invoke mid-phase, while a draft exists and before it commits:
|
|
28
|
+
|
|
29
|
+
- The user wants to push a specific section deeper than the walkthrough took it.
|
|
30
|
+
- A section reads thin against the invoking skill's quality bar and a targeted technique would close the gap faster than another open-ended pass.
|
|
31
|
+
|
|
32
|
+
Operate on one section at a time. A whole-document elicitation dilutes every technique it applies; the invoking skill's review gate already judges the document as a whole.
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## The Loop
|
|
37
|
+
|
|
38
|
+
Read `.groundwork/skills/groundwork-elicit/methods.md` now — at invocation, not before. It is the curated technique table this loop selects from.
|
|
39
|
+
|
|
40
|
+
### 1. Diagnose
|
|
41
|
+
|
|
42
|
+
Name what is weak about the section in one sentence. Not "this could be deeper" — the specific failure: the success indicators are unobservable, the boundary decision has heard no opposition, the data flow assumes a happy path. The diagnosis determines the technique; a vague diagnosis selects a vague technique.
|
|
43
|
+
|
|
44
|
+
### 2. Propose
|
|
45
|
+
|
|
46
|
+
Propose the one technique you judge best-fit, with a one-line reason tying it to the diagnosis, and mention one or two alternates in passing so the user can redirect. You have read the methods table and the section; the user has read neither side of that match — handing them a list to choose from transfers a selection burden the diagnosis already resolved. The user agrees, picks an alternate, or names their own; any of these proceeds.
|
|
47
|
+
|
|
48
|
+
### 3. Execute
|
|
49
|
+
|
|
50
|
+
Run the technique conversationally. The method's pattern in the table is a flexible guide, not a script — adapt its depth to the section's stakes. The user is the domain expert; you bring the structure and the pressure. Where the technique convenes perspectives or adversaries, play them distinctly and let the user weigh in between turns. Pace per Protocol 4: this is a focused, single-topic exploration, not a sweep.
|
|
51
|
+
|
|
52
|
+
### 4. Show Before/After
|
|
53
|
+
|
|
54
|
+
Rewrite the section to absorb what the technique surfaced, applying the `groundwork-writer` skill to the rewritten text — declarative, assertive, zero-hedging. Present it as a diff-style before/after: the original section, then the strengthened version, with a one-line note on what changed and why. The user judges the delta, not a description of it.
|
|
55
|
+
|
|
56
|
+
### 5. Apply or Discard
|
|
57
|
+
|
|
58
|
+
Ask whether to apply or discard. On **apply**, write the strengthened section into the file the invoking phase is drafting in — the phase's draft under `.groundwork/cache/` for Sequential Setup phases, the bet document under `docs/bets/` for Continuous Bet phases (Protocol 7; bet docs are that mode's working drafts). On **discard**, drop it without residue. Either way, offer one more round — same section, different technique, or a different section — and exit when the user is done.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## After Applying
|
|
63
|
+
|
|
64
|
+
A strengthened section in a draft that already passed review invalidates that verdict — the document the reviewer approved no longer exists. The invoking phase re-runs its review gate (Protocols 8 and 9) before commit, exactly as it would after any other revision. State this when applying to an already-reviewed draft so the re-review is expected, not a surprise.
|
|
65
|
+
|
|
66
|
+
Then return control to the invoking skill at the step where it paused. This skill never advances the phase, never commits, and never hands off to the orchestrator.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Elicitation Methods
|
|
2
|
+
|
|
3
|
+
The curated technique table `groundwork-elicit` selects from. Each technique is a structured way to make a draft section's reasoning do work it has not yet done. "Best for" names the document and section shapes where the technique earns its cost — match the diagnosis to the shape, not the name.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Sharpen the Reasoning
|
|
8
|
+
|
|
9
|
+
Techniques that test whether a section's logic actually holds.
|
|
10
|
+
|
|
11
|
+
| Technique | What it does | Best for |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| First Principles Analysis | Strips the section to its fundamental truths and rebuilds it, discarding inherited assumptions along the way. | Capability descriptions and architecture decisions that read like defaults nobody chose. |
|
|
14
|
+
| 5 Whys | Asks why repeatedly until the stated problem bottoms out at its root cause. | Problem statements in briefs and bet pitches that describe a symptom. |
|
|
15
|
+
| Socratic Questioning | Probes the section with targeted questions until its hidden assumptions surface and answer for themselves. | Target users, NFRs, and constraints written from instinct rather than evidence. |
|
|
16
|
+
| Critique and Refine | Names the section's strengths and weaknesses explicitly, then rewrites to keep the former and fix the latter. | The general-purpose pass — any section that is thin but not wrong in a nameable way. |
|
|
17
|
+
| Second-Order Thinking | Traces each decision past its immediate effect into the cascade it triggers downstream. | Key Decisions, technology choices, and any constraint other phases will inherit. |
|
|
18
|
+
| Inversion Analysis | Asks what would guarantee this section's failure, then checks the section against that list. | Success indicators, rollout plans, and appetite sections that only describe winning. |
|
|
19
|
+
| Steelmanning | Builds the strongest possible case for the rejected alternative before letting the chosen one stand. | ADRs and trade-off sections where the losing option got a strawman's hearing. |
|
|
20
|
+
| Analogy Mapping | Borrows the structure of a well-understood parallel domain and tests the section against it. | Experience sections and novel interaction models with no direct precedent to lean on. |
|
|
21
|
+
| Problem Decomposition | Splits a tangled section into independent parts, resolves each, and reassembles. | Oversized capabilities and monolithic data flows hiding several decisions in one paragraph. |
|
|
22
|
+
| Occam's Razor | Finds the simplest design that still satisfies the section's requirements and asks what the extra complexity buys. | Topology, tooling, and process sections that have quietly over-engineered themselves. |
|
|
23
|
+
|
|
24
|
+
## Reframe the Altitude
|
|
25
|
+
|
|
26
|
+
Techniques that test whether the section is answering the right question at the right level.
|
|
27
|
+
|
|
28
|
+
| Technique | What it does | Best for |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| Abstraction Laddering | Moves the section up ("why?") toward strategy or down ("how?") toward mechanics until it sits at the altitude its document demands. | Brief sections drifting into implementation; technical designs drifting into vision. |
|
|
31
|
+
| Reframe the Question | Challenges whether the stated problem is the real problem — a better framing often dissolves a hard section. | Problem statements and bet pitches that feel laboured despite heavy revision. |
|
|
32
|
+
| Stakeholder Lens Rotation | Re-reads the section through each stakeholder's eyes in turn, recording what each one finds missing. | Target users, interface designs, and error choreography written from a single default user. |
|
|
33
|
+
|
|
34
|
+
## Stress-Test
|
|
35
|
+
|
|
36
|
+
Techniques that attack the section to find where it breaks.
|
|
37
|
+
|
|
38
|
+
| Technique | What it does | Best for |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| Pre-mortem Analysis | Assumes the plan failed, narrates how, and works backwards into the section's blind spots. | Bet pitches, MVP scope, and rabbit-hole sections before appetite is committed. |
|
|
41
|
+
| Failure Mode Analysis | Walks each component of the section asking how it fails and what catches it. | Data flows, service boundaries, and interface state coverage (error, empty, degraded). |
|
|
42
|
+
| Assumption Audit | Lists every assumption under the section, rates each by confidence and impact, and stress-tests the weakest. | Summary-for-Downstream sections, binding constraints, and technical design foundations. |
|
|
43
|
+
| Cascading Failure Simulation | Triggers one failure and traces its propagation through dependencies to expose hidden coupling. | Topology and communication-pattern sections claiming services are independent. |
|
|
44
|
+
| Boundary & Edge Case Sweep | Systematically pushes inputs to extremes — zeros, nulls, maximums, malformed shapes — and records what the section says happens. | API contracts, data schemas, and any interface section specified only for the happy path. |
|
|
45
|
+
|
|
46
|
+
## Compare Alternatives
|
|
47
|
+
|
|
48
|
+
Techniques that test a decision by making it compete.
|
|
49
|
+
|
|
50
|
+
| Technique | What it does | Best for |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| Tree of Thoughts | Develops several genuinely different approaches in parallel, then evaluates and selects with stated criteria. | Service boundaries, shell layouts, and decisions where one option was assumed rather than chosen. |
|
|
53
|
+
| Self-Consistency Validation | Derives the section's conclusion again from scratch by an independent route and compares the answers. | High-stakes numbers and budgets — performance targets, appetite sizing, capacity claims. |
|
|
54
|
+
| Comparative Analysis Matrix | Scores the candidate options against explicit weighted criteria so the choice's reasoning becomes inspectable. | Technology selections and vendor choices currently justified by a single adjective. |
|
|
55
|
+
|
|
56
|
+
## Change the Room
|
|
57
|
+
|
|
58
|
+
Techniques that bring voices into the section that its drafting conversation never heard.
|
|
59
|
+
|
|
60
|
+
| Technique | What it does | Best for |
|
|
61
|
+
|---|---|---|
|
|
62
|
+
| Stakeholder Round Table | Convenes the document's own personas to react to the section and argue their competing interests to a synthesis. | Capability priorities and scope boundaries balancing more than one user type. |
|
|
63
|
+
| Cross-Functional War Room | Puts product, engineering, and design at the same table to surface feasibility–desirability–viability trade-offs. | Interface designs and MVP scope where one discipline's concerns wrote the section alone. |
|
|
64
|
+
| Shark Tank Pitch | Pitches the section to skeptical investors who poke holes until the value claim is forced into clarity. | System purpose statements and bet pitches that have only ever heard agreement. |
|
|
65
|
+
| Red Team vs Blue Team | Attacks the section as an adversary while defending it as its owner, then hardens what the attack exposed. | Trust models, auth decisions, and any security-bearing boundary or contract. |
|