aped-method 1.6.0 → 1.8.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.
- package/package.json +1 -1
- package/src/templates/commands.js +1 -1
- package/src/templates/references.js +219 -52
- package/src/templates/skills.js +470 -106
package/package.json
CHANGED
|
@@ -55,7 +55,7 @@ Read and follow the SKILL.md at $PROJECT_ROOT/${a}/aped-r/SKILL.md
|
|
|
55
55
|
path: `${c.commandsDir}/aped-ux.md`,
|
|
56
56
|
content: `---
|
|
57
57
|
name: aped-ux
|
|
58
|
-
description: 'Designs UX
|
|
58
|
+
description: 'Designs UX via the ANF framework (Assemble design system, Normalize with React preview, Fill all screens). Use when user says "design UX", "UX spec", "aped ux", or invokes /aped-ux. Runs between PRD and Epics phases.'
|
|
59
59
|
---
|
|
60
60
|
|
|
61
61
|
Read and follow the SKILL.md at $PROJECT_ROOT/${a}/aped-ux/SKILL.md
|
|
@@ -552,7 +552,186 @@ mobile_app,"iOS,Android,app,mobile,iPhone,iPad","Native or cross-platform?;Offli
|
|
|
552
552
|
saas_b2b,"SaaS,B2B,platform,dashboard,teams,enterprise","Multi-tenant?;Permission model?;Subscription tiers?;Integrations?;Compliance?","tenant_model;rbac_matrix;subscription_tiers;integration_list;compliance_reqs","cli_interface;mobile_first","compliance requirements;integration guides","Workflow automation;AI agents"
|
|
553
553
|
cli_tool,"CLI,command,terminal,bash,script","Interactive or scriptable?;Output formats?;Config method?;Shell completion?","command_structure;output_formats;config_schema;scripting_support","visual_design;ux_principles;touch_interactions","CLI design patterns;shell integration","Natural language CLI;AI commands"`;
|
|
554
554
|
|
|
555
|
-
const UX_PATTERNS = `# UX
|
|
555
|
+
const UX_PATTERNS = `# UX Design Rules — Priority-Ranked
|
|
556
|
+
|
|
557
|
+
Rules ranked by impact. Apply in order — never skip a higher-priority rule for a lower one.
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## P1: Accessibility (CRITICAL)
|
|
562
|
+
|
|
563
|
+
- Contrast ≥ 4.5:1 normal text, ≥ 3:1 large text (WCAG AA)
|
|
564
|
+
- Visible focus rings (2-4px) on ALL interactive elements
|
|
565
|
+
- Alt text on meaningful images; decorative images use alt=""
|
|
566
|
+
- aria-label on icon-only buttons
|
|
567
|
+
- Tab order matches visual order; full keyboard support
|
|
568
|
+
- Form inputs have visible labels (not placeholder-only)
|
|
569
|
+
- Skip-to-main-content link for keyboard users
|
|
570
|
+
- Heading hierarchy: sequential h1→h6, no level skipping
|
|
571
|
+
- Information never relies on color alone (add icon/text)
|
|
572
|
+
- Support dynamic text scaling (no truncation on resize)
|
|
573
|
+
- Respect prefers-reduced-motion — disable animations when set
|
|
574
|
+
- Screen reader: meaningful labels, logical reading order
|
|
575
|
+
- Escape routes: cancel/back in modals and multi-step flows
|
|
576
|
+
- Preserve system keyboard shortcuts
|
|
577
|
+
|
|
578
|
+
## P2: Touch & Interaction (CRITICAL)
|
|
579
|
+
|
|
580
|
+
- Touch targets ≥ 44x44pt (iOS) / 48x48dp (Android)
|
|
581
|
+
- Minimum 8px gap between touch targets
|
|
582
|
+
- Primary interactions via tap, never hover-only
|
|
583
|
+
- Loading buttons: disable during async + show spinner
|
|
584
|
+
- Error feedback: clear message near the problem field
|
|
585
|
+
- cursor:pointer on clickable web elements
|
|
586
|
+
- No horizontal swipe conflicts on main content
|
|
587
|
+
- touch-action:manipulation to kill 300ms tap delay
|
|
588
|
+
- Use platform-standard gestures consistently
|
|
589
|
+
- Don't block system gestures (back swipe, control center)
|
|
590
|
+
- Visual press feedback (ripple/opacity) within 80-150ms
|
|
591
|
+
- Haptic feedback for confirmations only — no overuse
|
|
592
|
+
- Always provide visible controls alongside gestures
|
|
593
|
+
- Keep targets away from notch, Dynamic Island, edges
|
|
594
|
+
- No precision-required taps on tiny icons
|
|
595
|
+
|
|
596
|
+
## P3: Performance (HIGH)
|
|
597
|
+
|
|
598
|
+
- Images: WebP/AVIF, responsive srcset, lazy load below fold
|
|
599
|
+
- Declare width/height or aspect-ratio to prevent CLS
|
|
600
|
+
- font-display:swap, preload only critical fonts
|
|
601
|
+
- Critical CSS above the fold; lazy load the rest
|
|
602
|
+
- Code split by route/feature
|
|
603
|
+
- Third-party scripts: async/defer, audit necessity
|
|
604
|
+
- Batch DOM reads then writes to reduce reflows
|
|
605
|
+
- Reserve space for async content (no content jumping)
|
|
606
|
+
- Virtualize lists with 50+ items
|
|
607
|
+
- Keep per-frame work under 16ms for 60fps
|
|
608
|
+
- Skeleton/shimmer for operations >300ms
|
|
609
|
+
- Input latency under 100ms for taps/scrolls
|
|
610
|
+
- Debounce/throttle high-frequency events (scroll, resize, input)
|
|
611
|
+
- Provide offline state messaging
|
|
612
|
+
- Degraded mode for slow networks
|
|
613
|
+
|
|
614
|
+
## P4: Style & Consistency (HIGH)
|
|
615
|
+
|
|
616
|
+
- Match visual style to product type and audience
|
|
617
|
+
- Same style across all screens — no mixed aesthetics
|
|
618
|
+
- SVG icons only (Lucide, Heroicons) — never emoji as structural icons
|
|
619
|
+
- Color palette derived from product domain/industry
|
|
620
|
+
- Effects (shadows, blur, radius) aligned with chosen style
|
|
621
|
+
- Respect platform idioms (iOS HIG vs Material Design)
|
|
622
|
+
- Hover/pressed/disabled states visually distinct
|
|
623
|
+
- Consistent elevation/shadow scale across components
|
|
624
|
+
- Design light and dark variants together from day 1
|
|
625
|
+
- One icon set, one visual language throughout
|
|
626
|
+
- Prefer native controls over custom when possible
|
|
627
|
+
- One primary CTA per screen — secondary actions subordinate
|
|
628
|
+
|
|
629
|
+
## P5: Layout & Responsive (HIGH)
|
|
630
|
+
|
|
631
|
+
- viewport meta: width=device-width, initial-scale=1
|
|
632
|
+
- Mobile-first: design small, scale up
|
|
633
|
+
- Systematic breakpoints: 375 / 768 / 1024 / 1440
|
|
634
|
+
- Minimum 16px body text on mobile
|
|
635
|
+
- Line length: 35-60 chars mobile, 60-75 chars desktop
|
|
636
|
+
- No horizontal scroll on any breakpoint
|
|
637
|
+
- 4pt/8dp spacing scale consistently applied
|
|
638
|
+
- Consistent max-width container on desktop (1200-1440px)
|
|
639
|
+
- Layered z-index scale (avoid arbitrary values)
|
|
640
|
+
- Safe padding for fixed/sticky elements
|
|
641
|
+
- Avoid nested scroll regions
|
|
642
|
+
- Prefer min-h-dvh over 100vh (mobile address bar)
|
|
643
|
+
- Content priority: core content first on mobile
|
|
644
|
+
- Visual hierarchy via size, spacing, and contrast
|
|
645
|
+
|
|
646
|
+
## P6: Typography & Color (MEDIUM)
|
|
647
|
+
|
|
648
|
+
- Body line-height: 1.5-1.75
|
|
649
|
+
- Font pairing: match heading/body personalities
|
|
650
|
+
- Consistent type scale: 12/14/16/18/24/32
|
|
651
|
+
- Weight hierarchy: bold headings (600-700), regular body (400)
|
|
652
|
+
- Semantic color tokens: primary, secondary, error, warning, success, surface
|
|
653
|
+
- Dark mode: desaturated/lighter variants, NOT inverted colors
|
|
654
|
+
- Foreground/background pairs meet 4.5:1 (AA) or 7:1 (AAA)
|
|
655
|
+
- Prefer text wrapping over truncation; ellipsis only with tooltip
|
|
656
|
+
- Tabular figures for data columns, prices, timers
|
|
657
|
+
- Intentional whitespace to group and separate
|
|
658
|
+
|
|
659
|
+
## P7: Animation (MEDIUM)
|
|
660
|
+
|
|
661
|
+
- Duration: 150-300ms micro-interactions, ≤400ms complex, never >500ms
|
|
662
|
+
- Animate transform and opacity ONLY (GPU composited)
|
|
663
|
+
- ease-out entering, ease-in exiting
|
|
664
|
+
- Every animation must express cause-effect (meaningful motion)
|
|
665
|
+
- Max 1-2 animated elements per view transition
|
|
666
|
+
- Exit animations ~60-70% of enter duration
|
|
667
|
+
- Stagger list items by 30-50ms
|
|
668
|
+
- Animations must be interruptible by user
|
|
669
|
+
- Never block user input during animation
|
|
670
|
+
- Subtle scale feedback on press (0.95-1.05)
|
|
671
|
+
- Real-time response to drag/swipe/pinch gestures
|
|
672
|
+
- Animations must not cause CLS (no layout shift)
|
|
673
|
+
- Modal: animate from trigger source
|
|
674
|
+
- Navigation: forward = left/up, backward = right/down
|
|
675
|
+
|
|
676
|
+
## P8: Forms & Feedback (MEDIUM)
|
|
677
|
+
|
|
678
|
+
- Visible label per input — never placeholder-only
|
|
679
|
+
- Error shown below the field, near the problem
|
|
680
|
+
- Submit: show loading → then success/error state
|
|
681
|
+
- Mark required fields (asterisk + sr-only text)
|
|
682
|
+
- Empty states: helpful message + CTA action
|
|
683
|
+
- Toast: auto-dismiss 3-5s, use aria-live="polite"
|
|
684
|
+
- Confirm before destructive actions
|
|
685
|
+
- Persistent helper text below complex inputs
|
|
686
|
+
- Disabled: opacity 0.38-0.5 + cursor change + no tap
|
|
687
|
+
- Progressive disclosure: reveal options step by step
|
|
688
|
+
- Validate on blur, show error after user finishes typing
|
|
689
|
+
- Semantic input types (email, tel, number, url)
|
|
690
|
+
- Password show/hide toggle
|
|
691
|
+
- Support autocomplete/textContentType for autofill
|
|
692
|
+
- Allow undo for destructive actions
|
|
693
|
+
- Auto-focus first invalid field after submit
|
|
694
|
+
- Error summary at top with anchor links for long forms
|
|
695
|
+
- Mobile input height ≥ 44px
|
|
696
|
+
- Unsaved changes: confirm before dismissing
|
|
697
|
+
|
|
698
|
+
## P9: Navigation (HIGH)
|
|
699
|
+
|
|
700
|
+
- Bottom nav ≤ 5 items, each with icon + label
|
|
701
|
+
- Drawer for secondary nav only, not primary
|
|
702
|
+
- Predictable back behavior; preserve scroll/state
|
|
703
|
+
- All key screens reachable via deep link/URL
|
|
704
|
+
- Current location visually highlighted (active state)
|
|
705
|
+
- Primary vs secondary navigation clearly separated
|
|
706
|
+
- Modal: clear close affordance, swipe-down on mobile
|
|
707
|
+
- Search: accessible from top bar or dedicated tab
|
|
708
|
+
- Breadcrumb for 3+ level deep hierarchies
|
|
709
|
+
- Restore scroll, filters, input on back navigation
|
|
710
|
+
- Adaptive: sidebar ≥1024px, bottom/top nav for small screens
|
|
711
|
+
- Never silently reset navigation stack
|
|
712
|
+
- Same navigation placement across all pages
|
|
713
|
+
- Don't mix Tab + Sidebar + Bottom Nav simultaneously
|
|
714
|
+
- Focus moves to main content on route change
|
|
715
|
+
|
|
716
|
+
## P10: Charts & Data (LOW)
|
|
717
|
+
|
|
718
|
+
- Match chart type to data: trend→line, comparison→bar, proportion→pie
|
|
719
|
+
- Accessible color palettes — supplement with patterns/textures
|
|
720
|
+
- Always show legend near chart
|
|
721
|
+
- Tooltip on hover (web) or tap (mobile)
|
|
722
|
+
- Label axes with units; never truncate/rotate axis labels
|
|
723
|
+
- Responsive: reflow charts on small screens
|
|
724
|
+
- Empty data: show "No data yet" with action
|
|
725
|
+
- Skeleton placeholder while loading
|
|
726
|
+
- Respect prefers-reduced-motion for chart animations
|
|
727
|
+
- Virtualize/aggregate datasets >1000 points
|
|
728
|
+
- Interactive elements ≥ 44pt tap area
|
|
729
|
+
- No pie chart for >5 categories
|
|
730
|
+
- Direct-label values for small datasets
|
|
731
|
+
- Offer CSV/image export for data tables
|
|
732
|
+
- Screen reader: aria-label describing key insight
|
|
733
|
+
|
|
734
|
+
---
|
|
556
735
|
|
|
557
736
|
## Screen Types
|
|
558
737
|
|
|
@@ -580,55 +759,43 @@ const UX_PATTERNS = `# UX Screen Patterns Catalog
|
|
|
580
759
|
- **Error Page**: error code, message, back/home links
|
|
581
760
|
- **Loading**: skeleton screens, progress bar, spinner
|
|
582
761
|
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
-
|
|
589
|
-
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
-
|
|
606
|
-
-
|
|
607
|
-
-
|
|
608
|
-
|
|
609
|
-
###
|
|
610
|
-
-
|
|
611
|
-
-
|
|
612
|
-
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
## Accessibility Checklist
|
|
624
|
-
|
|
625
|
-
- [ ] All interactive elements keyboard-navigable (Tab, Enter, Escape)
|
|
626
|
-
- [ ] Focus indicator visible on all focusable elements
|
|
627
|
-
- [ ] ARIA labels on icon-only buttons
|
|
628
|
-
- [ ] Color contrast ratio ≥ 4.5:1 (text), ≥ 3:1 (large text)
|
|
629
|
-
- [ ] Form fields have associated labels
|
|
630
|
-
- [ ] Error messages linked to fields via aria-describedby
|
|
631
|
-
- [ ] Skip navigation link for screen readers
|
|
632
|
-
- [ ] Alt text on meaningful images
|
|
633
|
-
- [ ] Touch targets ≥ 44x44px on mobile
|
|
762
|
+
---
|
|
763
|
+
|
|
764
|
+
## Pre-Delivery Checklist
|
|
765
|
+
|
|
766
|
+
### Visual Quality
|
|
767
|
+
- [ ] SVG icons only — no emoji as structural elements
|
|
768
|
+
- [ ] Consistent icon family and stroke width
|
|
769
|
+
- [ ] Press states don't shift layout or cause jitter
|
|
770
|
+
- [ ] Semantic theme tokens used consistently
|
|
771
|
+
- [ ] Official brand assets with correct proportions
|
|
772
|
+
|
|
773
|
+
### Interaction
|
|
774
|
+
- [ ] All tappable elements provide press feedback
|
|
775
|
+
- [ ] Touch targets ≥ 44x44pt / 48x48dp
|
|
776
|
+
- [ ] Micro-interactions 150-300ms with native easing
|
|
777
|
+
- [ ] Disabled states visually clear and non-interactive
|
|
778
|
+
- [ ] Screen reader focus order matches visual layout
|
|
779
|
+
- [ ] No gesture conflicts between app and system
|
|
780
|
+
|
|
781
|
+
### Light/Dark Mode
|
|
782
|
+
- [ ] Primary text ≥ 4.5:1 contrast in both modes
|
|
783
|
+
- [ ] Secondary text ≥ 3:1 contrast in both modes
|
|
784
|
+
- [ ] Borders/dividers distinguishable in both modes
|
|
785
|
+
- [ ] Modal scrim preserves foreground legibility
|
|
786
|
+
- [ ] Both themes tested independently
|
|
787
|
+
|
|
788
|
+
### Layout
|
|
789
|
+
- [ ] Safe areas respected for fixed elements
|
|
790
|
+
- [ ] Scroll content not hidden behind fixed bars
|
|
791
|
+
- [ ] Tested: small phone, large phone, tablet (portrait + landscape)
|
|
792
|
+
- [ ] 4/8dp spacing maintained throughout
|
|
793
|
+
- [ ] Long-form text readable on larger screens
|
|
794
|
+
|
|
795
|
+
### Accessibility
|
|
796
|
+
- [ ] Meaningful images/icons have labels
|
|
797
|
+
- [ ] Form fields have labels, hints, clear errors
|
|
798
|
+
- [ ] Color not sole indicator of state
|
|
799
|
+
- [ ] Reduced motion and dynamic text size supported
|
|
800
|
+
- [ ] ARIA roles/states announced correctly
|
|
634
801
|
`;
|
package/src/templates/skills.js
CHANGED
|
@@ -8,10 +8,21 @@ export function skills(c) {
|
|
|
8
8
|
content: `---
|
|
9
9
|
name: aped-a
|
|
10
10
|
description: 'Analyzes a new project idea through parallel market, domain, and technical research. Use when user says "research idea", "aped analyze", or invokes /aped-a. Not for existing codebases — use aped-ctx for brownfield projects.'
|
|
11
|
+
license: MIT
|
|
12
|
+
metadata:
|
|
13
|
+
author: yabafre
|
|
14
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
11
15
|
---
|
|
12
16
|
|
|
13
17
|
# APED Analyze — Parallel Research to Product Brief
|
|
14
18
|
|
|
19
|
+
## Critical Rules
|
|
20
|
+
|
|
21
|
+
- NEVER skip Discovery questions — research quality depends on clear inputs
|
|
22
|
+
- ALL 3 agents must complete before synthesis — do not proceed with partial results
|
|
23
|
+
- Take your time with synthesis — quality is more important than speed
|
|
24
|
+
- Do not skip validation steps
|
|
25
|
+
|
|
15
26
|
## Setup
|
|
16
27
|
|
|
17
28
|
1. Read \`${a}/config.yaml\` — extract \`user_name\`, \`communication_language\`, \`ticket_system\`, \`git_provider\`
|
|
@@ -113,6 +124,20 @@ pipeline:
|
|
|
113
124
|
## Chain
|
|
114
125
|
|
|
115
126
|
Invoke Skill tool with \`skill: "aped-p"\` to proceed to PRD phase.
|
|
127
|
+
|
|
128
|
+
## Example
|
|
129
|
+
|
|
130
|
+
User says: "I want to build a SaaS for restaurant inventory management"
|
|
131
|
+
1. Discovery: ask what, for whom, why now
|
|
132
|
+
2. Launch 3 agents: market (restaurant tech), domain (food service regulations), technical (inventory systems)
|
|
133
|
+
3. Synthesize into product brief with 5 sections
|
|
134
|
+
4. Validate → write to \`${o}/product-brief.md\`
|
|
135
|
+
|
|
136
|
+
## Common Issues
|
|
137
|
+
|
|
138
|
+
- **Agent returns empty results**: WebSearch may fail — retry with different keywords, broaden search terms
|
|
139
|
+
- **Brief validation fails**: Check which section is missing, fill it from agent results, re-validate
|
|
140
|
+
- **User gives vague answers**: Ask follow-up questions before launching research — garbage in = garbage out
|
|
116
141
|
`,
|
|
117
142
|
},
|
|
118
143
|
// ── aped-p ──────────────────────────────────────────────
|
|
@@ -121,10 +146,21 @@ Invoke Skill tool with \`skill: "aped-p"\` to proceed to PRD phase.
|
|
|
121
146
|
content: `---
|
|
122
147
|
name: aped-p
|
|
123
148
|
description: 'Generates PRD autonomously from product brief. Use when user says "create PRD", "generate PRD", "aped prd", or invokes /aped-p.'
|
|
149
|
+
license: MIT
|
|
150
|
+
metadata:
|
|
151
|
+
author: yabafre
|
|
152
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
124
153
|
---
|
|
125
154
|
|
|
126
155
|
# APED PRD — Autonomous PRD Generation
|
|
127
156
|
|
|
157
|
+
## Critical Rules
|
|
158
|
+
|
|
159
|
+
- EVERY FR must follow format: \`FR#: [Actor] can [capability]\` — no exceptions
|
|
160
|
+
- Take your time to generate quality FRs — 10-80 range, each independently testable
|
|
161
|
+
- Do not skip domain detection — it determines mandatory sections
|
|
162
|
+
- Quality is more important than speed — validate before writing
|
|
163
|
+
|
|
128
164
|
## Setup
|
|
129
165
|
|
|
130
166
|
1. Read \`${a}/config.yaml\` — extract \`user_name\`, \`communication_language\`, \`document_output_language\`
|
|
@@ -210,6 +246,20 @@ pipeline:
|
|
|
210
246
|
Ask the user: "Do you want to design the UX before creating epics?"
|
|
211
247
|
- If yes: invoke Skill tool with \`skill: "aped-ux"\`
|
|
212
248
|
- If no: invoke Skill tool with \`skill: "aped-e"\` to skip directly to Epics
|
|
249
|
+
|
|
250
|
+
## Example
|
|
251
|
+
|
|
252
|
+
From a restaurant inventory brief → PRD generates:
|
|
253
|
+
- FR1: Manager can add inventory items with name, quantity, and unit
|
|
254
|
+
- FR2: Manager can set low-stock thresholds per item
|
|
255
|
+
- FR3: System can send alerts when stock falls below threshold
|
|
256
|
+
- NFR: The system shall respond to inventory queries within 200ms at p95
|
|
257
|
+
|
|
258
|
+
## Common Issues
|
|
259
|
+
|
|
260
|
+
- **FR count too low (<10)**: Brief may lack detail — re-read brief, extract implicit capabilities
|
|
261
|
+
- **Anti-pattern words detected**: Replace "easy" with step count, "fast" with time threshold
|
|
262
|
+
- **Validation script fails**: Run \`bash ${a}/aped-p/scripts/validate-prd.sh ${o}/prd.md\` — fix reported issues one by one
|
|
213
263
|
`,
|
|
214
264
|
},
|
|
215
265
|
// ── aped-e ──────────────────────────────────────────────
|
|
@@ -218,10 +268,21 @@ Ask the user: "Do you want to design the UX before creating epics?"
|
|
|
218
268
|
content: `---
|
|
219
269
|
name: aped-e
|
|
220
270
|
description: 'Creates epics and stories from PRD with full FR coverage. Use when user says "create epics", "break into stories", "aped epics", or invokes /aped-e.'
|
|
271
|
+
license: MIT
|
|
272
|
+
metadata:
|
|
273
|
+
author: yabafre
|
|
274
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
221
275
|
---
|
|
222
276
|
|
|
223
277
|
# APED Epics & Stories — Requirements Decomposition
|
|
224
278
|
|
|
279
|
+
## Critical Rules
|
|
280
|
+
|
|
281
|
+
- EVERY FR must map to exactly one epic — no orphans, no phantoms
|
|
282
|
+
- Epics describe USER VALUE, not technical layers — "User Authentication" not "Database Setup"
|
|
283
|
+
- Each story must be completable in 1 dev session — split if >8 tasks
|
|
284
|
+
- Quality is more important than speed — do not skip coverage validation
|
|
285
|
+
|
|
225
286
|
## Setup
|
|
226
287
|
|
|
227
288
|
1. Read \`${a}/config.yaml\` — extract config including \`ticket_system\`
|
|
@@ -302,6 +363,19 @@ mkdir -p ${o}/stories
|
|
|
302
363
|
2. Create story files in \`${o}/stories/\` using \`${a}/templates/story.md\`
|
|
303
364
|
3. Update \`${o}/state.yaml\` with sprint section and pipeline phase
|
|
304
365
|
|
|
366
|
+
## Example
|
|
367
|
+
|
|
368
|
+
PRD with 25 FRs → 3 epics:
|
|
369
|
+
- Epic 1: "Users can manage inventory" (FR1-FR8, 4 stories)
|
|
370
|
+
- Epic 2: "Managers can monitor stock levels" (FR9-FR16, 3 stories)
|
|
371
|
+
- Epic 3: "System sends automated alerts" (FR17-FR25, 3 stories)
|
|
372
|
+
|
|
373
|
+
## Common Issues
|
|
374
|
+
|
|
375
|
+
- **Coverage validation fails**: Run \`validate-coverage.sh\` — lists orphan FRs
|
|
376
|
+
- **Epic too large**: Split by sub-domain — e.g., "User Auth" → "Registration" + "Sessions"
|
|
377
|
+
- **Forward dependencies**: If story B needs A, merge them or restructure
|
|
378
|
+
|
|
305
379
|
## Chain
|
|
306
380
|
|
|
307
381
|
Invoke Skill tool with \`skill: "aped-d"\` to proceed to Dev Sprint.
|
|
@@ -314,10 +388,21 @@ Invoke Skill tool with \`skill: "aped-d"\` to proceed to Dev Sprint.
|
|
|
314
388
|
name: aped-d
|
|
315
389
|
description: 'Implements next story with TDD red-green-refactor cycle. Use when user says "start dev", "implement story", "aped dev", or invokes /aped-d.'
|
|
316
390
|
disable-model-invocation: true
|
|
391
|
+
license: MIT
|
|
392
|
+
metadata:
|
|
393
|
+
author: yabafre
|
|
394
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
317
395
|
---
|
|
318
396
|
|
|
319
397
|
# APED Dev Sprint — TDD Story Implementation
|
|
320
398
|
|
|
399
|
+
## Critical Rules
|
|
400
|
+
|
|
401
|
+
- NEVER mark a task \`[x]\` without passing all 5 gate conditions
|
|
402
|
+
- ALWAYS write the failing test FIRST — no implementation without a RED test
|
|
403
|
+
- Take your time — quality is more important than speed
|
|
404
|
+
- Do not skip validation steps or test runs
|
|
405
|
+
|
|
321
406
|
## Setup
|
|
322
407
|
|
|
323
408
|
1. Read \`${a}/config.yaml\` — extract config including \`ticket_system\`, \`git_provider\`
|
|
@@ -395,6 +480,21 @@ Read \`git_provider\` and \`ticket_system\` from config:
|
|
|
395
480
|
1. Update story: mark tasks \`[x]\`, fill Dev Agent Record
|
|
396
481
|
2. Update \`${o}/state.yaml\`: story — \`review\`
|
|
397
482
|
3. Invoke Skill tool with \`skill: "aped-r"\` to proceed to Review phase
|
|
483
|
+
|
|
484
|
+
## Example
|
|
485
|
+
|
|
486
|
+
Story "1-2-user-registration":
|
|
487
|
+
1. RED: write test \`expect(register({email, password})).resolves.toHaveProperty('id')\` → fails
|
|
488
|
+
2. GREEN: implement \`register()\` → test passes
|
|
489
|
+
3. REFACTOR: extract validation → tests still pass
|
|
490
|
+
4. GATE: tests exist ✓, pass ✓, matches spec ✓, ACs met ✓, no regressions ✓ → mark \`[x]\`
|
|
491
|
+
|
|
492
|
+
## Common Issues
|
|
493
|
+
|
|
494
|
+
- **Test framework not detected**: Ensure package.json has vitest/jest dependency, or use \`run-tests.sh\` manually
|
|
495
|
+
- **3 consecutive failures**: HALT — ask user. Do not brute-force; the approach may be wrong
|
|
496
|
+
- **Missing dependency**: HALT — ask user before installing. Do not add deps silently
|
|
497
|
+
- **Tests pass before writing code**: The test is wrong — it doesn't test new behavior. Rewrite it
|
|
398
498
|
`,
|
|
399
499
|
},
|
|
400
500
|
// ── aped-r ──────────────────────────────────────────────
|
|
@@ -404,10 +504,21 @@ Read \`git_provider\` and \`ticket_system\` from config:
|
|
|
404
504
|
name: aped-r
|
|
405
505
|
description: 'Reviews completed stories adversarially with minimum 3 findings. Use when user says "review code", "run review", "aped review", or invokes /aped-r.'
|
|
406
506
|
disable-model-invocation: true
|
|
507
|
+
license: MIT
|
|
508
|
+
metadata:
|
|
509
|
+
author: yabafre
|
|
510
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
407
511
|
---
|
|
408
512
|
|
|
409
513
|
# APED Review — Adversarial Code Review
|
|
410
514
|
|
|
515
|
+
## Critical Rules
|
|
516
|
+
|
|
517
|
+
- MINIMUM 3 findings — if you found fewer, you didn't look hard enough. Re-examine.
|
|
518
|
+
- NEVER skip the git audit — it catches undocumented file changes
|
|
519
|
+
- Take your time — thoroughness is more important than speed
|
|
520
|
+
- Do not rubber-stamp. Your job is to find problems, not to validate.
|
|
521
|
+
|
|
411
522
|
## Setup
|
|
412
523
|
|
|
413
524
|
1. Read \`${a}/config.yaml\` — extract config including \`git_provider\`
|
|
@@ -464,6 +575,20 @@ Severity: CRITICAL > HIGH > MEDIUM > LOW. Format: \`[Severity] Description [file
|
|
|
464
575
|
## State Update
|
|
465
576
|
|
|
466
577
|
Update \`${o}/state.yaml\`. If more stories remain: invoke Skill tool with \`skill: "aped-d"\`. If all stories done: report pipeline completion.
|
|
578
|
+
|
|
579
|
+
## Example
|
|
580
|
+
|
|
581
|
+
Review of story "1-2-user-registration":
|
|
582
|
+
- [HIGH] No input validation on email field [src/auth/register.ts:42]
|
|
583
|
+
- [MEDIUM] Password stored without hashing [src/auth/register.ts:58]
|
|
584
|
+
- [LOW] Missing error message i18n [src/auth/register.ts:71]
|
|
585
|
+
Result: 3 findings → story back to \`in-progress\` with [AI-Review] items.
|
|
586
|
+
|
|
587
|
+
## Common Issues
|
|
588
|
+
|
|
589
|
+
- **Git audit fails (no git repo)**: Script handles this — skips audit with WARNING, proceeds to code review
|
|
590
|
+
- **Fewer than 3 findings**: Re-examine edge cases, error handling, test gaps, security surface
|
|
591
|
+
- **Story file not found**: Check \`sprint.stories\` in state.yaml — story key may have changed
|
|
467
592
|
`,
|
|
468
593
|
},
|
|
469
594
|
// ── aped-ux ─────────────────────────────────────────────
|
|
@@ -471,12 +596,37 @@ Update \`${o}/state.yaml\`. If more stories remain: invoke Skill tool with \`ski
|
|
|
471
596
|
path: `${a}/aped-ux/SKILL.md`,
|
|
472
597
|
content: `---
|
|
473
598
|
name: aped-ux
|
|
474
|
-
description: 'Designs UX
|
|
599
|
+
description: 'Designs UX via the ANF framework (Assemble design system, Normalize with React preview, Fill all screens). Use when user says "design UX", "UX spec", "aped ux", or invokes /aped-ux. Runs between PRD and Epics phases.'
|
|
600
|
+
license: MIT
|
|
601
|
+
compatibility: 'Requires Node.js 18+ and npm for Vite+React preview scaffold'
|
|
602
|
+
metadata:
|
|
603
|
+
author: yabafre
|
|
604
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
475
605
|
---
|
|
476
606
|
|
|
477
|
-
# APED UX —
|
|
607
|
+
# APED UX — ANF Framework
|
|
608
|
+
|
|
609
|
+
## Critical Rules
|
|
610
|
+
|
|
611
|
+
- NEVER use lorem ipsum — every text element must reflect the actual product from the PRD
|
|
612
|
+
- ALWAYS run the pre-delivery checklist before presenting to user
|
|
613
|
+
- Take your time with each screen — quality is more important than speed
|
|
614
|
+
- Do not skip the user review cycle — the prototype MUST be approved before proceeding
|
|
615
|
+
|
|
616
|
+
Produces a validated, interactive React prototype from the PRD. The prototype becomes the UX spec that \`/aped-e\` consumes as the visual source of truth.
|
|
478
617
|
|
|
479
|
-
|
|
618
|
+
**ANF = Assemble → Normalize → Fill**
|
|
619
|
+
|
|
620
|
+
\`\`\`
|
|
621
|
+
A: Design DNA N: React Preview F: Complete + Validate
|
|
622
|
+
(inputs) (live prototype) (user-approved spec)
|
|
623
|
+
|
|
624
|
+
Inspirations Vite + React app All screens built
|
|
625
|
+
+ UI library with REAL content + interaction states
|
|
626
|
+
+ color/typo from PRD context + responsive behavior
|
|
627
|
+
+ components (no lorem ipsum) + user review cycles
|
|
628
|
+
= UX spec for /aped-e
|
|
629
|
+
\`\`\`
|
|
480
630
|
|
|
481
631
|
## Setup
|
|
482
632
|
|
|
@@ -489,139 +639,226 @@ Generates UX specifications from the PRD before epics creation. Produces screen
|
|
|
489
639
|
## Task Tracking
|
|
490
640
|
|
|
491
641
|
\`\`\`
|
|
492
|
-
TaskCreate: "
|
|
493
|
-
TaskCreate: "
|
|
494
|
-
TaskCreate: "
|
|
495
|
-
TaskCreate: "
|
|
496
|
-
TaskCreate: "
|
|
497
|
-
TaskCreate: "
|
|
498
|
-
TaskCreate: "
|
|
642
|
+
TaskCreate: "A — Assemble: collect design DNA"
|
|
643
|
+
TaskCreate: "A — Assemble: scaffold Vite + React preview app"
|
|
644
|
+
TaskCreate: "N — Normalize: build layout + navigation + design tokens"
|
|
645
|
+
TaskCreate: "N — Normalize: implement screens with real PRD content"
|
|
646
|
+
TaskCreate: "F — Fill: complete all states (loading, error, empty)"
|
|
647
|
+
TaskCreate: "F — Fill: responsive + accessibility pass"
|
|
648
|
+
TaskCreate: "F — Fill: user review + validation"
|
|
499
649
|
\`\`\`
|
|
500
650
|
|
|
501
|
-
|
|
651
|
+
---
|
|
652
|
+
|
|
653
|
+
## A — ASSEMBLE (Design DNA)
|
|
502
654
|
|
|
503
|
-
|
|
504
|
-
- Extract: user journeys, FRs grouped by capability, actors, key workflows
|
|
655
|
+
### A1: Collect Design Inputs
|
|
505
656
|
|
|
506
|
-
|
|
657
|
+
Ask the user (adapt to \`communication_language\`):
|
|
507
658
|
|
|
508
|
-
|
|
659
|
+
1. **Inspirations** — "Share screenshots, URLs, or describe the visual direction you want"
|
|
660
|
+
- Accept: image files (Read tool), URLs (WebFetch), or verbal description
|
|
661
|
+
- If images: analyze layout, density, color palette, typography, component style
|
|
662
|
+
- If URLs: fetch and analyze visual patterns
|
|
509
663
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
664
|
+
2. **UI Library** — "Which component library? Or none (custom)?"
|
|
665
|
+
- Options: shadcn/ui, Radix UI, MUI, Ant Design, Chakra UI, Mantine, none
|
|
666
|
+
- If specified: use MCP context7 (\`resolve-library-id\` then \`query-docs\`) to load component API
|
|
667
|
+
- If none: will create custom components styled to match inspirations
|
|
514
668
|
|
|
515
|
-
|
|
669
|
+
3. **Design Tokens** — Extract or ask:
|
|
670
|
+
- **Colors**: primary, secondary, accent, neutral scale, semantic (success/warning/error/info)
|
|
671
|
+
- **Typography**: font family, size scale (xs to 2xl), weight scale, line heights
|
|
672
|
+
- **Spacing**: base unit (4px/8px), scale (1-12)
|
|
673
|
+
- **Radius**: none/sm/md/lg/full
|
|
674
|
+
- **Shadows**: sm/md/lg/xl
|
|
516
675
|
|
|
517
|
-
|
|
676
|
+
4. **Branding** — Logo, brand colors, tone (playful/serious/minimal/bold)
|
|
518
677
|
|
|
519
|
-
|
|
678
|
+
### A2: Scaffold Preview App
|
|
520
679
|
|
|
521
|
-
|
|
680
|
+
\`\`\`bash
|
|
681
|
+
mkdir -p ${o}/ux-preview
|
|
682
|
+
cd ${o}/ux-preview
|
|
683
|
+
npm create vite@latest . -- --template react-ts
|
|
684
|
+
npm install
|
|
522
685
|
\`\`\`
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
686
|
+
|
|
687
|
+
If UI library chosen:
|
|
688
|
+
\`\`\`bash
|
|
689
|
+
# Example for shadcn/ui:
|
|
690
|
+
npx shadcn@latest init
|
|
691
|
+
# Example for MUI:
|
|
692
|
+
npm install @mui/material @emotion/react @emotion/styled
|
|
528
693
|
\`\`\`
|
|
529
694
|
|
|
530
|
-
|
|
531
|
-
|
|
695
|
+
Create design token files:
|
|
696
|
+
- \`src/tokens/colors.ts\` — color palette as CSS custom properties or theme object
|
|
697
|
+
- \`src/tokens/typography.ts\` — font config
|
|
698
|
+
- \`src/tokens/spacing.ts\` — spacing scale
|
|
699
|
+
- \`src/theme.ts\` — unified theme export
|
|
532
700
|
|
|
533
|
-
|
|
701
|
+
Create \`src/data/mock.ts\` — **real content from PRD**, not lorem ipsum:
|
|
702
|
+
- Extract product name, user types, feature names, sample data from PRD
|
|
703
|
+
- Generate realistic mock data that matches the product domain
|
|
704
|
+
- Example: if building a project manager, mock projects have real-sounding names and dates
|
|
534
705
|
|
|
535
|
-
|
|
706
|
+
\`TaskUpdate: "A — Assemble: scaffold" → completed\`
|
|
536
707
|
|
|
537
|
-
|
|
538
|
-
┌─────────────────────────────────┐
|
|
539
|
-
│ [Logo] [Nav] [Avatar] │
|
|
540
|
-
├─────────────────────────────────┤
|
|
541
|
-
│ │
|
|
542
|
-
│ ┌──────────┐ ┌──────────────┐ │
|
|
543
|
-
│ │ Sidebar │ │ Content │ │
|
|
544
|
-
│ │ │ │ │ │
|
|
545
|
-
│ │ • Item 1 │ │ ┌────────┐ │ │
|
|
546
|
-
│ │ • Item 2 │ │ │ Card 1 │ │ │
|
|
547
|
-
│ │ • Item 3 │ │ └────────┘ │ │
|
|
548
|
-
│ │ │ │ ┌────────┐ │ │
|
|
549
|
-
│ │ │ │ │ Card 2 │ │ │
|
|
550
|
-
│ └──────────┘ │ └────────┘ │ │
|
|
551
|
-
│ └──────────────┘ │
|
|
552
|
-
├─────────────────────────────────┤
|
|
553
|
-
│ [Footer] │
|
|
554
|
-
└─────────────────────────────────┘
|
|
555
|
-
\`\`\`
|
|
708
|
+
---
|
|
556
709
|
|
|
557
|
-
|
|
558
|
-
- Use box drawing characters (┌ ─ ┐ │ └ ┘ ├ ┤)
|
|
559
|
-
- Label every zone with its purpose
|
|
560
|
-
- Show content hierarchy (headings, lists, cards, forms)
|
|
561
|
-
- Annotate interactive elements: \`[Button]\`, \`(Input)\`, \`{Dropdown}\`
|
|
562
|
-
- Include responsive notes: "sidebar collapses to hamburger on mobile"
|
|
710
|
+
## N — NORMALIZE (React Preview with Real Content)
|
|
563
711
|
|
|
564
|
-
|
|
712
|
+
### N1: Layout + Navigation
|
|
565
713
|
|
|
566
|
-
|
|
714
|
+
Read PRD user journeys and screen inventory (from \`${a}/aped-ux/references/ux-patterns.md\`).
|
|
567
715
|
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
│ ├── Header (logo, nav, avatar)
|
|
573
|
-
│ ├── Sidebar (nav items, collapsible)
|
|
574
|
-
│ └── Footer
|
|
575
|
-
├── Shared
|
|
576
|
-
│ ├── Button (primary, secondary, ghost, danger)
|
|
577
|
-
│ ├── Input (text, email, password, search)
|
|
578
|
-
│ ├── Card (title, body, actions)
|
|
579
|
-
│ ├── Modal (header, body, footer)
|
|
580
|
-
│ └── Toast (success, error, warning, info)
|
|
581
|
-
└── Feature-specific
|
|
582
|
-
├── UserAvatar (image, initials fallback)
|
|
583
|
-
├── DataTable (sortable, filterable, paginated)
|
|
584
|
-
└── StatsCard (value, label, trend)
|
|
585
|
-
\`\`\`
|
|
716
|
+
1. **Map screens** from PRD user journeys:
|
|
717
|
+
- Each journey → concrete screens
|
|
718
|
+
- Name: \`{area}-{action}\` slug (e.g., \`auth-login\`, \`dashboard-overview\`)
|
|
719
|
+
- Classify: form, list, detail, dashboard, wizard, modal
|
|
586
720
|
|
|
587
|
-
|
|
588
|
-
-
|
|
589
|
-
-
|
|
590
|
-
-
|
|
591
|
-
- **Accessibility**: ARIA role, keyboard navigation, focus management
|
|
721
|
+
2. **Build layout shell** — \`src/layouts/\`:
|
|
722
|
+
- App layout (header, sidebar/nav, content, footer)
|
|
723
|
+
- Auth layout (centered card)
|
|
724
|
+
- Apply design tokens throughout
|
|
592
725
|
|
|
593
|
-
|
|
726
|
+
3. **Set up routing** — React Router with all screens as routes:
|
|
727
|
+
- \`src/App.tsx\` — router config
|
|
728
|
+
- \`src/pages/{ScreenSlug}.tsx\` — one page per screen (initially placeholder)
|
|
594
729
|
|
|
595
|
-
|
|
730
|
+
4. **Navigation** — read rules P9 (Navigation) from \`${a}/aped-ux/references/ux-patterns.md\`:
|
|
731
|
+
- Sidebar or top nav matching design inspiration
|
|
732
|
+
- Active state indicators on current route
|
|
733
|
+
- Mobile: bottom nav ≤5 items (icon + label) or hamburger/drawer
|
|
734
|
+
- Desktop ≥1024px: sidebar; smaller: bottom/top nav
|
|
735
|
+
- Predictable back behavior, preserve scroll/state
|
|
736
|
+
- Same navigation placement across all pages
|
|
596
737
|
|
|
597
|
-
|
|
598
|
-
2. **Empty states**: first-use, no-results, error
|
|
599
|
-
3. **Error handling**: inline validation, toast, error page
|
|
600
|
-
4. **Animations**: page transitions, micro-interactions (optional)
|
|
601
|
-
5. **Responsive behavior**: breakpoints, layout changes, touch targets
|
|
738
|
+
Run: \`npm run dev\` — verify app runs with working navigation.
|
|
602
739
|
|
|
603
|
-
|
|
740
|
+
### N2: Screen Implementation
|
|
741
|
+
|
|
742
|
+
For each screen, in priority order (core journey first):
|
|
743
|
+
|
|
744
|
+
1. **Read relevant FRs** for this screen
|
|
745
|
+
2. **Build with UI library components** (or custom styled components)
|
|
746
|
+
3. **Use real mock data** from \`src/data/mock.ts\` — product names, user names, realistic dates and numbers
|
|
747
|
+
4. **Implement the primary content** — forms, tables, cards, etc.
|
|
748
|
+
5. **Wire interactions** — form submits, button clicks, navigation (can be no-op handlers)
|
|
749
|
+
|
|
750
|
+
**CRITICAL: No lorem ipsum.** Every text element must reflect the actual product:
|
|
751
|
+
- If it's a SaaS dashboard, show realistic metric names and values
|
|
752
|
+
- If it's an e-commerce, show real-looking product names and prices
|
|
753
|
+
- If it's a project tool, show plausible project names and statuses
|
|
754
|
+
|
|
755
|
+
\`TaskUpdate: "N — Normalize: implement screens" → completed\`
|
|
604
756
|
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
757
|
+
---
|
|
758
|
+
|
|
759
|
+
## F — FILL (Complete + Validate)
|
|
760
|
+
|
|
761
|
+
### F1: Interaction States
|
|
762
|
+
|
|
763
|
+
Read rules P7 (Animation) and P8 (Forms & Feedback) from \`${a}/aped-ux/references/ux-patterns.md\`.
|
|
764
|
+
|
|
765
|
+
For each screen, add:
|
|
766
|
+
|
|
767
|
+
1. **Loading states** — skeleton/shimmer for operations >300ms, spinner for buttons
|
|
768
|
+
2. **Empty states** — first-use experience with helpful message + CTA, "no results" views
|
|
769
|
+
3. **Error states** — inline validation on blur, error below field, error summary at top for long forms
|
|
770
|
+
4. **Success feedback** — toast auto-dismiss 3-5s, confirmation messages
|
|
771
|
+
5. **Disabled states** — opacity 0.38-0.5, cursor change, non-interactive
|
|
772
|
+
6. **Press feedback** — visual response within 80-150ms (ripple, opacity, scale 0.95-1.05)
|
|
773
|
+
7. **Animations** — 150-300ms micro-interactions, transform/opacity only, ease-out enter, ease-in exit
|
|
774
|
+
|
|
775
|
+
### F2: Responsive + Dark Mode
|
|
776
|
+
|
|
777
|
+
Read rules P5 (Layout) and P6 (Typography & Color) from \`${a}/aped-ux/references/ux-patterns.md\`.
|
|
778
|
+
|
|
779
|
+
1. **Responsive** — test and fix at 3 breakpoints:
|
|
780
|
+
- Mobile (375px): single column, hamburger nav, touch targets ≥44px, safe areas
|
|
781
|
+
- Tablet (768px): adapted layout, sidebar may collapse, adjusted gutters
|
|
782
|
+
- Desktop (1440px): full layout, max-width container, sidebar visible
|
|
783
|
+
|
|
784
|
+
2. **Dark mode** — if applicable:
|
|
785
|
+
- Semantic color tokens mapped per theme (not hardcoded hex)
|
|
786
|
+
- Desaturated/lighter variants, NOT inverted colors
|
|
787
|
+
- Primary text ≥ 4.5:1, secondary ≥ 3:1 in both modes
|
|
788
|
+
- Borders/dividers distinguishable in both modes
|
|
789
|
+
- Modal scrim: 40-60% black, foreground legible
|
|
790
|
+
- Test both themes independently
|
|
791
|
+
|
|
792
|
+
### F3: Accessibility Pass
|
|
793
|
+
|
|
794
|
+
Read rules P1 (Accessibility) and P2 (Touch) from \`${a}/aped-ux/references/ux-patterns.md\`.
|
|
795
|
+
|
|
796
|
+
- Contrast: 4.5:1 normal text, 3:1 large text (test with browser devtools)
|
|
797
|
+
- Focus rings: 2-4px, visible on all interactive elements
|
|
798
|
+
- Tab order: matches visual order
|
|
799
|
+
- Form labels: visible, associated, not placeholder-only
|
|
800
|
+
- Icon buttons: aria-label
|
|
801
|
+
- Skip-to-main link
|
|
802
|
+
- Heading hierarchy: h1→h2→h3, no skipping
|
|
803
|
+
- Touch targets: ≥44x44pt with ≥8px spacing
|
|
804
|
+
- No information conveyed by color alone
|
|
805
|
+
|
|
806
|
+
### F4: Pre-Delivery Checklist
|
|
807
|
+
|
|
808
|
+
Read the full Pre-Delivery Checklist from \`${a}/aped-ux/references/ux-patterns.md\`.
|
|
809
|
+
|
|
810
|
+
Run through ALL checks before presenting to user:
|
|
811
|
+
|
|
812
|
+
**Visual Quality** — SVG icons, consistent family, no press jitter, semantic tokens, brand assets
|
|
813
|
+
**Interaction** — press feedback, touch targets, micro-interaction timing, disabled states, focus order
|
|
814
|
+
**Light/Dark Mode** — contrast ratios in both, dividers visible, scrim legibility
|
|
815
|
+
**Layout** — safe areas, fixed bars, tested 3 devices, spacing rhythm, text readability
|
|
816
|
+
**Accessibility** — labels, hints, errors, color independence, reduced motion, ARIA
|
|
817
|
+
|
|
818
|
+
If any check fails: fix before showing to user.
|
|
819
|
+
|
|
820
|
+
### F5: User Review Cycle
|
|
821
|
+
|
|
822
|
+
**This is the most important step.** The prototype must be validated by the user.
|
|
823
|
+
|
|
824
|
+
1. Run \`npm run dev\` and give the user the local URL
|
|
825
|
+
2. Present the pre-delivery checklist results
|
|
826
|
+
3. Ask: "Review each screen. What needs to change?"
|
|
827
|
+
4. Categories of feedback:
|
|
828
|
+
- **Layout** — move, resize, reorder sections
|
|
829
|
+
- **Content** — missing info, wrong hierarchy, unclear labels
|
|
830
|
+
- **Style** — colors, spacing, typography adjustments
|
|
831
|
+
- **Flow** — navigation changes, missing screens, wrong order
|
|
832
|
+
- **Components** — wrong component type, missing states, wrong behavior
|
|
833
|
+
- **Dark mode** — contrast issues, token problems, scrim opacity
|
|
834
|
+
|
|
835
|
+
5. **Iterate** until user says "approved" or "good enough"
|
|
836
|
+
6. Each iteration: apply feedback → run checklist again → present → ask again
|
|
837
|
+
|
|
838
|
+
\`TaskUpdate: "F — Fill: user review" → completed\`
|
|
839
|
+
|
|
840
|
+
---
|
|
612
841
|
|
|
613
842
|
## Output
|
|
614
843
|
|
|
844
|
+
Once user approves the prototype:
|
|
845
|
+
|
|
615
846
|
\`\`\`bash
|
|
616
847
|
mkdir -p ${o}/ux
|
|
617
848
|
\`\`\`
|
|
618
849
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
850
|
+
1. **Preview app stays** at \`${o}/ux-preview/\` — living reference
|
|
851
|
+
2. Write \`${o}/ux/design-spec.md\`:
|
|
852
|
+
- Design tokens (colors, typo, spacing, radius)
|
|
853
|
+
- UI library + version
|
|
854
|
+
- Screen inventory with routes
|
|
855
|
+
- Component tree with props
|
|
856
|
+
- Layout specifications
|
|
857
|
+
- Responsive breakpoints
|
|
858
|
+
3. Write \`${o}/ux/screen-inventory.md\` — all screens with FR mapping
|
|
859
|
+
4. Write \`${o}/ux/components.md\` — component catalog from the preview app
|
|
860
|
+
5. Write \`${o}/ux/flows.md\` — navigation flow diagrams
|
|
861
|
+
6. Take **screenshots** of each screen at desktop resolution → \`${o}/ux/screenshots/\`
|
|
625
862
|
|
|
626
863
|
## State Update
|
|
627
864
|
|
|
@@ -633,12 +870,28 @@ pipeline:
|
|
|
633
870
|
ux:
|
|
634
871
|
status: "done"
|
|
635
872
|
output: "${o}/ux/"
|
|
873
|
+
preview: "${o}/ux-preview/"
|
|
874
|
+
design_system:
|
|
875
|
+
ui_library: "{library}"
|
|
876
|
+
tokens: "${o}/ux-preview/src/tokens/"
|
|
636
877
|
\`\`\`
|
|
637
878
|
|
|
638
879
|
## Chain
|
|
639
880
|
|
|
640
881
|
Invoke Skill tool with \`skill: "aped-e"\` to proceed to Epics phase.
|
|
641
|
-
\`/aped-e\`
|
|
882
|
+
\`/aped-e\` reads \`${o}/ux/design-spec.md\` and the preview app to enrich stories with:
|
|
883
|
+
- Component references (which component to use, which props)
|
|
884
|
+
- Screen references (wireframe screenshots)
|
|
885
|
+
- Design tokens to respect
|
|
886
|
+
- Responsive requirements per screen
|
|
887
|
+
|
|
888
|
+
## Common Issues
|
|
889
|
+
|
|
890
|
+
- **npm create vite fails**: Ensure Node.js 18+ is installed. Try \`node --version\` first.
|
|
891
|
+
- **UI library install fails**: Check network. For shadcn, ensure the project has a tsconfig.json.
|
|
892
|
+
- **User gives no design inspiration**: Use the product domain to suggest a style — "SaaS dashboard" → clean/minimal, "e-commerce" → card-heavy/visual
|
|
893
|
+
- **Prototype looks wrong on mobile**: Check responsive breakpoints — sidebar must collapse, touch targets ≥ 44px
|
|
894
|
+
- **Dark mode contrast fails**: Use semantic tokens, not hardcoded colors. Check with browser devtools contrast checker.
|
|
642
895
|
`,
|
|
643
896
|
},
|
|
644
897
|
// ── aped-s ──────────────────────────────────────────────
|
|
@@ -647,7 +900,11 @@ Invoke Skill tool with \`skill: "aped-e"\` to proceed to Epics phase.
|
|
|
647
900
|
content: `---
|
|
648
901
|
name: aped-s
|
|
649
902
|
description: 'Shows sprint status dashboard with progress, blockers, and next actions. Use when user says "sprint status", "show progress", "aped status", or invokes /aped-s.'
|
|
650
|
-
allowed-tools: Read
|
|
903
|
+
allowed-tools: "Read Grep Glob Bash"
|
|
904
|
+
license: MIT
|
|
905
|
+
metadata:
|
|
906
|
+
author: yabafre
|
|
907
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
651
908
|
---
|
|
652
909
|
|
|
653
910
|
# APED Status — Sprint Dashboard
|
|
@@ -709,6 +966,20 @@ If \`ticket_system\` is not \`none\`:
|
|
|
709
966
|
## Output
|
|
710
967
|
|
|
711
968
|
Display only — no file writes, no state changes. Pure read-only dashboard.
|
|
969
|
+
|
|
970
|
+
## Example
|
|
971
|
+
|
|
972
|
+
\`\`\`
|
|
973
|
+
Pipeline: A[✓] → P[✓] → UX[✓] → E[✓] → D[▶] → R[ ]
|
|
974
|
+
Epic 1: User Auth [████████░░] 80% (4/5)
|
|
975
|
+
Epic 2: Dashboard [██░░░░░░░░] 20% (1/5)
|
|
976
|
+
Next: /aped-d (story 1-5-session-mgmt is ready-for-dev)
|
|
977
|
+
\`\`\`
|
|
978
|
+
|
|
979
|
+
## Common Issues
|
|
980
|
+
|
|
981
|
+
- **State file not found**: Ensure \`${o}/state.yaml\` exists — run /aped-a first
|
|
982
|
+
- **Stories show wrong status**: State.yaml may be stale — re-run the last phase to update it
|
|
712
983
|
`,
|
|
713
984
|
},
|
|
714
985
|
// ── aped-c ──────────────────────────────────────────────
|
|
@@ -718,6 +989,10 @@ Display only — no file writes, no state changes. Pure read-only dashboard.
|
|
|
718
989
|
name: aped-c
|
|
719
990
|
description: 'Manages scope changes and pivots during development with impact analysis. Use when user says "correct course", "change scope", "pivot", "aped correct", or invokes /aped-c.'
|
|
720
991
|
disable-model-invocation: true
|
|
992
|
+
license: MIT
|
|
993
|
+
metadata:
|
|
994
|
+
author: yabafre
|
|
995
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
721
996
|
---
|
|
722
997
|
|
|
723
998
|
# APED Correct Course — Managed Pivot
|
|
@@ -791,6 +1066,22 @@ After applying changes, verify:
|
|
|
791
1066
|
- No epic became too large (>8 stories)
|
|
792
1067
|
- No story became too large (>8 tasks)
|
|
793
1068
|
- Changed stories still fit single-session size
|
|
1069
|
+
|
|
1070
|
+
## Example
|
|
1071
|
+
|
|
1072
|
+
User says "We need to add OAuth — the client changed requirements":
|
|
1073
|
+
1. Impact: minor change — add FRs to PRD, create new stories
|
|
1074
|
+
2. Update PRD: add FR26-FR28 for OAuth
|
|
1075
|
+
3. Re-validate PRD
|
|
1076
|
+
4. Add stories to Epic 1 for OAuth support
|
|
1077
|
+
5. Re-validate coverage
|
|
1078
|
+
6. Reset new stories to \`ready-for-dev\`
|
|
1079
|
+
|
|
1080
|
+
## Common Issues
|
|
1081
|
+
|
|
1082
|
+
- **User wants to change everything**: Confirm scope — "Is this a pivot or an addition?"
|
|
1083
|
+
- **Invalidated stories have committed code**: Archive the code changes, don't delete — user may want to reference them
|
|
1084
|
+
- **FR count exceeds 80 after change**: Some features may need to move to a Growth phase scope
|
|
794
1085
|
`,
|
|
795
1086
|
},
|
|
796
1087
|
// ── aped-ctx ────────────────────────────────────────────
|
|
@@ -799,7 +1090,11 @@ After applying changes, verify:
|
|
|
799
1090
|
content: `---
|
|
800
1091
|
name: aped-ctx
|
|
801
1092
|
description: 'Analyzes existing codebase to generate project context for brownfield development. Use when user says "document codebase", "project context", "existing project", "aped context", or invokes /aped-ctx. Not for new project ideation — use aped-a for greenfield.'
|
|
802
|
-
allowed-tools: Read
|
|
1093
|
+
allowed-tools: "Read Grep Glob Bash"
|
|
1094
|
+
license: MIT
|
|
1095
|
+
metadata:
|
|
1096
|
+
author: yabafre
|
|
1097
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
803
1098
|
---
|
|
804
1099
|
|
|
805
1100
|
# APED Context — Brownfield Project Analysis
|
|
@@ -892,6 +1187,20 @@ project_context:
|
|
|
892
1187
|
Suggest:
|
|
893
1188
|
- If no brief exists: run \`/aped-a\` with project context loaded
|
|
894
1189
|
- If brief exists: context will inform \`/aped-p\` and \`/aped-d\` decisions
|
|
1190
|
+
|
|
1191
|
+
## Example
|
|
1192
|
+
|
|
1193
|
+
Scanning a Next.js SaaS project → project-context.md:
|
|
1194
|
+
- Stack: TypeScript, Next.js 14, Prisma, PostgreSQL
|
|
1195
|
+
- Pattern: App Router, server components, feature-based folders
|
|
1196
|
+
- Conventions: camelCase files, Zod validation, Tailwind CSS
|
|
1197
|
+
- 45 dependencies, 3 outdated, 0 security advisories
|
|
1198
|
+
|
|
1199
|
+
## Common Issues
|
|
1200
|
+
|
|
1201
|
+
- **No package.json/Cargo.toml found**: Project may be multi-language or unconventional — scan for entry points manually
|
|
1202
|
+
- **Very large codebase (>1000 files)**: Focus on src/ and key config files, don't scan node_modules or build output
|
|
1203
|
+
- **Monorepo detected**: Document each package/app separately in the context file
|
|
895
1204
|
`,
|
|
896
1205
|
},
|
|
897
1206
|
// ── aped-qa ─────────────────────────────────────────────
|
|
@@ -900,6 +1209,10 @@ Suggest:
|
|
|
900
1209
|
content: `---
|
|
901
1210
|
name: aped-qa
|
|
902
1211
|
description: 'Generates E2E and integration tests from acceptance criteria for completed features. Use when user says "generate tests", "E2E tests", "integration tests", "aped qa", or invokes /aped-qa.'
|
|
1212
|
+
license: MIT
|
|
1213
|
+
metadata:
|
|
1214
|
+
author: yabafre
|
|
1215
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
903
1216
|
---
|
|
904
1217
|
|
|
905
1218
|
# APED QA — E2E & Integration Test Generation
|
|
@@ -1002,6 +1315,19 @@ QA doesn't affect pipeline state — it's an additive quality layer.
|
|
|
1002
1315
|
## Next Steps
|
|
1003
1316
|
|
|
1004
1317
|
Suggest running \`/aped-s\` to view updated sprint status with QA coverage noted.
|
|
1318
|
+
|
|
1319
|
+
## Example
|
|
1320
|
+
|
|
1321
|
+
Epic 1 completed (3 stories) → generate QA:
|
|
1322
|
+
- E2E: 5 tests covering registration → login → dashboard journey
|
|
1323
|
+
- Integration: 3 API tests for auth endpoints
|
|
1324
|
+
- Report: 8/8 ACs covered, 0 gaps, 1 manual test suggested (email verification)
|
|
1325
|
+
|
|
1326
|
+
## Common Issues
|
|
1327
|
+
|
|
1328
|
+
- **Test framework not detected**: Check project config — ensure test runner is in dependencies
|
|
1329
|
+
- **ACs not testable**: Some ACs describe UX behavior — flag as "manual test required" in report
|
|
1330
|
+
- **Tests fail on generated code**: Review the test — it may assume a specific API shape. Adapt to actual implementation
|
|
1005
1331
|
`,
|
|
1006
1332
|
},
|
|
1007
1333
|
// ── aped-quick ────────────────────────────────────────────
|
|
@@ -1010,6 +1336,10 @@ Suggest running \`/aped-s\` to view updated sprint status with QA coverage noted
|
|
|
1010
1336
|
content: `---
|
|
1011
1337
|
name: aped-quick
|
|
1012
1338
|
description: 'Implements quick fixes and small features bypassing the full pipeline. Use when user says "quick fix", "quick feature", "hotfix", "aped quick", or invokes /aped-quick.'
|
|
1339
|
+
license: MIT
|
|
1340
|
+
metadata:
|
|
1341
|
+
author: yabafre
|
|
1342
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
1013
1343
|
---
|
|
1014
1344
|
|
|
1015
1345
|
# APED Quick — Fast Track for Small Changes
|
|
@@ -1073,6 +1403,20 @@ Read \`ticket_system\` and \`git_provider\` from config.
|
|
|
1073
1403
|
1. Write quick spec to \`${o}/quick-specs/\` (create dir if needed)
|
|
1074
1404
|
2. No state.yaml update — quick specs don't affect pipeline phase
|
|
1075
1405
|
3. Report: files changed, tests added, quick spec path
|
|
1406
|
+
|
|
1407
|
+
## Example
|
|
1408
|
+
|
|
1409
|
+
User: "quick fix the login button not submitting"
|
|
1410
|
+
1. Quick spec: fix, "login form submit handler not wired"
|
|
1411
|
+
2. RED: test that clicking submit calls auth API
|
|
1412
|
+
3. GREEN: wire onClick → submitForm()
|
|
1413
|
+
4. Self-review: tests pass, no security issues
|
|
1414
|
+
5. Commit: \`fix(auth): wire login form submit handler\`
|
|
1415
|
+
|
|
1416
|
+
## Common Issues
|
|
1417
|
+
|
|
1418
|
+
- **Change touches >5 files**: This is too big for quick — recommend full pipeline
|
|
1419
|
+
- **New dependency needed**: HALT — ask user, this may need architectural discussion
|
|
1076
1420
|
`,
|
|
1077
1421
|
},
|
|
1078
1422
|
// ── aped-all ─────────────────────────────────────────────
|
|
@@ -1082,6 +1426,10 @@ Read \`ticket_system\` and \`git_provider\` from config.
|
|
|
1082
1426
|
name: aped-all
|
|
1083
1427
|
description: 'Runs the full APED pipeline from Analyze through Review with auto-resume. Use when user says "run full pipeline", "aped all", or invokes /aped-all.'
|
|
1084
1428
|
disable-model-invocation: true
|
|
1429
|
+
license: MIT
|
|
1430
|
+
metadata:
|
|
1431
|
+
author: yabafre
|
|
1432
|
+
version: ${c.cliVersion || '1.7.1'}
|
|
1085
1433
|
---
|
|
1086
1434
|
|
|
1087
1435
|
# APED Pipeline — Full Orchestrator
|
|
@@ -1127,6 +1475,22 @@ State persists in \`${o}/state.yaml\`. Next \`/aped-all\` resumes from last inco
|
|
|
1127
1475
|
## Completion Report
|
|
1128
1476
|
|
|
1129
1477
|
Total phases, epics, stories, review iterations. Pipeline status: COMPLETE.
|
|
1478
|
+
|
|
1479
|
+
## Example
|
|
1480
|
+
|
|
1481
|
+
Fresh start → full pipeline run:
|
|
1482
|
+
1. A: 3 parallel agents → product brief (5 min)
|
|
1483
|
+
2. P: PRD with 20 FRs generated + validated (3 min)
|
|
1484
|
+
3. UX: user says "skip" → proceed to epics
|
|
1485
|
+
4. E: 3 epics, 8 stories created (3 min)
|
|
1486
|
+
5. D→R loop: 8 stories × (dev + review) cycles
|
|
1487
|
+
6. All done → pipeline COMPLETE
|
|
1488
|
+
|
|
1489
|
+
## Common Issues
|
|
1490
|
+
|
|
1491
|
+
- **Phase fails and can't recover**: Check state.yaml — reset the failed phase to \`in-progress\` and re-run /aped-all
|
|
1492
|
+
- **Context window limit during long pipeline**: Normal — /aped-all chains via Skill tool which starts fresh context per phase
|
|
1493
|
+
- **User wants to skip a phase**: Supported — each phase asks "redo or skip?" if already done
|
|
1130
1494
|
`,
|
|
1131
1495
|
},
|
|
1132
1496
|
];
|