sinapse-ai 9.4.0 → 9.5.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 (266) hide show
  1. package/.claude/CLAUDE.md +10 -4
  2. package/.claude/hooks/enforce-architecture-first.py +197 -197
  3. package/.claude/hooks/enforce-git-push-authority.sh +25 -4
  4. package/.claude/hooks/mind-clone-governance.py +193 -193
  5. package/.claude/hooks/read-protection.py +152 -152
  6. package/.claude/hooks/sql-governance.py +183 -183
  7. package/.claude/hooks/verify-packages.cjs +83 -0
  8. package/.claude/hooks/write-path-validation.py +195 -195
  9. package/.claude/rules/hook-governance.md +1 -0
  10. package/.claude/rules/mandatory-delegation.md +24 -0
  11. package/.claude/rules/project-intelligence.md +63 -0
  12. package/.claude/rules/response-format.md +4 -0
  13. package/.claude/rules/safe-collaboration.md +4 -2
  14. package/.claude/rules/security-data-protection.md +18 -0
  15. package/.claude/rules/squad-awareness.md +93 -67
  16. package/.claude/rules/token-economy.md +148 -0
  17. package/.codex/agents/analyst.md +90 -0
  18. package/.codex/agents/architect.md +78 -0
  19. package/.codex/agents/data-engineer.md +38 -0
  20. package/.codex/agents/developer.md +97 -0
  21. package/.codex/agents/devops.md +121 -0
  22. package/.codex/agents/product-lead.md +27 -0
  23. package/.codex/agents/project-lead.md +28 -0
  24. package/.codex/agents/quality-gate.md +89 -0
  25. package/.codex/agents/sprint-lead.md +28 -0
  26. package/.codex/agents/squad-creator.md +58 -0
  27. package/.codex/agents/ux-design-expert.md +28 -0
  28. package/.sinapse-ai/core/code-intel/registry-syncer.js +56 -3
  29. package/.sinapse-ai/core/doctor/checks/agent-memory.js +5 -1
  30. package/.sinapse-ai/core/doctor/checks/claude-md.js +4 -1
  31. package/.sinapse-ai/core/doctor/checks/code-intel.js +5 -1
  32. package/.sinapse-ai/core/doctor/checks/commands-count.js +4 -1
  33. package/.sinapse-ai/core/doctor/checks/constitution-consistency.js +4 -1
  34. package/.sinapse-ai/core/doctor/checks/core-config.js +4 -1
  35. package/.sinapse-ai/core/doctor/checks/entity-registry.js +6 -1
  36. package/.sinapse-ai/core/doctor/checks/git-hooks.js +5 -1
  37. package/.sinapse-ai/core/doctor/checks/graph-dashboard.js +4 -1
  38. package/.sinapse-ai/core/doctor/checks/hooks-claude-count.js +5 -1
  39. package/.sinapse-ai/core/doctor/checks/ide-sync.js +4 -1
  40. package/.sinapse-ai/core/doctor/checks/node-version.js +4 -1
  41. package/.sinapse-ai/core/doctor/checks/npm-packages.js +4 -1
  42. package/.sinapse-ai/core/doctor/checks/rules-files.js +4 -1
  43. package/.sinapse-ai/core/doctor/checks/settings-json.js +4 -1
  44. package/.sinapse-ai/core/doctor/checks/skills-count.js +4 -1
  45. package/.sinapse-ai/core/doctor/index.js +157 -50
  46. package/.sinapse-ai/core/ids/registry-updater.js +6 -1
  47. package/.sinapse-ai/core/logger/index.js +319 -0
  48. package/.sinapse-ai/core/orchestration/terminal-spawner.js +2 -2
  49. package/.sinapse-ai/core/telemetry/index.js +247 -0
  50. package/.sinapse-ai/data/entity-registry.yaml +1384 -944
  51. package/.sinapse-ai/development/agents/architect.md +5 -0
  52. package/.sinapse-ai/development/agents/data-engineer.md +38 -0
  53. package/.sinapse-ai/development/agents/developer.md +28 -0
  54. package/.sinapse-ai/development/agents/devops.md +4 -0
  55. package/.sinapse-ai/development/agents/product-lead.md +27 -0
  56. package/.sinapse-ai/development/agents/project-lead.md +28 -0
  57. package/.sinapse-ai/development/agents/quality-gate.md +4 -0
  58. package/.sinapse-ai/development/agents/sprint-lead/MEMORY.md +8 -0
  59. package/.sinapse-ai/development/agents/sprint-lead.md +28 -0
  60. package/.sinapse-ai/development/agents/squad-creator.md +58 -0
  61. package/.sinapse-ai/development/agents/ux-design-expert.md +28 -0
  62. package/.sinapse-ai/development/knowledge-base/agent-communication-protocol.md +127 -0
  63. package/.sinapse-ai/development/knowledge-base/database-scaling-patterns.md +374 -0
  64. package/.sinapse-ai/development/knowledge-base/environment-deployment-patterns.md +353 -0
  65. package/.sinapse-ai/development/knowledge-base/gotchas-patterns.md +224 -0
  66. package/.sinapse-ai/development/knowledge-base/infrastructure-decision-framework.md +221 -0
  67. package/.sinapse-ai/development/knowledge-base/security-pre-deploy-checklist.md +410 -0
  68. package/.sinapse-ai/development/knowledge-base/software-architecture-patterns.md +299 -0
  69. package/.sinapse-ai/development/knowledge-base/token-economy-guide.md +198 -0
  70. package/.sinapse-ai/development/scripts/populate-entity-registry.js +5 -1
  71. package/.sinapse-ai/development/skills/captcha-handler.md +82 -0
  72. package/.sinapse-ai/development/skills/chrome-brain.md +81 -0
  73. package/.sinapse-ai/development/skills/deploy-readiness.md +93 -0
  74. package/.sinapse-ai/development/skills/model-router.md +92 -0
  75. package/.sinapse-ai/development/skills/sinapse-methodology.md +175 -0
  76. package/.sinapse-ai/development/skills/story-fast-track.md +71 -0
  77. package/.sinapse-ai/development/tasks/dev-develop-story.md +10 -0
  78. package/.sinapse-ai/development/tasks/environment-promotion-pipeline.md +582 -0
  79. package/.sinapse-ai/development/tasks/generate-agent-handoff.md +223 -0
  80. package/.sinapse-ai/development/tasks/infrastructure-assessment.md +432 -0
  81. package/.sinapse-ai/development/tasks/load-testing-setup.md +611 -0
  82. package/.sinapse-ai/development/tasks/observability-blueprint.md +562 -0
  83. package/.sinapse-ai/development/templates/legal/breach-notification-tmpl.md +113 -0
  84. package/.sinapse-ai/development/templates/legal/privacy-policy-tmpl.md +93 -0
  85. package/.sinapse-ai/development/templates/legal/terms-of-service-tmpl.md +85 -0
  86. package/.sinapse-ai/development/templates/service-template/README.md.hbs +159 -159
  87. package/.sinapse-ai/development/templates/service-template/__tests__/index.test.ts.hbs +238 -238
  88. package/.sinapse-ai/development/templates/service-template/client.ts.hbs +404 -404
  89. package/.sinapse-ai/development/templates/service-template/errors.ts.hbs +183 -183
  90. package/.sinapse-ai/development/templates/service-template/index.ts.hbs +121 -121
  91. package/.sinapse-ai/development/templates/service-template/package.json.hbs +88 -88
  92. package/.sinapse-ai/development/templates/service-template/types.ts.hbs +146 -146
  93. package/.sinapse-ai/development/templates/squad-template/LICENSE +22 -22
  94. package/.sinapse-ai/development/workflows/story-development-cycle.yaml +40 -1
  95. package/.sinapse-ai/hooks/ids-post-commit.js +22 -0
  96. package/.sinapse-ai/infrastructure/contracts/compatibility/README.md +42 -0
  97. package/.sinapse-ai/infrastructure/contracts/compatibility/sinapse-current.yaml +35 -0
  98. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/claude-free-tracked.cmd +127 -127
  99. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-proxy.cmd +71 -71
  100. package/.sinapse-ai/infrastructure/scripts/llm-routing/templates/deepseek-usage.cmd +51 -51
  101. package/.sinapse-ai/infrastructure/scripts/pr-review-ai.js +16 -13
  102. package/.sinapse-ai/infrastructure/scripts/setup-project-infra.js +128 -0
  103. package/.sinapse-ai/infrastructure/scripts/test-discovery.js +8 -3
  104. package/.sinapse-ai/infrastructure/scripts/validate-manifest-parity.js +380 -0
  105. package/.sinapse-ai/infrastructure/scripts/validate-parity.js +76 -25
  106. package/.sinapse-ai/infrastructure/templates/coderabbit.yaml.template +280 -280
  107. package/.sinapse-ai/infrastructure/templates/config/env.example +16 -0
  108. package/.sinapse-ai/infrastructure/templates/config/gitignore-additions.tmpl +59 -0
  109. package/.sinapse-ai/infrastructure/templates/github/CODEOWNERS.template +12 -0
  110. package/.sinapse-ai/infrastructure/templates/github/PULL_REQUEST_TEMPLATE.md +29 -0
  111. package/.sinapse-ai/infrastructure/templates/github/ci-template.yml +77 -0
  112. package/.sinapse-ai/infrastructure/templates/github/issue-templates/bug_report.md +34 -0
  113. package/.sinapse-ai/infrastructure/templates/github/issue-templates/feature_request.md +19 -0
  114. package/.sinapse-ai/infrastructure/templates/github-workflows/ci.yml.template +170 -170
  115. package/.sinapse-ai/infrastructure/templates/github-workflows/pr-automation.yml.template +331 -331
  116. package/.sinapse-ai/infrastructure/templates/github-workflows/release.yml.template +197 -197
  117. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-brownfield-merge.tmpl +19 -19
  118. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-node.tmpl +86 -86
  119. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-python.tmpl +146 -146
  120. package/.sinapse-ai/infrastructure/templates/gitignore/gitignore-sinapse-base.tmpl +64 -64
  121. package/.sinapse-ai/infrastructure/templates/sinapse-sync.yaml.template +183 -183
  122. package/.sinapse-ai/install-manifest.yaml +275 -140
  123. package/.sinapse-ai/local-config.yaml.template +65 -65
  124. package/.sinapse-ai/monitor/hooks/lib/__init__.py +2 -2
  125. package/.sinapse-ai/monitor/hooks/lib/enrich.py +59 -59
  126. package/.sinapse-ai/monitor/hooks/lib/send_event.py +48 -48
  127. package/.sinapse-ai/monitor/hooks/notification.py +30 -30
  128. package/.sinapse-ai/monitor/hooks/post_tool_use.py +46 -46
  129. package/.sinapse-ai/monitor/hooks/pre_compact.py +30 -30
  130. package/.sinapse-ai/monitor/hooks/pre_tool_use.py +41 -41
  131. package/.sinapse-ai/monitor/hooks/stop.py +30 -30
  132. package/.sinapse-ai/monitor/hooks/subagent_stop.py +30 -30
  133. package/.sinapse-ai/monitor/hooks/user_prompt_submit.py +39 -39
  134. package/.sinapse-ai/product/templates/adr.hbs +126 -126
  135. package/.sinapse-ai/product/templates/dbdr.hbs +242 -242
  136. package/.sinapse-ai/product/templates/epic.hbs +213 -213
  137. package/.sinapse-ai/product/templates/pmdr.hbs +187 -187
  138. package/.sinapse-ai/product/templates/prd-v2.0.hbs +217 -217
  139. package/.sinapse-ai/product/templates/prd.hbs +202 -202
  140. package/.sinapse-ai/product/templates/story-tmpl.yaml +59 -0
  141. package/.sinapse-ai/product/templates/story.hbs +264 -264
  142. package/.sinapse-ai/product/templates/task.hbs +171 -171
  143. package/.sinapse-ai/product/templates/tmpl-comment-on-examples.sql +159 -159
  144. package/.sinapse-ai/product/templates/tmpl-migration-script.sql +92 -92
  145. package/.sinapse-ai/product/templates/tmpl-rls-granular-policies.sql +105 -105
  146. package/.sinapse-ai/product/templates/tmpl-rls-kiss-policy.sql +11 -11
  147. package/.sinapse-ai/product/templates/tmpl-rls-roles.sql +136 -136
  148. package/.sinapse-ai/product/templates/tmpl-rls-simple.sql +78 -78
  149. package/.sinapse-ai/product/templates/tmpl-rls-tenant.sql +153 -153
  150. package/.sinapse-ai/product/templates/tmpl-rollback-script.sql +78 -78
  151. package/.sinapse-ai/product/templates/tmpl-seed-data.sql +141 -141
  152. package/.sinapse-ai/product/templates/tmpl-smoke-test.sql +17 -17
  153. package/.sinapse-ai/product/templates/tmpl-staging-copy-merge.sql +140 -140
  154. package/.sinapse-ai/product/templates/tmpl-stored-proc.sql +141 -141
  155. package/.sinapse-ai/product/templates/tmpl-trigger.sql +153 -153
  156. package/.sinapse-ai/product/templates/tmpl-view-materialized.sql +134 -134
  157. package/.sinapse-ai/product/templates/tmpl-view.sql +178 -178
  158. package/.sinapse-ai/scripts/diagnostics/health-dashboard/package-lock.json +427 -355
  159. package/LICENSE +34 -34
  160. package/README.en.md +167 -20
  161. package/README.md +190 -22
  162. package/bin/cli.js +510 -196
  163. package/bin/postinstall.js +564 -0
  164. package/bin/sinapse-cli +283 -283
  165. package/bin/sinapse-graph.js +9 -0
  166. package/bin/sinapse-init.js +36 -4
  167. package/bin/sinapse-minimal.js +20 -9
  168. package/bin/sinapse.js +202 -122
  169. package/bin/utils/deprecation-warning.js +46 -0
  170. package/bin/utils/pre-push-safety.js +14 -0
  171. package/docs/TELEMETRY.md +131 -0
  172. package/docs/chrome-brain-upgrade-plan.md +624 -0
  173. package/docs/framework/orqx-plan.md +1 -1
  174. package/docs/installation/chrome-brain.md +17 -7
  175. package/docs/mega-upgrade-orchestration-plan.md +71 -0
  176. package/docs/pt/contributing.md +20 -0
  177. package/docs/research-synthesis-for-upgrade.md +511 -0
  178. package/docs/security-audit-report.md +306 -0
  179. package/package.json +20 -8
  180. package/packages/installer/src/config/configure-environment.js +19 -44
  181. package/packages/installer/src/detection/detect-project-type.js +181 -63
  182. package/packages/installer/src/installer/manifest-signature.js +32 -17
  183. package/packages/installer/src/wizard/i18n.js +12 -0
  184. package/packages/installer/src/wizard/ide-config-generator.js +8 -39
  185. package/packages/installer/src/wizard/index.js +119 -14
  186. package/packages/installer/src/wizard/questions.js +2 -3
  187. package/packages/installer/tests/integration/environment-configuration.test.js +7 -5
  188. package/packages/installer/tests/unit/detection/detect-project-type.test.js +138 -1
  189. package/packages/installer/tests/unit/doctor/doctor-orchestrator.test.js +3 -3
  190. package/packages/sinapse-install/bin/edmcp.js +0 -0
  191. package/packages/sinapse-install/bin/sinapse-install.js +0 -0
  192. package/packages/sinapse-pro-cli/bin/sinapse-pro.js +0 -0
  193. package/scripts/check-markdown-links.py +353 -353
  194. package/scripts/coverage-report-summary.js +169 -0
  195. package/scripts/generate-install-manifest.js +6 -2
  196. package/scripts/release-readiness.js +169 -0
  197. package/scripts/test-install-matrix-local.sh +153 -0
  198. package/scripts/validate-install-docs.js +394 -0
  199. package/scripts/validate-no-external-refs.js +376 -0
  200. package/scripts/validate-squad-orqx.js +302 -0
  201. package/scripts/validate-story-meta.js +263 -0
  202. package/squads/claude-code-mastery/CHANGELOG.md +1 -1
  203. package/squads/claude-code-mastery/README.md +2 -2
  204. package/squads/claude-code-mastery/squad.yaml +1 -1
  205. package/squads/squad-artdir/README.md +90 -0
  206. package/squads/squad-artdir/agents/accessibility-guardian.md +184 -0
  207. package/squads/squad-artdir/agents/artdir-orqx.md +145 -0
  208. package/squads/squad-artdir/agents/color-psychologist.md +166 -0
  209. package/squads/squad-artdir/agents/cro-persuasion.md +161 -0
  210. package/squads/squad-artdir/agents/design-system-architect.md +100 -0
  211. package/squads/squad-artdir/agents/ia-architect.md +169 -0
  212. package/squads/squad-artdir/agents/interaction-designer.md +162 -0
  213. package/squads/squad-artdir/agents/layout-engineer.md +163 -0
  214. package/squads/squad-artdir/agents/motion-architect.md +185 -0
  215. package/squads/squad-artdir/agents/platform-aesthetic-director.md +84 -0
  216. package/squads/squad-artdir/agents/premium-packaging-strategist.md +107 -0
  217. package/squads/squad-artdir/agents/product-surface-director.md +86 -0
  218. package/squads/squad-artdir/agents/type-systemist.md +138 -0
  219. package/squads/squad-artdir/agents/visual-strategist.md +127 -0
  220. package/squads/squad-artdir/checklists/seven-pillars-validation-checklist.md +172 -0
  221. package/squads/squad-artdir/knowledge-base/case-nyo-ia-reference.md +289 -0
  222. package/squads/squad-artdir/knowledge-base/deliverables-templates.md +457 -0
  223. package/squads/squad-artdir/knowledge-base/motion-technique-catalog.md +247 -0
  224. package/squads/squad-artdir/knowledge-base/premium-packaging-principles.md +133 -0
  225. package/squads/squad-artdir/knowledge-base/psychological-toolkit.md +229 -0
  226. package/squads/squad-artdir/knowledge-base/saas-art-direction-canon.md +242 -0
  227. package/squads/squad-artdir/knowledge-base/seven-pillars-framework.md +289 -0
  228. package/squads/squad-artdir/knowledge-base/ten-pillars-framework.md +221 -0
  229. package/squads/squad-artdir/package.json +20 -0
  230. package/squads/squad-artdir/squad.yaml +271 -0
  231. package/squads/squad-artdir/tasks/audit-conversion.md +97 -0
  232. package/squads/squad-artdir/tasks/audit-drift-multi-surface.md +55 -0
  233. package/squads/squad-artdir/tasks/consult-saas-canon.md +54 -0
  234. package/squads/squad-artdir/tasks/create-art-direction-brief.md +110 -0
  235. package/squads/squad-artdir/tasks/create-premium-packaging-brief.md +61 -0
  236. package/squads/squad-artdir/tasks/create-wireflow.md +84 -0
  237. package/squads/squad-artdir/tasks/design-color-system.md +81 -0
  238. package/squads/squad-artdir/tasks/design-product-surface.md +60 -0
  239. package/squads/squad-artdir/tasks/design-token-system.md +58 -0
  240. package/squads/squad-artdir/tasks/diagnose-visual-language.md +92 -0
  241. package/squads/squad-artdir/tasks/first-5-minutes-choreography.md +65 -0
  242. package/squads/squad-artdir/tasks/specify-motion-system.md +84 -0
  243. package/squads/squad-artdir/tasks/validate-against-pillars.md +143 -0
  244. package/squads/squad-artdir/templates/art-direction-brief-template.md +215 -0
  245. package/squads/squad-artdir/workflows/conversion-audit-cycle.yaml +78 -0
  246. package/squads/squad-artdir/workflows/full-art-direction-cycle.yaml +98 -0
  247. package/squads/squad-artdir/workflows/saas-platform-art-direction-cycle.yaml +174 -0
  248. package/squads/squad-brand/knowledge-base/ai-visual-generation-canon.md +234 -0
  249. package/squads/squad-brand/squad.yaml +20 -6
  250. package/squads/squad-claude/knowledge-base/context-window-optimization.md +1 -1
  251. package/squads/squad-claude/knowledge-base/swarm-orchestration-patterns.md +2 -2
  252. package/squads/squad-content/knowledge-base/ai-native-content-loop.md +220 -0
  253. package/squads/squad-content/knowledge-base/signal-intelligence-v2.md +234 -0
  254. package/squads/squad-content/knowledge-base/task-ownership-map.md +235 -0
  255. package/squads/squad-content/squad.yaml +187 -27
  256. package/squads/squad-copy/knowledge-base/ai-copy-human-loop-canon.md +235 -0
  257. package/squads/squad-copy/squad.yaml +19 -4
  258. package/squads/squad-design/knowledge-base/cross-surface-token-canon.md +209 -0
  259. package/squads/squad-design/squad.yaml +19 -4
  260. package/.sinapse-ai/core/registry/service-registry.json +0 -6346
  261. package/.sinapse-ai/data/registry-update-log.jsonl +0 -1323
  262. package/.sinapse-ai/manifests/agents.csv +0 -29
  263. package/.sinapse-ai/manifests/tasks.csv +0 -204
  264. package/.sinapse-ai/manifests/workers.csv +0 -196
  265. package/squads/squad-growth/tasks/calculate-sample-size.md +0 -121
  266. package/squads/squad-paidmedia/tasks/calculate-sample-size.md +0 -57
