@x0rium/devkit-cli 0.5.0 → 0.7.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/dist/constitution.d.ts.map +1 -1
- package/dist/constitution.js +62 -8
- package/dist/constitution.js.map +1 -1
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/dashboard.js +6 -2
- package/dist/dashboard.js.map +1 -1
- package/dist/detector.d.ts.map +1 -1
- package/dist/detector.js +5 -2
- package/dist/detector.js.map +1 -1
- package/dist/escalate.d.ts.map +1 -1
- package/dist/escalate.js +8 -3
- package/dist/escalate.js.map +1 -1
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +57 -10
- package/dist/gate.js.map +1 -1
- package/dist/index.js +14 -7
- package/dist/index.js.map +1 -1
- package/dist/investigate.d.ts.map +1 -1
- package/dist/investigate.js +8 -10
- package/dist/investigate.js.map +1 -1
- package/dist/rfc.d.ts.map +1 -1
- package/dist/rfc.js +8 -10
- package/dist/rfc.js.map +1 -1
- package/dist/scaffold.d.ts +2 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +52 -4
- package/dist/scaffold.js.map +1 -1
- package/dist/schemas.js +2 -2
- package/dist/schemas.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +7 -4
- package/dist/status.js.map +1 -1
- package/dist/validator.js +1 -1
- package/dist/validator.js.map +1 -1
- package/dist/watch.js +10 -10
- package/dist/watch.js.map +1 -1
- package/package.json +4 -5
- package/skills/arch-kit/README.md +195 -0
- package/skills/arch-kit/SKILL.md +190 -0
- package/skills/arch-kit/references/adr.md +25 -0
- package/skills/arch-kit/references/impact.md +13 -0
- package/skills/arch-kit/references/invariants.md +9 -0
- package/skills/arch-kit/references/investigation.md +37 -0
- package/skills/arch-kit/references/rfc.md +36 -0
- package/skills/devkit-init/SKILL.md +74 -0
- package/skills/devkit-init/references/brownfield.md +147 -0
- package/skills/devkit-init/references/greenfield.md +44 -0
- package/skills/devkit-init/references/upgrade.md +103 -0
- package/skills/product-kit/README.md +135 -0
- package/skills/product-kit/SKILL.md +126 -0
- package/skills/product-kit/references/roadmap.md +16 -0
- package/skills/product-kit/references/users.md +14 -0
- package/skills/product-kit/references/ux_invariants.md +8 -0
- package/skills/qa-kit/README.md +188 -0
- package/skills/qa-kit/SKILL.md +155 -0
- package/skills/qa-kit/references/assumption_checks.md +10 -0
- package/skills/qa-kit/references/coverage_map.md +19 -0
- package/skills/qa-kit/references/test_contracts.md +10 -0
- package/skills/research-kit/README.md +139 -0
- package/skills/research-kit/SKILL.md +106 -0
- package/skills/research-kit/references/assumptions.md +9 -0
- package/skills/research-kit/references/feasibility.md +15 -0
- package/skills/research-kit/references/market.md +13 -0
- package/skills/research-kit/references/unknowns.md +9 -0
- package/skills/spec-kit/README.md +139 -0
- package/skills/spec-kit/SKILL.md +202 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Brownfield Mode
|
|
2
|
+
|
|
3
|
+
Code exists. No .devkit/. May or may not have .specify/.
|
|
4
|
+
|
|
5
|
+
## Phase 1: Project Scan
|
|
6
|
+
|
|
7
|
+
Read the codebase to understand what exists:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Scan for:
|
|
11
|
+
- Main language and framework
|
|
12
|
+
- Entry points (main files, index, app)
|
|
13
|
+
- Database / storage patterns
|
|
14
|
+
- External services and integrations
|
|
15
|
+
- Test files (understand what's already tested)
|
|
16
|
+
- README or docs (understand stated intent)
|
|
17
|
+
- Package files (dependencies reveal architecture)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Summarize findings before proceeding:
|
|
21
|
+
```
|
|
22
|
+
Found: [framework], [database], [key integrations]
|
|
23
|
+
Size: ~N files, ~M lines
|
|
24
|
+
Tests: yes/no, coverage unknown
|
|
25
|
+
Docs: yes/no
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Phase 2: Invariant Extraction
|
|
29
|
+
|
|
30
|
+
Read source code deeply. Look for patterns that reveal implicit invariants:
|
|
31
|
+
|
|
32
|
+
**Signals of technical invariants:**
|
|
33
|
+
- Transactions wrapping multiple operations → atomicity invariant
|
|
34
|
+
- Locks, mutexes, SELECT FOR UPDATE → concurrency invariant
|
|
35
|
+
- Retry logic → reliability invariant
|
|
36
|
+
- Auth checks on every endpoint → security invariant
|
|
37
|
+
- Validation before DB writes → data integrity invariant
|
|
38
|
+
|
|
39
|
+
**Signals of broken invariants:**
|
|
40
|
+
- TODO/FIXME/HACK comments
|
|
41
|
+
- Exception swallowed silently
|
|
42
|
+
- Missing error handling on critical paths
|
|
43
|
+
- Race conditions (no locking where needed)
|
|
44
|
+
|
|
45
|
+
For each extracted invariant, create entry with status `inferred`:
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
## I1: [name]
|
|
49
|
+
STATEMENT: what the system appears to guarantee
|
|
50
|
+
STATUS: inferred
|
|
51
|
+
CONFIDENCE: high / medium / low
|
|
52
|
+
SOURCE: code-analysis
|
|
53
|
+
EVIDENCE: [file:line that shows this]
|
|
54
|
+
NEEDS_REVIEW: true
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Phase 3: Decision Archaeology
|
|
58
|
+
|
|
59
|
+
Look for evidence of past architectural decisions:
|
|
60
|
+
|
|
61
|
+
**Where to look:**
|
|
62
|
+
- Git history and commit messages
|
|
63
|
+
- PR descriptions (if accessible)
|
|
64
|
+
- Comments explaining "why" not "what"
|
|
65
|
+
- Unusual patterns that suggest a workaround
|
|
66
|
+
- Dependencies that seem overengineered for the task
|
|
67
|
+
|
|
68
|
+
For each discovered decision:
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
## ADR-XXX: [inferred decision name]
|
|
72
|
+
STATUS: inferred
|
|
73
|
+
CONFIDENCE: high / medium / low
|
|
74
|
+
EVIDENCE: [what in code suggests this]
|
|
75
|
+
UNKNOWN: [what context is lost]
|
|
76
|
+
NEEDS_REVIEW: true
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Phase 4: Gap Analysis
|
|
80
|
+
|
|
81
|
+
What can't be reconstructed from code alone?
|
|
82
|
+
|
|
83
|
+
```markdown
|
|
84
|
+
# Gaps
|
|
85
|
+
|
|
86
|
+
## UNKNOWN: [topic]
|
|
87
|
+
QUESTION: what we can't determine from code
|
|
88
|
+
WHY_MATTERS: impact on future development
|
|
89
|
+
HOW_TO_RESOLVE: ask developer / check git history / accept unknown
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Present gaps to developer and ask them to fill what they remember.
|
|
93
|
+
|
|
94
|
+
## Phase 5: Produce Artifacts
|
|
95
|
+
|
|
96
|
+
Save to `.devkit/arch/`:
|
|
97
|
+
- `invariants.md` — all inferred invariants (status: inferred, needs_review: true)
|
|
98
|
+
- `decisions/ADR-*.md` — all inferred decisions
|
|
99
|
+
- `impact.md` — dependency map extracted from imports/calls
|
|
100
|
+
|
|
101
|
+
## Status File
|
|
102
|
+
|
|
103
|
+
Create `.devkit/STATUS.md`:
|
|
104
|
+
|
|
105
|
+
```markdown
|
|
106
|
+
# DevKit Status
|
|
107
|
+
|
|
108
|
+
MODE: brownfield
|
|
109
|
+
INITIALIZED: [date]
|
|
110
|
+
CURRENT_PHASE: arch-review
|
|
111
|
+
|
|
112
|
+
## Reconstruction Summary
|
|
113
|
+
INVARIANTS_INFERRED: N
|
|
114
|
+
DECISIONS_INFERRED: M
|
|
115
|
+
GAPS: K (see arch/gaps.md)
|
|
116
|
+
|
|
117
|
+
## Required Actions Before Development
|
|
118
|
+
- [ ] Review and confirm invariants.md
|
|
119
|
+
- [ ] Fill gaps in arch/gaps.md
|
|
120
|
+
- [ ] Run /arch-kit to verify and fill missing decisions
|
|
121
|
+
|
|
122
|
+
## Phase Status
|
|
123
|
+
- [~] ResearchKit (skipped — existing project)
|
|
124
|
+
- [~] ProductKit (partially reconstructed)
|
|
125
|
+
- [ ] ArchKit (review required)
|
|
126
|
+
- [ ] SpecKit
|
|
127
|
+
- [ ] QAKit
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Message to Developer
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
DevKit initialized in brownfield mode.
|
|
134
|
+
|
|
135
|
+
Reconstructed from your codebase:
|
|
136
|
+
Invariants: N (all marked as 'inferred', need your review)
|
|
137
|
+
Decisions: M (inferred from code patterns)
|
|
138
|
+
Gaps: K unknowns that couldn't be reconstructed
|
|
139
|
+
|
|
140
|
+
Next steps:
|
|
141
|
+
1. Review .devkit/arch/invariants.md — confirm or correct each one
|
|
142
|
+
2. Check .devkit/arch/gaps.md — fill what you remember
|
|
143
|
+
3. Run /arch-kit to verify architecture and fill remaining gaps
|
|
144
|
+
|
|
145
|
+
Important: 'inferred' invariants are AI's best guess from code.
|
|
146
|
+
They may be wrong. Please review before trusting them.
|
|
147
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Greenfield Mode
|
|
2
|
+
|
|
3
|
+
Fresh project. No code, no .devkit/, no .specify/.
|
|
4
|
+
|
|
5
|
+
## What to Do
|
|
6
|
+
|
|
7
|
+
1. Create .devkit/ structure (done by SKILL.md)
|
|
8
|
+
2. Run `specify init . --ai claude` (done by SKILL.md)
|
|
9
|
+
3. Tell developer to start with ResearchKit
|
|
10
|
+
|
|
11
|
+
## Starting Message to Developer
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
DevKit initialized for a new project.
|
|
15
|
+
|
|
16
|
+
Your development cycle:
|
|
17
|
+
/research-kit → explore feasibility and unknowns
|
|
18
|
+
/product-kit → define users and UX invariants
|
|
19
|
+
/arch-kit → verify architecture
|
|
20
|
+
/spec-kit → implement (via spec-kit workflow)
|
|
21
|
+
/qa-kit → verify against all decisions
|
|
22
|
+
|
|
23
|
+
Start with /research-kit — describe your idea.
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Files to Create
|
|
27
|
+
|
|
28
|
+
Create `.devkit/STATUS.md`:
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
# DevKit Status
|
|
32
|
+
|
|
33
|
+
MODE: greenfield
|
|
34
|
+
INITIALIZED: [date]
|
|
35
|
+
CURRENT_PHASE: research
|
|
36
|
+
SPEC_KIT: initialized
|
|
37
|
+
|
|
38
|
+
## Phase Status
|
|
39
|
+
- [ ] ResearchKit
|
|
40
|
+
- [ ] ProductKit
|
|
41
|
+
- [ ] ArchKit
|
|
42
|
+
- [ ] SpecKit
|
|
43
|
+
- [ ] QAKit
|
|
44
|
+
```
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Upgrade Mode
|
|
2
|
+
|
|
3
|
+
spec-kit exists (.specify/ present). No .devkit/ yet.
|
|
4
|
+
Developer is already using spec-kit and wants to add the full DevKit layer.
|
|
5
|
+
|
|
6
|
+
## What This Means
|
|
7
|
+
|
|
8
|
+
spec-kit is already running. There are specs, possibly a constitution.md.
|
|
9
|
+
We need to reverse-engineer DevKit artifacts from what spec-kit has,
|
|
10
|
+
then connect them so ArchKit owns constitution.md going forward.
|
|
11
|
+
|
|
12
|
+
## Phase 1: Read Existing spec-kit Artifacts
|
|
13
|
+
|
|
14
|
+
Read all files in `.specify/`:
|
|
15
|
+
- `constitution.md` — project principles and constraints
|
|
16
|
+
- `spec.md` — feature specifications
|
|
17
|
+
- `plan.md` — technical plans
|
|
18
|
+
- `tasks/` — implementation tasks
|
|
19
|
+
|
|
20
|
+
Understand what's already been built and decided.
|
|
21
|
+
|
|
22
|
+
## Phase 2: Extract ArchKit Artifacts from constitution.md
|
|
23
|
+
|
|
24
|
+
constitution.md contains decisions that belong in ArchKit.
|
|
25
|
+
|
|
26
|
+
Extract:
|
|
27
|
+
- Tech stack decisions → ADR entries
|
|
28
|
+
- Constraints and rules → invariant candidates
|
|
29
|
+
- Patterns and standards → more invariants
|
|
30
|
+
|
|
31
|
+
Create `.devkit/arch/invariants.md` from these.
|
|
32
|
+
Create `.devkit/arch/decisions/` ADR files.
|
|
33
|
+
|
|
34
|
+
Mark all as `inferred` with `SOURCE: constitution.md`.
|
|
35
|
+
|
|
36
|
+
## Phase 3: Extract ProductKit Artifacts
|
|
37
|
+
|
|
38
|
+
Look in constitution.md and spec.md for:
|
|
39
|
+
- Who the user is
|
|
40
|
+
- UX rules and constraints
|
|
41
|
+
- What's in scope / out of scope
|
|
42
|
+
|
|
43
|
+
Create `.devkit/product/users.md` and `ux_invariants.md`.
|
|
44
|
+
Mark as `inferred`.
|
|
45
|
+
|
|
46
|
+
## Phase 4: Link DevKit to spec-kit
|
|
47
|
+
|
|
48
|
+
Going forward, constitution.md is OWNED by ArchKit.
|
|
49
|
+
Add a note at the top of `.specify/constitution.md`:
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
<!-- GENERATED BY DEVKIT — do not edit manually -->
|
|
53
|
+
<!-- Source: .devkit/arch/invariants.md + decisions/ -->
|
|
54
|
+
<!-- Regenerate with: /arch-kit generate-constitution -->
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Phase 5: Produce Status File
|
|
58
|
+
|
|
59
|
+
Create `.devkit/STATUS.md`:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
# DevKit Status
|
|
63
|
+
|
|
64
|
+
MODE: upgrade-from-speckit
|
|
65
|
+
INITIALIZED: [date]
|
|
66
|
+
CURRENT_PHASE: arch-review
|
|
67
|
+
|
|
68
|
+
## Migration Summary
|
|
69
|
+
SPEC_KIT_SPECS_FOUND: N
|
|
70
|
+
INVARIANTS_EXTRACTED: M
|
|
71
|
+
CONSTITUTION: linked (DevKit now owns it)
|
|
72
|
+
|
|
73
|
+
## Required Actions
|
|
74
|
+
- [ ] Review .devkit/arch/invariants.md
|
|
75
|
+
- [ ] Confirm or correct extracted decisions
|
|
76
|
+
- [ ] Run /arch-kit to fill gaps
|
|
77
|
+
|
|
78
|
+
## Phase Status
|
|
79
|
+
- [~] ResearchKit (not available — existing project)
|
|
80
|
+
- [~] ProductKit (partially extracted)
|
|
81
|
+
- [ ] ArchKit (review required)
|
|
82
|
+
- [x] SpecKit (already in use)
|
|
83
|
+
- [ ] QAKit
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Message to Developer
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
DevKit initialized over your existing spec-kit project.
|
|
90
|
+
|
|
91
|
+
Extracted from your spec-kit artifacts:
|
|
92
|
+
Invariants: N (from constitution.md — review required)
|
|
93
|
+
Decisions: M (inferred — review required)
|
|
94
|
+
|
|
95
|
+
constitution.md is now managed by ArchKit.
|
|
96
|
+
Changes to architecture go through /arch-kit,
|
|
97
|
+
which regenerates constitution.md automatically.
|
|
98
|
+
|
|
99
|
+
Next steps:
|
|
100
|
+
1. Review .devkit/arch/invariants.md
|
|
101
|
+
2. Run /arch-kit to verify and complete the picture
|
|
102
|
+
3. Continue using spec-kit as normal — it now has a verified foundation
|
|
103
|
+
```
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# ProductKit
|
|
2
|
+
|
|
3
|
+
> Уровень 2. "Что именно строим и для кого?"
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Когда использовать
|
|
8
|
+
|
|
9
|
+
- feasibility подтверждена в ResearchKit
|
|
10
|
+
- нужно определить что именно строить
|
|
11
|
+
- нужно понять как пользователь будет это использовать
|
|
12
|
+
- нужно зафиксировать UX инварианты до архитектуры
|
|
13
|
+
- нужно определить роадмап и приоритеты
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Ключевая идея
|
|
18
|
+
|
|
19
|
+
UX инварианты определяются **до** архитектуры. Они ограничивают архитектурные решения так же жёстко как технические требования.
|
|
20
|
+
|
|
21
|
+
Пример: если U1 = "CLI запускается с максимум 3 обязательными параметрами" зафиксирован здесь — архитектура с 60 параметрами станет блокером в ArchKit, а не открытием после реализации.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Фазы
|
|
26
|
+
|
|
27
|
+
### Phase 1: User Definition
|
|
28
|
+
```
|
|
29
|
+
QUESTIONS:
|
|
30
|
+
- Кто конкретно будет это использовать?
|
|
31
|
+
- Какую проблему они решают сейчас без этого инструмента?
|
|
32
|
+
- Что они знают / умеют заранее?
|
|
33
|
+
- В каком контексте используют: вручную, в скрипте, в CI?
|
|
34
|
+
|
|
35
|
+
FORBIDDEN:
|
|
36
|
+
- думать о технической реализации
|
|
37
|
+
- выбирать стек
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Phase 2: UX Invariants
|
|
41
|
+
```
|
|
42
|
+
Формализуем что система гарантирует пользователю.
|
|
43
|
+
Не "как выглядит" а "что обещает".
|
|
44
|
+
|
|
45
|
+
EXAMPLES:
|
|
46
|
+
U1: новый пользователь достигает результата за N шагов
|
|
47
|
+
U2: без конфига работает разумный default
|
|
48
|
+
U3: ошибка всегда содержит что делать дальше
|
|
49
|
+
U4: операция X занимает не более Y секунд субъективно
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Phase 3: Roadmap
|
|
53
|
+
```
|
|
54
|
+
Фазы разработки с точки зрения продукта.
|
|
55
|
+
Что входит в MVP, что в v1, что позже.
|
|
56
|
+
|
|
57
|
+
BASIS: UX инварианты + assumptions из ResearchKit
|
|
58
|
+
CONSTRAINTS: будут дополнены техническими из ArchKit
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Артефакты
|
|
64
|
+
|
|
65
|
+
### users.md
|
|
66
|
+
```markdown
|
|
67
|
+
# Users
|
|
68
|
+
|
|
69
|
+
## Primary User
|
|
70
|
+
PROFILE: кто это
|
|
71
|
+
CONTEXT: как и где использует
|
|
72
|
+
KNOWLEDGE: что знает заранее
|
|
73
|
+
GOAL: чего хочет достичь
|
|
74
|
+
HAPPY_PATH: типичный сценарий (80% случаев)
|
|
75
|
+
|
|
76
|
+
## Edge Cases
|
|
77
|
+
...
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### ux_invariants.md
|
|
81
|
+
```markdown
|
|
82
|
+
# UX Invariants
|
|
83
|
+
|
|
84
|
+
## U1: [название]
|
|
85
|
+
STATEMENT: что система гарантирует пользователю
|
|
86
|
+
RATIONALE: почему это важно
|
|
87
|
+
VALIDATION: как проверить что инвариант соблюдён
|
|
88
|
+
PRIORITY: must / should / could
|
|
89
|
+
STATUS: active / suspended / rejected
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### roadmap.md
|
|
93
|
+
```markdown
|
|
94
|
+
# Roadmap
|
|
95
|
+
|
|
96
|
+
## MVP
|
|
97
|
+
GOAL: минимум для первого реального использования
|
|
98
|
+
UX_INVARIANTS: [какие инварианты покрывает]
|
|
99
|
+
EXCLUDES: [что явно не входит]
|
|
100
|
+
|
|
101
|
+
## V1
|
|
102
|
+
...
|
|
103
|
+
|
|
104
|
+
## Later
|
|
105
|
+
...
|
|
106
|
+
|
|
107
|
+
## Never (явный anti-scope)
|
|
108
|
+
...
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Переход к ArchKit
|
|
114
|
+
|
|
115
|
+
**ALLOWED** когда:
|
|
116
|
+
- все пользовательские сценарии описаны
|
|
117
|
+
- UX инварианты зафиксированы для MVP
|
|
118
|
+
- роадмап имеет явный anti-scope
|
|
119
|
+
- нет open questions о том кто пользователь
|
|
120
|
+
|
|
121
|
+
**BLOCKED** когда:
|
|
122
|
+
- UX инварианты противоречат друг другу
|
|
123
|
+
- happy path не определён
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Команды
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
/product init
|
|
131
|
+
/product users
|
|
132
|
+
/product ux-invariants
|
|
133
|
+
/product roadmap
|
|
134
|
+
/product status
|
|
135
|
+
```
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-kit
|
|
3
|
+
description: DevKit Level 2. Use after ResearchKit when developer needs to define who the user is, establish UX invariants, and set the roadmap before architecture. Triggers on phrases like "who is this for", "how will people use this", "what's the MVP", "user experience", or when ResearchKit handoff is complete.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: devkit
|
|
7
|
+
version: "1.1"
|
|
8
|
+
layer: "2-of-5"
|
|
9
|
+
prev: research-kit
|
|
10
|
+
next: arch-kit
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# ProductKit — Level 2: "What exactly are we building and for whom?"
|
|
14
|
+
|
|
15
|
+
You are operating in ProductKit phase. Your job is to define the user, establish UX invariants, and set roadmap priorities before any architecture decisions are made.
|
|
16
|
+
|
|
17
|
+
## Start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
devkit status
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Confirm you are in the product phase. If not, check gate status of the previous phase.
|
|
24
|
+
|
|
25
|
+
## Your Role
|
|
26
|
+
|
|
27
|
+
- Define who the user is and how they interact with the product
|
|
28
|
+
- Establish UX invariants that constrain architecture
|
|
29
|
+
- Prioritize ruthlessly: MVP vs later vs never
|
|
30
|
+
- Do NOT recommend technical solutions
|
|
31
|
+
- Do NOT write code or architecture
|
|
32
|
+
|
|
33
|
+
## Critical Principle
|
|
34
|
+
|
|
35
|
+
UX invariants are defined HERE, before ArchKit. They constrain architecture just as hard as technical requirements. If defined after, you get 60-parameter CLIs that formally work but are unusable.
|
|
36
|
+
|
|
37
|
+
## Phases
|
|
38
|
+
|
|
39
|
+
### Phase 1: User Definition
|
|
40
|
+
Identify the real user. Ask:
|
|
41
|
+
- Who specifically will use this? (developer, devops, manager, end user?)
|
|
42
|
+
- What do they already know?
|
|
43
|
+
- What context are they in when they use this? (manually, in CI, in a script?)
|
|
44
|
+
- What is their happy path — the 80% case?
|
|
45
|
+
|
|
46
|
+
### Phase 2: UX Invariants
|
|
47
|
+
Formalize what the system PROMISES the user. Not how it looks — what it guarantees.
|
|
48
|
+
|
|
49
|
+
Examples:
|
|
50
|
+
- "New user reaches result in under N steps"
|
|
51
|
+
- "No required config to get started — sensible defaults"
|
|
52
|
+
- "Every error message tells you what to do next"
|
|
53
|
+
- "Core operation completes in under N seconds"
|
|
54
|
+
|
|
55
|
+
Each invariant gets: PRIORITY (must/should/could) and VALIDATION method.
|
|
56
|
+
|
|
57
|
+
### Phase 3: Roadmap
|
|
58
|
+
Define phases from user perspective:
|
|
59
|
+
- MVP: minimum to be genuinely useful
|
|
60
|
+
- V1: full intended experience
|
|
61
|
+
- Later: good ideas for the future
|
|
62
|
+
- Never (anti-scope): explicitly out of scope — prevents scope creep
|
|
63
|
+
|
|
64
|
+
## Artifacts to Produce
|
|
65
|
+
|
|
66
|
+
Read templates from:
|
|
67
|
+
- [Users template](references/users.md)
|
|
68
|
+
- [UX Invariants template](references/ux_invariants.md)
|
|
69
|
+
- [Roadmap template](references/roadmap.md)
|
|
70
|
+
|
|
71
|
+
Save artifacts to `.devkit/product/`.
|
|
72
|
+
|
|
73
|
+
**After creating or updating artifacts, always run:**
|
|
74
|
+
```bash
|
|
75
|
+
devkit validate
|
|
76
|
+
```
|
|
77
|
+
Fix any errors before proceeding.
|
|
78
|
+
|
|
79
|
+
## Gate: When Can We Move to ArchKit?
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
devkit gate
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
ALLOWED to proceed when:
|
|
86
|
+
- Primary user and happy path defined
|
|
87
|
+
- UX invariants established for MVP scope
|
|
88
|
+
- Roadmap has explicit anti-scope
|
|
89
|
+
- No contradictions between UX invariants
|
|
90
|
+
|
|
91
|
+
BLOCKED when:
|
|
92
|
+
- UX invariants contradict each other
|
|
93
|
+
- Happy path unclear
|
|
94
|
+
- "Who is the user" still open
|
|
95
|
+
|
|
96
|
+
## Event Detection
|
|
97
|
+
|
|
98
|
+
### Product Blocker (triggered during SpecKit or later)
|
|
99
|
+
If developer says: "this is awkward to use", "too many parameters", "users won't understand this" — this is a UX invariant violation.
|
|
100
|
+
|
|
101
|
+
Response:
|
|
102
|
+
> "This looks like a UX invariant violation. Let me check product-kit artifacts.
|
|
103
|
+
> [check ux_invariants.md]
|
|
104
|
+
> This conflicts with [U_N]. Running ProductKit investigation before continuing."
|
|
105
|
+
|
|
106
|
+
Review ux_invariants.md, explore options, update invariants if needed, propagate changes to ArchKit via `devkit rfc`.
|
|
107
|
+
|
|
108
|
+
## Handoff
|
|
109
|
+
|
|
110
|
+
When `devkit gate` shows ALLOWED:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
devkit advance
|
|
114
|
+
devkit status
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Then generate summary:
|
|
118
|
+
```
|
|
119
|
+
PRODUCT COMPLETE
|
|
120
|
+
USER: [one-line description]
|
|
121
|
+
HAPPY PATH: [one sentence]
|
|
122
|
+
UX INVARIANTS: N defined (M must, K should)
|
|
123
|
+
MVP SCOPE: [summary]
|
|
124
|
+
ANTI-SCOPE: [what we explicitly won't do]
|
|
125
|
+
READY FOR: ArchKit
|
|
126
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Roadmap Template
|
|
2
|
+
|
|
3
|
+
## MVP
|
|
4
|
+
GOAL: minimum to be genuinely useful to the primary user
|
|
5
|
+
UX_INVARIANTS_COVERED: [U1, U2, ...]
|
|
6
|
+
EXCLUDES: [what is explicitly out of MVP]
|
|
7
|
+
|
|
8
|
+
## V1
|
|
9
|
+
GOAL: full intended experience
|
|
10
|
+
ADDS: [what MVP lacks]
|
|
11
|
+
|
|
12
|
+
## Later
|
|
13
|
+
[Good ideas that are not V1]
|
|
14
|
+
|
|
15
|
+
## Never (Anti-Scope)
|
|
16
|
+
[What we explicitly will NOT do — this prevents scope creep]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Users Template
|
|
2
|
+
|
|
3
|
+
## Primary User
|
|
4
|
+
PROFILE: who they are
|
|
5
|
+
CONTEXT: when and where they use this
|
|
6
|
+
KNOWLEDGE: what they know coming in
|
|
7
|
+
GOAL: what they want to achieve
|
|
8
|
+
HAPPY_PATH: the typical 80% scenario (one sentence)
|
|
9
|
+
|
|
10
|
+
## Secondary Users
|
|
11
|
+
[Other users and their scenarios if applicable]
|
|
12
|
+
|
|
13
|
+
## Anti-Users
|
|
14
|
+
[Who this is explicitly NOT for — prevents over-engineering]
|