devrites 5.10.1 → 5.11.0

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 (296) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +24 -10
  3. package/bin/devrites.mjs +2 -0
  4. package/docs/cli.md +4 -1
  5. package/docs/command-map.md +7 -5
  6. package/docs/engine/commands.md +7 -5
  7. package/docs/orchestration.md +5 -2
  8. package/docs/skills.md +10 -4
  9. package/docs/usage.md +3 -1
  10. package/engine/commands.go +3 -0
  11. package/engine/help.go +190 -0
  12. package/engine/help_test.go +98 -0
  13. package/engine/internal/devritespaths/paths.go +2 -0
  14. package/engine/internal/hostpack/hostpack.go +39 -5
  15. package/engine/internal/hostpack/hostpack_test.go +27 -13
  16. package/engine/internal/install/apply.go +17 -4
  17. package/engine/internal/install/install.go +9 -2
  18. package/engine/internal/install/install_test.go +15 -2
  19. package/engine/internal/install/preflight.go +8 -2
  20. package/engine/internal/install/update.go +1 -1
  21. package/engine/internal/parallel/cli.go +90 -32
  22. package/engine/internal/parallel/cli_test.go +32 -0
  23. package/engine/main.go +15 -8
  24. package/engine/root_routing_test.go +4 -0
  25. package/install.sh +4 -1
  26. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  27. package/pack/.claude/skills/rite-autocomplete/SKILL.md +10 -5
  28. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +12 -7
  29. package/pack/.claude/skills/rite-build/SKILL.md +3 -1
  30. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +4 -3
  31. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +3 -1
  32. package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
  33. package/pack/generated/README.md +4 -2
  34. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  35. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +10 -5
  36. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +12 -7
  37. package/pack/generated/claude/skills/rite-build/SKILL.md +3 -1
  38. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +4 -3
  39. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +3 -1
  40. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
  41. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  42. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +10 -5
  43. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +12 -7
  44. package/pack/generated/codex/skills/rite-build/SKILL.md +3 -1
  45. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +4 -3
  46. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +3 -1
  47. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
  48. package/pack/generated/devin/AGENTS.md +23 -0
  49. package/pack/generated/devin/agents/devrites-code-reviewer.md +145 -0
  50. package/pack/generated/devin/agents/devrites-devex-reviewer.md +126 -0
  51. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +91 -0
  52. package/pack/generated/devin/agents/devrites-evidence-scout.md +77 -0
  53. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +119 -0
  54. package/pack/generated/devin/agents/devrites-performance-reviewer.md +117 -0
  55. package/pack/generated/devin/agents/devrites-plan-drafter.md +102 -0
  56. package/pack/generated/devin/agents/devrites-plan-reviewer.md +144 -0
  57. package/pack/generated/devin/agents/devrites-proof-runner.md +76 -0
  58. package/pack/generated/devin/agents/devrites-retrospector.md +64 -0
  59. package/pack/generated/devin/agents/devrites-security-auditor.md +112 -0
  60. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +97 -0
  61. package/pack/generated/devin/agents/devrites-slice-wright.md +219 -0
  62. package/pack/generated/devin/agents/devrites-spec-reviewer.md +99 -0
  63. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +102 -0
  64. package/pack/generated/devin/agents/devrites-test-analyst.md +97 -0
  65. package/pack/generated/devin/agents/devrites-upgrade-planner.md +91 -0
  66. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +64 -0
  67. package/pack/generated/devin/skills/devrites-audit/SKILL.md +51 -0
  68. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +77 -0
  69. package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
  70. package/pack/generated/devin/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
  71. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +97 -0
  72. package/pack/generated/devin/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  73. package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
  74. package/pack/generated/devin/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  75. package/pack/generated/devin/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  76. package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
  77. package/pack/generated/devin/skills/devrites-debug-recovery/reference/trace.md +25 -0
  78. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +80 -0
  79. package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +87 -0
  80. package/pack/generated/devin/skills/devrites-frontend-craft/reference/craft.md +63 -0
  81. package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  82. package/pack/generated/devin/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  83. package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
  84. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  85. package/pack/generated/devin/skills/devrites-frontend-craft/reference/shape.md +56 -0
  86. package/pack/generated/devin/skills/devrites-interview/SKILL.md +103 -0
  87. package/pack/generated/devin/skills/devrites-lib/SKILL.md +57 -0
  88. package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +42 -0
  89. package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +64 -0
  90. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
  91. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
  92. package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +88 -0
  93. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +60 -0
  94. package/pack/generated/devin/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
  95. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +415 -0
  96. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +99 -0
  97. package/pack/generated/devin/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
  98. package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
  99. package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
  100. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  101. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +108 -0
  102. package/pack/generated/devin/skills/devrites-lib/reference/standards/coding-style.md +48 -0
  103. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
  104. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +167 -0
  105. package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
  106. package/pack/generated/devin/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
  107. package/pack/generated/devin/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
  108. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +31 -0
  109. package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
  110. package/pack/generated/devin/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
  111. package/pack/generated/devin/skills/devrites-lib/reference/standards/documentation.md +43 -0
  112. package/pack/generated/devin/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
  113. package/pack/generated/devin/skills/devrites-lib/reference/standards/elicitation.md +85 -0
  114. package/pack/generated/devin/skills/devrites-lib/reference/standards/error-handling.md +47 -0
  115. package/pack/generated/devin/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
  116. package/pack/generated/devin/skills/devrites-lib/reference/standards/hooks.md +25 -0
  117. package/pack/generated/devin/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
  118. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
  119. package/pack/generated/devin/skills/devrites-lib/reference/standards/observability.md +88 -0
  120. package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
  121. package/pack/generated/devin/skills/devrites-lib/reference/standards/patterns.md +68 -0
  122. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +51 -0
  123. package/pack/generated/devin/skills/devrites-lib/reference/standards/principles.md +42 -0
  124. package/pack/generated/devin/skills/devrites-lib/reference/standards/prose-style.md +123 -0
  125. package/pack/generated/devin/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
  126. package/pack/generated/devin/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
  127. package/pack/generated/devin/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
  128. package/pack/generated/devin/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
  129. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +202 -0
  130. package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
  131. package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
  132. package/pack/generated/devin/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
  133. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +212 -0
  134. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +92 -0
  135. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
  136. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  137. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  138. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  139. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  140. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  141. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  142. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  143. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  144. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  145. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
  146. package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +74 -0
  147. package/pack/generated/devin/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  148. package/pack/generated/devin/skills/devrites-prose-craft/reference/examples.md +131 -0
  149. package/pack/generated/devin/skills/devrites-prose-craft/reference/structures.md +196 -0
  150. package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +53 -0
  151. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +135 -0
  152. package/pack/generated/devin/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  153. package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  154. package/pack/generated/devin/skills/rite/SKILL.md +148 -0
  155. package/pack/generated/devin/skills/rite/reference/menu.md +48 -0
  156. package/pack/generated/devin/skills/rite-adopt/SKILL.md +51 -0
  157. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +19 -0
  158. package/pack/generated/devin/skills/rite-adopt/reference/anti-patterns.md +19 -0
  159. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +142 -0
  160. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +43 -0
  161. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +151 -0
  162. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +97 -0
  163. package/pack/generated/devin/skills/rite-build/SKILL.md +102 -0
  164. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +148 -0
  165. package/pack/generated/devin/skills/rite-build/reference/anti-patterns.md +27 -0
  166. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +120 -0
  167. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +56 -0
  168. package/pack/generated/devin/skills/rite-build/reference/frontend-trigger.md +39 -0
  169. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +51 -0
  170. package/pack/generated/devin/skills/rite-build/reference/output.md +33 -0
  171. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +214 -0
  172. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +89 -0
  173. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +84 -0
  174. package/pack/generated/devin/skills/rite-build/reference/tdd.md +27 -0
  175. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +96 -0
  176. package/pack/generated/devin/skills/rite-clarify/SKILL.md +98 -0
  177. package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +24 -0
  178. package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +55 -0
  179. package/pack/generated/devin/skills/rite-converge/SKILL.md +144 -0
  180. package/pack/generated/devin/skills/rite-converge/reference/anti-patterns.md +35 -0
  181. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +65 -0
  182. package/pack/generated/devin/skills/rite-customize/SKILL.md +60 -0
  183. package/pack/generated/devin/skills/rite-define/SKILL.md +168 -0
  184. package/pack/generated/devin/skills/rite-define/reference/anti-patterns.md +26 -0
  185. package/pack/generated/devin/skills/rite-define/reference/gates.md +159 -0
  186. package/pack/generated/devin/skills/rite-define/reference/plan-template.md +149 -0
  187. package/pack/generated/devin/skills/rite-doctor/SKILL.md +68 -0
  188. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +55 -0
  189. package/pack/generated/devin/skills/rite-explain/SKILL.md +152 -0
  190. package/pack/generated/devin/skills/rite-explain/reference/intake.md +89 -0
  191. package/pack/generated/devin/skills/rite-frame/SKILL.md +114 -0
  192. package/pack/generated/devin/skills/rite-frame/reference/failure-modes.md +66 -0
  193. package/pack/generated/devin/skills/rite-handoff/SKILL.md +97 -0
  194. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +44 -0
  195. package/pack/generated/devin/skills/rite-learn/SKILL.md +72 -0
  196. package/pack/generated/devin/skills/rite-plan/SKILL.md +185 -0
  197. package/pack/generated/devin/skills/rite-plan/reference/anti-patterns.md +34 -0
  198. package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +48 -0
  199. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +105 -0
  200. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +168 -0
  201. package/pack/generated/devin/skills/rite-plan/reference/task-breakdown.md +42 -0
  202. package/pack/generated/devin/skills/rite-polish/SKILL.md +105 -0
  203. package/pack/generated/devin/skills/rite-polish/reference/adr-promotion.md +11 -0
  204. package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +187 -0
  205. package/pack/generated/devin/skills/rite-polish/reference/anti-patterns.md +30 -0
  206. package/pack/generated/devin/skills/rite-polish/reference/backend-polish.md +80 -0
  207. package/pack/generated/devin/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  208. package/pack/generated/devin/skills/rite-polish/reference/code.md +82 -0
  209. package/pack/generated/devin/skills/rite-polish/reference/design-memory.md +117 -0
  210. package/pack/generated/devin/skills/rite-polish/reference/design-system-discovery.md +8 -0
  211. package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +109 -0
  212. package/pack/generated/devin/skills/rite-polish/reference/ledger.md +65 -0
  213. package/pack/generated/devin/skills/rite-polish/reference/ui.md +137 -0
  214. package/pack/generated/devin/skills/rite-pov/SKILL.md +57 -0
  215. package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +54 -0
  216. package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +66 -0
  217. package/pack/generated/devin/skills/rite-prototype/SKILL.md +104 -0
  218. package/pack/generated/devin/skills/rite-prove/SKILL.md +122 -0
  219. package/pack/generated/devin/skills/rite-prove/reference/acceptance-proof.md +88 -0
  220. package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +25 -0
  221. package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +51 -0
  222. package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +43 -0
  223. package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +28 -0
  224. package/pack/generated/devin/skills/rite-prove/reference/test-command-discovery.md +30 -0
  225. package/pack/generated/devin/skills/rite-quick/SKILL.md +81 -0
  226. package/pack/generated/devin/skills/rite-resolve/SKILL.md +98 -0
  227. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +118 -0
  228. package/pack/generated/devin/skills/rite-review/SKILL.md +171 -0
  229. package/pack/generated/devin/skills/rite-review/reference/anti-patterns.md +32 -0
  230. package/pack/generated/devin/skills/rite-review/reference/cognitive-load.md +90 -0
  231. package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +26 -0
  232. package/pack/generated/devin/skills/rite-review/reference/five-axis-review.md +66 -0
  233. package/pack/generated/devin/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  234. package/pack/generated/devin/skills/rite-review/reference/performance-checklist.md +80 -0
  235. package/pack/generated/devin/skills/rite-review/reference/performance-review.md +14 -0
  236. package/pack/generated/devin/skills/rite-review/reference/security-review.md +42 -0
  237. package/pack/generated/devin/skills/rite-seal/SKILL.md +74 -0
  238. package/pack/generated/devin/skills/rite-seal/reference/anti-patterns.md +29 -0
  239. package/pack/generated/devin/skills/rite-seal/reference/final-evidence.md +41 -0
  240. package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +29 -0
  241. package/pack/generated/devin/skills/rite-seal/reference/output.md +5 -0
  242. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +47 -0
  243. package/pack/generated/devin/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  244. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +27 -0
  245. package/pack/generated/devin/skills/rite-ship/SKILL.md +87 -0
  246. package/pack/generated/devin/skills/rite-ship/reference/anti-patterns.md +28 -0
  247. package/pack/generated/devin/skills/rite-ship/reference/close-out.md +68 -0
  248. package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +120 -0
  249. package/pack/generated/devin/skills/rite-ship/reference/rollout.md +62 -0
  250. package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +39 -0
  251. package/pack/generated/devin/skills/rite-spec/SKILL.md +149 -0
  252. package/pack/generated/devin/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  253. package/pack/generated/devin/skills/rite-spec/reference/ai-spec-template.md +40 -0
  254. package/pack/generated/devin/skills/rite-spec/reference/anti-patterns.md +27 -0
  255. package/pack/generated/devin/skills/rite-spec/reference/interview-patterns.md +56 -0
  256. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +83 -0
  257. package/pack/generated/devin/skills/rite-spec/reference/question-protocol.md +36 -0
  258. package/pack/generated/devin/skills/rite-spec/reference/references-intake.md +62 -0
  259. package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +89 -0
  260. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +154 -0
  261. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +227 -0
  262. package/pack/generated/devin/skills/rite-status/SKILL.md +57 -0
  263. package/pack/generated/devin/skills/rite-temper/SKILL.md +129 -0
  264. package/pack/generated/devin/skills/rite-temper/reference/anti-patterns.md +30 -0
  265. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +66 -0
  266. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +53 -0
  267. package/pack/generated/devin/skills/rite-temper/reference/significance.md +46 -0
  268. package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +90 -0
  269. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +121 -0
  270. package/pack/generated/devin/skills/rite-vet/SKILL.md +192 -0
  271. package/pack/generated/devin/skills/rite-vet/reference/anti-patterns.md +43 -0
  272. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +202 -0
  273. package/pack/generated/devin/skills/rite-vet/reference/cross-model.md +19 -0
  274. package/pack/generated/devin/skills/rite-vet/reference/depth.md +59 -0
  275. package/pack/generated/devin/skills/rite-vet/reference/eng-lenses.md +48 -0
  276. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +201 -0
  277. package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +84 -0
  278. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +69 -0
  279. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  280. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +10 -5
  281. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +12 -7
  282. package/pack/generated/omp/skills/rite-build/SKILL.md +3 -1
  283. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +4 -3
  284. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +3 -1
  285. package/pack/generated/omp/skills/rite-define/reference/plan-template.md +1 -1
  286. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  287. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +10 -5
  288. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +12 -7
  289. package/pack/generated/pi/skills/rite-build/SKILL.md +3 -1
  290. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +4 -3
  291. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +3 -1
  292. package/pack/generated/pi/skills/rite-define/reference/plan-template.md +1 -1
  293. package/package.json +4 -2
  294. package/scripts/build-host-artifacts.sh +48 -5
  295. package/scripts/devin-generate.sh +222 -0
  296. package/update.sh +2 -1
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: devrites-frontend-craft
3
+ description: Build accessible production UI and all states during /rite-build. Use for frontend or design-system implementation; not for polish or design exploration.
4
+ triggers:
5
+ - model
6
+ ---
7
+
8
+ # devrites-frontend-craft: UI like a senior designer-engineer
9
+
10
+ Build UI that belongs in *this* product, handles every state, and avoids generic-AI
11
+ tells. Integrated into the feature slice, not a separate design project.
12
+
13
+ ## 1. Foundation discovery
14
+ Framework, routing, components, tokens, CSS methodology, icon set, existing UI patterns,
15
+ and any `PRODUCT.md` / `DESIGN.md` / design docs. Use the project's system: don't
16
+ import a new one. (Detail: `reference/design-references.md`.)
17
+ - Load the design brief + references the spec gathered (roles: target / constraint / inspiration — detail: `reference/design-references.md`).
18
+
19
+ ## Reuse first: search before you build
20
+ Before creating any new component, style, token, icon, hook, util, or helper, search the
21
+ project for an existing one and **reuse → extend → build new**: see
22
+ [reference/reuse-first.md](reference/reuse-first.md) for the search targets, the AHA
23
+ caveat, and the per-slice reuse record.
24
+
25
+ ## 2. Register detection
26
+ Read the discovery and register contract in
27
+ [`reference/design-references.md`](reference/design-references.md#discover-these).
28
+ Completion: the surface is classified as brand or product and its existing tokens,
29
+ components, patterns, and nearest neighbor are named before design choices begin.
30
+
31
+ ## 3. Shape before code: build to the brief ([reference/shape.md](reference/shape.md))
32
+ The feature's **`design-brief.md`** is your target: `/rite-spec` shaped it up front
33
+ (`devrites-ux-shape`): design direction, key states, interaction model, the visual-direction
34
+ probe. **Read it first and refine it for this slice's surface; don't re-derive the design
35
+ from scratch.** Confirm the slice covers the brief's states for this surface (default,
36
+ loading, empty, error, success, disabled, long-content), its information hierarchy +
37
+ primary action, responsive behavior, a11y, interaction model, and proof targets. **If a UI slice has no
38
+ `design-brief.md`** (a spec written before shaping), shape it now via `devrites-ux-shape`
39
+ before coding. **Ask before coding if the visual direction or UX flow is still ambiguous.**
40
+
41
+ ## 4. Build ([reference/craft.md](reference/craft.md))
42
+ - Compose from existing components/tokens (reuse-first, above) before reaching for new code.
43
+ - Build the **smallest UI** the current slice needs: don't pre-build screens.
44
+ - Don't add a second component library or icon set without asking.
45
+ - Cover the states you shaped, not just the happy path.
46
+ - **Reduce cognitive load:** no wall of options: group, mark the recommended choice, use
47
+ progressive disclosure.
48
+ - **Copy in the product's voice**; shift tone by moment: success brief, error empathetic
49
+ + actionable, loading reassuring, destructive serious. Never humor in errors. Empty
50
+ states say *why* + the next action.
51
+ - **First-use**: get the user to first value fast; onboarding proves worth, it doesn't
52
+ teach the whole product.
53
+
54
+ ## 5. Verify & record (meet the bar)
55
+ - Hit the [2026 quality bar](reference/quality-standards.md): Core Web Vitals
56
+ (LCP ≤2.5s / INP ≤200ms / CLS ≤0.1), WCAG 2.2 AA (keyboard, visible focus, contrast,
57
+ ≥24px targets / 44px touch, no drag-only), responsive at 320/768/1024/1440, Browser
58
+ chrome (themed selection/caret/scrollbar/focus — not UA defaults), and run
59
+ its verification gate (no console errors, no axe violations, all states).
60
+ - Run the **visual convergence loop** in the browser (using `devrites-browser-proof`; deltas land in its Visual Verdict scorecard): render the
61
+ slice's named states/viewports/input modes, open the screenshots, compare them with the
62
+ brief + target R-ids, record material deltas, fix, and re-render until none remain. A
63
+ detector/checklist is a floor, not the visual verdict.
64
+ - **Every interactive element has an asserting test at the right level:** each field,
65
+ checkbox, radio, select, toggle, button, and actionable link gets a unit/component test for
66
+ what it *does* (validation, toggle, options, enabled/disabled, handler); critical journeys
67
+ get one E2E. Browser proof shows it renders; the asserting test proves it works. No element
68
+ ships unverified: [`testing.md`](../devrites-lib/reference/standards/testing.md) "Completeness"; inventory in `test-plan.md`.
69
+ - **Append build-time refinements** to `design-brief.md` (§3); `/rite-polish` Phase 4 and
70
+ `/rite-seal`'s frontend reviewer read it. Record runtime evidence in `browser-evidence.md`.
71
+
72
+ ## Fullstack (frontend + backend in one feature)
73
+ When the feature needs both sides, follow [reference/fullstack.md](reference/fullstack.md):
74
+ define the **API/data contract first** (`devrites-api-interface`), slice **vertically**
75
+ through the layers (DB → service → API → UI) one capability at a time, apply the
76
+ engineering rules to the backend and this craft to the frontend, map every contract error
77
+ to a real UI state, and **prove both layers** (contract tests + browser proof).
78
+
79
+ ## Anti-AI-slop
80
+ The banned-defaults list and the countable mechanical pre-flight live in
81
+ [`anti-ai-slop.md`](../rite-polish/reference/anti-ai-slop.md) (canonical owner): run both at build and polish
82
+ time — a slop pattern in the slice is a polish finding.
83
+
84
+ ## Default vs departure
85
+ Preserve the existing identity (default, ~90%). Reject it only on an explicit signal (a
86
+ design doc naming *this* surface as the failure, or the user asking to rebuild). If
87
+ unsure, you're in default mode: the cost of a wrong departure is unrecoverable.
@@ -0,0 +1,63 @@
1
+ # Craft: build the UI
2
+
3
+ With the shape decided and the system discovered, build the smallest correct UI for the
4
+ slice. Quality is in the details and the states, not in novelty. If the brief names a
5
+ supplied Figma / screenshot / image as the build target, extract to it first: type,
6
+ spacing, color roles, layout, component behavior (`design-references.md`. *Building to a
7
+ supplied reference*).
8
+
9
+ ## Build order
10
+ 1. **Structure:** semantic markup that expresses the hierarchy from the shape note.
11
+ 2. **Compose from the system:** use existing shared components and tokens. If a needed
12
+ component doesn't exist, build it in the project's style (don't import a new library
13
+ without asking).
14
+ 3. **State coverage:** wire up every state you shaped (full set per NEVER below).
15
+ 4. **Interaction:** feedback on every action; focus management; keyboard support;
16
+ sensible defaults (Enter submits, Esc closes, etc.).
17
+ 5. **Responsive:** verify the reflow at the target viewports.
18
+
19
+ ## Technical floors (cheap now, expensive to retrofit)
20
+ - Full-height = `min-height: 100dvh`, never `h-screen` / `100vh`.
21
+ - Columns via CSS Grid, not flex + `calc(%)` math.
22
+ - Continuous input (mouse, scroll, drag) never re-renders per frame: refs / motion
23
+ values / CSS, not component state.
24
+ - **Real-imagery ladder**: project asset → generated asset → seeded stock placeholder →
25
+ labeled empty slot + tell the user. Never divs pretending to be a screenshot; real SVG
26
+ logos, not text wordmarks.
27
+
28
+ ## Use the system, don't fight it
29
+ - Tokens for spacing/color/type: never hard-code a value a token covers.
30
+ - Match the nearest neighbor's patterns for forms, buttons, menus, toasts.
31
+ - One icon set (the project's). Consistent sizing/alignment.
32
+
33
+ ## Smallest UI for the slice
34
+ Build what *this* slice needs. Don't scaffold future screens, settings, or variations
35
+ "while you're here". That's scope creep and it dodges its own review.
36
+
37
+ ## Quality tells (the difference between fine and crafted)
38
+ - The primary action is unmistakable.
39
+ - Empty states teach the next step; error states offer recovery.
40
+ - Spacing reads as deliberate; alignment holds at every breakpoint.
41
+ - Copy is in the product's voice, specific, and short (and passes the Copy & data realism
42
+ check in [`anti-ai-slop.md`](../../rite-polish/reference/anti-ai-slop.md)).
43
+ - No console noise; no layout shift.
44
+
45
+ ## Record
46
+ Record: append refinements to `design-brief.md` and run the render-compare-fix loop per
47
+ SKILL.md §5 before claiming the UI works.
48
+
49
+ ## NEVER (craft)
50
+
51
+ - Never hard-code a value a token covers (color, spacing, type, radius,
52
+ shadow). If the token is missing, ask before adding one.
53
+ - Never import a new component library or icon set without asking: the
54
+ project has one already.
55
+ - Never ship only the populated state. The full state set (loading / empty
56
+ / error / success / disabled / long-content) is the minimum.
57
+ - Never animate as decoration. Motion is feedback or a focus shift, not
58
+ jewellery.
59
+ - Never use raw `#000` / `#fff`, viewport queries for component-internal
60
+ reflows, or raw `z-index` numbers outside the semantic scale
61
+ (see `quality-standards.md`, "Numerical bar").
62
+ - Never write `console.log` or leave commented-out code in shipped UI.
63
+ - Never scaffold "future screens": out of slice scope.
@@ -0,0 +1,116 @@
1
+ # Design references: discover, don't impose
2
+
3
+ What to read in the project before designing, and how register changes the rules.
4
+
5
+ ## Discover these
6
+ | Thing | Where |
7
+ |---|---|
8
+ | Design docs | `PRODUCT.md`, `DESIGN.md`, `docs/design/*`, Storybook, READMEs |
9
+ | Tokens | `tailwind.config.*`, CSS custom properties, `theme.*`, token files |
10
+ | Shared components | components/ui dir, design-system package, what neighbors import |
11
+ | Type | families, weights, the size scale in use |
12
+ | Spacing | the spacing scale / tokens in use |
13
+ | Color roles | semantic names (primary/surface/muted/danger), not raw hex |
14
+ | Icons | the one icon library already imported |
15
+ | Patterns | how existing buttons/menus/dialogs/forms/toasts behave |
16
+ | Neighbors | the closest existing feature: match its flow shape |
17
+
18
+ ## Register-specific rules
19
+ **Product surface** (dashboard/admin/app):
20
+ - System fonts are legitimate (`-apple-system, BlinkMacSystemFont, "Segoe UI",
21
+ system-ui, sans-serif`); Inter is a reasonable fallback only when the project has no established family.
22
+ - One family usually carries headings, body, labels, data.
23
+ - Fixed rem scale (not fluid `clamp()` headings); tighter ratio (1.125-1.2).
24
+ - Density is a feature; tables can run dense; prose still ~65-75ch.
25
+
26
+ **Brand surface** (landing/marketing/campaign):
27
+ - More expressive type and larger scale contrast are appropriate.
28
+ - Display/body pairing can be worth it; motion is welcome (still purposeful).
29
+
30
+ ## The rule
31
+ Match what exists. A new token, font, or component library is a decision the user makes,
32
+ not a default you reach for. When the system is ambiguous, ask: don't invent the
33
+ project's intent. When a project `DESIGN.md` is present it is the **rolled-up design
34
+ memory** earlier features proved and closed during Polish
35
+ (`../../rite-polish/reference/design-memory.md`): the
36
+ inherited system to build *to*, ahead of re-deriving direction from scratch.
37
+
38
+ ## Scene-sentence: commit before choosing theme / direction
39
+ Dark vs light is not a default, and neither is "playful", "serious", or "editorial".
40
+ Before picking any of those, write **one sentence** that fixes the physical scene:
41
+
42
+ > *who* uses this, *where*, under *what ambient light / device*, in *what mood*.
43
+
44
+ If that sentence doesn't make the answer feel inevitable, it isn't concrete enough:
45
+ add detail until it does. Then design *for that scene*, not for the category.
46
+
47
+ Examples:
48
+ - ❌ "An observability dashboard" → forces nothing; "dark blue tech" is the reflex.
49
+ - ✅ "An on-call SRE glancing at incident severity at 2am on a 27-inch monitor in a
50
+ dim room" → forces dark, high-contrast severity colours, scannable rows.
51
+ - ❌ "A finance app" → forces nothing; "navy + gold" is the reflex.
52
+ - ✅ "A self-employed designer reconciling last month's invoices at a kitchen table
53
+ in afternoon light, on a 13-inch laptop" → forces a calm light theme with one
54
+ committed accent for the running total.
55
+
56
+ Run the sentence, not the category.
57
+
58
+ ## Named anchor references: steer with specifics, not adjectives
59
+ After the scene sentence, name **2-3 specific anchors** the surface should feel like:
60
+ real products, brands, or objects ("Linear's command bar", "a Teenage Engineering device",
61
+ "the Stripe dashboard"), **not adjectives** ("modern", "clean", "premium"). Adjectives are
62
+ unfalsifiable; a named anchor is checkable. You can hold the built UI next to it and ask
63
+ "does it read like that?" Anchors steer *direction*, not pixel-copying: take the relevant
64
+ trait (density, type voice, restraint), not the literal layout, and never the parts that
65
+ clash with this project's register or design system. The supplied `references/` files are
66
+ themselves anchors: name what trait each contributes. Record the anchors in
67
+ `design-brief.md`'s **Design direction** so build, polish, and seal share the same target.
68
+
69
+ ## Building to a supplied reference (Figma / screenshot / image)
70
+ When the spec gathered a Figma frame, screenshot, or image and the brief names it the
71
+ **build target** (not just inspiration), the reference *is* the art direction and the code
72
+ is the implementation layer. This is the build-time counterpart to the shape-time
73
+ visual-direction probe (`../../devrites-ux-shape/reference/visual-direction-probe.md`):
74
+ the probe *chose* a lane; here you *match* the chosen target.
75
+
76
+ **Extract before you write**: read the reference deliberately, don't eyeball it:
77
+ - **Type:** family, the size steps used, weights, line-height, letter-spacing,
78
+ the heading→body ratio. Map each to the project's type scale (or flag a missing step).
79
+ - **Spacing & rhythm:** padding, gaps, section spacing; infer the underlying step and
80
+ round to the project's 4 pt scale rather than hard-coding the measured pixel.
81
+ - **Color:** the roles in play (surface / text / accent / border), not raw hex; bind to
82
+ existing tokens, propose a token only where one is genuinely missing.
83
+ - **Layout & hierarchy:** grid, what's seen 1st / 2nd / 3rd, the density and motion the
84
+ reference implies (cross-check against the brief's Calibration).
85
+ - **Component behavior:** the states the reference shows (and the ones it can't: hover,
86
+ focus, loading, empty, error: design those from the brief, the reference won't have them).
87
+
88
+ Then implement to match, in the project's system:
89
+ - **Match the target, fill the gaps from the brief.** A static reference shows one state;
90
+ ship the full state set (see `quality-standards.md`, "Focus & states").
91
+ - **A reference that conflicts with the design system is a question for the user**, not a
92
+ silent override: name the conflict (token, font, spacing, a second system) and ask.
93
+ - **Don't crop a multi-section reference into pieces** to "extract" a section: work from
94
+ the cleanest whole frame; if a region is unreadable, ask for a clearer asset rather than
95
+ guessing.
96
+ - **Fidelity is faithfulness, not pixel-tracing:** carry the reference's hierarchy, rhythm,
97
+ and voice; never copy a layout that clashes with this project's register or a11y floor.
98
+ - Record what the reference dictated (and any deviation + why) in the brief's
99
+ **Build-time refinements**, so polish and seal check the build against the same target.
100
+
101
+ ## NEVER (design references)
102
+
103
+ - Never default to **Inter / DM Sans / Plus Jakarta / Fraunces / Newsreader**
104
+ because they're the "tasteful 2024 default". Use what the project uses.
105
+ - Never default to a **purple/blue gradient** when the project has a brand
106
+ palette.
107
+ - Never pick a tone (playful / serious / corporate / hand-drawn) that
108
+ contradicts the surface's **register**: brand vs product
109
+ ([`SKILL.md`](../SKILL.md) §2).
110
+ - Never add a second design system to "modernize" without explicit user
111
+ approval. One design system per project; consistency beats local taste.
112
+ - Never invent a token. If a needed color/spacing/type slot doesn't exist,
113
+ ask whether to add it to the system.
114
+ - Never use a screenshot of another product as a target without checking
115
+ the *register* matches. A landing page reference is not a product UI
116
+ reference.
@@ -0,0 +1,46 @@
1
+ # Fullstack work (frontend + backend together)
2
+
3
+ Most UI features also need backend. Don't build the two sides blind to each other, and
4
+ don't build "all backend, then all frontend", that hides integration risk until the end.
5
+
6
+ ## Contract first
7
+ Define the **API / data contract** before either side codes against it: shape, field
8
+ types + units, status codes, **error bodies**, pagination, idempotency. Use
9
+ `devrites-api-interface` (it owns the doubt gate). With the
10
+ contract fixed:
11
+ - the **backend** slice can land against it (consumer stubbed),
12
+ - the **frontend** slice can build against a mock or the real contract.
13
+ Neither side blocks the other, and the seam stays stable.
14
+
15
+ ## Slice vertically through the layers
16
+ Each slice cuts **one capability** end-to-end (data/model → service → API → UI) and
17
+ leaves a **working, demoable path**. "Create item" is a slice (persist + endpoint +
18
+ minimal form); "all the models" is not. Order by dependency; the first slice is the
19
+ thinnest end-to-end path so integration surprises surface early and cheap.
20
+
21
+ ## Apply the right discipline to each layer
22
+ - **Backend part** → the engineering rules: validate untrusted input at the boundary,
23
+ authz on every sensitive action, parameterized queries, fail closed, no secrets in
24
+ logs; fail-fast errors with meaningful messages; measure-first performance (no N+1)
25
+ (lib standards: [`security.md`](../../devrites-lib/reference/standards/security.md), [`error-handling.md`](../../devrites-lib/reference/standards/error-handling.md), [`performance.md`](../../devrites-lib/reference/standards/performance.md) under
26
+ `devrites-lib/reference/standards/`).
27
+ - **Frontend part** → frontend craft: shape (all states), the design system, and the
28
+ 2026 [quality-standards](quality-standards.md) (CWV, WCAG 2.2, responsive, motion).
29
+ - Map the API's error/edge responses to **real UI states**: every error the contract can
30
+ return needs a handled, helpful UI state, not a blank screen.
31
+
32
+ ## Placement spans both sides
33
+ The investigation's placement analysis covers **where the backend logic lives** *and*
34
+ **where the UI component lives**, plus the contract that joins them, so each side is
35
+ correctly placed, not bolted on.
36
+
37
+ ## Prove BOTH layers
38
+ A fullstack slice is proven only when both sides have evidence:
39
+ - backend/contract: tests for the endpoint + its error/edge cases (and a real
40
+ request/response observation);
41
+ - frontend: browser proof (states exercised, console clean, responsive, a11y).
42
+ If only one side is proven, the slice is **not** done.
43
+
44
+ ## Keep them in sync
45
+ A change to the contract after both sides exist is a **Spec Drift Guard** event. It
46
+ affects FE and BE together. Stop, record it, re-plan the contract, then update both sides.
@@ -0,0 +1,294 @@
1
+ # Frontend quality standards (2026)
2
+
3
+ The measurable bar UI work is held to. Project conventions win where they're stricter;
4
+ these are the floor, not the ceiling.
5
+
6
+ ## Performance: Core Web Vitals (field/p75 targets)
7
+ - **LCP** (Largest Contentful Paint) ≤ **2.5 s**
8
+ - **INP** (Interaction to Next Paint: the current responsiveness metric, replaced FID)
9
+ ≤ **200 ms**
10
+ - **CLS** (Cumulative Layout Shift) ≤ **0.1**
11
+ - Keep an interactive page's shipped JS lean (a budget around **≤400 KB gzipped** is a
12
+ good default); lazy-load below-the-fold and heavy/optional code; minimize hydration;
13
+ size and reserve space for images/media to avoid layout shift.
14
+
15
+ ## Accessibility: WCAG 2.2 AA
16
+ - **Semantic HTML first:** real `<button>`/`<nav>`/`<label>`/headings; ARIA only to fill
17
+ gaps semantics can't.
18
+ - **Keyboard**: every interactive element operable by keyboard; logical tab order; **focus
19
+ visible** with ≥ **3:1** contrast against its background (never remove the outline
20
+ without an equal replacement).
21
+ - **Contrast**: text ≥ **4.5:1** (≥ 3:1 for large text and UI/graphics).
22
+ - **Target size**: ≥ **24×24** CSS px (WCAG 2.2 AA, SC 2.5.8); prefer **44×44** for primary
23
+ touch targets.
24
+ - **No drag-only** interactions: provide a single-pointer alternative (SC 2.5.7).
25
+ - Labels/names on all controls; errors announced; respects `prefers-reduced-motion`.
26
+ - **Test** with keyboard, a screen reader, and an automated checker (e.g. axe): early.
27
+
28
+ ## Motion
29
+ - Purposeful only (class table below). Never animate to mask slow loading; honor
30
+ `prefers-reduced-motion`.
31
+
32
+ ## Responsive
33
+ - Fluid layouts; no fixed widths that break. Verify at **320 / 768 / 1024 / 1440** px;
34
+ preserve content and controls at **200% text zoom** and **400% browser zoom from
35
+ 1280 px** (320 CSS px). This is the canonical viewport set for UI evidence: [`ui.md`](../../rite-polish/reference/ui.md), [`browser-proof-checklist.md`](../../devrites-lib/reference/standards/browser-proof-checklist.md), and
36
+ [`browser-polish-evidence.md`](../../rite-polish/reference/browser-polish-evidence.md) cite it rather than restating it.
37
+ - **No page-level horizontal scroll anywhere in 320–1920.** Sweep between checkpoints:
38
+ a `1fr` track given a 1024 px image can overflow at 900 px. Fix intrinsic sizing
39
+ (for example `minmax(0, 1fr)`), wrapping and media constraints; root clipping is
40
+ not a reflow fix. Clip decoration only, never text, controls or focus indicators.
41
+ A necessary two-dimensional table/map may scroll inside a named, bounded,
42
+ keyboard-accessible region; surrounding headings, text and pagination must reflow.
43
+ Record and test that exception. **Failing case:** a localized CTA disappears behind
44
+ `overflow-x: clip`; the missing scrollbar does not prove accessible reflow.
45
+ - **`dvh`, not `vh`**, for full-height surfaces (`min-height: 100dvh`, never `h-screen` /
46
+ `100vh`: mobile address bars break them). A hero fits the *initial* viewport: headline
47
+ ≤2 lines, primary CTA above the fold.
48
+
49
+ ## Design system
50
+ - Use the project's **tokens** (spacing/type/color roles): never hard-code a value a
51
+ token covers. Compose from existing components; one icon set.
52
+
53
+ ### Consistency locks (one per surface)
54
+ Lock these in `design-brief.md` and hold them page-wide: mid-scroll drift ("a different
55
+ website by section 7") is a tell: **one declared color strategy and role budget**
56
+ (§ Color commitment; no unbriefed accent appearing later), **one radius scale**, **one theme** (light or dark, not both).
57
+
58
+ ## Numerical bar (enforceable specifics)
59
+
60
+ These are the hard numbers that move "good UI" from opinion to checkable.
61
+ Project tokens win when stricter; these are the floor.
62
+
63
+ ### Color
64
+ - **OKLCH-only** for new tokens: perceptually uniform, predictable lightness
65
+ steps across hues. Stop reaching for HSL; the lightness lies.
66
+ - Example: `oklch(0.62 0.18 264)` for a saturated primary.
67
+ - **Never `#000` / `#fff`** as raw values. Pure black/white are too harsh and
68
+ too clinical; use a near-black (`oklch(0.18 0 0)`) and near-white
69
+ (`oklch(0.98 0 0)`) or the project's surface tokens.
70
+ - Contrast follows WCAG 2.2: text ≥ 4.5:1, UI/graphics ≥ 3:1. Verify
71
+ against the *rendered* background, not the theoretical one. Procedure: pair every
72
+ `color` declaration with its computed background; a button whose text and fill sit
73
+ within 5% lightness and 0.05 chroma of each other fails regardless of the palette.
74
+ - **Restrained accent, capped:** one accent covers **≤5% of the viewport** at rest
75
+ (3–5 placements above the fold). Accent-filled panels fail this strategy; another strategy requires the explicit brief and role budgets below.
76
+ - **Tint neutrals toward the brand hue:** pure-grey neutrals look sterile.
77
+ Nudge every grey 0.005-0.01 chroma toward the brand colour: invisible at
78
+ a glance, but the surface stops feeling generic.
79
+ - **Alpha is a smell:** heavy translucency usually means an incomplete palette.
80
+ Define explicit overlay/hover tokens; transparency is for focus rings and scrims.
81
+ - **Every colored surface token ships its `on-` pair** (`primary`/`on-primary`,
82
+ `destructive`/`on-destructive`, …) so contrast is designed in, not patched after.
83
+
84
+ #### Color commitment: pick the strategy before the palette
85
+ Decide *how committed* the surface is to colour before opening the picker. Four positions on a single axis; pick one, then design within it:
86
+
87
+ | Strategy | Rough coverage | Use for |
88
+ |---|---|---|
89
+ | **Restrained** | tinted neutrals + 1 accent ≤5% of the viewport at rest | Most product UI; brand surfaces that want to look quiet. |
90
+ | **Committed** | one saturated colour carries 30-60% of the surface | Brand pages with a strong identity; product feature surfaces that need a hero colour. |
91
+ | **Multi-role** | 3-4 named colour roles, each used deliberately | Brand campaigns; product data-viz with distinct meanings. |
92
+ | **Saturated** | the surface *is* the colour: full-bleed colour ground | Brand heroes, campaign pages, splash moments. |
93
+
94
+ Two corollaries:
95
+ - The ≤5% accent cap belongs to **Restrained only**. For Committed / Multi-role /
96
+ Saturated, the brief must name the strategy, purpose, tokens and measured coverage
97
+ budget per role and viewport. No blanket waiver: an unbudgeted colored panel fails.
98
+ Preserve distinct success/warning/error meanings; semantic states do not authorize decorative accents. Check rendered captures against the declared budgets.
99
+ - *Register* (brand vs product) doesn't pick the strategy by itself: brand
100
+ surfaces aren't always Saturated, product surfaces aren't always Restrained. Pick from the scene, not the category.
101
+
102
+ ### Calibration: density & motion
103
+ Colour commitment fixes *how much colour*; two more axes fix *how much space* and
104
+ *how much movement*. Set one position on each (from the **scene sentence**, the same
105
+ way colour is picked) and carry both in `design-brief.md` so the build targets a
106
+ calibration instead of re-deciding it per slice.
107
+
108
+ **Density**: information per viewport; drives which spacing steps dominate:
109
+
110
+ | Position | Feels like | Spacing steps that dominate | Use for |
111
+ |---|---|---|---|
112
+ | **Airy** | gallery / calm / room to breathe | `32 / 48 / 64 / 80 / 96` | brand pages, onboarding, focus moments, low-data surfaces |
113
+ | **Balanced** | most product UI | `16 / 20 / 24 / 32` | dashboards, forms, settings: the default |
114
+ | **Dense** | cockpit / data-rich / power tool | `4 / 8 / 12 / 16` | tables, monitors, terminals, pro tools lived in all day |
115
+
116
+ **Motion**: how much the surface moves; drives which motion classes (table below) are in play:
117
+
118
+ | Position | Feels like | Motion classes in play | Use for |
119
+ |---|---|---|---|
120
+ | **Minimal** | crisp, almost still | Instant + State | dense tools, regulated/trust surfaces, reduced-motion-leaning |
121
+ | **Standard** | responsive, purposeful | Instant + State + Layout | most product + brand UI: the default |
122
+ | **Expressive** | choreographed, scroll-aware | + Entrance, deliberate sequencing | brand heroes, launch/campaign moments, story scroll |
123
+
124
+ Corollaries (same shape as colour commitment):
125
+ - Pick from the **scene sentence**, not the category: "an on-call SRE at 2am" → Dense +
126
+ Minimal; "a launch hero in afternoon light" → Airy + Expressive. Register doesn't decide
127
+ it by itself.
128
+ - `prefers-reduced-motion` overrides Motion **downward at runtime** regardless of position:
129
+ an Expressive surface still ships a Minimal path.
130
+ - The position is a target, not a straitjacket: a surface may break density locally for
131
+ emphasis: name the exception in the brief, don't let the whole page drift off it.
132
+
133
+ ### Spacing
134
+ - **4pt base scale** (`4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 64 / 80 /
135
+ 96`). Project tokens may use a multiplier; never hardcode in-between
136
+ values.
137
+ - Inline spacing rhythms in multiples of 4 px. Optical alignments may need a
138
+ 1 - 2 px nudge: record the *why* in a comment.
139
+
140
+ ### Typography scale
141
+ - **Brand surfaces**: fluid `clamp()` headings (e.g.,
142
+ `clamp(2rem, 1rem + 3vw, 3.5rem)`). Display/body pairing OK.
143
+ - **Product surfaces**: **fixed rem scale** (1.125 - 1.2 ratio). One family
144
+ usually carries headings, body, labels, data.
145
+ - Body line-height ~1.5; headings ~1.1 - 1.25. Prose width ~ 65-75 ch.
146
+ - Adjacent hierarchy levels differ by **≥1.5× in at least one signal** (size, weight,
147
+ or color); verified under a blur(8px) squint — a flat field means the hierarchy is
148
+ decorative. **Failing case:** label and helper text differ only by 0.05rem.
149
+ - All-caps display text sets **line-height ≥1.0**; tighter collides cap heights.
150
+ - **Hero font-scale attribution:** a hero headline that wraps past its planned lines at
151
+ the target viewport is a font-size error first — fix the scale, don't shorten the
152
+ copy. **Failing case:** a four-line hero headline "fixed" by cutting the sentence.
153
+ - Display ceiling: `clamp()` max ≤ ~6rem: larger is shouting. Display
154
+ letter-spacing floor **≥ −0.04em**; tighter and the letters touch.
155
+ - `text-wrap: balance` on h1-h3; `text-wrap: pretty` on long prose.
156
+
157
+ ### Motion
158
+ | Class | Duration | Use |
159
+ |---|---|---|
160
+ | Instant | 100 - 150 ms | Hover/press, tooltip enter, color shifts |
161
+ | State | 200 - 300 ms | Toggle, focus ring, dropdown |
162
+ | Layout | 300 - 500 ms | Modal/drawer enter, route transitions |
163
+ | Entrance | 500 - 800 ms | Page entrance, hero animation |
164
+
165
+ - **Exit at ~75 % of enter.** A 300 ms enter pairs with a 225 ms exit.
166
+ - **Bounce / elastic easing banned** unless the project's design system
167
+ explicitly uses it.
168
+ - Honor `prefers-reduced-motion`: reduce or remove non-essential motion
169
+ entirely. Reduced means fewer and gentler, never zero feedback.
170
+ - **Loading feedback appears by ~200 ms**: skeletons/spinners replace stillness
171
+ after that threshold; below it, feedback flicker reads as jank. Hover intents
172
+ may delay 150–300 ms; focus indication never fades in — the ring is instant.
173
+
174
+ ### Forms
175
+ - Inputs match button height (44 px floor); visual targets under 24 px expand
176
+ their hit area with a pseudo-element to the 44 px minimum.
177
+ - Helper/error text reserves **`min-height: 1lh`** so messages never shift layout.
178
+ - Border width is pinned across states (state changes recolor, never resize).
179
+ - Disabled is visible through **three channels**: muted color, `not-allowed`
180
+ cursor, and blocked interaction — color alone fails.
181
+ - Mobile inputs set **≥16 px** font (smaller triggers iOS zoom-on-focus).
182
+ - Numeric/data columns set **`font-variant-numeric: tabular-nums`**; columns of
183
+ figures align or the surface reads broken.
184
+
185
+ ### Dark mode (three-axis compensation)
186
+ A token-flip dark mode is sterile. When the project ships dark, compensate
187
+ three axes from light:
188
+ - **Line-height** `+0.05 – 0.10` (text breathes more on dark surfaces).
189
+ - **Letter-spacing** `+0.01 – 0.02 em` (perceived spacing tightens on dark).
190
+ - **Weight** `+1 step` for very small or low-contrast text.
191
+
192
+ If the project has dark tokens already, follow them. If not and dark is in
193
+ scope, propose the compensation rather than ship a flat invert.
194
+
195
+ ### Focus & states (8 required, 3 conditional)
196
+ Every interactive element ships **8 visual/interaction states**:
197
+ `default`, `hover`, `active`, `focus-visible`, `disabled`, `loading`,
198
+ `selected`, and an error/invalid surface (required wherever the element can be invalid). Data surfaces add the
199
+ conditional three whenever the data can produce them: **partial** (a missing field
200
+ renders an explicit em-dash/placeholder — never `null` or `0`), **conflict** (a
201
+ concurrent-edit/version-mismatch surface), and **offline/unreachable** (stale-data
202
+ banner with retry, not a silently cached render). **Failing case:** a row with a
203
+ missing value renders `0` or blank and the review reads it as real data.
204
+ - `:focus-visible` ring: **2 - 3 px**, **≥ 3:1** contrast against the
205
+ background, **offset 2 px** so the focus is unambiguous on dense layouts.
206
+
207
+ ### Browser chrome
208
+ User-agent defaults are unfinished craft. Per UI slice, theme or explicitly
209
+ decline (briefed) each of: `::selection` (token colors, not UA blue),
210
+ `caret-color` on editable fields, scrollbar styling or a recorded
211
+ `scrollbar-width` decision, and the project focus-ring token in place of the
212
+ unstyled UA outline. **Failing case:** layout, type, and the 8+3 states pass
213
+ while the UA blue focus ring and default selection remain.
214
+
215
+ ### Container queries vs viewport queries
216
+ - **Component breakpoints:** use **container queries** (`@container`). The
217
+ same card adapts to its column whether the viewport is 320 or 1920.
218
+ - **Page-level layout:** use viewport queries
219
+ (`@media (min-width: ...)`) for sidebar collapses, header reflows.
220
+ - Mixing the two is normal; using only one is usually a code smell.
221
+
222
+ ### Semantic z-index scale
223
+ Pick a scale per surface role; never use raw `z-index: 9999`. Suggested
224
+ floor:
225
+
226
+ | Role | z |
227
+ |---|---|
228
+ | Base content | `auto` / `0` |
229
+ | Sticky header | `50` |
230
+ | Dropdown / popover | `100` |
231
+ | Drawer / sheet | `200` |
232
+ | Modal | `300` |
233
+ | Toast | `400` |
234
+ | System dialog / debug overlay | `500` |
235
+
236
+ ### Materiality (elevation & surface)
237
+ Depth is earned, not defaulted. Reach **down** this ladder in order; stop at the first
238
+ rung that carries the structure.
239
+ - **Hairline first.** A **1 px border / divider** (a hairline in a near-neutral token)
240
+ defines structure before any shadow does. Borders separate; shadows lift. Most "cards"
241
+ want a hairline, not elevation.
242
+ - **Elevation is a token scale, not an ad-hoc value.** When a surface genuinely lifts
243
+ (menu, popover, dragged item), use a **small shadow set from the design system** with one
244
+ consistent light source: never a one-off `box-shadow`. The elevation step and the
245
+ semantic z-index role move together.
246
+ - **Texture needs contrast.** Grain / noise / pattern earns its place only when it reads
247
+ against the surface. Invisible texture is bytes with no signal: drop it.
248
+ - **Asset-led material.** Rich material (photographic grain, real product imagery,
249
+ generated art) comes from a **real raster / generated asset**, not an SVG/CSS
250
+ approximation of one. Don't fake a photo with gradients; ship the asset or use a flat
251
+ token.
252
+ - **No decorative glass.** `backdrop-filter: blur(...)` is for a fixed/sticky surface over
253
+ moving content (a sticky header, a sheet over scroll), never a default panel look
254
+ ([`anti-ai-slop.md`](../../rite-polish/reference/anti-ai-slop.md)).
255
+
256
+ ### NEVER (UI numerical bar)
257
+ - Never reintroduce anything [`rite-polish` anti-ai-slop](../../rite-polish/reference/anti-ai-slop.md) bans.
258
+ - Never hard-code a spacing value the 4 pt scale or project tokens cover.
259
+ - Never animate an exit at 100 % of enter duration (feels uncontrolled).
260
+ - Never use raw `z-index` numbers outside the semantic scale.
261
+ - Never use viewport queries for component-internal reflows when the
262
+ component is reused at different widths.
263
+ - Never ship dark mode as a flat token invert (compensate three axes).
264
+ - Never reach for a shadow where a 1 px hairline carries the structure.
265
+ - Never invent a one-off `box-shadow` outside the elevation token set.
266
+ - Never ship texture / grain that doesn't read against its surface.
267
+
268
+ ## Verification gate (a UI slice isn't done until all pass)
269
+ - [ ] Renders with **no console errors/warnings**
270
+ - [ ] **Keyboard**: tab through reaches everything; focus visible; Esc/Enter behave
271
+ - [ ] **Screen reader** conveys content + structure
272
+ - [ ] **All states**: the canonical 8 + 3 lattice above (§ Focus & states), not a
273
+ shorter local list
274
+ - [ ] **Responsive** at the canonical viewport set (§ Responsive); no lost content or
275
+ controls, no page overflow; bounded exceptions tested; zoom-safe
276
+ - [ ] **No accessibility violations** (axe or equivalent)
277
+ - [ ] Meets the **CWV budget** above (measure, don't assume)
278
+ - [ ] Aligned to the **design system** (tokens, components, type, spacing)
279
+ - [ ] **Browser chrome** themed or declined in the brief (§ Browser chrome)
280
+ - [ ] Clickables show `cursor: pointer` + a hover state; icons are SVG from the one set
281
+ (no emoji); nothing trapped under fixed/sticky bars
282
+ - [ ] **Consistency locks hold** (declared color strategy/roles / one radius scale / one theme) and the
283
+ mechanical pre-flight passes ([`anti-ai-slop.md`](../../rite-polish/reference/anti-ai-slop.md))
284
+
285
+ ## Craft convergence bar
286
+
287
+ Craft work terminates; it does not loop. Findings classify as **Critical /
288
+ Major / Minor**: done means zero Critical, zero Major, and every remaining Minor
289
+ accepted **in writing** (owner + reason) in `polish-report.md` — an unwritten
290
+ minor is an ignored finding, not an accepted one. Re-running the full bar after a
291
+ fix pass happens only on an explicit opt-in ("re-run the full bar"); "keep going"
292
+ is not opt-in. Each pass captures every supported viewport, not only the one that
293
+ failed. **Failing case:** the 375 px overflow is fixed, 320 px still overflows,
294
+ and the report reads clean.