qualia-framework 3.4.0 → 4.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/README.md +96 -51
- package/agents/builder.md +25 -14
- package/agents/plan-checker.md +29 -16
- package/agents/planner.md +33 -24
- package/agents/research-synthesizer.md +25 -12
- package/agents/roadmapper.md +89 -84
- package/agents/verifier.md +11 -2
- package/bin/cli.js +13 -2
- package/bin/install.js +28 -5
- package/bin/qualia-ui.js +267 -1
- package/bin/state.js +377 -52
- package/bin/statusline.js +40 -20
- package/docs/erp-contract.md +23 -2
- package/guide.md +84 -21
- package/hooks/auto-update.js +54 -70
- package/hooks/branch-guard.js +64 -6
- package/hooks/migration-guard.js +85 -10
- package/hooks/pre-compact.js +28 -4
- package/hooks/pre-deploy-gate.js +46 -6
- package/hooks/pre-push.js +94 -27
- package/hooks/session-start.js +6 -0
- package/package.json +1 -1
- package/skills/qualia/SKILL.md +3 -1
- package/skills/qualia-build/SKILL.md +40 -5
- package/skills/qualia-handoff/SKILL.md +87 -12
- package/skills/qualia-idk/SKILL.md +155 -3
- package/skills/qualia-map/SKILL.md +4 -4
- package/skills/qualia-milestone/SKILL.md +122 -79
- package/skills/qualia-new/SKILL.md +151 -230
- package/skills/qualia-optimize/SKILL.md +4 -4
- package/skills/qualia-plan/SKILL.md +14 -9
- package/skills/qualia-quick/SKILL.md +1 -1
- package/skills/qualia-report/SKILL.md +12 -0
- package/skills/qualia-verify/SKILL.md +59 -5
- package/templates/help.html +98 -31
- package/templates/journey.md +113 -0
- package/templates/plan.md +56 -11
- package/templates/requirements.md +82 -22
- package/templates/roadmap.md +41 -14
- package/templates/tracking.json +12 -1
- package/tests/runner.js +560 -0
- package/tests/state.test.sh +40 -0
|
@@ -3,29 +3,85 @@
|
|
|
3
3
|
**Defined:** {date}
|
|
4
4
|
**Core Value:** {from PROJECT.md — the one thing that must work}
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Requirements are grouped by the milestone that delivers them. Each requirement
|
|
7
|
+
has a stable REQ-ID and is atomic, testable, and user-centric.
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Milestone 1 · {Name}
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
Short description of what this milestone delivers for the user.
|
|
14
|
+
|
|
15
|
+
### {Category}
|
|
11
16
|
|
|
12
17
|
- [ ] **{CAT}-01**: {user-centric, testable, atomic capability}
|
|
13
18
|
- [ ] **{CAT}-02**: {capability}
|
|
14
|
-
- [ ] **{CAT}-03**: {capability}
|
|
15
19
|
|
|
16
|
-
### {Category
|
|
20
|
+
### {Category}
|
|
17
21
|
|
|
18
22
|
- [ ] **{CAT}-01**: {capability}
|
|
19
|
-
- [ ] **{CAT}-02**: {capability}
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Milestone 2 · {Name}
|
|
27
|
+
|
|
28
|
+
### {Category}
|
|
29
|
+
|
|
30
|
+
- [ ] **{CAT}-03**: {capability}
|
|
31
|
+
- [ ] **{CAT}-04**: {capability}
|
|
32
|
+
|
|
33
|
+
---
|
|
22
34
|
|
|
23
|
-
|
|
35
|
+
## Milestone 3 · {Name}
|
|
24
36
|
|
|
25
37
|
### {Category}
|
|
26
38
|
|
|
27
|
-
- **{CAT}-
|
|
28
|
-
|
|
39
|
+
- [ ] **{CAT}-05**: {capability}
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Handoff
|
|
44
|
+
|
|
45
|
+
Fixed scope for every project. Do not reassign these elsewhere.
|
|
46
|
+
|
|
47
|
+
### Polish
|
|
48
|
+
|
|
49
|
+
- [ ] **HAND-01**: Every user-facing page has all interactive states (hover, focus, loading, error, empty)
|
|
50
|
+
- [ ] **HAND-02**: Responsive verified at 375 / 768 / 1440 / 1920px
|
|
51
|
+
- [ ] **HAND-03**: WCAG AA contrast + keyboard navigation verified
|
|
52
|
+
|
|
53
|
+
### Content + SEO
|
|
54
|
+
|
|
55
|
+
- [ ] **HAND-04**: Real copy replaces all placeholder text
|
|
56
|
+
- [ ] **HAND-05**: Meta tags, OG images, sitemap.xml, robots.txt present
|
|
57
|
+
- [ ] **HAND-06**: Analytics wired (Plausible / PostHog / GA)
|
|
58
|
+
|
|
59
|
+
### Final QA
|
|
60
|
+
|
|
61
|
+
- [ ] **HAND-07**: Full-flow test of every primary user journey
|
|
62
|
+
- [ ] **HAND-08**: Cross-browser verified (Chrome + Safari + Firefox)
|
|
63
|
+
- [ ] **HAND-09**: `/qualia-review` scored diagnostics reviewed, blockers resolved
|
|
64
|
+
|
|
65
|
+
### Handoff
|
|
66
|
+
|
|
67
|
+
- [ ] **HAND-10**: Production URL verified (HTTP 200, auth flow works, latency < 500ms)
|
|
68
|
+
- [ ] **HAND-11**: README updated with architecture, setup, API documentation
|
|
69
|
+
- [ ] **HAND-12**: Credentials document delivered to client (deploy tokens, admin accounts, third-party keys)
|
|
70
|
+
- [ ] **HAND-13**: Recorded walkthrough (Loom or equivalent) delivered
|
|
71
|
+
- [ ] **HAND-14**: `.planning/archive/` contains every milestone's verification reports
|
|
72
|
+
- [ ] **HAND-15**: Final `/qualia-report` submitted, `lifetime.milestones_completed` incremented
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Post-Handoff (v2)
|
|
77
|
+
|
|
78
|
+
Features acknowledged but deferred past initial handoff. Not in current journey.
|
|
79
|
+
|
|
80
|
+
### {Category}
|
|
81
|
+
|
|
82
|
+
- **{CAT}-XX**: {capability}
|
|
83
|
+
|
|
84
|
+
---
|
|
29
85
|
|
|
30
86
|
## Out of Scope
|
|
31
87
|
|
|
@@ -35,35 +91,39 @@ Explicit exclusions with reasoning. Prevents scope creep.
|
|
|
35
91
|
|---------|--------|
|
|
36
92
|
| {feature} | {why excluded} |
|
|
37
93
|
|
|
94
|
+
---
|
|
95
|
+
|
|
38
96
|
## Traceability
|
|
39
97
|
|
|
40
|
-
|
|
98
|
+
Populated during roadmap creation. Every v1 requirement maps to exactly one milestone + phase.
|
|
41
99
|
|
|
42
|
-
| Requirement | Phase | Status |
|
|
43
|
-
|
|
44
|
-
| {CAT}-01 | Phase {N} | Pending |
|
|
100
|
+
| Requirement | Milestone | Phase | Status |
|
|
101
|
+
|-------------|-----------|-------|--------|
|
|
102
|
+
| {CAT}-01 | M1: {name} | Phase {N} | Pending |
|
|
45
103
|
|
|
46
104
|
**Coverage:**
|
|
47
|
-
- v1 requirements: {X} total
|
|
48
|
-
- Mapped to phases: {Y}
|
|
105
|
+
- v1 requirements (all feature milestones + Handoff): {X} total
|
|
106
|
+
- Mapped to milestones + phases: {Y}
|
|
49
107
|
- Unmapped: {Z}
|
|
50
108
|
|
|
51
109
|
---
|
|
52
110
|
|
|
53
111
|
## Requirement Quality Rules
|
|
54
112
|
|
|
55
|
-
1. **ID format:** `{CATEGORY}-{NUMBER}` —
|
|
113
|
+
1. **ID format:** `{CATEGORY}-{NUMBER}` — stable across the project's life
|
|
56
114
|
2. **User-centric:** "User can X" — not "System does Y"
|
|
57
|
-
3. **Atomic:**
|
|
58
|
-
4. **Testable:**
|
|
59
|
-
5. **Independent:**
|
|
115
|
+
3. **Atomic:** one capability per requirement
|
|
116
|
+
4. **Testable:** the observable behavior is nameable
|
|
117
|
+
5. **Independent:** minimal dependencies on other requirements
|
|
118
|
+
6. **Assigned to exactly one milestone:** no duplicates, no gaps
|
|
60
119
|
|
|
61
120
|
## Status Values
|
|
62
121
|
|
|
63
122
|
- **Pending** — not started
|
|
64
|
-
- **In Progress** —
|
|
65
|
-
- **Complete** —
|
|
123
|
+
- **In Progress** — milestone is active, phase in progress
|
|
124
|
+
- **Complete** — verified as passing
|
|
66
125
|
- **Blocked** — waiting on external factor
|
|
67
126
|
|
|
68
127
|
---
|
|
128
|
+
|
|
69
129
|
*Last updated: {date}*
|
package/templates/roadmap.md
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
# Roadmap
|
|
1
|
+
# Roadmap · Milestone {N} · {Milestone Name}
|
|
2
2
|
|
|
3
|
+
**Project:** {Project Name}
|
|
4
|
+
**Milestone:** {N} of {Total} ({"CURRENT" / shipped})
|
|
3
5
|
**Created:** {date}
|
|
4
|
-
**
|
|
5
|
-
**
|
|
6
|
+
**Phases:** {P}
|
|
7
|
+
**Requirements covered:** {REQ-IDs from this milestone's REQUIREMENTS.md section}
|
|
8
|
+
|
|
9
|
+
See `JOURNEY.md` for the full project arc. This file is ONLY the current milestone's phases.
|
|
10
|
+
|
|
11
|
+
## Exit Criteria
|
|
12
|
+
|
|
13
|
+
What "shipped" means for this milestone:
|
|
14
|
+
|
|
15
|
+
- {observable outcome 1}
|
|
16
|
+
- {observable outcome 2}
|
|
17
|
+
- {observable outcome 3}
|
|
18
|
+
|
|
19
|
+
---
|
|
6
20
|
|
|
7
21
|
## Phases
|
|
8
22
|
|
|
@@ -25,9 +39,8 @@
|
|
|
25
39
|
**Success criteria** (observable user behaviors):
|
|
26
40
|
1. {user can do X}
|
|
27
41
|
2. {user can do Y}
|
|
28
|
-
3. {user can do Z}
|
|
29
42
|
|
|
30
|
-
**Depends on:** none
|
|
43
|
+
**Depends on:** none
|
|
31
44
|
|
|
32
45
|
---
|
|
33
46
|
|
|
@@ -46,26 +59,40 @@
|
|
|
46
59
|
|
|
47
60
|
---
|
|
48
61
|
|
|
49
|
-
|
|
62
|
+
### Phase 3: {Name}
|
|
63
|
+
|
|
64
|
+
**Goal:** {goal}
|
|
65
|
+
|
|
66
|
+
**Requirements covered:**
|
|
67
|
+
- {REQ-ID}: {description}
|
|
68
|
+
|
|
69
|
+
**Success criteria:**
|
|
70
|
+
1. {criterion}
|
|
71
|
+
|
|
72
|
+
**Depends on:** Phase 2
|
|
73
|
+
|
|
74
|
+
---
|
|
50
75
|
|
|
51
76
|
## Coverage Verification
|
|
52
77
|
|
|
53
|
-
|
|
78
|
+
Every requirement in this milestone must map to exactly one phase.
|
|
54
79
|
|
|
55
80
|
| Requirement | Phase | Covered? |
|
|
56
81
|
|-------------|-------|----------|
|
|
57
82
|
| {REQ-ID} | Phase {N} | ✓ |
|
|
58
83
|
|
|
59
|
-
**Coverage:** {X}/{Y} v1 requirements mapped ({100% expected})
|
|
60
|
-
|
|
61
84
|
---
|
|
62
85
|
|
|
63
|
-
##
|
|
86
|
+
## When This Milestone Closes
|
|
64
87
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
88
|
+
Triggered by `/qualia-milestone` after `/qualia-verify` passes on the last phase:
|
|
89
|
+
|
|
90
|
+
1. All phase artifacts are archived to `.planning/archive/milestone-{N}-{slug}/`
|
|
91
|
+
2. `tracking.json` `milestones[]` gets a summary entry (num, name, phases_completed, shipped_url, closed_at)
|
|
92
|
+
3. REQUIREMENTS.md marks this milestone's requirements as **Complete**
|
|
93
|
+
4. Next milestone from JOURNEY.md opens — roadmapper regenerates this ROADMAP.md for Milestone {N+1}
|
|
94
|
+
5. `state.js init --force --milestone_name "{N+1 name}"` resets current-phase fields, preserves lifetime + milestones[] history
|
|
69
95
|
|
|
70
96
|
---
|
|
97
|
+
|
|
71
98
|
*Last updated: {date}*
|
package/templates/tracking.json
CHANGED
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
"client": "",
|
|
4
4
|
"type": "",
|
|
5
5
|
"assigned_to": "",
|
|
6
|
+
"team_id": "",
|
|
7
|
+
"project_id": "",
|
|
8
|
+
"git_remote": "",
|
|
6
9
|
"milestone": 1,
|
|
10
|
+
"milestone_name": "",
|
|
11
|
+
"milestones": [],
|
|
7
12
|
"phase": 0,
|
|
8
13
|
"phase_name": "",
|
|
9
14
|
"total_phases": 0,
|
|
@@ -14,14 +19,20 @@
|
|
|
14
19
|
"verification": "pending",
|
|
15
20
|
"gap_cycles": {},
|
|
16
21
|
"blockers": [],
|
|
22
|
+
"session_started_at": "",
|
|
17
23
|
"last_updated": "",
|
|
24
|
+
"last_pushed_at": "",
|
|
18
25
|
"last_commit": "",
|
|
26
|
+
"build_count": 0,
|
|
27
|
+
"deploy_count": 0,
|
|
19
28
|
"deployed_url": "",
|
|
20
29
|
"notes": "",
|
|
30
|
+
"submitted_by": "",
|
|
21
31
|
"lifetime": {
|
|
22
32
|
"tasks_completed": 0,
|
|
23
33
|
"phases_completed": 0,
|
|
24
34
|
"milestones_completed": 0,
|
|
25
|
-
"total_phases": 0
|
|
35
|
+
"total_phases": 0,
|
|
36
|
+
"last_closed_milestone": 0
|
|
26
37
|
}
|
|
27
38
|
}
|