@@ -0,0 +1,263 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * validate-story-meta — Story 10.19
4
+ *
5
+ * LOCAL-ONLY validator for `docs/stories/*.story.md` files.
6
+ *
7
+ * Why local-only:
8
+ * docs/stories/ is gitignored, so a CI checkout contains zero story
9
+ * files. Running this in CI would always be a no-op. Use it instead
10
+ * via `npm run validate:story-meta` and via lint-staged on commit.
11
+ *
12
+ * What it checks:
13
+ * 1. Files lack YAML frontmatter -> WARN (grandfathered)
14
+ * 2. Frontmatter status not in enum -> ERROR
15
+ * 3. ## Status heading != frontmatter status -> ERROR
16
+ * 4. Required sections missing -> ERROR (with frontmatter)
17
+ * WARN (without frontmatter)
18
+ * 5. Frontmatter id not in filename prefix -> ERROR
19
+ *
20
+ * Exit codes:
21
+ * 0 no ERRORs (PASS or PASS+WARN)
22
+ * 1 any ERROR
23
+ *
24
+ * Usage:
25
+ * node scripts/validate-story-meta.js Full scan
26
+ * node scripts/validate-story-meta.js --staged Only staged stories
27
+ * node scripts/validate-story-meta.js --quiet Suppress per-file output
28
+ */
29
+
30
+ 'use strict';
31
+
32
+ const fs = require('fs');
33
+ const path = require('path');
34
+ const yaml = require('js-yaml');
35
+ const { spawnSync } = require('child_process');
36
+
37
+ const VALID_STATUSES = new Set(['Draft', 'Ready', 'InProgress', 'InReview', 'Done']);
38
+ // Hard-required for any story: AC + Scope. The other two (Status, Story)
39
+ // are convention but can be satisfied by frontmatter alone in newer stories
40
+ // that drop the prose heading.
41
+ const REQUIRED_SECTIONS = ['## Acceptance Criteria', '## Scope'];
42
+ const SOFT_SECTIONS = ['## Status', '## Story'];
43
+
44
+ function parseArgs(argv = process.argv.slice(2)) {
45
+ const args = new Set(argv);
46
+ return {
47
+ staged: args.has('--staged'),
48
+ quiet: args.has('--quiet') || args.has('-q'),
49
+ json: args.has('--json'),
50
+ };
51
+ }
52
+
53
+ function findStoryFiles(projectRoot, opts = {}) {
54
+ if (opts.staged) {
55
+ const result = spawnSync('git', ['diff', '--cached', '--name-only', '--diff-filter=ACM'], {
56
+ cwd: projectRoot,
57
+ encoding: 'utf8',
58
+ });
59
+ if (result.status !== 0) return [];
60
+ return result.stdout
61
+ .split('\n')
62
+ .map((line) => line.trim())
63
+ .filter((line) => line.startsWith('docs/stories/') && line.endsWith('.story.md'))
64
+ .map((rel) => path.join(projectRoot, rel));
65
+ }
66
+ const dir = path.join(projectRoot, 'docs', 'stories');
67
+ if (!fs.existsSync(dir)) return [];
68
+ return fs
69
+ .readdirSync(dir)
70
+ .filter((name) => name.endsWith('.story.md'))
71
+ .map((name) => path.join(dir, name));
72
+ }
73
+
74
+ function parseFrontmatter(content) {
75
+ const match = content.match(/^---\n([\s\S]*?)\n---\n/);
76
+ if (!match) return null;
77
+ try {
78
+ return yaml.load(match[1]);
79
+ } catch (err) {
80
+ return { __parse_error: err.message };
81
+ }
82
+ }
83
+
84
+ function extractHeadingStatus(content) {
85
+ const match = content.match(/^##\s*Status\s*:?\s*(.+)$/m);
86
+ return match ? match[1].trim() : null;
87
+ }
88
+
89
+ function findMissingSections(content) {
90
+ return REQUIRED_SECTIONS.filter((section) => {
91
+ const escaped = section.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
92
+ const re = new RegExp(`^${escaped}\\b`, 'm');
93
+ return !re.test(content);
94
+ });
95
+ }
96
+
97
+ function validateFile(filePath) {
98
+ const findings = [];
99
+ let content;
100
+ try {
101
+ content = fs.readFileSync(filePath, 'utf8');
102
+ } catch (err) {
103
+ findings.push({ level: 'error', rule: 'read', message: `cannot read file: ${err.message}` });
104
+ return findings;
105
+ }
106
+
107
+ const frontmatter = parseFrontmatter(content);
108
+ const hasFrontmatter = frontmatter !== null && !frontmatter.__parse_error;
109
+ const fileName = path.basename(filePath);
110
+
111
+ if (frontmatter && frontmatter.__parse_error) {
112
+ findings.push({
113
+ level: 'error',
114
+ rule: 'frontmatter-parse',
115
+ message: `YAML frontmatter parse error: ${frontmatter.__parse_error}`,
116
+ });
117
+ }
118
+
119
+ if (!hasFrontmatter && !frontmatter) {
120
+ findings.push({
121
+ level: 'warn',
122
+ rule: 'frontmatter-missing',
123
+ message: 'no YAML frontmatter (grandfathered — older story format)',
124
+ });
125
+ }
126
+
127
+ if (hasFrontmatter) {
128
+ if (!frontmatter.status || !VALID_STATUSES.has(frontmatter.status)) {
129
+ findings.push({
130
+ level: 'error',
131
+ rule: 'status-enum',
132
+ message: `frontmatter status="${frontmatter.status}" is not in [${[...VALID_STATUSES].join(', ')}]`,
133
+ });
134
+ }
135
+
136
+ const headingStatus = extractHeadingStatus(content);
137
+ if (headingStatus && frontmatter.status && headingStatus !== frontmatter.status) {
138
+ findings.push({
139
+ level: 'error',
140
+ rule: 'status-heading-mismatch',
141
+ message: `## Status heading says "${headingStatus}" but frontmatter says "${frontmatter.status}"`,
142
+ });
143
+ }
144
+
145
+ if (frontmatter.id) {
146
+ const idStr = String(frontmatter.id);
147
+ if (!fileName.startsWith(`${idStr}-`) && !fileName.startsWith(`${idStr}.`)) {
148
+ findings.push({
149
+ level: 'error',
150
+ rule: 'id-filename-mismatch',
151
+ message: `frontmatter id="${idStr}" does not match filename prefix`,
152
+ });
153
+ }
154
+ }
155
+ }
156
+
157
+ const missingHard = findMissingSections(content);
158
+ for (const section of missingHard) {
159
+ findings.push({
160
+ level: hasFrontmatter ? 'error' : 'warn',
161
+ rule: 'section-missing',
162
+ message: `missing required section: ${section}`,
163
+ });
164
+ }
165
+
166
+ // Soft sections: only flag for files WITH frontmatter, and only as WARN.
167
+ // For grandfathered files (no frontmatter), the existing frontmatter-missing
168
+ // WARN already conveys "old format", so we don't pile on more noise.
169
+ if (hasFrontmatter) {
170
+ for (const section of SOFT_SECTIONS) {
171
+ const escaped = section.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
172
+ const re = new RegExp(`^${escaped}\\b`, 'm');
173
+ if (!re.test(content)) {
174
+ findings.push({
175
+ level: 'warn',
176
+ rule: 'soft-section-missing',
177
+ message: `convention: ${section} heading is missing (frontmatter satisfies the data, this is cosmetic)`,
178
+ });
179
+ }
180
+ }
181
+ }
182
+
183
+ return findings;
184
+ }
185
+
186
+ function summarize(results) {
187
+ const summary = { total: results.length, pass: 0, warn: 0, error: 0 };
188
+ for (const r of results) {
189
+ const hasError = r.findings.some((f) => f.level === 'error');
190
+ const hasWarn = r.findings.some((f) => f.level === 'warn');
191
+ if (hasError) summary.error += 1;
192
+ else if (hasWarn) summary.warn += 1;
193
+ else summary.pass += 1;
194
+ }
195
+ return summary;
196
+ }
197
+
198
+ function formatReport(results, summary) {
199
+ const lines = [];
200
+ for (const r of results) {
201
+ if (r.findings.length === 0) {
202
+ lines.push(`PASS ${path.relative(process.cwd(), r.filePath)}`);
203
+ continue;
204
+ }
205
+ const hasError = r.findings.some((f) => f.level === 'error');
206
+ const tag = hasError ? 'ERROR' : 'WARN ';
207
+ lines.push(`${tag} ${path.relative(process.cwd(), r.filePath)}`);
208
+ for (const finding of r.findings) {
209
+ lines.push(` [${finding.level}] ${finding.rule}: ${finding.message}`);
210
+ }
211
+ }
212
+ lines.push('');
213
+ lines.push(
214
+ `Summary: ${summary.total} file(s) — ${summary.pass} pass, ${summary.warn} warn, ${summary.error} error`,
215
+ );
216
+ return lines.join('\n');
217
+ }
218
+
219
+ function main() {
220
+ const args = parseArgs();
221
+ const projectRoot = process.cwd();
222
+ const files = findStoryFiles(projectRoot, { staged: args.staged });
223
+
224
+ if (files.length === 0) {
225
+ if (!args.quiet) {
226
+ console.log('=== validate-story-meta ===');
227
+ console.log('No story files found — skipping (this is expected in CI checkouts).');
228
+ }
229
+ return 0;
230
+ }
231
+
232
+ const results = files.map((filePath) => ({
233
+ filePath,
234
+ findings: validateFile(filePath),
235
+ }));
236
+ const summary = summarize(results);
237
+
238
+ if (args.json) {
239
+ console.log(JSON.stringify({ results, summary }, null, 2));
240
+ } else if (!args.quiet) {
241
+ console.log('=== validate-story-meta ===');
242
+ console.log(formatReport(results, summary));
243
+ }
244
+
245
+ return summary.error > 0 ? 1 : 0;
246
+ }
247
+
248
+ if (require.main === module) {
249
+ process.exitCode = main();
250
+ }
251
+
252
+ module.exports = {
253
+ parseArgs,
254
+ findStoryFiles,
255
+ parseFrontmatter,
256
+ extractHeadingStatus,
257
+ findMissingSections,
258
+ validateFile,
259
+ summarize,
260
+ formatReport,
261
+ VALID_STATUSES,
262
+ REQUIRED_SECTIONS,
263
+ };
@@ -10,7 +10,7 @@ All notable changes to the Claude Code Mastery squad.
10
10
  - 3 multi-phase workflows (wf-project-setup, wf-knowledge-update, wf-audit-complete)
11
11
  - 5 knowledge base files (quick-ref, project-type-signatures, hook-patterns, ci-cd-patterns, mcp-catalog)
12
12
  - 7 templates (5 CLAUDE.md project templates + 2 GitHub Actions workflows)
13
- - 8 mind DNA summaries (disler, steipete, kieran-klaassen, reuven-cohen, superclaude-org, bmad-code-org, daniel-miessler, boris-cherny)
13
+ - 8 mind DNA summaries from prominent Claude Code practitioners and agile-AI methodology researchers
14
14
  - 1 validation script (validate-setup.js)
15
15
  - Tier architecture: Tier 0 (Diagnosis), Tier 1 (Core Mastery), Tier 2 (Strategic & Context)
16
16
  - Handoff matrix with full routing between all agents
@@ -34,7 +34,7 @@
34
34
  | 1 | mcp-integrator | Piper | Peter Steinberger (@steipete) | 791 | MCP servers, tool discovery, context budget |
35
35
  | 1 | swarm-orqx | Nexus | Kieran Klaassen + Reuven Cohen | 1,008 | Agent teams, subagents, parallel execution |
36
36
  | 1 | config-engineer | Sigil | SuperClaude-Org | 663 | Settings, permissions, CLAUDE.md, sandbox |
37
- | 2 | skill-craftsman | Anvil | BMAD-CODE-ORG | 1,046 | Skills, plugins, commands, context engineering |
37
+ | 2 | skill-craftsman | Anvil | spec-driven agile-AI methodology | 1,046 | Skills, plugins, commands, context engineering |
38
38
  | 2 | project-integrator | Conduit | Daniel Miessler (PAI) | 959 | Project integration, CI/CD, SINAPSE bridge |
39
39
  | 2 | roadmap-sentinel | Vigil | Boris Cherny | 707 | Roadmap, changelog, feature adoption |
40
40
 
@@ -84,7 +84,7 @@ This squad was created through iterative research with devil's advocate validati
84
84
  | **Kieran Klaassen** | TeammateTool discovery, swarm patterns documentation | [Gists](https://gist.github.com/kieranklaassen) |
85
85
  | **Reuven Cohen** (ruvnet) | Ruflo orchestration platform, 54+ agents, WASM kernels | [GitHub](https://github.com/ruvnet/ruflo) |
86
86
  | **SuperClaude-Org** | 9 cognitive personas, 5 behavioral modes, pure .md config | [GitHub](https://github.com/SuperClaude-Org/SuperClaude_Framework) |
87
- | **BMAD-CODE-ORG** | BMAD Method, 21 agents, 50+ workflows, spec-driven development | [Docs](https://docs.bmad-method.org/) |
87
+ | **Spec-driven agile-AI methodology** | 21 agents, 50+ workflows, spec-first development with strong human-in-the-loop | (community research) |
88
88
  | **Daniel Miessler** | Personal AI Infrastructure (PAI), Unix philosophy for AI | [Blog](https://danielmiessler.com/), [GitHub](https://github.com/danielmiessler/Personal_AI_Infrastructure) |
89
89
  | **Boris Cherny** | Claude Code creator, plan-first methodology, parallel instances | [Blog](https://boristane.com/), [Pragmatic Engineer](https://newsletter.pragmaticengineer.com/p/how-claude-code-is-built) |
90
90
 
@@ -110,7 +110,7 @@ agents:
110
110
  skill-craftsman:
111
111
  file: agents/skill-craftsman.md
112
112
  tier: 2
113
- based_on: "BMAD-CODE-ORG + community"
113
+ based_on: "spec-driven agile-AI methodology + community"
114
114
  icon: "🛠️"
115
115
  focus: "Skills, commands, plugins, context engineering, spec-driven dev"
116
116
 
@@ -0,0 +1,90 @@
1
+ # squad-artdir — Art Direction for Conversion AND Platform Premium
2
+
3
+ **Version:** 2.0.0
4
+ **Changelog:** v2.0 expands the original 7 Pillars LP-focused squad to cover SaaS / platform / logged-in product surfaces + multi-surface design systems + premium packaging.
5
+
6
+ Art direction focused on retention, conversion AND premium perceived value. Every pixel carries behavioral intent.
7
+
8
+ ## The 10 Pillars (v2.0 — LP + Platform unified)
9
+
10
+ ### LP Core (v1.0 — preserved)
11
+ 1. Visual Hierarchy & Controlled Attention
12
+ 2. Psychologically Intentional Color System
13
+ 3. Typography as Identity Signal
14
+ 4. Motion as Kinesthetic Narrative
15
+ 5. Information Architecture for Retention
16
+ 6. Visual Persuasion via CRO Patterns
17
+ 7. Layout & Spacing as Cognitive Breathing
18
+
19
+ ### Platform + Premium (v2.0 — NEW)
20
+ 8. **Product Surface Ergonomics** (Axiom) — daily-use cognitive ergonomics for logged-in surfaces
21
+ 9. **Multi-Surface Design System Architecture** (Atlas) — canonical tokens, surface dialects, versioning
22
+ 10. **Premium Packaging & Perceived Value** (Aura) — the 5 non-negotiables that justify 3x pricing
23
+
24
+ See `knowledge-base/ten-pillars-framework.md` for the full applicability matrix (LP vs Platform).
25
+
26
+ ## Agents (14 total — 10 v1.0 + 4 v2.0)
27
+
28
+ ### v1.0 LP Core
29
+ | Agent | Persona | Role |
30
+ |-------|---------|------|
31
+ | artdir-orqx | Canvas | Orchestrator — coordinates 10 pillars, routes LP vs Platform |
32
+ | visual-strategist | Prism | Visual language, mood, aesthetic positioning |
33
+ | motion-architect | Tempo | Motion system, timing, easing, lib selection |
34
+ | type-systemist | Kern | Type scale, font pairing, custom type (premium) |
35
+ | color-psychologist | Spectrum | Color systems with neuropsychological justification |
36
+ | layout-engineer | Grid | Grids, spacing, responsiveness |
37
+ | ia-architect | Flow | Information architecture for cognitive retention |
38
+ | cro-persuasion | Convert | Conversion patterns and persuasion |
39
+ | interaction-designer | Pulse | Hover states, micro-interactions, feedback |
40
+ | accessibility-guardian | Shield | WCAG AAA, accessibility quality gate |
41
+
42
+ ### v2.0 Platform + Premium
43
+ | Agent | Persona | Role |
44
+ |-------|---------|------|
45
+ | product-surface-director | **Axiom** | Dashboards, empty states, dark mode parity, cognitive ergonomics for daily use (Pilar 8) |
46
+ | design-system-architect | **Atlas** | Multi-surface tokens, dialects, semver, drift audit (Pilar 9) |
47
+ | platform-aesthetic-director | **Vertex** | Custodian of SaaS canon (Linear/Vercel/Stripe/Framer/Arc/Raycast). Prevents commodity contamination (Lens 8, 9, 10) |
48
+ | premium-packaging-strategist | **Aura** | Translates "charge 3x more" into concrete aesthetic decisions. Applies the 5 non-negotiables (Pilar 10) |
49
+
50
+ ## Workflows
51
+
52
+ - `full-art-direction-cycle` (v1.0) — LP / marketing surface, 7 Pillars
53
+ - `conversion-audit-cycle` (v1.0) — LP audit
54
+ - `saas-platform-art-direction-cycle` (v2.0) — Platform / SaaS, 10 Pillars: canon consult -> token system -> product surface -> first 5 minutes -> premium packaging -> drift audit -> validate
55
+
56
+ ## Knowledge Bases (8)
57
+
58
+ - `seven-pillars-framework.md` (v1.0 canon, LP)
59
+ - `ten-pillars-framework.md` (v2.0 unified LP+Platform)
60
+ - `psychological-toolkit.md`
61
+ - `case-nyo-ia-reference.md`
62
+ - `motion-technique-catalog.md`
63
+ - `deliverables-templates.md`
64
+ - `saas-art-direction-canon.md` (v2.0) — 6 premium SaaS refs decomposed
65
+ - `premium-packaging-principles.md` (v2.0) — 5 non-negotiables from council pressurization
66
+
67
+ ## When to use which workflow
68
+
69
+ - Landing page, site, campaign -> `full-art-direction-cycle`
70
+ - SaaS, dashboard, logged-in product, platform -> `saas-platform-art-direction-cycle`
71
+ - Existing LP audit -> `conversion-audit-cycle`
72
+ - Existing product drift audit -> task `audit-drift-multi-surface`
73
+ - Premium pricing justification -> task `create-premium-packaging-brief`
74
+
75
+ ## Non-Negotiable Rules (all 14 agents)
76
+
77
+ 1. Every aesthetic decision MUST cite a psychological principle
78
+ 2. Performance > beauty (motion that causes lag kills conversion AND retention)
79
+ 3. Accessibility > cinema (always fallback to prefers-reduced-motion)
80
+ 4. Mobile-first, scale to desktop (LP)
81
+ 5. Dark-first or parity-required (Platform)
82
+ 6. Copy is design (microcopy, CTA labels, empty-state copy)
83
+ 7. Measurable or not done — every delivery has an impact hypothesis
84
+ 8. NO Pinterest moodboards, NO stock fonts for premium positioning, NO commodity contamination
85
+ 9. Billing PDF and transactional email are NOT optional surfaces — they are part of the brief
86
+ 10. Restraint reads as confidence — max 1 accent, max 3 type weights, max 3 CTAs per viewport
87
+
88
+ ---
89
+
90
+ *squad-artdir v2.0.0 | 14 agents | 13 tasks | 8 KBs | 3 workflows | 10 Pillars*
@@ -0,0 +1,184 @@
1
+ # Agent: Shield — Accessibility Guardian
2
+
3
+ ## Identidade
4
+ - **ID:** accessibility-guardian
5
+ - **Nome:** Shield
6
+ - **Arquetipo:** The Guardian — protege a experiencia para TODOS os usuarios, sem excecao
7
+ - **Squad:** squad-artdir
8
+
9
+ ## Role
10
+
11
+ Shield e o quality gate de acessibilidade da squad. Valida toda entrega contra WCAG 2.2 AAA, garante prefers-reduced-motion fallbacks, verifica contraste, HTML semantico, keyboard navigation, ARIA landmarks, focus management e skip links. Shield nao negocia — acessibilidade nao e feature, e fundacao.
12
+
13
+ ## Principios
14
+
15
+ 1. **Acessibilidade nao e feature, e fundacao** — se nao e acessivel, nao esta pronto
16
+ 2. **WCAG AAA em CTAs, AA minimo em todo o resto** — contrast ratios sao inegociaveis
17
+ 3. **prefers-reduced-motion e obrigatorio** — sempre fornecer experiencia sem motion
18
+ 4. **Semantica antes de ARIA** — HTML semantico primeiro, ARIA quando semantica nao basta
19
+ 5. **Keyboard-first thinking** — se nao funciona com Tab + Enter, nao funciona
20
+ 6. **Testar com screen reader** — nao apenas validar automaticamente, testar experiencia real
21
+
22
+ ## Responsabilidades
23
+
24
+ - Validar contrast ratios (WCAG AAA 7:1 em CTAs, AA 4.5:1 em texto)
25
+ - Garantir prefers-reduced-motion fallbacks em toda animacao
26
+ - Validar HTML semantico (headings hierarchy, landmarks, lists)
27
+ - Garantir keyboard navigation completa
28
+ - Verificar ARIA labels, roles e properties
29
+ - Validar focus management (visible focus, focus traps em modais)
30
+ - Garantir skip links e bypass blocks
31
+ - Validar color-blindness-safe palette
32
+ - Produzir Accessibility Audit Report
33
+
34
+ ## WCAG 2.2 Checklist por Area
35
+
36
+ ### Perceivable (1.x)
37
+
38
+ | Criterio | Nivel | Verificacao | Status |
39
+ |---------|-------|------------|--------|
40
+ | 1.1.1 Non-text content | A | Todas imagens tem alt text descritivo | |
41
+ | 1.3.1 Info and relationships | A | Headings hierarchy (h1→h6 em ordem) | |
42
+ | 1.3.2 Meaningful sequence | A | DOM order = visual order | |
43
+ | 1.3.4 Orientation | AA | Funciona em portrait e landscape | |
44
+ | 1.4.1 Use of color | A | Cor nunca e unico indicador (add icon/text) | |
45
+ | 1.4.3 Contrast (minimum) | AA | 4.5:1 texto normal, 3:1 texto grande | |
46
+ | 1.4.6 Contrast (enhanced) | AAA | 7:1 texto normal, 4.5:1 texto grande | |
47
+ | 1.4.11 Non-text contrast | AA | 3:1 para UI components e graficos | |
48
+ | 1.4.12 Text spacing | AA | Funciona com line-height 1.5x, letter-spacing 0.12em | |
49
+ | 1.4.13 Content on hover/focus | AA | Dismiss, hoverable, persistent | |
50
+
51
+ ### Operable (2.x)
52
+
53
+ | Criterio | Nivel | Verificacao | Status |
54
+ |---------|-------|------------|--------|
55
+ | 2.1.1 Keyboard | A | Todo interativo funciona com teclado | |
56
+ | 2.1.2 No keyboard trap | A | Focus nunca fica preso (exceto modal intencional) | |
57
+ | 2.2.2 Pause, stop, hide | A | Animacoes > 5s tem controle de pausa | |
58
+ | 2.3.1 Three flashes | A | Nenhum conteudo pisca > 3x/segundo | |
59
+ | 2.4.1 Bypass blocks | A | Skip link para conteudo principal | |
60
+ | 2.4.3 Focus order | A | Tab order segue sequencia logica | |
61
+ | 2.4.4 Link purpose | A | Link text descreve destino (nunca "clique aqui") | |
62
+ | 2.4.6 Headings and labels | AA | Headings descrevem topico ou proposito | |
63
+ | 2.4.7 Focus visible | AA | Focus indicator visivel em todos elementos | |
64
+ | 2.4.11 Focus not obscured | AA | Focus nao escondido por sticky elements | |
65
+ | 2.4.12 Focus not obscured (enhanced) | AAA | Focus totalmente visivel | |
66
+ | 2.5.8 Target size | AA | Min 24x24px para touch targets | |
67
+
68
+ ### Understandable (3.x)
69
+
70
+ | Criterio | Nivel | Verificacao | Status |
71
+ |---------|-------|------------|--------|
72
+ | 3.1.1 Language of page | A | `lang` attribute no `<html>` | |
73
+ | 3.1.2 Language of parts | AA | `lang` em trechos de outro idioma | |
74
+ | 3.2.1 On focus | A | Focus nao causa mudanca de contexto | |
75
+ | 3.2.2 On input | A | Input nao causa mudanca inesperada | |
76
+ | 3.3.1 Error identification | A | Erros de form identificados e descritos | |
77
+ | 3.3.2 Labels or instructions | A | Campos de form tem labels | |
78
+ | 3.3.3 Error suggestion | AA | Sugestao de correcao para erros | |
79
+ | 3.3.8 Accessible authentication | AA | Login sem cognitive function test | |
80
+
81
+ ### Robust (4.x)
82
+
83
+ | Criterio | Nivel | Verificacao | Status |
84
+ |---------|-------|------------|--------|
85
+ | 4.1.2 Name, role, value | A | Custom widgets tem name, role, value via ARIA | |
86
+ | 4.1.3 Status messages | AA | Status updates anunciados via aria-live | |
87
+
88
+ ## Contrast Ratio Requirements
89
+
90
+ | Contexto | Nivel | Ratio Minimo | Ferramenta |
91
+ |----------|-------|-------------|-----------|
92
+ | CTA text on background | AAA | 7:1 | WebAIM Contrast Checker |
93
+ | Body text on background | AA | 4.5:1 | Colour Contrast Analyser |
94
+ | Large text (18pt+) | AA | 3:1 | Built-in browser tools |
95
+ | UI components (borders, icons) | AA | 3:1 | axe DevTools |
96
+ | Placeholder text | AA | 4.5:1 (nao usar como label) | Manual check |
97
+ | Disabled elements | Exempt | N/A | Mas deve ser perceptivel como disabled |
98
+
99
+ ## Semantic HTML Checklist
100
+
101
+ ```html
102
+ <!-- Landmarks obrigatorios -->
103
+ <header> <!-- Banner -->
104
+ <nav> <!-- Navigation -->
105
+ <main> <!-- Main content (unico) -->
106
+ <section> <!-- Thematic grouping (com heading) -->
107
+ <article> <!-- Self-contained content -->
108
+ <aside> <!-- Complementary -->
109
+ <footer> <!-- Content info -->
110
+
111
+ <!-- Heading hierarchy -->
112
+ <h1> <!-- Unico por pagina -->
113
+ <h2> <!-- Secoes principais -->
114
+ <h3> <!-- Sub-secoes -->
115
+
116
+ <!-- Lists -->
117
+ <ul>/<ol> <!-- Para qualquer grupo de items -->
118
+ <dl> <!-- Para pares termo/definicao -->
119
+
120
+ <!-- Links vs Buttons -->
121
+ <a href=""> <!-- Navegacao (muda URL) -->
122
+ <button> <!-- Acao (muda estado) -->
123
+ ```
124
+
125
+ ## ARIA: Quando e Como
126
+
127
+ | Regra | Detalhe |
128
+ |-------|---------|
129
+ | Primeira opcao | HTML semantico nativo (button, nav, main) |
130
+ | ARIA quando nao ha equivalente | Custom widgets (tabs, combobox, tree) |
131
+ | aria-label | Quando visual e claro mas texto nao (icon buttons) |
132
+ | aria-describedby | Instrucoes adicionais (form hints, error messages) |
133
+ | aria-live | Conteudo que atualiza (notifications, counters, toasts) |
134
+ | aria-expanded | Accordions, dropdowns, menus |
135
+ | aria-hidden="true" | Decorativo (icons ao lado de texto, backgrounds) |
136
+ | role="presentation" | Tabelas de layout, images decorativas |
137
+
138
+ ## Focus Management Patterns
139
+
140
+ | Padrao | Implementacao |
141
+ |--------|--------------|
142
+ | Skip link | `<a href="#main" class="skip-link">Pular para conteudo</a>` visible on focus |
143
+ | Modal trap | Focus trapped dentro do modal, Escape fecha, retorna ao trigger |
144
+ | Dropdown | Arrow keys para navegar, Enter para selecionar, Escape para fechar |
145
+ | Tab interface | Arrow keys entre tabs, Tab para sair do grupo de tabs |
146
+ | Form errors | Focus move para primeiro campo com erro |
147
+ | Page transition | Focus move para novo conteudo apos navigation |
148
+ | Toast/notification | `aria-live="polite"` anuncia sem mover focus |
149
+
150
+ ## prefers-reduced-motion: Audit Checklist
151
+
152
+ | Elemento | Com Motion | Reduced Motion | Status |
153
+ |---------|-----------|---------------|--------|
154
+ | Hero animation | Full animation | Static hero or fade-only | |
155
+ | Scroll reveals | Slide + fade | Instant appear | |
156
+ | Parallax effects | Full parallax | No parallax | |
157
+ | Marquee/carousel | Continuous scroll | Static grid | |
158
+ | Hover animations | Scale + shadow | Color change only | |
159
+ | Page transitions | Slide/fade | Instant page swap | |
160
+ | Loading spinners | Rotation | "Loading..." text | |
161
+ | Background motion | Animated gradient | Static color | |
162
+ | Custom cursor | Animated trail | System cursor | |
163
+ | Video backgrounds | Auto-playing | Still image | |
164
+
165
+ ## Color Blindness Safety
166
+
167
+ | Tipo | Populacao | O que Nao Ver | Solucao |
168
+ |------|----------|--------------|---------|
169
+ | Protanopia (red-blind) | 1% homens | Red vs green | Nao usar red/green como unico diferenciador |
170
+ | Deuteranopia (green-blind) | 1% homens | Green vs red | Adicionar shape/icon alem de cor |
171
+ | Tritanopia (blue-blind) | 0.01% | Blue vs yellow | Raramente problematico |
172
+ | Achromatopsia (total) | 0.003% | All color | Informacao NUNCA dependente apenas de cor |
173
+
174
+ **Regra universal:** Cor NUNCA e o unico canal de informacao. Sempre combine cor + shape + text.
175
+
176
+ ## Delegacao
177
+
178
+ | Tarefa | Delegar para |
179
+ |--------|-------------|
180
+ | Ajustar cores para conformidade | color-psychologist (Spectrum) |
181
+ | Ajustar motion para reduced-motion | motion-architect (Tempo) |
182
+ | Ajustar interactive states | interaction-designer (Pulse) |
183
+ | Ajustar tipografia para legibilidade | type-systemist (Kern) |
184
+ | Ajustar layout para focus order | layout-engineer (Grid) |