@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
@@ -4,7 +4,7 @@ The closed set of six operator surface archetypes. Structure derivation (D28) ru
4
4
 
5
5
  Each entry carries five things: **choosing rules** (the object shapes, cardinalities, and lifecycle signals that select it), a **density modifier** (one relative step on the global tier), **composition** (the parts the surface holds and their arrangement, plus the lifecycle states that matter most here), a **navigation slot**, and an **exemplar pointer**.
6
6
 
7
- **Density.** The global tier — spacious · standard · dense — resolves at look time from the design.md / product-type traits (D31) and rewrites the spacing scale through the density primitive and the D6 `--spacing` remap. Each archetype then applies a single relative step on that tier: one step looser, at tier, or one step denser. Steps clamp at the scale ends (spacious … standard … dense) and never name an absolute value — an absolute override is banned (D31). Structure derivation records the relative step in each surface's `density-modifier` as a signed integer (positive = denser, `+1` / `0` / `-1`); the scaffold emits it as `data-density-step="tighter"` (+1) or `data-density-step="looser"` (-1), no attribute at 0. Modifiers compose with the behavioral dials (D4), never replace them.
7
+ **Density.** The global tier — spacious · standard · dense — resolves at look time from the token artifact's payload / product-type traits (D31) and rewrites the spacing scale through the density primitive and the D6 `--spacing` remap. Each archetype then applies a single relative step on that tier: one step looser, at tier, or one step denser. Steps clamp at the scale ends (spacious … standard … dense) and never name an absolute value — an absolute override is banned (D31). Structure derivation records the relative step in each surface's `density-modifier` as a signed integer (positive = denser, `+1` / `0` / `-1`); the scaffold emits it as `data-density-step="tighter"` (+1) or `data-density-step="looser"` (-1), no attribute at 0. Modifiers compose with the behavioral dials (D4), never replace them.
8
8
 
9
9
  **Exemplars load just-in-time.** Every entry points at one token-pure compiling exemplar under `data/operator-pack/exemplars/<slug>.tsx`. The exemplar is read at that archetype's emission phase gate during the surfaces phase (D23) — emitting a surface of archetype X without exemplar X in context is a gate violation (D20). Exemplars are never boot-loaded.
10
10
 
@@ -4,7 +4,7 @@ Create is the only workflow where taste is *made*: personality synthesis, struct
4
4
 
5
5
  | Phase | Gate (must pass to open the next) | Produces |
6
6
  | --- | --- | --- |
7
- | intake | `phase-gate.mjs intake` | confirmed intent digest; resolved `design.md` at project root |
7
+ | intake | `phase-gate.mjs intake` | confirmed intent digest; resolved design-tokens artifact at project root |
8
8
  | structure | `phase-gate.mjs structure` | `docs/design/structure.md` — the entity/surface map |
9
9
  | scaffold | `phase-gate.mjs scaffold` | project shell: routes, nav, state-shells, fixture wiring |
10
10
  | tokens | `phase-gate.mjs tokens` | `personality.css` + `globals.css`, full token surface |
@@ -17,13 +17,14 @@ The gate closing each phase runs the D21 rule classes decidable at that boundary
17
17
  ## intake
18
18
 
19
19
  **Purpose.** Recognize the brief, decide pack coverage, extract intent, resolve the look.
