@event4u/agent-config 9.17.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 (128) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +79 -182
  3. package/dist/agent-src/commands/challenge-me/vision.md +5 -0
  4. package/dist/agent-src/commands/evals/rule-compliance-audit.json +46 -0
  5. package/dist/agent-src/commands/feature/plan.md +20 -0
  6. package/dist/agent-src/commands/feature/roadmap.md +19 -0
  7. package/dist/agent-src/commands/pr/create.md +29 -0
  8. package/dist/agent-src/commands/roadmap/create.md +29 -0
  9. package/dist/agent-src/commands/rule-compliance-audit.md +28 -5
  10. package/dist/agent-src/contexts/execution/plan-confidence-gate.md +133 -0
  11. package/dist/agent-src/rules/active-remediation.md +2 -0
  12. package/dist/agent-src/rules/architecture.md +2 -0
  13. package/dist/agent-src/rules/augment-edit-discipline.md +2 -0
  14. package/dist/agent-src/rules/brand-consistency.md +10 -62
  15. package/dist/agent-src/rules/brand-source-of-truth.md +62 -11
  16. package/dist/agent-src/rules/broken-access-control.md +4 -0
  17. package/dist/agent-src/rules/cli-output-handling.md +5 -0
  18. package/dist/agent-src/rules/code-comment-discipline.md +3 -0
  19. package/dist/agent-src/rules/commit-conventions.md +2 -0
  20. package/dist/agent-src/rules/cross-source-consistency.md +3 -0
  21. package/dist/agent-src/rules/design-fidelity.md +2 -0
  22. package/dist/agent-src/rules/doc-screenshot-hygiene.md +2 -0
  23. package/dist/agent-src/rules/docker-commands.md +4 -0
  24. package/dist/agent-src/rules/domain-adoption-policy.md +2 -0
  25. package/dist/agent-src/rules/domain-safety-disclaimer.md +5 -2
  26. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  27. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +9 -0
  28. package/dist/agent-src/rules/image-likeness-and-rights.md +4 -0
  29. package/dist/agent-src/rules/improve-before-implement.md +4 -0
  30. package/dist/agent-src/rules/laravel-routing.md +4 -0
  31. package/dist/agent-src/rules/legal-safety-floor.md +3 -0
  32. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  33. package/dist/agent-src/rules/media-governance-routing.md +5 -0
  34. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  35. package/dist/agent-src/rules/no-roadmap-references.md +2 -0
  36. package/dist/agent-src/rules/notes-first-reasoning.md +2 -0
  37. package/dist/agent-src/rules/php-coding.md +2 -0
  38. package/dist/agent-src/rules/prefer-enums-over-literals.md +3 -0
  39. package/dist/agent-src/rules/provider-lifecycle-discipline.md +5 -0
  40. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +2 -0
  41. package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
  42. package/dist/agent-src/rules/rule-type-governance.md +2 -0
  43. package/dist/agent-src/rules/scale-discipline.md +3 -0
  44. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  45. package/dist/agent-src/rules/security-sensitive-stop.md +9 -2
  46. package/dist/agent-src/rules/senior-engineering-discipline.md +6 -0
  47. package/dist/agent-src/rules/skill-quality.md +2 -0
  48. package/dist/agent-src/rules/source-confidentiality.md +4 -0
  49. package/dist/agent-src/rules/source-discovery-gate.md +3 -0
  50. package/dist/agent-src/rules/source-of-truth.md +2 -0
  51. package/dist/agent-src/rules/strategy-safety-floor.md +2 -0
  52. package/dist/agent-src/rules/think-before-action.md +5 -0
  53. package/dist/agent-src/rules/ui-audit-gate.md +2 -0
  54. package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -180
  55. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +100 -0
  56. package/dist/agent-src/skills/design-intelligence/references/integration-mapping.md +91 -0
  57. package/dist/agent-src/skills/design-review/SKILL.md +4 -141
  58. package/dist/agent-src/skills/design-review/references/review-communication.md +92 -0
  59. package/dist/agent-src/skills/design-review/references/verification-automation.md +61 -0
  60. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +8 -27
  61. package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +31 -0
  62. package/dist/agent-src/skills/fe-design/SKILL.md +4 -289
  63. package/dist/agent-src/skills/fe-design/references/design-patterns.md +227 -0
  64. package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +75 -0
  65. package/dist/agent-src/skills/roadmap-management/SKILL.md +10 -0
  66. package/dist/agent-src/skills/roadmap-writing/SKILL.md +12 -1
  67. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  68. package/dist/agent-src/templates/roadmaps.md +12 -0
  69. package/dist/agent-src/templates/scripts/work_engine/directives/ui/_fix_lane.ts +52 -0
  70. package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +8 -0
  71. package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +6 -0
  72. package/dist/agent-src/templates/scripts/work_engine/intent/classify.ts +56 -4
  73. package/dist/cli/registry.js +2 -0
  74. package/dist/cli/registry.js.map +1 -1
  75. package/dist/cli-delegate/chunk-AIIUU73N.js +2040 -0
  76. package/dist/cli-delegate/{chunk-IMSXPRVH.js → chunk-ELMFOQPW.js} +11 -0
  77. package/dist/cli-delegate/chunk-LF2KKJ4Q.js +183 -0
  78. package/dist/cli-delegate/cmd_explain.js +36 -36
  79. package/dist/cli-delegate/cmd_export.js +1 -1
  80. package/dist/cli-delegate/cmd_handoff.js +203 -2228
  81. package/dist/cli-delegate/cmd_prune.js +1 -1
  82. package/dist/cli-delegate/cmd_route_audit.js +249 -0
  83. package/dist/cli-delegate/cmd_route_explain.js +285 -0
  84. package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
  85. package/dist/cli-delegate/cmd_sync.js +1 -1
  86. package/dist/cli-delegate/cmd_uninstall.js +1 -1
  87. package/dist/cli-delegate/cmd_validate.js +1 -1
  88. package/dist/discovery/deprecation-report.md +1 -1
  89. package/dist/discovery/discovery-manifest.json +57 -57
  90. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  91. package/dist/discovery/discovery-manifest.summary.md +1 -1
  92. package/dist/discovery/orphan-report.md +1 -1
  93. package/dist/discovery/packs.json +2 -2
  94. package/dist/discovery/trust-report.md +1 -1
  95. package/dist/discovery/workspaces.json +2 -2
  96. package/dist/install/install.mjs +11 -0
  97. package/dist/mcp/registry-manifest.json +1 -1
  98. package/dist/mcp/server.json +2 -2
  99. package/dist/router.json +1 -1
  100. package/dist/server/schemas/settings.js +12 -0
  101. package/dist/server/schemas/settings.js.map +1 -1
  102. package/package.json +1 -1
  103. package/src/agent-src/templates/scripts/work_engine/directives/ui/_fix_lane.ts +52 -0
  104. package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +8 -0
  105. package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +6 -0
  106. package/src/agent-src/templates/scripts/work_engine/intent/classify.ts +56 -4
  107. package/src/config/agent-settings.template.yml +46 -0
  108. package/src/config/evaluator-budgets.json +3 -3
  109. package/src/config/gate-coverage.yml +40 -0
  110. package/src/scripts/_cli/cmd_explain.ts +41 -36
  111. package/src/scripts/_cli/cmd_route_audit.ts +290 -0
  112. package/src/scripts/_cli/cmd_route_explain.ts +269 -0
  113. package/src/scripts/_dispatch.bash +23 -0
  114. package/src/scripts/_lib/git_env.ts +40 -0
  115. package/src/scripts/_lib/md_table.ts +27 -0
  116. package/src/scripts/_lib/planning_settings.ts +43 -0
  117. package/src/scripts/_lib/router_match.ts +301 -0
  118. package/src/scripts/annotate_r1_outcomes.ts +258 -0
  119. package/src/scripts/check_completion_review.ts +1140 -0
  120. package/src/scripts/compile_router.ts +20 -3
  121. package/src/scripts/dispatch_r2_reviewer.ts +968 -0
  122. package/src/scripts/eval_ui_triviality.ts +156 -0
  123. package/src/scripts/lint_abstraction_thresholds.ts +3 -1
  124. package/src/scripts/lint_plan_risk_register.ts +931 -0
  125. package/src/scripts/lint_trigger_collisions.ts +257 -0
  126. package/src/scripts/router_telemetry.ts +16 -290
  127. package/src/scripts/schemas/rule.schema.json +10 -0
  128. package/src/server/schemas/settings.ts +18 -0
