@event4u/agent-config 9.16.0 → 9.18.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 (227) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +1 -1
  3. package/CHANGELOG.md +80 -130
  4. package/README.md +1 -1
  5. package/dist/agent-src/commands/agent-handoff.md +100 -48
  6. package/dist/agent-src/commands/challenge-me/vision.md +5 -0
  7. package/dist/agent-src/commands/commit.md +1 -1
  8. package/dist/agent-src/commands/condense.md +19 -64
  9. package/dist/agent-src/commands/evals/agent-handoff.json +13 -1
  10. package/dist/agent-src/commands/evals/rule-compliance-audit.json +46 -0
  11. package/dist/agent-src/commands/feature/plan.md +20 -0
  12. package/dist/agent-src/commands/feature/roadmap.md +19 -0
  13. package/dist/agent-src/commands/memory/promote.md +14 -1
  14. package/dist/agent-src/commands/mode.md +9 -5
  15. package/dist/agent-src/commands/optimize/deep.md +72 -11
  16. package/dist/agent-src/commands/pr/create.md +29 -0
  17. package/dist/agent-src/commands/roadmap/create.md +29 -0
  18. package/dist/agent-src/commands/rule-compliance-audit.md +28 -5
  19. package/dist/agent-src/contexts/authority/commit-mechanics.md +5 -5
  20. package/dist/agent-src/contexts/communication/rules-auto/guidelines-mechanics.md +1 -0
  21. package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
  22. package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +6 -1
  23. package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +4 -1
  24. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +27 -1
  25. package/dist/agent-src/contexts/execution/plan-confidence-gate.md +133 -0
  26. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +5 -2
  27. package/dist/agent-src/profiles/agency.yml +3 -3
  28. package/dist/agent-src/profiles/content_creator.yml +2 -2
  29. package/dist/agent-src/profiles/developer.yml +2 -2
  30. package/dist/agent-src/profiles/finance.yml +1 -1
  31. package/dist/agent-src/profiles/founder.yml +2 -2
  32. package/dist/agent-src/profiles/ops.yml +2 -2
  33. package/dist/agent-src/rules/active-remediation.md +2 -0
  34. package/dist/agent-src/rules/architecture.md +4 -2
  35. package/dist/agent-src/rules/augment-edit-discipline.md +2 -0
  36. package/dist/agent-src/rules/autonomous-execution.md +1 -1
  37. package/dist/agent-src/rules/brand-consistency.md +10 -62
  38. package/dist/agent-src/rules/brand-source-of-truth.md +62 -11
  39. package/dist/agent-src/rules/broken-access-control.md +4 -0
  40. package/dist/agent-src/rules/cli-output-handling.md +5 -0
  41. package/dist/agent-src/rules/code-comment-discipline.md +3 -0
  42. package/dist/agent-src/rules/commit-conventions.md +2 -0
  43. package/dist/agent-src/rules/context-hygiene.md +3 -2
  44. package/dist/agent-src/rules/cross-source-consistency.md +3 -0
  45. package/dist/agent-src/rules/design-fidelity.md +2 -0
  46. package/dist/agent-src/rules/doc-screenshot-hygiene.md +2 -0
  47. package/dist/agent-src/rules/docker-commands.md +4 -0
  48. package/dist/agent-src/rules/domain-adoption-policy.md +2 -0
  49. package/dist/agent-src/rules/domain-safety-disclaimer.md +5 -2
  50. package/dist/agent-src/rules/domain-safety-pii.md +1 -1
  51. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  52. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +9 -0
  53. package/dist/agent-src/rules/image-likeness-and-rights.md +4 -0
  54. package/dist/agent-src/rules/improve-before-implement.md +4 -0
  55. package/dist/agent-src/rules/laravel-routing.md +4 -0
  56. package/dist/agent-src/rules/legal-safety-floor.md +3 -0
  57. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  58. package/dist/agent-src/rules/media-governance-routing.md +5 -0
  59. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  60. package/dist/agent-src/rules/no-roadmap-references.md +2 -0
  61. package/dist/agent-src/rules/notes-first-reasoning.md +2 -0
  62. package/dist/agent-src/rules/output-discipline.md +9 -2
  63. package/dist/agent-src/rules/php-coding.md +2 -0
  64. package/dist/agent-src/rules/prefer-enums-over-literals.md +3 -0
  65. package/dist/agent-src/rules/provider-lifecycle-discipline.md +5 -0
  66. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +2 -0
  67. package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
  68. package/dist/agent-src/rules/rule-type-governance.md +2 -0
  69. package/dist/agent-src/rules/scale-discipline.md +3 -0
  70. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  71. package/dist/agent-src/rules/security-sensitive-stop.md +9 -2
  72. package/dist/agent-src/rules/senior-engineering-discipline.md +6 -0
  73. package/dist/agent-src/rules/skill-quality.md +2 -0
  74. package/dist/agent-src/rules/source-confidentiality.md +4 -0
  75. package/dist/agent-src/rules/source-discovery-gate.md +3 -0
  76. package/dist/agent-src/rules/source-of-truth.md +2 -0
  77. package/dist/agent-src/rules/strategy-safety-floor.md +2 -0
  78. package/dist/agent-src/rules/think-before-action.md +5 -0
  79. package/dist/agent-src/rules/token-budget-discipline.md +2 -2
  80. package/dist/agent-src/rules/ui-audit-gate.md +2 -0
  81. package/dist/agent-src/rules/user-interaction.md +3 -4
  82. package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
  83. package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +4 -4
  84. package/dist/agent-src/skills/copilot-config/SKILL.md +1 -1
  85. package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +7 -4
  86. package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
  87. package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -180
  88. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +100 -0
  89. package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +91 -0
  90. package/dist/agent-src/skills/design-review/SKILL.md +4 -141
  91. package/dist/agent-src/skills/design-review/references/review-communication.md +92 -0
  92. package/dist/agent-src/skills/design-review/references/verification-automation.md +61 -0
  93. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +8 -27
  94. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +31 -0
  95. package/dist/agent-src/skills/fe-design/SKILL.md +4 -289
  96. package/dist/agent-src/skills/fe-design/references/design-patterns.md +227 -0
  97. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +75 -0
  98. package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
  99. package/dist/agent-src/skills/persona-writing/SKILL.md +2 -2
  100. package/dist/agent-src/skills/readme-reviewer/SKILL.md +2 -1
  101. package/dist/agent-src/skills/roadmap-management/SKILL.md +10 -0
  102. package/dist/agent-src/skills/roadmap-writing/SKILL.md +12 -1
  103. package/dist/agent-src/skills/rule-writing/SKILL.md +4 -2
  104. package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
  105. package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
  106. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +3 -1
  107. package/dist/agent-src/skills/token-optimizer/SKILL.md +2 -2
  108. package/dist/agent-src/skills/ui-component-architect/SKILL.md +6 -3
  109. package/dist/agent-src/templates/agent-settings.md +13 -15
  110. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +6 -2
  111. package/dist/agent-src/templates/persona.md +2 -2
  112. package/dist/agent-src/templates/roadmaps.md +13 -1
  113. package/dist/agent-src/templates/rule.md +1 -1
  114. package/dist/agent-src/templates/scripts/work_engine/directives/ui/_fix_lane.ts +52 -0
  115. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +8 -0
  116. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +6 -0
  117. package/dist/agent-src/templates/scripts/work_engine/intent/classify.ts +56 -4
  118. package/dist/agent-src/templates/skill.md +1 -1
  119. package/dist/cli/registry.js +3 -0
  120. package/dist/cli/registry.js.map +1 -1
  121. package/dist/cli-delegate/chunk-AIIUU73N.js +2040 -0
  122. package/dist/cli-delegate/{chunk-ZXXJLL5K.js → chunk-BSLUHV2F.js} +127 -1487
  123. package/dist/cli-delegate/{chunk-H574KOUH.js → chunk-ELMFOQPW.js} +35 -1
  124. package/dist/cli-delegate/chunk-LF2KKJ4Q.js +183 -0
  125. package/dist/cli-delegate/chunk-VSYT7OHO.js +1382 -0
  126. package/dist/cli-delegate/chunk-XGA2NTU4.js +3727 -0
  127. package/dist/cli-delegate/cmd_conformance.js +4 -3
  128. package/dist/cli-delegate/cmd_converge.js +3 -3
  129. package/dist/cli-delegate/cmd_doctor.js +3 -2
  130. package/dist/cli-delegate/cmd_explain.js +36 -36
  131. package/dist/cli-delegate/cmd_export.js +4 -4
  132. package/dist/cli-delegate/cmd_handoff.js +1169 -0
  133. package/dist/cli-delegate/cmd_memory_get.js +35 -3754
  134. package/dist/cli-delegate/cmd_migrate.js +2 -2
  135. package/dist/cli-delegate/cmd_prune.js +4 -4
  136. package/dist/cli-delegate/cmd_route_audit.js +249 -0
  137. package/dist/cli-delegate/cmd_route_explain.js +285 -0
  138. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  139. package/dist/cli-delegate/cmd_sync.js +4 -4
  140. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  141. package/dist/cli-delegate/cmd_update.js +3 -3
  142. package/dist/cli-delegate/cmd_upgrade.js +3 -3
  143. package/dist/cli-delegate/cmd_validate.js +4 -4
  144. package/dist/cli-delegate/cmd_versions.js +3 -3
  145. package/dist/discovery/deprecation-report.md +1 -1
  146. package/dist/discovery/discovery-manifest.json +84 -84
  147. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  148. package/dist/discovery/discovery-manifest.summary.md +1 -1
  149. package/dist/discovery/orphan-report.md +1 -1
  150. package/dist/discovery/packs.json +2 -2
  151. package/dist/discovery/trust-report.md +1 -1
  152. package/dist/discovery/workspaces.json +2 -2
  153. package/dist/hooks/dispatch.js +602 -507
  154. package/dist/install/install.mjs +34 -0
  155. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  156. package/dist/mcp/mcp-cloudflare-catalogue.json +2 -2
  157. package/dist/mcp/registry-manifest.json +4 -4
  158. package/dist/mcp/server.json +2 -2
  159. package/dist/mcp/server.mjs +25 -3
  160. package/dist/router.json +1 -1
  161. package/dist/scripts/_lib/agent_src.js +39 -6
  162. package/dist/scripts/_lib/agent_src.js.map +1 -1
  163. package/dist/server/schemas/settings.js +25 -0
  164. package/dist/server/schemas/settings.js.map +1 -1
  165. package/docs/guidelines/abstraction-thresholds.md +53 -0
  166. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -1
  167. package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +7 -0
  168. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +2 -2
  169. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +5 -3
  170. package/docs/guidelines/agent-infra/size-and-scope.md +8 -2
  171. package/docs/guidelines/component-oriented-and-oop-development.md +11 -6
  172. package/docs/guidelines/docs/readme-size-and-splitting.md +5 -2
  173. package/llms.txt +1 -0
  174. package/package.json +1 -1
  175. package/src/agent-src/templates/scripts/work_engine/directives/ui/_fix_lane.ts +52 -0
  176. package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +8 -0
  177. package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +6 -0
  178. package/src/agent-src/templates/scripts/work_engine/intent/classify.ts +56 -4
  179. package/src/config/agent-settings.template.yml +68 -0
  180. package/src/config/evaluator-budgets.json +8 -11
  181. package/src/config/gate-coverage.yml +70 -0
  182. package/src/scripts/_cli/cmd_explain.ts +41 -36
  183. package/src/scripts/_cli/cmd_handoff.ts +405 -0
  184. package/src/scripts/_cli/cmd_route_audit.ts +290 -0
  185. package/src/scripts/_cli/cmd_route_explain.ts +269 -0
  186. package/src/scripts/_cli/handoff_generate.ts +453 -0
  187. package/src/scripts/_cli/handoff_sessions.ts +435 -0
  188. package/src/scripts/_dispatch.bash +32 -0
  189. package/src/scripts/_lib/agent_src.ts +36 -6
  190. package/src/scripts/_lib/git_env.ts +40 -0
  191. package/src/scripts/_lib/md_table.ts +27 -0
  192. package/src/scripts/_lib/planning_settings.ts +43 -0
  193. package/src/scripts/_lib/release_material.ts +156 -0
  194. package/src/scripts/_lib/router_match.ts +301 -0
  195. package/src/scripts/annotate_r1_outcomes.ts +258 -0
  196. package/src/scripts/check_completion_review.ts +1140 -0
  197. package/src/scripts/check_condensation.ts +2 -1
  198. package/src/scripts/check_finding_dispositions.ts +278 -0
  199. package/src/scripts/check_pack_size.ts +4 -3
  200. package/src/scripts/check_references.ts +1 -0
  201. package/src/scripts/check_release_highlights.ts +300 -0
  202. package/src/scripts/check_release_pr_shape.ts +4 -0
  203. package/src/scripts/check_release_surface_equality.ts +132 -0
  204. package/src/scripts/check_reply_consistency.ts +187 -138
  205. package/src/scripts/compile_router.ts +20 -3
  206. package/src/scripts/dispatch_r2_reviewer.ts +968 -0
  207. package/src/scripts/eval_ui_triviality.ts +156 -0
  208. package/src/scripts/handoff_context_hook.ts +148 -0
  209. package/src/scripts/hook_manifest.yaml +17 -7
  210. package/src/scripts/hooks/concern_registry.ts +2 -0
  211. package/src/scripts/lint_abstraction_thresholds.ts +327 -0
  212. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  213. package/src/scripts/lint_plan_risk_register.ts +931 -0
  214. package/src/scripts/lint_profile_personas.ts +153 -0
  215. package/src/scripts/lint_token_budget_discipline.ts +148 -0
  216. package/src/scripts/lint_trigger_collisions.ts +257 -0
  217. package/src/scripts/release.ts +156 -32
  218. package/src/scripts/release_drill.ts +491 -0
  219. package/src/scripts/router_telemetry.ts +16 -290
  220. package/src/scripts/schemas/command.schema.json +33 -0
  221. package/src/scripts/schemas/rule.schema.json +10 -0
  222. package/src/scripts/self_review_gate.ts +41 -3
  223. package/src/scripts/skill_linter.ts +3 -1
  224. package/src/scripts/smoke/router.sh +1 -1
  225. package/src/scripts/update_counts.ts +60 -12
  226. package/src/server/schemas/settings.ts +41 -0
  227. package/dist/cli-delegate/{chunk-XX6TOPD7.js → chunk-WR6GTRHJ.js} +3 -3