20
- **In → out.** the brief · the design.md library · router data → a confirmed intent digest · a `design.md` at project root (brand document + lever manifest).
21
- **Work.** Front gate: a project-declared identity (product-type traits) wins; otherwise the signal checklist (audience is employees / agents / analysts; the metric is task throughput, not conversion; the surfaces are queues / tables / forms / monitors), router data as a lookup assist. Build a structured intent digest — entity list, archetype guesses, density tier, substrate — every inference marked as inferred, present it once for confirmation, and ask only strategic unknowns whose answers change the design. Resolve the look design.md-first: the project's own `design.md` wins; a library entry serves on propose-confirm (proposed from resemblance, never applied silently); zero input wears the Nurix default. Materialize the resolved document at project root against [SCHEMA.md](../data/design-md/SCHEMA.md).
22
- **Gate — `phase-gate.mjs intake`.** The digest is confirmed and a schema-valid `design.md` exists at project root. A brief no pack covers is refused here — cleanly, with a redirect — never derived.
20
+ **In → out.** the brief · the design.md library · `data/combinations/product-router.csv` (+ `typography.csv` · `palettes.csv` · `styles.csv` when the look is authored fresh) → a confirmed intent digest · a design-tokens artifact at project root (`design.tokens.json` + `design.resolver.json` — the look + lever manifest).
21
+ **Work.** Front gate: a project-declared identity (product-type traits) wins; otherwise the signal checklist (audience is employees / agents / analysts; the metric is task throughput, not conversion; the surfaces are queues / tables / forms / monitors), with `data/combinations/product-router.csv` — loaded at every intake — as the recognition assist and the digest's density/archetype priors. Build a structured intent digest — entity list, archetype guesses, density tier, substrate — every inference marked as inferred, present it once for confirmation, and ask only strategic unknowns whose answers change the design. Resolve the look project-first: the project's own artifact wins; a library entry serves on propose-confirm (proposed from resemblance, never applied silently); zero input wears the Nurix default. When the look resolves to authoring a fresh artifact — not a library copy, not the default — load `typography.csv`, `palettes.csv`, and `styles.csv` (pairings, palettes, movement vocabulary) before composing it; the consumption contract is [combinations/Readme.md](../data/combinations/Readme.md). Materialize the resolved artifact at project root against [SCHEMA.md](../data/design-tokens/SCHEMA.md).
22
+ **Gate — `phase-gate.mjs intake`.** The digest is confirmed and a schema-valid token artifact exists at project root. A brief no pack covers is refused here — cleanly, with a redirect — never derived.
23
23
  **Avoid.**
24
24
  - Deriving on silently inferred facts instead of presenting the digest for one confirmation.
25
25
  - Blanket-interviewing when the brief already declares its identity — ask only strategic unknowns.
26
26
  - Attempting a marketing / storefront / mobile-native brief instead of refusing on pack coverage.
27
+ - Authoring a fresh look without `typography.csv` / `palettes.csv` / `styles.csv` in context — a gate violation.
27
28
 
28
29
  ## structure
29
30
 
@@ -50,15 +51,16 @@ The gate closing each phase runs the D21 rule classes decidable at that boundary
50
51
 
51
52
  ## tokens
52
53
 
