@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,14 +1,15 @@
1
- # design.md — schema `design-md/v1`
1
+ # design.md — the library's documentation format (`design-md/v1`)
2
2
 
3
3
  A `design.md` is one operator UI's brand document: nine prose sections that describe the look for a
4
- human, followed by two fenced machine blocks that make it derivable. `derive-personality.mjs` parses
5
- both blocks; the prose is for the reader and the emitting agent. The prose informs, the blocks bind.
4
+ human reader and the emitting agent. It is **documentation, not transport** — the machine contract
5
+ lives in the design-tokens artifact ([`../design-tokens/SCHEMA.md`](../design-tokens/SCHEMA.md)):
6
+ every library entry's derivable values sit in its token twin at `data/design-tokens/<slug>/`
7
+ (slug = the entry's filename without `.md`), and look resolution, precedence, provenance, hints,
8
+ and validation are all defined there. No script parses a `design.md`.
6
9
 
7
- **One schema, every origin.** A project's own `design.md`, a shipped library product entry, the Nurix
8
- default ([`nurix.md`](nurix.md)), and a manifest [`derive-personality.mjs`](../../scripts/derive-personality.mjs)
9
- extracts from a foreign UI all use this identical shape. The only thing that varies is the `provenance`
10
- field. Downstream is unchanged: whichever document resolves, personality synthesis derives the 26
11
- primitive values and dial defaults from the same two blocks.
10
+ The prose earns its place by carrying what tokens cannot: the identity a stranger could repeat,
11
+ usage rules ("indigo only on the primary action"), the scarce judgments the Agent Prompt Guide
12
+ hands the emitting agent verbatim. A good entry is concrete and checkable, not adjectival.
12
13
 
13
14
  ---
14
15
 
@@ -18,40 +19,24 @@ primitive values and dial defaults from the same two blocks.
18
19
  ---
19
20
  schema: design-md/v1
20
21
  product: Meridian
21
- provenance: project # project | library | default | extracted
22
+ provenance: library # retained for lineage; the machine path reads only the token artifact's payload
22
23
  sourced: 2026-07-04
23
24
  ---
24
25
  ```
25
26
 
26
27
  | Field | Required | Value |
27
28
  | --- | --- | --- |
28
- | `schema` | yes | Literal `design-md/v1`. The version tag; a parser refuses an unknown value. |
29
- | `product` | yes | The product name. For `default` it is `Nurix`; for `project`/`extracted` it is the project's own `data-style` slug source. |
30
- | `provenance` | yes | One of the four legal origins (below). |
31
- | `sourced` | yes | ISO date the document was authored, extracted, or last re-sourced. |
32
-
33
- ## Provenance and precedence
34
-
35
- Four legal `provenance` values; three resolution origins. Look resolution reads `design.md`-first
36
- and never applies a library match silently (D29/D30 — **propose-confirm**).
37
-
38
- | Value | Origin | Precedence |
39
- | --- | --- | --- |
40
- | `project` | The project's own `design.md` at repo root, authored by a create run. | **Wins outright** when present. |
41
- | `extracted` | The project's manifest, recovered from a UI this skill did not build (improve extracts it before touching code — D10). | Same tier as `project`: once written it *is* the project's lever manifest. |
42
- | `library` | A shipped named-product entry (`library/<product>.md`). | Serves only when the brief names or resembles the product **and the user confirms**. Never applied on inference alone. |
43
- | `default` | The Nurix default ([`nurix.md`](nurix.md)). | Worn when there is no project document and no confirmed library match. Zero input → default; the default *is* the confirmation. |
44
-
45
- Matching is propose-confirm: the skill may propose a `library` entry from brief resemblance, presents
46
- it once, and applies it only on confirmation. The project's own document always beats a proposal.
29
+ | `schema` | yes | Literal `design-md/v1`. |
30
+ | `product` | yes | The product name; matches the token twin's payload `product`. |
31
+ | `provenance` | yes | Lineage note. Authoritative provenance is the token artifact's payload field. |
32
+ | `sourced` | yes | ISO date the document was authored or last re-sourced. |
47
33
 
48
34
  ---
49
35
 
50
36
  ## The nine prose sections
51
37
 
52
38
  Fixed order. Each is human-facing narration; cite roles and token names, never bare literals in the
53
- component/layout prose (the values live in the machine blocks). A good entry is concrete and checkable,
54
- not adjectival.
39
+ component/layout prose (the values live in the token twin).
55
40
 
56
41
  | # | Section | What belongs · what a good entry looks like |
57
42
  | --- | --- | --- |
@@ -63,144 +48,28 @@ not adjectival.
63
48
  | 6 | **Depth** | The elevation strategy: surface ladder vs shadow, hairline discipline, the focus-ring treatment, the z-index scale. Names levels `0..n` with treatment and use; states whether shadow or surface carries hierarchy. |
64
49
  | 7 | **Do's & Don'ts** | The enforceable taste rules unique to this brand — reserve the accent, never pill the CTA, never a second chromatic accent. Imperative bullets, each checkable; every don't names the specific off-brand move. |
65
50
  | 8 | **Responsive** | Breakpoints and the collapse strategy across the operator sweep (375 / 768 / 1024 / 1440): nav collapse, grid re-flow, side-panel → sheet, density steps. Reads `breakpoint → what changes`. |
66
- | 9 | **Agent Prompt Guide** | Directives the emitting agent follows verbatim: what to reach for first, the invariants, the scarce elements the machine blocks can't carry (e.g. "lead every queue with the table; accent only on the primary action"). |
51
+ | 9 | **Agent Prompt Guide** | Directives the emitting agent follows verbatim: what to reach for first, the invariants, the scarce elements the token artifact can't carry (e.g. "lead every queue with the table; accent only on the primary action"). |
67
52
 
68
53
  ---
69
54
 
70
- ## Machine block 1 — `design-primitives`
71
-
72
- Fenced as ` ```yaml design-primitives `. Carries **all 26 visual primitives** (names below, without
73
- the leading `--`) plus the two behavioral dials, the density tier, and the product-type traits. Every
74
- key is either a concrete value or a `hint:` (the hint convention, below).
75
-
76
- | Family | Key | Type / unit | Example |
77
- | --- | --- | --- | --- |
78
- | geometric | `radius` | length | `6px` |
79
- | | `shadow-intensity` | 0–1 multiplier on `--shadow-*` | `0.5` |
80
- | | `border-weight` | length | `1px` |
81
- | | `density-gap` | multiplier on the `0.25rem` spacing base | `0.85` |
82
- | | `density-inset` | multiplier on component insets | `0.85` |
83
- | typographic | `font-sans` | font stack | `Inter, system-ui, sans-serif` |
84
- | | `font-mono` | font stack | `JetBrains Mono, ui-monospace, monospace` |
85
- | | `font-weight-normal` | 100–900 | `400` |
86
- | | `font-weight-strong` | 100–900 | `600` |
87
- | | `heading-tracking` | em/px tracking | `-0.01em` |
88
- | temporal | `duration-unit` | ms base | `50ms` |
89
- | | `duration-fast` | ms | `100ms` |
90
- | | `duration-normal` | ms | `150ms` |
91
- | | `duration-slow` | ms | `250ms` |
92
- | | `ease-default` | cubic-bezier | `cubic-bezier(0.4,0,0.2,1)` |
93
- | surface | `contrast-boost` | multiplier (1 = default) | `1` |
94
- | iconography | `icon-stroke` | px stroke-width | `1.75` |
95
- | | `icon-size-base` | length | `16px` |
96
- | layout | `sidebar-width-expanded` | length | `248px` |
97
- | | `sidebar-width-collapsed` | length | `56px` |
98
- | | `topbar-height` | length | `52px` |
99
- | | `side-panel-width` | length | `420px` |
100
- | | `side-panel-width-rich` | length | `640px` |
101
- | | `modal-width-max` | length | `560px` |
102
- | | `form-max-width` | length | `640px` |
103
- | | `table-row-height` | length | `40px` |
104
-
105
- Then the dials and traits:
106
-
107
- | Key | Values | Note |
108
- | --- | --- | --- |
109
- | `verbosity` | `full` \| `default` \| `compact` \| `expert` | Emits `data-verbosity` on `<html>` (D4). |
110
- | `feedback` | `subtle` \| `minimal` | Emits `data-feedback` (D4). |
111
- | `density-tier` | `spacious` \| `standard` \| `dense` | The global tier (D31); emits `data-density`; drives `density-gap`/`density-inset` coherently. |
112
- | `product-traits` | list of trait slugs | Product-type signals the front gate reads (D30) — e.g. `[review-queue, case-detail, fintech]`. Non-empty. |
113
-
114
- **Derived, never stored.** Emission computes `--ease-enter`, `--ease-exit`, and `--stagger-delay` from
115
- `ease-default` and `duration-unit`. They are not among the 26, not authored in the block, and not part
116
- of the coverage gate. Do not add them.
117
-
118
- ## Machine block 2 — `lever-manifest`
119
-
120
- Fenced as ` ```yaml lever-manifest `. The machine-readable **allowlist** the drift check reads (D10/D19):
121
- [`detector.mjs`](../../scripts/detector.mjs) flags any emitted value outside this vocabulary — a radius
122
- not in `radius-scale`, a color that is not one of these tokens, a spacing off `spacing-scale`, a motion
123
- duration off `motion.durations`.
124
-
125
- ```yaml
126
- version: 1
127
- fonts: { sans: "…", mono: "…" } # match font-sans / font-mono
128
- color-tokens:
129
- light: { … 17 semantic + 17 substrate tokens, every one valued … }
130
- spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64] # px, on-scale values ONLY, ascending
131
- radius-scale: [0, 4, 6, 12, 9999] # px, ascending
132
- shadow-levels: [none, sm, md] # ordered by increasing intensity
133
- motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] } # ms, ascending
134
- icons: { family: lucide, stroke: 1.75 }
135
- accent-count: 1
136
- ```
137
-
138
- `color-tokens.light` must value **every** token below. Dark is opt-in; when a project ships dark, add a
139
- parallel `dark:` map — light is never omitted.
140
-
141
- - **Semantic (17):** `background` · `foreground` · `card` · `card-foreground` · `muted` ·
142
- `muted-foreground` · `border` · `input` · `ring` · `primary` · `primary-foreground` · `accent` ·
143
- `accent-foreground` · `destructive` · `destructive-foreground` · `success` · `warning`.
144
- - **Substrate (17, the D6 set):** `popover` · `popover-foreground` · `secondary` · `secondary-foreground` ·
145
- `chart-1` · `chart-2` · `chart-3` · `chart-4` · `chart-5` · `sidebar` · `sidebar-foreground` ·
146
- `sidebar-primary` · `sidebar-primary-foreground` · `sidebar-accent` · `sidebar-accent-foreground` ·
147
- `sidebar-border` · `sidebar-ring`.
55
+ ## The token twin
148
56
 
149
- No consumed token falls back to a shadcn-gray default: emission sets all 34 (D6).
150
-
151
- ---
152
-
153
- ## The `hint:` convention and derivation write-back
154
-
155
- Where a value needs judgment the document states a **hint** instead of a value: the key's value begins
156
- with `hint:` followed by the intent in plain words.
157
-
158
- ```yaml
159
- contrast-boost: hint: nudge borders up a step so the dense table grid reads as a grid
160
- ```
161
-
162
- A hint **passes** the coverage gate (`--check`) — the key is present and un-missing. It does not pass
163
- emission: `derive-personality.mjs --emit` resolves each hint to a concrete value by judgment and
164
- **records its rationale back into the document**, rewriting the line so the resolved document is
165
- self-explaining and re-derivable:
166
-
167
- ```yaml
168
- contrast-boost: 1.1 # derived: dense-grid brief → one step up (was hint)
169
- ```
170
-
171
- After resolution no bare `hint:` remains; a re-run of `--check` sees only concrete values. Judgment is
172
- recorded, never silent (D29).
173
-
174
- ---
175
-
176
- ## Validation — what `derive-personality.mjs --check` enforces
177
-
178
- The coverage gate. It exits non-zero and **names every offending key** so the fix is mechanical.
179
-
180
- 1. **Frontmatter** present with `schema: design-md/v1` and a legal `provenance`.
181
- 2. **Both blocks present and parseable** — exactly one `design-primitives` and one `lever-manifest`
182
- fenced YAML block.
183
- 3. **Every primitive assigned or hinted** — all 26 keys present as a value or a `hint:`; fails naming
184
- any absent key.
185
- 4. **Every dial and the tier assigned** — `verbosity`, `feedback`, `density-tier` set to a legal value;
186
- `product-traits` a non-empty list.
187
- 5. **Every color token valued** — all 17 semantic + 17 substrate tokens present in
188
- `color-tokens.light` with a non-empty value; fails naming any missing token.
189
- 6. **Scales non-empty and sorted** — `spacing-scale`, `radius-scale`, and `motion.durations` non-empty
190
- and ascending; `shadow-levels` non-empty and ordered by intensity; `motion.easings`, `fonts.sans`,
191
- `fonts.mono` non-empty; `icons.family`/`icons.stroke` present; `accent-count` ≥ 1.
192
-
193
- A document that passes `--check` is guaranteed derivable — every primitive, dial, and substrate token
194
- is assigned or hinted before token emission may run (never best-effort, D6/D29).
57
+ Every library entry pairs with a design-tokens artifact at `data/design-tokens/<slug>/` — the
58
+ derivable half: primitives, the 34 color roles, the typography ramp, dials, traits, and the lever
59
+ manifest, with per-value rationale carried in each token's `$description`.
60
+ [`convert-design-md.mjs`](../../scripts/convert-design-md.mjs) generated the twins from the corpus;
61
+ a **new** library entry authors both halves — the token artifact against the token schema (validated
62
+ by `derive-personality.mjs <dir> --check`), and this document for the reader. When the two could
63
+ disagree, the token artifact is canonical.
195
64
 
196
65
  ---
197
66
 
198
67
  ## Worked example — Meridian (fictional fraud-review console)
199
68
 
200
- A dense review-queue + case-detail operator tool. Both machine blocks are complete and fully derived
201
- (no remaining hints); the prose sections are sketched to one line each for brevity.
69
+ Prose sketched to one line per section for brevity; Meridian's derivable values would live in its
70
+ token twin.
202
71
 
203
- ````markdown
72
+ ```markdown
204
73
  ---
