@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.
Files changed (272) hide show
  1. package/README.md +1 -1
  2. package/data/harness-index.json +1 -1
  3. package/data/harnesses/code/CLAUDE.md +3 -3
  4. package/data/harnesses/code/agents/brainstorm.md +1 -1
  5. package/data/harnesses/code/agents/maintenance.md +8 -7
  6. package/data/harnesses/code/harness.json +2 -2
  7. package/data/harnesses/code/rules/database.md +38 -0
  8. package/data/harnesses/code/rules/express.md +28 -0
  9. package/data/harnesses/code/rules/frontend.md +14 -0
  10. package/data/harnesses/code/rules/general.md +2 -40
  11. package/data/harnesses/code/rules/nomenclature.md +1 -8
  12. package/data/harnesses/code/rules/nustack.md +150 -0
  13. package/data/harnesses/code/skills/brainstorm/README.md +4 -4
  14. package/data/harnesses/code/skills/brainstorm/SKILL.md +5 -3
  15. package/data/harnesses/code/skills/brainstorm/exit-artifacts.md +15 -11
  16. package/data/harnesses/code/skills/brainstorm/templates/source-of-truth.md +5 -5
  17. package/data/harnesses/code/skills/design/SKILL.md +14 -11
  18. package/data/harnesses/code/skills/design/data/catalog/rules.csv +4 -4
  19. package/data/harnesses/code/skills/design/data/combinations/Readme.md +29 -0
  20. package/data/harnesses/code/skills/design/data/combinations/charts.csv +33 -0
  21. package/data/harnesses/code/skills/design/data/combinations/fonts-known.json +437 -0
  22. package/data/harnesses/code/skills/design/data/combinations/icons.csv +157 -0
  23. package/data/harnesses/code/skills/design/data/combinations/landing.csv +38 -0
  24. package/data/harnesses/code/skills/design/data/combinations/lucide-names.json +2001 -0
  25. package/data/harnesses/code/skills/design/data/combinations/manifest.json +283 -0
  26. package/data/harnesses/code/skills/design/data/combinations/palettes.csv +49 -0
  27. package/data/harnesses/code/skills/design/data/combinations/product-router.csv +80 -0
  28. package/data/harnesses/code/skills/design/data/combinations/styles.csv +54 -0
  29. package/data/harnesses/code/skills/design/data/combinations/typography.csv +61 -0
  30. package/data/harnesses/code/skills/design/data/design-md/SCHEMA.md +27 -238
  31. package/data/harnesses/code/skills/design/data/design-md/library/airbnb.md +7 -88
  32. package/data/harnesses/code/skills/design/data/design-md/library/airtable.md +1 -82
  33. package/data/harnesses/code/skills/design/data/design-md/library/anthropic-claude.md +4 -85
  34. package/data/harnesses/code/skills/design/data/design-md/library/apple.md +5 -86
  35. package/data/harnesses/code/skills/design/data/design-md/library/binance.md +4 -87
  36. package/data/harnesses/code/skills/design/data/design-md/library/bmw.md +7 -86
  37. package/data/harnesses/code/skills/design/data/design-md/library/cal.md +4 -84
  38. package/data/harnesses/code/skills/design/data/design-md/library/clay.md +5 -86
  39. package/data/harnesses/code/skills/design/data/design-md/library/clickhouse.md +3 -84
  40. package/data/harnesses/code/skills/design/data/design-md/library/cohere.md +2 -82
  41. package/data/harnesses/code/skills/design/data/design-md/library/coinbase.md +10 -91
  42. package/data/harnesses/code/skills/design/data/design-md/library/composio.md +2 -84
  43. package/data/harnesses/code/skills/design/data/design-md/library/cursor.md +3 -85
  44. package/data/harnesses/code/skills/design/data/design-md/library/elevenlabs.md +7 -90
  45. package/data/harnesses/code/skills/design/data/design-md/library/expo.md +0 -80
  46. package/data/harnesses/code/skills/design/data/design-md/library/figma.md +0 -80
  47. package/data/harnesses/code/skills/design/data/design-md/library/framer.md +5 -85
  48. package/data/harnesses/code/skills/design/data/design-md/library/hashicorp.md +2 -82
  49. package/data/harnesses/code/skills/design/data/design-md/library/ibm.md +5 -86
  50. package/data/harnesses/code/skills/design/data/design-md/library/intercom.md +9 -91
  51. package/data/harnesses/code/skills/design/data/design-md/library/kraken.md +9 -89
  52. package/data/harnesses/code/skills/design/data/design-md/library/linear-app.md +0 -115
  53. package/data/harnesses/code/skills/design/data/design-md/library/lovable.md +5 -85
  54. package/data/harnesses/code/skills/design/data/design-md/library/meta.md +7 -88
  55. package/data/harnesses/code/skills/design/data/design-md/library/minimax.md +3 -84
  56. package/data/harnesses/code/skills/design/data/design-md/library/mintlify.md +4 -85
  57. package/data/harnesses/code/skills/design/data/design-md/library/miro.md +8 -88
  58. package/data/harnesses/code/skills/design/data/design-md/library/mistral-ai.md +8 -88
  59. package/data/harnesses/code/skills/design/data/design-md/library/mongodb.md +4 -85
  60. package/data/harnesses/code/skills/design/data/design-md/library/notion.md +4 -84
  61. package/data/harnesses/code/skills/design/data/design-md/library/nvidia.md +7 -88
  62. package/data/harnesses/code/skills/design/data/design-md/library/ollama.md +5 -86
  63. package/data/harnesses/code/skills/design/data/design-md/library/opencode-ai.md +6 -87
  64. package/data/harnesses/code/skills/design/data/design-md/library/posthog.md +9 -91
  65. package/data/harnesses/code/skills/design/data/design-md/library/raycast.md +5 -88
  66. package/data/harnesses/code/skills/design/data/design-md/library/replicate.md +9 -89
  67. package/data/harnesses/code/skills/design/data/design-md/library/resend.md +4 -119
  68. package/data/harnesses/code/skills/design/data/design-md/library/revolut.md +4 -84
  69. package/data/harnesses/code/skills/design/data/design-md/library/runwayml.md +0 -82
  70. package/data/harnesses/code/skills/design/data/design-md/library/sanity.md +3 -86
  71. package/data/harnesses/code/skills/design/data/design-md/library/sentry.md +13 -94
  72. package/data/harnesses/code/skills/design/data/design-md/library/shopify.md +2 -82
  73. package/data/harnesses/code/skills/design/data/design-md/library/slack.md +6 -88
  74. package/data/harnesses/code/skills/design/data/design-md/library/spacex.md +13 -94
  75. package/data/harnesses/code/skills/design/data/design-md/library/spotify.md +4 -86
  76. package/data/harnesses/code/skills/design/data/design-md/library/stripe.md +7 -88
  77. package/data/harnesses/code/skills/design/data/design-md/library/supabase.md +6 -88
  78. package/data/harnesses/code/skills/design/data/design-md/library/superhuman.md +5 -86
  79. package/data/harnesses/code/skills/design/data/design-md/library/tesla.md +6 -86
  80. package/data/harnesses/code/skills/design/data/design-md/library/theverge.md +12 -93
  81. package/data/harnesses/code/skills/design/data/design-md/library/together-ai.md +11 -91
  82. package/data/harnesses/code/skills/design/data/design-md/library/uber.md +8 -88
  83. package/data/harnesses/code/skills/design/data/design-md/library/vercel.md +2 -82
  84. package/data/harnesses/code/skills/design/data/design-md/library/voltagent.md +11 -126
  85. package/data/harnesses/code/skills/design/data/design-md/library/warp.md +8 -88
  86. package/data/harnesses/code/skills/design/data/design-md/library/webflow.md +3 -83
  87. package/data/harnesses/code/skills/design/data/design-md/library/wired.md +10 -91
  88. package/data/harnesses/code/skills/design/data/design-md/library/wise.md +7 -90
  89. package/data/harnesses/code/skills/design/data/design-md/library/x-ai.md +6 -88
  90. package/data/harnesses/code/skills/design/data/design-md/library/zapier.md +9 -89
  91. package/data/harnesses/code/skills/design/data/design-md/nurix.md +4 -87
  92. package/data/harnesses/code/skills/design/data/design-tokens/SCHEMA.md +580 -0
  93. package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.resolver.json +20 -0
  94. package/data/harnesses/code/skills/design/data/design-tokens/airbnb/design.tokens.json +964 -0
  95. package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.resolver.json +20 -0
  96. package/data/harnesses/code/skills/design/data/design-tokens/airtable/design.tokens.json +960 -0
  97. package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.resolver.json +20 -0
  98. package/data/harnesses/code/skills/design/data/design-tokens/anthropic-claude/design.tokens.json +965 -0
  99. package/data/harnesses/code/skills/design/data/design-tokens/apple/design.resolver.json +20 -0
  100. package/data/harnesses/code/skills/design/data/design-tokens/apple/design.tokens.json +954 -0
  101. package/data/harnesses/code/skills/design/data/design-tokens/binance/design.resolver.json +20 -0
  102. package/data/harnesses/code/skills/design/data/design-tokens/binance/design.tokens.json +949 -0
  103. package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.resolver.json +20 -0
  104. package/data/harnesses/code/skills/design/data/design-tokens/bmw/design.tokens.json +962 -0
  105. package/data/harnesses/code/skills/design/data/design-tokens/cal/design.resolver.json +20 -0
  106. package/data/harnesses/code/skills/design/data/design-tokens/cal/design.tokens.json +958 -0
  107. package/data/harnesses/code/skills/design/data/design-tokens/clay/design.resolver.json +20 -0
  108. package/data/harnesses/code/skills/design/data/design-tokens/clay/design.tokens.json +953 -0
  109. package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.resolver.json +20 -0
  110. package/data/harnesses/code/skills/design/data/design-tokens/clickhouse/design.tokens.json +960 -0
  111. package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.resolver.json +20 -0
  112. package/data/harnesses/code/skills/design/data/design-tokens/cohere/design.tokens.json +973 -0
  113. package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.resolver.json +20 -0
  114. package/data/harnesses/code/skills/design/data/design-tokens/coinbase/design.tokens.json +954 -0
  115. package/data/harnesses/code/skills/design/data/design-tokens/composio/design.resolver.json +20 -0
  116. package/data/harnesses/code/skills/design/data/design-tokens/composio/design.tokens.json +963 -0
  117. package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.resolver.json +20 -0
  118. package/data/harnesses/code/skills/design/data/design-tokens/cursor/design.tokens.json +968 -0
  119. package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.resolver.json +20 -0
  120. package/data/harnesses/code/skills/design/data/design-tokens/elevenlabs/design.tokens.json +981 -0
  121. package/data/harnesses/code/skills/design/data/design-tokens/expo/design.resolver.json +20 -0
  122. package/data/harnesses/code/skills/design/data/design-tokens/expo/design.tokens.json +962 -0
  123. package/data/harnesses/code/skills/design/data/design-tokens/figma/design.resolver.json +20 -0
  124. package/data/harnesses/code/skills/design/data/design-tokens/figma/design.tokens.json +964 -0
  125. package/data/harnesses/code/skills/design/data/design-tokens/framer/design.resolver.json +20 -0
  126. package/data/harnesses/code/skills/design/data/design-tokens/framer/design.tokens.json +959 -0
  127. package/data/harnesses/code/skills/design/data/design-tokens/goldens.json +251 -0
  128. package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.resolver.json +20 -0
  129. package/data/harnesses/code/skills/design/data/design-tokens/hashicorp/design.tokens.json +965 -0
  130. package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.resolver.json +20 -0
  131. package/data/harnesses/code/skills/design/data/design-tokens/ibm/design.tokens.json +978 -0
  132. package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.resolver.json +20 -0
  133. package/data/harnesses/code/skills/design/data/design-tokens/intercom/design.tokens.json +982 -0
  134. package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.resolver.json +20 -0
  135. package/data/harnesses/code/skills/design/data/design-tokens/kraken/design.tokens.json +958 -0
  136. package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.resolver.json +23 -0
  137. package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.dark.json +589 -0
  138. package/data/harnesses/code/skills/design/data/design-tokens/linear-app/design.tokens.json +964 -0
  139. package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.resolver.json +20 -0
  140. package/data/harnesses/code/skills/design/data/design-tokens/lovable/design.tokens.json +955 -0
  141. package/data/harnesses/code/skills/design/data/design-tokens/meta/design.resolver.json +20 -0
  142. package/data/harnesses/code/skills/design/data/design-tokens/meta/design.tokens.json +977 -0
  143. package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.resolver.json +20 -0
  144. package/data/harnesses/code/skills/design/data/design-tokens/minimax/design.tokens.json +950 -0
  145. package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.resolver.json +20 -0
  146. package/data/harnesses/code/skills/design/data/design-tokens/mintlify/design.tokens.json +976 -0
  147. package/data/harnesses/code/skills/design/data/design-tokens/miro/design.resolver.json +20 -0
  148. package/data/harnesses/code/skills/design/data/design-tokens/miro/design.tokens.json +979 -0
  149. package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.resolver.json +20 -0
  150. package/data/harnesses/code/skills/design/data/design-tokens/mistral-ai/design.tokens.json +955 -0
  151. package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.resolver.json +20 -0
  152. package/data/harnesses/code/skills/design/data/design-tokens/mongodb/design.tokens.json +958 -0
  153. package/data/harnesses/code/skills/design/data/design-tokens/notion/design.resolver.json +20 -0
  154. package/data/harnesses/code/skills/design/data/design-tokens/notion/design.tokens.json +953 -0
  155. package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.resolver.json +20 -0
  156. package/data/harnesses/code/skills/design/data/design-tokens/nurix/design.tokens.json +904 -0
  157. package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.resolver.json +20 -0
  158. package/data/harnesses/code/skills/design/data/design-tokens/nvidia/design.tokens.json +957 -0
  159. package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.resolver.json +20 -0
  160. package/data/harnesses/code/skills/design/data/design-tokens/ollama/design.tokens.json +945 -0
  161. package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.resolver.json +20 -0
  162. package/data/harnesses/code/skills/design/data/design-tokens/opencode-ai/design.tokens.json +960 -0
  163. package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.resolver.json +20 -0
  164. package/data/harnesses/code/skills/design/data/design-tokens/posthog/design.tokens.json +953 -0
  165. package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.resolver.json +20 -0
  166. package/data/harnesses/code/skills/design/data/design-tokens/raycast/design.tokens.json +955 -0
  167. package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.resolver.json +20 -0
  168. package/data/harnesses/code/skills/design/data/design-tokens/replicate/design.tokens.json +958 -0
  169. package/data/harnesses/code/skills/design/data/design-tokens/resend/design.resolver.json +23 -0
  170. package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.dark.json +613 -0
  171. package/data/harnesses/code/skills/design/data/design-tokens/resend/design.tokens.json +968 -0
  172. package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.resolver.json +20 -0
  173. package/data/harnesses/code/skills/design/data/design-tokens/revolut/design.tokens.json +956 -0
  174. package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.resolver.json +20 -0
  175. package/data/harnesses/code/skills/design/data/design-tokens/runwayml/design.tokens.json +960 -0
  176. package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.resolver.json +20 -0
  177. package/data/harnesses/code/skills/design/data/design-tokens/sanity/design.tokens.json +958 -0
  178. package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.resolver.json +20 -0
  179. package/data/harnesses/code/skills/design/data/design-tokens/sentry/design.tokens.json +980 -0
  180. package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.resolver.json +20 -0
  181. package/data/harnesses/code/skills/design/data/design-tokens/shopify/design.tokens.json +964 -0
  182. package/data/harnesses/code/skills/design/data/design-tokens/slack/design.resolver.json +20 -0
  183. package/data/harnesses/code/skills/design/data/design-tokens/slack/design.tokens.json +957 -0
  184. package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.resolver.json +20 -0
  185. package/data/harnesses/code/skills/design/data/design-tokens/spacex/design.tokens.json +979 -0
  186. package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.resolver.json +20 -0
  187. package/data/harnesses/code/skills/design/data/design-tokens/spotify/design.tokens.json +974 -0
  188. package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.resolver.json +20 -0
  189. package/data/harnesses/code/skills/design/data/design-tokens/stripe/design.tokens.json +973 -0
  190. package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.resolver.json +20 -0
  191. package/data/harnesses/code/skills/design/data/design-tokens/supabase/design.tokens.json +979 -0
  192. package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.resolver.json +20 -0
  193. package/data/harnesses/code/skills/design/data/design-tokens/superhuman/design.tokens.json +966 -0
  194. package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.resolver.json +20 -0
  195. package/data/harnesses/code/skills/design/data/design-tokens/tesla/design.tokens.json +961 -0
  196. package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.resolver.json +20 -0
  197. package/data/harnesses/code/skills/design/data/design-tokens/theverge/design.tokens.json +977 -0
  198. package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.resolver.json +20 -0
  199. package/data/harnesses/code/skills/design/data/design-tokens/together-ai/design.tokens.json +991 -0
  200. package/data/harnesses/code/skills/design/data/design-tokens/uber/design.resolver.json +20 -0
  201. package/data/harnesses/code/skills/design/data/design-tokens/uber/design.tokens.json +966 -0
  202. package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.resolver.json +20 -0
  203. package/data/harnesses/code/skills/design/data/design-tokens/vercel/design.tokens.json +988 -0
  204. package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.resolver.json +23 -0
  205. package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.dark.json +602 -0
  206. package/data/harnesses/code/skills/design/data/design-tokens/voltagent/design.tokens.json +974 -0
  207. package/data/harnesses/code/skills/design/data/design-tokens/warp/design.resolver.json +20 -0
  208. package/data/harnesses/code/skills/design/data/design-tokens/warp/design.tokens.json +979 -0
  209. package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.resolver.json +20 -0
  210. package/data/harnesses/code/skills/design/data/design-tokens/webflow/design.tokens.json +960 -0
  211. package/data/harnesses/code/skills/design/data/design-tokens/wired/design.resolver.json +20 -0
  212. package/data/harnesses/code/skills/design/data/design-tokens/wired/design.tokens.json +968 -0
  213. package/data/harnesses/code/skills/design/data/design-tokens/wise/design.resolver.json +20 -0
  214. package/data/harnesses/code/skills/design/data/design-tokens/wise/design.tokens.json +965 -0
  215. package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.resolver.json +20 -0
  216. package/data/harnesses/code/skills/design/data/design-tokens/x-ai/design.tokens.json +988 -0
  217. package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.resolver.json +20 -0
  218. package/data/harnesses/code/skills/design/data/design-tokens/zapier/design.tokens.json +978 -0
  219. package/data/harnesses/code/skills/design/data/operator-pack/surface-catalog.md +1 -1
  220. package/data/harnesses/code/skills/design/references/create.md +14 -9
  221. package/data/harnesses/code/skills/design/references/diagnosis.md +1 -1
  222. package/data/harnesses/code/skills/design/references/hard-rules.md +4 -4
  223. package/data/harnesses/code/skills/design/references/improve.md +11 -9
  224. package/data/harnesses/code/skills/design/references/introspect.md +1 -1
  225. package/data/harnesses/code/skills/design/references/personality.md +337 -413
  226. package/data/harnesses/code/skills/design/scripts/convert-design-md.mjs +1032 -0
  227. package/data/harnesses/code/skills/design/scripts/derive-personality.mjs +596 -296
  228. package/data/harnesses/code/skills/design/scripts/{detector.mjs → lib/checks.mjs} +145 -140
  229. package/data/harnesses/code/skills/design/scripts/lib/golden.mjs +26 -0
  230. package/data/harnesses/code/skills/design/scripts/phase-gate.mjs +105 -37
  231. package/data/harnesses/code/skills/design/scripts/preship-sweep.mjs +60 -73
  232. package/data/harnesses/code/skills/design/scripts/render-rung.mjs +1 -1
  233. package/data/harnesses/code/skills/design/scripts/scaffold.mjs +1 -1
  234. package/data/harnesses/code/skills/design/scripts/self-integrity.mjs +205 -37
  235. package/data/harnesses/code/skills/design/scripts/snapshot-goldens.mjs +68 -0
  236. package/data/harnesses/code/skills/design/scripts/validate-combinations.mjs +314 -0
  237. package/data/harnesses/code/skills/documentation/SKILL.md +61 -17
  238. package/data/harnesses/code/skills/documentation/references/examples.md +41 -0
  239. package/data/harnesses/code/skills/documentation/references/style-guide.md +14 -9
  240. package/data/harnesses/code/skills/documentation/references/templates.md +306 -52
  241. package/data/harnesses/etna/CLAUDE.md +3 -3
  242. package/data/harnesses/etna/agents/brainstorm.md +1 -1
  243. package/data/harnesses/etna/agents/maintenance.md +8 -7
  244. package/data/harnesses/etna/harness.json +2 -2
  245. package/data/harnesses/etna/rules/general.md +2 -40
  246. package/data/harnesses/etna/rules/nomenclature.md +1 -8
  247. package/data/harnesses/etna/skills/brainstorm/README.md +4 -4
  248. package/data/harnesses/etna/skills/brainstorm/SKILL.md +5 -3
  249. package/data/harnesses/etna/skills/brainstorm/exit-artifacts.md +15 -11
  250. package/data/harnesses/etna/skills/brainstorm/templates/source-of-truth.md +5 -5
  251. package/data/harnesses/etna/skills/documentation/SKILL.md +61 -17
  252. package/data/harnesses/etna/skills/documentation/references/examples.md +41 -0
  253. package/data/harnesses/etna/skills/documentation/references/style-guide.md +14 -9
  254. package/data/harnesses/etna/skills/documentation/references/templates.md +306 -52
  255. package/data/harnesses/mobile/CLAUDE.md +3 -3
  256. package/data/harnesses/mobile/agents/brainstorm.md +1 -1
  257. package/data/harnesses/mobile/agents/maintenance.md +8 -7
  258. package/data/harnesses/mobile/harness.json +2 -2
  259. package/data/harnesses/mobile/rules/database.md +38 -0
  260. package/data/harnesses/mobile/rules/general.md +2 -40
  261. package/data/harnesses/mobile/rules/nomenclature.md +1 -8
  262. package/data/harnesses/mobile/rules/nustack.md +150 -0
  263. package/data/harnesses/mobile/skills/brainstorm/README.md +4 -4
  264. package/data/harnesses/mobile/skills/brainstorm/SKILL.md +5 -3
  265. package/data/harnesses/mobile/skills/brainstorm/exit-artifacts.md +15 -11
  266. package/data/harnesses/mobile/skills/brainstorm/templates/source-of-truth.md +5 -5
  267. package/data/harnesses/mobile/skills/documentation/SKILL.md +61 -17
  268. package/data/harnesses/mobile/skills/documentation/references/examples.md +41 -0
  269. package/data/harnesses/mobile/skills/documentation/references/style-guide.md +14 -9
  270. package/data/harnesses/mobile/skills/documentation/references/templates.md +306 -52
  271. package/package.json +1 -1
  272. 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, patterns, and technical decisions.