@@ -49,100 +49,12 @@ Provenance + licenses: [`ATTRIBUTION.md`](ATTRIBUTION.md); manifest:
49
49
  layout pattern / chart type / icon system fits this product.
50
50
  - Stack-idiom lookup before writing UI code (`--stack` axis).
51
51
 
52
- ## Cross-task design memory — read DESIGN.md / PRODUCT.md first
53
-
54
- Before running the corpus grounding or producing any design brief, check
55
- the project root for `DESIGN.md` and/or `PRODUCT.md` (written by
56
- `design-system-capture`). If they exist:
57
-
58
- 1. Read `DESIGN.md` — apply its captured visual decisions (radius, shadows,
59
- motion, spacing) as **project constraints** that take precedence over
60
- corpus suggestions. The corpus fills gaps; DESIGN.md overrides.
61
- 2. Read `PRODUCT.md` — note interaction patterns that affect the design
62
- (e.g., destructive-action policy, empty-state approach) so the brief
63
- is consistent with existing product conventions.
64
- 3. After generating the design brief: if a decision was made that isn't yet
65
- in DESIGN.md (e.g., chose a specific shadow for a new elevated surface),
66
- flag it for capture: *"Suggest adding to DESIGN.md: elevated surface shadow = …"*
67
-
68
- Boundary vs `brand-to-tokens`/`.tokens.json`:
69
- - `.tokens.json` = primitive definitions (gray-700 = #374151)
70
- - `DESIGN.md` = usage decisions (elevated surfaces use the gray-700 shadow, 8px radius)
71
- Both are consumed; DESIGN.md takes precedence for usage questions.
72
-
73
- ## Register — brand vs product
74
-
75
- Determine the design register before grounding (see
76
- [`docs/guidelines/design-modes.md`](../../../docs/guidelines/design-modes.md)):
77
- **brand mode** ("the impression IS the product" — marketing, landing, consumer
78
- first-impression) prioritizes distinctive selection; **product mode** ("design
79
- serves the task" — dashboard, admin, workflow) prioritizes earned familiarity
80
- and accessibility. The register changes which corpus selections are appropriate
81
- (distinctive palette/typography in brand mode; predictable, semantic in product
82
- mode). State the register in the Design Read line below.
83
-
84
- **Embedded vs standalone (a third discriminator).** UI **embedded inside a host
85
- surface** — a widget in a slide, a card in a chat, a panel in someone else's
86
- app — follows a **flatter charter** than a greenfield standalone page:
87
- restrained weights, hairline borders, no atmospherics/gradients/shadows that
88
- would fight the host. Select the register per surface (embedded → flat;
89
- standalone → the brand/product register above) — it is a selector, not a fixed
90
- token set (no values vendored; the host's tokens win).
91
-
92
- ## Design Read — articulate intent before generating
93
-
94
- Before producing any design brief or making any style selection, emit one
95
- line that declares the design read:
96
-
97
- ```
98
- Reading this as: <page-kind> for <audience>, <vibe> language, leaning <design-system>.
99
- ```
100
-
101
- Examples:
102
- - `Reading this as: SaaS dashboard for internal ops teams, functional language, leaning Radix/shadcn.`
103
- - `Reading this as: marketing landing for B2C consumer product, playful editorial, leaning custom tokens.`
104
- - `Reading this as: admin panel for technical users, dense/utilitarian language, leaning data-grid primitives.`
105
-
106
- **If context is incomplete:** state so and proceed exploratory — *"Design context incomplete: no audience defined; proposing exploratory direction, expect revision after audience is clarified."* Do NOT block on missing context; do NOT prompt the user with a gate; state the gap and continue.
107
-
108
- ### Taste Dials — quantify, infer, emit
109
-
110
- If `DESIGN.md` declares `## Taste Dials`, use those values. Otherwise infer
111
- three 1–10 dials from the brief and append them to the Design Read line
112
- (`… · dials V/M/D = 6/3/4`) so the user can correct them; on confirmation,
113
- suggest persisting to `DESIGN.md` (via `design-system-capture`). Dials are a
114
- config, not a vibe — never re-infer when `DESIGN.md` already sets them
115
- (no drift across sessions).
116
-
117
- **Dial Inference Table** (brief signal → Variance / Motion / Density, 1–10):
118
-
119
- | Brief signal | V | M | D |
120
- |---|---|---|---|
121
- | minimal / calm / editorial / clean | 3–5 | 2–4 | 2–4 |
122
- | trust / regulated / public-sector / fintech | 3–4 | 2–3 | 4–6 |
123
- | default / unstated | 5–6 | 3–4 | 4–5 |
124
- | data-dense / dashboard / admin / cockpit | 4–6 | 2–3 | 7–9 |
125
- | bold / playful / expressive / awards / Dribbble | 8–10 | 7–10 | 3–5 |
126
-
127
- **Dial → downstream levers** (how a dial value changes generation):
128
-
129
- | Dial | Low (1–3) | High (8–10) |
130
- |---|---|---|
131
- | Variance | symmetric grids, one layout family | asymmetry, varied layout families, off-grid accents |
132
- | Motion | static / `prefers-reduced-motion`-first, opacity-only | choreographed scroll/stagger (still GPU-only, still reduced-motion alt) |
133
- | Density | generous whitespace, large spacing scale, few items/viewport | tight spacing scale, more information per viewport |
134
-
135
- Dials persist in `DESIGN.md`; the stack executors (`tailwind-engineer`,
136
- `react-shadcn-ui`, `blade-ui`, `flux`) read `DESIGN.md` and honour them.
137
-
138
- **Anti-Default Discipline — first-impulse check:** Before committing to any
139
- design direction, cross-check your first impulse against the current-generation
140
- tells in [`design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md)
141
- (§ Current-generation tells — the warm-editorial C5+T2+T7 signature and the
142
- previous-generation C1/C2 gradient) plus the L1/L2 layout defaults. If a tell
143
- was your first reach, name a different direction or explicitly justify why this
144
- brief genuinely calls for it. (The finalization cross-check against the full
145
- catalog is under *Anti-slop discipline* below.)
52
+ ## Section index — load on demand
53
+
54
+ Load the reference file whose sections the task needs — never all of them by default:
55
+
56
+ - [`references/context-and-registers.md`](references/context-and-registers.md) — Cross-task design memory — read DESIGN.md / PRODUCT.md first · Register — brand vs product · Design Read — articulate intent before generating
57
+ - [`references/integration-mapping.md`](references/integration-mapping.md) — `MASTER.md` + page overrides ↔ `state.ui_design` (mapping) · Grounding the review/polish a11y gate (charts + contrast) · Stack guidance (`--stack` axis) · Diagram-type routing — route on the verb · Interplay (who owns what)
146
58
 
147
59
  ## Honesty / real-system grounding
148
60
 
@@ -229,51 +141,6 @@ pairings: query `https://fonts.google.com/specimen/<Family>` (or the
229
141
  `webfonts` API) for metadata, OR propose the nearest curated pairing and
230
142
  say why. Never invent pairing metadata.
231
143
 
232
- ## `MASTER.md` + page overrides ↔ `state.ui_design` (mapping)
233
-
234
- The upstream cross-session memory pattern maps onto our delivery state:
235
-
236
- | Upstream artifact | Our state | Notes |
237
- |---|---|---|
238
- | `design-system/<project>/MASTER.md` | `state.ui_design` (project-level brief: style, tokens, typography, anti-patterns) | The state is the source of truth during a run. |
239
- | `design-system/<project>/pages/<page>.md` | per-page override entries inside `state.ui_design` (e.g. `pages.<page>` dict) | Page rules override project rules for that page only. |
240
-
241
- File persistence stays **opt-in** (`ground … --persist <dir>`) and writes
242
- under the consumer's project as a durable artifact for multi-session
243
- consistency; on a fresh session, re-hydrate `state.ui_design` from
244
- `MASTER.md` + the page file before re-running `design`.
245
-
246
- ## Grounding the review/polish a11y gate (charts + contrast)
247
-
248
- The `review`/`polish` steps gate on `state.ui_review.a11y`. Ground two
249
- finding classes instead of ad-hoc judgment:
250
-
251
- - **Chart-type findings** — the grounding CLI (`ground` via
252
- ./scripts-run) — `…/ground search --manifest … --domain
253
- chart "<data shape>"` → `Accessibility Grade`, `A11y Fallback`,
254
- `Color Guidance` columns justify "wrong chart type / missing colorblind
255
- fallback" findings with a citable row.
256
- - **Contrast findings** — `--domain color "<product>"` returns the
257
- WCAG-adjusted token set; a finding that a hex pair deviates from the
258
- adopted set cites the row instead of eyeballing ratios. Auditing
259
- *method* stays with [`accessibility-auditor`](../accessibility-auditor/SKILL.md).
260
-
261
- ## Stack guidance (`--stack` axis)
262
-
263
- Per-framework Do/Don't corpora (16 stacks) ride the same manifest:
264
-
265
- ```bash
266
- ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
267
- --manifest <skills-root>/design-intelligence/data/manifest.json \
268
- --stack react "list rerender memo" [--filter "Severity=HIGH"]
269
- ```
270
-
271
- Stack executors ([`blade-ui`](../blade-ui/SKILL.md),
272
- [`livewire`](../livewire/SKILL.md), [`flux`](../flux/SKILL.md),
273
- [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md),
274
- [`tailwind-engineer`](../tailwind-engineer/SKILL.md)) pull idiomatic
275
- guidance + docs URLs from here instead of memory.
276
-
277
144
  ## Output format
278
145
 
279
146
  1. Grounded brief candidates per `state.ui_design` slot (layout,
@@ -294,47 +161,6 @@ guidance + docs URLs from here instead of memory.
294
161
  already covers — audit findings outrank corpus suggestions.
295
162
  - Do NOT hide low confidence — the user signs off on the gaps too.
296
163
 
297
- ## Diagram-type routing — route on the verb
298
-
299
- Choose a visualization by the *intent verb*, not the noun. Count the nouns
300
- before you draw (input-complexity triage): 1–2 → inline prose or a single
301
- shape; 3–7 → one diagram; 8+ → split or summarize, never one dense picture.
302
-
303
- | The user asks… | Intent | Draw |
304
- |---|---|---|
305
- | "how does X **work** / flow" | illustrative (intuition) | flowchart / sequence — illustrative default |
306
- | "what is X's **architecture** / structure" | reference (structural) | structural diagram (boxes + typed edges) |
307
- | a **cycle** / loop / lifecycle | — | a **stepper widget**, never a hand-drawn ring |
308
- | a **DB schema / ERD** / entity relations | — | **mermaid**, never hand-placed SVG |
309
-
310
- ### Geometric pre-checks (run BEFORE finalizing an SVG/diagram)
311
-
312
- Ranked by failure rate — procedures, not constants:
313
-
314
- 1. **viewBox safety** — compute the lowest + rightmost element (plus a buffer)
315
- and set the viewBox from that; never assume the default fits.
316
- 2. **arrow-through-box trace** — trace every arrow's path and confirm it does
317
- not cross through an unrelated box before drawing it.
318
- 3. **box-width-from-longest-label** — size each box from its longest label
319
- before placing it, so text never overflows.
320
-
321
- (Reference-only: any color/easing/frame values come from the consumer's tokens
322
- or a maintained upstream — this skill vendors no drawn-asset corpus.)
323
-
324
- ## Interplay (who owns what)
325
-
326
- | Concern | Owner |
327
- |---|---|
328
- | What already exists (components, tokens) | [`existing-ui-audit`](../existing-ui-audit/SKILL.md) — mandatory pre-step; audit findings outrank corpus suggestions |
329
- | What to build (grounded selection) | **this skill** |
330
- | Stack-agnostic heuristics + flow | [`fe-design`](../fe-design/SKILL.md) — invokes this skill for grounding |
331
- | Orchestration gates + locks | `directives/ui/{design,review,polish}.ts` — never import the engine |
332
- | WCAG audit method | [`accessibility-auditor`](../accessibility-auditor/SKILL.md) |
333
- | Token authoring | [`design-tokens`](../design-tokens/SKILL.md) |
334
- | Lo-fi structure exploration (pre-selection) | [`wireframe`](../wireframe/SKILL.md) — disposable greyscale variants |
335
- | Multiple hi-fi options (post-selection) | [`design-variations`](../design-variations/SKILL.md) — grounds each variation via this skill |
336
- | Fixed-canvas slide decks | [`html-deck`](../html-deck/SKILL.md) — own medium, still corpus-grounded |
337
-
338
164
  ## Gotchas
339
165
 
340
166
  - Corpus grounds **pre-action selection** — do not use it as mid-task
@@ -0,0 +1,100 @@
1
+ # design-intelligence — context and registers
2
+
3
+ > Section-level entry point of the `design-intelligence` skill (progressive
4
+ > disclosure, 2026-08-04). Content moved VERBATIM from SKILL.md —
5
+ > load this file when the section index in SKILL.md routes here.
6
+
7
+ ## Cross-task design memory — read DESIGN.md / PRODUCT.md first
8
+
9
+ Before running the corpus grounding or producing any design brief, check
10
+ the project root for `DESIGN.md` and/or `PRODUCT.md` (written by
11
+ `design-system-capture`). If they exist:
12
+
13
+ 1. Read `DESIGN.md` — apply its captured visual decisions (radius, shadows,
14
+ motion, spacing) as **project constraints** that take precedence over
15
+ corpus suggestions. The corpus fills gaps; DESIGN.md overrides.
16
+ 2. Read `PRODUCT.md` — note interaction patterns that affect the design
17
+ (e.g., destructive-action policy, empty-state approach) so the brief
18
+ is consistent with existing product conventions.
19
+ 3. After generating the design brief: if a decision was made that isn't yet
20
+ in DESIGN.md (e.g., chose a specific shadow for a new elevated surface),
21
+ flag it for capture: *"Suggest adding to DESIGN.md: elevated surface shadow = …"*
22
+
23
+ Boundary vs `brand-to-tokens`/`.tokens.json`:
24
+ - `.tokens.json` = primitive definitions (gray-700 = #374151)
25
+ - `DESIGN.md` = usage decisions (elevated surfaces use the gray-700 shadow, 8px radius)
26
+ Both are consumed; DESIGN.md takes precedence for usage questions.
27
+
28
+ ## Register — brand vs product
29
+
30
+ Determine the design register before grounding (see
31
+ [`docs/guidelines/design-modes.md`](../../../../docs/guidelines/design-modes.md)):
32
+ **brand mode** ("the impression IS the product" — marketing, landing, consumer
33
+ first-impression) prioritizes distinctive selection; **product mode** ("design
34
+ serves the task" — dashboard, admin, workflow) prioritizes earned familiarity
35
+ and accessibility. The register changes which corpus selections are appropriate
36
+ (distinctive palette/typography in brand mode; predictable, semantic in product
37
+ mode). State the register in the Design Read line below.
38
+
39
+ **Embedded vs standalone (a third discriminator).** UI **embedded inside a host
40
+ surface** — a widget in a slide, a card in a chat, a panel in someone else's
41
+ app — follows a **flatter charter** than a greenfield standalone page:
42
+ restrained weights, hairline borders, no atmospherics/gradients/shadows that
43
+ would fight the host. Select the register per surface (embedded → flat;
44
+ standalone → the brand/product register above) — it is a selector, not a fixed
45
+ token set (no values vendored; the host's tokens win).
46
+
47
+ ## Design Read — articulate intent before generating
48
+
49
+ Before producing any design brief or making any style selection, emit one
50
+ line that declares the design read:
51
+
52
+ ```
53
+ Reading this as: <page-kind> for <audience>, <vibe> language, leaning <design-system>.
54
+ ```
55
+
56
+ Examples:
57
+ - `Reading this as: SaaS dashboard for internal ops teams, functional language, leaning Radix/shadcn.`
58
+ - `Reading this as: marketing landing for B2C consumer product, playful editorial, leaning custom tokens.`
59
+ - `Reading this as: admin panel for technical users, dense/utilitarian language, leaning data-grid primitives.`
60
+
61
+ **If context is incomplete:** state so and proceed exploratory — *"Design context incomplete: no audience defined; proposing exploratory direction, expect revision after audience is clarified."* Do NOT block on missing context; do NOT prompt the user with a gate; state the gap and continue.
62
+
63
+ ### Taste Dials — quantify, infer, emit
64
+
65
+ If `DESIGN.md` declares `## Taste Dials`, use those values. Otherwise infer
66
+ three 1–10 dials from the brief and append them to the Design Read line
67
+ (`… · dials V/M/D = 6/3/4`) so the user can correct them; on confirmation,
68
+ suggest persisting to `DESIGN.md` (via `design-system-capture`). Dials are a
69
+ config, not a vibe — never re-infer when `DESIGN.md` already sets them
70
+ (no drift across sessions).
71
+
72
+ **Dial Inference Table** (brief signal → Variance / Motion / Density, 1–10):
73
+
74
+ | Brief signal | V | M | D |
75
+ |---|---|---|---|
76
+ | minimal / calm / editorial / clean | 3–5 | 2–4 | 2–4 |
77
+ | trust / regulated / public-sector / fintech | 3–4 | 2–3 | 4–6 |
78
+ | default / unstated | 5–6 | 3–4 | 4–5 |
79
+ | data-dense / dashboard / admin / cockpit | 4–6 | 2–3 | 7–9 |
80
+ | bold / playful / expressive / awards / Dribbble | 8–10 | 7–10 | 3–5 |
81
+
82
+ **Dial → downstream levers** (how a dial value changes generation):
83
+
84
+ | Dial | Low (1–3) | High (8–10) |
85
+ |---|---|---|
86
+ | Variance | symmetric grids, one layout family | asymmetry, varied layout families, off-grid accents |
87
+ | Motion | static / `prefers-reduced-motion`-first, opacity-only | choreographed scroll/stagger (still GPU-only, still reduced-motion alt) |
88
+ | Density | generous whitespace, large spacing scale, few items/viewport | tight spacing scale, more information per viewport |
89
+
90
+ Dials persist in `DESIGN.md`; the stack executors (`tailwind-engineer`,
91
+ `react-shadcn-ui`, `blade-ui`, `flux`) read `DESIGN.md` and honour them.
92
+
93
+ **Anti-Default Discipline — first-impulse check:** Before committing to any
94
+ design direction, cross-check your first impulse against the current-generation
95
+ tells in [`design-antipatterns.md`](../../../../docs/guidelines/design-antipatterns.md)
96
+ (§ Current-generation tells — the warm-editorial C5+T2+T7 signature and the
97
+ previous-generation C1/C2 gradient) plus the L1/L2 layout defaults. If a tell
98
+ was your first reach, name a different direction or explicitly justify why this
99
+ brief genuinely calls for it. (The finalization cross-check against the full
100
+ catalog is under *Anti-slop discipline* below.)
@@ -0,0 +1,91 @@
1
+ # design-intelligence — integration mapping
2
+
3
+ > Section-level entry point of the `design-intelligence` skill (progressive
4
+ > disclosure, 2026-08-04). Content moved VERBATIM from SKILL.md —
5
+ > load this file when the section index in SKILL.md routes here.
6
+
7
+ ## `MASTER.md` + page overrides ↔ `state.ui_design` (mapping)
8
+
9
+ The upstream cross-session memory pattern maps onto our delivery state:
10
+
11
+ | Upstream artifact | Our state | Notes |
12
+ |---|---|---|
13
+ | `design-system/<project>/MASTER.md` | `state.ui_design` (project-level brief: style, tokens, typography, anti-patterns) | The state is the source of truth during a run. |
14
+ | `design-system/<project>/pages/<page>.md` | per-page override entries inside `state.ui_design` (e.g. `pages.<page>` dict) | Page rules override project rules for that page only. |
15
+
16
+ File persistence stays **opt-in** (`ground … --persist <dir>`) and writes
17
+ under the consumer's project as a durable artifact for multi-session
18
+ consistency; on a fresh session, re-hydrate `state.ui_design` from
19
+ `MASTER.md` + the page file before re-running `design`.
20
+
21
+ ## Grounding the review/polish a11y gate (charts + contrast)
22
+
23
+ The `review`/`polish` steps gate on `state.ui_review.a11y`. Ground two
24
+ finding classes instead of ad-hoc judgment:
25
+
26
+ - **Chart-type findings** — the grounding CLI (`ground` via
27
+ ./scripts-run) — `…/ground search --manifest … --domain
28
+ chart "<data shape>"` → `Accessibility Grade`, `A11y Fallback`,
29
+ `Color Guidance` columns justify "wrong chart type / missing colorblind
30
+ fallback" findings with a citable row.
31
+ - **Contrast findings** — `--domain color "<product>"` returns the
32
+ WCAG-adjusted token set; a finding that a hex pair deviates from the
33
+ adopted set cites the row instead of eyeballing ratios. Auditing
34
+ *method* stays with [`accessibility-auditor`](../accessibility-auditor/SKILL.md).
35
+
36
+ ## Stack guidance (`--stack` axis)
37
+
38
+ Per-framework Do/Don't corpora (16 stacks) ride the same manifest:
39
+
40
+ ```bash
41
+ ./scripts-run <skills-root>/corpus-grounding/scripts/ground search \
42
+ --manifest <skills-root>/design-intelligence/data/manifest.json \
43
+ --stack react "list rerender memo" [--filter "Severity=HIGH"]
44
+ ```
45
+
46
+ Stack executors ([`blade-ui`](../blade-ui/SKILL.md),
47
+ [`livewire`](../livewire/SKILL.md), [`flux`](../flux/SKILL.md),
48
+ [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md),
49
+ [`tailwind-engineer`](../tailwind-engineer/SKILL.md)) pull idiomatic
50
+ guidance + docs URLs from here instead of memory.
51
+
52
+ ## Diagram-type routing — route on the verb
53
+
54
+ Choose a visualization by the *intent verb*, not the noun. Count the nouns
55
+ before you draw (input-complexity triage): 1–2 → inline prose or a single
56
+ shape; 3–7 → one diagram; 8+ → split or summarize, never one dense picture.
57
+
58
+ | The user asks… | Intent | Draw |
59
+ |---|---|---|
60
+ | "how does X **work** / flow" | illustrative (intuition) | flowchart / sequence — illustrative default |
61
+ | "what is X's **architecture** / structure" | reference (structural) | structural diagram (boxes + typed edges) |
62
+ | a **cycle** / loop / lifecycle | — | a **stepper widget**, never a hand-drawn ring |
63
+ | a **DB schema / ERD** / entity relations | — | **mermaid**, never hand-placed SVG |
64
+
65
+ ### Geometric pre-checks (run BEFORE finalizing an SVG/diagram)
66
+
67
+ Ranked by failure rate — procedures, not constants:
68
+
69
+ 1. **viewBox safety** — compute the lowest + rightmost element (plus a buffer)
70
+ and set the viewBox from that; never assume the default fits.
71
+ 2. **arrow-through-box trace** — trace every arrow's path and confirm it does
72
+ not cross through an unrelated box before drawing it.
73
+ 3. **box-width-from-longest-label** — size each box from its longest label
74
+ before placing it, so text never overflows.
75
+
76
+ (Reference-only: any color/easing/frame values come from the consumer's tokens
77
+ or a maintained upstream — this skill vendors no drawn-asset corpus.)
78
+
79
+ ## Interplay (who owns what)
80
+
81
+ | Concern | Owner |
82
+ |---|---|
83
+ | What already exists (components, tokens) | [`existing-ui-audit`](../existing-ui-audit/SKILL.md) — mandatory pre-step; audit findings outrank corpus suggestions |
84
+ | What to build (grounded selection) | **this skill** |
85
+ | Stack-agnostic heuristics + flow | [`fe-design`](../fe-design/SKILL.md) — invokes this skill for grounding |
86
+ | Orchestration gates + locks | `directives/ui/{design,review,polish}.ts` — never import the engine |
87
+ | WCAG audit method | [`accessibility-auditor`](../accessibility-auditor/SKILL.md) |
88
+ | Token authoring | [`design-tokens`](../design-tokens/SKILL.md) |
89
+ | Lo-fi structure exploration (pre-selection) | [`wireframe`](../wireframe/SKILL.md) — disposable greyscale variants |
90
+ | Multiple hi-fi options (post-selection) | [`design-variations`](../design-variations/SKILL.md) — grounds each variation via this skill |
91
+ | Fixed-canvas slide decks | [`html-deck`](../html-deck/SKILL.md) — own medium, still corpus-grounded |
@@ -160,127 +160,12 @@ When a finding warrants a remediation recommendation, prefer in this order:
160
160
  suggesting a different easing curve.* The same applies to decorative elements,
161
161
  excessive copy, and redundant UI chrome.
162
162
 
163
- ## Before / After / Why output format
163
+ ## Section index — load on demand
164
164
 
165
- When reporting a finding with a specific remediation, use this table format:
165
+ Load the reference file whose sections the review needs — never all of them by default:
166
166
 
167
- | Field | Content |
168
- |---|---|
169
- | **Before** | The current state (quote the code, value, or describe the pattern) |
170
- | **After** | The corrected state (specific value or alternative) |
171
- | **Why** | The mechanism: why is Before wrong and After better? (one sentence, states the principle) |
172
-
173
- **Wrong format** (do not use):
174
- ```
175
- Before:
176
- button { transition: all 0.3s ease; }
177
- After:
178
- button { transition: transform 0.2s ease-out, opacity 0.2s ease-out; }
179
- ```
180
-
181
- **Right format:**
182
-
183
- | | |
184
- |---|---|
185
- | **Before** | `transition: all 0.3s ease` |
186
- | **After** | `transition: transform 0.2s ease-out, opacity 0.2s ease-out` |
187
- | **Why** | `transition: all` animates layout properties on every state change, causing browser reflow; enumerate only the properties that move. |
188
-
189
- The Why column carries the reasoning — it's the part that teaches the developer
190
- and prevents the same finding from recurring.
191
-
192
- ## Communication principles
193
-
194
- ### Problems over prescriptions
195
-
196
- Describe **what's wrong and why it matters**, not how to fix it.
197
-
198
- ```
199
- ❌ "Change margin to 16px"
200
- ✅ "Spacing feels inconsistent with adjacent elements, creating visual clutter near the CTA."
201
- ```
202
-
203
- ### Triage matrix
204
-
205
- Every issue gets a severity:
206
-
207
- | Severity | Meaning | Action |
208
- |---|---|---|
209
- | **Blocker** | Must fix before merge | Blocks PR |
210
- | **High** | Should fix before merge | Strong recommendation |
211
- | **Medium** | Consider for follow-up | Suggestion |
212
- | **Nitpick** | Optional polish | Prefix with "Nit:" |
213
-
214
- ### Evidence-based
215
-
216
- Screenshots required for all visual issues. Reference specific viewport and state.
217
-
218
- ### Start positive
219
-
220
- Acknowledge what works well before listing issues.
221
-
222
- ## Report structure
223
-
224
- ```markdown
225
- ## Design Review Summary
226
- [Positive opening + overall assessment]
227
-
228
- ### 🚫 Blockers
229
- [Critical issues — must fix]
230
-
231
- ### ⚠️ High Priority
232
- [Significant issues — should fix]
233
-
234
- ### 💡 Suggestions
235
- [Improvements for follow-up]
236
-
237
- ### ✨ Nitpicks
238
- [Minor aesthetic details]
239
-
240
- ### Testing Evidence
241
- [Screenshots: Desktop, Tablet, Mobile]
242
-
243
- ### Next Steps
244
- 1. [Fix blockers]
245
- 2. [Address high-priority]
246
-
247
- **Overall: [Ready to merge | Needs revisions]**
248
- ```
249
-
250
-
251
- ## Visual QA with browser automation
252
-
253
- When Playwright MCP or browser tools are available, use them for automated visual verification:
254
-
255
- ### Before/After comparison
256
-
257
- 1. **Capture baseline** — screenshot before changes at all 3 viewports.
258
- 2. **Apply changes** — deploy or hot-reload.
259
- 3. **Capture after** — screenshot at the same viewports and states.
260
- 4. **Compare** — visually diff the screenshots, flag regressions.
261
-
262
- ### State-based verification
263
-
264
- Don't just screenshot the default state. Capture:
265
-
266
- | State | How to trigger |
267
- |---|---|
268
- | Empty | Remove data, check empty state UI |
269
- | Loading | Throttle network, capture skeleton/spinner |
270
- | Error | Force an error response, check error UI |
271
- | Overflow | Add very long text, many items |
272
- | Interactive | Hover, focus, open dropdowns |
273
-
274
- ### Mockup-to-code verification
275
-
276
- When implementing from a design mockup or screenshot:
277
-
278
- 1. **Open the mockup** — use the provided image/screenshot.
279
- 2. **Implement** — build the UI component.
280
- 3. **Side-by-side** — compare mockup vs. implementation at the same viewport.
281
- 4. **Flag deviations** — spacing, colors, typography, alignment differences.
282
-
283
- This is especially useful when the user provides a screenshot or Figma export as a reference.
167
+ - [`references/review-communication.md`](references/review-communication.md) — Before / After / Why output format · Communication principles · Report structure · Design Review Summary
168
+ - [`references/verification-automation.md`](references/verification-automation.md) — Visual QA with browser automation · Async-verifier pattern (keep the main context clean)
284
169
 
285
170
  ## Output format
286
171
 
@@ -297,28 +182,6 @@ This is especially useful when the user provides a screenshot or Figma export as
297
182
  - WCAG
298
183
  - responsive
299
184
 
300
- ## Async-verifier pattern (keep the main context clean)
301
-
302
- For a review that needs browser probing, use an **async background verifier**
303
- rather than self-screenshotting inline: fork a verifier subagent with its own
304
- view — it takes the screenshots, probes viewports, and checks states, then
305
- **stays silent on pass and surfaces only real, actionable problems** (never
306
- nitpicks). The main agent does not self-screenshot, so its context stays clean
307
- for the actual review reasoning. This is an orchestration pattern —
308
- dispatch it via [`subagent-orchestration`](../subagent-orchestration/SKILL.md)
309
- and position it against [`verify-repair-loop`](../verify-repair-loop/SKILL.md)
310
- (the existing verify skill); it complements them, it does not duplicate them.
311
-
312
- **Why the audit passes stay serial (not a parallel-4 fan-out).** A fan-out of
313
- a11y + slop + hierarchy + states across four subagents was evaluated and
314
- deferred: the passes share one live browser/navigation session and later phases
315
- build on state established by earlier ones, so they are not cleanly independent;
316
- and the expensive part — browser probing / screenshots — is already offloaded by
317
- the async verifier above, which captures the fan-out's main win without spinning
318
- up four separate views. Reconsider only when `design-review` runs as a standalone
319
- heavy batch over many *independent* surfaces, where per-surface
320
- `do-in-parallel` genuinely pays.
321
-
322
185
  ## Gotcha
323
186
 
324
187
  - Don't review design without understanding the user's constraints (time, resources, scope).
@@ -0,0 +1,92 @@
1
+ # design-review — review communication
2
+
3
+ > Section-level entry point of the `design-review` skill (progressive
4
+ > disclosure, 2026-08-04). Content moved VERBATIM from SKILL.md —
5
+ > load this file when the section index in SKILL.md routes here.
6
+
7
+ ## Before / After / Why output format
8
+
9
+ When reporting a finding with a specific remediation, use this table format:
10
+
11
+ | Field | Content |
12
+ |---|---|
13
+ | **Before** | The current state (quote the code, value, or describe the pattern) |
14
+ | **After** | The corrected state (specific value or alternative) |
15
+ | **Why** | The mechanism: why is Before wrong and After better? (one sentence, states the principle) |
16
+
17
+ **Wrong format** (do not use):
18
+ ```
19
+ Before:
20
+ button { transition: all 0.3s ease; }
21
+ After:
22
+ button { transition: transform 0.2s ease-out, opacity 0.2s ease-out; }
23
+ ```
24
+
25
+ **Right format:**
26
+
27
+ | | |
28
+ |---|---|
29
+ | **Before** | `transition: all 0.3s ease` |
30
+ | **After** | `transition: transform 0.2s ease-out, opacity 0.2s ease-out` |
31
+ | **Why** | `transition: all` animates layout properties on every state change, causing browser reflow; enumerate only the properties that move. |
32
+
33
+ The Why column carries the reasoning — it's the part that teaches the developer
34
+ and prevents the same finding from recurring.
35
+
36
+ ## Communication principles
37
+
38
+ ### Problems over prescriptions
39
+
40
+ Describe **what's wrong and why it matters**, not how to fix it.
41
+
42
+ ```
43
+ ❌ "Change margin to 16px"
44
+ ✅ "Spacing feels inconsistent with adjacent elements, creating visual clutter near the CTA."
45
+ ```
46
+
47
+ ### Triage matrix
48
+
49
+ Every issue gets a severity:
50
+
51
+ | Severity | Meaning | Action |
52
+ |---|---|---|
53
+ | **Blocker** | Must fix before merge | Blocks PR |
54
+ | **High** | Should fix before merge | Strong recommendation |
55
+ | **Medium** | Consider for follow-up | Suggestion |
56
+ | **Nitpick** | Optional polish | Prefix with "Nit:" |
57
+
58
+ ### Evidence-based
59
+
60
+ Screenshots required for all visual issues. Reference specific viewport and state.
61
+
62
+ ### Start positive
63
+
64
+ Acknowledge what works well before listing issues.
65
+
66
+ ## Report structure
67
+
68
+ ```markdown
69
+ ## Design Review Summary
70
+ [Positive opening + overall assessment]
71
+
72
+ ### 🚫 Blockers
73
+ [Critical issues — must fix]
74
+
75
+ ### ⚠️ High Priority
76
+ [Significant issues — should fix]
77
+
78
+ ### 💡 Suggestions
79
+ [Improvements for follow-up]
80
+
81
+ ### ✨ Nitpicks
82
+ [Minor aesthetic details]
83
+
84
+ ### Testing Evidence
85
+ [Screenshots: Desktop, Tablet, Mobile]
86
+
87
+ ### Next Steps
88
+ 1. [Fix blockers]
89
+ 2. [Address high-priority]
90
+
91
+ **Overall: [Ready to merge | Needs revisions]**
92
+ ```