godpowers 0.15.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 (444) hide show
  1. package/AGENTS.md +37 -0
  2. package/CHANGELOG.md +639 -0
  3. package/INSPIRATION.md +52 -0
  4. package/LICENSE +21 -0
  5. package/README.md +232 -0
  6. package/SKILL.md +500 -0
  7. package/agents/god-archaeologist.md +139 -0
  8. package/agents/god-architect.md +92 -0
  9. package/agents/god-auditor.md +150 -0
  10. package/agents/god-browser-tester.md +144 -0
  11. package/agents/god-context-writer.md +137 -0
  12. package/agents/god-coordinator.md +138 -0
  13. package/agents/god-debt-assessor.md +132 -0
  14. package/agents/god-debugger.md +77 -0
  15. package/agents/god-deploy-engineer.md +87 -0
  16. package/agents/god-deps-auditor.md +111 -0
  17. package/agents/god-design-reviewer.md +137 -0
  18. package/agents/god-designer.md +171 -0
  19. package/agents/god-docs-writer.md +102 -0
  20. package/agents/god-executor.md +76 -0
  21. package/agents/god-explorer.md +110 -0
  22. package/agents/god-harden-auditor.md +163 -0
  23. package/agents/god-incident-investigator.md +144 -0
  24. package/agents/god-launch-strategist.md +103 -0
  25. package/agents/god-migration-strategist.md +126 -0
  26. package/agents/god-observability-engineer.md +76 -0
  27. package/agents/god-orchestrator.md +728 -0
  28. package/agents/god-org-context-loader.md +124 -0
  29. package/agents/god-planner.md +73 -0
  30. package/agents/god-pm.md +105 -0
  31. package/agents/god-quality-reviewer.md +74 -0
  32. package/agents/god-reconciler.md +230 -0
  33. package/agents/god-reconstructor.md +124 -0
  34. package/agents/god-repo-scaffolder.md +60 -0
  35. package/agents/god-retrospective.md +109 -0
  36. package/agents/god-roadmap-reconciler.md +123 -0
  37. package/agents/god-roadmap-updater.md +89 -0
  38. package/agents/god-roadmapper.md +82 -0
  39. package/agents/god-spec-reviewer.md +70 -0
  40. package/agents/god-spike-runner.md +119 -0
  41. package/agents/god-stack-selector.md +93 -0
  42. package/agents/god-standards-check.md +132 -0
  43. package/agents/god-storyteller.md +116 -0
  44. package/agents/god-updater.md +174 -0
  45. package/bin/install.js +514 -0
  46. package/extensions/data-pack/README.md +33 -0
  47. package/extensions/data-pack/agents/god-dashboard-builder.md +66 -0
  48. package/extensions/data-pack/agents/god-etl-engineer.md +64 -0
  49. package/extensions/data-pack/agents/god-ml-feature-engineer.md +66 -0
  50. package/extensions/data-pack/manifest.yaml +39 -0
  51. package/extensions/data-pack/package.json +42 -0
  52. package/extensions/data-pack/skills/god-dashboard.md +28 -0
  53. package/extensions/data-pack/skills/god-etl.md +28 -0
  54. package/extensions/data-pack/skills/god-ml-feature.md +28 -0
  55. package/extensions/data-pack/workflows/dashboard-arc.yaml +13 -0
  56. package/extensions/data-pack/workflows/etl-arc.yaml +13 -0
  57. package/extensions/data-pack/workflows/ml-feature-arc.yaml +13 -0
  58. package/extensions/launch-pack/README.md +36 -0
  59. package/extensions/launch-pack/agents/god-indie-hackers-strategist.md +128 -0
  60. package/extensions/launch-pack/agents/god-oss-release-strategist.md +125 -0
  61. package/extensions/launch-pack/agents/god-product-hunt-strategist.md +118 -0
  62. package/extensions/launch-pack/agents/god-show-hn-strategist.md +113 -0
  63. package/extensions/launch-pack/manifest.yaml +45 -0
  64. package/extensions/launch-pack/package.json +41 -0
  65. package/extensions/launch-pack/skills/god-indie-hackers.md +39 -0
  66. package/extensions/launch-pack/skills/god-oss-release.md +43 -0
  67. package/extensions/launch-pack/skills/god-product-hunt.md +41 -0
  68. package/extensions/launch-pack/skills/god-show-hn.md +40 -0
  69. package/extensions/launch-pack/workflows/indie-hackers.yaml +13 -0
  70. package/extensions/launch-pack/workflows/oss-release.yaml +13 -0
  71. package/extensions/launch-pack/workflows/product-hunt.yaml +13 -0
  72. package/extensions/launch-pack/workflows/show-hn.yaml +13 -0
  73. package/extensions/security-pack/README.md +48 -0
  74. package/extensions/security-pack/agents/god-hipaa-auditor.md +117 -0
  75. package/extensions/security-pack/agents/god-pci-auditor.md +100 -0
  76. package/extensions/security-pack/agents/god-soc2-auditor.md +107 -0
  77. package/extensions/security-pack/manifest.yaml +39 -0
  78. package/extensions/security-pack/package.json +42 -0
  79. package/extensions/security-pack/skills/god-hipaa-audit.md +41 -0
  80. package/extensions/security-pack/skills/god-pci-audit.md +40 -0
  81. package/extensions/security-pack/skills/god-soc2-audit.md +42 -0
  82. package/extensions/security-pack/workflows/hipaa-arc.yaml +15 -0
  83. package/extensions/security-pack/workflows/pci-arc.yaml +15 -0
  84. package/extensions/security-pack/workflows/soc2-arc.yaml +15 -0
  85. package/hooks/pre-tool-use.sh +40 -0
  86. package/hooks/session-start.sh +74 -0
  87. package/lib/README.md +28 -0
  88. package/lib/agent-browser-driver.js +215 -0
  89. package/lib/agent-cache.js +194 -0
  90. package/lib/agent-validator.js +275 -0
  91. package/lib/artifact-diff.js +168 -0
  92. package/lib/artifact-linter.js +142 -0
  93. package/lib/awesome-design.js +312 -0
  94. package/lib/browser-bridge.js +209 -0
  95. package/lib/budget.js +215 -0
  96. package/lib/checkpoint.js +390 -0
  97. package/lib/code-scanner.js +262 -0
  98. package/lib/context-budget.js +170 -0
  99. package/lib/context-writer.js +348 -0
  100. package/lib/cost-tracker.js +325 -0
  101. package/lib/cross-artifact-impact.js +162 -0
  102. package/lib/cross-repo-linkage.js +150 -0
  103. package/lib/design-detector.js +167 -0
  104. package/lib/design-spec.js +348 -0
  105. package/lib/drift-detector.js +212 -0
  106. package/lib/event-reader.js +174 -0
  107. package/lib/events.js +183 -0
  108. package/lib/extensions.js +257 -0
  109. package/lib/have-nots-validator.js +647 -0
  110. package/lib/impact.js +314 -0
  111. package/lib/impeccable-bridge.js +139 -0
  112. package/lib/intent.js +177 -0
  113. package/lib/linkage.js +232 -0
  114. package/lib/meta-linter.js +263 -0
  115. package/lib/multi-repo-detector.js +182 -0
  116. package/lib/otel-exporter.js +308 -0
  117. package/lib/recipes.js +186 -0
  118. package/lib/reverse-sync.js +332 -0
  119. package/lib/review-required.js +224 -0
  120. package/lib/router.js +278 -0
  121. package/lib/runtime-audit.js +455 -0
  122. package/lib/runtime-test.js +309 -0
  123. package/lib/skillui-bridge.js +216 -0
  124. package/lib/state-lock.js +201 -0
  125. package/lib/state.js +142 -0
  126. package/lib/story-validator.js +301 -0
  127. package/lib/suite-state.js +220 -0
  128. package/lib/workflow-parser.js +109 -0
  129. package/lib/workflow-runner.js +221 -0
  130. package/package.json +63 -0
  131. package/references/HAVE-NOTS.md +573 -0
  132. package/references/building/BUILD-ANTIPATTERNS.md +102 -0
  133. package/references/building/BUILD-VERTICAL-SLICES.md +75 -0
  134. package/references/building/BUILD-WAVES.md +61 -0
  135. package/references/building/README.md +17 -0
  136. package/references/design/COLOR.md +122 -0
  137. package/references/design/DESIGN-ANATOMY.md +121 -0
  138. package/references/design/DESIGN-ANTIPATTERNS.md +108 -0
  139. package/references/design/INTERACTION.md +148 -0
  140. package/references/design/MOTION.md +120 -0
  141. package/references/design/RESPONSIVE.md +157 -0
  142. package/references/design/SPATIAL.md +109 -0
  143. package/references/design/TYPOGRAPHY.md +121 -0
  144. package/references/design/UX-WRITING.md +135 -0
  145. package/references/orchestration/MODE-DETECTION.md +74 -0
  146. package/references/orchestration/README.md +18 -0
  147. package/references/orchestration/SCALE-DETECTION.md +81 -0
  148. package/references/planning/ARCH-ANATOMY.md +143 -0
  149. package/references/planning/ARCH-ANTIPATTERNS.md +52 -0
  150. package/references/planning/PRD-ANATOMY.md +117 -0
  151. package/references/planning/PRD-ANTIPATTERNS.md +138 -0
  152. package/references/planning/README.md +16 -0
  153. package/references/planning/ROADMAP-ANATOMY.md +43 -0
  154. package/references/planning/ROADMAP-ANTIPATTERNS.md +94 -0
  155. package/references/planning/STACK-ANATOMY.md +60 -0
  156. package/references/planning/STACK-ANTIPATTERNS.md +95 -0
  157. package/references/shared/GLOSSARY.md +80 -0
  158. package/references/shared/ORCHESTRATORS.md +76 -0
  159. package/references/shared/README.md +14 -0
  160. package/references/shipping/DEPLOY-ANTIPATTERNS.md +64 -0
  161. package/references/shipping/DEPLOY-PATTERNS.md +110 -0
  162. package/references/shipping/HARDEN-ANTIPATTERNS.md +66 -0
  163. package/references/shipping/HARDEN-OWASP-WORKSHEETS.md +89 -0
  164. package/references/shipping/LAUNCH-ANTIPATTERNS.md +68 -0
  165. package/references/shipping/OBSERVE-ANTIPATTERNS.md +62 -0
  166. package/references/shipping/OBSERVE-SLO-EXAMPLES.md +107 -0
  167. package/references/shipping/README.md +18 -0
  168. package/routing/god-add-backlog.yaml +24 -0
  169. package/routing/god-add-tests.yaml +27 -0
  170. package/routing/god-add-todo.yaml +24 -0
  171. package/routing/god-agent-audit.yaml +24 -0
  172. package/routing/god-arch.yaml +46 -0
  173. package/routing/god-archaeology.yaml +28 -0
  174. package/routing/god-audit.yaml +32 -0
  175. package/routing/god-budget.yaml +24 -0
  176. package/routing/god-build-agent.yaml +24 -0
  177. package/routing/god-build.yaml +46 -0
  178. package/routing/god-cache-clear.yaml +24 -0
  179. package/routing/god-check-todos.yaml +24 -0
  180. package/routing/god-context-scan.yaml +24 -0
  181. package/routing/god-context.yaml +44 -0
  182. package/routing/god-cost.yaml +24 -0
  183. package/routing/god-debug.yaml +28 -0
  184. package/routing/god-deploy.yaml +34 -0
  185. package/routing/god-design-impact.yaml +25 -0
  186. package/routing/god-design.yaml +67 -0
  187. package/routing/god-discuss.yaml +27 -0
  188. package/routing/god-docs.yaml +33 -0
  189. package/routing/god-doctor.yaml +27 -0
  190. package/routing/god-explore.yaml +27 -0
  191. package/routing/god-extension-add.yaml +24 -0
  192. package/routing/god-extension-info.yaml +24 -0
  193. package/routing/god-extension-list.yaml +24 -0
  194. package/routing/god-extension-remove.yaml +24 -0
  195. package/routing/god-extract-learnings.yaml +24 -0
  196. package/routing/god-fast.yaml +27 -0
  197. package/routing/god-feature.yaml +34 -0
  198. package/routing/god-graph.yaml +24 -0
  199. package/routing/god-harden.yaml +41 -0
  200. package/routing/god-help.yaml +27 -0
  201. package/routing/god-hotfix.yaml +34 -0
  202. package/routing/god-hygiene.yaml +28 -0
  203. package/routing/god-init.yaml +37 -0
  204. package/routing/god-intel.yaml +24 -0
  205. package/routing/god-launch.yaml +41 -0
  206. package/routing/god-lifecycle.yaml +27 -0
  207. package/routing/god-link.yaml +24 -0
  208. package/routing/god-lint.yaml +24 -0
  209. package/routing/god-list-assumptions.yaml +27 -0
  210. package/routing/god-locate.yaml +24 -0
  211. package/routing/god-logs.yaml +24 -0
  212. package/routing/god-map-codebase.yaml +24 -0
  213. package/routing/god-metrics.yaml +24 -0
  214. package/routing/god-mode.yaml +31 -0
  215. package/routing/god-next.yaml +27 -0
  216. package/routing/god-note.yaml +24 -0
  217. package/routing/god-observe.yaml +34 -0
  218. package/routing/god-org-context.yaml +28 -0
  219. package/routing/god-party.yaml +24 -0
  220. package/routing/god-pause-work.yaml +27 -0
  221. package/routing/god-plant-seed.yaml +24 -0
  222. package/routing/god-postmortem.yaml +34 -0
  223. package/routing/god-pr-branch.yaml +25 -0
  224. package/routing/god-prd.yaml +49 -0
  225. package/routing/god-quick.yaml +28 -0
  226. package/routing/god-reconcile.yaml +48 -0
  227. package/routing/god-reconstruct.yaml +36 -0
  228. package/routing/god-redo.yaml +27 -0
  229. package/routing/god-refactor.yaml +36 -0
  230. package/routing/god-repair.yaml +27 -0
  231. package/routing/god-repo.yaml +35 -0
  232. package/routing/god-restore.yaml +27 -0
  233. package/routing/god-resume-work.yaml +27 -0
  234. package/routing/god-review-changes.yaml +25 -0
  235. package/routing/god-review.yaml +28 -0
  236. package/routing/god-roadmap-check.yaml +39 -0
  237. package/routing/god-roadmap-update.yaml +37 -0
  238. package/routing/god-roadmap.yaml +42 -0
  239. package/routing/god-rollback.yaml +27 -0
  240. package/routing/god-scan.yaml +24 -0
  241. package/routing/god-set-profile.yaml +24 -0
  242. package/routing/god-settings.yaml +24 -0
  243. package/routing/god-skip.yaml +27 -0
  244. package/routing/god-smite.yaml +29 -0
  245. package/routing/god-spike.yaml +35 -0
  246. package/routing/god-sprint.yaml +25 -0
  247. package/routing/god-stack.yaml +41 -0
  248. package/routing/god-standards.yaml +24 -0
  249. package/routing/god-status.yaml +27 -0
  250. package/routing/god-stories.yaml +24 -0
  251. package/routing/god-story-build.yaml +25 -0
  252. package/routing/god-story-close.yaml +25 -0
  253. package/routing/god-story-verify.yaml +25 -0
  254. package/routing/god-story.yaml +24 -0
  255. package/routing/god-suite-init.yaml +24 -0
  256. package/routing/god-suite-patch.yaml +25 -0
  257. package/routing/god-suite-release.yaml +25 -0
  258. package/routing/god-suite-status.yaml +25 -0
  259. package/routing/god-suite-sync.yaml +25 -0
  260. package/routing/god-sync.yaml +33 -0
  261. package/routing/god-tech-debt.yaml +32 -0
  262. package/routing/god-test-extension.yaml +24 -0
  263. package/routing/god-test-runtime.yaml +25 -0
  264. package/routing/god-thread.yaml +24 -0
  265. package/routing/god-trace.yaml +24 -0
  266. package/routing/god-undo.yaml +27 -0
  267. package/routing/god-update-deps.yaml +39 -0
  268. package/routing/god-upgrade.yaml +33 -0
  269. package/routing/god-version.yaml +24 -0
  270. package/routing/god-workstream.yaml +24 -0
  271. package/routing/god.yaml +24 -0
  272. package/routing/recipes/add-feature-defer-current-milestone.yaml +21 -0
  273. package/routing/recipes/add-feature-future-conditional.yaml +21 -0
  274. package/routing/recipes/add-feature-mid-arc-pause.yaml +33 -0
  275. package/routing/recipes/add-feature-next-milestone.yaml +23 -0
  276. package/routing/recipes/add-feature-parallel.yaml +29 -0
  277. package/routing/recipes/add-feature-prd-update.yaml +21 -0
  278. package/routing/recipes/add-feature-small.yaml +24 -0
  279. package/routing/recipes/add-feature-tiny.yaml +24 -0
  280. package/routing/recipes/bluefield-org-aware.yaml +27 -0
  281. package/routing/recipes/broken-install.yaml +22 -0
  282. package/routing/recipes/brownfield-onboarding.yaml +32 -0
  283. package/routing/recipes/bug-no-urgency.yaml +21 -0
  284. package/routing/recipes/capture-idea.yaml +22 -0
  285. package/routing/recipes/capture-todo.yaml +21 -0
  286. package/routing/recipes/clean-pr.yaml +21 -0
  287. package/routing/recipes/code-cleanup.yaml +23 -0
  288. package/routing/recipes/docs-drift.yaml +21 -0
  289. package/routing/recipes/existing-codebase-onboarding.yaml +32 -0
  290. package/routing/recipes/extract-learnings.yaml +22 -0
  291. package/routing/recipes/greenfield-fast.yaml +25 -0
  292. package/routing/recipes/greenfield-manual.yaml +32 -0
  293. package/routing/recipes/greenfield-with-ideation.yaml +29 -0
  294. package/routing/recipes/incident-postmortem.yaml +24 -0
  295. package/routing/recipes/major-framework-upgrade.yaml +23 -0
  296. package/routing/recipes/monthly-deps.yaml +22 -0
  297. package/routing/recipes/multi-repo-suite.yaml +56 -0
  298. package/routing/recipes/parallel-engineers.yaml +26 -0
  299. package/routing/recipes/pause-handoff.yaml +21 -0
  300. package/routing/recipes/production-broken.yaml +26 -0
  301. package/routing/recipes/rerun-tier.yaml +21 -0
  302. package/routing/recipes/returning-after-break.yaml +31 -0
  303. package/routing/recipes/state-drift.yaml +21 -0
  304. package/routing/recipes/undo-last.yaml +21 -0
  305. package/routing/recipes/weekly-health-check.yaml +24 -0
  306. package/routing/recipes/whats-next.yaml +22 -0
  307. package/routing/recipes/where-am-i.yaml +21 -0
  308. package/schema/events.v1.json +63 -0
  309. package/schema/extension-manifest.v1.json +84 -0
  310. package/schema/intent.v1.yaml.json +116 -0
  311. package/schema/recipe.v1.json +120 -0
  312. package/schema/routing.v1.json +163 -0
  313. package/schema/state.v1.json +146 -0
  314. package/schema/workflow.v1.json +96 -0
  315. package/skills/god-add-backlog.md +40 -0
  316. package/skills/god-add-tests.md +53 -0
  317. package/skills/god-add-todo.md +32 -0
  318. package/skills/god-agent-audit.md +87 -0
  319. package/skills/god-arch.md +81 -0
  320. package/skills/god-archaeology.md +48 -0
  321. package/skills/god-audit.md +65 -0
  322. package/skills/god-budget.md +103 -0
  323. package/skills/god-build-agent.md +91 -0
  324. package/skills/god-build.md +90 -0
  325. package/skills/god-cache-clear.md +75 -0
  326. package/skills/god-check-todos.md +42 -0
  327. package/skills/god-context-scan.md +125 -0
  328. package/skills/god-context.md +147 -0
  329. package/skills/god-cost.md +118 -0
  330. package/skills/god-debug.md +30 -0
  331. package/skills/god-deploy.md +76 -0
  332. package/skills/god-design-impact.md +86 -0
  333. package/skills/god-design.md +275 -0
  334. package/skills/god-discuss.md +46 -0
  335. package/skills/god-docs.md +81 -0
  336. package/skills/god-doctor.md +94 -0
  337. package/skills/god-explore.md +50 -0
  338. package/skills/god-export-otel.md +87 -0
  339. package/skills/god-extension-add.md +79 -0
  340. package/skills/god-extension-info.md +75 -0
  341. package/skills/god-extension-list.md +55 -0
  342. package/skills/god-extension-remove.md +66 -0
  343. package/skills/god-extract-learnings.md +60 -0
  344. package/skills/god-fast.md +47 -0
  345. package/skills/god-feature.md +114 -0
  346. package/skills/god-graph.md +56 -0
  347. package/skills/god-harden.md +106 -0
  348. package/skills/god-help.md +66 -0
  349. package/skills/god-hotfix.md +139 -0
  350. package/skills/god-hygiene.md +104 -0
  351. package/skills/god-init.md +161 -0
  352. package/skills/god-intel.md +36 -0
  353. package/skills/god-launch.md +86 -0
  354. package/skills/god-lifecycle.md +119 -0
  355. package/skills/god-link.md +90 -0
  356. package/skills/god-lint.md +128 -0
  357. package/skills/god-list-assumptions.md +56 -0
  358. package/skills/god-locate.md +97 -0
  359. package/skills/god-logs.md +57 -0
  360. package/skills/god-map-codebase.md +45 -0
  361. package/skills/god-metrics.md +51 -0
  362. package/skills/god-mode.md +159 -0
  363. package/skills/god-next.md +257 -0
  364. package/skills/god-note.md +39 -0
  365. package/skills/god-observe.md +76 -0
  366. package/skills/god-org-context.md +81 -0
  367. package/skills/god-party.md +87 -0
  368. package/skills/god-pause-work.md +64 -0
  369. package/skills/god-plant-seed.md +59 -0
  370. package/skills/god-postmortem.md +103 -0
  371. package/skills/god-pr-branch.md +50 -0
  372. package/skills/god-prd.md +90 -0
  373. package/skills/god-quick.md +50 -0
  374. package/skills/god-reconcile.md +90 -0
  375. package/skills/god-reconstruct.md +72 -0
  376. package/skills/god-redo.md +73 -0
  377. package/skills/god-refactor.md +137 -0
  378. package/skills/god-repair.md +82 -0
  379. package/skills/god-repo.md +49 -0
  380. package/skills/god-restore.md +91 -0
  381. package/skills/god-resume-work.md +42 -0
  382. package/skills/god-review-changes.md +93 -0
  383. package/skills/god-review.md +52 -0
  384. package/skills/god-roadmap-check.md +66 -0
  385. package/skills/god-roadmap-update.md +64 -0
  386. package/skills/god-roadmap.md +77 -0
  387. package/skills/god-rollback.md +88 -0
  388. package/skills/god-scan.md +106 -0
  389. package/skills/god-set-profile.md +58 -0
  390. package/skills/god-settings.md +44 -0
  391. package/skills/god-skip.md +78 -0
  392. package/skills/god-smite.md +86 -0
  393. package/skills/god-spike.md +120 -0
  394. package/skills/god-sprint.md +77 -0
  395. package/skills/god-stack.md +74 -0
  396. package/skills/god-standards.md +62 -0
  397. package/skills/god-status.md +99 -0
  398. package/skills/god-stories.md +60 -0
  399. package/skills/god-story-build.md +76 -0
  400. package/skills/god-story-close.md +82 -0
  401. package/skills/god-story-verify.md +71 -0
  402. package/skills/god-story.md +55 -0
  403. package/skills/god-suite-init.md +75 -0
  404. package/skills/god-suite-patch.md +64 -0
  405. package/skills/god-suite-release.md +58 -0
  406. package/skills/god-suite-status.md +63 -0
  407. package/skills/god-suite-sync.md +49 -0
  408. package/skills/god-sync.md +102 -0
  409. package/skills/god-tech-debt.md +56 -0
  410. package/skills/god-test-extension.md +87 -0
  411. package/skills/god-test-runtime.md +144 -0
  412. package/skills/god-thread.md +39 -0
  413. package/skills/god-trace.md +50 -0
  414. package/skills/god-undo.md +68 -0
  415. package/skills/god-update-deps.md +134 -0
  416. package/skills/god-upgrade.md +139 -0
  417. package/skills/god-version.md +37 -0
  418. package/skills/god-workstream.md +61 -0
  419. package/skills/god.md +207 -0
  420. package/templates/ARCH.md +99 -0
  421. package/templates/DEPS-AUDIT.md +66 -0
  422. package/templates/DESIGN.md +71 -0
  423. package/templates/DOCS-UPDATE-LOG.md +64 -0
  424. package/templates/HARDEN-FINDINGS.md +69 -0
  425. package/templates/MIGRATION.md +86 -0
  426. package/templates/POSTMORTEM.md +88 -0
  427. package/templates/PRD.md +80 -0
  428. package/templates/PROGRESS.md +49 -0
  429. package/templates/ROADMAP.md +47 -0
  430. package/templates/SPIKE.md +72 -0
  431. package/templates/STACK-DECISION.md +61 -0
  432. package/workflows/audit-only.yaml +22 -0
  433. package/workflows/bluefield-arc.yaml +87 -0
  434. package/workflows/brownfield-arc.yaml +44 -0
  435. package/workflows/deps-audit.yaml +56 -0
  436. package/workflows/docs-arc.yaml +22 -0
  437. package/workflows/feature-arc.yaml +59 -0
  438. package/workflows/full-arc.yaml +84 -0
  439. package/workflows/hotfix-arc.yaml +59 -0
  440. package/workflows/hygiene.yaml +43 -0
  441. package/workflows/migration-arc.yaml +73 -0
  442. package/workflows/postmortem.yaml +31 -0
  443. package/workflows/refactor-arc.yaml +59 -0
  444. package/workflows/spike.yaml +23 -0