31
+ System design, steering docs, and standing decisions — the truth layer.
32
32
 
33
- - [system-design.md](architecture/system-design.md) - High-level system architecture
34
- {list all architecture docs}
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
- Everything frozen or append-only.
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/) - Historical implementation 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 architecture + steering | `docs/architecture/` | domain-model, glossary, non-goals, references, adr/ |
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/brainstorm/{topic}/` | state.md + pillars/ |
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
- ## Document Lifecycle
117
+ ## The Two Natures
106
118
 
107
- Plan (Status: Draft) → Implementation → Feature Doc or Architecture Update → Changelog Entry
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
- - Plans freeze at completion — never updated to reflect current code
110
- - Changelogs summarize + link to feature docs — no duplicated schemas
111
- - Feature docs are the living reference — updated when code changes
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/`: System-wide patterns and the cross-module steering layer (domain model, glossary, non-goals, references, ADRs). A module's cross-cutting prose lives here (or in a browse-folder `Readme.md`). Update when cross-cutting concerns change.
117
- - `docs/operations/`: How-to procedures for setup, development, and deployment. Update when workflows change.
118
- - `docs/history/plans/`: Historical. Must have `Status:` field. Never modify after completion.
119
- - `docs/history/changelog/`: Historical. Append-only.
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/brainstorm/{topic}/`: Kept design records — the committed Brainstorming-Mode session for a topic (`state.md` + `pillars/`), written by the `brainstorm` skill and **kept** after harvest as the provenance the steering pillars distil from. Author-created (never scaffolded empty), one subfolder per design conversation. Owns no code (no `owns:` frontmatter); the harvest copies its conclusions into `architecture/`/`history/` while the record stays in place. Retire a topic's folder by hand only when the design line is dead.
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 doc in `docs/operations/` — setup, development, deployment, maintenance procedures. A procedure is consulted mid-task, not read: exact commands, copy-paste runnable, no narrative.
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 Record (ADR)
676
+ ## Architecture Decision (AD)
624
677
 
625
- Use for: capturing a single architectural decision with its context, alternatives considered, and consequences. Lives in `docs/architecture/adr/` — co-located with the architecture it decides. An ADR is the **source of truth for its decision**: the body always states the current truth. When the decision is revisited, update the ADR in place — rewrite the affected sections to what is now true, bump `last-updated`, and record the revision in the **Decision Changelog**. Readers get the current decision from the body; the journey lives only in the changelog section.
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
- ### When to write an ADR
680
+ ### One subject per AD
628
681
 
629
- Write an ADR when **all three** apply:
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 did we do it this way?"
690
+ 3. Future maintainers will ask "why is it this way?"
634
691
 
635
- Don't write an ADR for:
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 ADR stays `Accepted` for as long as its question is live — revisions update it in place. Set `Deprecated` only when the decision's question itself is retired (the component is gone, the contract no longer exists); state where the replacement lives, if any.
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
- `ADR-NNN-short-title.md` — three-digit zero-padded number, kebab-case title. Numbers are assigned sequentially across the project and never reused.
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 ADR 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.
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: "ADR-NNN: Short title in sentence case"
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: [adr]
722
+ tags: [ad]
666
723
  ---
667
724
 
668
- # ADR-NNN: Short Title
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 now? Technical, political, social, and project-local pressures.]
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
- <!-- Append-only, newest first. One entry per revision: what changed in the decision, the trigger, and the previous choice. Added on the first revision; the initial acceptance is the first entry. -->
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 decision per ADR. If you find yourself describing two decisions, split into two ADRs.
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
- - **Revisions update the body in place.** Rewrite the affected sections to the current truth, bump `last-updated`, and append a Decision Changelog entry naming the old choice and the trigger. Never leave the superseded decision narrated in the body — the changelog carries the journey.
740
- - The **Decision Changelog** is the one sanctioned dated-history section in an active doc: append-only, newest first. Typo and formatting fixes don't get entries.
741
- - Execution detail lives in a plan doc, not the ADR — link, don't embed.
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: kept records under `docs/brainstorm/`, harvested doctrine under `docs/architecture/`. The LLD is the feature doc itself — `docs/features/{feature}.md`, design intent first, extended in place at Completion.
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/brainstorm/{topic}/` (committed, one subfolder per topic) and stays in place as provenance.
65
- - Harvest conclusions by scope: doctrine, glossary, non-goals, IA changes → `docs/architecture/`; decisions → `docs/architecture/adr/`; backlog items → `docs/history/backlog.md`.
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 `adr/` decision 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`.
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
- │ └── adr/ # Architecture Decision Records (numbered, immutable)
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
- ├── brainstorm/ # Optional — kept design records, one {topic}/ subfolder per session (state.md + pillars/)
135
- │ └── {topic}/ # created by the `brainstorm` skill; NOT scaffolded empty
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 are kept design 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
- > `docs/brainstorm/{topic}/` is **author-created, never scaffolded** — the `brainstorm` skill writes it when a session opens, and it is **kept** (committed) as the provenance the steering pillars distil from. Recognize it as canonical: never flag it as a doc "outside the structure" and never delete it during reconcile.
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/brainstorm/{topic}/` is a **kept design record** — leave it in place untouched; never reclassify its pillars as Architecture/Stale or relocate them.
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 root `brainstorm/` or `brainstorming/` folder (legacy transient/per-harness location) | move each design record into `docs/brainstorm/{topic}/`, kept; delete the root folder |
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
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "harness": "etna",
3
3
  "name": "etna",
4
- "version": "1.1.3",
4
+ "version": "1.1.5",
5
5
  "files": [
6
6
  ".prettierrc.json",
7
7
  ".prettierignore",
8
8
  ".vscode/settings.json"
9
9
  ],
10
- "digest": "2e0c2a4cd5a8"
10
+ "digest": "287a6a528ec4"
11
11
  }