bigpowers 2.59.8 → 2.60.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/.pi/package.json +2 -2
- package/.pi/prompts/develop-tdd.md +1 -0
- package/.pi/prompts/gate-trace.md +1 -0
- package/.pi/prompts/orchestrate-project.md +1 -1
- package/.pi/prompts/plan-tests.md +74 -0
- package/.pi/prompts/plan-work.md +14 -1
- package/.pi/prompts/verify-work.md +14 -5
- package/.pi/skills/develop-tdd/SKILL.md +1 -0
- package/.pi/skills/gate-trace/SKILL.md +1 -0
- package/.pi/skills/orchestrate-project/SKILL.md +1 -1
- package/.pi/skills/plan-tests/SKILL.md +76 -0
- package/.pi/skills/plan-work/SKILL.md +14 -1
- package/.pi/skills/verify-work/SKILL.md +14 -5
- package/CHANGELOG.md +14 -0
- package/CONVENTIONS.md +13 -3
- package/README.md +1 -1
- package/SKILL-INDEX.md +1 -1
- package/package.json +2 -2
- package/scripts/check-blind-spots.sh +5 -4
- package/scripts/lib/blind-spots.py +37 -1
- package/skills/develop-tdd/SKILL.md +1 -0
- package/skills/gate-trace/SKILL.md +1 -0
- package/skills/orchestrate-project/SKILL.md +1 -1
- package/skills/plan-tests/REFERENCE.md +31 -0
- package/skills/plan-tests/SKILL.md +42 -0
- package/skills/plan-work/REFERENCE.md +13 -0
- package/skills/plan-work/SKILL.md +1 -1
- package/skills/verify-work/SKILL.md +14 -5
- package/skills-lock.json +10 -5
- package/playwright.config.ts +0 -56
package/.pi/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bigpowers",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.60.0",
|
|
4
|
+
"description": "74 skills — 73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package"
|
|
7
7
|
],
|
|
@@ -35,6 +35,7 @@ If you catch yourself thinking these, stop and reconsider — you are likely dev
|
|
|
35
35
|
### 1. Planning
|
|
36
36
|
|
|
37
37
|
- [ ] Read active `specs/epics/*/epic.yaml` story tasks or `specs/bugs/BUG-*.md` — understand verify steps
|
|
38
|
+
- [ ] If `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the active epic, read it before writing the first test. Implement P0 scenarios (`SC-*-P0-*`) before P1. P2/P3 scenarios are optional per time budget.
|
|
38
39
|
- [ ] Confirm interface changes and behaviors to test (prioritize)
|
|
39
40
|
- [ ] Design interfaces for testability — identify [deep modules](deep-modules.md) opportunities
|
|
40
41
|
- [ ] Get user approval on the plan
|
|
@@ -15,6 +15,7 @@ Deterministic quality gate that combines traceability coverage and blind-spot da
|
|
|
15
15
|
| R2 | Any story done but no verify evidence | CONCERNS |
|
|
16
16
|
| R3 | P0 story (top WSJF quartile) with 0% coverage | FAIL |
|
|
17
17
|
| R4 | Overall coverage < 60% | CONCERNS |
|
|
18
|
+
| R6 | P0 story + eNN-TEST_PLAN_LATEST.md exists + zero SC-eNNsYY-P0-* in test files | CONCERNS |
|
|
18
19
|
| R5 | Overall ≥ 80% + no critical gaps + all verify → PASS | PASS |
|
|
19
20
|
|
|
20
21
|
## Oracle Confidence Downgrade
|
|
@@ -45,7 +45,7 @@ See [REFERENCE.md](REFERENCE.md) for detailed phase specifications and gate type
|
|
|
45
45
|
|
|
46
46
|
1. **Maintains state.yaml** — Tracks current phase, `active_epic`, `active_flow`, decisions, risks.
|
|
47
47
|
2. **Spawns appropriate skills** — Routes by `model:` frontmatter. Decisions pass only via `specs/state.yaml` `handoff` between spawns.
|
|
48
|
-
3. **Methodology lenses** — If `specs/tech-architecture/TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
|
|
48
|
+
3. **Methodology lenses** — If `specs/tech-architecture/e*-TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
|
|
49
49
|
4. **Enforces gates** — Hard stops if success criteria not met.
|
|
50
50
|
5. **The Gatekeeper** — Between stories in BUILD: read `specs/execution-status.yaml`; previous story must be `done` before starting the next; use `build-epic` for the 8-step epic cycle.
|
|
51
51
|
6. **Pauses for confirmation** — After each phase, asks "Ready to proceed?".
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Design a risk-scaled test architecture for an epic before implementation begins. Produces prioritized scenarios, test level distribution, and fixture plans based on TEA and bigpowers principles."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Plan Tests
|
|
7
|
+
|
|
8
|
+
> **Spine position:** Between `slice-tasks` and `plan-work` for epics with `risk: P0|P1`. Optional (can be waived in `state.yaml`) for P2/P3.
|
|
9
|
+
|
|
10
|
+
Bridges the gap between slicing and planning by systematically designing the test suite as a first-class system. Produces `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`.
|
|
11
|
+
|
|
12
|
+
## Pre-flight
|
|
13
|
+
- Read `specs/epics/eNN-*/` story list.
|
|
14
|
+
|
|
15
|
+
## Core Workflow
|
|
16
|
+
1. **Analyze Epic**: Read sliced stories in the active epic capsule.
|
|
17
|
+
2. **Risk Assessment**: Map behaviors to P0–P3 risk tiers.
|
|
18
|
+
3. **Level Strategy**: Classify each scenario (Unit, Integration, E2E).
|
|
19
|
+
4. **Fixture Design**: Plan factories, network intercepts, mocks (see REFERENCE.md).
|
|
20
|
+
5. **NFR Plan**: Define verifiable commands for Non-Functional Requirements. Skip if `--lite`.
|
|
21
|
+
6. **Publish**: Generate `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`.
|
|
22
|
+
|
|
23
|
+
## Hard Gates & Guardrails
|
|
24
|
+
- **DO NOT** write test code or production code during this skill.
|
|
25
|
+
- Scenario ID format MUST be: `SC-eNNsYY-P{0|1|2|3}-NN`.
|
|
26
|
+
- `plan-work` MUST reference these scenario IDs in its §17 Gherkin acceptance criteria.
|
|
27
|
+
- Default to pushing tests to the lowest possible level.
|
|
28
|
+
|
|
29
|
+
## Execution Modes
|
|
30
|
+
- `$bmad plan-tests`: Standard execution.
|
|
31
|
+
- `$bmad plan-tests --lite`: Skips NFRs and complex fixture planning.
|
|
32
|
+
|
|
33
|
+
## Verify
|
|
34
|
+
|
|
35
|
+
→ verify: `test -f specs/tech-architecture/$(echo $EPIC | sed "s|.*/||")-TEST_PLAN_LATEST.md && echo OK`
|
|
36
|
+
|
|
37
|
+
## Handoff
|
|
38
|
+
|
|
39
|
+
Gate: READY -> next: plan-work
|
|
40
|
+
Writes: state.yaml handoff.next_skill = plan-work
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
# Plan Tests — Reference
|
|
45
|
+
|
|
46
|
+
## Test Plan Template (`specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`)
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
# Test Design: [eNN-slug]
|
|
50
|
+
|
|
51
|
+
## 1. Risk Matrix & Scenarios
|
|
52
|
+
| Scenario ID | Behavior Description | Risk | Test Level | Target File/Module |
|
|
53
|
+
|-------------|----------------------|------|------------|--------------------|
|
|
54
|
+
| SC-P0-01 | Primary checkout | P0 | Integration | checkout.spec.ts |
|
|
55
|
+
|
|
56
|
+
## 2. Fixture Architecture & Isolation
|
|
57
|
+
- Data Factories: (e.g. UserFactory)
|
|
58
|
+
- Network Intercepts: (e.g. MSW handlers)
|
|
59
|
+
- Database State: (e.g. in-memory SQLite)
|
|
60
|
+
|
|
61
|
+
## 3. NFR Verification
|
|
62
|
+
| NFR Type | Requirement | Verification Command |
|
|
63
|
+
|----------|-------------|----------------------|
|
|
64
|
+
| Perf | < 200ms | `npm run test:perf` |
|
|
65
|
+
|
|
66
|
+
## 4. Out of Scope
|
|
67
|
+
- [Explicitly excluded testing areas]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Fixture Planning Guidance
|
|
71
|
+
|
|
72
|
+
- **Data Factories**: Prefer factory functions over manual object construction.
|
|
73
|
+
- **Network Intercepts**: For frontend integration tests, use tools like Mock Service Worker (MSW) to intercept and mock HTTP requests.
|
|
74
|
+
- **Database State**: For backend tests, use a clean database state per test or an in-memory database to ensure isolation.
|
package/.pi/prompts/plan-work.md
CHANGED
|
@@ -42,7 +42,7 @@ If this plan touches an existing module, run `assess-impact` first to understand
|
|
|
42
42
|
|
|
43
43
|
2. **Draft steps** — Break implementation into the smallest possible steps where each step leaves the codebase working, has one observable outcome, and can be verified with a single command. Red-flag check: name any rationalization you caught before moving to step 3.
|
|
44
44
|
|
|
45
|
-
3. **Write capsule story spec + tasks** — Output two files inside the active epic capsule. See [REFERENCE.md](REFERENCE.md) for file formats and the plan-template. Each task optionally includes a `security:` field (`none` / `low` / `medium` / `high`) sourced from the epic's `specs/security/epics/<id>/THREAT_MODEL.md`. Tasks with `security: medium` or `security: high` MUST include "no new security findings in affected paths" in their verify steps.
|
|
45
|
+
3. **Write capsule story spec + tasks** — Output two files inside the active epic capsule. See [REFERENCE.md](REFERENCE.md) for file formats and the plan-template. Each task MUST include a `risk:` field (`P0` | `P1` | `P2` | `P3`) based on BCP + story type heuristics (see REFERENCE.md). If a test plan artifact (`specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`) exists, read it and inherit its P0/P1 risk classifications and scenario IDs (`SC-eNNsYY-P0-NN`). Each task optionally includes a `security:` field (`none` / `low` / `medium` / `high`) sourced from the epic's `specs/security/epics/<id>/THREAT_MODEL.md`. Tasks with `security: medium` or `security: high` MUST include "no new security findings in affected paths" in their verify steps.
|
|
46
46
|
|
|
47
47
|
4. **Verify step format** — Every step MUST follow: `N. <What to do> → verify: <runnable command>`. See [REFERENCE.md](REFERENCE.md) for good/bad examples.
|
|
48
48
|
|
|
@@ -80,6 +80,7 @@ tasks:
|
|
|
80
80
|
- id: 1
|
|
81
81
|
description: "Add login form component tests"
|
|
82
82
|
verify: "npm test -- login-form.test.tsx"
|
|
83
|
+
risk: P1
|
|
83
84
|
status: todo
|
|
84
85
|
```
|
|
85
86
|
|
|
@@ -91,6 +92,7 @@ Update `specs/epics/<capsule>/epic.yaml` manifest to list the story and its BCPs
|
|
|
91
92
|
### Story [X.Y]: [title] — Implementation Steps
|
|
92
93
|
|
|
93
94
|
**type:** feat | fix | refactor
|
|
95
|
+
**risk:** P0 | P1 | P2 | P3
|
|
94
96
|
**context:** domain | infra
|
|
95
97
|
**Context**: [One paragraph: what this story implements and why]
|
|
96
98
|
|
|
@@ -139,6 +141,17 @@ N. <What to do> → verify: <runnable command that proves it worked>
|
|
|
139
141
|
|
|
140
142
|
## Sub-operations
|
|
141
143
|
|
|
144
|
+
### Risk Assignment Heuristics
|
|
145
|
+
|
|
146
|
+
Every task and story MUST be assigned a `risk:` level (P0, P1, P2, P3). When `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the epic, defer to its scenario risk mapping (`SC-eNNsYY-P0-NN`). Otherwise, apply these heuristics based on BCP and story type:
|
|
147
|
+
|
|
148
|
+
- **P0**: Critical path, data loss risk, auth/security boundary, external integration, or high BCP (≥ 5).
|
|
149
|
+
- **P1**: Core feature logic, state mutations, standard business value (BCP 3-4).
|
|
150
|
+
- **P2**: Utility functions, UI layout changes, display-only data, low risk (BCP 2).
|
|
151
|
+
- **P3**: Documentation, cosmetic tweaks, CSS variables, zero behavioral change (BCP 1).
|
|
152
|
+
|
|
153
|
+
`verify-work` scales its UAT depth based on this field.
|
|
154
|
+
|
|
142
155
|
### Define Success
|
|
143
156
|
|
|
144
157
|
Before planning, convert task statements into observable "step → verify: <cmd>" pairs:
|
|
@@ -17,25 +17,34 @@ Review answers "is the code good?"; Verify answers "does the built thing do what
|
|
|
17
17
|
- --smoke: Cold-start only plus one happy-path flow. Use for hotfixes.
|
|
18
18
|
- --cli: CLI tool verification — replaces cold-start with binary smoke checklist. Use for CLI tools with no server process.
|
|
19
19
|
|
|
20
|
+
## Risk-Scaled Depth
|
|
21
|
+
|
|
22
|
+
`verify-work` reads the `risk:` field from the story template (defaults to `P1` if absent) to scale verification rigor:
|
|
23
|
+
- **P0**: Full verify-work multi-phase + `security-review` (step 5) + NFR evidence gate (step 5b).
|
|
24
|
+
- **P1**: Standard verify-work (build, test, lint, step-by-step manual).
|
|
25
|
+
- **P2**: Smoke, typecheck, lint only. Skip tests, security scan, and step-by-step manual UAT.
|
|
26
|
+
- **P3**: Typecheck and lint only. Skip smoke, tests, security scan, and step-by-step manual UAT.
|
|
27
|
+
|
|
20
28
|
## Process
|
|
21
29
|
|
|
22
30
|
> **Timing:** `bash scripts/bp-timing.sh start verify-work` at invocation; `bash scripts/bp-timing.sh end verify-work` before handoff.
|
|
23
31
|
|
|
24
32
|
0. **Branch check** — must not be `main`/`master`.
|
|
25
33
|
|
|
26
|
-
1. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17).
|
|
34
|
+
1. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17). Note the `risk:` level (`P0`–`P3`).
|
|
27
35
|
1a. **Pre-UAT verify validation** — for each task's `verify:` command, run it and detect pattern mismatches before UAT begins. If a grep/awk/jq command fails, check whether the pattern is wrong vs. a genuine failure:
|
|
28
36
|
```bash
|
|
29
37
|
# For a failing grep -q 'PATTERN' FILE, check what is actually in FILE
|
|
30
38
|
grep 'PATTERN' FILE || grep -n '' FILE | head -20 # show nearest lines
|
|
31
39
|
```
|
|
32
40
|
Report: `"Pattern 'X' not found. Nearest match: 'Y' at line N"` and ask `"Update verify command? [Y/n]"`. Fix before proceeding — a mismatched verify command produces false failures during UAT.
|
|
33
|
-
2. **Cold-start smoke** (if app): stop server, clear caches, boot from scratch.
|
|
41
|
+
2. **Cold-start smoke** (if app; skip if P3): stop server, clear caches, boot from scratch.
|
|
34
42
|
3. **AGENTS.md preflight** — before running default checks, call `bash scripts/bp-read-agents.sh` to detect project-specific commands. If `BP_PREFLIGHT` is set, run it instead of the default mechanical gates (or in addition to them if the project requires both). Output: `"Using preflight from AGENTS.md: <cmd>"`. Fall back to `CLAUDE.md` commands if AGENTS.md is absent.
|
|
35
|
-
4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md).
|
|
36
|
-
5. **Security scan** — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
|
|
43
|
+
4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md). Skip tests if P2/P3.
|
|
44
|
+
5. **Security scan** (skip if P2/P3) — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
|
|
37
45
|
5a. **Blind-spot check** — run `bash scripts/check-blind-spots.sh`. This detects structural quality gaps (verify-gap, test-gap, stale-tag, etc.) beyond percentage coverage. If any HIGH-severity findings exist → **block the verify-work PASS gate**. Findings are written to `specs/blind-spots.json`. MEDIUM/LOW findings warn but don't block.
|
|
38
|
-
|
|
46
|
+
5b. **NFR Evidence Gate** (P0 only) — Produces go/no-go output on three dimensions: Performance (response time, throughput), Reliability (error rate, recovery), and Operability (logging, health checks). Reads thresholds from `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` and writes evidence as OKF verification-report bundles to `specs/verifications/NFR-eNNsYY.json`. FAIL on any dimension blocks the gate.
|
|
47
|
+
6. **Step-by-step UAT** (skip if P2/P3) — one user-observable action at a time.
|
|
39
48
|
7. **Gaps loop** — failures → log → `plan-work` → re-verify. Unaddressed HIGH findings from step 5 feed into this loop alongside other quality gaps.
|
|
40
49
|
|
|
41
50
|
## Verify sub-operations
|
|
@@ -37,6 +37,7 @@ If you catch yourself thinking these, stop and reconsider — you are likely dev
|
|
|
37
37
|
### 1. Planning
|
|
38
38
|
|
|
39
39
|
- [ ] Read active `specs/epics/*/epic.yaml` story tasks or `specs/bugs/BUG-*.md` — understand verify steps
|
|
40
|
+
- [ ] If `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the active epic, read it before writing the first test. Implement P0 scenarios (`SC-*-P0-*`) before P1. P2/P3 scenarios are optional per time budget.
|
|
40
41
|
- [ ] Confirm interface changes and behaviors to test (prioritize)
|
|
41
42
|
- [ ] Design interfaces for testability — identify [deep modules](deep-modules.md) opportunities
|
|
42
43
|
- [ ] Get user approval on the plan
|
|
@@ -17,6 +17,7 @@ Deterministic quality gate that combines traceability coverage and blind-spot da
|
|
|
17
17
|
| R2 | Any story done but no verify evidence | CONCERNS |
|
|
18
18
|
| R3 | P0 story (top WSJF quartile) with 0% coverage | FAIL |
|
|
19
19
|
| R4 | Overall coverage < 60% | CONCERNS |
|
|
20
|
+
| R6 | P0 story + eNN-TEST_PLAN_LATEST.md exists + zero SC-eNNsYY-P0-* in test files | CONCERNS |
|
|
20
21
|
| R5 | Overall ≥ 80% + no critical gaps + all verify → PASS | PASS |
|
|
21
22
|
|
|
22
23
|
## Oracle Confidence Downgrade
|
|
@@ -47,7 +47,7 @@ See [REFERENCE.md](REFERENCE.md) for detailed phase specifications and gate type
|
|
|
47
47
|
|
|
48
48
|
1. **Maintains state.yaml** — Tracks current phase, `active_epic`, `active_flow`, decisions, risks.
|
|
49
49
|
2. **Spawns appropriate skills** — Routes by `model:` frontmatter. Decisions pass only via `specs/state.yaml` `handoff` between spawns.
|
|
50
|
-
3. **Methodology lenses** — If `specs/tech-architecture/TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
|
|
50
|
+
3. **Methodology lenses** — If `specs/tech-architecture/e*-TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
|
|
51
51
|
4. **Enforces gates** — Hard stops if success criteria not met.
|
|
52
52
|
5. **The Gatekeeper** — Between stories in BUILD: read `specs/execution-status.yaml`; previous story must be `done` before starting the next; use `build-epic` for the 8-step epic cycle.
|
|
53
53
|
6. **Pauses for confirmation** — After each phase, asks "Ready to proceed?".
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-tests
|
|
3
|
+
description: "\"Design a risk-scaled test architecture for an epic before implementation begins. Produces prioritized scenarios, test level distribution, and fixture plans based on TEA and bigpowers principles.\""
|
|
4
|
+
model: opus
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Plan Tests
|
|
9
|
+
|
|
10
|
+
> **Spine position:** Between `slice-tasks` and `plan-work` for epics with `risk: P0|P1`. Optional (can be waived in `state.yaml`) for P2/P3.
|
|
11
|
+
|
|
12
|
+
Bridges the gap between slicing and planning by systematically designing the test suite as a first-class system. Produces `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`.
|
|
13
|
+
|
|
14
|
+
## Pre-flight
|
|
15
|
+
- Read `specs/epics/eNN-*/` story list.
|
|
16
|
+
|
|
17
|
+
## Core Workflow
|
|
18
|
+
1. **Analyze Epic**: Read sliced stories in the active epic capsule.
|
|
19
|
+
2. **Risk Assessment**: Map behaviors to P0–P3 risk tiers.
|
|
20
|
+
3. **Level Strategy**: Classify each scenario (Unit, Integration, E2E).
|
|
21
|
+
4. **Fixture Design**: Plan factories, network intercepts, mocks (see REFERENCE.md).
|
|
22
|
+
5. **NFR Plan**: Define verifiable commands for Non-Functional Requirements. Skip if `--lite`.
|
|
23
|
+
6. **Publish**: Generate `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`.
|
|
24
|
+
|
|
25
|
+
## Hard Gates & Guardrails
|
|
26
|
+
- **DO NOT** write test code or production code during this skill.
|
|
27
|
+
- Scenario ID format MUST be: `SC-eNNsYY-P{0|1|2|3}-NN`.
|
|
28
|
+
- `plan-work` MUST reference these scenario IDs in its §17 Gherkin acceptance criteria.
|
|
29
|
+
- Default to pushing tests to the lowest possible level.
|
|
30
|
+
|
|
31
|
+
## Execution Modes
|
|
32
|
+
- `$bmad plan-tests`: Standard execution.
|
|
33
|
+
- `$bmad plan-tests --lite`: Skips NFRs and complex fixture planning.
|
|
34
|
+
|
|
35
|
+
## Verify
|
|
36
|
+
|
|
37
|
+
→ verify: `test -f specs/tech-architecture/$(echo $EPIC | sed "s|.*/||")-TEST_PLAN_LATEST.md && echo OK`
|
|
38
|
+
|
|
39
|
+
## Handoff
|
|
40
|
+
|
|
41
|
+
Gate: READY -> next: plan-work
|
|
42
|
+
Writes: state.yaml handoff.next_skill = plan-work
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# Plan Tests — Reference
|
|
47
|
+
|
|
48
|
+
## Test Plan Template (`specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`)
|
|
49
|
+
|
|
50
|
+
```markdown
|
|
51
|
+
# Test Design: [eNN-slug]
|
|
52
|
+
|
|
53
|
+
## 1. Risk Matrix & Scenarios
|
|
54
|
+
| Scenario ID | Behavior Description | Risk | Test Level | Target File/Module |
|
|
55
|
+
|-------------|----------------------|------|------------|--------------------|
|
|
56
|
+
| SC-P0-01 | Primary checkout | P0 | Integration | checkout.spec.ts |
|
|
57
|
+
|
|
58
|
+
## 2. Fixture Architecture & Isolation
|
|
59
|
+
- Data Factories: (e.g. UserFactory)
|
|
60
|
+
- Network Intercepts: (e.g. MSW handlers)
|
|
61
|
+
- Database State: (e.g. in-memory SQLite)
|
|
62
|
+
|
|
63
|
+
## 3. NFR Verification
|
|
64
|
+
| NFR Type | Requirement | Verification Command |
|
|
65
|
+
|----------|-------------|----------------------|
|
|
66
|
+
| Perf | < 200ms | `npm run test:perf` |
|
|
67
|
+
|
|
68
|
+
## 4. Out of Scope
|
|
69
|
+
- [Explicitly excluded testing areas]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Fixture Planning Guidance
|
|
73
|
+
|
|
74
|
+
- **Data Factories**: Prefer factory functions over manual object construction.
|
|
75
|
+
- **Network Intercepts**: For frontend integration tests, use tools like Mock Service Worker (MSW) to intercept and mock HTTP requests.
|
|
76
|
+
- **Database State**: For backend tests, use a clean database state per test or an in-memory database to ensure isolation.
|
|
@@ -44,7 +44,7 @@ If this plan touches an existing module, run `assess-impact` first to understand
|
|
|
44
44
|
|
|
45
45
|
2. **Draft steps** — Break implementation into the smallest possible steps where each step leaves the codebase working, has one observable outcome, and can be verified with a single command. Red-flag check: name any rationalization you caught before moving to step 3.
|
|
46
46
|
|
|
47
|
-
3. **Write capsule story spec + tasks** — Output two files inside the active epic capsule. See [REFERENCE.md](REFERENCE.md) for file formats and the plan-template. Each task optionally includes a `security:` field (`none` / `low` / `medium` / `high`) sourced from the epic's `specs/security/epics/<id>/THREAT_MODEL.md`. Tasks with `security: medium` or `security: high` MUST include "no new security findings in affected paths" in their verify steps.
|
|
47
|
+
3. **Write capsule story spec + tasks** — Output two files inside the active epic capsule. See [REFERENCE.md](REFERENCE.md) for file formats and the plan-template. Each task MUST include a `risk:` field (`P0` | `P1` | `P2` | `P3`) based on BCP + story type heuristics (see REFERENCE.md). If a test plan artifact (`specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`) exists, read it and inherit its P0/P1 risk classifications and scenario IDs (`SC-eNNsYY-P0-NN`). Each task optionally includes a `security:` field (`none` / `low` / `medium` / `high`) sourced from the epic's `specs/security/epics/<id>/THREAT_MODEL.md`. Tasks with `security: medium` or `security: high` MUST include "no new security findings in affected paths" in their verify steps.
|
|
48
48
|
|
|
49
49
|
4. **Verify step format** — Every step MUST follow: `N. <What to do> → verify: <runnable command>`. See [REFERENCE.md](REFERENCE.md) for good/bad examples.
|
|
50
50
|
|
|
@@ -82,6 +82,7 @@ tasks:
|
|
|
82
82
|
- id: 1
|
|
83
83
|
description: "Add login form component tests"
|
|
84
84
|
verify: "npm test -- login-form.test.tsx"
|
|
85
|
+
risk: P1
|
|
85
86
|
status: todo
|
|
86
87
|
```
|
|
87
88
|
|
|
@@ -93,6 +94,7 @@ Update `specs/epics/<capsule>/epic.yaml` manifest to list the story and its BCPs
|
|
|
93
94
|
### Story [X.Y]: [title] — Implementation Steps
|
|
94
95
|
|
|
95
96
|
**type:** feat | fix | refactor
|
|
97
|
+
**risk:** P0 | P1 | P2 | P3
|
|
96
98
|
**context:** domain | infra
|
|
97
99
|
**Context**: [One paragraph: what this story implements and why]
|
|
98
100
|
|
|
@@ -141,6 +143,17 @@ N. <What to do> → verify: <runnable command that proves it worked>
|
|
|
141
143
|
|
|
142
144
|
## Sub-operations
|
|
143
145
|
|
|
146
|
+
### Risk Assignment Heuristics
|
|
147
|
+
|
|
148
|
+
Every task and story MUST be assigned a `risk:` level (P0, P1, P2, P3). When `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the epic, defer to its scenario risk mapping (`SC-eNNsYY-P0-NN`). Otherwise, apply these heuristics based on BCP and story type:
|
|
149
|
+
|
|
150
|
+
- **P0**: Critical path, data loss risk, auth/security boundary, external integration, or high BCP (≥ 5).
|
|
151
|
+
- **P1**: Core feature logic, state mutations, standard business value (BCP 3-4).
|
|
152
|
+
- **P2**: Utility functions, UI layout changes, display-only data, low risk (BCP 2).
|
|
153
|
+
- **P3**: Documentation, cosmetic tweaks, CSS variables, zero behavioral change (BCP 1).
|
|
154
|
+
|
|
155
|
+
`verify-work` scales its UAT depth based on this field.
|
|
156
|
+
|
|
144
157
|
### Define Success
|
|
145
158
|
|
|
146
159
|
Before planning, convert task statements into observable "step → verify: <cmd>" pairs:
|
|
@@ -19,25 +19,34 @@ Review answers "is the code good?"; Verify answers "does the built thing do what
|
|
|
19
19
|
- --smoke: Cold-start only plus one happy-path flow. Use for hotfixes.
|
|
20
20
|
- --cli: CLI tool verification — replaces cold-start with binary smoke checklist. Use for CLI tools with no server process.
|
|
21
21
|
|
|
22
|
+
## Risk-Scaled Depth
|
|
23
|
+
|
|
24
|
+
`verify-work` reads the `risk:` field from the story template (defaults to `P1` if absent) to scale verification rigor:
|
|
25
|
+
- **P0**: Full verify-work multi-phase + `security-review` (step 5) + NFR evidence gate (step 5b).
|
|
26
|
+
- **P1**: Standard verify-work (build, test, lint, step-by-step manual).
|
|
27
|
+
- **P2**: Smoke, typecheck, lint only. Skip tests, security scan, and step-by-step manual UAT.
|
|
28
|
+
- **P3**: Typecheck and lint only. Skip smoke, tests, security scan, and step-by-step manual UAT.
|
|
29
|
+
|
|
22
30
|
## Process
|
|
23
31
|
|
|
24
32
|
> **Timing:** `bash scripts/bp-timing.sh start verify-work` at invocation; `bash scripts/bp-timing.sh end verify-work` before handoff.
|
|
25
33
|
|
|
26
34
|
0. **Branch check** — must not be `main`/`master`.
|
|
27
35
|
|
|
28
|
-
1. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17).
|
|
36
|
+
1. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17). Note the `risk:` level (`P0`–`P3`).
|
|
29
37
|
1a. **Pre-UAT verify validation** — for each task's `verify:` command, run it and detect pattern mismatches before UAT begins. If a grep/awk/jq command fails, check whether the pattern is wrong vs. a genuine failure:
|
|
30
38
|
```bash
|
|
31
39
|
# For a failing grep -q 'PATTERN' FILE, check what is actually in FILE
|
|
32
40
|
grep 'PATTERN' FILE || grep -n '' FILE | head -20 # show nearest lines
|
|
33
41
|
```
|
|
34
42
|
Report: `"Pattern 'X' not found. Nearest match: 'Y' at line N"` and ask `"Update verify command? [Y/n]"`. Fix before proceeding — a mismatched verify command produces false failures during UAT.
|
|
35
|
-
2. **Cold-start smoke** (if app): stop server, clear caches, boot from scratch.
|
|
43
|
+
2. **Cold-start smoke** (if app; skip if P3): stop server, clear caches, boot from scratch.
|
|
36
44
|
3. **AGENTS.md preflight** — before running default checks, call `bash scripts/bp-read-agents.sh` to detect project-specific commands. If `BP_PREFLIGHT` is set, run it instead of the default mechanical gates (or in addition to them if the project requires both). Output: `"Using preflight from AGENTS.md: <cmd>"`. Fall back to `CLAUDE.md` commands if AGENTS.md is absent.
|
|
37
|
-
4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md).
|
|
38
|
-
5. **Security scan** — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
|
|
45
|
+
4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md). Skip tests if P2/P3.
|
|
46
|
+
5. **Security scan** (skip if P2/P3) — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
|
|
39
47
|
5a. **Blind-spot check** — run `bash scripts/check-blind-spots.sh`. This detects structural quality gaps (verify-gap, test-gap, stale-tag, etc.) beyond percentage coverage. If any HIGH-severity findings exist → **block the verify-work PASS gate**. Findings are written to `specs/blind-spots.json`. MEDIUM/LOW findings warn but don't block.
|
|
40
|
-
|
|
48
|
+
5b. **NFR Evidence Gate** (P0 only) — Produces go/no-go output on three dimensions: Performance (response time, throughput), Reliability (error rate, recovery), and Operability (logging, health checks). Reads thresholds from `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` and writes evidence as OKF verification-report bundles to `specs/verifications/NFR-eNNsYY.json`. FAIL on any dimension blocks the gate.
|
|
49
|
+
6. **Step-by-step UAT** (skip if P2/P3) — one user-observable action at a time.
|
|
41
50
|
7. **Gaps loop** — failures → log → `plan-work` → re-verify. Unaddressed HIGH findings from step 5 feed into this loop alongside other quality gaps.
|
|
42
51
|
|
|
43
52
|
## Verify sub-operations
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [2.60.0](https://github.com/danielvm-git/bigpowers/compare/v2.59.9...v2.60.0) (2026-07-04)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **e46:** add plan-tests skill, NFR gate, and SC scenario IDs ([6c19b8e](https://github.com/danielvm-git/bigpowers/commit/6c19b8eb2d21e4b862a5a00e1df570a2277728b8))
|
|
7
|
+
|
|
8
|
+
## [2.59.9](https://github.com/danielvm-git/bigpowers/compare/v2.59.8...v2.59.9) (2026-07-04)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **ci:** file-size gates scan Python; drop phantom .sh exception ([73879a6](https://github.com/danielvm-git/bigpowers/commit/73879a67bb0e6bbc4eb3e1bc643ccc7eeb57f430))
|
|
14
|
+
|
|
1
15
|
## [2.59.8](https://github.com/danielvm-git/bigpowers/compare/v2.59.7...v2.59.8) (2026-07-04)
|
|
2
16
|
|
|
3
17
|
|
package/CONVENTIONS.md
CHANGED
|
@@ -56,6 +56,7 @@ You are operating within the `bigpowers` spec-driven development methodology.
|
|
|
56
56
|
- **Verification Mandate:** Every story implementation MUST end with a step-by-step manual verification script provided to the user. You must wait for the user to confirm behavioral correctness (UAT) before declaring the story done or moving to the next.
|
|
57
57
|
- **Verification:** You MUST verify every change with tests. Code generation without a corresponding plan in `specs/` is strictly forbidden.
|
|
58
58
|
- **Traceability Mandate:** Every story MUST have at least one `story: eNNsNN` tag in its implementing code or test file. `trace-stories.sh --strict` runs in CI to enforce this. Untagged stories fail the CI traceability gate.
|
|
59
|
+
- **Scenario ID Format (e46s04+):** When a `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the epic, critical-path scenarios use the format `SC-eNNsYY-P{0|1|2|3}-NN` (e.g. `SC-e46s04-P0-01`). These IDs are referenced inside test files as `// scenario: SC-eNNsYY-P0-NN` comments alongside the existing `// story: eNNsNN` tag. SC gaps detected via check-blind-spots.sh; no separate SC tracing script required. gate-trace treats a P0 story with zero `SC-*-P0-*` references in test files as a CONCERNS finding (waivable via `state.yaml`). P2/P3 epics may set `test_plan: waived` in `state.yaml` to skip the `plan-tests` skill.
|
|
59
60
|
- **Stream Continuity:** When writing large files or long documents, you MUST output continuously in chunks of ~200 lines. Do not pause between sections. Continue immediately until complete. If you need time to process, emit a placeholder comment or heading rather than going silent to prevent stream idle timeouts.
|
|
60
61
|
|
|
61
62
|
## specs/ — All Planning Output Goes Here
|
|
@@ -93,7 +94,9 @@ Missing timestamps are a gate violation — do not advance past `release-branch`
|
|
|
93
94
|
|
|
94
95
|
### next_skill signaling mandate (v2.0.0)
|
|
95
96
|
|
|
96
|
-
Every critical-path skill (survey-context, plan-work, kickoff-branch, develop-tdd, verify-work, audit-code, commit-message, release-branch) MUST write `handoff.next_skill` to `specs/state.yaml` as its last action. Agents MUST read `state.yaml` and follow `handoff.next_skill` before asking "what comes next?".
|
|
97
|
+
Every critical-path skill (survey-context, plan-tests, plan-work, kickoff-branch, develop-tdd, verify-work, audit-code, commit-message, release-branch) MUST write `handoff.next_skill` to `specs/state.yaml` as its last action. Agents MUST read `state.yaml` and follow `handoff.next_skill` before asking "what comes next?".
|
|
98
|
+
|
|
99
|
+
`plan-tests` is an optional planning-spine step: after `slice-tasks`, before `plan-work`, for epics whose stories carry `risk: P0|P1`. It is skipped (set `test_plan: waived` in `state.yaml`) for P2/P3-dominant epics.
|
|
97
100
|
|
|
98
101
|
### Intent vs delivery vs execution
|
|
99
102
|
|
|
@@ -129,6 +132,7 @@ When planning closes, copy to `specs/product/snapshots/release-<version>/` (`rel
|
|
|
129
132
|
|----------|------|
|
|
130
133
|
| Stack / architecture | `specs/tech-architecture/TECH_STACK_LATEST.md` |
|
|
131
134
|
| Security / test / design plans | `specs/tech-architecture/*_PLAN_LATEST.md` |
|
|
135
|
+
| Epic test plan (P0/P1 epics) | `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` — produced by `plan-tests` skill (e46s04); one per epic. |
|
|
132
136
|
| Domain context + ADRs | `specs/tech-architecture/TECH_STACK_LATEST.md` or legacy `specs/CONTEXT.md` + `specs/adr/` |
|
|
133
137
|
| Bug investigation | `specs/bugs/BUG-*.md` + `specs/bugs/registry.yaml` (generated) |
|
|
134
138
|
| Refactor / impact | `specs/tech-architecture/REFACTOR_LATEST.md`, `specs/tech-architecture/IMPACT_LATEST.md` |
|
|
@@ -239,7 +243,13 @@ window. The following files are documented exceptions:
|
|
|
239
243
|
|
|
240
244
|
| File | Lines | Rationale | Review date |
|
|
241
245
|
|------|-------|-----------|-------------|
|
|
242
|
-
| `scripts/trace-
|
|
243
|
-
| `scripts/
|
|
246
|
+
| `scripts/lib/trace-matrix.py` | 523 | Traceability matrix engine: tag scanning, oracle-confidence scoring, and JSON/markdown emission share tightly-coupled dataclasses and a single pass over the story index. Splitting would fragment the matrix model across modules. Split candidate for a future plan-refactor (BUG-2026-07-04-filesize-gate-python-blindspot); documented meanwhile. Also exceeds the 500-line cap. | 2026-10-01 |
|
|
247
|
+
| `scripts/lib/trace-stories.py` | 301 | Story-tag discovery + file-to-story mapping; the phases share regex state and a common file walk. One line over cap; monitor for split alongside trace-matrix.py. | 2026-10-01 |
|
|
248
|
+
| `scripts/audit-compliance.sh` | 300 | Gherkin harness with embedded judge logic and waiver subsystem; splitting the judge loop from the reporting layer would require fragile state-passing. At the 300-line cap; monitor. | 2026-10-01 |
|
|
249
|
+
|
|
250
|
+
**Note:** `scripts/trace-stories.sh` was refactored from a 613-line monolith into a
|
|
251
|
+
69-line orchestrator delegating to the `scripts/lib/*.py` engine above — it is no
|
|
252
|
+
longer an exception. The prior exception row (and its waiver) referenced a file
|
|
253
|
+
that no longer exists; see BUG-2026-07-04-filesize-gate-python-blindspot.
|
|
244
254
|
|
|
245
255
|
Any new exception requires an entry in this table with rationale and a review date.
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|

|
|
5
|
-

|
|
6
6
|
|
|
7
7
|
**Agent skills synthesizing 17 years of software engineering discipline — from Clean Code to AI-native architecture — into a single, prescriptive methodology for solo developers.**
|
|
8
8
|
|
package/SKILL-INDEX.md
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bigpowers",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.60.0",
|
|
4
|
+
"description": "73 agent skills synthesizing 17 years of software engineering discipline into a prescriptive methodology for solo developers",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"compliance": "bash scripts/audit-compliance.sh specs/verifications/features && bash scripts/validate-doctrine.sh",
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
# story: e38s04
|
|
3
3
|
# check-blind-spots.sh — TEA-inspired heuristic blind-spot detector.
|
|
4
4
|
# Thin bash wrapper — the detection engine lives in scripts/lib/blind-spots.py.
|
|
5
|
-
# Reads execution-status.yaml + traceability-matrix.json, runs
|
|
5
|
+
# Reads execution-status.yaml + traceability-matrix.json, runs 7 structural
|
|
6
6
|
# quality checks, and emits specs/blind-spots.json.
|
|
7
|
+
# Also detects SC- scenario gaps (sc-gap).
|
|
7
8
|
#
|
|
8
|
-
# Checks: verify-gap, test-gap, epic-orphan, stale-tag, double-tag, bootstrap-testless.
|
|
9
|
+
# Checks: verify-gap, test-gap, epic-orphan, stale-tag, double-tag, bootstrap-testless, sc-gap.
|
|
9
10
|
# Severities: HIGH / MEDIUM / LOW. Exit 1 on HIGH findings.
|
|
10
11
|
|
|
11
12
|
set -euo pipefail
|
|
@@ -23,12 +24,12 @@ while [[ $# -gt 0 ]]; do
|
|
|
23
24
|
cat <<'USAGE'
|
|
24
25
|
Usage: check-blind-spots.sh [flags]
|
|
25
26
|
|
|
26
|
-
Run
|
|
27
|
+
Run 7 heuristic blind-spot checks on the codebase.
|
|
27
28
|
|
|
28
29
|
Flags:
|
|
29
30
|
--help Print this message and exit.
|
|
30
31
|
|
|
31
|
-
Checks: verify-gap, test-gap, epic-orphan, stale-tag, double-tag, bootstrap-testless.
|
|
32
|
+
Checks: verify-gap, test-gap, epic-orphan, stale-tag, double-tag, bootstrap-testless, sc-gap.
|
|
32
33
|
Output: specs/blind-spots.json
|
|
33
34
|
Exit: 0 = no HIGH findings, 1 = HIGH findings or input files missing.
|
|
34
35
|
USAGE
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""story: e38s04 — TEA-inspired heuristic blind-spot detector (Python engine).
|
|
3
3
|
|
|
4
|
-
Reads execution-status.yaml + traceability-matrix.json, runs
|
|
4
|
+
Reads execution-status.yaml + traceability-matrix.json, runs 7 structural
|
|
5
5
|
quality checks, and emits specs/blind-spots.json.
|
|
6
6
|
|
|
7
7
|
Usage: called by scripts/check-blind-spots.sh with positional args:
|
|
@@ -193,6 +193,42 @@ for sid in sorted(dev_status.keys()):
|
|
|
193
193
|
"remediation": f"Add test files for: {', '.join(code_only[:3])}"
|
|
194
194
|
})
|
|
195
195
|
|
|
196
|
+
# Check G: sc-gap
|
|
197
|
+
TECH_ARCH_DIR = ROOT / "specs" / "tech-architecture"
|
|
198
|
+
if EPICS_DIR.exists():
|
|
199
|
+
for epic_dir in sorted(EPICS_DIR.iterdir()):
|
|
200
|
+
if not epic_dir.is_dir() or epic_dir.name == "archive": continue
|
|
201
|
+
epic_match = re.match(r"(e\d+)", epic_dir.name)
|
|
202
|
+
if not epic_match: continue
|
|
203
|
+
epic_id = epic_match.group(1)
|
|
204
|
+
|
|
205
|
+
test_plan = TECH_ARCH_DIR / f"{epic_id}-TEST_PLAN_LATEST.md"
|
|
206
|
+
if not test_plan.exists(): continue
|
|
207
|
+
|
|
208
|
+
for task_file in sorted(epic_dir.glob("e*s[0-9]*-tasks.yaml")):
|
|
209
|
+
sid_match = re.match(r"(e\d+s\d+)", task_file.name)
|
|
210
|
+
if not sid_match: continue
|
|
211
|
+
sid = sid_match.group(1)
|
|
212
|
+
|
|
213
|
+
content = task_file.read_text(encoding="utf-8")
|
|
214
|
+
if "risk: P0" in content:
|
|
215
|
+
found_sc = False
|
|
216
|
+
for f in tagged_files.get(sid, []):
|
|
217
|
+
fpath = ROOT / f
|
|
218
|
+
if fpath.exists():
|
|
219
|
+
fcontent = fpath.read_text(encoding="utf-8", errors="ignore")
|
|
220
|
+
if re.search(rf"SC-{sid}-P0", fcontent):
|
|
221
|
+
found_sc = True
|
|
222
|
+
break
|
|
223
|
+
if not found_sc:
|
|
224
|
+
findings.append({
|
|
225
|
+
"check": "sc-gap",
|
|
226
|
+
"story_id": sid,
|
|
227
|
+
"severity": "MEDIUM",
|
|
228
|
+
"description": f"P0 story {sid} has a TEST_PLAN but no `scenario: SC-{sid}-P0-*` tags found in its implementing files",
|
|
229
|
+
"remediation": f"Add `// scenario: SC-{sid}-P0-XX` tags to the test files for this story"
|
|
230
|
+
})
|
|
231
|
+
|
|
196
232
|
# Deduplicate
|
|
197
233
|
seen: set[tuple] = set()
|
|
198
234
|
deduped: list[dict] = []
|
|
@@ -37,6 +37,7 @@ If you catch yourself thinking these, stop and reconsider — you are likely dev
|
|
|
37
37
|
### 1. Planning
|
|
38
38
|
|
|
39
39
|
- [ ] Read active `specs/epics/*/epic.yaml` story tasks or `specs/bugs/BUG-*.md` — understand verify steps
|
|
40
|
+
- [ ] If `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the active epic, read it before writing the first test. Implement P0 scenarios (`SC-*-P0-*`) before P1. P2/P3 scenarios are optional per time budget.
|
|
40
41
|
- [ ] Confirm interface changes and behaviors to test (prioritize)
|
|
41
42
|
- [ ] Design interfaces for testability — identify [deep modules](deep-modules.md) opportunities
|
|
42
43
|
- [ ] Get user approval on the plan
|
|
@@ -18,6 +18,7 @@ Deterministic quality gate that combines traceability coverage and blind-spot da
|
|
|
18
18
|
| R2 | Any story done but no verify evidence | CONCERNS |
|
|
19
19
|
| R3 | P0 story (top WSJF quartile) with 0% coverage | FAIL |
|
|
20
20
|
| R4 | Overall coverage < 60% | CONCERNS |
|
|
21
|
+
| R6 | P0 story + eNN-TEST_PLAN_LATEST.md exists + zero SC-eNNsYY-P0-* in test files | CONCERNS |
|
|
21
22
|
| R5 | Overall ≥ 80% + no critical gaps + all verify → PASS | PASS |
|
|
22
23
|
|
|
23
24
|
## Oracle Confidence Downgrade
|
|
@@ -47,7 +47,7 @@ See [REFERENCE.md](REFERENCE.md) for detailed phase specifications and gate type
|
|
|
47
47
|
|
|
48
48
|
1. **Maintains state.yaml** — Tracks current phase, `active_epic`, `active_flow`, decisions, risks.
|
|
49
49
|
2. **Spawns appropriate skills** — Routes by `model:` frontmatter. Decisions pass only via `specs/state.yaml` `handoff` between spawns.
|
|
50
|
-
3. **Methodology lenses** — If `specs/tech-architecture/TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
|
|
50
|
+
3. **Methodology lenses** — If `specs/tech-architecture/e*-TEST_PLAN_LATEST.md` or ADRs exist, apply at phase gates.
|
|
51
51
|
4. **Enforces gates** — Hard stops if success criteria not met.
|
|
52
52
|
5. **The Gatekeeper** — Between stories in BUILD: read `specs/execution-status.yaml`; previous story must be `done` before starting the next; use `build-epic` for the 8-step epic cycle.
|
|
53
53
|
6. **Pauses for confirmation** — After each phase, asks "Ready to proceed?".
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Plan Tests — Reference
|
|
2
|
+
|
|
3
|
+
## Test Plan Template (`specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`)
|
|
4
|
+
|
|
5
|
+
```markdown
|
|
6
|
+
# Test Design: [eNN-slug]
|
|
7
|
+
|
|
8
|
+
## 1. Risk Matrix & Scenarios
|
|
9
|
+
| Scenario ID | Behavior Description | Risk | Test Level | Target File/Module |
|
|
10
|
+
|-------------|----------------------|------|------------|--------------------|
|
|
11
|
+
| SC-P0-01 | Primary checkout | P0 | Integration | checkout.spec.ts |
|
|
12
|
+
|
|
13
|
+
## 2. Fixture Architecture & Isolation
|
|
14
|
+
- Data Factories: (e.g. UserFactory)
|
|
15
|
+
- Network Intercepts: (e.g. MSW handlers)
|
|
16
|
+
- Database State: (e.g. in-memory SQLite)
|
|
17
|
+
|
|
18
|
+
## 3. NFR Verification
|
|
19
|
+
| NFR Type | Requirement | Verification Command |
|
|
20
|
+
|----------|-------------|----------------------|
|
|
21
|
+
| Perf | < 200ms | `npm run test:perf` |
|
|
22
|
+
|
|
23
|
+
## 4. Out of Scope
|
|
24
|
+
- [Explicitly excluded testing areas]
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Fixture Planning Guidance
|
|
28
|
+
|
|
29
|
+
- **Data Factories**: Prefer factory functions over manual object construction.
|
|
30
|
+
- **Network Intercepts**: For frontend integration tests, use tools like Mock Service Worker (MSW) to intercept and mock HTTP requests.
|
|
31
|
+
- **Database State**: For backend tests, use a clean database state per test or an in-memory database to ensure isolation.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-tests
|
|
3
|
+
description: "Design a risk-scaled test architecture for an epic before implementation begins. Produces prioritized scenarios, test level distribution, and fixture plans based on TEA and bigpowers principles."
|
|
4
|
+
model: opus
|
|
5
|
+
effort: standard
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Plan Tests
|
|
9
|
+
|
|
10
|
+
> **Spine position:** Between `slice-tasks` and `plan-work` for epics with `risk: P0|P1`. Optional (can be waived in `state.yaml`) for P2/P3.
|
|
11
|
+
|
|
12
|
+
Bridges the gap between slicing and planning by systematically designing the test suite as a first-class system. Produces `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`.
|
|
13
|
+
|
|
14
|
+
## Pre-flight
|
|
15
|
+
- Read `specs/epics/eNN-*/` story list.
|
|
16
|
+
|
|
17
|
+
## Core Workflow
|
|
18
|
+
1. **Analyze Epic**: Read sliced stories in the active epic capsule.
|
|
19
|
+
2. **Risk Assessment**: Map behaviors to P0–P3 risk tiers.
|
|
20
|
+
3. **Level Strategy**: Classify each scenario (Unit, Integration, E2E).
|
|
21
|
+
4. **Fixture Design**: Plan factories, network intercepts, mocks (see REFERENCE.md).
|
|
22
|
+
5. **NFR Plan**: Define verifiable commands for Non-Functional Requirements. Skip if `--lite`.
|
|
23
|
+
6. **Publish**: Generate `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`.
|
|
24
|
+
|
|
25
|
+
## Hard Gates & Guardrails
|
|
26
|
+
- **DO NOT** write test code or production code during this skill.
|
|
27
|
+
- Scenario ID format MUST be: `SC-eNNsYY-P{0|1|2|3}-NN`.
|
|
28
|
+
- `plan-work` MUST reference these scenario IDs in its §17 Gherkin acceptance criteria.
|
|
29
|
+
- Default to pushing tests to the lowest possible level.
|
|
30
|
+
|
|
31
|
+
## Execution Modes
|
|
32
|
+
- `$bmad plan-tests`: Standard execution.
|
|
33
|
+
- `$bmad plan-tests --lite`: Skips NFRs and complex fixture planning.
|
|
34
|
+
|
|
35
|
+
## Verify
|
|
36
|
+
|
|
37
|
+
→ verify: `test -f specs/tech-architecture/$(echo $EPIC | sed "s|.*/||")-TEST_PLAN_LATEST.md && echo OK`
|
|
38
|
+
|
|
39
|
+
## Handoff
|
|
40
|
+
|
|
41
|
+
Gate: READY -> next: plan-work
|
|
42
|
+
Writes: state.yaml handoff.next_skill = plan-work
|
|
@@ -17,6 +17,7 @@ tasks:
|
|
|
17
17
|
- id: 1
|
|
18
18
|
description: "Add login form component tests"
|
|
19
19
|
verify: "npm test -- login-form.test.tsx"
|
|
20
|
+
risk: P1
|
|
20
21
|
status: todo
|
|
21
22
|
```
|
|
22
23
|
|
|
@@ -28,6 +29,7 @@ Update `specs/epics/<capsule>/epic.yaml` manifest to list the story and its BCPs
|
|
|
28
29
|
### Story [X.Y]: [title] — Implementation Steps
|
|
29
30
|
|
|
30
31
|
**type:** feat | fix | refactor
|
|
32
|
+
**risk:** P0 | P1 | P2 | P3
|
|
31
33
|
**context:** domain | infra
|
|
32
34
|
**Context**: [One paragraph: what this story implements and why]
|
|
33
35
|
|
|
@@ -76,6 +78,17 @@ N. <What to do> → verify: <runnable command that proves it worked>
|
|
|
76
78
|
|
|
77
79
|
## Sub-operations
|
|
78
80
|
|
|
81
|
+
### Risk Assignment Heuristics
|
|
82
|
+
|
|
83
|
+
Every task and story MUST be assigned a `risk:` level (P0, P1, P2, P3). When `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` exists for the epic, defer to its scenario risk mapping (`SC-eNNsYY-P0-NN`). Otherwise, apply these heuristics based on BCP and story type:
|
|
84
|
+
|
|
85
|
+
- **P0**: Critical path, data loss risk, auth/security boundary, external integration, or high BCP (≥ 5).
|
|
86
|
+
- **P1**: Core feature logic, state mutations, standard business value (BCP 3-4).
|
|
87
|
+
- **P2**: Utility functions, UI layout changes, display-only data, low risk (BCP 2).
|
|
88
|
+
- **P3**: Documentation, cosmetic tweaks, CSS variables, zero behavioral change (BCP 1).
|
|
89
|
+
|
|
90
|
+
`verify-work` scales its UAT depth based on this field.
|
|
91
|
+
|
|
79
92
|
### Define Success
|
|
80
93
|
|
|
81
94
|
Before planning, convert task statements into observable "step → verify: <cmd>" pairs:
|
|
@@ -44,7 +44,7 @@ If this plan touches an existing module, run `assess-impact` first to understand
|
|
|
44
44
|
|
|
45
45
|
2. **Draft steps** — Break implementation into the smallest possible steps where each step leaves the codebase working, has one observable outcome, and can be verified with a single command. Red-flag check: name any rationalization you caught before moving to step 3.
|
|
46
46
|
|
|
47
|
-
3. **Write capsule story spec + tasks** — Output two files inside the active epic capsule. See [REFERENCE.md](REFERENCE.md) for file formats and the plan-template. Each task optionally includes a `security:` field (`none` / `low` / `medium` / `high`) sourced from the epic's `specs/security/epics/<id>/THREAT_MODEL.md`. Tasks with `security: medium` or `security: high` MUST include "no new security findings in affected paths" in their verify steps.
|
|
47
|
+
3. **Write capsule story spec + tasks** — Output two files inside the active epic capsule. See [REFERENCE.md](REFERENCE.md) for file formats and the plan-template. Each task MUST include a `risk:` field (`P0` | `P1` | `P2` | `P3`) based on BCP + story type heuristics (see REFERENCE.md). If a test plan artifact (`specs/tech-architecture/eNN-TEST_PLAN_LATEST.md`) exists, read it and inherit its P0/P1 risk classifications and scenario IDs (`SC-eNNsYY-P0-NN`). Each task optionally includes a `security:` field (`none` / `low` / `medium` / `high`) sourced from the epic's `specs/security/epics/<id>/THREAT_MODEL.md`. Tasks with `security: medium` or `security: high` MUST include "no new security findings in affected paths" in their verify steps.
|
|
48
48
|
|
|
49
49
|
4. **Verify step format** — Every step MUST follow: `N. <What to do> → verify: <runnable command>`. See [REFERENCE.md](REFERENCE.md) for good/bad examples.
|
|
50
50
|
|
|
@@ -20,25 +20,34 @@ Review answers "is the code good?"; Verify answers "does the built thing do what
|
|
|
20
20
|
- --smoke: Cold-start only plus one happy-path flow. Use for hotfixes.
|
|
21
21
|
- --cli: CLI tool verification — replaces cold-start with binary smoke checklist. Use for CLI tools with no server process.
|
|
22
22
|
|
|
23
|
+
## Risk-Scaled Depth
|
|
24
|
+
|
|
25
|
+
`verify-work` reads the `risk:` field from the story template (defaults to `P1` if absent) to scale verification rigor:
|
|
26
|
+
- **P0**: Full verify-work multi-phase + `security-review` (step 5) + NFR evidence gate (step 5b).
|
|
27
|
+
- **P1**: Standard verify-work (build, test, lint, step-by-step manual).
|
|
28
|
+
- **P2**: Smoke, typecheck, lint only. Skip tests, security scan, and step-by-step manual UAT.
|
|
29
|
+
- **P3**: Typecheck and lint only. Skip smoke, tests, security scan, and step-by-step manual UAT.
|
|
30
|
+
|
|
23
31
|
## Process
|
|
24
32
|
|
|
25
33
|
> **Timing:** `bash scripts/bp-timing.sh start verify-work` at invocation; `bash scripts/bp-timing.sh end verify-work` before handoff.
|
|
26
34
|
|
|
27
35
|
0. **Branch check** — must not be `main`/`master`.
|
|
28
36
|
|
|
29
|
-
1. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17).
|
|
37
|
+
1. Read active story tasks from `specs/epics/<capsule>/eNNsYY-tasks.yaml` and story spec from `specs/epics/<capsule>/eNNsYY-<slug>.md` (countable-story-format, Gherkin in §17). Note the `risk:` level (`P0`–`P3`).
|
|
30
38
|
1a. **Pre-UAT verify validation** — for each task's `verify:` command, run it and detect pattern mismatches before UAT begins. If a grep/awk/jq command fails, check whether the pattern is wrong vs. a genuine failure:
|
|
31
39
|
```bash
|
|
32
40
|
# For a failing grep -q 'PATTERN' FILE, check what is actually in FILE
|
|
33
41
|
grep 'PATTERN' FILE || grep -n '' FILE | head -20 # show nearest lines
|
|
34
42
|
```
|
|
35
43
|
Report: `"Pattern 'X' not found. Nearest match: 'Y' at line N"` and ask `"Update verify command? [Y/n]"`. Fix before proceeding — a mismatched verify command produces false failures during UAT.
|
|
36
|
-
2. **Cold-start smoke** (if app): stop server, clear caches, boot from scratch.
|
|
44
|
+
2. **Cold-start smoke** (if app; skip if P3): stop server, clear caches, boot from scratch.
|
|
37
45
|
3. **AGENTS.md preflight** — before running default checks, call `bash scripts/bp-read-agents.sh` to detect project-specific commands. If `BP_PREFLIGHT` is set, run it instead of the default mechanical gates (or in addition to them if the project requires both). Output: `"Using preflight from AGENTS.md: <cmd>"`. Fall back to `CLAUDE.md` commands if AGENTS.md is absent.
|
|
38
|
-
4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md).
|
|
39
|
-
5. **Security scan** — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
|
|
46
|
+
4. Mechanical gates: build → typecheck → lint → tests (from `CLAUDE.md` or AGENTS.md). Skip tests if P2/P3.
|
|
47
|
+
5. **Security scan** (skip if P2/P3) — run `security-review` against the git diff (working tree vs merge-base). Parse findings report. If any HIGH findings with confidence ≥ 8 exist → **block the gate**. Write findings to `specs/security/REVIEW.md`. Allow documented exceptions via `specs/security/EXCEPTIONS.md`. MEDIUM/LOW findings warn but don't block.
|
|
40
48
|
5a. **Blind-spot check** — run `bash scripts/check-blind-spots.sh`. This detects structural quality gaps (verify-gap, test-gap, stale-tag, etc.) beyond percentage coverage. If any HIGH-severity findings exist → **block the verify-work PASS gate**. Findings are written to `specs/blind-spots.json`. MEDIUM/LOW findings warn but don't block.
|
|
41
|
-
|
|
49
|
+
5b. **NFR Evidence Gate** (P0 only) — Produces go/no-go output on three dimensions: Performance (response time, throughput), Reliability (error rate, recovery), and Operability (logging, health checks). Reads thresholds from `specs/tech-architecture/eNN-TEST_PLAN_LATEST.md` and writes evidence as OKF verification-report bundles to `specs/verifications/NFR-eNNsYY.json`. FAIL on any dimension blocks the gate.
|
|
50
|
+
6. **Step-by-step UAT** (skip if P2/P3) — one user-observable action at a time.
|
|
42
51
|
7. **Gaps loop** — failures → log → `plan-work` → re-verify. Unaddressed HIGH findings from step 5 feed into this loop alongside other quality gaps.
|
|
43
52
|
|
|
44
53
|
## Verify sub-operations
|
package/skills-lock.json
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
},
|
|
79
79
|
"develop-tdd": {
|
|
80
80
|
"description": "Test-driven development with red-green-refactor loop using vertical slices. Use for features (epic tasks) or bugs (specs/bugs/BUG-*.md).",
|
|
81
|
-
"sha256": "
|
|
81
|
+
"sha256": "bd73cb58145ce1c1",
|
|
82
82
|
"path": "skills/develop-tdd/SKILL.md"
|
|
83
83
|
},
|
|
84
84
|
"diagnose-root": {
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
},
|
|
129
129
|
"gate-trace": {
|
|
130
130
|
"description": "\"Deterministic traceability quality gate — reads coverage matrix + blind-spot data, applies decision rules with oracle confidence downgrade, emits PASS/CONCERNS/FAIL/WAIVED verdict. Use before release-branch to gate merges on traceability.\"# story: e38s06",
|
|
131
|
-
"sha256": "
|
|
131
|
+
"sha256": "7326525dc3d5d51f",
|
|
132
132
|
"path": "skills/gate-trace/SKILL.md"
|
|
133
133
|
},
|
|
134
134
|
"grill-me": {
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
},
|
|
184
184
|
"orchestrate-project": {
|
|
185
185
|
"description": "Meta-skill that enforces the 6-phase core loop (discover → elaborate → plan → build → verify → release) with hard gates. Use to coordinate multi-phase projects with guaranteed quality checkpoints. One-time command for the entire project lifecycle.",
|
|
186
|
-
"sha256": "
|
|
186
|
+
"sha256": "4e53cd83ac296735",
|
|
187
187
|
"path": "skills/orchestrate-project/SKILL.md"
|
|
188
188
|
},
|
|
189
189
|
"organize-workspace": {
|
|
@@ -201,9 +201,14 @@
|
|
|
201
201
|
"sha256": "62dc272a091c8d7f",
|
|
202
202
|
"path": "skills/plan-release/SKILL.md"
|
|
203
203
|
},
|
|
204
|
+
"plan-tests": {
|
|
205
|
+
"description": "\"Design a risk-scaled test architecture for an epic before implementation begins. Produces prioritized scenarios, test level distribution, and fixture plans based on TEA and bigpowers principles.\"",
|
|
206
|
+
"sha256": "3f43a105b860105a",
|
|
207
|
+
"path": "skills/plan-tests/SKILL.md"
|
|
208
|
+
},
|
|
204
209
|
"plan-work": {
|
|
205
210
|
"description": "\"PLANNING SPINE STEP 3 of 3 — Plan the work: write detailed implementation tasks into the active epic capsule (specs/epics/eNN-slug/). Produces countable-story-format .md specs and runnable -tasks.yaml files. Use after slice-tasks (step 2). Not a substitute for scope-work (step 1) or slice-tasks (step 2).\"",
|
|
206
|
-
"sha256": "
|
|
211
|
+
"sha256": "29792e9d4499cc1e",
|
|
207
212
|
"path": "skills/plan-work/SKILL.md"
|
|
208
213
|
},
|
|
209
214
|
"publish-package": {
|
|
@@ -343,7 +348,7 @@
|
|
|
343
348
|
},
|
|
344
349
|
"verify-work": {
|
|
345
350
|
"description": "Multi-phase UAT gate — cold-start smoke, build, typecheck, lint, tests, step-by-step manual verification, gaps-closure loop. Use after execute-plan or develop-tdd, before audit-code.",
|
|
346
|
-
"sha256": "
|
|
351
|
+
"sha256": "030622528b2bf5ed",
|
|
347
352
|
"path": "skills/verify-work/SKILL.md"
|
|
348
353
|
},
|
|
349
354
|
"visual-dashboard": {
|
package/playwright.config.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { defineConfig, devices } from '@playwright/test';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* See https://playwright.dev/docs/test-configuration.
|
|
5
|
-
*/
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
testDir: './tests/e2e',
|
|
8
|
-
/* Run tests in files in parallel */
|
|
9
|
-
fullyParallel: true,
|
|
10
|
-
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
11
|
-
forbidOnly: !!process.env.CI,
|
|
12
|
-
/* Retry on CI only */
|
|
13
|
-
retries: process.env.CI ? 2 : 0,
|
|
14
|
-
/* Opt out of parallel tests on CI. */
|
|
15
|
-
workers: process.env.CI ? 1 : undefined,
|
|
16
|
-
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
17
|
-
reporter: [
|
|
18
|
-
['list'],
|
|
19
|
-
['html', { outputFolder: 'playwright-report', open: 'never' }],
|
|
20
|
-
['junit', { outputFile: 'test-results/results.xml' }]
|
|
21
|
-
],
|
|
22
|
-
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
23
|
-
use: {
|
|
24
|
-
/* Base URL to use in actions like `await page.goto('/')`. */
|
|
25
|
-
baseURL: process.env.BASE_URL || 'http://localhost:3000',
|
|
26
|
-
|
|
27
|
-
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
28
|
-
trace: 'retain-on-failure-and-retries',
|
|
29
|
-
screenshot: 'only-on-failure',
|
|
30
|
-
video: 'retain-on-failure',
|
|
31
|
-
|
|
32
|
-
actionTimeout: 15000,
|
|
33
|
-
navigationTimeout: 30000,
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
/* Configure projects for major browsers */
|
|
37
|
-
projects: [
|
|
38
|
-
{
|
|
39
|
-
name: 'chromium',
|
|
40
|
-
use: { ...devices['Desktop Chrome'] },
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
|
|
44
|
-
/* Run your local dev server before starting the tests */
|
|
45
|
-
// webServer: {
|
|
46
|
-
// command: 'npm run start',
|
|
47
|
-
// url: 'http://127.0.0.1:3000',
|
|
48
|
-
// reuseExistingServer: !process.env.CI,
|
|
49
|
-
// },
|
|
50
|
-
|
|
51
|
-
expect: {
|
|
52
|
-
timeout: 10000,
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
timeout: 60000,
|
|
56
|
-
});
|