53
- **Purpose.** Emit the complete token surface from the resolved `design.md`.
54
- **In → out.** `design.md` → `src/styles/personality.css` + `src/styles/globals.css`.
55
- **Work.** Derivation is hybrid: deterministic where the document states a value, judgment-with-recorded-rationale for gaps. The **coverage gate** `derive-personality.mjs design.md --check` fails — exit non-zero, naming the missing keys — if any of the 26 visual primitives, the 2 behavioral dials, or the emission tokens is unassigned and un-hinted. Only once it is green does `derive-personality.mjs design.md --emit src/styles/` write both files, defining the full surface — 26 primitives, 17 semantic tokens, and the 17 substrate tokens no consumable value is left to fall back to gray on — and hardening both cascade contracts (selector specificity, import order) with explanatory comments. See [personality.md](./personality.md).
54
+ **Purpose.** Emit the complete token surface from the resolved artifact.
55
+ **In → out.** the design-tokens artifact → `src/styles/personality.css` + `src/styles/globals.css`.
56
+ **Work.** Derivation is hybrid: deterministic where the artifact states a value, judgment-with-recorded-rationale for gaps (a resolved hint records its rationale in the token's `$description`). Before any typography hint is resolved, `data/combinations/typography.csv` is in context; before any color hint, `palettes.csv` — the table is the floor for the resolution, and an off-table pairing or palette is allowed only with its stated reason recorded in the token's `$description`. The **coverage gate** `derive-personality.mjs <project-dir> --check` fails — exit non-zero, naming the missing paths — if any of the 26 visual primitives, the 2 behavioral dials, or the emission tokens is unassigned and un-hinted. Only once it is green does `derive-personality.mjs <project-dir> --emit <project-dir>` write both files (into `<project-dir>/src/styles/`), defining the full surface — 26 primitives, 17 semantic tokens, and the 17 substrate tokens no consumable value is left to fall back to gray on — and hardening both cascade contracts (selector specificity, import order) with explanatory comments. See [personality.md](./personality.md).
56
57
  **Gate — `phase-gate.mjs tokens`.** The coverage gate passed and both files carry the full token surface with the cascade-contract comments intact.
57
58
  **Avoid.**
58
59
  - Emitting before the coverage gate passes.
59
60
  - Leaving any of the 17 substrate tokens to fall back to shadcn-gray defaults.
60
61
  - Hardcoding a literal color, spacing, or radius instead of routing through a token.
61
62
  - Dropping the cascade-contract comments from the emitted CSS.
63
+ - Resolving a typography or color hint without its combination table in context, or going off-table without the reason in the token's `$description`.
62
64
 
63
65
  ## fixtures
64
66
 
@@ -82,9 +84,12 @@ The gate closing each phase runs the D21 rule classes decidable at that boundary
82
84
 
83
85
  > **Just-in-time exemplar.** Each archetype's token-pure exemplar ([exemplars/](../data/operator-pack/exemplars/)) loads just-in-time at that archetype's emission gate — never at boot — because imitation proximity is highest when the exemplar sits in context at the moment of composition. Composing a surface of archetype X without exemplar X in context is a **gate violation**. Imitate the composition; the look comes from the project's personality.
84
86
 
87
+ > **Just-in-time combination tables.** `data/combinations/charts.csv` loads at the emission gate of any surface that composes a chart; `icons.csv` loads once, at the first surface-composition gate — icon picks happen throughout. Each table is the floor for its picks: an off-table chart type or icon is allowed only with its stated reason in a code comment adjacent to the deviating pick. An unrecorded off-table pick is a **gate violation**. Contract: [combinations/Readme.md](../data/combinations/Readme.md).
88
+
85
89
  **Gate — `phase-gate.mjs surfaces`.** For each surface the archetype exemplar was in context, all lifecycle states are filled, and the per-surface structural rules pass (states presence, token coverage).
86
90
  **Avoid.**
87
91
  - Composing archetype X without exemplar X in context — a gate violation.
92
+ - Composing a chart or picking an icon without its combination table in context — a gate violation.
88
93
  - Writing states as an afterthought instead of into the pre-created shells.
89
94
  - Emitting a look disjoint from the resolved personality — literals or off-scale values instead of the cascade.
90
95
  - Modals where side panels belong; a workflow a pointer alone can complete (floor P3 / P6).
@@ -110,7 +115,7 @@ Two disciplines protect what must never silently change.
110
115
  - API / data-contract shapes
111
116
  - generated files (never written into — the is-generated guard)
112
117
 
113
- Changing any of these requires it to be the *named subject* of a finding; they are never collateral edits. Per-project preservation extensions, if ever needed, are entries in the project's `design.md` — data, not config machinery.
118
+ Changing any of these requires it to be the *named subject* of a finding; they are never collateral edits. Per-project preservation extensions, if ever needed, are entries in the project's token artifact payload — data, not config machinery.
114
119
 
115
120
  **Diff-scope discipline.** An improve run edits only the files its findings name; a run that touches a file outside its findings fails. Create writes the whole app — the discipline governs improve. See [improve.md](./improve.md).
116
121
 
@@ -120,7 +125,7 @@ Changing any of these requires it to be the *named subject* of a finding; they a
120
125
  | --- | --- | --- |
121
126
  | 0 | Compile. | Always — never skipped. |
122
127
  | 1 | Static whole-app checks — `preship-sweep.mjs`: the full catalog over all files, plus the mandatory procedures (viewport sweep at 375 / 768 / 1024 / 1440, copy self-audit, scope cross-check against the brief). | Every run. |
123
- | 2 | Deterministic render rung — `render-rung.mjs`: key surfaces rendered headlessly, the detector re-running its render-only rules (real overflow at the four viewports, effective and pixel-measured contrast, rendered token drift, actual target geometry, and the `cod-12` runtime perf budgets LCP < 2.5s and CLS < 0.1 collected via `PerformanceObserver`; INP and frame time need the interactive rung); findings through the same fix-or-classify loop. | By default when a headless browser is importable; degrades to a one-line notice otherwise. |
128
+ | 2 | Deterministic render rung — `render-rung.mjs`: key surfaces rendered headlessly, re-running the catalog's render-only rules (real overflow at the four viewports, effective and pixel-measured contrast, rendered token drift, actual target geometry, and the `cod-12` runtime perf budgets LCP < 2.5s and CLS < 0.1 collected via `PerformanceObserver`; INP and frame time need the interactive rung); findings through the same fix-or-classify loop. | By default when a headless browser is importable; degrades to a one-line notice otherwise. |
124
129
  | 3 | Interactive dev-server / browser audit of the user's own environment. | Consent-gated — asked for, never assumed. |
125
130
 
126
131
  Model-judged screenshot self-critique is **not a rung** — no machine verdict rests on the model's own read of a screenshot. Pixel instruments (`inst-*`) supply evidence *inside* judged findings, never verdicts.
@@ -65,7 +65,7 @@ Neither kind outranks the other by *kind*. Severity ranks them; provenance only
65
65
 
66
66
  ## No numeric scores — a measurable before→after instead
67
67
 
68
- The engine never emits a score. No 0–4, no 0–100, no percentage grade — runtime scores are false precision the best practitioners avoid; the catalog's own detector output is defect *evidence*, not a number to average. Comparability comes from two things that do not pretend to a decimal: the severity rank orders the list, and the **mandatory measurable before→after** on every finding says exactly what changes.
68
+ The engine never emits a score. No 0–4, no 0–100, no percentage grade — runtime scores are false precision the best practitioners avoid; the catalog's own machine-check output is defect *evidence*, not a number to average. Comparability comes from two things that do not pretend to a decimal: the severity rank orders the list, and the **mandatory measurable before→after** on every finding says exactly what changes.
69
69
 
70
70
  Machine-backed → numeric (`620ms → ≤500ms`; `12px → 14px`). Judged → a concrete before/after state (`AI draft renders identically to human messages → AI draft carries a disclosure chip and a muted treatment`). Banned always: "feels off," "make it cleaner," any adjective standing in for a change. `cod-13` is this contract; `self-integrity.mjs` checks that every finding carries a before→after.
71
71
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  The hard-prose channel: every machine ban, deterministic threshold, and mandatory procedure the skill enforces, one imperative line each. This file loads into context before any design output.
4
4
 
5
- The backticked anchor id is the shared key: the same id names the `rules.csv` row, the detector rule key, the fixture pair, and a finding's provenance. Machine rules are absolute — a violation is fixed now, or classified as inapplicable in `docs/memory/design-decay.md`; never ignored silently. No waivers, no inline suppressions. Lines tagged `· render` are decided on the rendered surface at the render rung (pixels or DOM), not from source at edit time. Judged dimensions are diagnosed, not gated — the index at the foot points at where their judgment lives.
5
+ The backticked anchor id is the shared key: the same id names the `rules.csv` row, the check-engine rule key, the fixture pair, and a finding's provenance. Machine rules are absolute — a violation is fixed now, or classified as inapplicable in `docs/memory/design-decay.md`; never ignored silently. No waivers, no inline suppressions. Lines tagged `· render` are decided on the rendered surface at the render rung (pixels or DOM), not from source at edit time. Judged dimensions are diagnosed, not gated — the index at the foot points at where their judgment lives.
6
6
 
7
7
  ## Typography
8
8
 
@@ -44,7 +44,7 @@ The backticked anchor id is the shared key: the same id names the `rules.csv` ro
44
44
  - `spc-02` Adjacent spacing values ≥ 25% apart.
45
45
  - `spc-03` Tap/click targets ≥ 24×24px (SC 2.5.8); ≥ 44px touch-primary; dense data rows 28px; undersized only via the ≥ 8px spacing exception (`int-11`). · render
46
46
  - `spc-04` Numeric columns right-align, text left-aligns; ban center-aligned data columns.
47
- - `spc-06` Corners on a fixed radius scale (2/4/6/8/12/9999), one scale per page.
47
+ - `spc-06` Corners on a fixed radius scale (0/2/4/6/8/12/16/24/9999 — 0 = flat archetypes, 9999 = full/pill; a project's token artifact may declare a narrower scale, enforced by the drift check), one scale per page.
48
48
  - `spc-07` Dense table rows: 12px vertical cell padding + hairline dividers; buttons compact to 28px; mono numbers on every figure.
49
49
  - `spc-08` Full-viewport height uses `min-h-[100dvh]`; never `h-screen` or `100vh`.
50
50
  - `spc-09` Ban calc-percentage layout arithmetic (`calc(33% - 1rem)`); CSS Grid instead.
@@ -106,11 +106,11 @@ The backticked anchor id is the shared key: the same id names the `rules.csv` ro
106
106
 
107
107
  ## Mandatory procedures (never skip)
108
108
 
109
- - `proc-01` Extract levers into a `design.md` before any improve run on a foreign UI.
109
+ - `proc-01` Extract levers into a design-tokens artifact before any improve run on a foreign UI.
110
110
  - `proc-02` Ask the reader question before any introspect run — one question, every run, never a stored default.
111
111
  - `proc-03` Run the object pass (six-archetype catalog) before screens; a small brief earns a small pass, never a skipped one.
112
112
  - `proc-04` Declare the density tier per surface archetype before emission (global tier + per-archetype modifiers).
113
- - `proc-05` Name the taste anchor before look decisions: project `design.md` > library entry > Nurix default.
113
+ - `proc-05` Name the taste anchor before look decisions: project artifact > library entry > Nurix default.
114
114
  - `proc-06` Run the self-critique pass against the brief and the ban list before declaring a create run done.
115
115
  - `proc-07` Resolve the design system and persist it (`personality.css`) before any UI code.
116
116
  - `proc-08` Token-lock at emission: after resolution, no value lands outside the emitted token file.
@@ -1,6 +1,6 @@
1
1
  # Improve — the engine
2
2
 
3
- > Loaded when the front gate routes to improve. Pairs with [diagnosis.md](diagnosis.md) (the finding source and format) and reuses [create.md](create.md)'s per-edit detector loop on apply. Improve is every change to a UI that **already exists**; [create.md](create.md) owns the case where nothing does.
3
+ > Loaded when the front gate routes to improve. Pairs with [diagnosis.md](diagnosis.md) (the finding source and format) and closes at the same machine-check wall create's gates enforce. Improve is every change to a UI that **already exists**; [create.md](create.md) owns the case where nothing does.
4
4
 
5
5
  Improve is one engine, not a set of commands. Every improvement — a review, a polish, a full redesign, a typography-only pass — is the same engine run at a different point on three axes. The familiar verbs are parameter bindings, not sibling workflows: there is no `review.md`, no `redesign.md`.
6
6
 
@@ -29,20 +29,20 @@ A narrower or wider pass — one surface, one other dimension — is the same ta
29
29
 
30
30
  A design skill improves a UI **using the levers already in it**. Emitting design disjoint from the surrounding UI is a failure, not a style choice.
31
31
 
32
- The project's `design.md` is the **lever manifest** — its `lever-manifest` block (fonts, color tokens, spacing scale, radius scale, shadow levels, motion durations/easings, icon family, accent count). Read it **first**, before any diagnosis or edit.
32
+ The project's design-tokens artifact carries the **lever manifest** — the `lever-manifest` in its `$extensions["com.nurix.design"]` payload (spacing scale, radius scale, shadow levels, motion durations/easings, icon family, accent count) plus the token-carried allowlists (the 34 color roles, the font stacks). Read it **first**, before any diagnosis or edit.
33
33
 
34
34
  ### When the UI wasn't built by this skill: extract first
35
35
 
36
- No `design.md` at project root ⇒ recover one from the code before touching anything.
36
+ No token artifact (`design.tokens.json`) at project root ⇒ recover one from the code before touching anything.
37
37
 
38
38
  1. **Scan the source for what IS** — the fonts actually in use, the literal color values that recur, the spacing steps, the radii, the durations, the icon family and stroke.
39
- 2. **Write them into a `design.md`** at project root with frontmatter `provenance: extracted`, `sourced: <date>`, populated `lever-manifest` and `design-primitives` blocks.
39
+ 2. **Write them into a design-tokens artifact** at project root — `design.tokens.json` + `design.resolver.json` per [SCHEMA.md](../data/design-tokens/SCHEMA.md), payload `provenance: extracted`, `sourced: <date>`, populated lever manifest and primitives.
40
40
  3. **Extraction records what IS, never what should be.** A UI running five fonts extracts five fonts. The reduction to two is a tier-two finding (below) — not an extraction edit.
41
- 4. Run the coverage gate over it (`derive-personality.mjs --check`) exactly as over any other `design.md`.
41
+ 4. Run the coverage gate over it (`derive-personality.mjs <project-dir> --check`) exactly as over any other artifact.
42
42
 
43
43
  ### The jail is mechanical
44
44
 
45
- An improve run may emit only values inside the manifest's vocabulary — on-scale spacings, manifest fonts, manifest colors, manifest radii and durations. This is not advice. The detector's drift check reads the manifest (`detector.mjs <file> --manifest design.md`) and fails any edit that emits a value outside it, with the same fix-or-classify wall create runs into. There is no waiver.
45
+ An improve run may emit only values inside the manifest's vocabulary — on-scale spacings, manifest fonts, manifest colors, manifest radii and durations. This is not advice. The verify sweep's drift check reads the manifest (`preship-sweep.mjs --files <touched...> --manifest design.tokens.json`) and fails any run that emitted a value outside it, with the same fix-or-classify wall create's gates run into. There is no waiver.
46
46
 
47
47
  ## Tier-two escalation: when the levers themselves are wrong
48
48
 
@@ -68,18 +68,20 @@ Diagnose-only depth stops here: the ranked list is the deliverable. Rendering it
68
68
 
69
69
  ## Apply depth: the same wall as create
70
70
 
71
- Every apply-depth edit passes through the **same per-edit detector loop create uses**: the default-on hook fires the detector plus the drift check on the write, injects the imperative fix-or-classify directive on any violation, and re-nudges until resolved. No improve edit is exempt. An apply run is create's emission discipline pointed at files that already exist.
71
+ Every apply-depth run closes at the **same machine-check wall create's gates enforce**: after the last edit, run the scoped verify sweep over every file the run touched (`preship-sweep.mjs --files <touched...> --manifest design.tokens.json`), resolve every fix-or-classify finding it reports, and don't present results until it comes back clean. The wall is script-shaped — no hook fires it for you, and no run is exempt. An apply run is create's emission discipline pointed at files that already exist.
72
+
73
+ When a finding names a chart, load `data/combinations/charts.csv` before fixing it; when a finding names an icon, `icons.csv` — the table is the floor for the replacement pick, and an off-table pick states its reason in the finding body. Contract: [combinations/Readme.md](../data/combinations/Readme.md). (The look tables never load here — emission is jailed to the lever manifest.)
72
74
 
73
75
  ## Diff-scope discipline
74
76
 
75
77
  An improve run edits **only the files its findings name**. A run that writes a file outside its findings fails the pre-ship scope cross-check (`preship-sweep.mjs`).
76
78
 
77
- The universal preservation list holds regardless of scope or depth — never silently changed: route slugs, navigation labels, form-field names and order, analytics/event identifiers, API and data-contract shapes, and generated files. Per-project additions to this list, if ever needed, are entries in the project's `design.md` — data, not run configuration.
79
+ The universal preservation list holds regardless of scope or depth — never silently changed: route slugs, navigation labels, form-field names and order, analytics/event identifiers, API and data-contract shapes, and generated files. Per-project additions to this list, if ever needed, are entries in the project's token artifact payload — data, not run configuration.
78
80
 
79
81
  ## Run shape
80
82
 
81
83
  1. **Read the lever manifest.** Extract one from the code first if absent.
82
84
  2. **Diagnose** scoped to the run's scope, causes-first; rank; split `within-levers` from `lever-change`.
83
85
  3. **Diagnose-only** → deliver the ranked findings and stop.
84
- 4. **Apply** → edit only the files the findings name, each through the detector loop, jailed to the manifest.
86
+ 4. **Apply** → edit only the files the findings name, then close at the verify sweep over the touched files, jailed to the manifest.
85
87
  5. **Escalate** → report the tier-two findings and offer the consented lever-authority follow-up.
@@ -9,7 +9,7 @@ Introspect produces a causal explanation, not a fix. The badness a user reports
9
9
  ## The run
10
10
 
11
11
  1. **Ask the reader.** One question, before anything else (below).
12
- 2. **Diagnose** with `diagnosis.md`: passes run causes-first — Structure → Behavior → Perception — producing severity-ranked canonical findings. Introspect invents no diagnosis of its own.
12
+ 2. **Diagnose** with `diagnosis.md`: passes run causes-first — Structure → Behavior → Perception — producing severity-ranked canonical findings. Introspect invents no diagnosis of its own. When the audited UI renders charts, `data/combinations/charts.csv` loads into the pass — chart findings read against it, and an off-table judgment states its reason in the finding body.
13
13
  3. **Explain** each finding as a causal chain narrated the other way: from where the badness is felt (Perception) down to where its cause lives (Structure or Behavior).
14
14
  4. **Render** every finding in the reader's register.
15
15
  5. **File** the dated report; **offer** the improve handoff.