warp-os 1.1.2 → 1.2.1
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 +85 -0
- package/README.md +6 -4
- package/VERSION +1 -1
- package/agents/warp-annotate.md +394 -0
- package/agents/warp-browse.md +9 -1
- package/agents/warp-build-code.md +9 -1
- package/agents/warp-orchestrator.md +10 -1
- package/agents/warp-plan-architect.md +120 -1
- package/agents/warp-plan-brainstorm.md +93 -2
- package/agents/warp-plan-design.md +97 -4
- package/agents/warp-plan-onboarding.md +9 -1
- package/agents/warp-plan-optimize.md +9 -1
- package/agents/warp-plan-scope.md +67 -1
- package/agents/warp-plan-security.md +576 -35
- package/agents/warp-plan-testdesign.md +9 -1
- package/agents/warp-qa-debug.md +117 -1
- package/agents/warp-qa-test.md +167 -1
- package/agents/warp-release-update.md +290 -4
- package/agents/warp-setup.md +9 -1
- package/agents/warp-upgrade.md +21 -4
- package/bin/hooks/CLAUDE.md +24 -0
- package/bin/hooks/_warp_json.sh +4 -2
- package/bin/hooks/identity-briefing.sh +20 -13
- package/bin/hooks/validate-askuser.sh +41 -0
- package/bin/migrate-sessions.js +284 -173
- package/dist/warp-annotate/SKILL.md +404 -0
- package/dist/warp-browse/SKILL.md +9 -1
- package/dist/warp-build-code/SKILL.md +9 -1
- package/dist/warp-orchestrator/SKILL.md +10 -1
- package/dist/warp-plan-architect/SKILL.md +120 -1
- package/dist/warp-plan-brainstorm/SKILL.md +93 -2
- package/dist/warp-plan-design/SKILL.md +97 -4
- package/dist/warp-plan-onboarding/SKILL.md +9 -1
- package/dist/warp-plan-optimize/SKILL.md +9 -1
- package/dist/warp-plan-scope/SKILL.md +67 -1
- package/dist/warp-plan-security/SKILL.md +578 -35
- package/dist/warp-plan-testdesign/SKILL.md +9 -1
- package/dist/warp-qa-debug/SKILL.md +117 -1
- package/dist/warp-qa-test/SKILL.md +167 -1
- package/dist/warp-release-update/SKILL.md +290 -4
- package/dist/warp-setup/SKILL.md +9 -1
- package/dist/warp-upgrade/SKILL.md +21 -4
- package/package.json +2 -2
- package/shared/project-hooks.json +7 -0
- package/shared/tier1-engineering-constitution.md +9 -1
|
@@ -119,6 +119,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
119
119
|
|
|
120
120
|
## AskUserQuestion
|
|
121
121
|
|
|
122
|
+
**Flow: analysis first, then decision tool.** Present your full reasoning, trade-offs, and recommendations as conversational text — the user wants to read your thinking. Then cap it with AskUserQuestion to formalize the decision. **If you're composing a message with multiple options or "which approach?" language, you MUST end it with AskUserQuestion.** Never present options in prose without the tool.
|
|
123
|
+
|
|
122
124
|
**Contract:**
|
|
123
125
|
1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
|
|
124
126
|
2. **Simplify:** Plain English a smart 16-year-old could follow.
|
|
@@ -140,9 +142,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
140
142
|
Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
|
|
141
143
|
Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
|
|
142
144
|
|
|
145
|
+
**Pre-call checklist (verify before every AskUserQuestion invocation):**
|
|
146
|
+
- ☐ Completeness scores in every option label
|
|
147
|
+
- ☐ Recommended option listed first
|
|
148
|
+
- ☐ One decision per question (split if multiple)
|
|
149
|
+
- ☐ Analysis/reasoning already presented in message text above
|
|
150
|
+
|
|
143
151
|
**Formatting:**
|
|
144
152
|
- *Italics* for emphasis, not **bold** (bold for headers only).
|
|
145
|
-
- After each answer: `✔ Decision {N} recorded
|
|
153
|
+
- After each answer: `✔ Decision {N} recorded`
|
|
146
154
|
- Previews under 8 lines. Full mockups go in conversation text before the question.
|
|
147
155
|
|
|
148
156
|
---
|
package/agents/warp-qa-debug.md
CHANGED
|
@@ -119,6 +119,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
119
119
|
|
|
120
120
|
## AskUserQuestion
|
|
121
121
|
|
|
122
|
+
**Flow: analysis first, then decision tool.** Present your full reasoning, trade-offs, and recommendations as conversational text — the user wants to read your thinking. Then cap it with AskUserQuestion to formalize the decision. **If you're composing a message with multiple options or "which approach?" language, you MUST end it with AskUserQuestion.** Never present options in prose without the tool.
|
|
123
|
+
|
|
122
124
|
**Contract:**
|
|
123
125
|
1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
|
|
124
126
|
2. **Simplify:** Plain English a smart 16-year-old could follow.
|
|
@@ -140,9 +142,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
140
142
|
Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
|
|
141
143
|
Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
|
|
142
144
|
|
|
145
|
+
**Pre-call checklist (verify before every AskUserQuestion invocation):**
|
|
146
|
+
- ☐ Completeness scores in every option label
|
|
147
|
+
- ☐ Recommended option listed first
|
|
148
|
+
- ☐ One decision per question (split if multiple)
|
|
149
|
+
- ☐ Analysis/reasoning already presented in message text above
|
|
150
|
+
|
|
143
151
|
**Formatting:**
|
|
144
152
|
- *Italics* for emphasis, not **bold** (bold for headers only).
|
|
145
|
-
- After each answer: `✔ Decision {N} recorded
|
|
153
|
+
- After each answer: `✔ Decision {N} recorded`
|
|
146
154
|
- Previews under 8 lines. Full mockups go in conversation text before the question.
|
|
147
155
|
|
|
148
156
|
---
|
|
@@ -416,6 +424,36 @@ Do NOT form Hypothesis 4. Instead:
|
|
|
416
424
|
|
|
417
425
|
If after two rounds of 3-strike recovery you still cannot find the root cause, surface the investigation to the user. Show your evidence log. Show your falsified hypotheses. Ask for additional context. The user may know something about the system that is not visible in the code.
|
|
418
426
|
|
|
427
|
+
### 2D. WebSearch for Error Patterns
|
|
428
|
+
|
|
429
|
+
When hypotheses from code analysis are exhausted (3-strike rule triggered), search the web for the error pattern before escalating to the user. This often reveals known framework bugs, version-specific issues, or configuration problems that are not visible in the code.
|
|
430
|
+
|
|
431
|
+
**Sanitization protocol — MANDATORY before any web search:**
|
|
432
|
+
Strip all of the following from the search query:
|
|
433
|
+
- Hostnames, IP addresses, and port numbers
|
|
434
|
+
- Full file paths (use only the filename, not the path)
|
|
435
|
+
- SQL queries or database schema details
|
|
436
|
+
- Customer data, user IDs, or account identifiers
|
|
437
|
+
- API keys, tokens, secrets, or credentials
|
|
438
|
+
- Internal service names (replace with generic terms like "microservice" or "API")
|
|
439
|
+
|
|
440
|
+
**Search strategy:**
|
|
441
|
+
```
|
|
442
|
+
Search query format: "[error message pattern]" + [technology/framework name] + [version if known]
|
|
443
|
+
|
|
444
|
+
Examples:
|
|
445
|
+
BAD: "ECONNREFUSED 10.0.1.42:5432 in /home/deploy/myapp/src/db/pool.ts"
|
|
446
|
+
GOOD: "ECONNREFUSED" postgres connection pool node.js
|
|
447
|
+
|
|
448
|
+
BAD: "TypeError: Cannot read property 'userId' of undefined at /srv/api/auth/session.ts:47"
|
|
449
|
+
GOOD: "TypeError: Cannot read property of undefined" session restore supabase auth
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
**Using search results:**
|
|
453
|
+
- If a known issue or workaround is found, use it to form a new hypothesis (label it clearly as "from web search" in your hypothesis log).
|
|
454
|
+
- If the search reveals a framework bug with a specific version, check whether the project uses that version.
|
|
455
|
+
- Do not blindly apply Stack Overflow fixes. Treat web results as hypothesis fuel, not as solutions. Every web-sourced hypothesis still goes through the standard test-and-falsify process.
|
|
456
|
+
|
|
419
457
|
---
|
|
420
458
|
|
|
421
459
|
## PHASE 3: Isolate
|
|
@@ -479,6 +517,16 @@ ROOT CAUSE:
|
|
|
479
517
|
- If the fix requires refactoring an adjacent function: **do not refactor it**. Fix only what is broken. Schedule the refactor separately.
|
|
480
518
|
- Scope lock is not about being timid. It is about keeping the fix reviewable, git blame meaningful, and the regression test focused.
|
|
481
519
|
|
|
520
|
+
**Scope lock enforcement:**
|
|
521
|
+
1. **Announce the scope lock boundary explicitly:**
|
|
522
|
+
```
|
|
523
|
+
SCOPE LOCK ACTIVE:
|
|
524
|
+
Allowed: [file path(s) that may be edited]
|
|
525
|
+
Blocked: everything else
|
|
526
|
+
```
|
|
527
|
+
2. **Before every edit**, verify the target file is within the declared scope. If you catch yourself about to edit a file outside scope, stop, note the issue in the "Scope notes" section of the debug report, and do not make the edit.
|
|
528
|
+
3. **After committing**, run `git diff HEAD~1 --name-only` and verify every changed file is within the declared scope boundary. If any file is outside scope, the commit is a scope lock violation — revert the out-of-scope changes and recommit.
|
|
529
|
+
|
|
482
530
|
### 3C. Minimal Reproduction Case
|
|
483
531
|
|
|
484
532
|
Before writing the fix, create the minimal reproduction as a failing test:
|
|
@@ -525,6 +573,26 @@ You know the exact root cause. Write the minimum change that addresses it.
|
|
|
525
573
|
| Missing error propagation | Propagate the error; add a test for the error path |
|
|
526
574
|
| Wrong data shape assumed | Fix the assumption; add a type or schema check |
|
|
527
575
|
|
|
576
|
+
### 4A-Gate. 5-File Blast Radius Check
|
|
577
|
+
|
|
578
|
+
Before applying the fix, count the number of files the proposed change will touch. If the fix touches **more than 5 files**, this is a blast radius warning — the fix may be too broad for a scoped debug fix.
|
|
579
|
+
|
|
580
|
+
Present via AskUserQuestion:
|
|
581
|
+
|
|
582
|
+
> This fix touches {N} files, which exceeds the 5-file blast radius threshold. Broad fixes are harder to review, more likely to introduce regressions, and may indicate the root cause is not fully isolated.
|
|
583
|
+
>
|
|
584
|
+
> Files affected:
|
|
585
|
+
> {list of files}
|
|
586
|
+
>
|
|
587
|
+
> - **A) Proceed** — the fix genuinely needs all these files (e.g., renaming a widely-used function, fixing a type that propagates)
|
|
588
|
+
> - **B) Split** — break the fix into smaller, independently committable changes that can each be verified
|
|
589
|
+
> - **C) Rethink** — the fix is too broad, go back to Phase 2 (Hypothesize) and consider whether the root cause is actually narrower than assumed
|
|
590
|
+
|
|
591
|
+
If B: plan the split before writing any code. Each sub-fix should have its own regression test and commit.
|
|
592
|
+
If C: return to Phase 2 with the observation that "fix breadth suggests the root cause may be a symptom of a deeper issue."
|
|
593
|
+
|
|
594
|
+
This gate does NOT apply to test files — only production code files count toward the 5-file threshold. A fix that changes 2 production files and 4 test files is fine.
|
|
595
|
+
|
|
528
596
|
### 4B. Regression Test Passes
|
|
529
597
|
|
|
530
598
|
```bash
|
|
@@ -588,6 +656,54 @@ Verification:
|
|
|
588
656
|
- [ ] Fix does not change behavior for previously working cases
|
|
589
657
|
|
|
590
658
|
Scope notes: [any adjacent issues noted but NOT fixed — filed separately]
|
|
659
|
+
|
|
660
|
+
Status: [DONE | DONE_WITH_CONCERNS | BLOCKED]
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
### 4D-Status. Completion Status Taxonomy
|
|
664
|
+
|
|
665
|
+
Every debug session ends with a formal completion status. This status goes in the debug report AND is announced to the user as the final output.
|
|
666
|
+
|
|
667
|
+
| Status | Meaning | Required Information |
|
|
668
|
+
|--------|---------|---------------------|
|
|
669
|
+
| **DONE** | Root cause found, fix applied, regression test passes, full suite green. | Root cause statement, commit hash, regression test name. |
|
|
670
|
+
| **DONE_WITH_CONCERNS** | Root cause found and fixed, but secondary issues were observed during investigation that may need attention. | Root cause statement, commit hash, regression test name, plus a numbered list of concerns with severity estimates. |
|
|
671
|
+
| **BLOCKED** | Cannot determine root cause with available information. Investigation halted. | List of hypotheses tested and falsified, evidence collected, specific information or access needed to continue. |
|
|
672
|
+
|
|
673
|
+
**DONE example:**
|
|
674
|
+
```
|
|
675
|
+
STATUS: DONE
|
|
676
|
+
Root cause: Missing `session` dependency in useEffect array (useTrips.ts:31)
|
|
677
|
+
Fix: commit abc1234
|
|
678
|
+
Regression test: "refetches trips when session changes" in useTrips.test.ts
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
**DONE_WITH_CONCERNS example:**
|
|
682
|
+
```
|
|
683
|
+
STATUS: DONE_WITH_CONCERNS
|
|
684
|
+
Root cause: Missing `session` dependency in useEffect array (useTrips.ts:31)
|
|
685
|
+
Fix: commit abc1234
|
|
686
|
+
Regression test: "refetches trips when session changes" in useTrips.test.ts
|
|
687
|
+
Concerns:
|
|
688
|
+
1. useFlights.ts has the same missing dependency pattern (medium risk)
|
|
689
|
+
2. Session restore takes 200ms+ which causes a visible flash of empty state (low, UX)
|
|
690
|
+
3. No error boundary around the trips fetch — a network failure would crash the screen (high)
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
**BLOCKED example:**
|
|
694
|
+
```
|
|
695
|
+
STATUS: BLOCKED
|
|
696
|
+
Hypotheses tested:
|
|
697
|
+
1. Race condition in auth flow → falsified (timing is correct per logs)
|
|
698
|
+
2. RLS policy misconfigured → falsified (direct query returns correct data)
|
|
699
|
+
3. Cache serving stale data → falsified (cache is empty on first launch)
|
|
700
|
+
Evidence collected:
|
|
701
|
+
- Logs show fetch completes with 0 rows before session restore
|
|
702
|
+
- Database contains correct data for the user
|
|
703
|
+
- Issue only occurs on first launch, never on subsequent opens
|
|
704
|
+
Needed to continue:
|
|
705
|
+
- Access to Supabase real-time subscription logs (not available locally)
|
|
706
|
+
- Reproduction on a physical device (currently only reproducible in simulator)
|
|
591
707
|
```
|
|
592
708
|
|
|
593
709
|
### 4E. Commit
|
package/agents/warp-qa-test.md
CHANGED
|
@@ -119,6 +119,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
119
119
|
|
|
120
120
|
## AskUserQuestion
|
|
121
121
|
|
|
122
|
+
**Flow: analysis first, then decision tool.** Present your full reasoning, trade-offs, and recommendations as conversational text — the user wants to read your thinking. Then cap it with AskUserQuestion to formalize the decision. **If you're composing a message with multiple options or "which approach?" language, you MUST end it with AskUserQuestion.** Never present options in prose without the tool.
|
|
123
|
+
|
|
122
124
|
**Contract:**
|
|
123
125
|
1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
|
|
124
126
|
2. **Simplify:** Plain English a smart 16-year-old could follow.
|
|
@@ -140,9 +142,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
140
142
|
Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
|
|
141
143
|
Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
|
|
142
144
|
|
|
145
|
+
**Pre-call checklist (verify before every AskUserQuestion invocation):**
|
|
146
|
+
- ☐ Completeness scores in every option label
|
|
147
|
+
- ☐ Recommended option listed first
|
|
148
|
+
- ☐ One decision per question (split if multiple)
|
|
149
|
+
- ☐ Analysis/reasoning already presented in message text above
|
|
150
|
+
|
|
143
151
|
**Formatting:**
|
|
144
152
|
- *Italics* for emphasis, not **bold** (bold for headers only).
|
|
145
|
-
- After each answer: `✔ Decision {N} recorded
|
|
153
|
+
- After each answer: `✔ Decision {N} recorded`
|
|
146
154
|
- Previews under 8 lines. Full mockups go in conversation text before the question.
|
|
147
155
|
|
|
148
156
|
---
|
|
@@ -279,6 +287,28 @@ Via AskUserQuestion, ask:
|
|
|
279
287
|
|
|
280
288
|
**Goal:** Understand what was built, what was tested, and what changed since the last QA pass.
|
|
281
289
|
|
|
290
|
+
### 1-Pre. Clean Working Tree Check
|
|
291
|
+
|
|
292
|
+
Before any testing, verify the working tree is clean:
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
git status --porcelain
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
If the output is non-empty (uncommitted changes exist), present via AskUserQuestion:
|
|
299
|
+
|
|
300
|
+
> Your working tree has uncommitted changes. Test results may reflect code that is not committed, making them harder to reproduce later.
|
|
301
|
+
>
|
|
302
|
+
> - **A) Commit first** — commit the current changes, then run QA against the committed state
|
|
303
|
+
> - **B) Stash changes** — stash uncommitted work (`git stash`), run QA against the last commit, restore after
|
|
304
|
+
> - **C) Proceed anyway** — run QA as-is (risk: results may include uncommitted changes that are lost later)
|
|
305
|
+
>
|
|
306
|
+
> RECOMMENDATION: Choose A. QA results should always be reproducible from a specific commit.
|
|
307
|
+
|
|
308
|
+
If A: guide the user through a commit (or defer to `/warp-release-update` if they want a full ship flow).
|
|
309
|
+
If B: run `git stash`, proceed with QA, and remind the user to `git stash pop` after QA completes.
|
|
310
|
+
If C: note in the QA report header: `⚠ QA ran against dirty working tree — results may not be reproducible.`
|
|
311
|
+
|
|
282
312
|
### 1A. Read Pipeline Artifacts
|
|
283
313
|
|
|
284
314
|
From `.warp/reports/planning/testspec.md`:
|
|
@@ -337,6 +367,35 @@ ENVIRONMENT CHECK:
|
|
|
337
367
|
|
|
338
368
|
If any environment check fails, report as a blocking bug. Do not proceed with manual testing against a broken build.
|
|
339
369
|
|
|
370
|
+
### 1D. Diff-Aware Mode
|
|
371
|
+
|
|
372
|
+
When on a feature branch with no explicit URL or test scope provided by the user, auto-scope QA to the diff against the base branch:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Detect base branch (try main, then master, then fall back to HEAD~10)
|
|
376
|
+
BASE_BRANCH=$(git rev-parse --verify main 2>/dev/null && echo "main" || (git rev-parse --verify master 2>/dev/null && echo "master" || echo "HEAD~10"))
|
|
377
|
+
|
|
378
|
+
# Get changed files since branching
|
|
379
|
+
git diff ${BASE_BRANCH}...HEAD --name-only
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
Use the changed file list to:
|
|
383
|
+
1. **Prioritize testing** — test areas touched by the diff first, before broader regression checks.
|
|
384
|
+
2. **Scope edge cases** — focus negative testing and edge case testing on the changed code paths.
|
|
385
|
+
3. **Identify blast radius** — determine which features could be affected by the changes (adjacent modules, shared utilities, downstream consumers).
|
|
386
|
+
|
|
387
|
+
```
|
|
388
|
+
DIFF-AWARE SCOPE:
|
|
389
|
+
Branch: [current branch name]
|
|
390
|
+
Base: [base branch]
|
|
391
|
+
Files changed: [N]
|
|
392
|
+
Packages affected: [list]
|
|
393
|
+
Primary test focus: [areas directly changed]
|
|
394
|
+
Blast radius: [areas indirectly affected]
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
If the user provides an explicit URL or test scope, skip diff-aware mode and use their scope instead. If on the main/master branch (no feature branch), skip diff-aware mode and test the full scope from testspec.md.
|
|
398
|
+
|
|
340
399
|
---
|
|
341
400
|
|
|
342
401
|
## PHASE 2: Smoke Test
|
|
@@ -394,6 +453,48 @@ If PASS:
|
|
|
394
453
|
|
|
395
454
|
---
|
|
396
455
|
|
|
456
|
+
## FIX-DURING-QA MODE (Optional)
|
|
457
|
+
|
|
458
|
+
By default, QA operates in **report mode**: document every bug, fix nothing, hand off to the next phase. This is the correct default because fixing during QA creates a moving target.
|
|
459
|
+
|
|
460
|
+
However, for small projects, solo developers, or when the user requests it, **fix mode** is available. When a bug is found in fix mode, QA pauses testing to fix the bug immediately before continuing.
|
|
461
|
+
|
|
462
|
+
**Activation:** Fix mode is only activated when the user explicitly requests it (e.g., "fix bugs as you find them" or "qa and fix"). Never activate fix mode without user consent.
|
|
463
|
+
|
|
464
|
+
### Report Mode (default)
|
|
465
|
+
Document the bug using the standard bug format. Continue testing. All bugs are fixed in the next phase.
|
|
466
|
+
|
|
467
|
+
### Fix Mode
|
|
468
|
+
When a bug is found:
|
|
469
|
+
|
|
470
|
+
1. **Pause testing.** Do not continue to the next test case.
|
|
471
|
+
2. **Fix the bug** with an atomic commit: `fix(qa): [one-line description of root cause]`
|
|
472
|
+
3. **Write a regression test** that reproduces the bug and verifies the fix.
|
|
473
|
+
4. **Re-verify** the fix does not break any previously passing tests.
|
|
474
|
+
5. **Resume testing** from where you left off.
|
|
475
|
+
|
|
476
|
+
### WTF-Likelihood Heuristic (Fix Mode Only)
|
|
477
|
+
|
|
478
|
+
Track a rolling risk score that measures how likely the fix-during-QA approach is going off the rails:
|
|
479
|
+
|
|
480
|
+
| Event | Score Impact |
|
|
481
|
+
|-------|-------------|
|
|
482
|
+
| Fix requires a revert of a previous fix-during-QA commit | +15% |
|
|
483
|
+
| Fix touches more than 3 files | +5% |
|
|
484
|
+
| Fix touches files unrelated to the feature under test | +20% |
|
|
485
|
+
| Fix passes all tests on first attempt | -5% |
|
|
486
|
+
| Fix is a one-line change | -3% |
|
|
487
|
+
|
|
488
|
+
**Soft gate at 20%:** Present via AskUserQuestion:
|
|
489
|
+
> Fix-during-QA risk score is {score}%. Fixes are getting complex or reverting each other. Options:
|
|
490
|
+
> - **A) Switch to report mode** — stop fixing, document remaining bugs for the next phase
|
|
491
|
+
> - **B) Continue fixing** — you understand the risk and want to keep going
|
|
492
|
+
> - **C) Revert all fix-during-QA commits** — undo all QA fixes, switch to report mode, start fresh
|
|
493
|
+
|
|
494
|
+
**Hard cap at 50 fixes:** If 50 bugs have been fixed during a single QA session, force-switch to report mode regardless of risk score. This many fixes means the build was not ready for QA.
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
397
498
|
## PHASE 3: Functional Test
|
|
398
499
|
|
|
399
500
|
**Goal:** Systematically verify every AC from the testspec. This is the core of QA.
|
|
@@ -422,6 +523,40 @@ AC VERIFICATION:
|
|
|
422
523
|
...
|
|
423
524
|
```
|
|
424
525
|
|
|
526
|
+
### Test Stub Suggestions
|
|
527
|
+
|
|
528
|
+
For every bug found (in any phase), include a skeleton test that would catch this bug if it regressed. Use the project's detected test framework from `.warp/warp-tools.json` (e.g., Jest, Vitest, Playwright, pytest). If no test framework is detected, use a generic pseudocode format.
|
|
529
|
+
|
|
530
|
+
**Extended bug report format:**
|
|
531
|
+
|
|
532
|
+
```
|
|
533
|
+
BUG: [description]
|
|
534
|
+
Severity: [critical/high/medium/low/cosmetic]
|
|
535
|
+
Repro:
|
|
536
|
+
1. [step]
|
|
537
|
+
2. [step]
|
|
538
|
+
3. [observe: what happens]
|
|
539
|
+
Expected: [what should happen]
|
|
540
|
+
Actual: [what actually happens]
|
|
541
|
+
Suggested test:
|
|
542
|
+
```[language]
|
|
543
|
+
test('[description in past tense — e.g., displayed stale data after reconnect]', () => {
|
|
544
|
+
// Setup: [describe the precondition]
|
|
545
|
+
// Action: [describe the trigger]
|
|
546
|
+
// Assert: [describe what to verify]
|
|
547
|
+
});
|
|
548
|
+
```
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
**Guidelines for test stubs:**
|
|
552
|
+
- Name the test in past tense describing the bug (e.g., `"crashed when input was empty"`)
|
|
553
|
+
- Include setup, action, and assertion comments even if the implementation is not filled in
|
|
554
|
+
- Match the project's existing test patterns (file location, import style, assertion library)
|
|
555
|
+
- For visual bugs, suggest a screenshot comparison test if Playwright or similar is available
|
|
556
|
+
- For accessibility bugs, suggest an axe-core assertion
|
|
557
|
+
|
|
558
|
+
This format applies to ALL bug reports across all phases (smoke test, functional, visual, accessibility, cross-platform). The test stub is a gift to the developer who fixes the bug — it tells them exactly how to verify the fix.
|
|
559
|
+
|
|
425
560
|
### 3B. Edge Case Testing
|
|
426
561
|
|
|
427
562
|
For each edge case enumerated in the testspec, test it:
|
|
@@ -1047,6 +1182,37 @@ Create the file if it doesn't exist. Append to it if it does (other QA skills ma
|
|
|
1047
1182
|
|
|
1048
1183
|
---
|
|
1049
1184
|
|
|
1185
|
+
## TODOS.md INTEGRATION
|
|
1186
|
+
|
|
1187
|
+
After QA completes and the report is written, check for a `TODOS.md` file in the project root.
|
|
1188
|
+
|
|
1189
|
+
### Cross-reference existing TODOs
|
|
1190
|
+
|
|
1191
|
+
If `TODOS.md` exists, read it and cross-reference against bugs found:
|
|
1192
|
+
- Are any open TODO items related to bugs discovered during QA? If so, annotate those TODOs with the QA finding (e.g., `— confirmed as bug in qa-report, severity: high`).
|
|
1193
|
+
- Are any TODOs already fixed by the current build? If so, suggest marking them complete.
|
|
1194
|
+
|
|
1195
|
+
### Offer to add deferred bugs
|
|
1196
|
+
|
|
1197
|
+
After the QA report is approved, present via AskUserQuestion if there are medium or low severity bugs that are not ship-blockers:
|
|
1198
|
+
|
|
1199
|
+
> QA found {N} medium/low severity bugs that do not block shipping. Want to add them to TODOS.md for future fixes?
|
|
1200
|
+
>
|
|
1201
|
+
> - **A) Yes — add all deferred bugs** to TODOS.md with severity and QA date
|
|
1202
|
+
> - **B) Let me pick** — show the list and I will choose which to add
|
|
1203
|
+
> - **C) No** — the QA report is sufficient, skip TODOS.md
|
|
1204
|
+
|
|
1205
|
+
**Format for TODOS.md entries:**
|
|
1206
|
+
```
|
|
1207
|
+
- [ ] [severity] [bug description] — from qa-test ({date})
|
|
1208
|
+
```
|
|
1209
|
+
|
|
1210
|
+
Only offer this for bugs that are NOT critical or high severity. Critical and high bugs must be fixed before shipping — they do not belong in a TODO list.
|
|
1211
|
+
|
|
1212
|
+
If no `TODOS.md` exists, do not create one. Mention in the QA summary that deferred bugs are documented in the QA report for future reference.
|
|
1213
|
+
|
|
1214
|
+
---
|
|
1215
|
+
|
|
1050
1216
|
## NEXT STEP
|
|
1051
1217
|
|
|
1052
1218
|
After `.warp/reports/qatesting/qa-report.md` is APPROVED:
|