@@ -73,297 +73,12 @@ implementation skill, not from here.
73
73
  > present an ungrounded pick as grounded, and never record a missing pack as
74
74
  > an evidence gap.
75
75
 
76
- ## Component Architecture
76
+ ## Section index — load on demand
77
77
 
78
- ### Page structure (universal shape)
78
+ Load the reference file whose sections the task needs — never all of them by default:
79
79
 
80
- ```
81
- Page layout
82
- ├── Header (static)
83
- ├── Navigation (interactive — active state)
84
- ├── Content area
85
- │ ├── Page heading + actions (static)
86
- │ ├── Filters (interactive — reactive)
87
- │ ├── Data display (interactive — table / cards)
88
- │ └── Pagination (interactive)
89
- └── Footer (static)
90
- ```
91
-
92
- The stack-specific mapping (Blade partial vs. Livewire component vs.
93
- React island vs. Vue SFC) is the apply-step's concern, not this skill's.
94
-
95
- ### When to use what (kind, not framework)
96
-
97
- | Kind | When | Example |
98
- |---|---|---|
99
- | **Static partial** | No interactivity, server-rendered only | Header, footer, static info |
100
- | **Reusable UI component** | Props-only, no state | Button, badge, card shell |
101
- | **Stateful component** | Needs server interaction or local state | Forms, tables, filters |
102
- | **Library primitive** | Standard UI from a design system | Modal, dropdown, input, toast |
103
- | **Client-only micro-interaction** | No server roundtrip needed | Toggle, accordion, clipboard |
104
-
105
- ### Component granularity
106
-
107
- - **One stateful component per concern** — don't build mega-components.
108
- - **Compose with reusable UI components** for shared shells, headers, fields.
109
- - **Use the project's library primitives first** — never rebuild what the design system already provides (audit findings tell you which).
110
- - **Extract a props-only UI shell when used 3+ times** — DRY applies to UI too; stateful components carry a higher bar (~4 + real state) — per-class canon: [`abstraction-thresholds`](../../../docs/guidelines/abstraction-thresholds.md).
111
- - **Component workshop when the project is large enough** — for a real, growing shared-component library, isolate and document each reusable component in a component workshop so it stays discoverable and reused, not re-invented; skip it for a small surface of one-offs. Tool-specific setup is a carve-out (Storybook et al.) — see the implementation skill (e.g. [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md) § Component workshop), never a generic mandate.
112
-
113
- ## Form Design
114
-
115
- ### Principles
116
-
117
- 1. **Labels always visible** — no placeholder-only inputs
118
- 2. **Validation on blur + submit** — immediate feedback, not on every keystroke
119
- 3. **Error messages below the field** — red text, specific message
120
- 4. **Required fields marked** — asterisk (*) or "(required)" label
121
- 5. **Logical grouping** — related fields in sections with headings
122
- 6. **Primary action prominent** — submit button stands out, cancel is secondary
123
-
124
- ### Layout patterns
125
-
126
- | Fields | Layout | When |
127
- |---|---|---|
128
- | 1–3 fields | Single column | Simple forms (login, search) |
129
- | 4–8 fields | Two columns on desktop, single on mobile | Standard CRUD forms |
130
- | 8+ fields | Sections with headings or tabs/steps | Complex entity forms |
131
- | Related pairs | Side by side (first/last name, city/zip) | Logically paired fields |
132
-
133
- ### Multi-step forms
134
-
135
- ```
136
- Step indicator (1 — 2 — 3)
137
- ├── Step 1: Basic info → Next
138
- ├── Step 2: Details → Back / Next
139
- └── Step 3: Review + Submit → Back / Submit
140
- ```
141
-
142
- - Show progress indicator (step numbers or progress bar)
143
- - Allow going back without losing data
144
- - Validate each step before allowing next
145
- - Show summary on final step
146
-
147
- ## Table Design
148
-
149
- ### Principles
150
-
151
- 1. **Right-align numbers** — easier to compare
152
- 2. **Left-align text** — natural reading direction
153
- 3. **Sortable columns** — click header to sort
154
- 4. **Sticky header** — visible when scrolling long tables
155
- 5. **Row actions** — edit/delete as icon buttons or dropdown menu
156
- 6. **Empty state** — helpful message when no data, not just blank
157
-
158
- ### Responsive tables
159
-
160
- | Screen | Strategy |
161
- |---|---|
162
- | Desktop (≥1024px) | Full table with all columns |
163
- | Tablet (768–1023px) | Hide less important columns |
164
- | Mobile (<768px) | Card layout or horizontal scroll |
165
-
166
- ### Pagination
167
-
168
- - Default: 25 rows per page
169
- - Show total count: "Showing 1–25 of 142"
170
- - Allow page size change (10, 25, 50, 100)
171
- - Prefer server-side pagination — avoid loading the full set client-side
172
-
173
- ## Responsive Strategy
174
-
175
- ### Breakpoints (Tailwind reference scale)
176
-
177
- | Prefix | Min width | Target |
178
- |---|---|---|
179
- | `sm:` | 640px | Large phones |
180
- | `md:` | 768px | Tablets |
181
- | `lg:` | 1024px | Small laptops |
182
- | `xl:` | 1280px | Desktops |
183
- | `2xl:` | 1536px | Large screens |
184
-
185
- ### Mobile-first approach
186
-
187
- 1. Design for mobile first (default styles)
188
- 2. Add complexity at larger breakpoints
189
- 3. Test at each breakpoint, not just desktop
190
-
191
- ### Common patterns
192
-
193
- | Element | Mobile | Desktop |
194
- |---|---|---|
195
- | Navigation | Hamburger menu | Sidebar or top nav |
196
- | Forms | Single column | Two columns |
197
- | Tables | Cards or scroll | Full table |
198
- | Actions | Bottom sheet / FAB | Inline buttons |
199
- | Filters | Collapsible panel | Sidebar or inline |
200
-
201
- ## Accessibility (a11y)
202
-
203
- ### Minimum requirements
204
-
205
- - **Color contrast:** 4.5:1 for text, 3:1 for large text (WCAG AA)
206
- - **Keyboard navigation:** All interactive elements reachable via Tab
207
- - **Focus indicators:** Visible focus ring on all focusable elements
208
- - **Alt text:** All meaningful images have descriptive alt text
209
- - **ARIA labels:** Interactive elements without visible text need `aria-label`
210
- - **Semantic HTML:** Use `<button>`, `<nav>`, `<main>`, `<form>` — not `<div>` for everything
211
-
212
- ### Common mistakes
213
-
214
- | Mistake | Fix |
215
- |---|---|
216
- | `<div onclick>` | Use `<button>` |
217
- | Color-only status | Add icon or text alongside color |
218
- | Missing form labels | Add `<label for="...">` |
219
- | Auto-playing content | Provide pause/stop control |
220
- | Tiny click targets | Min 44×44px touch target |
221
-
222
- ## Motion — decision-tree and rationale
223
-
224
- Before adding any animation to a UI element, run through this decision tree:
225
-
226
- **1. Should this animate at all?**
227
- - Used 100+ times per day (keyboard shortcut, command palette)? **No animation. Why:** animations on high-frequency interactions feel sluggish; users wait for them on every invocation. Raycast has no open/close animation by design.
228
- - Triggered by user action with visible result (button → state change)? **Micro-feedback only (< 160ms).** Why: quick enough to feel instant, visible enough to confirm the action.
229
- - Modal/overlay/sheet entering/exiting? **Animate. Why:** position change needs motion to maintain spatial continuity.
230
- - Background process with no user action? **No animation.** Why: unexplained motion is disorienting.
231
-
232
- **2. Which easing?**
233
- - Entering (element appearing)? **ease-out** (starts fast, slows to rest). Why: the element arriving quickly signals responsiveness; the deceleration feels natural as it settles.
234
- - Exiting (element disappearing)? **ease-in** (starts slow, accelerates out). Why: the reverse is true — fast exit signals completion.
235
- - **Never ease-in for entering elements.** Why: ease-in delays the initial movement — the exact moment the user is watching most closely — making it feel slow even at the same total duration.
236
- - **Never bounce or elastic easing in UI.** Why: bounce draws attention to the animation itself, not the content; it feels dated.
237
-
238
- **3. How long?**
239
- - Button/micro-feedback: 100–160ms. Tooltip: 100ms. Dropdown open: 150–200ms. Modal: 200–350ms. Page transition: 300–500ms. Above 500ms: almost never.
240
- - **Never animate layout properties** (width, height, top, left, padding). Why: triggers browser layout recalculation on every frame; always solvable with `transform`.
241
- - **Always add `@media (prefers-reduced-motion: reduce)`** — gentler animation (reduced distance/opacity), NOT display:none. Why: vestibular disorders make motion UI unusable; reducing is better than removing.
242
-
243
- **4. What to animate?**
244
- Animate `transform` and `opacity` only. Why: these run on the GPU compositor thread, not the main thread; they never trigger layout or paint.
245
- `scale(0)` → `scale(1)` is wrong. Why: nothing in the real world appears from nothing. Use `scale(0.95)` + `opacity: 0` → `scale(1)` + `opacity: 1` instead.
246
-
247
- ## UX Principles
248
-
249
- 1. **Feedback** — Every action gets a response (toast, loading state, success message). **Why:** users interpret no feedback as failure.
250
- 2. **Forgiveness** — Undo beats confirmation dialogs. Users click through confirmations mindlessly. **Why:** remove destructively then show undo toast; actually delete after toast expires.
251
- 3. **Consistency** — Same patterns for same interactions across the app. **Why:** predictability reduces cognitive load; inconsistency forces users to re-learn.
252
- 4. **Progressive disclosure** — Show basics first, details on demand. **Why:** premature complexity overwhelms; reveal information as it becomes relevant.
253
- 5. **Loading states** — Skeleton screens preferred over spinners. **Why:** skeletons reduce perceived wait time by showing structure immediately.
254
- 6. **Error recovery** — Clear error messages with suggested actions. **Why:** "something went wrong" gives the user nothing to do; a specific message with a next step reduces support burden.
255
-
256
- ## Craft details — typography & imagery
257
-
258
- - **`text-wrap: pretty` on body copy** — avoids widows/orphans without manual
259
- breaks; cheap, no layout risk. (Display headlines: `text-wrap: balance`.)
260
- - **Honest placeholders over weak assets** — when the real image/illustration
261
- is missing, use a striped placeholder with a monospace size label
262
- (`repeating-linear-gradient(45deg, #E5E5E5 0 10px, #F5F5F5 10px 20px)` +
263
- `product shot (1200×800)`) instead of a hand-drawn SVG or stock-ish filler.
264
- A placeholder signals "asset needed"; a weak illustration signals nobody
265
- had the asset. Never Lorem-ipsum copy in review-bound output
266
- (per `output-discipline`) — use short label-style skeleton copy.
267
-
268
- ## Presenting variants
269
-
270
- This skill produces ONE refined solution by default. **Plan the variation
271
- decision before generating** — do not reflexively emit one generic design when
272
- exploration was asked, nor spam options when one production answer was asked.
273
-
274
- - **Decide whether to vary (ask only if ambiguous).** For ambiguous creative
275
- work, decide the variation count and the axis that varies — visual direction,
276
- UX flow, interaction model, copy, density, or brand strictness. Ask about
277
- count + axis only when the choice changes the work materially; for a clear
278
- implementation task, proceed with one answer. (fixture: `daf-requested-variations`.)
279
- - **Variation floors.** When the user asks to explore, produce **two to three
280
- meaningfully different** options along the stated axis — different *decisions*,
281
- not the same layout recoloured. When the user asks for one production answer,
282
- produce one; no decorative option spam. (fixtures: `daf-requested-variations`,
283
- `daf-unwanted-variations`.)
284
- - **Canvas / exploration contract (host-neutral).** Presenting side-by-side
285
- concepts: give each a **stable frame label**, keep frames flat (no nested
286
- cards), use generous spacing, and — on tools with a canvas — export-safe
287
- coordinates so the layout survives export. Same labelled-frames shape whether
288
- the host has a real canvas or just stacked sections.
289
- - **Cost / UX tie-breaker.** Ask about the axis only when it changes the work
290
- materially; otherwise choose a strong default and **document the axis used in
291
- the handoff** ("explored along visual-direction; density held constant").
292
-
293
- Hand off the actual variation **mechanics** — the basic→bold method and the
294
- single-file tweak-panel (CSS custom properties + floating "Tweaks" panel +
295
- `localStorage`) — to [`design-variations`](../design-variations/SKILL.md): this
296
- section owns the *planning decision*, that skill owns the *execution*.
297
-
298
- ## Cross-task design memory — read DESIGN.md / PRODUCT.md first
299
-
300
- Before applying any heuristics from this reference, check the project root
301
- for `DESIGN.md` and/or `PRODUCT.md` (written by `design-system-capture`):
302
-
303
- - `DESIGN.md` present → use its captured radius/shadow/motion/spacing as
304
- project constraints. The heuristics in this skill are **fallbacks for
305
- gaps**, not overrides for captured decisions.
306
- - `PRODUCT.md` present → honor its interaction patterns (empty-state approach,
307
- mutation feedback policy, filter persistence) in any UI design that touches
308
- those surfaces.
309
-
310
- Flag any new decision for future capture: *"This establishes a new pattern —
311
- suggest adding to PRODUCT.md: [pattern description]."*
312
-
313
- ## Register — brand vs product
314
-
315
- Before applying heuristics, determine the register (see
316
- [`docs/guidelines/design-modes.md`](../../../docs/guidelines/design-modes.md)):
317
- brand mode (impression-first) vs product mode (task-first). Form-heavy, table-heavy,
318
- and dashboard surfaces are almost always product mode — favour the standard
319
- patterns in this skill (Form Design, Table Design) over expressive variance.
320
- Marketing/landing surfaces are brand mode — let the Aesthetic-direction section
321
- commit to a deliberate, distinctive direction.
322
-
323
- ## Design Read — articulate intent before generating
324
-
325
- When this reference is cited for a UI planning task, emit one line declaring
326
- the design read before any heuristics are applied:
327
-
328
- ```
329
- Reading this as: <page-kind> for <audience>, <vibe> language, leaning <design-system>.
330
- ```
331
-
332
- **If context is incomplete:** state so and proceed exploratory — do NOT block.
333
-
334
- **Anti-Default Discipline:** Before committing to any layout or component
335
- pattern, cross-check your first impulse against
336
- [`design-antipatterns.md`](../../../docs/guidelines/design-antipatterns.md) —
337
- the L1/L2 "AI landing page" layout (centered hero + 3-column grid + CTA), the
338
- V1 side-stripe card, the T7 default-font pick, and V2 decorative glassmorphism.
339
- If a tell was the first impulse, choose a different approach or explicitly
340
- justify why this brief calls for it. (The full pre-proposal scan is under
341
- *Anti-slop discipline* below.)
342
-
343
- **Carve-out — a supplied artifact is the spec, not a first impulse.** This
344
- discipline governs what *you* reach for. When the user hands over a finished
345
- artifact, the choices it makes are not your impulses and the justify-or-change
346
- burden does not apply to them: build them as given. The carve-out is scoped to
347
- decisions the artifact actually covers — anything it leaves open (a state it
348
- never shows, a surface it never had) is your first impulse again and gets the
349
- full scan. See
350
- [`design-fidelity-mechanics`](../../../docs/guidelines/design-fidelity-mechanics.md)
351
- § Provided-artifact precedence.
352
-
353
- ## Aesthetic direction
354
-
355
- Audit-pinned tokens and components always take precedence (see `existing-ui-audit`). When the audit pins an aesthetic, honor it without deviation. When the audit shows **no pinned aesthetic** — greenfield surface, marketing landing page, brand-new feature without design-system precedent — the design brief is allowed (and expected) to commit to a deliberate direction instead of defaulting to safe centered hero + 3-column features + CTA.
356
-
357
- Typography pairings (73 curated heading/body combinations with Google
358
- Fonts URLs + Tailwind config) and icon-system guidance (104 Phosphor
359
- entries with import code) come grounded from
360
- [`design-intelligence`](../design-intelligence/SKILL.md)
361
- (`--domain typography`, `--domain icons`) — query before picking from
362
- memory.
363
-
364
- Pick one direction up front and let composition, typography, and color follow from it. Avoid the "neutral AI default": uniform grid, system fonts as the visible body face, purple-to-blue gradients on white, predictable spacing. A direction that fits the brand intent (editorial / brutalist / refined / playful / retro / maximal / minimal / etc.) and is consistent across the page beats hedging.
365
-
366
- Surface the chosen direction in the design brief as a one-line statement (e.g. `aesthetic: editorial-magazine — asymmetric grid, serif display + sans body, generous gutters`). The apply step (`react-shadcn-ui` / `blade-ui` / `livewire` / `flux`) reads this line and matches typography, spacing, and motion to it; if no line is present, the apply step uses project defaults.
80
+ - [`references/design-patterns.md`](references/design-patterns.md) — Component Architecture · Form Design · Table Design · Responsive Strategy · Accessibility (a11y) · Motion — decision-tree and rationale · UX Principles · Craft details — typography & imagery · Presenting variants
81
+ - [`references/design-read-and-memory.md`](references/design-read-and-memory.md) — Cross-task design memory — read DESIGN.md / PRODUCT.md first · Register — brand vs product · Design Read — articulate intent before generating · Aesthetic direction
367
82
 
