@schilling.mark.a/software-methodology 1.0.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/.github/copilot-instructions.md +106 -0
- package/LICENSE +21 -0
- package/README.md +174 -0
- package/atdd-workflow/SKILL.md +117 -0
- package/atdd-workflow/references/green-phase.md +38 -0
- package/atdd-workflow/references/red-phase.md +62 -0
- package/atdd-workflow/references/refactor-phase.md +75 -0
- package/bdd-specification/SKILL.md +88 -0
- package/bdd-specification/references/example-mapping.md +105 -0
- package/bdd-specification/references/gherkin-patterns.md +214 -0
- package/cicd-pipeline/SKILL.md +64 -0
- package/cicd-pipeline/references/deployment-rollback.md +176 -0
- package/cicd-pipeline/references/environment-promotion.md +159 -0
- package/cicd-pipeline/references/pipeline-stages.md +198 -0
- package/clean-code/SKILL.md +77 -0
- package/clean-code/references/behavioral-patterns.md +329 -0
- package/clean-code/references/creational-patterns.md +197 -0
- package/clean-code/references/enterprise-patterns.md +334 -0
- package/clean-code/references/solid.md +230 -0
- package/clean-code/references/structural-patterns.md +238 -0
- package/continuous-improvement/SKILL.md +69 -0
- package/continuous-improvement/references/measurement.md +133 -0
- package/continuous-improvement/references/process-update.md +118 -0
- package/continuous-improvement/references/root-cause-analysis.md +144 -0
- package/dist/atdd-workflow.skill +0 -0
- package/dist/bdd-specification.skill +0 -0
- package/dist/cicd-pipeline.skill +0 -0
- package/dist/clean-code.skill +0 -0
- package/dist/continuous-improvement.skill +0 -0
- package/dist/green-implementation.skill +0 -0
- package/dist/product-strategy.skill +0 -0
- package/dist/story-mapping.skill +0 -0
- package/dist/ui-design-system.skill +0 -0
- package/dist/ui-design-workflow.skill +0 -0
- package/dist/ux-design.skill +0 -0
- package/dist/ux-research.skill +0 -0
- package/docs/INTEGRATION.md +229 -0
- package/docs/QUICKSTART.md +126 -0
- package/docs/SHARING.md +828 -0
- package/docs/SKILLS.md +296 -0
- package/green-implementation/SKILL.md +155 -0
- package/green-implementation/references/angular-patterns.md +239 -0
- package/green-implementation/references/common-rejections.md +180 -0
- package/green-implementation/references/playwright-patterns.md +321 -0
- package/green-implementation/references/rxjs-patterns.md +161 -0
- package/package.json +57 -0
- package/product-strategy/SKILL.md +71 -0
- package/product-strategy/references/business-model-canvas.md +199 -0
- package/product-strategy/references/canvas-alignment.md +108 -0
- package/product-strategy/references/value-proposition-canvas.md +159 -0
- package/project-templates/context.md.template +56 -0
- package/project-templates/test-strategy.md.template +87 -0
- package/story-mapping/SKILL.md +104 -0
- package/story-mapping/references/backbone.md +66 -0
- package/story-mapping/references/release-planning.md +92 -0
- package/story-mapping/references/task-template.md +78 -0
- package/story-mapping/references/walking-skeleton.md +63 -0
- package/ui-design-system/SKILL.md +48 -0
- package/ui-design-system/references/accessibility.md +134 -0
- package/ui-design-system/references/components.md +257 -0
- package/ui-design-system/references/design-tokens.md +209 -0
- package/ui-design-system/references/layout.md +136 -0
- package/ui-design-system/references/typography.md +114 -0
- package/ui-design-workflow/SKILL.md +90 -0
- package/ui-design-workflow/references/acceptance-targets.md +144 -0
- package/ui-design-workflow/references/component-selection.md +108 -0
- package/ui-design-workflow/references/scenario-to-ui.md +151 -0
- package/ui-design-workflow/references/screen-flows.md +116 -0
- package/ux-design/SKILL.md +75 -0
- package/ux-design/references/information-architecture.md +144 -0
- package/ux-design/references/interaction-patterns.md +141 -0
- package/ux-design/references/onboarding.md +159 -0
- package/ux-design/references/usability-evaluation.md +132 -0
- package/ux-research/SKILL.md +75 -0
- package/ux-research/references/journey-mapping.md +168 -0
- package/ux-research/references/mental-models.md +106 -0
- package/ux-research/references/personas.md +102 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Test Strategy
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This project uses ATDD with Red-Green-Refactor workflow. All test commands referenced by the atdd-workflow skill come from this file.
|
|
5
|
+
|
|
6
|
+
## Testing Tools
|
|
7
|
+
|
|
8
|
+
### Acceptance Testing
|
|
9
|
+
- **Framework**: [TODO: e.g., Playwright, Cypress, Selenium, TestCafe]
|
|
10
|
+
- **Purpose**: End-to-end testing through UI or API
|
|
11
|
+
- **File pattern**: `tests/acceptance/**/*.[test|spec].[ext]`
|
|
12
|
+
|
|
13
|
+
### Unit Testing
|
|
14
|
+
- **Framework**: [TODO: e.g., Jest, Vitest, Mocha, pytest, JUnit]
|
|
15
|
+
- **Purpose**: Test business logic in isolation
|
|
16
|
+
- **File pattern**: `tests/unit/**/*.[test|spec].[ext]`
|
|
17
|
+
|
|
18
|
+
### Test Doubles
|
|
19
|
+
- **Library**: [TODO: e.g., Jest mocks, Sinon, Mockito, unittest.mock]
|
|
20
|
+
- **Strategy**: Mock external dependencies (databases, APIs, file systems). Use real objects for domain logic.
|
|
21
|
+
|
|
22
|
+
### Coverage
|
|
23
|
+
- **Tool**: [TODO: e.g., Istanbul/c8, Coverage.py, JaCoCo]
|
|
24
|
+
- **Minimum**: 90% line coverage
|
|
25
|
+
- **Critical paths**: 100% coverage required
|
|
26
|
+
|
|
27
|
+
## Test Commands
|
|
28
|
+
|
|
29
|
+
**Claude Code uses these commands. Fill in all of them.**
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Run all tests
|
|
33
|
+
[TODO]
|
|
34
|
+
|
|
35
|
+
# Run acceptance tests only
|
|
36
|
+
[TODO]
|
|
37
|
+
|
|
38
|
+
# Run unit tests only
|
|
39
|
+
[TODO]
|
|
40
|
+
|
|
41
|
+
# Generate coverage report
|
|
42
|
+
[TODO]
|
|
43
|
+
|
|
44
|
+
# Watch mode (for TDD loop)
|
|
45
|
+
[TODO]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## File Structure
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
tests/
|
|
52
|
+
├── acceptance/[domain]/ ← End-to-end tests (from Gherkin scenarios)
|
|
53
|
+
├── unit/[domain]/ ← Unit tests (one behavior per test)
|
|
54
|
+
├── fixtures/ ← Shared test data
|
|
55
|
+
└── helpers/ ← Page objects, builders, test utilities
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Test Structure Pattern
|
|
59
|
+
|
|
60
|
+
Follow Arrange-Act-Assert (AAA):
|
|
61
|
+
```
|
|
62
|
+
Arrange: Set up state and preconditions
|
|
63
|
+
Act: Execute the behavior under test
|
|
64
|
+
Assert: Verify the expected outcome
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Architecture (for test organization)
|
|
68
|
+
[TODO: Describe your source code structure so tests mirror it]
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
- `/src/domain/` → `/tests/unit/domain/`
|
|
72
|
+
- `/src/application/` → `/tests/unit/application/`
|
|
73
|
+
|
|
74
|
+
## Mock/Stub Strategy
|
|
75
|
+
|
|
76
|
+
### Mock these:
|
|
77
|
+
- External APIs
|
|
78
|
+
- Databases
|
|
79
|
+
- File systems
|
|
80
|
+
- Email/notification services
|
|
81
|
+
- Time-dependent behavior
|
|
82
|
+
|
|
83
|
+
### Do NOT mock these:
|
|
84
|
+
- Domain objects
|
|
85
|
+
- Value objects
|
|
86
|
+
- Pure functions
|
|
87
|
+
- Business logic calculations
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: story-mapping
|
|
3
|
+
description: User story mapping for organizing user activities into a navigable map that connects business value to implementable tasks. Use when creating or updating a story map, planning releases, breaking down epics, organizing user tasks, or when the user says "story map", "user journey", "plan release", or "break down epic". Produces backbone.md, walking-skeleton.md, release plans, and individual task files in /docs/story-map/. Output tasks are consumed by bdd-specification skill.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# User Story Mapping
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Organizes user activities and tasks into a structured map that connects value propositions to implementable work. Provides the backbone that BDD specification and ATDD implementation build upon.
|
|
11
|
+
|
|
12
|
+
## Before Starting — Read Context
|
|
13
|
+
|
|
14
|
+
1. `/docs/business-model-canvas.md` — business model
|
|
15
|
+
2. `/docs/value-proposition-canvas.md` — customer jobs, pains, gains (primary source for activities)
|
|
16
|
+
3. `/docs/ubiquitous-language.md` — domain terminology
|
|
17
|
+
4. `/docs/story-map/backbone.md` — existing backbone (if updating)
|
|
18
|
+
|
|
19
|
+
## Workflow Decision
|
|
20
|
+
|
|
21
|
+
**No story map exists?** → Follow "Create Story Map" below
|
|
22
|
+
**Story map exists, adding features?** → Follow "Update Story Map" below
|
|
23
|
+
**Planning a release?** → Follow "Release Planning" below
|
|
24
|
+
|
|
25
|
+
## Create Story Map
|
|
26
|
+
|
|
27
|
+
### Step 1: Identify User Activities (Backbone)
|
|
28
|
+
|
|
29
|
+
Source: Value Proposition Canvas — Customer Jobs
|
|
30
|
+
|
|
31
|
+
Each customer job maps to one user activity. Activities are the horizontal spine of the map, ordered by typical user flow.
|
|
32
|
+
|
|
33
|
+
See `references/backbone.md` for structure and file format.
|
|
34
|
+
|
|
35
|
+
Create: `/docs/story-map/backbone.md`
|
|
36
|
+
|
|
37
|
+
### Step 2: Define Walking Skeleton
|
|
38
|
+
|
|
39
|
+
The thinnest possible path through the system that delivers end-to-end value. One task per activity, minimum viable behavior.
|
|
40
|
+
|
|
41
|
+
See `references/walking-skeleton.md` for structure.
|
|
42
|
+
|
|
43
|
+
Create: `/docs/story-map/walking-skeleton.md`
|
|
44
|
+
|
|
45
|
+
### Step 3: Break Activities into Tasks
|
|
46
|
+
|
|
47
|
+
For each activity, identify the specific things users do. Each task becomes an individual file.
|
|
48
|
+
|
|
49
|
+
See `references/task-template.md` for file structure.
|
|
50
|
+
|
|
51
|
+
Create: `/docs/story-map/user-tasks/[ACT-ID]-[task-NNN].md`
|
|
52
|
+
|
|
53
|
+
### Step 4: Plan Release 1
|
|
54
|
+
|
|
55
|
+
Slice vertically — each release delivers end-to-end value across activities. Start with the walking skeleton.
|
|
56
|
+
|
|
57
|
+
See `references/release-planning.md` for approach.
|
|
58
|
+
|
|
59
|
+
Create: `/docs/story-map/releases/r1-mvp.md`
|
|
60
|
+
|
|
61
|
+
## Update Story Map
|
|
62
|
+
|
|
63
|
+
When adding new features:
|
|
64
|
+
1. Determine which activity the new task belongs to
|
|
65
|
+
2. Create task file following the template
|
|
66
|
+
3. Update backbone.md if a new activity is needed
|
|
67
|
+
4. Update the relevant release plan
|
|
68
|
+
5. Update traceability matrix
|
|
69
|
+
|
|
70
|
+
## Release Planning
|
|
71
|
+
|
|
72
|
+
See `references/release-planning.md` for full guidance on vertical slicing, prioritization, and release scope definition.
|
|
73
|
+
|
|
74
|
+
## File Structure
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
docs/story-map/
|
|
78
|
+
├── backbone.md ← User activities (horizontal spine)
|
|
79
|
+
├── walking-skeleton.md ← Minimum viable journey
|
|
80
|
+
├── releases/
|
|
81
|
+
│ ├── r1-mvp.md ← Release 1 scope
|
|
82
|
+
│ └── r2-[name].md ← Release 2 scope
|
|
83
|
+
└── user-tasks/
|
|
84
|
+
├── ACT-001-task-001.md ← Individual task
|
|
85
|
+
├── ACT-001-task-002.md
|
|
86
|
+
└── ACT-002-task-001.md
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Task ID Convention
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
ACT-[activity number]-task-[task number]
|
|
93
|
+
Example: ACT-001-task-003
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Integration
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
story-mapping (this skill) → identifies tasks and acceptance criteria
|
|
100
|
+
↓
|
|
101
|
+
bdd-specification → writes Gherkin feature file for each task
|
|
102
|
+
↓
|
|
103
|
+
atdd-workflow → implements with RED-GREEN-REFACTOR
|
|
104
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Backbone — User Activities
|
|
2
|
+
|
|
3
|
+
## What is the Backbone?
|
|
4
|
+
|
|
5
|
+
The horizontal spine of the story map. Each entry is a high-level user activity — a goal the user wants to accomplish. Activities are ordered left-to-right by the typical user flow through the system.
|
|
6
|
+
|
|
7
|
+
## Deriving Activities from Value Proposition Canvas
|
|
8
|
+
|
|
9
|
+
Each Customer Job in the Value Proposition Canvas maps to one User Activity.
|
|
10
|
+
|
|
11
|
+
**Mapping process:**
|
|
12
|
+
1. Read `/docs/value-proposition-canvas.md`
|
|
13
|
+
2. List each Customer Job
|
|
14
|
+
3. Reframe each job as a user activity (present tense, action-oriented)
|
|
15
|
+
4. Order by typical usage sequence — what does a user do first, second, third?
|
|
16
|
+
|
|
17
|
+
**Example mapping:**
|
|
18
|
+
```
|
|
19
|
+
Customer Job: "Send invoices to customers quickly"
|
|
20
|
+
→ Activity: Invoice Management
|
|
21
|
+
|
|
22
|
+
Customer Job: "Track who owes me money"
|
|
23
|
+
→ Activity: Payment Tracking
|
|
24
|
+
|
|
25
|
+
Customer Job: "Understand my business financial health"
|
|
26
|
+
→ Activity: Financial Reporting
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Sequencing Rules
|
|
30
|
+
|
|
31
|
+
Order activities by **typical user flow**, not by:
|
|
32
|
+
- Technical complexity
|
|
33
|
+
- Implementation priority
|
|
34
|
+
- What's easiest to build
|
|
35
|
+
|
|
36
|
+
If activities are independent (user can do them in any order), sequence by frequency — most frequent first.
|
|
37
|
+
|
|
38
|
+
## File Format
|
|
39
|
+
|
|
40
|
+
Create: `/docs/story-map/backbone.md`
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
# Story Map Backbone
|
|
44
|
+
|
|
45
|
+
## User Activities
|
|
46
|
+
|
|
47
|
+
### ACT-001: [Activity Name]
|
|
48
|
+
**User Goal:** [What the user wants to accomplish]
|
|
49
|
+
|
|
50
|
+
**Value Proposition Link:**
|
|
51
|
+
- Pain relieved: [from VPC]
|
|
52
|
+
- Gain created: [from VPC]
|
|
53
|
+
|
|
54
|
+
**Tasks:** [List task IDs once created]
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### ACT-002: [Activity Name]
|
|
59
|
+
[same structure]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Sizing Guidelines
|
|
63
|
+
|
|
64
|
+
- **Too few activities (1-2):** The system probably has more distinct user goals. Break down further.
|
|
65
|
+
- **Right range (3-7):** Most systems fall here.
|
|
66
|
+
- **Too many activities (8+):** Some activities might belong together. Consider grouping.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Release Planning
|
|
2
|
+
|
|
3
|
+
## Vertical Slicing
|
|
4
|
+
|
|
5
|
+
Each release must deliver end-to-end value. Slice across activities, not down them.
|
|
6
|
+
|
|
7
|
+
**Anti-pattern — horizontal slicing:**
|
|
8
|
+
```
|
|
9
|
+
❌ Release 1: All of Invoice Management (complete)
|
|
10
|
+
❌ Release 2: All of Payment Tracking (complete)
|
|
11
|
+
❌ Release 3: All of Financial Reporting (complete)
|
|
12
|
+
|
|
13
|
+
Problem: Release 1 delivers invoicing but user can't track payments.
|
|
14
|
+
No end-to-end value until Release 2.
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Correct — vertical slicing:**
|
|
18
|
+
```
|
|
19
|
+
✅ Release 1: Basic invoice creation + basic payment tracking
|
|
20
|
+
✅ Release 2: Advanced invoice features + payment details + basic reporting
|
|
21
|
+
✅ Release 3: Full reporting + analytics + integrations
|
|
22
|
+
|
|
23
|
+
Each release: user can create invoices AND track payments (end-to-end value)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Prioritization — MoSCoW
|
|
27
|
+
|
|
28
|
+
**Must Have:** Release fails without it. Core value proposition. Walking skeleton tasks.
|
|
29
|
+
|
|
30
|
+
**Should Have:** Important but a workaround exists. Significant value. Can slip to next release if needed.
|
|
31
|
+
|
|
32
|
+
**Could Have:** Nice to have. Minor improvement. Easy to defer.
|
|
33
|
+
|
|
34
|
+
**Won't Have (this release):** Explicitly out of scope. Document why — prevents scope creep.
|
|
35
|
+
|
|
36
|
+
## Priority Matrix
|
|
37
|
+
|
|
38
|
+
When choosing what goes into a release, consider both axes:
|
|
39
|
+
|
|
40
|
+
| | Low Risk/Complexity | High Risk/Complexity |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| **High Value** | Do early — quick wins | De-risk early — learn fast |
|
|
43
|
+
| **Low Value** | Do late or defer | Question if needed at all |
|
|
44
|
+
|
|
45
|
+
## Release File Format
|
|
46
|
+
|
|
47
|
+
Create: `/docs/story-map/releases/r[N]-[name].md`
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
# Release [N] — [Name]
|
|
51
|
+
|
|
52
|
+
## Goal
|
|
53
|
+
[What end-to-end capability this release delivers]
|
|
54
|
+
|
|
55
|
+
## Target Date
|
|
56
|
+
[Date]
|
|
57
|
+
|
|
58
|
+
## Value Proposition
|
|
59
|
+
- Job to be done: [from VPC]
|
|
60
|
+
- Pain relieved: [from VPC]
|
|
61
|
+
- Gain created: [from VPC]
|
|
62
|
+
|
|
63
|
+
## Included Tasks
|
|
64
|
+
|
|
65
|
+
### [Activity Name]
|
|
66
|
+
- ✅ [TASK-ID]: [Task name] — [MoSCoW]
|
|
67
|
+
- ✅ [TASK-ID]: [Task name] — [MoSCoW]
|
|
68
|
+
- ❌ [TASK-ID]: [Task name] — deferred to R[N+1]
|
|
69
|
+
|
|
70
|
+
### [Activity Name]
|
|
71
|
+
[same pattern]
|
|
72
|
+
|
|
73
|
+
## Success Metrics
|
|
74
|
+
- [How we know this release succeeded]
|
|
75
|
+
- [Measurable user outcome]
|
|
76
|
+
|
|
77
|
+
## Risks
|
|
78
|
+
- [Risk] — mitigated by [mitigation]
|
|
79
|
+
|
|
80
|
+
## Dependencies
|
|
81
|
+
- [What must be ready before this release can ship]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Release Sequencing
|
|
85
|
+
|
|
86
|
+
Release 1 always starts with the walking skeleton. Each subsequent release adds depth to existing activities before adding new activities.
|
|
87
|
+
|
|
88
|
+
**Decision:** "Should this go in the current release or next?"
|
|
89
|
+
- Does it block end-to-end value? → Current release
|
|
90
|
+
- Does a workaround exist? → Next release
|
|
91
|
+
- Is it high value + low risk? → Current release
|
|
92
|
+
- Is it high risk? → De-risk now (spike/prototype), implement when understood
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Task Template
|
|
2
|
+
|
|
3
|
+
## File Location
|
|
4
|
+
|
|
5
|
+
`/docs/story-map/user-tasks/[ACT-ID]-task-[NNN].md`
|
|
6
|
+
|
|
7
|
+
Example: `/docs/story-map/user-tasks/ACT-001-task-003.md`
|
|
8
|
+
|
|
9
|
+
## Template
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
# [ACT-ID]-task-[NNN]: [Task Name]
|
|
13
|
+
|
|
14
|
+
## Activity
|
|
15
|
+
[ACT-ID]: [Activity Name]
|
|
16
|
+
|
|
17
|
+
## User Task
|
|
18
|
+
As a [user role]
|
|
19
|
+
I want to [capability]
|
|
20
|
+
So that [business value]
|
|
21
|
+
|
|
22
|
+
## Value Proposition Link
|
|
23
|
+
- Pain relieved: [from VPC]
|
|
24
|
+
- Gain created: [from VPC]
|
|
25
|
+
|
|
26
|
+
## Acceptance Criteria
|
|
27
|
+
- [Observable behavior 1]
|
|
28
|
+
- [Observable behavior 2]
|
|
29
|
+
- [Observable behavior 3]
|
|
30
|
+
|
|
31
|
+
## Priority
|
|
32
|
+
- **MoSCoW:** Must Have | Should Have | Could Have | Won't Have
|
|
33
|
+
- **Business Value:** High | Medium | Low
|
|
34
|
+
- **Complexity:** High | Medium | Low
|
|
35
|
+
|
|
36
|
+
## Release
|
|
37
|
+
[Release name — e.g., "Release 1 - MVP"]
|
|
38
|
+
|
|
39
|
+
## Dependencies
|
|
40
|
+
- [What must exist before this task can be implemented]
|
|
41
|
+
|
|
42
|
+
## Feature File
|
|
43
|
+
[Path to .feature file — filled in after bdd-specification runs]
|
|
44
|
+
|
|
45
|
+
## Status
|
|
46
|
+
- [ ] Acceptance criteria defined
|
|
47
|
+
- [ ] Example mapping complete
|
|
48
|
+
- [ ] Scenarios written
|
|
49
|
+
- [ ] Acceptance tests created
|
|
50
|
+
- [ ] Implementation complete
|
|
51
|
+
- [ ] Deployed
|
|
52
|
+
|
|
53
|
+
## Notes
|
|
54
|
+
[Additional context]
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Task Sizing
|
|
58
|
+
|
|
59
|
+
**Right size:** Completable in 1-3 days, produces 1 feature file with 2-5 scenarios.
|
|
60
|
+
|
|
61
|
+
**Too large — split by:**
|
|
62
|
+
- CRUD operations (create / read / update / delete as separate tasks)
|
|
63
|
+
- Data complexity (basic first, then edge cases)
|
|
64
|
+
- User roles (different users, different tasks)
|
|
65
|
+
- Happy vs error paths (core behavior first, validation second)
|
|
66
|
+
- Incremental complexity (simple version first, advanced version later)
|
|
67
|
+
|
|
68
|
+
**Too small — combine when:**
|
|
69
|
+
- Task has no standalone user value
|
|
70
|
+
- Task is a single step inside a larger behavior
|
|
71
|
+
- Completing it alone doesn't change what the user can do
|
|
72
|
+
|
|
73
|
+
## Characteristics of a Good Task
|
|
74
|
+
|
|
75
|
+
- **User-centric:** Written from the user's perspective, not the system's
|
|
76
|
+
- **Valuable:** Completing it delivers observable value to the user
|
|
77
|
+
- **Testable:** Success can be verified with concrete acceptance criteria
|
|
78
|
+
- **Independent:** Can be implemented without depending on other unbuilt tasks (where possible)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Walking Skeleton
|
|
2
|
+
|
|
3
|
+
## What is the Walking Skeleton?
|
|
4
|
+
|
|
5
|
+
The thinnest possible slice through the entire system that delivers end-to-end value. One task per activity, minimum viable behavior per task. It proves the architecture works and delivers real value before adding depth.
|
|
6
|
+
|
|
7
|
+
## Rules
|
|
8
|
+
|
|
9
|
+
- Must touch every activity in the backbone (end-to-end)
|
|
10
|
+
- Each included task is reduced to its absolute minimum behavior
|
|
11
|
+
- Explicitly lists what is NOT included and why
|
|
12
|
+
- Becomes the core of Release 1
|
|
13
|
+
|
|
14
|
+
## Determining Minimum Behavior
|
|
15
|
+
|
|
16
|
+
For each activity, ask: "What is the single simplest version of this that still delivers value?"
|
|
17
|
+
|
|
18
|
+
**Example — Invoice Management activity:**
|
|
19
|
+
- Full behavior: Multi-line items, tax calculation, drafts, editing, voiding, PDF export
|
|
20
|
+
- Walking skeleton: Single line item, no tax, save as final only, no editing
|
|
21
|
+
|
|
22
|
+
**Example — Payment Tracking activity:**
|
|
23
|
+
- Full behavior: Partial payments, multiple payment methods, payment history, reminders
|
|
24
|
+
- Walking skeleton: Mark invoice as paid or unpaid. Nothing else.
|
|
25
|
+
|
|
26
|
+
## File Format
|
|
27
|
+
|
|
28
|
+
Create: `/docs/story-map/walking-skeleton.md`
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
# Walking Skeleton — Minimum Viable Journey
|
|
32
|
+
|
|
33
|
+
## Goal
|
|
34
|
+
[What end-to-end value this delivers]
|
|
35
|
+
|
|
36
|
+
## User Journey
|
|
37
|
+
|
|
38
|
+
### 1. [Activity Name] — Simplified
|
|
39
|
+
- ✅ [Task ID]: [Task name]
|
|
40
|
+
- Included: [What's in]
|
|
41
|
+
- Excluded: [What's cut and why]
|
|
42
|
+
|
|
43
|
+
### 2. [Activity Name] — Simplified
|
|
44
|
+
[same pattern]
|
|
45
|
+
|
|
46
|
+
### 3. [Activity Name] — Deferred
|
|
47
|
+
- ❌ [Reason — e.g., "Not needed for core value loop"]
|
|
48
|
+
|
|
49
|
+
## What's NOT in the Walking Skeleton
|
|
50
|
+
- [Feature] — deferred to R2
|
|
51
|
+
- [Feature] — deferred to R2
|
|
52
|
+
- [Feature] — not needed for minimum value delivery
|
|
53
|
+
|
|
54
|
+
## Success Criteria
|
|
55
|
+
User can:
|
|
56
|
+
1. [End-to-end action 1]
|
|
57
|
+
2. [End-to-end action 2]
|
|
58
|
+
3. [Verify value was delivered]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Common Mistake
|
|
62
|
+
|
|
63
|
+
Including too much. The walking skeleton should feel uncomfortably thin. If it feels complete, cut more. Depth comes in subsequent releases.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ui-design-system
|
|
3
|
+
description: Design system reference for consistent UI implementation. Use when implementing any UI component or screen, when choosing colors, spacing, typography, or layout, when the user says "style this", "what color should I use", or "follow the design system". Provides design tokens, layout grid rules, typography scale, component specifications, and accessibility standards. Read before writing any presentation layer code. Output of this skill populates /docs/ui-design/design-system.md in each project.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# UI Design System
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Single source of truth for visual and interactive consistency. Every screen, component, and layout decision references this system. Consistency is not optional — it is what makes a product feel professional and usable.
|
|
11
|
+
|
|
12
|
+
## How to Use This Skill
|
|
13
|
+
|
|
14
|
+
**Starting a new project?** Read `references/design-tokens.md` first — tokens are the foundation everything else builds on. Then populate `/docs/ui-design/design-system.md` in your project with your chosen token values.
|
|
15
|
+
|
|
16
|
+
**Implementing a screen?** Read `references/layout.md` for grid and spacing, `references/typography.md` for text hierarchy, then `references/components.md` for the components you need.
|
|
17
|
+
|
|
18
|
+
**Choosing a color?** Read `references/design-tokens.md` — never use raw color values. Always reference a semantic token.
|
|
19
|
+
|
|
20
|
+
**Checking accessibility?** Read `references/accessibility.md` before shipping any screen.
|
|
21
|
+
|
|
22
|
+
## Decision Tree — Which Reference to Load
|
|
23
|
+
|
|
24
|
+
### "I need to choose colors or spacing"
|
|
25
|
+
→ Read `references/design-tokens.md`
|
|
26
|
+
|
|
27
|
+
### "I need to lay out a page or section"
|
|
28
|
+
→ Read `references/layout.md`
|
|
29
|
+
|
|
30
|
+
### "I need to style text or choose a heading level"
|
|
31
|
+
→ Read `references/typography.md`
|
|
32
|
+
|
|
33
|
+
### "I need to implement a button, input, table, or other UI element"
|
|
34
|
+
→ Read `references/components.md`
|
|
35
|
+
|
|
36
|
+
### "I need to check if my UI is accessible"
|
|
37
|
+
→ Read `references/accessibility.md`
|
|
38
|
+
|
|
39
|
+
## Project Setup
|
|
40
|
+
|
|
41
|
+
When starting a new project, create `/docs/ui-design/design-system.md` by populating the token values from `references/design-tokens.md` with your project's actual values. This file becomes the project-specific design system that ui-design-workflow reads.
|
|
42
|
+
|
|
43
|
+
## Constraints
|
|
44
|
+
|
|
45
|
+
- **Never use raw values.** No hardcoded hex colors, no magic pixel numbers. Everything references a token.
|
|
46
|
+
- **Semantic naming.** Tokens are named for their purpose, not their value. `color.error` not `color.red`.
|
|
47
|
+
- **Accessibility first.** Every color combination must meet WCAG AA. Every interactive element must be keyboard-navigable. Read `references/accessibility.md` before any screen ships.
|
|
48
|
+
- **Consistency over preference.** If a component exists in the system, use it. Do not create a one-off variant because you personally prefer a different look.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Accessibility
|
|
2
|
+
|
|
3
|
+
## Standard: WCAG AA
|
|
4
|
+
|
|
5
|
+
All UI must meet WCAG 2.1 AA. This is not optional. Every screen, every component, every interaction.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Color Contrast
|
|
10
|
+
|
|
11
|
+
### Minimum Ratios (WCAG AA)
|
|
12
|
+
|
|
13
|
+
| Text type | Minimum ratio |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Normal text (< 18px or < 14px bold) | 4.5:1 |
|
|
16
|
+
| Large text (≥ 18px or ≥ 14px bold) | 3:1 |
|
|
17
|
+
| UI components and graphical objects | 3:1 |
|
|
18
|
+
|
|
19
|
+
### Rules
|
|
20
|
+
- Never convey meaning through color alone. Always pair with text, icon, or pattern.
|
|
21
|
+
- Error states: red background/border AND an error icon AND error message text. Not just red.
|
|
22
|
+
- Success states: green background/border AND a checkmark icon AND success message text.
|
|
23
|
+
- Disabled elements are exempt from contrast requirements — but don't use "disabled" as an excuse to make things invisible.
|
|
24
|
+
|
|
25
|
+
### Token Compliance
|
|
26
|
+
|
|
27
|
+
When choosing token values for your project's design-system.md, verify every foreground/background combination meets the ratios above before committing.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Keyboard Navigation
|
|
32
|
+
|
|
33
|
+
Every interactive element must be reachable and operable via keyboard alone.
|
|
34
|
+
|
|
35
|
+
### Tab Order
|
|
36
|
+
- Follows the visual reading order (left to right, top to bottom)
|
|
37
|
+
- Never use `tabindex` values other than 0 or -1
|
|
38
|
+
- `tabindex="0"` — include in natural tab order
|
|
39
|
+
- `tabindex="-1"` — focusable programmatically, but not via Tab
|
|
40
|
+
|
|
41
|
+
### Focus Visibility
|
|
42
|
+
- Every focused element shows a visible focus ring
|
|
43
|
+
- Focus ring: border.width.medium, border.color.focus, offset 2px
|
|
44
|
+
- Never remove the default focus outline without providing a replacement
|
|
45
|
+
|
|
46
|
+
### Keyboard Interactions by Component
|
|
47
|
+
|
|
48
|
+
**Buttons:** Enter or Space activates
|
|
49
|
+
**Links:** Enter activates
|
|
50
|
+
**Inputs:** Tab moves between fields. Enter submits form (single-input forms only)
|
|
51
|
+
**Select:** Space opens dropdown. Arrow keys navigate options. Enter selects.
|
|
52
|
+
**Modal:** Tab cycles within modal only (focus trap). Escape closes.
|
|
53
|
+
**Tabs:** Arrow keys move between tabs. Enter/Space activates.
|
|
54
|
+
**Table:** Arrow keys navigate cells. Enter activates cell action.
|
|
55
|
+
**Accordion:** Enter/Space toggles panel. Arrow keys move between panels.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Screen Reader Support
|
|
60
|
+
|
|
61
|
+
### Semantic HTML First
|
|
62
|
+
|
|
63
|
+
Use native HTML elements before ARIA. A `<button>` is better than a `<div role="button">`. A `<nav>` is better than a `<div aria-label="Navigation">`.
|
|
64
|
+
|
|
65
|
+
### Required ARIA Patterns
|
|
66
|
+
|
|
67
|
+
**Forms:**
|
|
68
|
+
- Every input has an associated `<label>` (via `for`/`id` or wrapping)
|
|
69
|
+
- Helper text linked via `aria-describedby`
|
|
70
|
+
- Error messages linked via `aria-describedby` AND `aria-invalid="true"` on the input
|
|
71
|
+
|
|
72
|
+
**Alerts:**
|
|
73
|
+
- Use `role="alert"` for error messages that appear dynamically
|
|
74
|
+
- Use `aria-live="polite"` for success/info messages that don't need immediate attention
|
|
75
|
+
|
|
76
|
+
**Buttons with icons only (no text label):**
|
|
77
|
+
- Must have `aria-label` describing the action
|
|
78
|
+
- Example: close button → `aria-label="Close modal"`
|
|
79
|
+
|
|
80
|
+
**Images:**
|
|
81
|
+
- Decorative images: `alt=""`
|
|
82
|
+
- Meaningful images: `alt="[description of what the image conveys]"`
|
|
83
|
+
- Never put the filename in alt text
|
|
84
|
+
|
|
85
|
+
**Tables:**
|
|
86
|
+
- Use `<th>` for headers with `scope="col"` or `scope="row"`
|
|
87
|
+
- Use `<caption>` or `aria-label` on the `<table>` to describe its purpose
|
|
88
|
+
|
|
89
|
+
**Navigation:**
|
|
90
|
+
- Wrap in `<nav>` element
|
|
91
|
+
- If multiple nav elements exist, use `aria-label` to distinguish them
|
|
92
|
+
- Active page/item: `aria-current="page"` or `aria-current="true"`
|
|
93
|
+
|
|
94
|
+
**Modals:**
|
|
95
|
+
- `role="dialog"` and `aria-modal="true"`
|
|
96
|
+
- `aria-labelledby` pointing to the modal title
|
|
97
|
+
- Focus moves to the modal on open. Returns to the trigger on close.
|
|
98
|
+
|
|
99
|
+
### Loading States
|
|
100
|
+
- Announce loading with `aria-live="polite"` — "Loading results..."
|
|
101
|
+
- Announce completion — "Results loaded. Showing 12 invoices."
|
|
102
|
+
- Never use a spinner alone without text. Screen readers can't see it.
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Reduced Motion
|
|
107
|
+
|
|
108
|
+
Respect `prefers-reduced-motion: reduce`:
|
|
109
|
+
- Disable or minimize animations
|
|
110
|
+
- Replace motion-based transitions with instant state changes
|
|
111
|
+
- Keep functional animations (loading spinner) but simplify them
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Pre-Ship Accessibility Checklist
|
|
116
|
+
|
|
117
|
+
Run this before any screen ships:
|
|
118
|
+
|
|
119
|
+
- [ ] All text meets contrast ratios against its background
|
|
120
|
+
- [ ] Color is not the sole indicator of meaning (status, errors, required fields)
|
|
121
|
+
- [ ] All interactive elements are reachable via keyboard in logical order
|
|
122
|
+
- [ ] Focus is always visible
|
|
123
|
+
- [ ] All form inputs have visible labels
|
|
124
|
+
- [ ] All error messages are associated with their inputs
|
|
125
|
+
- [ ] All images have appropriate alt text
|
|
126
|
+
- [ ] Dynamic content changes are announced via aria-live
|
|
127
|
+
- [ ] Modals trap focus and are dismissible via Escape
|
|
128
|
+
- [ ] Page has exactly one h1
|
|
129
|
+
- [ ] Heading levels are sequential (no skips)
|
|
130
|
+
- [ ] Tables use proper header structure
|
|
131
|
+
- [ ] Navigation landmarks are labeled
|
|
132
|
+
- [ ] Loading and empty states are announced to screen readers
|
|
133
|
+
- [ ] Animations respect prefers-reduced-motion
|
|
134
|
+
- [ ] Touch targets are at least 44×44px on mobile
|