205
74
  schema: design-md/v1
206
75
  product: Meridian
@@ -234,84 +103,4 @@ Do reserve indigo for the primary action. Don't pill the CTA; don't add a second
234
103
 
235
104
  ## 9 Agent Prompt Guide
236
105
  Lead with the queue table; accent only the primary action; keep the case panel beside the work, never a modal.
237
-
238
- ```yaml design-primitives
239
- radius: 6px
240
- shadow-intensity: 0.5
241
- border-weight: 1px
242
- density-gap: 0.85
243
- density-inset: 0.85
244
- font-sans: Inter, system-ui, sans-serif
245
- font-mono: JetBrains Mono, ui-monospace, monospace
246
- font-weight-normal: 400
247
- font-weight-strong: 600
248
- heading-tracking: -0.01em
249
- duration-unit: 50ms
250
- duration-fast: 100ms
251
- duration-normal: 150ms
252
- duration-slow: 250ms
253
- ease-default: cubic-bezier(0.4,0,0.2,1)
254
- contrast-boost: 1
255
- icon-stroke: 1.75
256
- icon-size-base: 16px
257
- sidebar-width-expanded: 248px
258
- sidebar-width-collapsed: 56px
259
- topbar-height: 52px
260
- side-panel-width: 420px
261
- side-panel-width-rich: 640px
262
- modal-width-max: 560px
263
- form-max-width: 640px
264
- table-row-height: 40px
265
- verbosity: default
266
- feedback: subtle
267
- density-tier: dense
268
- product-traits: [review-queue, case-detail, fintech]
269
- ```
270
-
271
- ```yaml lever-manifest
272
- version: 1
273
- fonts: { sans: "Inter, system-ui, sans-serif", mono: "JetBrains Mono, ui-monospace, monospace" }
274
- color-tokens:
275
- light:
276
- background: "#ffffff"
277
- foreground: "#0f172a"
278
- card: "#ffffff"
279
- card-foreground: "#0f172a"
280
- muted: "#f1f5f9"
281
- muted-foreground: "#64748b"
282
- border: "#e2e8f0"
283
- input: "#e2e8f0"
284
- ring: "#6366f1"
285
- primary: "#4f46e5"
286
- primary-foreground: "#ffffff"
287
- accent: "#eef2ff"
288
- accent-foreground: "#4f46e5"
289
- destructive: "#dc2626"
290
- destructive-foreground: "#ffffff"
291
- success: "#16a34a"
292
- warning: "#d97706"
293
- popover: "#ffffff"
294
- popover-foreground: "#0f172a"
295
- secondary: "#f1f5f9"
296
- secondary-foreground: "#0f172a"
297
- chart-1: "#4f46e5"
298
- chart-2: "#0ea5e9"
299
- chart-3: "#16a34a"
300
- chart-4: "#d97706"
301
- chart-5: "#dc2626"
302
- sidebar: "#f8fafc"
303
- sidebar-foreground: "#0f172a"
304
- sidebar-primary: "#4f46e5"
305
- sidebar-primary-foreground: "#ffffff"
306
- sidebar-accent: "#eef2ff"
307
- sidebar-accent-foreground: "#4f46e5"
308
- sidebar-border: "#e2e8f0"
309
- sidebar-ring: "#6366f1"
310
- spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
311
- radius-scale: [0, 4, 6, 12, 9999]
312
- shadow-levels: [none, sm, md]
313
- motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
314
- icons: { family: lucide, stroke: 1.75 }
315
- accent-count: 1
316
106
  ```
317
- ````
@@ -9,12 +9,11 @@ sourced: 2026-07-04
9
9
 
10
10
  The warm marketplace brand rendered for internal tools. Airbnb's public surfaces are photography-led
11
11
  and generous; an operator surface wearing this brand keeps the palette, the single warm voltage, the
12
- soft corners, and the modest type voice, but leaves the marketing chrome behind — the pill search bar,
13
- the 64px rating hero, the 80px nav, and the hand-illustrated product glyphs do not follow the brand
14
- into a queue or a console. What carries is the feel: pure-white canvas, near-black ink (never pure
15
- black), one Rausch accent used scarcely, flat depth with a single soft shadow tier, and rounded
16
- everything. Both machine blocks are fully valued; every judgment past the corpus is annotated
17
- `# derived:`.
12
+ soft corners, and the modest type voice, but leaves the marketing chrome behind — the pill search
13
+ bar, the 64px rating hero, the 80px nav, and the hand-illustrated product glyphs do not follow the
14
+ brand into a queue or a console. What carries is the feel: pure-white canvas, near-black ink (never
15
+ pure black), one Rausch accent used scarcely, flat depth with a single soft shadow tier, and rounded
16
+ everything.
18
17
 
19
18
  ## 1 Visual Theme
20
19
 
@@ -31,8 +30,8 @@ reading holds standard rather than airy.
31
30
 
32
31
  ## 2 Color Roles
33
32
 
34
- Light values (the manifest carries the exact hex — Airbnb's native format). One accent: Rausch is the
35
- only chromatic hue that carries meaning; status hues speak only status.
33
+ Light values. One accent: Rausch is the only chromatic hue that carries meaning; status hues speak
34
+ only status.
36
35
 
37
36
  | Role | Value | Allowed where |
38
37
  | --- | --- | --- |
@@ -153,83 +152,3 @@ operator work.
153
152
  - One accent. Luxe, Plus, and legal-blue are not operator colors here.
154
153
  - Leave marketing behind: the pill search bar, the 64px rating hero, the 80px nav, hand-illustrated
155
154
  glyphs, and gradients do not follow the brand into a console. Light only — dark is a foreign opt-in.
156
-
157
- ```yaml design-primitives
158
- radius: 8px # derived: Airbnb's button/input radius (rounded.sm); cards step to 14px via the scale
159
- shadow-intensity: 0.5 # derived: one soft shadow tier only; the system is otherwise flat
160
- border-weight: 1px
161
- density-gap: 1
162
- density-inset: 1
163
- font-sans: "Airbnb Cereal VF", Circular, Inter, system-ui, sans-serif
164
- font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace # derived: Airbnb ships no mono; operator IDs/codes/timestamps need one — JetBrains Mono pairs with Cereal's geometric character
165
- font-weight-normal: 400
166
- font-weight-strong: 600 # derived: Cereal runs modest weights (500-600); operator strong stops at 600, never the 700+ of fintech/enterprise
167
- heading-tracking: -0.01em # derived: Cereal's larger display steps track slightly negative (-0.18/-0.44px)
168
- duration-unit: 50ms
169
- duration-fast: 150ms # derived: corpus silent on motion; a warm brand runs a touch softer than a dense console
170
- duration-normal: 200ms # derived: corpus silent on motion
171
- duration-slow: 300ms # derived: corpus silent on motion
172
- ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard material ease
173
- contrast-boost: 1
174
- icon-stroke: 1.5 # derived: Airbnb's line icons read fine and friendly; one step under lucide's 2
175
- icon-size-base: 16px
176
- sidebar-width-expanded: 256px # derived: no marketplace sidebar; generous operator reading, a step over the console default
177
- sidebar-width-collapsed: 64px # derived: generous icon rail
178
- topbar-height: 64px # derived: operator reading of the 80px marketing nav, tightened for a working header
179
- side-panel-width: 440px # derived: generous side panel; no corpus panel spec
180
- side-panel-width-rich: 640px # derived: content-heavy detail width
181
- modal-width-max: 560px # derived: corpus silent; standard modal cap
182
- form-max-width: 640px # derived: Airbnb inputs run tall/generous; standard form column
183
- table-row-height: 48px # derived: Airbnb's 48px CTA/touch-target rhythm; generous rows over a dense grid
184
- verbosity: default
185
- feedback: subtle # Airbnb motion is subtle (no-hover policy, gentle lift)
186
- density-tier: standard # derived: "generous but not airy" — marketplace runs tighter than SaaS marketing; standard with a generous per-dimension lean
187
- product-traits: [marketplace, crm, booking, dashboard]
188
- ```
189
-
190
- ```yaml lever-manifest
191
- version: 1
192
- fonts: { sans: "\"Airbnb Cereal VF\", Circular, Inter, system-ui, sans-serif", mono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, monospace" }
193
- color-tokens:
194
- light:
195
- background: "#ffffff"
196
- foreground: "#222222"
197
- card: "#ffffff"
198
- card-foreground: "#222222"
199
- muted: "#f7f7f7"
200
- muted-foreground: "#6a6a6a"
201
- border: "#dddddd"
202
- input: "#dddddd"
203
- ring: "#222222" # ink focus — Airbnb thickens the border to ink, no colored ring
204
- primary: "#ff385c"
205
- primary-foreground: "#ffffff"
206
- accent: "#ffe8ec" # derived: pale Rausch tint for selected/hovered rows (corpus hovers gray; a whisper of brand carries the warmth)
207
- accent-foreground: "#e00b41" # Rausch active — readable on the pale tint
208
- destructive: "#c13515"
209
- destructive-foreground: "#ffffff"
210
- success: "#178a50" # derived: corpus silent on status; warm-compatible green, status only
211
- warning: "#b26a00" # derived: corpus silent on status; amber, status only
212
- popover: "#ffffff"
213
- popover-foreground: "#222222"
214
- secondary: "#f2f2f2" # surface-strong — secondary buttons and circular icon surfaces
215
- secondary-foreground: "#222222"
216
- chart-1: "#ff385c" # Rausch
217
- chart-2: "#460479" # luxe purple (real corpus token, reused for dataviz)
218
- chart-3: "#178a50" # derived: status green, reused as a chart hue
219
- chart-4: "#b26a00" # derived: status amber, reused as a chart hue
220
- chart-5: "#428bff" # legal-link blue (real corpus token, reused for dataviz)
221
- sidebar: "#f7f7f7" # derived: faintly warm-gray sidebar beside the white canvas
222
- sidebar-foreground: "#222222"
223
- sidebar-primary: "#ff385c" # Rausch marks the active nav item
224
- sidebar-primary-foreground: "#ffffff"
225
- sidebar-accent: "#ffe8ec" # matches accent
226
- sidebar-accent-foreground: "#e00b41"
227
- sidebar-border: "#dddddd"
228
- sidebar-ring: "#222222"
229
- spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
230
- radius-scale: [0, 4, 8, 14, 20, 32, 9999]
231
- shadow-levels: [none, sm] # the system has exactly one soft shadow tier plus the flat baseline
232
- motion: { durations: [150, 200, 300], easings: ["cubic-bezier(0.4,0,0.2,1)"] } # derived: corpus silent on motion
233
- icons: { family: lucide, stroke: 1.5 }
234
- accent-count: 1
235
- ```
@@ -12,8 +12,7 @@ distinctive move at its center — the primary action is **near-black**, not a c
12
12
  brand action here; blue is only the link and the focus ring. This entry is the operator reading of
13
13
  Airtable's marketing brand: the temperature, the ink-primary discipline, the moderate radii and the
14
14
  never-bold type voice carry; the hero-scale display sizes, the full-bleed signature cards, and the
15
- 96px marketing section rhythm stay behind. Both machine blocks are fully valued; every judgment away
16
- from the marketing source is annotated `# derived:`.
15
+ 96px marketing section rhythm stay behind.
17
16
 
18
17
  ## 1 Visual Theme
19
18
 
@@ -150,83 +149,3 @@ Directives the emitting agent follows verbatim:
150
149
  - The warm signature palette (coral, forest, cream, peach, mint, mustard) stays behind as marketing;
151
150
  it survives only as chart categoricals. Hero-scale display type (48/40/32) and the 96px section
152
151
  rhythm are marketing — do not carry them into operator surfaces.
153
-
154
- ```yaml design-primitives
155
- radius: 6px # derived: brand's input radius (rounded.sm, 6px) as operator default; marketing's 12px CTA softness stays for hero — scale keeps 10/12 for cards
156
- shadow-intensity: 0.35 # derived: color-block-first brand — shadow only lifts true overlays
157
- border-weight: 1px
158
- density-gap: 1
159
- density-inset: 1
160
- font-sans: Inter, system-ui, sans-serif # derived: Haas Grotesk is licensed/proprietary; the corpus names Inter as its open substitute — plain Inter for dense operator body legibility
161
- font-mono: IBM Plex Mono, ui-monospace, monospace # derived: no mono in corpus; IBM Plex Mono's humanist temperature matches Airtable's sober editorial sans
162
- font-weight-normal: 400
163
- font-weight-strong: 500 # derived from corpus: Airtable never bolds display — emphasis pivots to 500, never 600/700 (600 reserved for legal)
164
- heading-tracking: 0 # from corpus: Haas display runs letterSpacing 0 — Airtable does not tighten headings
165
- duration-unit: 60ms # derived: motion out of corpus scope
166
- duration-fast: 120ms # derived: motion out of corpus scope
167
- duration-normal: 180ms # derived: functional operator scale nudged ~20% slower than baseline for editorial calm
168
- duration-slow: 280ms # derived: motion out of corpus scope
169
- ease-default: cubic-bezier(0.4,0,0.2,1) # derived: standard functional ease; motion out of corpus scope
170
- contrast-boost: 1 # derived: honor the soft #dddddd hairline discipline — no grid boost
171
- icon-stroke: 1.75 # derived: no icon spec in corpus; lucide one step under default for a refined operator stroke
172
- icon-size-base: 16px
173
- sidebar-width-expanded: 240px # from corpus: topic-filter-rail width 240px
174
- sidebar-width-collapsed: 56px # derived: standard icon-rail collapse
175
- topbar-height: 64px # from corpus: top-nav height 64px
176
- side-panel-width: 420px # derived: standard operator detail-panel width; corpus documents no side panel
177
- side-panel-width-rich: 640px # derived: content-heavy detail width
178
- modal-width-max: 560px # derived: confirmation-scale modal cap
179
- form-max-width: 640px # derived: single-column form cap
180
- table-row-height: 44px # derived from corpus: 44px input height + comparison-row padding → a roomy editorial row, not a 40px dense grid
181
- verbosity: default
182
- feedback: subtle # derived: calm, minimal-shadow brand reads subtle
183
- density-tier: standard # derived: editorial-roomy brand held at standard for operator legibility; archetypes step denser, never the whole app
184
- product-traits: [database, data-grid, workflow, collaboration]
185
- ```
186
-
187
- ```yaml lever-manifest
188
- version: 1
189
- fonts: { sans: "Inter, system-ui, sans-serif", mono: "IBM Plex Mono, ui-monospace, monospace" }
190
- color-tokens:
191
- light:
192
- background: "#ffffff"
193
- foreground: "#181d26"
194
- card: "#ffffff"
195
- card-foreground: "#181d26"
196
- muted: "#f8fafc"
197
- muted-foreground: "#41454d"
198
- border: "#dddddd"
199
- input: "#dddddd"
200
- ring: "#1b61c9"
201
- primary: "#181d26"
202
- primary-foreground: "#ffffff"
203
- accent: "#eef3fb" # derived: pale blue tint of the link blue for row/nav selection
204
- accent-foreground: "#181d26"
205
- destructive: "#c0301c" # derived: no semantic error red in corpus; warm red tuned to the oxide-coral (#aa2d00) temperature, brightened for status legibility
206
- destructive-foreground: "#ffffff"
207
- success: "#006400"
208
- warning: "#b45309" # derived: warm amber in the signature mustard/yellow (#d9a441/#f4d35e) family, darkened for legible status text
209
- popover: "#ffffff"
210
- popover-foreground: "#181d26"
211
- secondary: "#f8fafc"
212
- secondary-foreground: "#181d26"
213
- chart-1: "#1b61c9" # link blue
214
- chart-2: "#aa2d00" # signature coral
215
- chart-3: "#006400" # forest / success green
216
- chart-4: "#d9a441" # signature mustard
217
- chart-5: "#fcab79" # signature peach
218
- sidebar: "#f8fafc" # derived: corpus nav is white; the operator rail tints one step (surface-soft) for shell separation
219
- sidebar-foreground: "#181d26"
220
- sidebar-primary: "#181d26"
221
- sidebar-primary-foreground: "#ffffff"
222
- sidebar-accent: "#eef3fb" # derived: matches accent tint
223
- sidebar-accent-foreground: "#181d26"
224
- sidebar-border: "#dddddd"
225
- sidebar-ring: "#1b61c9"
226
- spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
227
- radius-scale: [0, 2, 6, 10, 12, 9999]
228
- shadow-levels: [none, sm, md]
229
- motion: { durations: [120, 180, 280], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
230
- icons: { family: lucide, stroke: 1.75 }
231
- accent-count: 1
232
- ```
@@ -12,8 +12,7 @@ hero-scale slab-serif display, full-bleed coral callout bands, a cream-to-dark p
12
12
  entry keeps what survives at operator scale: the warm cream canvas, the single coral accent, the
13
13
  warm-neutral temperature, the moderate radius, the editorial type voice. The 64px display, the coral
14
14
  bands, and the 96px rhythm stay behind. The result is unmistakably Claude — warm where every other
15
- tool is cool — but it earns its density and reserves its one accent; judgments away from the brand are
16
- annotated `# derived:` where the corpus is silent.
15
+ tool is cool — but it earns its density and reserves its one accent.
17
16
 
18
17
  ## 1 Visual Theme
19
18
 
@@ -27,8 +26,8 @@ humanist sans body. Density is `standard`; the anchor surface is a cream canvas
27
26
 
28
27
  ## 2 Color Roles
29
28
 
30
- Light values (the manifest carries hex — the corpus's native format). One accent: `primary` is the
31
- only chromatic hue that carries meaning; teal and amber are chart/status graces, status speaks status.
29
+ Light values. One accent: `primary` is the only chromatic hue that carries meaning; teal and amber
30
+ are chart/status graces, status speaks status.
32
31
 
33
32
  | Role | Value | Allowed where |
34
33
  | --- | --- | --- |
@@ -66,7 +65,7 @@ Emphasis is weight 500 or a larger serif — the brand **never bolds** (serif at
66
65
  | caption | uppercase eyebrow | sans | 12px / 1.4 | `font-weight-strong`, +0.12em, uppercase |
67
66
  | code | IDs, logs, amounts | mono | 13px / 1.5 | `font-weight-normal` |
68
67
 
69
- The machine block carries one sans, not a display face — the agent applies the serif to h1/h2 by hand. Negative tracking on the serif is non-negotiable; it is what reads as Claude.
68
+ Negative tracking on the serif is non-negotiable; it is what reads as Claude.
70
69
 
71
70
  ## 4 Component Stylings
72
71
 
@@ -138,83 +137,3 @@ Directives the emitting agent follows verbatim:
138
137
  - Every workflow completes from the keyboard; the coral `ring` focus outline is always visible.
139
138
  - Stay flat — warm hairline and the cream ladder before shadow; reach past a hairline only for a real
140
139
  overlay. Leave behind the hero display, the coral callout bands, and the 96px rhythm.
141
-
142
- ```yaml design-primitives
143
- radius: 8px # corpus: buttons/inputs at rounded.md (8px); scale offers 12px cards, 16px large
144
- shadow-intensity: 0.35 # derived: color-block-first; shadow rare and faint (corpus ~0.08 alpha)
145
- border-weight: 1px
146
- density-gap: 1
147
- density-inset: 1
148
- font-sans: Styrene B, Inter, system-ui, sans-serif
149
- font-mono: JetBrains Mono, ui-monospace, monospace
150
- font-weight-normal: 400
151
- font-weight-strong: 500 # corpus: labels/titles/buttons weight 500; the brand never bolds (serif holds 400)
152
- heading-tracking: -0.02em # corpus: negative tracking on the serif display is non-negotiable; -0.02em at operator heading scale
153
- duration-unit: 50ms # derived: corpus declares motion out of scope; operator-standard functional base
154
- duration-fast: 100ms # derived: corpus silent on motion
155
- duration-normal: 150ms # derived: corpus silent on motion
156
- duration-slow: 250ms # derived: corpus silent on motion
157
- ease-default: cubic-bezier(0.4,0,0.2,1) # derived: corpus silent; standard operator ease
158
- contrast-boost: 1 # derived: brand's soft warm hairlines are intentional (one elevation step); no boost
159
- icon-stroke: 1.5 # derived: corpus uses minimal hand-drawn line-art; a light 1.5 stroke suits the refined editorial feel
160
- icon-size-base: 16px # derived: corpus silent; operator standard
161
- sidebar-width-expanded: 256px # derived: corpus has no shell; editorial breathing → a touch wider than a dense rail
162
- sidebar-width-collapsed: 56px # derived: corpus has no shell; operator standard icon rail
163
- topbar-height: 56px # derived: corpus top-nav 64px is marketing-generous; operator tightens to 56px
164
- side-panel-width: 440px # derived: corpus has no shell; standard nudged up for editorial breathing
165
- side-panel-width-rich: 640px # derived: corpus has no shell; content-heavy detail width
166
- modal-width-max: 560px # derived: corpus has no shell; confirmations only
167
- form-max-width: 640px # derived: Claude's single-column editorial reading caps forms comfortably
168
- table-row-height: 44px # derived: editorial warmth → rows breathe a touch over the dense 40px default
169
- verbosity: default
170
- feedback: subtle # rationale: Claude's warm humanist voice wants gentle present feedback, not austere silence
171
- density-tier: standard # rationale: an editorial-spacious brand read down to an honest operator tier; warmth carried by palette/radius, not whitespace
172
- product-traits: [dev-tools, ai-console, dashboard, admin]
173
- ```
174
-
175
- ```yaml lever-manifest
176
- version: 1
177
- fonts: { sans: "Styrene B, Inter, system-ui, sans-serif", mono: "JetBrains Mono, ui-monospace, monospace" }
178
- color-tokens:
179
- light:
180
- background: "#faf9f5"
181
- foreground: "#141413"
182
- card: "#faf9f5"
183
- card-foreground: "#141413"
184
- muted: "#f5f0e8"
185
- muted-foreground: "#6c6a64"
186
- border: "#e6dfd8"
187
- input: "#e6dfd8"
188
- ring: "#cc785c"
189
- primary: "#cc785c"
190
- primary-foreground: "#ffffff"
191
- accent: "#e8e0d2"
192
- accent-foreground: "#141413"
193
- destructive: "#c64545"
194
- destructive-foreground: "#ffffff" # derived: white on the warm red
195
- success: "#5db872"
196
- warning: "#d4a017"
197
- popover: "#faf9f5"
198
- popover-foreground: "#141413"
199
- secondary: "#efe9de"
200
- secondary-foreground: "#141413"
201
- chart-1: "#cc785c" # coral
202
- chart-2: "#5db8a6" # teal
203
- chart-3: "#e8a55a" # amber
204
- chart-4: "#6c6a64" # derived: warm taupe neutral for spread
205
- chart-5: "#252320" # derived: dark navy anchor; all series warm to hold temperature
206
- sidebar: "#f5f0e8"
207
- sidebar-foreground: "#141413"
208
- sidebar-primary: "#cc785c"
209
- sidebar-primary-foreground: "#ffffff"
210
- sidebar-accent: "#e8e0d2"
211
- sidebar-accent-foreground: "#141413"
212
- sidebar-border: "#e6dfd8"
213
- sidebar-ring: "#cc785c"
214
- spacing-scale: [2, 4, 8, 12, 16, 24, 32, 48, 64]
215
- radius-scale: [0, 4, 6, 8, 12, 16, 9999]
216
- shadow-levels: [none, sm, md]
217
- motion: { durations: [100, 150, 250], easings: ["cubic-bezier(0.4,0,0.2,1)"] }
218
- icons: { family: lucide, stroke: 1.5 }
219
- accent-count: 1
220
- ```