368
83
  ## Procedure
369
84
 
@@ -0,0 +1,227 @@
1
+ # fe-design — design patterns
2
+
3
+ > Section-level entry point of the `fe-design` 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
+ ## Component Architecture
8
+
9
+ ### Page structure (universal shape)
10
+
11
+ ```
12
+ Page layout
13
+ ├── Header (static)
14
+ ├── Navigation (interactive — active state)
15
+ ├── Content area
16
+ │ ├── Page heading + actions (static)
17
+ │ ├── Filters (interactive — reactive)
18
+ │ ├── Data display (interactive — table / cards)
19
+ │ └── Pagination (interactive)
20
+ └── Footer (static)
21
+ ```
22
+
23
+ The stack-specific mapping (Blade partial vs. Livewire component vs.
24
+ React island vs. Vue SFC) is the apply-step's concern, not this skill's.
25
+
26
+ ### When to use what (kind, not framework)
27
+
28
+ | Kind | When | Example |
29
+ |---|---|---|
30
+ | **Static partial** | No interactivity, server-rendered only | Header, footer, static info |
31
+ | **Reusable UI component** | Props-only, no state | Button, badge, card shell |
32
+ | **Stateful component** | Needs server interaction or local state | Forms, tables, filters |
33
+ | **Library primitive** | Standard UI from a design system | Modal, dropdown, input, toast |
34
+ | **Client-only micro-interaction** | No server roundtrip needed | Toggle, accordion, clipboard |
35
+
36
+ ### Component granularity
37
+
38
+ - **One stateful component per concern** — don't build mega-components.
39
+ - **Compose with reusable UI components** for shared shells, headers, fields.
40
+ - **Use the project's library primitives first** — never rebuild what the design system already provides (audit findings tell you which).
41
+ - **Extract a props-only UI shell when used 3+ times** — DRY applies to UI too; stateful components carry a higher bar (~4 + real state) — per-class canon: [`abstraction-thresholds`](../../../../docs/guidelines/abstraction-thresholds.md).
42
+ - **Component workshop when the project is large enough** — for a real, growing shared-component library, isolate and document each reusable component in a component workshop so it stays discoverable and reused, not re-invented; skip it for a small surface of one-offs. Tool-specific setup is a carve-out (Storybook et al.) — see the implementation skill (e.g. [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md) § Component workshop), never a generic mandate.
43
+
44
+ ## Form Design
45
+
46
+ ### Principles
47
+
48
+ 1. **Labels always visible** — no placeholder-only inputs
49
+ 2. **Validation on blur + submit** — immediate feedback, not on every keystroke
50
+ 3. **Error messages below the field** — red text, specific message
51
+ 4. **Required fields marked** — asterisk (*) or "(required)" label
52
+ 5. **Logical grouping** — related fields in sections with headings
53
+ 6. **Primary action prominent** — submit button stands out, cancel is secondary
54
+
55
+ ### Layout patterns
56
+
57
+ | Fields | Layout | When |
58
+ |---|---|---|
59
+ | 1–3 fields | Single column | Simple forms (login, search) |
60
+ | 4–8 fields | Two columns on desktop, single on mobile | Standard CRUD forms |
61
+ | 8+ fields | Sections with headings or tabs/steps | Complex entity forms |
62
+ | Related pairs | Side by side (first/last name, city/zip) | Logically paired fields |
63
+
64
+ ### Multi-step forms
65
+
66
+ ```
67
+ Step indicator (1 — 2 — 3)
68
+ ├── Step 1: Basic info → Next
69
+ ├── Step 2: Details → Back / Next
70
+ └── Step 3: Review + Submit → Back / Submit
71
+ ```
72
+
73
+ - Show progress indicator (step numbers or progress bar)
74
+ - Allow going back without losing data
75
+ - Validate each step before allowing next
76
+ - Show summary on final step
77
+
78
+ ## Table Design
79
+
80
+ ### Principles
81
+
82
+ 1. **Right-align numbers** — easier to compare
83
+ 2. **Left-align text** — natural reading direction
84
+ 3. **Sortable columns** — click header to sort
85
+ 4. **Sticky header** — visible when scrolling long tables
86
+ 5. **Row actions** — edit/delete as icon buttons or dropdown menu
87
+ 6. **Empty state** — helpful message when no data, not just blank
88
+
89
+ ### Responsive tables
90
+
91
+ | Screen | Strategy |
92
+ |---|---|
93
+ | Desktop (≥1024px) | Full table with all columns |
94
+ | Tablet (768–1023px) | Hide less important columns |
95
+ | Mobile (<768px) | Card layout or horizontal scroll |
96
+
97
+ ### Pagination
98
+
99
+ - Default: 25 rows per page
100
+ - Show total count: "Showing 1–25 of 142"
101
+ - Allow page size change (10, 25, 50, 100)
102
+ - Prefer server-side pagination — avoid loading the full set client-side
103
+
104
+ ## Responsive Strategy
105
+
106
+ ### Breakpoints (Tailwind reference scale)
107
+
108
+ | Prefix | Min width | Target |
109
+ |---|---|---|
110
+ | `sm:` | 640px | Large phones |
111
+ | `md:` | 768px | Tablets |
112
+ | `lg:` | 1024px | Small laptops |
113
+ | `xl:` | 1280px | Desktops |
114
+ | `2xl:` | 1536px | Large screens |
115
+
116
+ ### Mobile-first approach
117
+
118
+ 1. Design for mobile first (default styles)
119
+ 2. Add complexity at larger breakpoints
120
+ 3. Test at each breakpoint, not just desktop
121
+
122
+ ### Common patterns
123
+
124
+ | Element | Mobile | Desktop |
125
+ |---|---|---|
126
+ | Navigation | Hamburger menu | Sidebar or top nav |
127
+ | Forms | Single column | Two columns |
128
+ | Tables | Cards or scroll | Full table |
129
+ | Actions | Bottom sheet / FAB | Inline buttons |
130
+ | Filters | Collapsible panel | Sidebar or inline |
131
+
132
+ ## Accessibility (a11y)
133
+
134
+ ### Minimum requirements
135
+
136
+ - **Color contrast:** 4.5:1 for text, 3:1 for large text (WCAG AA)
137
+ - **Keyboard navigation:** All interactive elements reachable via Tab
138
+ - **Focus indicators:** Visible focus ring on all focusable elements
139
+ - **Alt text:** All meaningful images have descriptive alt text
140
+ - **ARIA labels:** Interactive elements without visible text need `aria-label`
141
+ - **Semantic HTML:** Use `<button>`, `<nav>`, `<main>`, `<form>` — not `<div>` for everything
142
+
143
+ ### Common mistakes
144
+
145
+ | Mistake | Fix |
146
+ |---|---|
147
+ | `<div onclick>` | Use `<button>` |
148
+ | Color-only status | Add icon or text alongside color |
149
+ | Missing form labels | Add `<label for="...">` |
150
+ | Auto-playing content | Provide pause/stop control |
151
+ | Tiny click targets | Min 44×44px touch target |
152
+
153
+ ## Motion — decision-tree and rationale
154
+
155
+ Before adding any animation to a UI element, run through this decision tree:
156
+
157
+ **1. Should this animate at all?**
158
+ - Used 100+ times per day (keyboard shortcut, command palette)? **No animation. Why:** animations on high-frequency interactions feel sluggish; users wait for them on every invocation. Raycast has no open/close animation by design.
159
+ - Triggered by user action with visible result (button → state change)? **Micro-feedback only (< 160ms).** Why: quick enough to feel instant, visible enough to confirm the action.
160
+ - Modal/overlay/sheet entering/exiting? **Animate. Why:** position change needs motion to maintain spatial continuity.
161
+ - Background process with no user action? **No animation.** Why: unexplained motion is disorienting.
162
+
163
+ **2. Which easing?**
164
+ - Entering (element appearing)? **ease-out** (starts fast, slows to rest). Why: the element arriving quickly signals responsiveness; the deceleration feels natural as it settles.
165
+ - Exiting (element disappearing)? **ease-in** (starts slow, accelerates out). Why: the reverse is true — fast exit signals completion.
166
+ - **Never ease-in for entering elements.** Why: ease-in delays the initial movement — the exact moment the user is watching most closely — making it feel slow even at the same total duration.
167
+ - **Never bounce or elastic easing in UI.** Why: bounce draws attention to the animation itself, not the content; it feels dated.
168
+
169
+ **3. How long?**
170
+ - Button/micro-feedback: 100–160ms. Tooltip: 100ms. Dropdown open: 150–200ms. Modal: 200–350ms. Page transition: 300–500ms. Above 500ms: almost never.
171
+ - **Never animate layout properties** (width, height, top, left, padding). Why: triggers browser layout recalculation on every frame; always solvable with `transform`.
172
+ - **Always add `@media (prefers-reduced-motion: reduce)`** — gentler animation (reduced distance/opacity), NOT display:none. Why: vestibular disorders make motion UI unusable; reducing is better than removing.
173
+
174
+ **4. What to animate?**
175
+ Animate `transform` and `opacity` only. Why: these run on the GPU compositor thread, not the main thread; they never trigger layout or paint.
176
+ `scale(0)` → `scale(1)` is wrong. Why: nothing in the real world appears from nothing. Use `scale(0.95)` + `opacity: 0` → `scale(1)` + `opacity: 1` instead.
177
+
178
+ ## UX Principles
179
+
180
+ 1. **Feedback** — Every action gets a response (toast, loading state, success message). **Why:** users interpret no feedback as failure.
181
+ 2. **Forgiveness** — Undo beats confirmation dialogs. Users click through confirmations mindlessly. **Why:** remove destructively then show undo toast; actually delete after toast expires.
182
+ 3. **Consistency** — Same patterns for same interactions across the app. **Why:** predictability reduces cognitive load; inconsistency forces users to re-learn.
183
+ 4. **Progressive disclosure** — Show basics first, details on demand. **Why:** premature complexity overwhelms; reveal information as it becomes relevant.
184
+ 5. **Loading states** — Skeleton screens preferred over spinners. **Why:** skeletons reduce perceived wait time by showing structure immediately.
185
+ 6. **Error recovery** — Clear error messages with suggested actions. **Why:** "something went wrong" gives the user nothing to do; a specific message with a next step reduces support burden.
186
+
187
+ ## Craft details — typography & imagery
188
+
189
+ - **`text-wrap: pretty` on body copy** — avoids widows/orphans without manual
190
+ breaks; cheap, no layout risk. (Display headlines: `text-wrap: balance`.)
191
+ - **Honest placeholders over weak assets** — when the real image/illustration
192
+ is missing, use a striped placeholder with a monospace size label
193
+ (`repeating-linear-gradient(45deg, #E5E5E5 0 10px, #F5F5F5 10px 20px)` +
194
+ `product shot (1200×800)`) instead of a hand-drawn SVG or stock-ish filler.
195
+ A placeholder signals "asset needed"; a weak illustration signals nobody
196
+ had the asset. Never Lorem-ipsum copy in review-bound output
197
+ (per `output-discipline`) — use short label-style skeleton copy.
198
+
199
+ ## Presenting variants
200
+
201
+ This skill produces ONE refined solution by default. **Plan the variation
202
+ decision before generating** — do not reflexively emit one generic design when
203
+ exploration was asked, nor spam options when one production answer was asked.
204
+
205
+ - **Decide whether to vary (ask only if ambiguous).** For ambiguous creative
206
+ work, decide the variation count and the axis that varies — visual direction,
207
+ UX flow, interaction model, copy, density, or brand strictness. Ask about
208
+ count + axis only when the choice changes the work materially; for a clear
209
+ implementation task, proceed with one answer. (fixture: `daf-requested-variations`.)
210
+ - **Variation floors.** When the user asks to explore, produce **two to three
211
+ meaningfully different** options along the stated axis — different *decisions*,
212
+ not the same layout recoloured. When the user asks for one production answer,
213
+ produce one; no decorative option spam. (fixtures: `daf-requested-variations`,
214
+ `daf-unwanted-variations`.)
215
+ - **Canvas / exploration contract (host-neutral).** Presenting side-by-side
216
+ concepts: give each a **stable frame label**, keep frames flat (no nested
217
+ cards), use generous spacing, and — on tools with a canvas — export-safe
218
+ coordinates so the layout survives export. Same labelled-frames shape whether
219
+ the host has a real canvas or just stacked sections.
220
+ - **Cost / UX tie-breaker.** Ask about the axis only when it changes the work
221
+ materially; otherwise choose a strong default and **document the axis used in
222
+ the handoff** ("explored along visual-direction; density held constant").
223
+
224
+ Hand off the actual variation **mechanics** — the basic→bold method and the
225
+ single-file tweak-panel (CSS custom properties + floating "Tweaks" panel +
226
+ `localStorage`) — to [`design-variations`](../design-variations/SKILL.md): this
227
+ section owns the *planning decision*, that skill owns the *execution*.
@@ -0,0 +1,75 @@
1
+ # fe-design — design read and memory
2
+
3
+ > Section-level entry point of the `fe-design` 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 applying any heuristics from this reference, check the project root
10
+ for `DESIGN.md` and/or `PRODUCT.md` (written by `design-system-capture`):
11
+
12
+ - `DESIGN.md` present → use its captured radius/shadow/motion/spacing as
13
+ project constraints. The heuristics in this skill are **fallbacks for
14
+ gaps**, not overrides for captured decisions.
15
+ - `PRODUCT.md` present → honor its interaction patterns (empty-state approach,
16
+ mutation feedback policy, filter persistence) in any UI design that touches
17
+ those surfaces.
18
+
19
+ Flag any new decision for future capture: *"This establishes a new pattern —
20
+ suggest adding to PRODUCT.md: [pattern description]."*
21
+
22
+ ## Register — brand vs product
23
+
24
+ Before applying heuristics, determine the register (see
25
+ [`docs/guidelines/design-modes.md`](../../../../docs/guidelines/design-modes.md)):
26
+ brand mode (impression-first) vs product mode (task-first). Form-heavy, table-heavy,
27
+ and dashboard surfaces are almost always product mode — favour the standard
28
+ patterns in this skill (Form Design, Table Design) over expressive variance.
29
+ Marketing/landing surfaces are brand mode — let the Aesthetic-direction section
30
+ commit to a deliberate, distinctive direction.
31
+
32
+ ## Design Read — articulate intent before generating
33
+
34
+ When this reference is cited for a UI planning task, emit one line declaring
35
+ the design read before any heuristics are applied:
36
+
37
+ ```
38
+ Reading this as: <page-kind> for <audience>, <vibe> language, leaning <design-system>.
39
+ ```
40
+
41
+ **If context is incomplete:** state so and proceed exploratory — do NOT block.
42
+
43
+ **Anti-Default Discipline:** Before committing to any layout or component
44
+ pattern, cross-check your first impulse against
45
+ [`design-antipatterns.md`](../../../../docs/guidelines/design-antipatterns.md) —
46
+ the L1/L2 "AI landing page" layout (centered hero + 3-column grid + CTA), the
47
+ V1 side-stripe card, the T7 default-font pick, and V2 decorative glassmorphism.
48
+ If a tell was the first impulse, choose a different approach or explicitly
49
+ justify why this brief calls for it. (The full pre-proposal scan is under
50
+ *Anti-slop discipline* below.)
51
+
52
+ **Carve-out — a supplied artifact is the spec, not a first impulse.** This
53
+ discipline governs what *you* reach for. When the user hands over a finished
54
+ artifact, the choices it makes are not your impulses and the justify-or-change
55
+ burden does not apply to them: build them as given. The carve-out is scoped to
56
+ decisions the artifact actually covers — anything it leaves open (a state it
57
+ never shows, a surface it never had) is your first impulse again and gets the
58
+ full scan. See
59
+ [`design-fidelity-mechanics`](../../../../docs/guidelines/design-fidelity-mechanics.md)
60
+ § Provided-artifact precedence.
61
+
62
+ ## Aesthetic direction
63
+
64
+ Audit-pinned tokens and components always take precedence (see `existing-ui-audit`). When the audit pins an aesthetic, honor it without deviation. When the audit shows **no pinned aesthetic** — greenfield surface, marketing landing page, brand-new feature without design-system precedent — the design brief is allowed (and expected) to commit to a deliberate direction instead of defaulting to safe centered hero + 3-column features + CTA.
65
+
66
+ Typography pairings (73 curated heading/body combinations with Google
67
+ Fonts URLs + Tailwind config) and icon-system guidance (104 Phosphor
68
+ entries with import code) come grounded from
69
+ [`design-intelligence`](../design-intelligence/SKILL.md)
70
+ (`--domain typography`, `--domain icons`) — query before picking from
71
+ memory.
72
+
73
+ Pick one direction up front and let composition, typography, and color follow from it. Avoid the "neutral AI default": uniform grid, system fonts as the visible body face, purple-to-blue gradients on white, predictable spacing. A direction that fits the brand intent (editorial / brutalist / refined / playful / retro / maximal / minimal / etc.) and is consistent across the page beats hedging.
74
+
75
+ Surface the chosen direction in the design brief as a one-line statement (e.g. `aesthetic: editorial-magazine — asymmetric grid, serif display + sans body, generous gutters`). The apply step (`react-shadcn-ui` / `blade-ui` / `livewire` / `flux`) reads this line and matches typography, spacing, and motion to it; if no line is present, the apply step uses project defaults.
@@ -266,6 +266,16 @@ Every roadmap ends in exactly one of four states:
266
266
 
