@nurix/etna 0.18.20 → 0.18.22
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/README.md +1 -1
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/CLAUDE.md +3 -3
- package/data/harnesses/code/agents/brainstorm.md +1 -1
- package/data/harnesses/code/agents/maintenance.md +8 -7
- package/data/harnesses/code/harness.json +2 -2
- package/data/harnesses/code/rules/database.md +38 -0
- package/data/harnesses/code/rules/express.md +28 -0
- package/data/harnesses/code/rules/frontend.md +14 -0
- package/data/harnesses/code/rules/general.md +2 -40
- package/data/harnesses/code/rules/nomenclature.md +1 -8
- package/data/harnesses/code/rules/nustack.md +150 -0
- package/data/harnesses/code/skills/brainstorm/README.md +4 -4
- package/data/harnesses/code/skills/brainstorm/SKILL.md +5 -3
- package/data/harnesses/code/skills/brainstorm/exit-artifacts.md +15 -11
- package/data/harnesses/code/skills/brainstorm/templates/source-of-truth.md +5 -5
- package/data/harnesses/code/skills/design/SKILL.md +14 -11
- package/data/harnesses/code/skills/design/data/catalog/rules.csv +4 -4
- package/data/harnesses/code/skills/design/data/combinations/Readme.md +29 -0
- package/data/harnesses/code/skills/design/data/combinations/charts.csv +33 -0
- package/data/harnesses/code/skills/design/data/combinations/fonts-known.json +437 -0
- package/data/harnesses/code/skills/design/data/combinations/icons.csv +157 -0
- package/data/harnesses/code/skills/design/data/combinations/landing.csv +38 -0
- package/data/harnesses/code/skills/design/data/combinations/lucide-names.json +2001 -0
- package/data/harnesses/code/skills/design/data/combinations/manifest.json +283 -0
- package/data/harnesses/code/skills/design/data/combinations/palettes.csv +49 -0
- package/data/harnesses/code/skills/design/data/combinations/product-router.csv +80 -0
- package/data/harnesses/code/skills/design/data/combinations/styles.csv +54 -0
- package/data/harnesses/code/skills/design/data/combinations/typography.csv +61 -0
- package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +27 -238
- package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +1 -82
- package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +4 -85
- package/data/harnesses/code/skills/design/data/design-md/library/apple.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/binance.md +4 -87
- package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +7 -86
- package/data/harnesses/code/skills/design/data/design-md/library/cal.md +4 -84
- package/data/harnesses/code/skills/design/data/design-md/library/clay.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +3 -84
- package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +10 -91
- package/data/harnesses/code/skills/design/data/design-md/library/composio.md +2 -84
- package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +3 -85
- package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +7 -90
- package/data/harnesses/code/skills/design/data/design-md/library/expo.md +0 -80
- package/data/harnesses/code/skills/design/data/design-md/library/figma.md +0 -80
- package/data/harnesses/code/skills/design/data/design-md/library/framer.md +5 -85
- package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +9 -91
- package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +9 -89
- package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +0 -115
- package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +5 -85
- package/data/harnesses/code/skills/design/data/design-md/library/meta.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +3 -84
- package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +4 -85
- package/data/harnesses/code/skills/design/data/design-md/library/miro.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +4 -85
- package/data/harnesses/code/skills/design/data/design-md/library/notion.md +4 -84
- package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +6 -87
- package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +9 -91
- package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +5 -88
- package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +9 -89
- package/data/harnesses/code/skills/design/data/design-md/library/resend.md +4 -119
- package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +4 -84
- package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +0 -82
- package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +3 -86
- package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +13 -94
- package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/slack.md +6 -88
- package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +13 -94
- package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +4 -86
- package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +7 -88
- package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +6 -88
- package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +5 -86
- package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +6 -86
- package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +12 -93
- package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +11 -91
- package/data/harnesses/code/skills/design/data/design-md/library/uber.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +2 -82
- package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +11 -126
- package/data/harnesses/code/skills/design/data/design-md/library/warp.md +8 -88
- package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +3 -83
- package/data/harnesses/code/skills/design/data/design-md/library/wired.md +10 -91
- package/data/harnesses/code/skills/design/data/design-md/library/wise.md +7 -90
- package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +6 -88
- package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +9 -89
- package/data/harnesses/code/skills/design/data/design-md/nurix.md +4 -87
- package/data/harnesses/code/skills/design/data/design-tokens/SCHEMA.md +580 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.tokens.json +965 -0
- package/data/harnesses/code/skills/design/data/design-tokens/apple/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/apple/design.tokens.json +954 -0
- package/data/harnesses/code/skills/design/data/design-tokens/binance/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/binance/design.tokens.json +949 -0
- package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.tokens.json +962 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cal/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cal/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clay/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clay/design.tokens.json +953 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.tokens.json +973 -0
- package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.tokens.json +954 -0
- package/data/harnesses/code/skills/design/data/design-tokens/composio/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/composio/design.tokens.json +963 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.tokens.json +968 -0
- package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.tokens.json +981 -0
- package/data/harnesses/code/skills/design/data/design-tokens/expo/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/expo/design.tokens.json +962 -0
- package/data/harnesses/code/skills/design/data/design-tokens/figma/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/figma/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/framer/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/framer/design.tokens.json +959 -0
- package/data/harnesses/code/skills/design/data/design-tokens/goldens.json +251 -0
- package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.tokens.json +965 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.tokens.json +978 -0
- package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.tokens.json +982 -0
- package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.resolver.json +23 -0
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.dark.json +589 -0
- package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.tokens.json +955 -0
- package/data/harnesses/code/skills/design/data/design-tokens/meta/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/meta/design.tokens.json +977 -0
- package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.tokens.json +950 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.tokens.json +976 -0
- package/data/harnesses/code/skills/design/data/design-tokens/miro/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/miro/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.tokens.json +955 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/notion/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/notion/design.tokens.json +953 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.tokens.json +904 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.tokens.json +957 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.tokens.json +945 -0
- package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.tokens.json +953 -0
- package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.tokens.json +955 -0
- package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.resolver.json +23 -0
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.dark.json +613 -0
- package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.json +968 -0
- package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.tokens.json +956 -0
- package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.tokens.json +958 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.tokens.json +980 -0
- package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.tokens.json +964 -0
- package/data/harnesses/code/skills/design/data/design-tokens/slack/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/slack/design.tokens.json +957 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.tokens.json +974 -0
- package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.tokens.json +973 -0
- package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.tokens.json +966 -0
- package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.tokens.json +961 -0
- package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.tokens.json +977 -0
- package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.tokens.json +991 -0
- package/data/harnesses/code/skills/design/data/design-tokens/uber/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/uber/design.tokens.json +966 -0
- package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.tokens.json +988 -0
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.resolver.json +23 -0
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.dark.json +602 -0
- package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.json +974 -0
- package/data/harnesses/code/skills/design/data/design-tokens/warp/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/warp/design.tokens.json +979 -0
- package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.tokens.json +960 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wired/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wired/design.tokens.json +968 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wise/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/wise/design.tokens.json +965 -0
- package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.tokens.json +988 -0
- package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.resolver.json +20 -0
- package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.tokens.json +978 -0
- package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +1 -1
- package/data/harnesses/code/skills/design/references/create.md +14 -9
- package/data/harnesses/code/skills/design/references/diagnosis.md +1 -1
- package/data/harnesses/code/skills/design/references/hard-rules.md +4 -4
- package/data/harnesses/code/skills/design/references/improve.md +11 -9
- package/data/harnesses/code/skills/design/references/introspect.md +1 -1
- package/data/harnesses/code/skills/design/references/personality.md +337 -413
- package/data/harnesses/code/skills/design/scripts/convert-design-md.mjs +1032 -0
- package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +596 -296
- package/data/harnesses/code/skills/design/scripts/{detector.mjs → lib/checks.mjs} +145 -140
- package/data/harnesses/code/skills/design/scripts/lib/golden.mjs +26 -0
- package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +105 -37
- package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +60 -73
- package/data/harnesses/code/skills/design/scripts/render-rung.mjs +1 -1
- package/data/harnesses/code/skills/design/scripts/scaffold.mjs +1 -1
- package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +205 -37
- package/data/harnesses/code/skills/design/scripts/snapshot-goldens.mjs +68 -0
- package/data/harnesses/code/skills/design/scripts/validate-combinations.mjs +314 -0
- package/data/harnesses/code/skills/documentation/SKILL.md +61 -17
- package/data/harnesses/code/skills/documentation/references/examples.md +41 -0
- package/data/harnesses/code/skills/documentation/references/style-guide.md +14 -9
- package/data/harnesses/code/skills/documentation/references/templates.md +306 -52
- package/data/harnesses/etna/CLAUDE.md +3 -3
- package/data/harnesses/etna/agents/brainstorm.md +1 -1
- package/data/harnesses/etna/agents/maintenance.md +8 -7
- package/data/harnesses/etna/harness.json +2 -2
- package/data/harnesses/etna/rules/general.md +2 -40
- package/data/harnesses/etna/rules/nomenclature.md +1 -8
- package/data/harnesses/etna/skills/brainstorm/README.md +4 -4
- package/data/harnesses/etna/skills/brainstorm/SKILL.md +5 -3
- package/data/harnesses/etna/skills/brainstorm/exit-artifacts.md +15 -11
- package/data/harnesses/etna/skills/brainstorm/templates/source-of-truth.md +5 -5
- package/data/harnesses/etna/skills/documentation/SKILL.md +61 -17
- package/data/harnesses/etna/skills/documentation/references/examples.md +41 -0
- package/data/harnesses/etna/skills/documentation/references/style-guide.md +14 -9
- package/data/harnesses/etna/skills/documentation/references/templates.md +306 -52
- package/data/harnesses/mobile/CLAUDE.md +3 -3
- package/data/harnesses/mobile/agents/brainstorm.md +1 -1
- package/data/harnesses/mobile/agents/maintenance.md +8 -7
- package/data/harnesses/mobile/harness.json +2 -2
- package/data/harnesses/mobile/rules/database.md +38 -0
- package/data/harnesses/mobile/rules/general.md +2 -40
- package/data/harnesses/mobile/rules/nomenclature.md +1 -8
- package/data/harnesses/mobile/rules/nustack.md +150 -0
- package/data/harnesses/mobile/skills/brainstorm/README.md +4 -4
- package/data/harnesses/mobile/skills/brainstorm/SKILL.md +5 -3
- package/data/harnesses/mobile/skills/brainstorm/exit-artifacts.md +15 -11
- package/data/harnesses/mobile/skills/brainstorm/templates/source-of-truth.md +5 -5
- package/data/harnesses/mobile/skills/documentation/SKILL.md +61 -17
- package/data/harnesses/mobile/skills/documentation/references/examples.md +41 -0
- package/data/harnesses/mobile/skills/documentation/references/style-guide.md +14 -9
- package/data/harnesses/mobile/skills/documentation/references/templates.md +306 -52
- package/package.json +1 -1
- package/data/harnesses/code/skills/design/scripts/hook-config.json +0 -11
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Documentation Templates
|
|
2
2
|
|
|
3
|
-
Templates for all documentation needs.
|
|
3
|
+
Templates for all documentation needs. Every template is either a **truth document** (states current absolutes, updated in place) or a **record** (dated account of activity, frozen or append-only) — the split is defined in `SKILL.md` § The Two Natures, and each template below names its nature.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
## docs/README.md (Documentation Root)
|
|
8
8
|
|
|
9
|
-
Use for: the entry point for all documentation in a repo. Created during baseline audit.
|
|
9
|
+
Truth document. Use for: the entry point for all documentation in a repo. Created during baseline audit.
|
|
10
10
|
|
|
11
11
|
```
|
|
12
12
|
# {Project Name} Documentation
|
|
@@ -28,10 +28,14 @@ Technical documentation for {project description}.
|
|
|
28
28
|
|
|
29
29
|
## Architecture
|
|
30
30
|
|
|
31
|
-
System design,
|
|
31
|
+
System design, steering docs, and standing decisions — the truth layer.
|
|
32
32
|
|
|
33
|
-
- [system-design.md](architecture/system-design.md) -
|
|
34
|
-
|
|
33
|
+
- [system-design.md](architecture/system-design.md) - System overview: subsystems and key flows
|
|
34
|
+
- [domain-model.md](architecture/domain-model.md) - Entities, relationships, state ownership
|
|
35
|
+
- [glossary.md](architecture/glossary.md) - Project vocabulary
|
|
36
|
+
- [non-goals.md](architecture/non-goals.md) - What this system deliberately does not do
|
|
37
|
+
- [decisions/](architecture/decisions/Readme.md) - Architecture Decisions (ADs)
|
|
38
|
+
{list other architecture docs — api.md, security.md — when present}
|
|
35
39
|
|
|
36
40
|
---
|
|
37
41
|
|
|
@@ -49,17 +53,18 @@ Living reference docs for implemented features (how things currently work).
|
|
|
49
53
|
How to run, develop, and deploy.
|
|
50
54
|
|
|
51
55
|
- [setup.md](operations/setup.md) - Installation and configuration guide
|
|
52
|
-
{list all operations docs}
|
|
56
|
+
{list all operations docs — environment.md when present}
|
|
53
57
|
|
|
54
58
|
---
|
|
55
59
|
|
|
56
60
|
## History
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
The records — everything dated, frozen, or append-only.
|
|
59
63
|
|
|
60
64
|
- [CHANGELOG.md](history/CHANGELOG.md) - Master changelog index
|
|
61
65
|
- [changelog/](history/changelog/) - Individual changelog entries
|
|
62
|
-
- [plans/](history/plans/) -
|
|
66
|
+
- [plans/](history/plans/) - Implementation plans (frozen at completion)
|
|
67
|
+
- [migrations/](history/migrations/) - One-shot migration runbooks (frozen once executed)
|
|
63
68
|
- [research/](history/research/) - Deep-research artifacts (one folder per topic)
|
|
64
69
|
- [backlog.md](history/backlog.md) - Tracked work items and technical debt
|
|
65
70
|
|
|
@@ -74,7 +79,7 @@ See [CLAUDE.md](../CLAUDE.md) for documentation guidelines.
|
|
|
74
79
|
|
|
75
80
|
## docs/structure.md (Authority Map)
|
|
76
81
|
|
|
77
|
-
Use for: defining which folder owns which topic and how docs are maintained.
|
|
82
|
+
Truth document. Use for: defining which folder owns which topic and how docs are maintained.
|
|
78
83
|
|
|
79
84
|
```
|
|
80
85
|
---
|
|
@@ -93,32 +98,41 @@ Each topic has one canonical location. Read from here, not from plans or changel
|
|
|
93
98
|
| Topic | Authority | Key Files |
|
|
94
99
|
| ----- | --------- | --------- |
|
|
95
100
|
| Code-path ownership (path → doc + module) | feature `owns:` frontmatter | the generated ownership index |
|
|
96
|
-
| System
|
|
101
|
+
| System overview | `docs/architecture/` | system-design.md |
|
|
102
|
+
| Steering (domain model, glossary, non-goals) | `docs/architecture/` | domain-model.md, glossary.md, non-goals.md |
|
|
103
|
+
| Architecture decisions (ADs) | `docs/architecture/decisions/` | AD-NNN-*.md |
|
|
104
|
+
| API surface | `docs/architecture/` | api.md |
|
|
105
|
+
| Security | `docs/architecture/` | security.md |
|
|
97
106
|
| Feature behavior | `docs/features/` | {key files} |
|
|
98
107
|
| Setup & development | `docs/operations/` | {key files} |
|
|
108
|
+
| Environment / config surface | `docs/operations/` | environment.md |
|
|
109
|
+
| Testing strategy | `docs/tests/` | strategy.md |
|
|
99
110
|
| Historical plans | `docs/history/plans/` | YYYY-MM-DD-name.md |
|
|
100
111
|
| Change records | `docs/history/changelog/` | Individual entries |
|
|
112
|
+
| Migration runbooks | `docs/history/migrations/` | YYYY-MM-DD-name.md |
|
|
101
113
|
| Deep-research artifacts | `docs/history/research/{topic}/` | README.md + findings.md + sources.md |
|
|
102
|
-
| Brainstorm design records | `docs/
|
|
114
|
+
| Brainstorm design records | `docs/research/{topic}-brainstorming/` (active) → `docs/history/brainstorms/{topic}/` (harvested) | state.md + pillars/ |
|
|
103
115
|
| Backlog | `docs/history/` | backlog.md |
|
|
104
116
|
|
|
105
|
-
##
|
|
117
|
+
## The Two Natures
|
|
106
118
|
|
|
107
|
-
|
|
119
|
+
Every doc is a **truth document** (states current absolutes, topic-named, updated in place) or a **record** (dated account of activity, frozen or append-only). `architecture/`, `features/`, `operations/`, `tests/` hold truth; `history/`, `research/`, `memory/` hold records.
|
|
108
120
|
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
- Feature docs are the living reference
|
|
121
|
+
- Truth documents are rewritten in place when reality changes — the change-story goes to a changelog entry, never into the truth doc's body.
|
|
122
|
+
- Records freeze: plans at `Complete`/`Abandoned`, changelog entries and migration runbooks once written/executed. A scope change is a new dated record that links back.
|
|
123
|
+
- Feature docs are the living reference for implemented features; an AD is the living truth for one decision subject, with its dated journey confined to its Decision Changelog tail.
|
|
112
124
|
|
|
113
125
|
## Folder Rules
|
|
114
126
|
|
|
115
127
|
- `docs/features/`: Living reference for implemented features. Each feature doc **carries** the `owns:` / `module:` / `keywords:` / `status:` frontmatter — `owns:` declares the code-path globs it owns (the only ownership key), `module:` is an optional bounded-context label, `keywords:` are discovery terms, `status:` is `active`/`draft`/`deprecated`. The SessionStart hook unions every feature's `owns:` globs into the injected ownership index.
|
|
116
|
-
- `docs/architecture/`:
|
|
117
|
-
- `docs/operations/`: How-to procedures for setup, development, and deployment. Update when workflows change.
|
|
118
|
-
- `docs/
|
|
119
|
-
- `docs/history/
|
|
128
|
+
- `docs/architecture/`: The truth layer for system-wide shape: overview, domain model, glossary, non-goals, API surface, security, and `decisions/` (ADs — one per subject, updated in place, journey in each AD's Decision Changelog). Update when cross-cutting reality changes.
|
|
129
|
+
- `docs/operations/`: How-to procedures for setup, development, and deployment, plus the environment registry. Update when workflows change. One-shot migrations do NOT live here — they are records (`docs/history/migrations/`).
|
|
130
|
+
- `docs/tests/`: Testing strategy and test docs. Present when the repo has a test posture worth documenting.
|
|
131
|
+
- `docs/history/plans/`: Records. Must have `Status:` field. Never modify after completion.
|
|
132
|
+
- `docs/history/changelog/`: Records. Append-only.
|
|
133
|
+
- `docs/history/migrations/`: Records. One-shot migration/upgrade runbooks — authored before execution, outcome-stamped and frozen after.
|
|
120
134
|
- `docs/history/research/{topic}/`: Deep-research artifacts — the dumped output of a research pass, one folder per topic (conventionally `README.md` synthesis + `findings.md` verified claims & citations + `sources.md`). A point-in-time, cited record — **not** a living authority doc: it owns no code (no `owns:` frontmatter) and is never edited to "stay current." A spec/plan links to it for grounding; a new question gets a new topic folder.
|
|
121
|
-
- `docs/
|
|
135
|
+
- `docs/research/{topic}-brainstorming/` → `docs/history/brainstorms/{topic}/`: Brainstorm design records — the committed Brainstorming-Mode session for a topic (`state.md` + `pillars/`), written by the `brainstorm` skill. An active session lives under `docs/research/`; on close + harvest it **moves** to `docs/history/brainstorms/` and is **kept** as the provenance the truth layer distils from. Each of the two folders carries a `Readme.md` index (the skill reads it at start instead of scanning). Author-created (never scaffolded empty), one folder per design conversation. Owns no code (no `owns:` frontmatter); the harvest copies its conclusions into `architecture/`/`history/`. Retire a topic's folder by hand only when the design line is dead. (Distinct from `docs/history/research/{topic}/` above — that is a frozen deep-research record, not a brainstorm session.)
|
|
122
136
|
- `docs/history/backlog.md`: Tracked work items. Append new items under appropriate priority.
|
|
123
137
|
|
|
124
138
|
## Health Log
|
|
@@ -263,7 +277,7 @@ Memory file initialized during documentation baseline.
|
|
|
263
277
|
|
|
264
278
|
## Feature Documentation — the LLD (docs/features/{feature}.md)
|
|
265
279
|
|
|
266
|
-
Use for: every feature in `docs/features/`. The feature doc is the feature's **LLD (low-level design)**: the same file persists from design (Status: Draft, written in LLD Mode) through implementation to live reference (Status: Active). Sections fill in as the feature matures — no template swap.
|
|
280
|
+
Truth document. Use for: every feature in `docs/features/`. The feature doc is the feature's **LLD (low-level design)**: the same file persists from design (Status: Draft, written in LLD Mode) through implementation to live reference (Status: Active). Sections fill in as the feature matures — no template swap. The body always describes the feature as it currently is; the journey lives in the linked plan and changelog entries.
|
|
267
281
|
|
|
268
282
|
**Required vs optional.** Four things are required in every feature doc: the frontmatter, **Goal**, **Background**, and **Files** — plus **Current Behavior** once research or implementation exists (at Draft it's the pre-feature baseline; at Active it's how the feature works today). Every other section is optional: include it only when the feature has something real to put in it (no Redux → no Redux section; no risks worth naming → no Risks section). A **minimal form** is sanctioned for small features: frontmatter + Goal + a short how-it-works section + Files. A two-screen doc that is accurate beats a full-template doc with empty sections.
|
|
269
283
|
|
|
@@ -415,7 +429,7 @@ Resolved Open Questions can be summarized into Background; unresolved ones stay
|
|
|
415
429
|
|
|
416
430
|
## Changelog
|
|
417
431
|
|
|
418
|
-
Use for: recording code changes with function-level detail.
|
|
432
|
+
Record. Use for: recording code changes with function-level detail. Entries are frozen once written — they describe the change as it shipped, and are never edited to match later reality.
|
|
419
433
|
|
|
420
434
|
Change categories follow the Keep a Changelog vocabulary — **Added / Changed / Deprecated / Removed / Fixed / Security** — the same six the master `CHANGELOG.md` scaffold instructs. Include only the categories that apply; all six share the same bullet shape (function/file, then detail lines).
|
|
421
435
|
|
|
@@ -478,7 +492,7 @@ Brief description of what changed and why.
|
|
|
478
492
|
|
|
479
493
|
## Plan (docs/history/plans/YYYY-MM-DD-feature-name.md)
|
|
480
494
|
|
|
481
|
-
Use for: every implementation plan. Plans are created here directly with `Status: Draft`, flip to `Status: In Progress` when work starts, and freeze at `Status: Complete` or `Status: Abandoned`. Once frozen, never edit — write a new dated plan if scope changes.
|
|
495
|
+
Record. Use for: every implementation plan. Plans are created here directly with `Status: Draft`, flip to `Status: In Progress` when work starts, and freeze at `Status: Complete` or `Status: Abandoned`. Once frozen, never edit — write a new dated plan if scope changes. The plan records the journey; the truth it implemented lives on in the feature doc and any AD it touched.
|
|
482
496
|
|
|
483
497
|
The `boundary` skill parses the **Proposed Changes** sections to check boundary impact before execution. Keep that structure stable — section headings and bullet shape are load-bearing for the parser.
|
|
484
498
|
|
|
@@ -545,7 +559,9 @@ Why this work is happening *now*. Link to the spec for *what* we're building; th
|
|
|
545
559
|
|
|
546
560
|
## Operations Procedure (docs/operations/{procedure}.md)
|
|
547
561
|
|
|
548
|
-
Use for: any
|
|
562
|
+
Truth document. Use for: any **recurring** procedure — setup, development, deployment, maintenance. A procedure is consulted mid-task, not read: exact commands, copy-paste runnable, no narrative. Updated in place whenever the workflow changes.
|
|
563
|
+
|
|
564
|
+
A **one-shot** procedure (a migration, an upgrade, an incident response executed once) is not an operations doc — it is a **Migration Runbook** (record, below). The test: will someone run this again next month? Yes → operations. No → runbook.
|
|
549
565
|
|
|
550
566
|
Required: **Goal**, **Steps**, **Verification**. Optional: Preconditions, Troubleshooting, Rollback — include only when they carry real content.
|
|
551
567
|
|
|
@@ -580,9 +596,46 @@ If a procedure is a deterministic command list run frequently, script it and hav
|
|
|
580
596
|
|
|
581
597
|
---
|
|
582
598
|
|
|
599
|
+
## Migration Runbook (docs/history/migrations/YYYY-MM-DD-{slug}.md)
|
|
600
|
+
|
|
601
|
+
Record. Use for: a **one-shot** migration, upgrade, or data operation — authored before execution, executed once, then outcome-stamped and frozen. Supporting scripts live beside it in a same-named folder when needed (`YYYY-MM-DD-{slug}/`).
|
|
602
|
+
|
|
603
|
+
Required: **Goal**, **Steps**, **Verification**, and — after execution — the **Outcome** stamp. Optional: Preconditions, Rollback.
|
|
604
|
+
|
|
605
|
+
```
|
|
606
|
+
# Migration: {Title}
|
|
607
|
+
|
|
608
|
+
**Goal:** What this migration accomplishes and why it runs now, one or two lines.
|
|
609
|
+
**Executes against:** {environment / database / system}
|
|
610
|
+
|
|
611
|
+
## Preconditions
|
|
612
|
+
|
|
613
|
+
- Backups taken, feature flags set, access confirmed — exact checks
|
|
614
|
+
|
|
615
|
+
## Steps
|
|
616
|
+
|
|
617
|
+
1. One action per step, exact command in a code block
|
|
618
|
+
2. Note expected output where it disambiguates success from failure
|
|
619
|
+
|
|
620
|
+
## Verification
|
|
621
|
+
|
|
622
|
+
- The observable end state that confirms success — exact check commands
|
|
623
|
+
|
|
624
|
+
## Rollback
|
|
625
|
+
|
|
626
|
+
- How to undo, and the point of no return
|
|
627
|
+
|
|
628
|
+
## Outcome
|
|
629
|
+
|
|
630
|
+
<!-- Stamped once, immediately after execution; the file freezes with it. -->
|
|
631
|
+
**Executed:** YYYY-MM-DD — {result: clean | issues encountered + how resolved | aborted + why}
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
---
|
|
635
|
+
|
|
583
636
|
## Protected Files
|
|
584
637
|
|
|
585
|
-
Use for: documenting critical files that need approval before modification.
|
|
638
|
+
Truth document. Use for: documenting critical files that need approval before modification.
|
|
586
639
|
|
|
587
640
|
This doc answers *what is protected and why breaking it hurts* — nothing more. Don't duplicate function-level detail here (signatures, inputs/outputs): it drifts from both the code and the owning feature doc. The owning feature doc is the canonical reference for how the code works; link to it.
|
|
588
641
|
|
|
@@ -620,19 +673,23 @@ path/to/another/file.js
|
|
|
620
673
|
|
|
621
674
|
---
|
|
622
675
|
|
|
623
|
-
## Architecture Decision
|
|
676
|
+
## Architecture Decision (AD)
|
|
624
677
|
|
|
625
|
-
Use for:
|
|
678
|
+
Truth document — with the one sanctioned dated tail. Use for: the standing decision on one architectural **subject** — a system shape, a contract, a substrate choice. Lives in `docs/architecture/decisions/`. The body always states the current decision and its current reasoning. When the decision moves, rewrite the affected sections to what is now true, bump `last-updated`, and append the revision to the **Decision Changelog** — the journey lives in that tail, never in the body. Head is truth; tail is provenance.
|
|
626
679
|
|
|
627
|
-
###
|
|
680
|
+
### One subject per AD
|
|
628
681
|
|
|
629
|
-
Write
|
|
682
|
+
The unit is the subject, not the individual call. "The persistence layer", "auth", "the design-skill architecture" are subjects; every decision, reversal, and re-decision on a subject lands in that subject's one AD, however many times it moves. Write a second AD only when a genuinely separate subject emerges — never to record a revision of an existing one.
|
|
683
|
+
|
|
684
|
+
### When to write an AD
|
|
685
|
+
|
|
686
|
+
Write an AD when **all three** apply:
|
|
630
687
|
|
|
631
688
|
1. The decision is architectural — affects system shape, contracts, or substrate choice, not internal implementation
|
|
632
689
|
2. Alternatives were genuinely considered and rejected
|
|
633
|
-
3. Future maintainers will ask "why
|
|
690
|
+
3. Future maintainers will ask "why is it this way?"
|
|
634
691
|
|
|
635
|
-
Don't write an
|
|
692
|
+
Don't write an AD for:
|
|
636
693
|
|
|
637
694
|
- Standing principles or style preferences (those are stances, not decisions — put them in `docs/architecture/`)
|
|
638
695
|
- Routine implementation choices with no rejected alternatives
|
|
@@ -642,38 +699,38 @@ Don't write an ADR for:
|
|
|
642
699
|
|
|
643
700
|
`Proposed` → `Accepted` → `Deprecated`
|
|
644
701
|
|
|
645
|
-
An
|
|
702
|
+
Frontmatter `status:` is the single lifecycle source of truth. An AD stays `Accepted` for as long as its subject is live — revisions rewrite the body and never change the status, and there is **no `Superseded` state**: supersession is an edit plus a changelog entry, not a new document. Set `Deprecated` only when the subject itself is retired (the component is gone, the contract no longer exists); state where the replacement lives, if any.
|
|
646
703
|
|
|
647
704
|
### Naming
|
|
648
705
|
|
|
649
|
-
`
|
|
706
|
+
`AD-NNN-short-title.md` — three-digit zero-padded number, kebab-case subject. Numbers are assigned sequentially across the project and never reused.
|
|
650
707
|
|
|
651
708
|
### Structure
|
|
652
709
|
|
|
653
|
-
Three sections are required: **Decision**, **Context**, **Consequences** — plus the **Decision Changelog** once the
|
|
710
|
+
Three sections are required: **Decision**, **Context**, **Consequences** — plus the **Decision Changelog** once the AD has been revised at least once. Everything else is optional — include only when warranted. Decision-first: readers should see the answer in the first paragraph.
|
|
654
711
|
|
|
655
712
|
### Template
|
|
656
713
|
|
|
657
714
|
```markdown
|
|
658
715
|
---
|
|
659
|
-
title: "
|
|
716
|
+
title: "AD-NNN: Short title in sentence case"
|
|
660
717
|
status: Accepted # Proposed | Accepted | Deprecated
|
|
661
718
|
created: YYYY-MM-DD
|
|
662
719
|
last-updated: YYYY-MM-DD # bump on every revision
|
|
663
720
|
decision-owner: Name
|
|
664
721
|
reviewers: [] # optional
|
|
665
|
-
tags: [
|
|
722
|
+
tags: [ad]
|
|
666
723
|
---
|
|
667
724
|
|
|
668
|
-
#
|
|
725
|
+
# AD-NNN: Short Title
|
|
669
726
|
|
|
670
727
|
## Decision
|
|
671
728
|
|
|
672
|
-
[One paragraph, active voice. "We will…" Lead with the answer.]
|
|
729
|
+
[One paragraph, active voice. "We will…" Lead with the answer — the current answer, whatever the journey was.]
|
|
673
730
|
|
|
674
731
|
## Context
|
|
675
732
|
|
|
676
|
-
[The forces in play. What is the problem? Why does it need a decision
|
|
733
|
+
[The forces in play. What is the problem? Why does it need a decision? Technical, political, social, and project-local pressures — stated as present-tense forces, not as a history of the subject.]
|
|
677
734
|
|
|
678
735
|
## Consequences
|
|
679
736
|
|
|
@@ -714,37 +771,234 @@ tags: [adr]
|
|
|
714
771
|
|
|
715
772
|
1. **[Question]** — _Default_: [stated default until resolved].
|
|
716
773
|
|
|
717
|
-
## Acknowledgements
|
|
718
|
-
|
|
719
|
-
[Credit reviewers; name what they corrected. Include when reviewers materially shaped the doc.]
|
|
720
|
-
|
|
721
774
|
## References
|
|
722
775
|
|
|
723
776
|
- [External link or cross-reference]
|
|
724
777
|
|
|
725
778
|
## Decision Changelog
|
|
726
779
|
|
|
727
|
-
<!--
|
|
780
|
+
<!-- The provenance tail — append-only, newest first. One entry per revision: what changed, the trigger, the previous choice, and the plan that implemented it. Added on the first revision; the initial acceptance is the last entry. -->
|
|
728
781
|
|
|
729
|
-
- YYYY-MM-DD — [What changed] because [trigger]. (Previously: [old choice].)
|
|
730
|
-
- YYYY-MM-DD — Initial decision accepted.
|
|
782
|
+
- YYYY-MM-DD — [What changed] because [trigger]. Implemented by [plan link]. (Previously: [old choice].)
|
|
783
|
+
- YYYY-MM-DD — Initial decision accepted. Implemented by [plan link].
|
|
731
784
|
```
|
|
732
785
|
|
|
733
786
|
### Rules
|
|
734
787
|
|
|
735
|
-
- One
|
|
788
|
+
- **One subject per AD; all its revisions stay inside it.** Two genuinely different subjects means two ADs — a revision of an existing subject never does.
|
|
789
|
+
- **The body is always the current truth.** Rewrite affected sections on every revision; never leave a superseded choice narrated in the body — the Decision Changelog carries the journey, with each entry naming the old choice and the trigger.
|
|
736
790
|
- Decision-first. The first paragraph after the heading is the answer; readers should not need to scroll.
|
|
791
|
+
- **Consequences lists positives, negatives, AND risks.** Pros-only Consequences is the genre's classic failure — one AD's honest resulting context is the input context for the next.
|
|
792
|
+
- **Options Considered keeps every genuinely rejected alternative with the real reason.** Informed rejections are the most expensive knowledge to lose; a rejection made with strong prior art in view says so explicitly.
|
|
793
|
+
- **Keep it short — one to two pages.** Long decision docs don't get updated. How-it-works detail belongs in the owning feature doc; execution in a plan. Link, don't embed.
|
|
737
794
|
- No section numbering (`§5.1.1`). Use markdown headings only — inserting a section shouldn't renumber everything.
|
|
738
795
|
- Frontmatter `status` is the single source of truth for lifecycle. Don't also write "Status: Accepted" in the body.
|
|
739
|
-
-
|
|
740
|
-
|
|
741
|
-
|
|
796
|
+
- The Decision Changelog is append-only, newest first. Typo and formatting fixes don't get entries.
|
|
797
|
+
|
|
798
|
+
---
|
|
799
|
+
|
|
800
|
+
## System Overview (docs/architecture/system-design.md)
|
|
801
|
+
|
|
802
|
+
Truth document. Use for: the bird's-eye view — what the system is, its subsystems, and how they connect. The first doc a new reader opens after the README; austere and short (two screens max). Depth lives in feature docs — this doc maps, it doesn't explain.
|
|
803
|
+
|
|
804
|
+
Required: **What this is**, **Subsystem map**. Optional: Key flows, Where the truth lives.
|
|
805
|
+
|
|
806
|
+
```
|
|
807
|
+
# System Overview
|
|
808
|
+
|
|
809
|
+
## What this is
|
|
810
|
+
|
|
811
|
+
{Two or three sentences: what the system does, for whom, in what environment it runs.}
|
|
812
|
+
|
|
813
|
+
## Subsystem map
|
|
814
|
+
|
|
815
|
+
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
816
|
+
│ Frontend │────▶│ API │────▶│ DB │
|
|
817
|
+
└──────────┘ └──────────┘ └──────────┘
|
|
818
|
+
{One box per subsystem; label the arrows with the contract that crosses them.}
|
|
819
|
+
|
|
820
|
+
- **{Subsystem}** — one line: what it owns. → [owning doc](../features/{feature}.md)
|
|
821
|
+
|
|
822
|
+
## Key flows
|
|
823
|
+
|
|
824
|
+
{At most two or three ASCII flow diagrams for the flows everything else hangs off — request lifecycle, auth, the core domain operation.}
|
|
825
|
+
|
|
826
|
+
## Where the truth lives
|
|
827
|
+
|
|
828
|
+
| Area | Canonical doc |
|
|
829
|
+
| ---- | ------------- |
|
|
830
|
+
| {area} | [{doc}](path) |
|
|
831
|
+
```
|
|
832
|
+
|
|
833
|
+
---
|
|
834
|
+
|
|
835
|
+
## Domain Model (docs/architecture/domain-model.md)
|
|
836
|
+
|
|
837
|
+
Truth document. Use for: the entities the system is about — what they are, how they relate, and who owns their state. The vocabulary here must match the glossary and the code; when they disagree, fix the disagreement, don't document around it.
|
|
838
|
+
|
|
839
|
+
Required: **Entities**, **Relationships**. Optional: Lifecycle states, Invariants.
|
|
840
|
+
|
|
841
|
+
```
|
|
842
|
+
# Domain Model
|
|
843
|
+
|
|
844
|
+
## Entities
|
|
845
|
+
|
|
846
|
+
| Entity | What it is | State lives in |
|
|
847
|
+
| ------ | ---------- | -------------- |
|
|
848
|
+
| {Entity} | {one line} | {table / slice / service} |
|
|
849
|
+
|
|
850
|
+
## Relationships
|
|
851
|
+
|
|
852
|
+
- {EntityA} 1—N {EntityB} — {the meaning of the link}
|
|
853
|
+
- {EntityB} N—N {EntityC} via {join} — {meaning}
|
|
854
|
+
|
|
855
|
+
## Lifecycle states
|
|
856
|
+
|
|
857
|
+
{Only for entities with real state machines.}
|
|
858
|
+
|
|
859
|
+
- **{Entity}**: draft → active → archived — {what moves it between states}
|
|
860
|
+
|
|
861
|
+
## Invariants
|
|
862
|
+
|
|
863
|
+
- {A relationship or state rule that must always hold, stated as a constraint}
|
|
864
|
+
```
|
|
865
|
+
|
|
866
|
+
---
|
|
867
|
+
|
|
868
|
+
## Glossary (docs/architecture/glossary.md)
|
|
869
|
+
|
|
870
|
+
Truth document. Use for: the project's vocabulary — one name per concept, one line per name. Alphabetical. When the code uses a different name than the docs, record it in **In code** so readers can bridge; one concept never gets two doc names.
|
|
871
|
+
|
|
872
|
+
```
|
|
873
|
+
# Glossary
|
|
874
|
+
|
|
875
|
+
| Term | Meaning | In code |
|
|
876
|
+
| ---- | ------- | ------- |
|
|
877
|
+
| {Term} | {one-line definition} | `{identifier}` |
|
|
878
|
+
```
|
|
879
|
+
|
|
880
|
+
---
|
|
881
|
+
|
|
882
|
+
## Non-Goals (docs/architecture/non-goals.md)
|
|
883
|
+
|
|
884
|
+
Truth document. Use for: what the system deliberately does **not** do. A non-goal is a decision, not an omission — each entry carries the why and what would reopen it. Readers (and agents) use this to stop re-proposing settled exclusions.
|
|
885
|
+
|
|
886
|
+
```
|
|
887
|
+
# Non-Goals
|
|
888
|
+
|
|
889
|
+
Things this system deliberately does not do. Each is a decision — don't re-propose one without new information of the kind its "revisit if" names.
|
|
890
|
+
|
|
891
|
+
- **{Non-goal}** — {why it's excluded}. Revisit if: {the trigger that would reopen it}.
|
|
892
|
+
```
|
|
893
|
+
|
|
894
|
+
---
|
|
895
|
+
|
|
896
|
+
## API Reference (docs/architecture/api.md)
|
|
897
|
+
|
|
898
|
+
Truth document. Use for: the consolidated catalog of the system's HTTP surface — every live route in one place. This is the **index**: request/response shapes stay in the owning feature docs; this doc answers "what exists and where is it documented." If the repo generates an OpenAPI spec, this doc points at it and carries only what the spec can't (auth model, conventions, ownership links).
|
|
899
|
+
|
|
900
|
+
Required: **Conventions**, the **route tables**. One row per live route; a route that isn't here doesn't exist.
|
|
901
|
+
|
|
902
|
+
```
|
|
903
|
+
# API Reference
|
|
904
|
+
|
|
905
|
+
## Conventions
|
|
906
|
+
|
|
907
|
+
- Base path: `/api/v{N}` · Auth: {scheme} · Envelope: `{ "status": 1, "message": "...", "data": {...} }`
|
|
908
|
+
- Errors: `{ "status": 0, "message": "...", "data": null }` · Codes: 200/201/400/401/403/404/500
|
|
909
|
+
|
|
910
|
+
## {Resource group}
|
|
911
|
+
|
|
912
|
+
| Method | Path | Purpose | Auth | Owning doc |
|
|
913
|
+
| ------ | ---- | ------- | ---- | ---------- |
|
|
914
|
+
| GET | `/api/foo` | {one line} | {role} | [feature](../features/{feature}.md) |
|
|
915
|
+
```
|
|
916
|
+
|
|
917
|
+
---
|
|
918
|
+
|
|
919
|
+
## Environment Registry (docs/operations/environment.md)
|
|
920
|
+
|
|
921
|
+
Truth document. Use for: the config surface — every variable the code reads, in one table. `.env.example` mirrors this doc's variable list.
|
|
922
|
+
|
|
923
|
+
**Placeholders only, never real values.** A real-looking password, account ID, or personal profile name in a doc is a leak, and one developer's local setup written as the canonical value is a trap for everyone else. Values in this doc are `{placeholder}` descriptions.
|
|
924
|
+
|
|
925
|
+
```
|
|
926
|
+
# Environment Registry
|
|
927
|
+
|
|
928
|
+
Every variable the code reads. `.env.example` mirrors this list.
|
|
929
|
+
|
|
930
|
+
| Variable | Purpose | Required | Where set | Secret |
|
|
931
|
+
| -------- | ------- | -------- | --------- | ------ |
|
|
932
|
+
| `DATABASE_URL` | {one line} | yes / default: `{value}` | local `.env` / CI / prod | yes |
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
---
|
|
936
|
+
|
|
937
|
+
## Security Overview (docs/architecture/security.md)
|
|
938
|
+
|
|
939
|
+
Truth document. Use for: the single place the system's security posture is stated — assets, trust boundaries, controls, and accepted risks. Controls link to the code that implements them; this doc asserts, the code proves.
|
|
940
|
+
|
|
941
|
+
Required: **Trust boundaries**, **Controls**. Optional: Assets, Accepted risks.
|
|
942
|
+
|
|
943
|
+
```
|
|
944
|
+
# Security Overview
|
|
945
|
+
|
|
946
|
+
## Assets
|
|
947
|
+
|
|
948
|
+
- {What's worth protecting — data classes, credentials, tenant isolation}
|
|
949
|
+
|
|
950
|
+
## Trust boundaries
|
|
951
|
+
|
|
952
|
+
- {Boundary} — {what crosses it, and what checks the crossing}
|
|
953
|
+
|
|
954
|
+
## Controls
|
|
955
|
+
|
|
956
|
+
| Control | Protects against | Implemented in |
|
|
957
|
+
| ------- | ---------------- | -------------- |
|
|
958
|
+
| {control} | {threat} | `{file/module}` |
|
|
959
|
+
|
|
960
|
+
## Accepted risks
|
|
961
|
+
|
|
962
|
+
- {Risk knowingly carried} — accepted because {reason}; owner: {who}. Revisit if: {trigger}.
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
---
|
|
966
|
+
|
|
967
|
+
## Testing Strategy (docs/tests/strategy.md)
|
|
968
|
+
|
|
969
|
+
Truth document. Use for: the repo's test posture — what is tested at which level, how to run it, and what is deliberately untested. The framework choices come from the harness testing rule; this doc records how *this repo* applies them.
|
|
970
|
+
|
|
971
|
+
Required: **Levels**, **Running**. Optional: Deliberately untested, Adding a test.
|
|
972
|
+
|
|
973
|
+
```
|
|
974
|
+
# Testing Strategy
|
|
975
|
+
|
|
976
|
+
## Levels
|
|
977
|
+
|
|
978
|
+
| Layer | Runner | Lives in | Covers |
|
|
979
|
+
| ----- | ------ | -------- | ------ |
|
|
980
|
+
| Unit / integration | {runner} | `tests/` | {what} |
|
|
981
|
+
| E2E | {runner} | `e2e/` | {what} |
|
|
982
|
+
|
|
983
|
+
## Running
|
|
984
|
+
|
|
985
|
+
- `{pm} test` — the whole unit suite (CI gate)
|
|
986
|
+
- `{pm} run test:e2e` — {when to run}
|
|
987
|
+
|
|
988
|
+
## Deliberately untested
|
|
989
|
+
|
|
990
|
+
- {Area} — {why, and what verifies it instead (typecheck, boot check, manual journey)}
|
|
991
|
+
|
|
992
|
+
## Adding a test
|
|
993
|
+
|
|
994
|
+
1. {Where the file goes, what it's named, where fixtures live}
|
|
995
|
+
```
|
|
742
996
|
|
|
743
997
|
---
|
|
744
998
|
|
|
745
999
|
## Project Root README
|
|
746
1000
|
|
|
747
|
-
Use for: the human-facing entry point at the repository root (`/README.md`) — what visitors and new contributors land on. Distinct from `docs/README.md` (the agent/doc index — see **docs/README.md (Documentation Root)** above). The two coexist; don't merge them.
|
|
1001
|
+
Truth document. Use for: the human-facing entry point at the repository root (`/README.md`) — what visitors and new contributors land on. Distinct from `docs/README.md` (the agent/doc index — see **docs/README.md (Documentation Root)** above). The two coexist; don't merge them.
|
|
748
1002
|
|
|
749
1003
|
### Strategy
|
|
750
1004
|
|
|
@@ -51,7 +51,7 @@ Three peer modes plus a Completion step — enter wherever the user's thinking a
|
|
|
51
51
|
| **LLD** (low-level design) | new component/feature work | `lld-mode` agent + `documentation` skill | Plan |
|
|
52
52
|
| **Plan** | an LLD is approved | `documentation` skill → `docs/history/plans/YYYY-MM-DD-{slug}.md` | Completion |
|
|
53
53
|
|
|
54
|
-
> Brainstorm entry needs a **basis** — a reference document or a one-shot brain dump; drip-sized asks (a one-line fix) are too small and get redirected. A **pillar** is a recorded strategic principle from a past brainstorm:
|
|
54
|
+
> Brainstorm entry needs a **basis** — a reference document or a one-shot brain dump; drip-sized asks (a one-line fix) are too small and get redirected. A **pillar** is a recorded strategic principle from a past brainstorm: in-progress sessions under `docs/research/`, harvested ones under `docs/history/brainstorms/`, harvested doctrine under `docs/architecture/`. The LLD is the feature doc itself — `docs/features/{feature}.md`, design intent first, extended in place at Completion.
|
|
55
55
|
|
|
56
56
|
**On Plan Completion:**
|
|
57
57
|
|
|
@@ -61,8 +61,8 @@ Three peer modes plus a Completion step — enter wherever the user's thinking a
|
|
|
61
61
|
|
|
62
62
|
**On Brainstorm Close** (when a session ends, not when a plan completes):
|
|
63
63
|
|
|
64
|
-
- The session record lives at `docs/
|
|
65
|
-
- Harvest conclusions by scope: doctrine, glossary, non-goals, IA changes → `docs/architecture/`; decisions → `docs/architecture/
|
|
64
|
+
- The session record lives at `docs/research/{topic}-brainstorming/` (committed) while active; on close + harvest it moves to `docs/history/brainstorms/{topic}/` as provenance — see `docs/structure.md`.
|
|
65
|
+
- Harvest conclusions by scope: doctrine, glossary, non-goals, IA changes → `docs/architecture/`; decisions → `docs/architecture/decisions/` (one AD per subject — revising a recorded subject updates its AD in place); backlog items → `docs/history/backlog.md`.
|
|
66
66
|
- Open questions block close.
|
|
67
67
|
|
|
68
68
|
---
|
|
@@ -14,7 +14,7 @@ You are a **thin orchestrator.** Every mechanic — the constant loop, the four
|
|
|
14
14
|
## When to offer a session
|
|
15
15
|
|
|
16
16
|
- An explicit ask to think through a design at a strategic level (not "fix this bug" / "add this button"). This is the user invoking the work; hand it to `/brainstorm start`.
|
|
17
|
-
- A user utterance **challenges a loaded pillar headline.** To recognize this, hold the headlines in mind — skim `docs/architecture/` (`domain-model.md`, `glossary.md`, `non-goals.md`, `open-questions.md`) and its `
|
|
17
|
+
- A user utterance **challenges a loaded pillar headline.** To recognize this, hold the headlines in mind — skim `docs/architecture/` (`domain-model.md`, `glossary.md`, `non-goals.md`, `open-questions.md`) and its `decisions/` AD titles. The steering layer lives there; there are no `docs/modules/` or `docs/pillars/` folders. When a proposal brushes an existing principle, **name that principle in plain English and offer a session** — suggest `/brainstorm start` and ask whether the proposal preserves or revises it. Detection is yours; entry is the user's. **Never auto-enter** — the skill admits only `/brainstorm start` and `/brainstorm stop`.
|
|
18
18
|
|
|
19
19
|
If none of those steering files exist yet (a freshly-baselined repo), a session still runs from the skill's templates, and the basis gate seeds it from a reference doc or a one-shot brain dump.
|
|
20
20
|
|
|
@@ -127,28 +127,29 @@ docs/
|
|
|
127
127
|
├── structure.md # Authority map + frontmatter `harness-version` (you own this field)
|
|
128
128
|
├── architecture/ # Cross-module design + steering layer
|
|
129
129
|
│ │ # domain-model, glossary, non-goals, references, open-questions
|
|
130
|
-
│ └──
|
|
130
|
+
│ └── decisions/ # Architecture Decisions (ADs — one per subject, updated in place; journey in each AD's Decision Changelog)
|
|
131
131
|
├── features/ # Feature specs — the only first-class doc unit (flat; ownership in each doc's `owns:` frontmatter)
|
|
132
132
|
│ └── {group}/ # browse-only subfolder for grouping; NEVER a module; may carry a Readme.md
|
|
133
133
|
├── operations/ # Setup, development, deployment, CI/CD
|
|
134
|
-
├──
|
|
135
|
-
│ └── {topic}/
|
|
134
|
+
├── research/ # Optional — in-progress brainstorm sessions ({topic}-brainstorming/) + standing research; Readme.md is the index
|
|
135
|
+
│ └── {topic}-brainstorming/ # created by the `brainstorm` skill; NOT scaffolded empty; moves to history/brainstorms/ on harvest
|
|
136
136
|
├── history/
|
|
137
137
|
│ ├── CHANGELOG.md # Master changelog index
|
|
138
138
|
│ ├── changelog/ # Individual entries
|
|
139
139
|
│ ├── plans/ # Implementation plans (Status field required)
|
|
140
|
+
│ ├── brainstorms/ # Harvested brainstorm sessions ({topic}/), kept as provenance; Readme.md is the index
|
|
140
141
|
│ └── backlog.md # Tracked work items by priority (P0-P3)
|
|
141
142
|
├── memory/ # index.md, main.md, {agent}.md — project knowledge + per-agent strategy memory
|
|
142
143
|
└── tests/ # Optional, author-maintained — create only if test docs exist
|
|
143
144
|
```
|
|
144
145
|
|
|
145
|
-
There is **no `docs/routing.md`**, **no `docs/modules/{m}/`**, **no `docs/pillars/`**, **no `docs/boundaries/`**. Code ownership lives in feature `owns:` frontmatter; a module is a `module:` label, not a folder; boundaries are diagnosed from source; brainstorm records
|
|
146
|
+
There is **no `docs/routing.md`**, **no `docs/modules/{m}/`**, **no `docs/pillars/`**, **no `docs/boundaries/`**. Code ownership lives in feature `owns:` frontmatter; a module is a `module:` label, not a folder; boundaries are diagnosed from source; brainstorm records live in `docs/research/` (active) and `docs/history/brainstorms/` (harvested).
|
|
146
147
|
|
|
147
|
-
>
|
|
148
|
+
> Brainstorm records are **author-created, never scaffolded** — the `brainstorm` skill writes an active session at `docs/research/{topic}-brainstorming/` and moves it to `docs/history/brainstorms/{topic}/` on harvest, kept (committed) as the provenance the steering pillars distil from. Recognize both as canonical: never flag them as docs "outside the structure" and never delete them during reconcile. Each folder carries a `Readme.md` index — keep it in sync with the folders it lists (every session has a row; no stale or missing rows), since the `brainstorm` skill reads the indexes instead of scanning.
|
|
148
149
|
|
|
149
150
|
### Step B1 — Inventory and classify
|
|
150
151
|
|
|
151
|
-
Glob every markdown file. Classify each: Architecture, Features, Operations, Plans, Changelogs, Backlog, Brainstorm records (stay), Stale/Deprecated (delete), Root docs (stay). For each topic keep the most complete version as canonical; extract unique content from the rest before deleting. **No redirect stubs** — when you move a file, delete the original and fix every reference (cross-doc links, memory files). Anything already under `docs/
|
|
152
|
+
Glob every markdown file. Classify each: Architecture, Features, Operations, Plans, Changelogs, Backlog, Brainstorm records (stay), Stale/Deprecated (delete), Root docs (stay). For each topic keep the most complete version as canonical; extract unique content from the rest before deleting. **No redirect stubs** — when you move a file, delete the original and fix every reference (cross-doc links, memory files). Anything already under `docs/research/{topic}-brainstorming/` or `docs/history/brainstorms/{topic}/` is a **kept design record** — leave it in place untouched; never reclassify its pillars as Architecture/Stale or relocate them.
|
|
152
153
|
|
|
153
154
|
While reading each markdown doc to classify it, if the doc names a code symbol it asserts exists that **statically resolves to nothing**, note it as an observation for the Part A audit — **only** on stacks where static resolution is reliable (stay silent on codegen/reflection/DI/barrel stacks); scoped to docs already being read here, never a whole-repo prose sweep; **docs only**, never code-file comments.
|
|
154
155
|
|
|
@@ -166,7 +167,7 @@ This is what makes baseline more than a fresh scaffold. Detect old-shape artifac
|
|
|
166
167
|
| `docs/OWNERSHIP_INDEX.md` (legacy derived ownership index) | delete — ownership is the union of feature `owns:` frontmatter, surfaced by the generated index |
|
|
167
168
|
| `docs/operations/guardrails.md` | fold durable contract notes into `docs/architecture/` |
|
|
168
169
|
| `docs/architecture/overview.md` | split into `domain-model.md` / `glossary.md` / `non-goals.md` / `references.md` / `open-questions.md` |
|
|
169
|
-
| a
|
|
170
|
+
| a legacy `docs/brainstorm/{topic}/`, or a root `brainstorm/`/`brainstorming/` folder | move each **active** record to `docs/research/{topic}-brainstorming/` and each **harvested** one to `docs/history/brainstorms/{topic}/` (dropping the suffix); create/refresh both `Readme.md` indexes; delete the emptied folder |
|
|
170
171
|
| no `harness-version` in `structure.md` | stamp it (Step B4) |
|
|
171
172
|
|
|
172
173
|
### Step B3 — Present the reconcile plan, then execute
|