wize-dev-kit 0.1.4 → 0.2.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/CHANGELOG.md +78 -1
- package/README.md +64 -0
- package/package.json +1 -1
- package/src/app-overlay/playbooks/apple-hig.md +112 -0
- package/src/app-overlay/playbooks/detox-maestro.md +179 -0
- package/src/app-overlay/playbooks/device-matrix.md +121 -0
- package/src/app-overlay/playbooks/material-design-3.md +135 -0
- package/src/app-overlay/playbooks/mobile-perf-budgets.md +145 -0
- package/src/app-overlay/playbooks/permissions-ux.md +147 -0
- package/src/app-overlay/playbooks/touch-targets-and-gestures.md +127 -0
- package/src/app-overlay/stack-catalog.md +178 -0
- package/src/method-skills/1-analysis/wize-document-project/workflow.md +147 -20
- package/src/method-skills/1-analysis/wize-prfaq/workflow.md +150 -11
- package/src/method-skills/1-analysis/wize-product-brief/workflow.md +90 -19
- package/src/method-skills/1-analysis/wize-research/workflow.md +101 -9
- package/src/method-skills/1-analysis/wize-trigger-map/workflow.md +80 -16
- package/src/method-skills/2-plan-workflows/wize-create-prd/workflow.md +132 -23
- package/src/method-skills/2-plan-workflows/wize-ux-design/workflow.md +132 -28
- package/src/method-skills/2-plan-workflows/wize-ux-scenarios/workflow.md +91 -15
- package/src/method-skills/2-plan-workflows/wize-validate-prd/workflow.md +106 -12
- package/src/method-skills/3-solutioning/wize-check-implementation-readiness/workflow.md +101 -11
- package/src/method-skills/3-solutioning/wize-create-architecture/workflow.md +197 -29
- package/src/method-skills/3-solutioning/wize-create-epics-and-stories/workflow.md +127 -12
- package/src/method-skills/3-solutioning/wize-design-system/workflow.md +182 -22
- package/src/method-skills/3-solutioning/wize-nfr-principles/workflow.md +142 -16
- package/src/method-skills/3-solutioning/wize-tech-vision/workflow.md +127 -21
- package/src/method-skills/4-implementation/wize-code-review/workflow.md +105 -10
- package/src/method-skills/4-implementation/wize-create-story/workflow.md +131 -10
- package/src/method-skills/4-implementation/wize-dev-story/workflow.md +115 -17
- package/src/method-skills/4-implementation/wize-quick-dev/workflow.md +109 -18
- package/src/method-skills/4-implementation/wize-retrospective/workflow.md +112 -10
- package/src/method-skills/4-implementation/wize-sprint-planning/workflow.md +85 -10
- package/src/method-skills/4-implementation/wize-sprint-status/workflow.md +96 -11
- package/src/tea-skills/wize-tea-design/workflow.md +104 -13
- package/src/tea-skills/wize-tea-gate/workflow.md +108 -25
- package/src/tea-skills/wize-tea-nfr/workflow.md +104 -14
- package/src/tea-skills/wize-tea-review/workflow.md +107 -13
- package/src/tea-skills/wize-tea-risk/workflow.md +99 -10
- package/src/tea-skills/wize-tea-trace/workflow.md +83 -12
- package/src/web-overlay/playbooks/playwright-vitest.md +211 -0
- package/src/web-overlay/playbooks/responsive-breakpoints.md +104 -0
- package/src/web-overlay/playbooks/semantic-html.md +114 -0
- package/src/web-overlay/playbooks/wcag-aa.md +97 -0
- package/src/web-overlay/playbooks/web-perf-budgets.md +140 -0
- package/src/web-overlay/stack-catalog.md +208 -0
- package/tools/installer/commands/agent.js +197 -0
- package/tools/installer/commands/sync.js +45 -0
- package/tools/installer/commands/update.js +172 -0
- package/tools/installer/wize-cli.js +24 -8
|
@@ -3,31 +3,122 @@ code: wize-quick-dev
|
|
|
3
3
|
name: Quick Dev (lifecycle shortcut)
|
|
4
4
|
phase: 4-implementation
|
|
5
5
|
owner: wize-agent-dev # Shuri
|
|
6
|
-
status:
|
|
6
|
+
status: ready
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Quick Dev
|
|
10
10
|
|
|
11
|
-
**Goal.** When the task is small and well-scoped (bug fix, copy edit, small refactor), skip the full lifecycle.
|
|
11
|
+
**Goal.** When the task is small and well-scoped (bug fix, copy edit, small refactor, dep bump, brownfield maintenance), skip Phase 1–3 and execute with light TEA. Save the full lifecycle for new value.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
- Bug fix with clear root cause
|
|
15
|
-
- Copy or content edit
|
|
16
|
-
- Small refactor with no behavior change
|
|
17
|
-
- Dependency bump
|
|
18
|
-
- Brownfield maintenance
|
|
13
|
+
Wizer authorizes the shortcut (via routing). Shuri runs it. Hawkeye does smoke-only.
|
|
19
14
|
|
|
20
|
-
## When
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
15
|
+
## When to use (yes)
|
|
16
|
+
|
|
17
|
+
- Bug fix with a clear root cause.
|
|
18
|
+
- Copy or content edit.
|
|
19
|
+
- Small refactor with no behavior change.
|
|
20
|
+
- Dependency bump (security or minor).
|
|
21
|
+
- Brownfield maintenance: rename, structural cleanup, dead-code removal.
|
|
22
|
+
- Hotfix during incident response (post-mortem after).
|
|
23
|
+
|
|
24
|
+
## When NOT to use (no)
|
|
25
|
+
|
|
26
|
+
- New feature, even small.
|
|
27
|
+
- Cross-cutting change touching architecture.
|
|
28
|
+
- Changes where ACs need to be agreed.
|
|
29
|
+
- Anything that should be a story.
|
|
30
|
+
- Anything that touches security/auth/payments without senior review.
|
|
31
|
+
|
|
32
|
+
## Decision tree
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Question Yes No
|
|
36
|
+
Is there an AC to write? → full lifecycle → next
|
|
37
|
+
Does it touch architecture? → full lifecycle → next
|
|
38
|
+
Does it need UX input? → full lifecycle → next
|
|
39
|
+
Could it surprise a user? → full lifecycle → next
|
|
40
|
+
Is it ≤ 1 hour to a careful dev? → quick-dev → full lifecycle
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Inputs
|
|
44
|
+
|
|
45
|
+
- Issue / Slack message / PR comment describing the problem.
|
|
46
|
+
- Repo state.
|
|
47
|
+
- `.wize/config/tea.toml` (smoke-only policy when `policy = "advisory"`).
|
|
48
|
+
|
|
49
|
+
## Output
|
|
50
|
+
|
|
51
|
+
- Code change (single PR).
|
|
52
|
+
- Single-line entry appended to `.wize/implementation/quick-dev-log.md`.
|
|
53
|
+
- Conventional commit.
|
|
24
54
|
|
|
25
55
|
## Steps
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
56
|
+
|
|
57
|
+
### 1. Frame in one paragraph
|
|
58
|
+
|
|
59
|
+
What changes, why, and what could break. If the paragraph is hard to write, you're not in quick-dev territory.
|
|
60
|
+
|
|
61
|
+
### 2. Implement
|
|
62
|
+
|
|
63
|
+
- TDD when reasonable; smoke-test-and-fix when the cost of TDD is greater than the value.
|
|
64
|
+
- Reuse existing components. Don't introduce new abstractions.
|
|
65
|
+
|
|
66
|
+
### 3. Hawkeye lite
|
|
67
|
+
|
|
68
|
+
- Smoke test: imports load, the changed flow doesn't break.
|
|
69
|
+
- Lint + format + type-check clean.
|
|
70
|
+
- No `tea-design / trace / review / nfr` written.
|
|
71
|
+
- Single one-line gate entry instead of full `gate.md`.
|
|
72
|
+
|
|
73
|
+
### 4. Log
|
|
74
|
+
|
|
75
|
+
Append one line to `.wize/implementation/quick-dev-log.md`:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
2026-06-11 | shuri | dep-bump zod 3.22→3.23 | smoke PASS | PR #418
|
|
79
|
+
2026-06-11 | shuri | fix copy on /signin help link | smoke PASS | PR #419
|
|
80
|
+
2026-06-11 | shuri | rename UserService → AccountService | smoke PASS | PR #420
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 5. Commit + open PR
|
|
84
|
+
|
|
85
|
+
Conventional commit. PR description: the paragraph from step 1.
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
fix(auth): typo in error message for AC-04-2 follow-up
|
|
89
|
+
|
|
90
|
+
The error shown after rate-limit said "Sloow down" — corrected to "Slow down".
|
|
91
|
+
No behavior change; copy-only.
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Quick-dev log template
|
|
95
|
+
|
|
96
|
+
```markdown
|
|
97
|
+
# Quick-dev log
|
|
98
|
+
|
|
99
|
+
| Date | Owner | What | Smoke | PR |
|
|
100
|
+
|---|---|---|---|---|
|
|
101
|
+
| 2026-06-11 | shuri | … | PASS | #N |
|
|
102
|
+
```
|
|
31
103
|
|
|
32
104
|
## Disabling
|
|
33
|
-
|
|
105
|
+
|
|
106
|
+
To force every change through the full lifecycle (for very high-stakes products), set in `.wize/config/project.toml`:
|
|
107
|
+
|
|
108
|
+
```toml
|
|
109
|
+
[install]
|
|
110
|
+
quick_dev_enabled = false
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Wizer respects this; quick-dev becomes unavailable; every change must go through Pepper → … → Hawkeye gate.
|
|
114
|
+
|
|
115
|
+
## Anti-patterns Shuri rejects in herself
|
|
116
|
+
|
|
117
|
+
- Reaching for quick-dev to skip writing an AC because she doesn't want to argue with Hill.
|
|
118
|
+
- Quick-dev that touches security/auth/payments.
|
|
119
|
+
- A "small refactor" that ends up changing behavior.
|
|
120
|
+
- Skipping the log entry.
|
|
121
|
+
|
|
122
|
+
## Hand-off
|
|
123
|
+
|
|
124
|
+
> `dep-bump zod 3.23` is in. PR #418, smoke PASS. Logged. No further TEA artifacts; moving on.
|
|
@@ -3,34 +3,136 @@ code: wize-retrospective
|
|
|
3
3
|
name: Retrospective
|
|
4
4
|
phase: 4-implementation
|
|
5
5
|
owner: wize-orchestrator # Wizer facilitates; whole team contributes
|
|
6
|
-
status:
|
|
6
|
+
status: ready
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Retrospective
|
|
10
10
|
|
|
11
|
-
**Goal.** Capture what worked, what didn't, and
|
|
11
|
+
**Goal.** Capture what worked, what didn't, what surprised, and **one concrete change for next sprint**. A retro that ends in a vibe is a retro that didn't ship a change.
|
|
12
|
+
|
|
13
|
+
Wizer facilitates. Hill enforces output discipline. Everyone (including Pepper, Mantis, Fury) contributes.
|
|
14
|
+
|
|
15
|
+
## When to run
|
|
16
|
+
|
|
17
|
+
- End of every sprint (cadence).
|
|
18
|
+
- After any incident (separate; pulls from incident timeline).
|
|
19
|
+
- At major milestones (epic close, release, year-end).
|
|
12
20
|
|
|
13
21
|
## Inputs
|
|
22
|
+
|
|
14
23
|
- `.wize/implementation/sprint-status.md` (current sprint)
|
|
15
24
|
- All `gate.md` files from current sprint
|
|
25
|
+
- `tea/nfr/{epic}.md` if an epic closed this sprint
|
|
26
|
+
- Quick-dev log
|
|
27
|
+
|
|
28
|
+
## Output
|
|
16
29
|
|
|
17
|
-
## Outputs
|
|
18
30
|
- `.wize/implementation/retrospective/{YYYY-MM-DD}.md`
|
|
19
31
|
|
|
20
|
-
##
|
|
32
|
+
## Format (60 minutes, fixed)
|
|
33
|
+
|
|
34
|
+
| Minutes | Section |
|
|
35
|
+
|---|---|
|
|
36
|
+
| 0–5 | Frame: Wizer reads the sprint stats (capacity, shipped, slipped, gates). |
|
|
37
|
+
| 5–15 | **Worked** — what we want to repeat. |
|
|
38
|
+
| 15–25 | **Didn't work** — what we want to change. |
|
|
39
|
+
| 25–35 | **Surprised us** — externalities, signals, anything not on plan. |
|
|
40
|
+
| 35–45 | Pick **1–3 changes**. Vote with effort/impact dots. |
|
|
41
|
+
| 45–55 | Each change gets an owner + deadline. |
|
|
42
|
+
| 55–60 | Wizer reads back the doc; everyone confirms; close. |
|
|
43
|
+
|
|
44
|
+
Going over 60 minutes is a sign the retro became therapy. Time-box.
|
|
45
|
+
|
|
46
|
+
## Steps
|
|
47
|
+
|
|
48
|
+
### 1. Open with stats
|
|
49
|
+
|
|
50
|
+
Wizer reads the sprint dashboard from `sprint-status.md`:
|
|
51
|
+
- Velocity vs commitment.
|
|
52
|
+
- Number of gates: PASS / CONCERNS / FAIL / WAIVED.
|
|
53
|
+
- Blockers and their resolution times.
|
|
54
|
+
- Carry-over count.
|
|
55
|
+
|
|
56
|
+
Stats anchor the retro in observations, not feelings.
|
|
57
|
+
|
|
58
|
+
### 2. Worked / didn't / surprised
|
|
59
|
+
|
|
60
|
+
Each engineer brings 2–3 items per section, written in advance ideally. Time-box discussion: any item that takes > 3 min becomes a follow-up.
|
|
61
|
+
|
|
62
|
+
### 3. Changes (1–3 max)
|
|
63
|
+
|
|
64
|
+
A change is:
|
|
65
|
+
- **Specific:** "Pair-program for E04-S02 because R-3 is high" — not "communicate more."
|
|
66
|
+
- **Owned:** a person.
|
|
67
|
+
- **Bounded:** a deadline or a sprint to land it.
|
|
68
|
+
|
|
69
|
+
If you pick 4+ changes, you'll execute 0. Choose.
|
|
70
|
+
|
|
71
|
+
### 4. Write the doc
|
|
72
|
+
|
|
73
|
+
Use the template; close the retro with the doc in front of the team.
|
|
74
|
+
|
|
75
|
+
### 5. Trigger reads
|
|
76
|
+
|
|
77
|
+
Wizer notifies Hill (who plugs the changes into next sprint planning), Hawkeye (who may revise risk profile), Fury (when an NFR principle change emerges).
|
|
78
|
+
|
|
79
|
+
## Output template
|
|
21
80
|
|
|
22
81
|
```markdown
|
|
23
|
-
|
|
82
|
+
---
|
|
83
|
+
sprint: 7
|
|
84
|
+
date: 2026-06-25
|
|
85
|
+
facilitator: Wizer
|
|
86
|
+
attendees: [Hill, Tony, Mantis, Pepper, Fury, Hawkeye, Shuri]
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
# Retrospective — Sprint 7
|
|
90
|
+
|
|
91
|
+
## Sprint snapshot
|
|
92
|
+
- Committed: 4 stories + 1 stretch
|
|
93
|
+
- Shipped: 4 stories
|
|
94
|
+
- Stretch: not pulled
|
|
95
|
+
- Gates: 4 PASS, 1 CONCERNS, 0 FAIL
|
|
96
|
+
- Blockers: 1 (vendor sandbox, resolved Day 5)
|
|
97
|
+
- Carry-over to S8: 0
|
|
24
98
|
|
|
25
99
|
## Worked
|
|
26
|
-
-
|
|
100
|
+
- Pairing on E03-S02 (auth refresh) — issue caught at integration test instead of in prod.
|
|
101
|
+
- TEA design done at planning for R-3 stories paid off.
|
|
102
|
+
- Mantis' "before/after" recordings in PRs accelerated review.
|
|
27
103
|
|
|
28
104
|
## Didn't work
|
|
29
|
-
-
|
|
105
|
+
- Sprint-status entries went stale on Days 7–8 (Hill on vacation).
|
|
106
|
+
- E02-S02 estimated M, actually L; we over-committed.
|
|
107
|
+
- Vendor outage with no fallback caught us cold for 4h.
|
|
30
108
|
|
|
31
109
|
## Surprised us
|
|
32
|
-
-
|
|
110
|
+
- A11y audit caught 3 issues on a screen Mantis had already signed off on (axe found dynamic-content edge cases).
|
|
111
|
+
- Cost dashboard showed mailer spend doubled — outbox retry was too aggressive.
|
|
112
|
+
|
|
113
|
+
## Changes for Sprint 8
|
|
114
|
+
|
|
115
|
+
1. **Sprint-status delegation rotation** — when Hill is OOO, Wizer takes over. *Owner: Wizer. By: Sprint 8 Day 1.*
|
|
116
|
+
2. **L estimates require justification** — any L gets one paragraph "why L not M" in the story file. *Owner: Tony. By: Sprint 8 planning.*
|
|
117
|
+
3. **Vendor fallback drill** — quarterly, simulate top-3 vendor outages. *Owner: Hawkeye + Tony. By: end of Q3.*
|
|
118
|
+
|
|
119
|
+
## Decisions made
|
|
120
|
+
- Mailer retry policy updated (NFR-01-1).
|
|
121
|
+
- Risk profile revised: R-1 mitigation now confirmed.
|
|
33
122
|
|
|
34
|
-
##
|
|
35
|
-
-
|
|
123
|
+
## Notes for next sprint
|
|
124
|
+
- Carry zero stories; everyone starts S8 fresh.
|
|
125
|
+
- Stretch goal in S8: catch up on REV-01 (copy fix from S7).
|
|
36
126
|
```
|
|
127
|
+
|
|
128
|
+
## Anti-patterns Wizer rejects (politely)
|
|
129
|
+
|
|
130
|
+
- **A retro without a change.** Then it was venting.
|
|
131
|
+
- **"We need to communicate better."** Specific or it doesn't count.
|
|
132
|
+
- **Adopting > 3 changes.** None will land.
|
|
133
|
+
- **No owner / no deadline.** Hopes, not plans.
|
|
134
|
+
- **Skipping the retro to "save time."** The next sprint costs more.
|
|
135
|
+
|
|
136
|
+
## Hand-off
|
|
137
|
+
|
|
138
|
+
> Retro at `.wize/implementation/retrospective/2026-06-25.md`. 3 changes; owners assigned. Sprint 8 planning anchors on them. Hawkeye, please update `risk-profile.md` with the R-1 mitigation confirmed.
|
|
@@ -3,22 +3,97 @@ code: wize-sprint-planning
|
|
|
3
3
|
name: Sprint Planning
|
|
4
4
|
phase: 4-implementation
|
|
5
5
|
owner: wize-agent-pm # Maria Hill
|
|
6
|
-
status:
|
|
6
|
+
status: ready
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Sprint Planning
|
|
10
10
|
|
|
11
|
-
**Goal.** Pick what enters this sprint. Capacity-honest, priority-honest.
|
|
11
|
+
**Goal.** Pick what enters this sprint. Capacity-honest, priority-honest, risk-honest. The sprint is a commitment about a small slice of the future, not a wish list.
|
|
12
|
+
|
|
13
|
+
Maria Hill chairs. Tony advises on slicing. Hawkeye flags risk on stories. Shuri commits to the load.
|
|
12
14
|
|
|
13
15
|
## Inputs
|
|
14
|
-
- Story backlog from `.wize/solutioning/stories/`
|
|
15
|
-
- Velocity history (if exists) from `.wize/implementation/sprint-status.md`
|
|
16
|
-
- Hawkeye risk profile (`risk-profile.md`)
|
|
17
16
|
|
|
18
|
-
|
|
19
|
-
-
|
|
17
|
+
- Story backlog: `.wize/solutioning/stories/`
|
|
18
|
+
- Velocity history: `.wize/implementation/sprint-status.md` (previous sprints) — when present.
|
|
19
|
+
- `.wize/implementation/tea/risk-profile.md`
|
|
20
|
+
- Open `tea-gate` outcomes from last sprint.
|
|
21
|
+
- Team availability for the next interval (vacations, on-call rotation, planned meetings).
|
|
22
|
+
|
|
23
|
+
## Output
|
|
24
|
+
|
|
25
|
+
- New sprint block appended to `.wize/implementation/sprint-status.md`.
|
|
26
|
+
- Story files updated `priority: 1` for chosen stories.
|
|
20
27
|
|
|
21
28
|
## Rules
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
29
|
+
|
|
30
|
+
1. **Capacity = min(history velocity, declared availability).** Not the average of optimistic estimates.
|
|
31
|
+
2. **High-risk stories** (linked to `R-x` HIGH in risk profile) get TEA design done in the planning meeting, not at story start.
|
|
32
|
+
3. **Stretch goals** are explicit, named, not silent. If a stretch ships, great. If not, the sprint isn't a failure.
|
|
33
|
+
4. **Don't carry over without reason.** A carried-over story gets a one-line "why" in the sprint log.
|
|
34
|
+
|
|
35
|
+
## Steps
|
|
36
|
+
|
|
37
|
+
### 1. Look back (3 min)
|
|
38
|
+
|
|
39
|
+
Last sprint: what shipped, what slipped, what surprised. Don't relitigate; observe.
|
|
40
|
+
|
|
41
|
+
### 2. Refresh capacity
|
|
42
|
+
|
|
43
|
+
- Person-days available this sprint = sum(working days) × (1 - meetings load).
|
|
44
|
+
- Subtract on-call burden, oncall handoff time, planned reviews.
|
|
45
|
+
|
|
46
|
+
### 3. Pull stories (in priority order)
|
|
47
|
+
|
|
48
|
+
Default selection algorithm:
|
|
49
|
+
- Always pull continuation stories (in-flight from last sprint) first.
|
|
50
|
+
- Then highest-priority stories that fit the capacity.
|
|
51
|
+
- Then risk-driven: high-risk stories (R-HIGH) preferred over more low-risk ones when capacity is tight.
|
|
52
|
+
|
|
53
|
+
For each pulled story, confirm INVEST still holds; re-slice if needed.
|
|
54
|
+
|
|
55
|
+
### 4. Reserve buffer
|
|
56
|
+
|
|
57
|
+
10–15% buffer for unknowns (bug fixes, support escalations). Don't fill the sprint to 100% — you'll always pay.
|
|
58
|
+
|
|
59
|
+
### 5. Walk the gate plan
|
|
60
|
+
|
|
61
|
+
For each story pulled, what's the TEA gate cadence? Most stories: design at start, trace + review + gate at end. High-risk: include NFR re-check at epic close.
|
|
62
|
+
|
|
63
|
+
### 6. Commit (verbal + written)
|
|
64
|
+
|
|
65
|
+
Each engineer reads back the stories they're owning. Hill writes them into the sprint block. Sprint starts.
|
|
66
|
+
|
|
67
|
+
## Sprint block template (appended to `sprint-status.md`)
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
## Sprint 7 — 2026-06-12 → 2026-06-25
|
|
71
|
+
|
|
72
|
+
**Capacity:** 24 person-days (3 engineers × 10 days × 0.8 utilization)
|
|
73
|
+
**Carry-over:** E01-S05 (90% done; Shuri); E03-S01 (TEA review pending)
|
|
74
|
+
**Pulled:**
|
|
75
|
+
- E01-S06 — M — owner: Shuri — gate cadence: design+gate
|
|
76
|
+
- E02-S02 — L — owner: Shuri — gate cadence: design+trace+review+gate (R-3)
|
|
77
|
+
- E03-S02 — M — owner: Aaliyah — gate cadence: design+trace+review+gate (R-1)
|
|
78
|
+
- E04-S01 — S — owner: Shuri — gate cadence: smoke (quick-dev pattern)
|
|
79
|
+
- E02-S03 — S — stretch
|
|
80
|
+
|
|
81
|
+
**Out (deferred to Sprint 8):**
|
|
82
|
+
- E03-S03 — reason: depends on E03-S02 ADR
|
|
83
|
+
- E05-S01 — reason: out of NFR-cost budget; revisit
|
|
84
|
+
|
|
85
|
+
**Risks flagged:**
|
|
86
|
+
- E02-S02 — auth refresh story; high-risk; TEA design done at planning.
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Anti-patterns Hill rejects
|
|
90
|
+
|
|
91
|
+
- **"Optimistic" velocity that ignores history.** Use observed velocity.
|
|
92
|
+
- **Stories pulled without owners.** Don't aspire; commit.
|
|
93
|
+
- **Stretch goals so big they're really plan.** Stretch = optional, not "we hope we can."
|
|
94
|
+
- **Pulling a story when its dependency hasn't shipped.** It will sit blocked.
|
|
95
|
+
- **No buffer.** Real sprints have surprises.
|
|
96
|
+
|
|
97
|
+
## Hand-off
|
|
98
|
+
|
|
99
|
+
> Sprint 7 committed at `.wize/implementation/sprint-status.md`. Shuri owns most; Aaliyah picks up E03-S02. Hawkeye, NFR gate due on E03 at sprint end. Wizer, retro on the 25th.
|
|
@@ -3,23 +3,108 @@ code: wize-sprint-status
|
|
|
3
3
|
name: Sprint Status
|
|
4
4
|
phase: 4-implementation
|
|
5
5
|
owner: wize-agent-pm # Maria Hill
|
|
6
|
-
status:
|
|
6
|
+
status: ready
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Sprint Status
|
|
10
10
|
|
|
11
|
-
**Goal.**
|
|
11
|
+
**Goal.** Keep a snapshot of in-flight work that the team and stakeholders can read in 60 seconds. Sprint status is read by everyone, written by Hill (or delegated to Wizer); the source of truth is the file, not Slack.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
Update **daily** during a sprint, or after any state change (story moves, blocker appears, gate fails).
|
|
14
|
+
|
|
15
|
+
## Inputs
|
|
16
|
+
|
|
17
|
+
- `.wize/solutioning/stories/` (current statuses)
|
|
18
|
+
- `.wize/implementation/tea/{epic}/{story}/gate.md` (gate outcomes)
|
|
19
|
+
- The team (verbal stand-up or async update)
|
|
20
|
+
|
|
21
|
+
## Output
|
|
22
|
+
|
|
23
|
+
- Updated entry in `.wize/implementation/sprint-status.md`.
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
|
|
27
|
+
### 1. Per story, name a status
|
|
28
|
+
|
|
29
|
+
| Status | Meaning |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `pulled` | Committed for this sprint, not started yet |
|
|
32
|
+
| `in-progress` | Engineer actively working it (or paused < 1 day) |
|
|
33
|
+
| `paused` | Started, paused > 1 day, reason listed |
|
|
34
|
+
| `blocked` | Cannot proceed; depends on a named external resolution |
|
|
35
|
+
| `in-review` | PR open; Hawkeye running design → trace → review |
|
|
36
|
+
| `gate-PASS` / `gate-CONCERNS` / `gate-FAIL` | TEA gate outcome |
|
|
37
|
+
| `shipped` | Merged to main + deployed (when applicable) |
|
|
38
|
+
|
|
39
|
+
### 2. Blockers up front
|
|
40
|
+
|
|
41
|
+
Blockers always appear in the top section. Each gets:
|
|
42
|
+
- Owner (the person who can unblock it).
|
|
43
|
+
- Specific ask (the action they should take).
|
|
44
|
+
- Deadline.
|
|
45
|
+
|
|
46
|
+
If a blocker sits longer than 2 days, Hill escalates. Stalled blockers are how sprints fail silently.
|
|
47
|
+
|
|
48
|
+
### 3. Trend
|
|
49
|
+
|
|
50
|
+
Daily, write a one-line trend: *"On track."* / *"At risk for E03-S02 due to vendor outage."* / *"Slipping; will defer E04-S01 to next sprint."*
|
|
51
|
+
|
|
52
|
+
### 4. Capture decisions
|
|
53
|
+
|
|
54
|
+
If something material was decided during the sprint that affects the plan (story sliced, scope dropped, ADR opened), append a one-line entry.
|
|
55
|
+
|
|
56
|
+
## File template
|
|
15
57
|
|
|
16
|
-
## Format
|
|
17
58
|
```markdown
|
|
18
|
-
|
|
19
|
-
- Story E01-S03 — in progress (Shuri). Blocked: no.
|
|
20
|
-
- Story E01-S04 — TEA design — Hawkeye.
|
|
21
|
-
- Story E02-S01 — done (gate PASS).
|
|
59
|
+
# Sprint status
|
|
22
60
|
|
|
23
|
-
|
|
24
|
-
|
|
61
|
+
## Sprint 7 — 2026-06-12 → 2026-06-25
|
|
62
|
+
|
|
63
|
+
### Day 4 (2026-06-15)
|
|
64
|
+
**Trend:** On track.
|
|
65
|
+
|
|
66
|
+
**Blockers:**
|
|
67
|
+
- (none)
|
|
68
|
+
|
|
69
|
+
**Stories:**
|
|
70
|
+
- E01-S05 — gate-PASS — shipped (carry-over from S6).
|
|
71
|
+
- E01-S06 — in-progress — Shuri.
|
|
72
|
+
- E02-S02 — in-review — PR #418; Hawkeye doing trace.
|
|
73
|
+
- E03-S02 — in-progress — Aaliyah.
|
|
74
|
+
- E04-S01 — pulled — Shuri starts after E01-S06.
|
|
75
|
+
- E02-S03 (stretch) — pulled — Aaliyah picks up if capacity allows.
|
|
76
|
+
|
|
77
|
+
**Decisions:**
|
|
78
|
+
- E03-S03 sliced into two stories (E03-S03a, E03-S03b) — ADR-009 incoming.
|
|
79
|
+
|
|
80
|
+
### Day 5 (2026-06-16)
|
|
81
|
+
**Trend:** At risk on E02-S02 (vendor sandbox down; Hawkeye unblocked at 14:00).
|
|
82
|
+
**Blockers:** Resolved.
|
|
83
|
+
**Stories:** (changes from Day 4)
|
|
84
|
+
- E02-S02 — gate-PASS at 16:30; merged.
|
|
85
|
+
- E01-S06 — in-review — PR #419.
|
|
86
|
+
|
|
87
|
+
## Sprint 6 — 2026-05-29 → 2026-06-11
|
|
88
|
+
{{archived}}
|
|
25
89
|
```
|
|
90
|
+
|
|
91
|
+
## Daily cadence (lean)
|
|
92
|
+
|
|
93
|
+
A daily standup, when present, is 5 minutes max:
|
|
94
|
+
|
|
95
|
+
- "What did I ship since last time?"
|
|
96
|
+
- "What am I shipping next?"
|
|
97
|
+
- "Anything blocking me?"
|
|
98
|
+
|
|
99
|
+
Hill updates `sprint-status.md` immediately after; Wizer reads it before any other agent's session that day.
|
|
100
|
+
|
|
101
|
+
## Anti-patterns Hill rejects
|
|
102
|
+
|
|
103
|
+
- "Status: in progress" for 4 days with no further detail. Either it really is, in which case slice progress, or it's stuck.
|
|
104
|
+
- Blockers without an owner or a deadline.
|
|
105
|
+
- Sprint goals that drift silently (added stories without removing others).
|
|
106
|
+
- Stale entries in the file. Update daily or delegate the update.
|
|
107
|
+
|
|
108
|
+
## Hand-off
|
|
109
|
+
|
|
110
|
+
> `sprint-status.md` updated. Day 5 trend: at-risk-mitigated. Wizer, if asked about state, the file is the answer. Pepper, brief stays valid; no scope move triggered.
|
|
@@ -4,35 +4,126 @@ name: TEA Test Design
|
|
|
4
4
|
gate: design
|
|
5
5
|
owner: wize-agent-test-architect # Hawkeye
|
|
6
6
|
when: per-story-start
|
|
7
|
-
status:
|
|
7
|
+
status: ready
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# TEA — Test Design
|
|
11
11
|
|
|
12
|
-
**Goal.** For one story
|
|
12
|
+
**Goal.** For **one story**: declare the test split, the fixtures, the mocks, the environments, and the assertion targets. This is Hawkeye's contract Shuri implements against. No story enters dev without one.
|
|
13
|
+
|
|
14
|
+
Hawkeye drives. Runs at the start of every story (advisory; can be relaxed only when `tea.toml` says so).
|
|
13
15
|
|
|
14
16
|
## Inputs
|
|
17
|
+
|
|
15
18
|
- `.wize/solutioning/stories/{epic}/{story}.md`
|
|
16
19
|
- `.wize/solutioning/architecture.md`
|
|
20
|
+
- `.wize/implementation/tea/risk-profile.md`
|
|
21
|
+
- Overlay test playbooks if active:
|
|
22
|
+
- `web-overlay/playbooks/playwright-vitest.md`
|
|
23
|
+
- `app-overlay/playbooks/detox-maestro.md`
|
|
17
24
|
|
|
18
25
|
## Output
|
|
26
|
+
|
|
19
27
|
- `.wize/implementation/tea/{epic}/{story}/design.md`
|
|
20
28
|
|
|
21
|
-
##
|
|
29
|
+
## Steps
|
|
30
|
+
|
|
31
|
+
### 1. Read the story; map every AC
|
|
32
|
+
|
|
33
|
+
For each AC, write **one assertion-shape sentence**: *"There will be a {kind} test that does {what} and expects {observable}."*
|
|
34
|
+
|
|
35
|
+
### 2. Pick the test split
|
|
36
|
+
|
|
37
|
+
Defaults (from `playwright-vitest.md` / `detox-maestro.md`):
|
|
38
|
+
- **Low-risk story:** 70% unit / 20% integration / 10% E2E.
|
|
39
|
+
- **Risk-profile flagged story (R-1..R-3):** add 1–2 dedicated E2E + integration for the risk area.
|
|
40
|
+
- **UI-only story:** 60% unit / 30% component (Testing Library) / 10% E2E.
|
|
41
|
+
- **Server-only story:** 80% unit / 20% integration; no E2E unless an upstream consumer story bundles it.
|
|
42
|
+
|
|
43
|
+
### 3. Declare fixtures + mocks
|
|
44
|
+
|
|
45
|
+
- Fixtures: known users, known DB rows, known files.
|
|
46
|
+
- Mocks: external services at the network boundary (MSW). Don't mock the unit under test.
|
|
47
|
+
|
|
48
|
+
### 4. Environment
|
|
49
|
+
|
|
50
|
+
- Where it runs (local sim, headless emulator, real device farm).
|
|
51
|
+
- Network conditions (offline / 3G slow / lossy WiFi).
|
|
52
|
+
- OS / browser matrix (from `device-matrix.md` or playwright projects).
|
|
53
|
+
|
|
54
|
+
### 5. Edge cases (cheap; pay back × 10)
|
|
55
|
+
|
|
56
|
+
List 3–7 edge cases the ACs don't name but the user might hit:
|
|
57
|
+
- Empty / max-length inputs.
|
|
58
|
+
- IME / paste / autofill.
|
|
59
|
+
- Offline mid-action.
|
|
60
|
+
- Concurrent users on the same resource.
|
|
61
|
+
- Time-zone / DST.
|
|
62
|
+
- Localized number/currency.
|
|
63
|
+
|
|
64
|
+
Each gets a test of its own (usually unit).
|
|
65
|
+
|
|
66
|
+
### 6. Hand off
|
|
67
|
+
|
|
68
|
+
Mark `status: ready-for-dev` in the design.md frontmatter. Shuri reads before starting.
|
|
69
|
+
|
|
70
|
+
## YAML frontmatter (canonical)
|
|
71
|
+
|
|
22
72
|
```yaml
|
|
23
73
|
---
|
|
24
74
|
gate: design
|
|
25
|
-
story_id:
|
|
26
|
-
ac_ids: [AC-1, AC-2
|
|
75
|
+
story_id: E01-S03
|
|
76
|
+
ac_ids: [AC-02-1, AC-02-2]
|
|
77
|
+
status: PASS
|
|
78
|
+
created_at: 2026-06-11T12:00:00Z
|
|
27
79
|
test_split:
|
|
28
|
-
unit: count
|
|
29
|
-
integration: count
|
|
30
|
-
e2e: count
|
|
31
|
-
fixtures:
|
|
32
|
-
|
|
33
|
-
|
|
80
|
+
unit: { count: 4, description: "validation, server-action contract, error mapper, mailer payload" }
|
|
81
|
+
integration: { count: 1, description: "server action calls mailer with right args, against MSW" }
|
|
82
|
+
e2e: { count: 1, description: "happy path; Playwright @chromium @ios" }
|
|
83
|
+
fixtures:
|
|
84
|
+
- "new-admin user"
|
|
85
|
+
- "empty team"
|
|
86
|
+
mocks:
|
|
87
|
+
- "Resend via MSW"
|
|
88
|
+
- "Auth session via fixture cookie"
|
|
89
|
+
environment: "local + Playwright project chromium + ios"
|
|
90
|
+
risk_links: [R-1]
|
|
91
|
+
edges:
|
|
92
|
+
- "invalid email rules: blank, missing @, weird IME chars"
|
|
93
|
+
- "duplicate teammate email"
|
|
94
|
+
- "offline at submit time"
|
|
34
95
|
---
|
|
35
96
|
```
|
|
36
97
|
|
|
37
|
-
## Body
|
|
38
|
-
|
|
98
|
+
## Body of `design.md`
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
## Per-AC assertion shapes
|
|
102
|
+
|
|
103
|
+
- **AC-02-1**: Vitest unit on `validateInviteEmail()` → returns `{ ok: true }` for `name+tag@example.com`. Vitest integration on `inviteTeammate()` server action → asserts `mailer.send` called once with `{ to: 'name@example.com', template: 'team-invite' }`. Playwright E2E → clicks "Send invite", asserts `[data-testid="invite-sent-banner"]` appears within 1s.
|
|
104
|
+
|
|
105
|
+
- **AC-02-2**: Vitest unit on `validateInviteEmail()` → returns `{ ok: false, code: 'invalid_format', field: 'email' }` for empty/no-@. Component test (Testing Library) on `<InviteForm>` → asserts the input's `aria-describedby` error region announces "Enter a valid email."
|
|
106
|
+
|
|
107
|
+
## Edge cases (additional tests)
|
|
108
|
+
|
|
109
|
+
- E1: Empty email — `validateInviteEmail('')` → `invalid_format`.
|
|
110
|
+
- E2: 254-char local part — boundary check; expect graceful clipping.
|
|
111
|
+
- E3: Same email submitted twice — second call hits `inviteTeammate()`, asserts second insert is a no-op (idempotency key based on `(team_id, email)`).
|
|
112
|
+
- E4: Offline at submit — Playwright `context.setOffline(true)` after click; banner shows "We'll retry when you're back online."
|
|
113
|
+
|
|
114
|
+
## Run plan
|
|
115
|
+
- On every PR: full unit + integration; E2E `@smoke` tag only (≤ 30s).
|
|
116
|
+
- Nightly: full E2E suite + Lighthouse baseline.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Anti-patterns Hawkeye rejects
|
|
120
|
+
|
|
121
|
+
- **`design.md` written after dev started.** Then the story slipped through; flag.
|
|
122
|
+
- **One test per AC, no edges.** Edges are where users live.
|
|
123
|
+
- **Mocking the unit under test.** You'd be testing the mock.
|
|
124
|
+
- **E2E that test the happy path only.** Cover failure too.
|
|
125
|
+
- **Selectors by visible text in a multilingual app.** Use `data-testid` or `role` with locale-aware patterns.
|
|
126
|
+
|
|
127
|
+
## Hand-off
|
|
128
|
+
|
|
129
|
+
> Test design for E01-S03 at `.wize/implementation/tea/E01-S03/design.md`. 4 unit, 1 integration, 1 E2E, plus 4 edges. Shuri can start; I'll check `tea-trace.md` against this when the PR opens.
|