@@ -0,0 +1,75 @@
1
+ # Vertical Slices
2
+
3
+ > A slice delivers ONE user-visible behavior end-to-end. Not "set up the
4
+ > database." That's horizontal.
5
+
6
+ ## Vertical vs horizontal
7
+
8
+ ### Horizontal (rejected)
9
+ - "Set up the database"
10
+ - "Build the API layer"
11
+ - "Create the UI components"
12
+
13
+ User can't do anything until ALL three ship. High WIP, late integration.
14
+
15
+ ### Vertical (accepted)
16
+ - "User can sign up with email and password"
17
+ - "User can connect their Stripe account"
18
+ - "User sees current MRR on the dashboard"
19
+
20
+ Each one ships independently. User sees value progressively.
21
+
22
+ ## Anatomy of a slice
23
+
24
+ ```
25
+ Slice 1.3: User can connect Stripe account
26
+
27
+ Files:
28
+ - src/auth/stripe-oauth-init.ts
29
+ - src/auth/stripe-oauth-init.test.ts
30
+ - src/auth/stripe-oauth-callback.ts
31
+ - src/auth/stripe-oauth-callback.test.ts
32
+ - src/db/migrations/003_stripe_accounts.sql
33
+ - src/components/StripeConnectButton.tsx
34
+ - src/components/StripeConnectButton.test.tsx
35
+
36
+ Tests first (in order, RED -> GREEN -> REFACTOR):
37
+ 1. test: oauth_init_returns_authorize_url
38
+ 2. test: oauth_init_includes_csrf_state
39
+ 3. test: oauth_callback_validates_state
40
+ 4. test: oauth_callback_stores_encrypted_token
41
+ 5. test: oauth_callback_redirects_to_dashboard
42
+
43
+ Implementation steps:
44
+ 1. RED: write all 5 tests above; run; all fail
45
+ 2. GREEN: implement init -> callback flow until tests pass
46
+ 3. REFACTOR: extract common state validation; clean up
47
+
48
+ Verification:
49
+ - All 5 tests green
50
+ - Manual: complete OAuth flow in dev environment
51
+ - Token visible in stripe_accounts table (encrypted)
52
+ - User redirected to dashboard
53
+
54
+ Dependencies: Slice 1.1 (signup), Slice 1.2 (login)
55
+ Wave: 2
56
+ ```
57
+
58
+ ## Common mistakes
59
+
60
+ ### Slice too big
61
+ "User can use the entire dashboard" is not a slice. It's a milestone.
62
+
63
+ Break it: "User can see MRR card", "User can see growth chart", etc.
64
+
65
+ ### Slice not user-visible
66
+ "Refactor the auth middleware" is not a slice (no user behavior changes).
67
+ That's a refactor; route to /god-refactor.
68
+
69
+ ### Slice has hidden dependencies
70
+ "User can export CSV" depends on data-fetch slice, which depends on auth
71
+ slice. Make dependencies explicit.
72
+
73
+ ### Slice spans multiple commits
74
+ A slice is one atomic commit. If it takes 5 commits to land safely, it's
75
+ too big.
@@ -0,0 +1,61 @@
1
+ # Build Waves
2
+
3
+ > Independent slices run in parallel within a wave. Waves run sequentially.
4
+ > Maximizes throughput; minimizes context rot.
5
+
6
+ ## Detection
7
+
8
+ Two slices can be in the same wave if:
9
+ - They modify different files (no merge conflicts)
10
+ - They don't depend on each other's output
11
+ - Neither needs the other's data
12
+
13
+ ## Worked example
14
+
15
+ Milestone: User can see MRR breakdown.
16
+
17
+ ### Slice plan
18
+
19
+ | Slice | Files | Depends on |
20
+ |-------|-------|------------|
21
+ | 1.1 Signup | src/auth/signup.ts | none |
22
+ | 1.2 Login | src/auth/login.ts | 1.1 |
23
+ | 1.3 Stripe OAuth | src/auth/stripe-*.ts, src/db/stripe_accounts | 1.1, 1.2 |
24
+ | 1.4 Stripe sync worker | src/worker/stripe-sync.ts | 1.3 |
25
+ | 1.5 MRR query API | src/api/mrr.ts | 1.3, 1.4 |
26
+ | 1.6 Dashboard UI | src/components/Dashboard.tsx | 1.5 |
27
+
28
+ ### Wave grouping
29
+
30
+ - Wave 1: Slice 1.1 (no dependencies)
31
+ - Wave 2: Slice 1.2 (depends on 1.1)
32
+ - Wave 3: Slice 1.3 (depends on 1.1, 1.2)
33
+ - Wave 4: Slice 1.4 + Slice 1.5 (parallel; 1.4 worker writes, 1.5 API reads, but different files)
34
+ - Wave 5: Slice 1.6 (depends on 1.5)
35
+
36
+ In Wave 4, two agents work in parallel on different files. Each gets fresh
37
+ context. Each enforces TDD. Each goes through two-stage review independently.
38
+
39
+ ## Anti-patterns
40
+
41
+ ### Wave too wide
42
+ Putting 10 parallel slices in one wave. Even if technically independent,
43
+ review and integration become coordination heavy.
44
+
45
+ **Rule of thumb**: max 3-4 parallel slices per wave.
46
+
47
+ ### Hidden cross-wave dependency
48
+ Slice 4.1 thinks it's independent but actually reads a config file that
49
+ Slice 4.2 modifies. Race condition.
50
+
51
+ **Fix**: spell out READ dependencies, not just WRITE dependencies.
52
+
53
+ ### Sequential when parallel-safe
54
+ Putting Slice X and Slice Y in different waves when they're actually
55
+ independent.
56
+
57
+ **Cost**: wasted wall-clock time. Each agent runs serially when they could
58
+ run in parallel.
59
+
60
+ **Fix**: at planning time, look hard for shared file modifications. If none,
61
+ parallelize.
@@ -0,0 +1,17 @@
1
+ # Building References
2
+
3
+ Per-tier reference content for Tier 2 (Building: Repo, Build).
4
+
5
+ ## Files
6
+
7
+ - (placeholder)
8
+
9
+ ## Planned content
10
+
11
+ - TDD violation examples with how-to-fix
12
+ - Two-stage review checklists with worked findings
13
+ - Vertical slice anatomy with anti-examples (horizontal "set up the database")
14
+ - Atomic commit examples
15
+ - Wave parallelism dependency analysis worked examples
16
+
17
+ See [HAVE-NOTS.md](../HAVE-NOTS.md) for the canonical failure-mode catalog.
@@ -0,0 +1,122 @@
1
+ # Color
2
+
3
+ > Godpowers' baseline guidance for color. Shallower than
4
+ > [Impeccable's color-and-contrast reference](https://github.com/pbakaus/impeccable/blob/main/skill/reference/color-and-contrast.md);
5
+ > use this when Impeccable isn't installed.
6
+
7
+ ## Use OKLCH
8
+
9
+ Modern displays support wide gamuts. OKLCH gives you:
10
+
11
+ - Perceptually uniform lightness (a 60% L color reads as the same
12
+ brightness regardless of hue)
13
+ - Predictable contrast adjustments (drop L by 10 to darken, period)
14
+ - Wide-gamut accuracy for modern displays
15
+ - A graceful fallback through CSS Color 4
16
+
17
+ ```yaml
18
+ colors:
19
+ ink: "oklch(20% 0.01 250)" # near-black, slight blue cast
20
+ paper: "oklch(98% 0.005 80)" # warm white
21
+ accent: "oklch(60% 0.18 250)" # blue accent
22
+ ```
23
+
24
+ If your linter requires hex (e.g., Google Stitch): use hex for tokens,
25
+ add OKLCH equivalents in CSS variables, document both.
26
+
27
+ ## The 5-color rule
28
+
29
+ A small palette ships faster and looks more confident than a large one.
30
+ Aim for:
31
+
32
+ 1. **ink** - body text and headlines
33
+ 2. **paper** - canvas / background
34
+ 3. **rule** - borders, dividers, hairlines
35
+ 4. **accent** - the one chromatic color used for action and emphasis
36
+ 5. **muted** - secondary text, disabled states
37
+
38
+ Add growth/shrink (positive/negative) only if the product has
39
+ directional data (charts, dashboards). Add success/warning/danger only
40
+ if the product has stateful UI (forms, alerts). Otherwise stop at 5.
41
+
42
+ ## Anti-patterns
43
+
44
+ - **Purple-to-blue gradients on CTAs.** The default of every AI-built
45
+ SaaS in 2024-2025. Tells.
46
+ - **Pure black (#000) on pure white (#fff).** Too much contrast at
47
+ large sizes; eye-tiring on long reads. Use near-black (10-15% L).
48
+ - **Gray text on colored backgrounds.** Gray on cream looks like CSS
49
+ rendering broke. Use a colored variant matched to the background.
50
+ - **Rainbow palettes.** Six chromatic colors competing. Pick one.
51
+ - **Bright Material-style red for errors.** Reserved for genuine
52
+ destructive actions, not validation messages.
53
+
54
+ ## Contrast (WCAG)
55
+
56
+ | Ratio | Level | Use |
57
+ |---|---|---|
58
+ | 3:1 | AA Large (>=18pt or 14pt bold) | Display headlines |
59
+ | 4.5:1 | AA Normal | Body text, labels, links |
60
+ | 7:1 | AAA Normal | High-bar accessibility |
61
+ | 4.5:1 | AA non-text | Icons, focus rings, borders |
62
+
63
+ The runtime audit (Phase 11) checks 4.5:1 on text-on-background
64
+ components. Below that, BLOCK.
65
+
66
+ ### Common pairings that work
67
+
68
+ | Background | Text | Ratio |
69
+ |---|---|---|
70
+ | `#1a1c1e` (near-black) | `#f7f8f8` (paper) | 18.4 (AAA) |
71
+ | `#fafafa` (paper) | `#0f1011` (deep) | 19.7 (AAA) |
72
+ | `#f4ebdc` (cream) | `#1f1a15` (ink) | 13.5 (AAA) |
73
+
74
+ ### Common pairings that fail
75
+
76
+ | Background | Text | Ratio | Status |
77
+ |---|---|---|---|
78
+ | `#fda4af` (pink) | `#ffffff` | 1.8 | Fail |
79
+ | `#a3a3a3` (gray) | `#ffffff` | 2.6 | Fail |
80
+ | `#1f1a15` (dark) | `#5b4f44` (taupe) | 5.9 | Pass AA |
81
+
82
+ ## Dark mode
83
+
84
+ If you support dark mode, design it as its own surface, not an
85
+ inversion. Tokens needed:
86
+
87
+ ```yaml
88
+ colors:
89
+ canvas-light: "oklch(98% 0.005 80)"
90
+ canvas-dark: "oklch(15% 0.01 250)"
91
+ ink-light: "oklch(20% 0.01 250)" # on light canvas
92
+ ink-dark: "oklch(95% 0.01 250)" # on dark canvas
93
+ ```
94
+
95
+ Mapping rule: dark mode lowers contrast slightly (16:1 -> 12:1) to
96
+ reduce eye strain. Don't simply invert; that produces glaring
97
+ reverse-contrast surfaces.
98
+
99
+ ## Tinted neutrals
100
+
101
+ Pure grays look industrial and cold. Tint your neutrals toward the
102
+ accent's hue family:
103
+
104
+ ```yaml
105
+ colors:
106
+ # accent is blue (250 hue); tint neutrals toward 250
107
+ ink: "oklch(20% 0.01 250)" # subtly blue-cast
108
+ rule: "oklch(88% 0.005 250)" # subtly blue-cast border
109
+ ```
110
+
111
+ Even 0.005 chroma at the same hue makes neutrals feel intentional.
112
+
113
+ ## Have-Nots
114
+
115
+ You fail color if:
116
+
117
+ - Pure #000000 or #ffffff in regular text use
118
+ - Purple-blue gradient on primary CTA
119
+ - Gray text on colored background
120
+ - More than 5 base colors before semantic additions
121
+ - WCAG AA fail on any text-on-background component
122
+ - More than 3 chromatic colors in the palette
@@ -0,0 +1,121 @@
1
+ # DESIGN.md Anatomy
2
+
3
+ > What a good DESIGN.md looks like. Format follows the
4
+ > [Google Labs design.md spec](https://github.com/google-labs-code/design.md);
5
+ > tone and discipline follow the
6
+ > [Impeccable skill](https://github.com/pbakaus/impeccable).
7
+
8
+ ## Structure
9
+
10
+ A DESIGN.md has two layers:
11
+
12
+ 1. **YAML frontmatter** (machine-readable design tokens, delimited by `---`)
13
+ 2. **Markdown body** (human-readable rationale organized into `##` sections)
14
+
15
+ The tokens are normative. The prose explains how to apply them.
16
+
17
+ ## Required frontmatter fields
18
+
19
+ | Field | Required | Format |
20
+ |---|---|---|
21
+ | `name` | yes | string (e.g., "Heritage", "MRR Tracker") |
22
+ | `description` | yes | one-line summary of the visual register |
23
+ | `colors` | yes if visual surface | map of token-name -> color value |
24
+ | `typography` | yes if visual surface | map of style-name -> typography object |
25
+ | `rounded` | optional | map of scale-level -> dimension |
26
+ | `spacing` | yes if visual surface | map of scale-level -> dimension |
27
+ | `components` | optional | map of component-name -> sub-token map |
28
+
29
+ ## Section order
30
+
31
+ Use `##` headings. Sections can be omitted; those present must appear in this order:
32
+
33
+ | # | Section | Aliases |
34
+ |---|---|---|
35
+ | 1 | Overview | Brand & Style |
36
+ | 2 | Colors | |
37
+ | 3 | Typography | |
38
+ | 4 | Layout | Layout & Spacing |
39
+ | 5 | Elevation & Depth | Elevation |
40
+ | 6 | Shapes | |
41
+ | 7 | Components | |
42
+ | 8 | Do's and Don'ts | |
43
+
44
+ Duplicate `##` headings are an error.
45
+
46
+ ## Token references
47
+
48
+ Components can reference tokens via curly-brace syntax: `{colors.primary}`,
49
+ `{rounded.sm}`. Token references must resolve to a defined token.
50
+
51
+ ```yaml
52
+ components:
53
+ button-primary:
54
+ backgroundColor: "{colors.tertiary}"
55
+ textColor: "{colors.on-tertiary}"
56
+ rounded: "{rounded.sm}"
57
+ padding: 12px
58
+ ```
59
+
60
+ ## What "good" looks like
61
+
62
+ A good DESIGN.md:
63
+
64
+ - [DECISION] Names a register: brand or product. Brand surfaces (marketing,
65
+ landing) are ornamental. Product surfaces (app shell, dashboards) serve
66
+ the data.
67
+ - [DECISION] Uses OKLCH for colors when wide-gamut accuracy matters.
68
+ Falls back to hex sRGB for compatibility with linters that don't yet
69
+ parse OKLCH.
70
+ - [DECISION] Sets typography for one or two type families maximum. The
71
+ display family may differ from the body family if the register calls
72
+ for it.
73
+ - [DECISION] Names every component used in the UI. Variants (hover,
74
+ active, disabled) are separate component entries with related keys.
75
+ - [DECISION] Includes a Do's and Don'ts section with explicit
76
+ anti-patterns: what NOT to do for this design.
77
+ - [DECISION] Stays under 300 lines. Heavy detail (component variations,
78
+ edge cases) lives in code documentation, not DESIGN.md.
79
+
80
+ ## What "bad" looks like
81
+
82
+ See [DESIGN-ANTIPATTERNS.md](./DESIGN-ANTIPATTERNS.md).
83
+
84
+ ## Validation
85
+
86
+ Every DESIGN.md should pass:
87
+
88
+ - `npx @google/design.md lint DESIGN.md` (Google Labs spec linter)
89
+ - `npx impeccable detect DESIGN.md` (Impeccable anti-patterns)
90
+
91
+ Godpowers' god-design-reviewer agent runs both as part of the two-stage
92
+ review gate.
93
+
94
+ ## Worked example
95
+
96
+ See `examples/saas-mrr-tracker/DESIGN.md` for a complete, lint-clean example.
97
+
98
+ ## Domain-specific references
99
+
100
+ These shorter, focused references cover the 7 design domains at
101
+ shallower depth than Impeccable's full skill set. Used by god-designer
102
+ when Impeccable is not installed; useful as a baseline regardless:
103
+
104
+ - [TYPOGRAPHY.md](./TYPOGRAPHY.md) - type families, scales, line-height,
105
+ tabular numerals
106
+ - [COLOR.md](./COLOR.md) - OKLCH, 5-color rule, WCAG contrast,
107
+ dark mode, tinted neutrals
108
+ - [SPATIAL.md](./SPATIAL.md) - spacing scales, grids, touch targets,
109
+ vertical rhythm
110
+ - [MOTION.md](./MOTION.md) - durations, easings, prefers-reduced-motion,
111
+ staggering
112
+ - [INTERACTION.md](./INTERACTION.md) - forms, focus states, buttons,
113
+ loading patterns, empty states
114
+ - [RESPONSIVE.md](./RESPONSIVE.md) - breakpoints, mobile-first, touch
115
+ targets, container queries
116
+ - [UX-WRITING.md](./UX-WRITING.md) - button labels, error messages,
117
+ empty states, tone calibration
118
+
119
+ For deeper guidance on any domain, install
120
+ [Impeccable](https://github.com/pbakaus/impeccable) and use its 7
121
+ domain-specific skills.
@@ -0,0 +1,108 @@
1
+ # DESIGN.md Antipatterns
2
+
3
+ > Common ways DESIGN.md fails. Each has a sample, why it fails, and the fix.
4
+
5
+ ## 1. The Tellable Token Set
6
+
7
+ **Sample**: `colors.primary: "#4f46e5"` (purple-blue), `colors.gradient:
8
+ "linear-gradient(...)"`, every heading uses Inter, every CTA uses an
9
+ indigo-to-purple gradient.
10
+
11
+ **Why it fails**: Every AI-generated SaaS in 2024-2025 uses this palette.
12
+ The tokens betray that the design system was generated, not chosen.
13
+
14
+ **Fix**: Pick a register first (brand vs product) and a reference (a real
15
+ brand whose voice resembles yours). Avoid the 5 tells: Inter everywhere,
16
+ purple-blue gradients, cards-in-cards, gray text on colored backgrounds,
17
+ rounded-square icon tiles above every heading.
18
+
19
+ ## 2. The Reference That Doesn't Resolve
20
+
21
+ **Sample**:
22
+ ```yaml
23
+ components:
24
+ button-primary:
25
+ backgroundColor: "{colors.tertiary}"
26
+ textColor: "{colors.on-tertiary}"
27
+ ```
28
+ But `colors.tertiary` is not defined in the colors block.
29
+
30
+ **Why it fails**: Token references break silently. The UI renders with
31
+ fallback colors that don't match the design intent.
32
+
33
+ **Fix**: Run the Google Labs linter; it catches unresolved references
34
+ mechanically. The god-design-reviewer agent gates on this.
35
+
36
+ ## 3. The Theme Without a Reason
37
+
38
+ **Sample**: DESIGN.md exists but has no Overview section explaining the
39
+ visual register or rationale.
40
+
41
+ **Why it fails**: Future agents (and team members) don't know what the
42
+ design is meant to feel like. The first refactor or new component drifts
43
+ toward whatever the current contributor's defaults are.
44
+
45
+ **Fix**: Overview section answers two questions: "what register is this?"
46
+ (brand vs product) and "what does it feel like?" (one-paragraph mood
47
+ description grounded in named references).
48
+
49
+ ## 4. The Component Sprawl
50
+
51
+ **Sample**: `components` block has 50 entries: every shade of every
52
+ button variant, every modal type, every input state.
53
+
54
+ **Why it fails**: 50 components means 50 places drift can hide. Each is
55
+ usually slightly inconsistent. The system becomes its own anti-system.
56
+
57
+ **Fix**: Name only the canonical components. Variants (hover, active,
58
+ disabled) are systematic, not bespoke. If you have 50 components, you
59
+ have a redundancy problem.
60
+
61
+ ## 5. The Contrast Failure
62
+
63
+ **Sample**: `colors.cta-bg: "#fda4af"` (light pink), `colors.cta-text:
64
+ "#ffffff"` (white). Contrast ratio: 1.8:1. WCAG AA fails.
65
+
66
+ **Why it fails**: The button is unreadable for users with low vision,
67
+ in bright sunlight, or on calibrated-low-contrast displays. Often
68
+ unreadable for everyone.
69
+
70
+ **Fix**: Linter computes WCAG contrast ratio for every text-on-background
71
+ component pair. Anything below 4.5:1 (AA) is BLOCKED by the design
72
+ reviewer. AAA requires 7:1.
73
+
74
+ ## 6. The Stale Tokens
75
+
76
+ **Sample**: DESIGN.md says `colors.primary: "#1A1C1E"`. The actual app
77
+ uses `#000000` because someone "fixed it" in the CSS without updating
78
+ the spec.
79
+
80
+ **Why it fails**: DESIGN.md becomes aspirational. Code is the source of
81
+ truth; nobody trusts the spec.
82
+
83
+ **Fix**: Reverse-sync (Phase 6) detects drift between DESIGN.md tokens
84
+ and actual usage in CSS/styled-components. Drift findings flow into
85
+ REVIEW-REQUIRED.md.
86
+
87
+ ## 7. The Missing Anti-References
88
+
89
+ **Sample**: PRODUCT.md says "we want a calm, editorial feel." DESIGN.md
90
+ implements the colors and typography but doesn't list what to avoid.
91
+
92
+ **Why it fails**: AI agents and developers look for cues. Without explicit
93
+ anti-references, they import patterns from popular component libraries
94
+ (shadcn defaults, Material Design) that may not match the intended feel.
95
+
96
+ **Fix**: Do's and Don'ts section names specific patterns to avoid:
97
+ "don't use bright primary blue (would feel category-AI)", "don't nest
98
+ cards inside cards", "don't use gradients."
99
+
100
+ ## 8. The Token Without a Use
101
+
102
+ **Sample**: 30 colors defined; only 8 referenced in components.
103
+
104
+ **Why it fails**: Unused tokens are dead weight. They suggest options
105
+ that aren't actually offered. Future contributors apply them
106
+ incorrectly because they exist.
107
+
108
+ **Fix**: Linter reports unused tokens. Remove or use them.
@@ -0,0 +1,148 @@
1
+ # Interaction Design
2
+
3
+ > Godpowers' baseline guidance for forms, focus, and feedback.
4
+ > Shallower than
5
+ > [Impeccable's interaction-design reference](https://github.com/pbakaus/impeccable/blob/main/skill/reference/interaction-design.md).
6
+
7
+ ## Focus states are not optional
8
+
9
+ Every interactive element gets a visible focus state:
10
+
11
+ ```css
12
+ :focus-visible {
13
+ outline: 2px solid var(--colors-accent);
14
+ outline-offset: 2px;
15
+ }
16
+ ```
17
+
18
+ Use `:focus-visible` (not `:focus`) so mouse clicks don't show focus
19
+ rings while keyboard navigation does.
20
+
21
+ The ring color must pass 3:1 contrast against both surface AND its
22
+ adjacent surface. Yellow rings on green surfaces fail that.
23
+
24
+ ## Forms
25
+
26
+ ### Labels above, errors below
27
+
28
+ ```
29
+ [Email]
30
+ +----------------+
31
+ | user@example.. |
32
+ +----------------+
33
+ Please use a valid work email.
34
+ ```
35
+
36
+ Inline labels (placeholder-only) lose context once typing starts. Use
37
+ real labels.
38
+
39
+ ### Error messaging
40
+
41
+ Three rules:
42
+
43
+ 1. **Specific.** "Invalid email" is bad. "Email must include @ and a
44
+ domain" is better. "alice@example is missing the .com" is best.
45
+ 2. **Forward-looking.** Tell the user what to do, not what they did
46
+ wrong. "Please use a work email address" beats "Personal addresses
47
+ are not allowed."
48
+ 3. **Inline, not modal.** Modal alerts for form errors are aggressive.
49
+ Place the message under the field that errored.
50
+
51
+ ### When to validate
52
+
53
+ - **On submit**: always
54
+ - **On blur**: yes for required fields and format-specific (email,
55
+ date, phone)
56
+ - **On input**: only for soft hints (password strength, character count,
57
+ username availability). Not for "this is wrong" messages until blur.
58
+
59
+ ### Required fields
60
+
61
+ Mark with a visible indicator (asterisk + colored to accent) AND
62
+ include a short note: "Fields marked with * are required." Don't rely
63
+ on color alone.
64
+
65
+ ## Buttons
66
+
67
+ ### Hierarchy
68
+
69
+ | Type | When | Visual |
70
+ |---|---|---|
71
+ | Primary | The one main action of the screen | Filled accent color |
72
+ | Secondary | Important but not primary | Outlined or tinted |
73
+ | Tertiary / link | Low-priority or destructive | Text-style, possibly underlined |
74
+ | Destructive | Delete, cancel-with-loss | Filled red OR confirmation modal |
75
+
76
+ One primary per screen. More than one creates ambiguity.
77
+
78
+ ### Anti-patterns
79
+
80
+ - **All buttons the same weight.** No visual hierarchy.
81
+ - **Disabled buttons with no explanation.** If a button is disabled,
82
+ tell the user why (in a tooltip or below).
83
+ - **Icon-only buttons without aria-label.** Screen readers say nothing.
84
+ - **Two-line button labels.** Wrap is fine, but if your CTA reads on
85
+ multiple lines you've buried the action.
86
+
87
+ ## Loading and feedback
88
+
89
+ | Action | Feedback |
90
+ |---|---|
91
+ | < 200ms | Nothing |
92
+ | 200ms-1s | Spinner inside the button |
93
+ | 1-3s | Skeleton in the affected region |
94
+ | 3-10s | Progress bar with percentage if known |
95
+ | > 10s | Background-task pattern: dismissible toast, "we'll notify you" |
96
+
97
+ Always disable the trigger while the action is in flight. Re-enable on
98
+ success / failure with appropriate state.
99
+
100
+ ## Confirmations
101
+
102
+ Three patterns:
103
+
104
+ 1. **Inline confirmation** (default for reversible actions): "Item
105
+ deleted. Undo." with a 5-10s window.
106
+ 2. **Modal confirmation** (destructive, irreversible): "Delete account?
107
+ This cannot be undone." with explicit Yes/No.
108
+ 3. **Type to confirm** (catastrophic): "Type 'delete-production' to
109
+ confirm." for destructive cluster-wide operations.
110
+
111
+ Modal everything is interruption theater.
112
+
113
+ ## Empty states
114
+
115
+ A blank screen is a missed opportunity. Every empty state should:
116
+
117
+ 1. Explain what would normally be here
118
+ 2. Show how to populate it (the action that creates the first item)
119
+ 3. Optionally: a link to docs or a sample dataset
120
+
121
+ Bad: "No data."
122
+ Good: "No invoices yet. Connect Stripe to start tracking MRR."
123
+
124
+ ## Hover states
125
+
126
+ For desktop:
127
+
128
+ - Color shift: 10-15% lighter or darker
129
+ - Cursor change for clickables (`cursor: pointer` only on actual
130
+ clickables)
131
+ - Underline on text links (always; underline-on-hover only is bad
132
+ practice)
133
+
134
+ For touch devices: hover is unavailable; design for tap-only.
135
+
136
+ ## Have-Nots
137
+
138
+ You fail interaction if:
139
+
140
+ - No `:focus-visible` outline
141
+ - Focus ring contrast < 3:1 against both surfaces
142
+ - Required fields marked with color alone
143
+ - Error messages in modals (instead of inline)
144
+ - Disabled buttons with no explanation
145
+ - Icon-only buttons without aria-label
146
+ - Empty states with no path forward
147
+ - Clicks on non-buttons styled with `cursor: pointer`
148
+ - Trigger not disabled during async action