267
267
  After the last step of a roadmap is done, check completion status:
268
268
 
269
+ 0. **Completion review (Gate R2)** — last open item done → findings BEFORE
270
+ fixes, before any archival decision:
271
+ - `dispatch_r2_reviewer` builds the reviewer input; a **fresh subagent
272
+ without the implementation context** writes
273
+ `agents/evidence/reviews/<slug>.findings.md`.
274
+ - Work findings in priority order — each ends `fixed` / `accepted-risk` /
275
+ `deferred`. No code surface → explicit skip, never silent.
276
+ - Grammar, scope-hash binding, escape hatch:
277
+ [`plan-review-gates § 2`](../../../docs/contracts/plan-review-gates.md).
278
+
269
279
  1. **Scan the file** for all checkbox markers: `- [x]`, `- [ ]`, `- [~]`, `- [-]`.
270
280
  2. **Classify:**
271
281
  - `[x]` = completed
@@ -52,7 +52,10 @@ Authoring or materially rewriting a roadmap must go through
52
52
  Understand → Research → Draft per the
53
53
  [`artifact-drafting-protocol`](../../rules/artifact-drafting-protocol.md)
54
54
  rule. Inspect existing roadmaps under `agents/roadmaps/` for overlap
55
- or supersession before opening a new one.
55
+ or supersession before opening a new one. **Gate C first** — "write a
56
+ plan/roadmap" is a gated surface, so run
57
+ [`plan-confidence-gate`](../../contexts/execution/plan-confidence-gate.md)
58
+ before drafting (95%-conditions, marker, interview-or-degrade, C→R1 handoff).
56
59
 
57
60
  ### 1. Read the canonical template first
58
61
 
@@ -180,6 +183,14 @@ breakdown. Full shape: [`templates/roadmaps.md` rule 20](../../agent-src/templat
180
183
  Omit the section entirely when the roadmap has no such gate; run the
181
184
  § 4c gate-test before adding one.
182
185
 
186
+ ### 5c. Risk review (Gate R1) — after draft, before save
187
+
188
+ - Ready (non-draft) plan → `## Risk Register` before save, self-review; seed
189
+ from a fresh C→R1 handoff state (never re-ask a resolved branch).
190
+ - Product AND implementation risks ranked descending, one mitigation per row,
191
+ each anchored to a phase/step here; none → exact honest-null grammar.
192
+ - Schema, staleness, grandfather, drafts-exempt: [`plan-review-gates § 1`](../../../docs/contracts/plan-review-gates.md).
193
+
183
194
  ### 6. Step-marker semantics — pick `[~]` (defer) vs `[-]` (cancel) honestly
184
195
 
185
196
  When authoring (and especially when rewriting a roadmap mid-flight),
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.ts (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "9.17.0"
42
+ agent_config_version: "9.18.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project: