@etus/seven-skill 0.1.0-beta.3 → 0.1.0-beta.4

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 (570) hide show
  1. package/.agents/skills/seven/SKILL.md +161 -0
  2. package/.agents/skills/seven/agents/seven_asset_producer.toml +37 -0
  3. package/.agents/skills/seven/agents/seven_finish_reviewer.toml +33 -0
  4. package/.agents/skills/seven/agents/seven_manual_edit_applier.toml +43 -0
  5. package/.agents/skills/seven/reference/adapt.md +34 -0
  6. package/.agents/skills/seven/reference/animate.md +31 -0
  7. package/.agents/skills/seven/reference/app-shell.md +152 -0
  8. package/.agents/skills/seven/reference/audit.md +122 -0
  9. package/.agents/skills/seven/reference/bolder.md +34 -0
  10. package/.agents/skills/seven/reference/brand.md +31 -0
  11. package/.agents/skills/seven/reference/clarify.md +76 -0
  12. package/.agents/skills/seven/reference/color-and-contrast.md +84 -0
  13. package/.agents/skills/seven/reference/colorize.md +31 -0
  14. package/.agents/skills/seven/reference/critique.md +53 -0
  15. package/.agents/skills/seven/reference/delight.md +30 -0
  16. package/.agents/skills/seven/reference/distill.md +30 -0
  17. package/.agents/skills/seven/reference/doctor.md +7 -0
  18. package/.agents/skills/seven/reference/document.md +36 -0
  19. package/.agents/skills/seven/reference/evaluations.md +38 -0
  20. package/.agents/skills/seven/reference/exceptions.md +7 -0
  21. package/.agents/skills/seven/reference/extract.md +42 -0
  22. package/.agents/skills/seven/reference/harden.md +36 -0
  23. package/.agents/skills/seven/reference/hooks.md +11 -0
  24. package/.agents/skills/seven/reference/init.md +38 -0
  25. package/.agents/skills/seven/reference/layout.md +33 -0
  26. package/.agents/skills/seven/reference/live.md +106 -0
  27. package/.agents/skills/seven/reference/motion-design.md +71 -0
  28. package/.agents/skills/seven/reference/onboard.md +35 -0
  29. package/.agents/skills/seven/reference/optimize.md +34 -0
  30. package/.agents/skills/seven/reference/overdrive.md +32 -0
  31. package/.agents/skills/seven/reference/polish.md +55 -0
  32. package/.agents/skills/seven/reference/product.md +43 -0
  33. package/.agents/skills/seven/reference/quieter.md +31 -0
  34. package/.agents/skills/seven/reference/routing.md +28 -0
  35. package/.agents/skills/seven/reference/shape.md +85 -0
  36. package/.agents/skills/seven/reference/spatial-design.md +60 -0
  37. package/.agents/skills/seven/reference/typeset.md +28 -0
  38. package/.agents/skills/seven/reference/typography.md +43 -0
  39. package/.agents/skills/seven/reference/ux-writing.md +47 -0
  40. package/.agents/skills/seven/reference/visual-probes.md +36 -0
  41. package/.agents/skills/seven/scripts/context-signals.mjs +94 -0
  42. package/.agents/skills/seven/scripts/critique-storage.mjs +155 -0
  43. package/.agents/skills/seven/scripts/load-context.mjs +93 -0
  44. package/.agents/skills/seven/scripts/update-check.mjs +120 -0
  45. package/.claude/agents/seven-asset-producer.md +40 -0
  46. package/.claude/agents/seven-finish-reviewer.md +36 -0
  47. package/.claude/agents/seven-manual-edit-applier.md +46 -0
  48. package/.claude/skills/seven/SKILL.md +127 -130
  49. package/.claude/skills/seven/reference/adapt.md +34 -0
  50. package/.claude/skills/seven/reference/animate.md +31 -0
  51. package/.claude/skills/seven/reference/app-shell.md +100 -18
  52. package/.claude/skills/seven/reference/audit.md +6 -4
  53. package/.claude/skills/seven/reference/bolder.md +34 -0
  54. package/.claude/skills/seven/reference/brand.md +21 -14
  55. package/.claude/skills/seven/reference/clarify.md +2 -2
  56. package/.claude/skills/seven/reference/colorize.md +31 -0
  57. package/.claude/skills/seven/reference/critique.md +53 -0
  58. package/.claude/skills/seven/reference/delight.md +30 -0
  59. package/.claude/skills/seven/reference/distill.md +30 -0
  60. package/.claude/skills/seven/reference/doctor.md +7 -0
  61. package/.claude/skills/seven/reference/document.md +36 -0
  62. package/.claude/skills/seven/reference/evaluations.md +38 -0
  63. package/.claude/skills/seven/reference/exceptions.md +7 -0
  64. package/.claude/skills/seven/reference/extract.md +42 -0
  65. package/.claude/skills/seven/reference/harden.md +36 -0
  66. package/.claude/skills/seven/reference/hooks.md +11 -0
  67. package/.claude/skills/seven/reference/init.md +38 -0
  68. package/.claude/skills/seven/reference/layout.md +33 -0
  69. package/.claude/skills/seven/reference/live.md +106 -0
  70. package/.claude/skills/seven/reference/motion-design.md +1 -1
  71. package/.claude/skills/seven/reference/onboard.md +35 -0
  72. package/.claude/skills/seven/reference/optimize.md +34 -0
  73. package/.claude/skills/seven/reference/overdrive.md +32 -0
  74. package/.claude/skills/seven/reference/polish.md +5 -5
  75. package/.claude/skills/seven/reference/product.md +2 -4
  76. package/.claude/skills/seven/reference/quieter.md +31 -0
  77. package/.claude/skills/seven/reference/routing.md +28 -0
  78. package/.claude/skills/seven/reference/shape.md +5 -5
  79. package/.claude/skills/seven/reference/spatial-design.md +3 -3
  80. package/.claude/skills/seven/reference/typeset.md +28 -0
  81. package/.claude/skills/seven/reference/typography.md +1 -1
  82. package/.claude/skills/seven/reference/visual-probes.md +36 -0
  83. package/.claude/skills/seven/scripts/context-signals.mjs +94 -0
  84. package/.claude/skills/seven/scripts/critique-storage.mjs +155 -0
  85. package/.claude/skills/seven/scripts/load-context.mjs +68 -59
  86. package/.claude/skills/seven/scripts/update-check.mjs +120 -0
  87. package/.claude-plugin/marketplace.json +2 -2
  88. package/.claude-plugin/plugin.json +8 -3
  89. package/.cursor/skills/seven/SKILL.md +161 -0
  90. package/.cursor/skills/seven/reference/adapt.md +34 -0
  91. package/.cursor/skills/seven/reference/animate.md +31 -0
  92. package/.cursor/skills/seven/reference/app-shell.md +152 -0
  93. package/.cursor/skills/seven/reference/audit.md +122 -0
  94. package/.cursor/skills/seven/reference/bolder.md +34 -0
  95. package/.cursor/skills/seven/reference/brand.md +31 -0
  96. package/.cursor/skills/seven/reference/clarify.md +76 -0
  97. package/.cursor/skills/seven/reference/color-and-contrast.md +84 -0
  98. package/.cursor/skills/seven/reference/colorize.md +31 -0
  99. package/.cursor/skills/seven/reference/critique.md +53 -0
  100. package/.cursor/skills/seven/reference/delight.md +30 -0
  101. package/.cursor/skills/seven/reference/distill.md +30 -0
  102. package/.cursor/skills/seven/reference/doctor.md +7 -0
  103. package/.cursor/skills/seven/reference/document.md +36 -0
  104. package/.cursor/skills/seven/reference/evaluations.md +38 -0
  105. package/.cursor/skills/seven/reference/exceptions.md +7 -0
  106. package/.cursor/skills/seven/reference/extract.md +42 -0
  107. package/.cursor/skills/seven/reference/harden.md +36 -0
  108. package/.cursor/skills/seven/reference/hooks.md +11 -0
  109. package/.cursor/skills/seven/reference/init.md +38 -0
  110. package/.cursor/skills/seven/reference/layout.md +33 -0
  111. package/.cursor/skills/seven/reference/live.md +106 -0
  112. package/.cursor/skills/seven/reference/motion-design.md +71 -0
  113. package/.cursor/skills/seven/reference/onboard.md +35 -0
  114. package/.cursor/skills/seven/reference/optimize.md +34 -0
  115. package/.cursor/skills/seven/reference/overdrive.md +32 -0
  116. package/.cursor/skills/seven/reference/polish.md +55 -0
  117. package/.cursor/skills/seven/reference/product.md +43 -0
  118. package/.cursor/skills/seven/reference/quieter.md +31 -0
  119. package/.cursor/skills/seven/reference/routing.md +28 -0
  120. package/.cursor/skills/seven/reference/shape.md +85 -0
  121. package/.cursor/skills/seven/reference/spatial-design.md +60 -0
  122. package/.cursor/skills/seven/reference/typeset.md +28 -0
  123. package/.cursor/skills/seven/reference/typography.md +43 -0
  124. package/.cursor/skills/seven/reference/ux-writing.md +47 -0
  125. package/.cursor/skills/seven/reference/visual-probes.md +36 -0
  126. package/.cursor/skills/seven/scripts/context-signals.mjs +94 -0
  127. package/.cursor/skills/seven/scripts/critique-storage.mjs +155 -0
  128. package/.cursor/skills/seven/scripts/load-context.mjs +93 -0
  129. package/.cursor/skills/seven/scripts/update-check.mjs +120 -0
  130. package/.gemini/skills/seven/SKILL.md +160 -0
  131. package/.gemini/skills/seven/reference/adapt.md +34 -0
  132. package/.gemini/skills/seven/reference/animate.md +31 -0
  133. package/.gemini/skills/seven/reference/app-shell.md +152 -0
  134. package/.gemini/skills/seven/reference/audit.md +122 -0
  135. package/.gemini/skills/seven/reference/bolder.md +34 -0
  136. package/.gemini/skills/seven/reference/brand.md +31 -0
  137. package/.gemini/skills/seven/reference/clarify.md +76 -0
  138. package/.gemini/skills/seven/reference/color-and-contrast.md +84 -0
  139. package/.gemini/skills/seven/reference/colorize.md +31 -0
  140. package/.gemini/skills/seven/reference/critique.md +53 -0
  141. package/.gemini/skills/seven/reference/delight.md +30 -0
  142. package/.gemini/skills/seven/reference/distill.md +30 -0
  143. package/.gemini/skills/seven/reference/doctor.md +7 -0
  144. package/.gemini/skills/seven/reference/document.md +36 -0
  145. package/.gemini/skills/seven/reference/evaluations.md +38 -0
  146. package/.gemini/skills/seven/reference/exceptions.md +7 -0
  147. package/.gemini/skills/seven/reference/extract.md +42 -0
  148. package/.gemini/skills/seven/reference/harden.md +36 -0
  149. package/.gemini/skills/seven/reference/hooks.md +11 -0
  150. package/.gemini/skills/seven/reference/init.md +38 -0
  151. package/.gemini/skills/seven/reference/layout.md +33 -0
  152. package/.gemini/skills/seven/reference/live.md +106 -0
  153. package/.gemini/skills/seven/reference/motion-design.md +71 -0
  154. package/.gemini/skills/seven/reference/onboard.md +35 -0
  155. package/.gemini/skills/seven/reference/optimize.md +34 -0
  156. package/.gemini/skills/seven/reference/overdrive.md +32 -0
  157. package/.gemini/skills/seven/reference/polish.md +55 -0
  158. package/.gemini/skills/seven/reference/product.md +43 -0
  159. package/.gemini/skills/seven/reference/quieter.md +31 -0
  160. package/.gemini/skills/seven/reference/routing.md +28 -0
  161. package/.gemini/skills/seven/reference/shape.md +85 -0
  162. package/.gemini/skills/seven/reference/spatial-design.md +60 -0
  163. package/.gemini/skills/seven/reference/typeset.md +28 -0
  164. package/.gemini/skills/seven/reference/typography.md +43 -0
  165. package/.gemini/skills/seven/reference/ux-writing.md +47 -0
  166. package/.gemini/skills/seven/reference/visual-probes.md +36 -0
  167. package/.gemini/skills/seven/scripts/context-signals.mjs +94 -0
  168. package/.gemini/skills/seven/scripts/critique-storage.mjs +155 -0
  169. package/.gemini/skills/seven/scripts/load-context.mjs +93 -0
  170. package/.gemini/skills/seven/scripts/update-check.mjs +120 -0
  171. package/.grok/agents/seven-asset-producer.md +40 -0
  172. package/.grok/agents/seven-finish-reviewer.md +36 -0
  173. package/.grok/agents/seven-manual-edit-applier.md +46 -0
  174. package/.grok/skills/seven/SKILL.md +167 -0
  175. package/.grok/skills/seven/reference/adapt.md +34 -0
  176. package/.grok/skills/seven/reference/animate.md +31 -0
  177. package/.grok/skills/seven/reference/app-shell.md +152 -0
  178. package/.grok/skills/seven/reference/audit.md +122 -0
  179. package/.grok/skills/seven/reference/bolder.md +34 -0
  180. package/.grok/skills/seven/reference/brand.md +31 -0
  181. package/.grok/skills/seven/reference/clarify.md +76 -0
  182. package/.grok/skills/seven/reference/color-and-contrast.md +84 -0
  183. package/.grok/skills/seven/reference/colorize.md +31 -0
  184. package/.grok/skills/seven/reference/critique.md +53 -0
  185. package/.grok/skills/seven/reference/delight.md +30 -0
  186. package/.grok/skills/seven/reference/distill.md +30 -0
  187. package/.grok/skills/seven/reference/doctor.md +7 -0
  188. package/.grok/skills/seven/reference/document.md +36 -0
  189. package/.grok/skills/seven/reference/evaluations.md +38 -0
  190. package/.grok/skills/seven/reference/exceptions.md +7 -0
  191. package/.grok/skills/seven/reference/extract.md +42 -0
  192. package/.grok/skills/seven/reference/harden.md +36 -0
  193. package/.grok/skills/seven/reference/hooks.md +11 -0
  194. package/.grok/skills/seven/reference/init.md +38 -0
  195. package/.grok/skills/seven/reference/layout.md +33 -0
  196. package/.grok/skills/seven/reference/live.md +106 -0
  197. package/.grok/skills/seven/reference/motion-design.md +71 -0
  198. package/.grok/skills/seven/reference/onboard.md +35 -0
  199. package/.grok/skills/seven/reference/optimize.md +34 -0
  200. package/.grok/skills/seven/reference/overdrive.md +32 -0
  201. package/.grok/skills/seven/reference/polish.md +55 -0
  202. package/.grok/skills/seven/reference/product.md +43 -0
  203. package/.grok/skills/seven/reference/quieter.md +31 -0
  204. package/.grok/skills/seven/reference/routing.md +28 -0
  205. package/.grok/skills/seven/reference/shape.md +85 -0
  206. package/.grok/skills/seven/reference/spatial-design.md +60 -0
  207. package/.grok/skills/seven/reference/typeset.md +28 -0
  208. package/.grok/skills/seven/reference/typography.md +43 -0
  209. package/.grok/skills/seven/reference/ux-writing.md +47 -0
  210. package/.grok/skills/seven/reference/visual-probes.md +36 -0
  211. package/.grok/skills/seven/scripts/context-signals.mjs +94 -0
  212. package/.grok/skills/seven/scripts/critique-storage.mjs +155 -0
  213. package/.grok/skills/seven/scripts/load-context.mjs +93 -0
  214. package/.grok/skills/seven/scripts/update-check.mjs +120 -0
  215. package/.kiro/skills/seven/SKILL.md +161 -0
  216. package/.kiro/skills/seven/reference/adapt.md +34 -0
  217. package/.kiro/skills/seven/reference/animate.md +31 -0
  218. package/.kiro/skills/seven/reference/app-shell.md +152 -0
  219. package/.kiro/skills/seven/reference/audit.md +122 -0
  220. package/.kiro/skills/seven/reference/bolder.md +34 -0
  221. package/.kiro/skills/seven/reference/brand.md +31 -0
  222. package/.kiro/skills/seven/reference/clarify.md +76 -0
  223. package/.kiro/skills/seven/reference/color-and-contrast.md +84 -0
  224. package/.kiro/skills/seven/reference/colorize.md +31 -0
  225. package/.kiro/skills/seven/reference/critique.md +53 -0
  226. package/.kiro/skills/seven/reference/delight.md +30 -0
  227. package/.kiro/skills/seven/reference/distill.md +30 -0
  228. package/.kiro/skills/seven/reference/doctor.md +7 -0
  229. package/.kiro/skills/seven/reference/document.md +36 -0
  230. package/.kiro/skills/seven/reference/evaluations.md +38 -0
  231. package/.kiro/skills/seven/reference/exceptions.md +7 -0
  232. package/.kiro/skills/seven/reference/extract.md +42 -0
  233. package/.kiro/skills/seven/reference/harden.md +36 -0
  234. package/.kiro/skills/seven/reference/hooks.md +11 -0
  235. package/.kiro/skills/seven/reference/init.md +38 -0
  236. package/.kiro/skills/seven/reference/layout.md +33 -0
  237. package/.kiro/skills/seven/reference/live.md +106 -0
  238. package/.kiro/skills/seven/reference/motion-design.md +71 -0
  239. package/.kiro/skills/seven/reference/onboard.md +35 -0
  240. package/.kiro/skills/seven/reference/optimize.md +34 -0
  241. package/.kiro/skills/seven/reference/overdrive.md +32 -0
  242. package/.kiro/skills/seven/reference/polish.md +55 -0
  243. package/.kiro/skills/seven/reference/product.md +43 -0
  244. package/.kiro/skills/seven/reference/quieter.md +31 -0
  245. package/.kiro/skills/seven/reference/routing.md +28 -0
  246. package/.kiro/skills/seven/reference/shape.md +85 -0
  247. package/.kiro/skills/seven/reference/spatial-design.md +60 -0
  248. package/.kiro/skills/seven/reference/typeset.md +28 -0
  249. package/.kiro/skills/seven/reference/typography.md +43 -0
  250. package/.kiro/skills/seven/reference/ux-writing.md +47 -0
  251. package/.kiro/skills/seven/reference/visual-probes.md +36 -0
  252. package/.kiro/skills/seven/scripts/context-signals.mjs +94 -0
  253. package/.kiro/skills/seven/scripts/critique-storage.mjs +155 -0
  254. package/.kiro/skills/seven/scripts/load-context.mjs +93 -0
  255. package/.kiro/skills/seven/scripts/update-check.mjs +120 -0
  256. package/.opencode/skills/seven/SKILL.md +167 -0
  257. package/.opencode/skills/seven/reference/adapt.md +34 -0
  258. package/.opencode/skills/seven/reference/animate.md +31 -0
  259. package/.opencode/skills/seven/reference/app-shell.md +152 -0
  260. package/.opencode/skills/seven/reference/audit.md +122 -0
  261. package/.opencode/skills/seven/reference/bolder.md +34 -0
  262. package/.opencode/skills/seven/reference/brand.md +31 -0
  263. package/.opencode/skills/seven/reference/clarify.md +76 -0
  264. package/.opencode/skills/seven/reference/color-and-contrast.md +84 -0
  265. package/.opencode/skills/seven/reference/colorize.md +31 -0
  266. package/.opencode/skills/seven/reference/critique.md +53 -0
  267. package/.opencode/skills/seven/reference/delight.md +30 -0
  268. package/.opencode/skills/seven/reference/distill.md +30 -0
  269. package/.opencode/skills/seven/reference/doctor.md +7 -0
  270. package/.opencode/skills/seven/reference/document.md +36 -0
  271. package/.opencode/skills/seven/reference/evaluations.md +38 -0
  272. package/.opencode/skills/seven/reference/exceptions.md +7 -0
  273. package/.opencode/skills/seven/reference/extract.md +42 -0
  274. package/.opencode/skills/seven/reference/harden.md +36 -0
  275. package/.opencode/skills/seven/reference/hooks.md +11 -0
  276. package/.opencode/skills/seven/reference/init.md +38 -0
  277. package/.opencode/skills/seven/reference/layout.md +33 -0
  278. package/.opencode/skills/seven/reference/live.md +106 -0
  279. package/.opencode/skills/seven/reference/motion-design.md +71 -0
  280. package/.opencode/skills/seven/reference/onboard.md +35 -0
  281. package/.opencode/skills/seven/reference/optimize.md +34 -0
  282. package/.opencode/skills/seven/reference/overdrive.md +32 -0
  283. package/.opencode/skills/seven/reference/polish.md +55 -0
  284. package/.opencode/skills/seven/reference/product.md +43 -0
  285. package/.opencode/skills/seven/reference/quieter.md +31 -0
  286. package/.opencode/skills/seven/reference/routing.md +28 -0
  287. package/.opencode/skills/seven/reference/shape.md +85 -0
  288. package/.opencode/skills/seven/reference/spatial-design.md +60 -0
  289. package/.opencode/skills/seven/reference/typeset.md +28 -0
  290. package/.opencode/skills/seven/reference/typography.md +43 -0
  291. package/.opencode/skills/seven/reference/ux-writing.md +47 -0
  292. package/.opencode/skills/seven/reference/visual-probes.md +36 -0
  293. package/.opencode/skills/seven/scripts/context-signals.mjs +94 -0
  294. package/.opencode/skills/seven/scripts/critique-storage.mjs +155 -0
  295. package/.opencode/skills/seven/scripts/load-context.mjs +93 -0
  296. package/.opencode/skills/seven/scripts/update-check.mjs +120 -0
  297. package/.pi/skills/seven/SKILL.md +165 -0
  298. package/.pi/skills/seven/reference/adapt.md +34 -0
  299. package/.pi/skills/seven/reference/animate.md +31 -0
  300. package/.pi/skills/seven/reference/app-shell.md +152 -0
  301. package/.pi/skills/seven/reference/audit.md +122 -0
  302. package/.pi/skills/seven/reference/bolder.md +34 -0
  303. package/.pi/skills/seven/reference/brand.md +31 -0
  304. package/.pi/skills/seven/reference/clarify.md +76 -0
  305. package/.pi/skills/seven/reference/color-and-contrast.md +84 -0
  306. package/.pi/skills/seven/reference/colorize.md +31 -0
  307. package/.pi/skills/seven/reference/critique.md +53 -0
  308. package/.pi/skills/seven/reference/delight.md +30 -0
  309. package/.pi/skills/seven/reference/distill.md +30 -0
  310. package/.pi/skills/seven/reference/doctor.md +7 -0
  311. package/.pi/skills/seven/reference/document.md +36 -0
  312. package/.pi/skills/seven/reference/evaluations.md +38 -0
  313. package/.pi/skills/seven/reference/exceptions.md +7 -0
  314. package/.pi/skills/seven/reference/extract.md +42 -0
  315. package/.pi/skills/seven/reference/harden.md +36 -0
  316. package/.pi/skills/seven/reference/hooks.md +11 -0
  317. package/.pi/skills/seven/reference/init.md +38 -0
  318. package/.pi/skills/seven/reference/layout.md +33 -0
  319. package/.pi/skills/seven/reference/live.md +106 -0
  320. package/.pi/skills/seven/reference/motion-design.md +71 -0
  321. package/.pi/skills/seven/reference/onboard.md +35 -0
  322. package/.pi/skills/seven/reference/optimize.md +34 -0
  323. package/.pi/skills/seven/reference/overdrive.md +32 -0
  324. package/.pi/skills/seven/reference/polish.md +55 -0
  325. package/.pi/skills/seven/reference/product.md +43 -0
  326. package/.pi/skills/seven/reference/quieter.md +31 -0
  327. package/.pi/skills/seven/reference/routing.md +28 -0
  328. package/.pi/skills/seven/reference/shape.md +85 -0
  329. package/.pi/skills/seven/reference/spatial-design.md +60 -0
  330. package/.pi/skills/seven/reference/typeset.md +28 -0
  331. package/.pi/skills/seven/reference/typography.md +43 -0
  332. package/.pi/skills/seven/reference/ux-writing.md +47 -0
  333. package/.pi/skills/seven/reference/visual-probes.md +36 -0
  334. package/.pi/skills/seven/scripts/context-signals.mjs +94 -0
  335. package/.pi/skills/seven/scripts/critique-storage.mjs +155 -0
  336. package/.pi/skills/seven/scripts/load-context.mjs +93 -0
  337. package/.pi/skills/seven/scripts/update-check.mjs +120 -0
  338. package/.qoder/skills/seven/SKILL.md +167 -0
  339. package/.qoder/skills/seven/reference/adapt.md +34 -0
  340. package/.qoder/skills/seven/reference/animate.md +31 -0
  341. package/.qoder/skills/seven/reference/app-shell.md +152 -0
  342. package/.qoder/skills/seven/reference/audit.md +122 -0
  343. package/.qoder/skills/seven/reference/bolder.md +34 -0
  344. package/.qoder/skills/seven/reference/brand.md +31 -0
  345. package/.qoder/skills/seven/reference/clarify.md +76 -0
  346. package/.qoder/skills/seven/reference/color-and-contrast.md +84 -0
  347. package/.qoder/skills/seven/reference/colorize.md +31 -0
  348. package/.qoder/skills/seven/reference/critique.md +53 -0
  349. package/.qoder/skills/seven/reference/delight.md +30 -0
  350. package/.qoder/skills/seven/reference/distill.md +30 -0
  351. package/.qoder/skills/seven/reference/doctor.md +7 -0
  352. package/.qoder/skills/seven/reference/document.md +36 -0
  353. package/.qoder/skills/seven/reference/evaluations.md +38 -0
  354. package/.qoder/skills/seven/reference/exceptions.md +7 -0
  355. package/.qoder/skills/seven/reference/extract.md +42 -0
  356. package/.qoder/skills/seven/reference/harden.md +36 -0
  357. package/.qoder/skills/seven/reference/hooks.md +11 -0
  358. package/.qoder/skills/seven/reference/init.md +38 -0
  359. package/.qoder/skills/seven/reference/layout.md +33 -0
  360. package/.qoder/skills/seven/reference/live.md +106 -0
  361. package/.qoder/skills/seven/reference/motion-design.md +71 -0
  362. package/.qoder/skills/seven/reference/onboard.md +35 -0
  363. package/.qoder/skills/seven/reference/optimize.md +34 -0
  364. package/.qoder/skills/seven/reference/overdrive.md +32 -0
  365. package/.qoder/skills/seven/reference/polish.md +55 -0
  366. package/.qoder/skills/seven/reference/product.md +43 -0
  367. package/.qoder/skills/seven/reference/quieter.md +31 -0
  368. package/.qoder/skills/seven/reference/routing.md +28 -0
  369. package/.qoder/skills/seven/reference/shape.md +85 -0
  370. package/.qoder/skills/seven/reference/spatial-design.md +60 -0
  371. package/.qoder/skills/seven/reference/typeset.md +28 -0
  372. package/.qoder/skills/seven/reference/typography.md +43 -0
  373. package/.qoder/skills/seven/reference/ux-writing.md +47 -0
  374. package/.qoder/skills/seven/reference/visual-probes.md +36 -0
  375. package/.qoder/skills/seven/scripts/context-signals.mjs +94 -0
  376. package/.qoder/skills/seven/scripts/critique-storage.mjs +155 -0
  377. package/.qoder/skills/seven/scripts/load-context.mjs +93 -0
  378. package/.qoder/skills/seven/scripts/update-check.mjs +120 -0
  379. package/.rovodev/skills/seven/SKILL.md +167 -0
  380. package/.rovodev/skills/seven/reference/adapt.md +34 -0
  381. package/.rovodev/skills/seven/reference/animate.md +31 -0
  382. package/.rovodev/skills/seven/reference/app-shell.md +152 -0
  383. package/.rovodev/skills/seven/reference/audit.md +122 -0
  384. package/.rovodev/skills/seven/reference/bolder.md +34 -0
  385. package/.rovodev/skills/seven/reference/brand.md +31 -0
  386. package/.rovodev/skills/seven/reference/clarify.md +76 -0
  387. package/.rovodev/skills/seven/reference/color-and-contrast.md +84 -0
  388. package/.rovodev/skills/seven/reference/colorize.md +31 -0
  389. package/.rovodev/skills/seven/reference/critique.md +53 -0
  390. package/.rovodev/skills/seven/reference/delight.md +30 -0
  391. package/.rovodev/skills/seven/reference/distill.md +30 -0
  392. package/.rovodev/skills/seven/reference/doctor.md +7 -0
  393. package/.rovodev/skills/seven/reference/document.md +36 -0
  394. package/.rovodev/skills/seven/reference/evaluations.md +38 -0
  395. package/.rovodev/skills/seven/reference/exceptions.md +7 -0
  396. package/.rovodev/skills/seven/reference/extract.md +42 -0
  397. package/.rovodev/skills/seven/reference/harden.md +36 -0
  398. package/.rovodev/skills/seven/reference/hooks.md +11 -0
  399. package/.rovodev/skills/seven/reference/init.md +38 -0
  400. package/.rovodev/skills/seven/reference/layout.md +33 -0
  401. package/.rovodev/skills/seven/reference/live.md +106 -0
  402. package/.rovodev/skills/seven/reference/motion-design.md +71 -0
  403. package/.rovodev/skills/seven/reference/onboard.md +35 -0
  404. package/.rovodev/skills/seven/reference/optimize.md +34 -0
  405. package/.rovodev/skills/seven/reference/overdrive.md +32 -0
  406. package/.rovodev/skills/seven/reference/polish.md +55 -0
  407. package/.rovodev/skills/seven/reference/product.md +43 -0
  408. package/.rovodev/skills/seven/reference/quieter.md +31 -0
  409. package/.rovodev/skills/seven/reference/routing.md +28 -0
  410. package/.rovodev/skills/seven/reference/shape.md +85 -0
  411. package/.rovodev/skills/seven/reference/spatial-design.md +60 -0
  412. package/.rovodev/skills/seven/reference/typeset.md +28 -0
  413. package/.rovodev/skills/seven/reference/typography.md +43 -0
  414. package/.rovodev/skills/seven/reference/ux-writing.md +47 -0
  415. package/.rovodev/skills/seven/reference/visual-probes.md +36 -0
  416. package/.rovodev/skills/seven/scripts/context-signals.mjs +94 -0
  417. package/.rovodev/skills/seven/scripts/critique-storage.mjs +155 -0
  418. package/.rovodev/skills/seven/scripts/load-context.mjs +93 -0
  419. package/.rovodev/skills/seven/scripts/update-check.mjs +120 -0
  420. package/.trae/skills/seven/SKILL.md +163 -0
  421. package/.trae/skills/seven/reference/adapt.md +34 -0
  422. package/.trae/skills/seven/reference/animate.md +31 -0
  423. package/.trae/skills/seven/reference/app-shell.md +152 -0
  424. package/.trae/skills/seven/reference/audit.md +122 -0
  425. package/.trae/skills/seven/reference/bolder.md +34 -0
  426. package/.trae/skills/seven/reference/brand.md +31 -0
  427. package/.trae/skills/seven/reference/clarify.md +76 -0
  428. package/.trae/skills/seven/reference/color-and-contrast.md +84 -0
  429. package/.trae/skills/seven/reference/colorize.md +31 -0
  430. package/.trae/skills/seven/reference/critique.md +53 -0
  431. package/.trae/skills/seven/reference/delight.md +30 -0
  432. package/.trae/skills/seven/reference/distill.md +30 -0
  433. package/.trae/skills/seven/reference/doctor.md +7 -0
  434. package/.trae/skills/seven/reference/document.md +36 -0
  435. package/.trae/skills/seven/reference/evaluations.md +38 -0
  436. package/.trae/skills/seven/reference/exceptions.md +7 -0
  437. package/.trae/skills/seven/reference/extract.md +42 -0
  438. package/.trae/skills/seven/reference/harden.md +36 -0
  439. package/.trae/skills/seven/reference/hooks.md +11 -0
  440. package/.trae/skills/seven/reference/init.md +38 -0
  441. package/.trae/skills/seven/reference/layout.md +33 -0
  442. package/.trae/skills/seven/reference/live.md +106 -0
  443. package/.trae/skills/seven/reference/motion-design.md +71 -0
  444. package/.trae/skills/seven/reference/onboard.md +35 -0
  445. package/.trae/skills/seven/reference/optimize.md +34 -0
  446. package/.trae/skills/seven/reference/overdrive.md +32 -0
  447. package/.trae/skills/seven/reference/polish.md +55 -0
  448. package/.trae/skills/seven/reference/product.md +43 -0
  449. package/.trae/skills/seven/reference/quieter.md +31 -0
  450. package/.trae/skills/seven/reference/routing.md +28 -0
  451. package/.trae/skills/seven/reference/shape.md +85 -0
  452. package/.trae/skills/seven/reference/spatial-design.md +60 -0
  453. package/.trae/skills/seven/reference/typeset.md +28 -0
  454. package/.trae/skills/seven/reference/typography.md +43 -0
  455. package/.trae/skills/seven/reference/ux-writing.md +47 -0
  456. package/.trae/skills/seven/reference/visual-probes.md +36 -0
  457. package/.trae/skills/seven/scripts/context-signals.mjs +94 -0
  458. package/.trae/skills/seven/scripts/critique-storage.mjs +155 -0
  459. package/.trae/skills/seven/scripts/load-context.mjs +93 -0
  460. package/.trae/skills/seven/scripts/update-check.mjs +120 -0
  461. package/.trae-cn/skills/seven/SKILL.md +163 -0
  462. package/.trae-cn/skills/seven/reference/adapt.md +34 -0
  463. package/.trae-cn/skills/seven/reference/animate.md +31 -0
  464. package/.trae-cn/skills/seven/reference/app-shell.md +152 -0
  465. package/.trae-cn/skills/seven/reference/audit.md +122 -0
  466. package/.trae-cn/skills/seven/reference/bolder.md +34 -0
  467. package/.trae-cn/skills/seven/reference/brand.md +31 -0
  468. package/.trae-cn/skills/seven/reference/clarify.md +76 -0
  469. package/.trae-cn/skills/seven/reference/color-and-contrast.md +84 -0
  470. package/.trae-cn/skills/seven/reference/colorize.md +31 -0
  471. package/.trae-cn/skills/seven/reference/critique.md +53 -0
  472. package/.trae-cn/skills/seven/reference/delight.md +30 -0
  473. package/.trae-cn/skills/seven/reference/distill.md +30 -0
  474. package/.trae-cn/skills/seven/reference/doctor.md +7 -0
  475. package/.trae-cn/skills/seven/reference/document.md +36 -0
  476. package/.trae-cn/skills/seven/reference/evaluations.md +38 -0
  477. package/.trae-cn/skills/seven/reference/exceptions.md +7 -0
  478. package/.trae-cn/skills/seven/reference/extract.md +42 -0
  479. package/.trae-cn/skills/seven/reference/harden.md +36 -0
  480. package/.trae-cn/skills/seven/reference/hooks.md +11 -0
  481. package/.trae-cn/skills/seven/reference/init.md +38 -0
  482. package/.trae-cn/skills/seven/reference/layout.md +33 -0
  483. package/.trae-cn/skills/seven/reference/live.md +106 -0
  484. package/.trae-cn/skills/seven/reference/motion-design.md +71 -0
  485. package/.trae-cn/skills/seven/reference/onboard.md +35 -0
  486. package/.trae-cn/skills/seven/reference/optimize.md +34 -0
  487. package/.trae-cn/skills/seven/reference/overdrive.md +32 -0
  488. package/.trae-cn/skills/seven/reference/polish.md +55 -0
  489. package/.trae-cn/skills/seven/reference/product.md +43 -0
  490. package/.trae-cn/skills/seven/reference/quieter.md +31 -0
  491. package/.trae-cn/skills/seven/reference/routing.md +28 -0
  492. package/.trae-cn/skills/seven/reference/shape.md +85 -0
  493. package/.trae-cn/skills/seven/reference/spatial-design.md +60 -0
  494. package/.trae-cn/skills/seven/reference/typeset.md +28 -0
  495. package/.trae-cn/skills/seven/reference/typography.md +43 -0
  496. package/.trae-cn/skills/seven/reference/ux-writing.md +47 -0
  497. package/.trae-cn/skills/seven/reference/visual-probes.md +36 -0
  498. package/.trae-cn/skills/seven/scripts/context-signals.mjs +94 -0
  499. package/.trae-cn/skills/seven/scripts/critique-storage.mjs +155 -0
  500. package/.trae-cn/skills/seven/scripts/load-context.mjs +93 -0
  501. package/.trae-cn/skills/seven/scripts/update-check.mjs +120 -0
  502. package/.vibe/skills/seven/SKILL.md +166 -0
  503. package/.vibe/skills/seven/reference/adapt.md +34 -0
  504. package/.vibe/skills/seven/reference/animate.md +31 -0
  505. package/.vibe/skills/seven/reference/app-shell.md +152 -0
  506. package/.vibe/skills/seven/reference/audit.md +122 -0
  507. package/.vibe/skills/seven/reference/bolder.md +34 -0
  508. package/.vibe/skills/seven/reference/brand.md +31 -0
  509. package/.vibe/skills/seven/reference/clarify.md +76 -0
  510. package/.vibe/skills/seven/reference/color-and-contrast.md +84 -0
  511. package/.vibe/skills/seven/reference/colorize.md +31 -0
  512. package/.vibe/skills/seven/reference/critique.md +53 -0
  513. package/.vibe/skills/seven/reference/delight.md +30 -0
  514. package/.vibe/skills/seven/reference/distill.md +30 -0
  515. package/.vibe/skills/seven/reference/doctor.md +7 -0
  516. package/.vibe/skills/seven/reference/document.md +36 -0
  517. package/.vibe/skills/seven/reference/evaluations.md +38 -0
  518. package/.vibe/skills/seven/reference/exceptions.md +7 -0
  519. package/.vibe/skills/seven/reference/extract.md +42 -0
  520. package/.vibe/skills/seven/reference/harden.md +36 -0
  521. package/.vibe/skills/seven/reference/hooks.md +11 -0
  522. package/.vibe/skills/seven/reference/init.md +38 -0
  523. package/.vibe/skills/seven/reference/layout.md +33 -0
  524. package/.vibe/skills/seven/reference/live.md +106 -0
  525. package/.vibe/skills/seven/reference/motion-design.md +71 -0
  526. package/.vibe/skills/seven/reference/onboard.md +35 -0
  527. package/.vibe/skills/seven/reference/optimize.md +34 -0
  528. package/.vibe/skills/seven/reference/overdrive.md +32 -0
  529. package/.vibe/skills/seven/reference/polish.md +55 -0
  530. package/.vibe/skills/seven/reference/product.md +43 -0
  531. package/.vibe/skills/seven/reference/quieter.md +31 -0
  532. package/.vibe/skills/seven/reference/routing.md +28 -0
  533. package/.vibe/skills/seven/reference/shape.md +85 -0
  534. package/.vibe/skills/seven/reference/spatial-design.md +60 -0
  535. package/.vibe/skills/seven/reference/typeset.md +28 -0
  536. package/.vibe/skills/seven/reference/typography.md +43 -0
  537. package/.vibe/skills/seven/reference/ux-writing.md +47 -0
  538. package/.vibe/skills/seven/reference/visual-probes.md +36 -0
  539. package/.vibe/skills/seven/scripts/context-signals.mjs +94 -0
  540. package/.vibe/skills/seven/scripts/critique-storage.mjs +155 -0
  541. package/.vibe/skills/seven/scripts/load-context.mjs +93 -0
  542. package/.vibe/skills/seven/scripts/update-check.mjs +120 -0
  543. package/README.md +51 -90
  544. package/cli/bin/seven.mjs +0 -0
  545. package/cli/engine/browser/injected/index.mjs +62 -13
  546. package/cli/engine/detect-antipatterns-browser.js +4739 -19
  547. package/cli/engine/detect-antipatterns.mjs +1 -0
  548. package/cli/engine/engines/browser/detect-url.mjs +366 -3
  549. package/cli/engine/engines/regex/detect-text.mjs +469 -1
  550. package/cli/engine/engines/static-html/detect-html.mjs +131 -0
  551. package/cli/engine/registry/seven-antipatterns.mjs +379 -4
  552. package/cli/engine/rules/checks.mjs +360 -1
  553. package/cli/engine/shared/tokens.mjs +19 -0
  554. package/cli/engine/token-data.generated.mjs +4025 -0
  555. package/docs/detector-rules.md +277 -38
  556. package/docs/upstream-parity.json +242 -0
  557. package/extension/README.md +5 -0
  558. package/extension/background/service-worker.js +134 -0
  559. package/extension/content/content-script.js +340 -0
  560. package/extension/detector/detect.js +7816 -0
  561. package/extension/devtools/devtools.html +1 -0
  562. package/extension/devtools/devtools.js +3 -0
  563. package/extension/devtools/panel.css +66 -0
  564. package/extension/devtools/panel.html +3 -0
  565. package/extension/devtools/panel.js +37 -0
  566. package/extension/manifest.json +22 -0
  567. package/extension/popup/popup.css +106 -0
  568. package/extension/popup/popup.html +27 -0
  569. package/extension/popup/popup.js +74 -0
  570. package/package.json +19 -8
@@ -0,0 +1,31 @@
1
+ # Quieter — less noise, preserved hierarchy
2
+
3
+ Reduce visual intensity without turning the interface into undifferentiated grey UI.
4
+
5
+ ## Find the noise
6
+
7
+ Inspect the rendered surface and identify evidence, not adjectives:
8
+
9
+ - too many filled actions or semantic colors;
10
+ - repeated cards, borders, badges, icons, labels, or dividers that convey no new hierarchy;
11
+ - competing font weights and size jumps;
12
+ - decorative motion, gradients, glow, stripes, shadows, or hover transforms;
13
+ - dense metadata presented at the same priority as the primary task;
14
+ - multiple simultaneous attention anchors.
15
+
16
+ Name the one or two elements that must remain prominent.
17
+
18
+ ## Reduce with Seven roles
19
+
20
+ - Keep the true primary action; demote siblings to declared secondary, outline, ghost, or link variants.
21
+ - Replace decorative color with `background`, `surface`, `muted`, `border`, and foreground roles already present in Seven.
22
+ - Remove nested cards and use spacing or a divider when grouping is enough.
23
+ - Keep borders for hierarchy and shadows only for overlays.
24
+ - Reduce decorative motion; retain state feedback and focus visibility.
25
+ - Collapse repeated explanatory copy while preserving information required for safe decisions.
26
+
27
+ Do not change token values, lower contrast below WCAG AA, make targets smaller, remove status meaning, or invent a “subtle” local palette.
28
+
29
+ ## Verification
30
+
31
+ The primary task remains obvious; semantic states remain distinguishable without color alone; keyboard/focus behavior is unchanged; and all changed files pass Seven checks. Report what was removed, what stayed intentionally strong, and why.
@@ -0,0 +1,28 @@
1
+ # No-argument routing
2
+
3
+ Use this workflow when Seven is invoked without an intent. Do not dump a generic command list first and do not auto-run a workflow.
4
+
5
+ 1. Load the normal Seven context.
6
+ 2. Run once:
7
+
8
+ ```bash
9
+ node .grok/skills/seven/scripts/context-signals.mjs --target <target>
10
+ ```
11
+
12
+ 3. Recommend the two or three highest-value next workflows with the exact invocation and one evidence-based reason each.
13
+
14
+ Route by current evidence:
15
+
16
+ - Missing or placeholder product context: lead with `/seven init`.
17
+ - A new feature with unresolved job, states, or architecture: `shape`.
18
+ - Repetition across two or more real surfaces: `extract`.
19
+ - No persisted critique for a rendered surface: `critique`.
20
+ - A recent critique with P0/P1 findings: `polish` for an agreed fix scope, or `critique` again if the implementation materially changed.
21
+ - Changed UI files: scope `audit`, `critique`, or `polish` to those files instead of the whole project.
22
+ - Excessive detector findings: use the workflow matching the root cause (`typeset`, `layout`, `colorize`, `quieter`, `harden`) rather than recommending every repair command.
23
+ - An existing `live.session` or a running local dev surface: `live` is available. Do not lead with it when no dev surface can run.
24
+ - A sound surface whose measured performance is weak: `optimize`.
25
+
26
+ Then show the remaining workflows grouped as: establish context, build/structure, evaluate, refine, validate/operate. A recommendation is a suggestion; wait for the user's choice before mutating files.
27
+
28
+ If `update.notify` is true, keep the release update separate from the workflow recommendation. Never let maintenance displace the requested product work.
@@ -0,0 +1,85 @@
1
+ # Shape
2
+
3
+ Shape the UX of a feature before any code is written. This command produces a **design brief**: a structured artifact that guides implementation through discovery, not guesswork.
4
+
5
+ **Scope**: design planning only. Shape does not write code. It produces the thinking that makes code good.
6
+
7
+ **Output**: a design brief that can be handed off to a downstream command (`polish`, `audit`, or implementation by Grok). When a materially ambiguous visual decision remains, read [visual-probes.md](visual-probes.md); probes never authorize tokens, components, or variants outside Seven.
8
+
9
+ ## Philosophy
10
+
11
+ Most AI-generated UIs fail not because of bad code, but because of skipped thinking. They jump to "here is a card grid" without asking "what is the user trying to accomplish?" Shape inverts that: understand deeply first, so the implementation lands on the first pass.
12
+
13
+ ## Phase 1: Discovery interview
14
+
15
+ Do not write code or commit design decisions during this phase. use AskUserQuestion before editing UI
16
+
17
+ ### Interview cadence
18
+
19
+ - 2-3 questions per round. Stop and wait for answers.
20
+ - One round is the default. Add a second only if the first leaves material gaps.
21
+ - Use `PRODUCT.md`, `.seven/project.yml`, the release lock, and the matched surface brief as anchors. Never use a consumer `DESIGN.md` as visual authority.
22
+ - **Assert-then-confirm**, not menu-with-escape. When `PRODUCT.md` makes one path obvious, name it and ask the user to confirm or override. Avoid four-option menus when the answer is already clear.
23
+
24
+ ### Purpose and context
25
+
26
+ - What is this feature for? What problem does it solve?
27
+ - Who specifically uses it? Role, context, frequency.
28
+ - What does success look like? How does the team know the feature is working?
29
+ - What is the user's state of mind on this screen? Rushed, exploring, anxious, focused?
30
+
31
+ ### Content and data
32
+
33
+ - What content or data does the surface display or collect?
34
+ - Realistic ranges: minimum, typical, maximum (0 items, 5 items, 500 items).
35
+ - Edge cases: empty state, error state, first-time use, power user.
36
+ - Is content dynamic? What changes and how often?
37
+
38
+ ### Register and surface
39
+
40
+ For Seven, register is almost always `product`. Confirm once:
41
+
42
+ - Is this an app/admin/dashboard surface (`product`) or a public marketing/storytelling surface (`brand`)?
43
+ - What is the surface type? Page, panel, dialog, popover, table row, empty state, navigation.
44
+
45
+ ### Scope
46
+
47
+ - Fidelity: sketch, mid-fi, or production.
48
+ - Breadth: one component, one screen, a flow, a whole surface.
49
+ - Interactivity: static visual, interactive, shipped-quality.
50
+ - Time intent: quick exploration, or polish until it ships.
51
+
52
+ ### Constraints
53
+
54
+ - Technical: React 19, Tailwind v4, `@etus/ui`, `@etus/tokens`. Performance budget if relevant.
55
+ - Localization: pt-BR for chrome by default. English for code identifiers and docs.
56
+ - Responsive: mobile-first or desktop-first? Touch target minimum 44 x 44.
57
+ - Accessibility: WCAG 2.1 AA baseline always; document any AAA targets.
58
+
59
+ ### Anti-goals
60
+
61
+ - What should this NOT be? What direction would be wrong?
62
+ - What is the biggest risk if the implementation lands wrong?
63
+
64
+ ## Phase 2: Brief synthesis
65
+
66
+ After discovery, write a short brief (under one page) covering:
67
+
68
+ 1. **Surface description** in one sentence.
69
+ 2. **Register and scope** confirmed.
70
+ 3. **Component reuse plan**: which `@etus/ui` components are already in the surface. Which are missing.
71
+ 4. **Variant inventory**: for each component, which variant. If a variant is missing from the exact installed registry contract, flag it explicitly; do not invent or reach into a newer release.
72
+ 5. **State matrix**: idle, loading, empty, error, success, disabled. For each state, the visual approach.
73
+ 6. **Token plan**: which `@etus/tokens` variables compose the surface. Call out any place a token is missing and a hex would be needed; surface that as a question, do not invent.
74
+ 7. **Copy direction**: pt-BR examples for labels, buttons, empty state, errors. Sentence case, no trailing periods, imperative leads.
75
+ 8. **Open questions**: what is still uncertain after the interview.
76
+
77
+ ## Sub-command interaction
78
+
79
+ - After `shape`, the user can hand off to `polish` (refine an existing implementation), `audit` (check the implementation against the brief), or implement directly with the brief loaded as context.
80
+ - `shape` does not generate code. If the user requests code in this command, surface the boundary and recommend they re-invoke without the `shape` prefix.
81
+
82
+ ## Refusals
83
+
84
+ - "Just write the code, skip the brief" — Shape exists because skipping the brief produces generic output. Offer a 5-minute Quick Shape (3 questions instead of 8) as a middle ground; do not skip entirely.
85
+ - "Generate three visual variants" — Do so only when the decision is genuinely visual and the user asks. Keep the same Seven token/component authority in every probe, label the decision being tested, and discard probes that do not answer it.
@@ -0,0 +1,60 @@
1
+ # Spatial design
2
+
3
+ Seven runs two radius stacks. They are not interchangeable. Mixing them within the same surface produces the "almost looks right" drift that is the most common Seven anti-pattern.
4
+
5
+ ## Radius stacks
6
+
7
+ **Component scale** — `sm 4 / md 8 / lg 12`. Use for:
8
+
9
+ - Buttons (default `md`).
10
+ - Inputs, selects, textareas (`md`).
11
+ - Badges (`sm` for tags, `pill` for status).
12
+ - Checkboxes, radios, switches.
13
+ - Avatar squares.
14
+
15
+ **Surface scale** — `xl 16 / 2xl 20 / 3xl 24 / 4xl 32`. Use for:
16
+
17
+ - Cards, panels.
18
+ - Dialogs, sheets, drawers.
19
+ - Popovers, tooltips, dropdowns.
20
+ - Image containers, thumbnail tiles.
21
+
22
+ **Pill radius** — `9999`. Use only for:
23
+
24
+ - Badges and tags shaped as pills (`<Badge variant="pill">`).
25
+ - Avatar triggers in the topbar (round avatars).
26
+ - Status indicators (dots and pills).
27
+
28
+ Never pill on buttons. Buttons stay on the component scale. The detector ships a `pill-on-button` rule that catches drift.
29
+
30
+ ## Spacing
31
+
32
+ Seven spacing tokens come from `@etus/tokens`. The runtime is `--spacing-0` through `--spacing-12` in 4 px steps, then doubled steps (`--spacing-16`, `--spacing-20`, `--spacing-24`).
33
+
34
+ Use Tailwind's `p-`, `m-`, `gap-` utilities backed by the token ramp. Do not invent spacing values via arbitrary classes unless the design explicitly requires a non-token interval (rare; surface it).
35
+
36
+ Rhythm matters more than consistency: a dashboard with identical padding everywhere reads as a wireframe. Vary spacing intentionally — tighter inside a card, looser between cards, looser still between sections.
37
+
38
+ ## Borders
39
+
40
+ Borders carry hierarchy in Seven, not shadows.
41
+
42
+ - 1 px `var(--border)` is the workhorse. Cards, inputs, dividers, table rows all use it.
43
+ - 2 px borders are reserved for focus and active states (4 px on focus rings).
44
+ - Side-stripe borders (`border-left` or `border-right` greater than 1 px as a colored accent) are banned. The detector ships a `side-stripe-border` rule. Use full borders, background tints, leading icons, or restructure the element.
45
+
46
+ ## Shadows
47
+
48
+ Shadows in Seven are reserved for overlays:
49
+
50
+ - Modals, dialogs, sheets — `var(--shadow-overlay)`.
51
+ - Dropdowns, popovers, tooltips — `var(--shadow-popover)`.
52
+ - The brand logo plate — `var(--shadow-primary)` for the mint glow.
53
+
54
+ Card chrome uses borders, not shadows. If a card needs more weight, deepen the border color or tint the background, do not stack a shadow.
55
+
56
+ ## Refusals
57
+
58
+ - "Add a soft shadow under the card" — Seven cards use borders for hierarchy. Suggest a tinted background or a 2 px accent border. If the user insists, document the deviation in the audit.
59
+ - "Use a 16 px radius on the button" — Surface scale on a button reads as a chip from a different design system. Recommend `md 8` or surface as a Seven component-contract request.
60
+ - "Stack a card inside a card" — Nested cards are a Seven anti-pattern. Recommend a section divider, a labeled list, or a `Tabs` view instead.
@@ -0,0 +1,28 @@
1
+ # Typeset — Seven typography under stress
2
+
3
+ Refine hierarchy, readability, and delivery using the installed Seven Text component roles, Inter, and JetBrains Mono. Read [typography.md](typography.md) first.
4
+
5
+ ## Two-pass assessment
6
+
7
+ Keep these passes separate before synthesizing:
8
+
9
+ 1. Rendered typography: identify roles, hierarchy, reading measure, density, line breaks, numeric alignment, long pt-BR copy, zoom, and fallback behavior.
10
+ 2. Mechanical scan: run `seven check --file <target>` and inspect arbitrary/dynamic styles the detector cannot resolve.
11
+
12
+ For every claim, cite a component, selector, computed value, or screenshot state.
13
+
14
+ ## Apply
15
+
16
+ - Use the fewest Text variants that make heading, body, label, metadata, and numeric roles unmistakable.
17
+ - Reuse declared Text variants instead of rebuilding a type ramp with utilities.
18
+ - Keep product body text at the Seven base role; dense captions must remain readable and cannot become body copy by volume.
19
+ - Keep prose near 45–75 characters per line and adjust layout before inventing a font size.
20
+ - Use tabular figures for tables, KPIs, timestamps, and aligned numbers.
21
+ - Preserve browser zoom and user font scaling. Test long words, names, values, and localization expansion.
22
+ - Load only used Inter/JetBrains Mono assets and weights; avoid invisible text and disruptive metric changes.
23
+
24
+ Never introduce another font family, letter spacing for generic labels, extreme negative tracking, all-caps body copy, oversized H1s, or arbitrary scale values. A missing role is a Seven contract gap.
25
+
26
+ ## Verify
27
+
28
+ Confirm hierarchy without reading the words, long-content wrapping, 200% zoom, narrow containers, dark mode, and final detector output. Report each Text variant used and any unresolved contract gap.
@@ -0,0 +1,43 @@
1
+ # Typography
2
+
3
+ Inter is the only sans face in Seven. JetBrains Mono is the only mono face. Every other typeface decision routes back to one of these two.
4
+
5
+ ## Hard rules
6
+
7
+ - **Inter for everything sans-serif.** UI chrome, body, headings, display, numeric tabular figures. Use Inter's variable axes for weight (400 / 500 / 600 / 700) and width (`wdth` axis only if Figma uses it; Seven currently does not).
8
+ - **JetBrains Mono for code and keyboard glyphs.** Never DM Mono, never IBM Plex Mono, never the system mono fallback as a primary choice.
9
+ - **Reflex-reject in Seven**: Space Grotesk, Geist, DM Mono, Inter Tight, Inter Display. They appear in legacy Figma exploration on `Text/Display`, `Text/Heading`, `Dashboard/Dash-01-W`, `Timeline/StatusTitle`, `Feature-item`. They never shipped. Substitute Inter at the same size and surface the swap so the user knows.
10
+ - **Sentence case across every chrome surface.** Headings, labels, button text, menu items, table column headers, breadcrumbs, tabs. Acronyms (KPI, OTP, OIDC, OAuth) stay uppercase.
11
+ - **No trailing periods** on buttons, labels, breadcrumbs, captions, badge text, or short status messages. Periods belong in body prose, not in chrome.
12
+
13
+ ## Scale
14
+
15
+ Seven's scale lives in `@etus/tokens`:
16
+
17
+ - Body / `--text-base`: 16 px, line-height 1.5, Inter 400.
18
+ - Caption / `--text-sm`: 14 px, line-height 1.4.
19
+ - Label / `--text-xs`: 12 px, line-height 1.3 (uppercase only for monospaced data-table column headers).
20
+ - Headings / `--text-lg` through `--text-4xl`: walk the Figma `Text/Heading` ramp. Hierarchy via scale plus weight contrast, not via color.
21
+
22
+ Use the `<Text>` component variant API in `@etus/ui` rather than ad-hoc arbitrary classes. `<Text variant="h2">` is correct; `<h2 className="text-2xl font-semibold">` is drift.
23
+
24
+ ## Line-height and the Tailwind v4 trap
25
+
26
+ The combination `leading-none` plus `text-[length:var(--something)]` zeroes line-height in Tailwind v4 (Lightning CSS interprets the arbitrary value before applying `leading-none`'s `1`). Two safe paths:
27
+
28
+ - Use `leading-tight`, `leading-snug`, or a literal `leading-[1.1]`. They survive the Lightning CSS pass.
29
+ - Inline `style={{ fontSize, lineHeight }}` for any case where the variable approach falters.
30
+
31
+ ## Numeric figures
32
+
33
+ Inter ships tabular figures via the `tnum` feature. Apply `font-feature-settings: 'tnum' 1` to tables, data grids, KPI cards, and any column where digits need to line up vertically. The `<DataTable>` component does this for cells by default; manual KPI displays still need it.
34
+
35
+ ## Display surfaces
36
+
37
+ Display typography (hero headings and marketing pages) follows the brand register in [brand.md](brand.md), not product chrome. Do not import display treatment into application UI.
38
+
39
+ ## Refusals
40
+
41
+ - "Use Space Grotesk for the H1" — Inter is the only sans face. Substitute Inter Bold at the same size and surface the swap.
42
+ - "Add letter spacing to the labels" — Seven labels use Inter at default tracking. Letter-spacing belongs to Display only, defined by the brand layer.
43
+ - "Use the system font as a fallback" — Inter is loaded via `next/font` or equivalent. The system fallback is for SSR flash mitigation, never the primary stack.
@@ -0,0 +1,47 @@
1
+ # UX writing
2
+
3
+ Seven's product chrome speaks Brazilian Portuguese. Developer-facing docs and code identifiers stay in English. The voice is direct, decisive, and concrete.
4
+
5
+ ## Hard rules
6
+
7
+ - **Pt-BR for chrome.** Buttons, labels, menu items, navigation, table headers, breadcrumbs, tabs, status messages, empty states, toast text, error messages.
8
+ - **No European Portuguese vocabulary.** The detector ships a `pt-pt-vocab` rule that catches `ficheiro`, `telemóvel`, `ecrã`, `tu` (as a pronoun, not in code), and other catalogued pairs. Use the pt-BR equivalents.
9
+ - **Sentence case** across every chrome surface. Capitalize the first word and proper nouns; everything else lowercase. Acronyms stay uppercase.
10
+ - **No trailing periods** on buttons, labels, captions, badges, breadcrumbs, table column headers, menu items, tabs. Periods belong in body prose, never in chrome.
11
+ - **Imperative leads** for action buttons and menu items: `Procurar`, `Adicionar conta`, `Exportar relatório`, `Excluir item`. Avoid `Clique para`, `Você pode`, `Aqui você`.
12
+
13
+ ## Voice
14
+
15
+ Direct, decisive, brazilian. Three qualities to hold:
16
+
17
+ - **Direct.** No `clique aqui`, no `aprenda mais sobre`. The label says what the action does.
18
+ - **Decisive.** No `talvez`, `poderia`, `seria possível`. If the system is suggesting an action, it commits to the suggestion. If it does not know, it asks.
19
+ - **Concrete.** A token name beats an adjective. `Salvo às 14:32` beats `Alterações salvas com sucesso`. The user already knows it was successful, the timestamp tells them when.
20
+
21
+ ## Microcopy patterns
22
+
23
+ | Surface | Pattern | Example |
24
+ | ------------------- | -------------------------------------- | -------------------------------------------------- |
25
+ | Primary button | Verb + object, imperative | `Adicionar conta`, `Salvar alterações` |
26
+ | Secondary button | Verb only when context obvious | `Cancelar`, `Voltar` |
27
+ | Destructive button | Verb + object, no hedging | `Excluir conta` |
28
+ | Toast (success) | Past tense, short | `Conta criada` |
29
+ | Toast (error) | What broke + what to do | `Não foi possível salvar. Tente novamente.` |
30
+ | Empty state | What is missing + how to fix | `Nenhuma conta. Adicione a primeira para começar.` |
31
+ | Input placeholder | Hint, not instruction | `nome@email.com`, not `Digite o seu email` |
32
+ | Validation error | What is wrong, inline, below the field | `Email obrigatório` |
33
+ | Menu item | Verb in imperative | `Duplicar`, `Renomear`, `Arquivar` |
34
+ | Table column header | Noun, sentence case | `Nome`, `Última atividade`, `Status` |
35
+
36
+ ## Numbers and dates
37
+
38
+ - Numbers use the Brazilian convention: comma for decimals, period for thousands. `1.234,56` not `1,234.56`.
39
+ - Dates default to `dd/mm/yyyy` in chrome surfaces. ISO `yyyy-mm-dd` in data tables and developer-facing logs.
40
+ - Currency: `R$ 1.234,56` with non-breaking space.
41
+ - Relative time for recent events (`há 2 minutos`, `há 1 hora`), absolute date once it crosses 24 hours (`12/03/2026`).
42
+
43
+ ## Refusals
44
+
45
+ - "Use European Portuguese to match the parent company brand" — Pt-BR is non-negotiable for Seven chrome. Surface this to the user; if there is a legitimate need for pt-PT, it is a brand-layer decision documented separately.
46
+ - "Add a period to the button text for consistency with paragraphs" — Chrome and prose follow different rules. Buttons do not get periods.
47
+ - "Make all the labels uppercase for emphasis" — Sentence case is non-negotiable. Use weight or size for emphasis, not uppercase.
@@ -0,0 +1,36 @@
1
+ # Visual probes
2
+
3
+ Use probes only when a real product decision remains visually ambiguous after context and component-contract inspection. A probe answers one named question; it is not a license for arbitrary redesign.
4
+
5
+ ## Contract
6
+
7
+ - Keep the product job, information, behavior, states, content, and accessibility target constant across directions.
8
+ - Use the exact installed Seven components, declared variants, tokens, icon system, typography, radii, and motion language in every direction.
9
+ - Vary one decision family at a time: hierarchy, density, composition, disclosure, emphasis, or responsive reflow.
10
+ - Produce one strong default when evidence points clearly to it. Produce up to three directions only when comparison creates information.
11
+ - Label each direction by its tradeoff, not by generic adjectives such as "modern" or "clean".
12
+ - State what would falsify each direction and which user/job it benefits.
13
+
14
+ ## Direction shape
15
+
16
+ For every probe record:
17
+
18
+ 1. decision being tested;
19
+ 2. hypothesis and affected user job;
20
+ 3. composition/component changes;
21
+ 4. Seven contracts reused;
22
+ 5. behavior across mobile, desktop, keyboard, reduced motion, loading, empty, error, and long-content cases;
23
+ 6. cost/risk;
24
+ 7. verification criterion.
25
+
26
+ In Live Mode, deliver inert HTML/CSS previews only. Outside Live Mode, prefer a concise written probe or throwaway local mock; do not leave exploration code in production paths.
27
+
28
+ ## Anti-patterns
29
+
30
+ - Three variants that differ only by color, radius, or decoration.
31
+ - A "bold" direction that introduces tokens or variants absent from Seven.
32
+ - Comparing different content/data while claiming to compare layout.
33
+ - Selecting the most visually novel direction without product evidence.
34
+ - Treating accepted browser DOM as source code.
35
+
36
+ Finish with one recommendation and the evidence that selects it. If no direction is defensible, return to `shape` rather than averaging them.
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { spawnSync } from 'node:child_process'
5
+ import fs from 'node:fs'
6
+ import path from 'node:path'
7
+ import { fileURLToPath } from 'node:url'
8
+
9
+ import { argValue, loadContext } from './load-context.mjs'
10
+
11
+ const UI_EXTENSIONS = new Set(['.css', '.html', '.js', '.jsx', '.less', '.mdx', '.scss', '.ts', '.tsx'])
12
+
13
+ function gitNames(root, args) {
14
+ const result = spawnSync('git', args, { cwd: root, encoding: 'utf8' })
15
+ if (result.status !== 0) return []
16
+ return result.stdout.split('\n').map((item) => item.trim()).filter(Boolean)
17
+ }
18
+
19
+ function changedUiFiles(root) {
20
+ const names = new Set([
21
+ ...gitNames(root, ['diff', '--name-only', '--diff-filter=ACMR']),
22
+ ...gitNames(root, ['diff', '--cached', '--name-only', '--diff-filter=ACMR']),
23
+ ...gitNames(root, ['ls-files', '--others', '--exclude-standard']),
24
+ ])
25
+ return [...names].filter((name) => UI_EXTENSIONS.has(path.extname(name).toLowerCase())).sort()
26
+ }
27
+
28
+ function latestReview(root) {
29
+ const directory = path.join(root, '.seven', 'reviews')
30
+ let names = []
31
+ try {
32
+ names = fs.readdirSync(directory).filter((name) => name.endsWith('.json'))
33
+ } catch {
34
+ return null
35
+ }
36
+ const candidates = names.map((name) => {
37
+ const filePath = path.join(directory, name)
38
+ try {
39
+ return { filePath, mtime: fs.statSync(filePath).mtimeMs, payload: JSON.parse(fs.readFileSync(filePath, 'utf8')) }
40
+ } catch {
41
+ return null
42
+ }
43
+ }).filter(Boolean).sort((left, right) => right.mtime - left.mtime)
44
+ if (!candidates[0]) return null
45
+ return {
46
+ path: path.relative(root, candidates[0].filePath).split(path.sep).join('/'),
47
+ createdAt: candidates[0].payload.createdAt || null,
48
+ score: candidates[0].payload.score ?? null,
49
+ p0: candidates[0].payload.summary?.p0 ?? 0,
50
+ p1: candidates[0].payload.summary?.p1 ?? 0,
51
+ target: candidates[0].payload.target || null,
52
+ }
53
+ }
54
+
55
+ function scanTargets(context, changed) {
56
+ if (changed.length > 0) return { via: 'git-changes', targets: changed.slice(0, 40) }
57
+ const roots = Array.isArray(context.project?.sourceRoots) ? context.project.sourceRoots : ['src']
58
+ const existing = roots.filter((entry) => fs.existsSync(path.join(context.projectRoot, entry)))
59
+ return { via: 'source-roots', targets: existing.slice(0, 8) }
60
+ }
61
+
62
+ export async function collectContextSignals(start = process.cwd(), { target = start } = {}) {
63
+ const context = await loadContext(start, { target })
64
+ const changed = changedUiFiles(context.projectRoot)
65
+ return {
66
+ schemaVersion: 1,
67
+ projectRoot: context.projectRoot,
68
+ target: path.resolve(target),
69
+ setup: {
70
+ hasProduct: context.hasProduct,
71
+ productPlaceholder: context.productPlaceholder,
72
+ hasRelease: Boolean(context.release),
73
+ register: context.register,
74
+ app: context.app?.id || null,
75
+ surface: context.surface?.id || null,
76
+ },
77
+ git: { changedFiles: changed },
78
+ critique: { latest: latestReview(context.projectRoot) },
79
+ scan: scanTargets(context, changed),
80
+ live: {
81
+ session: fs.existsSync(path.join(context.projectRoot, '.seven', 'live', 'session.json')),
82
+ journal: fs.existsSync(path.join(context.projectRoot, '.seven', 'live', 'journal.ndjson')),
83
+ extensionPathCommand: 'seven extension path',
84
+ },
85
+ }
86
+ }
87
+
88
+ export async function main(argv = process.argv) {
89
+ const target = argValue('--target', argv) || process.env.SEVEN_TARGET || process.cwd()
90
+ const signals = await collectContextSignals(target, { target })
91
+ process.stdout.write(`${JSON.stringify(signals, null, 2)}\n`)
92
+ }
93
+
94
+ if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url))) await main()
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import fs from 'node:fs'
5
+ import path from 'node:path'
6
+ import { fileURLToPath } from 'node:url'
7
+
8
+ import { argValue, findRoot, loadContext } from './load-context.mjs'
9
+
10
+ const PRIORITIES = new Set(['P0', 'P1', 'P2', 'P3'])
11
+ const SENSITIVE_KEY = /(?:authorization|cookie|password|secret|token|api[-_]?key|session[-_]?id)/i
12
+
13
+ function slug(value) {
14
+ return String(value || 'review')
15
+ .toLowerCase()
16
+ .normalize('NFD')
17
+ .replace(/[\u0300-\u036f]/g, '')
18
+ .replace(/[^a-z0-9]+/g, '-')
19
+ .replace(/^-|-$/g, '')
20
+ .slice(0, 60) || 'review'
21
+ }
22
+
23
+ function assertNoSensitiveKeys(value, trail = []) {
24
+ if (Array.isArray(value)) {
25
+ value.forEach((entry, index) => assertNoSensitiveKeys(entry, [...trail, String(index)]))
26
+ return
27
+ }
28
+ if (!value || typeof value !== 'object') return
29
+ for (const [key, entry] of Object.entries(value)) {
30
+ if (SENSITIVE_KEY.test(key)) throw new Error(`critique input contains a forbidden sensitive field: ${[...trail, key].join('.')}`)
31
+ assertNoSensitiveKeys(entry, [...trail, key])
32
+ }
33
+ }
34
+
35
+ function validateReview(input) {
36
+ if (!input || typeof input !== 'object' || Array.isArray(input)) throw new Error('critique input must be a JSON object')
37
+ if (!Number.isFinite(input.score) || input.score < 0 || input.score > 100) throw new Error('critique score must be between 0 and 100')
38
+ if (!Array.isArray(input.findings)) throw new Error('critique findings must be an array')
39
+ for (const [index, finding] of input.findings.entries()) {
40
+ if (!finding || typeof finding !== 'object') throw new Error(`finding ${index + 1} must be an object`)
41
+ if (!PRIORITIES.has(finding.priority)) throw new Error(`finding ${index + 1} has invalid priority`)
42
+ for (const field of ['title', 'evidence', 'recommendation']) {
43
+ if (typeof finding[field] !== 'string' || !finding[field].trim()) throw new Error(`finding ${index + 1} requires ${field}`)
44
+ }
45
+ }
46
+ assertNoSensitiveKeys(input)
47
+ }
48
+
49
+ function readInput(inputPath) {
50
+ const text = inputPath === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(inputPath), 'utf8')
51
+ if (Buffer.byteLength(text) > 1_000_000) throw new Error('critique input exceeds 1 MB')
52
+ return JSON.parse(text)
53
+ }
54
+
55
+ function counts(findings) {
56
+ const summary = { p0: 0, p1: 0, p2: 0, p3: 0 }
57
+ for (const finding of findings) summary[finding.priority.toLowerCase()]++
58
+ return summary
59
+ }
60
+
61
+ function markdown(review) {
62
+ const lines = [
63
+ `# Seven critique — ${review.target}`,
64
+ '',
65
+ `- Created: ${review.createdAt}`,
66
+ `- Seven release: ${review.release?.sevenVersion || 'unknown'}`,
67
+ `- Surface: ${review.surface || 'unresolved'}`,
68
+ `- Score: ${review.score}/100`,
69
+ `- Priorities: P0 ${review.summary.p0}, P1 ${review.summary.p1}, P2 ${review.summary.p2}, P3 ${review.summary.p3}`,
70
+ '',
71
+ ]
72
+ if (review.strengths?.length) {
73
+ lines.push('## Strengths to preserve', '')
74
+ for (const strength of review.strengths) lines.push(`- ${strength}`)
75
+ lines.push('')
76
+ }
77
+ lines.push('## Findings', '')
78
+ if (review.findings.length === 0) lines.push('No active findings.', '')
79
+ for (const finding of review.findings) {
80
+ lines.push(`### ${finding.priority} — ${finding.title}`, '')
81
+ lines.push(`**Evidence:** ${finding.evidence}`, '')
82
+ if (finding.impact) lines.push(`**Impact:** ${finding.impact}`, '')
83
+ if (finding.rootCause) lines.push(`**Root cause:** ${finding.rootCause}`, '')
84
+ lines.push(`**Direction:** ${finding.recommendation}`, '')
85
+ if (finding.verification) lines.push(`**Verify:** ${finding.verification}`, '')
86
+ }
87
+ if (review.verification) lines.push('## Verification evidence', '', review.verification, '')
88
+ lines.push('This review is evidence, not a visual authority. The installed Seven release remains canonical.', '')
89
+ return lines.join('\n')
90
+ }
91
+
92
+ function atomicWrite(filePath, content) {
93
+ fs.mkdirSync(path.dirname(filePath), { recursive: true })
94
+ const temporary = `${filePath}.tmp-${process.pid}-${Date.now()}`
95
+ fs.writeFileSync(temporary, content)
96
+ fs.renameSync(temporary, filePath)
97
+ }
98
+
99
+ export async function writeReview(start, target, input) {
100
+ validateReview(input)
101
+ const root = findRoot(start)
102
+ const context = await loadContext(root, { target })
103
+ let resolvedTarget = target
104
+ if (!/^https?:\/\//i.test(target)) {
105
+ const absolute = path.resolve(root, target)
106
+ const relative = path.relative(root, absolute)
107
+ if (relative.startsWith('..') || path.isAbsolute(relative)) throw new Error('critique target escapes the Seven project root')
108
+ resolvedTarget = relative.split(path.sep).join('/') || '.'
109
+ }
110
+ const createdAt = new Date().toISOString()
111
+ const review = {
112
+ schemaVersion: 1,
113
+ createdAt,
114
+ target: resolvedTarget,
115
+ surface: context.surface?.id || null,
116
+ release: context.release ? {
117
+ sevenVersion: context.release.sevenVersion,
118
+ skillVersion: context.release.skillVersion,
119
+ registrySha256: context.release.registrySha256,
120
+ } : null,
121
+ score: input.score,
122
+ summary: counts(input.findings),
123
+ renderedEvidence: input.renderedEvidence || null,
124
+ mechanicalEvidence: input.mechanicalEvidence || null,
125
+ strengths: Array.isArray(input.strengths) ? input.strengths : [],
126
+ findings: input.findings,
127
+ verification: input.verification || null,
128
+ }
129
+ const stamp = createdAt.replace(/[:.]/g, '-').replace(/-000Z$/, 'Z')
130
+ const base = path.join(root, '.seven', 'reviews', `${stamp}-${slug(context.surface?.id || resolvedTarget)}`)
131
+ atomicWrite(`${base}.json`, `${JSON.stringify(review, null, 2)}\n`)
132
+ atomicWrite(`${base}.md`, markdown(review))
133
+ return {
134
+ review,
135
+ json: path.relative(root, `${base}.json`).split(path.sep).join('/'),
136
+ markdown: path.relative(root, `${base}.md`).split(path.sep).join('/'),
137
+ }
138
+ }
139
+
140
+ export async function main(argv = process.argv) {
141
+ const action = argv[2]
142
+ if (action !== 'write') throw new Error('usage: critique-storage.mjs write --target <target> --input <review.json|->')
143
+ const target = argValue('--target', argv)
144
+ const inputPath = argValue('--input', argv)
145
+ if (!target || !inputPath) throw new Error('write requires --target and --input')
146
+ const result = await writeReview(process.cwd(), target, readInput(inputPath))
147
+ process.stdout.write(`${JSON.stringify({ json: result.json, markdown: result.markdown, summary: result.review.summary }, null, 2)}\n`)
148
+ }
149
+
150
+ if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(fileURLToPath(import.meta.url))) {
151
+ main().catch((error) => {
152
+ process.stderr.write(`${error.message}\n`)
153
+ process.exitCode = 1
154
+ })
155
+ }