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
|
@@ -135,6 +135,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
135
135
|
|
|
136
136
|
## AskUserQuestion
|
|
137
137
|
|
|
138
|
+
**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.
|
|
139
|
+
|
|
138
140
|
**Contract:**
|
|
139
141
|
1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
|
|
140
142
|
2. **Simplify:** Plain English a smart 16-year-old could follow.
|
|
@@ -156,9 +158,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
156
158
|
Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
|
|
157
159
|
Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
|
|
158
160
|
|
|
161
|
+
**Pre-call checklist (verify before every AskUserQuestion invocation):**
|
|
162
|
+
- ☐ Completeness scores in every option label
|
|
163
|
+
- ☐ Recommended option listed first
|
|
164
|
+
- ☐ One decision per question (split if multiple)
|
|
165
|
+
- ☐ Analysis/reasoning already presented in message text above
|
|
166
|
+
|
|
159
167
|
**Formatting:**
|
|
160
168
|
- *Italics* for emphasis, not **bold** (bold for headers only).
|
|
161
|
-
- After each answer: `✔ Decision {N} recorded
|
|
169
|
+
- After each answer: `✔ Decision {N} recorded`
|
|
162
170
|
- Previews under 8 lines. Full mockups go in conversation text before the question.
|
|
163
171
|
|
|
164
172
|
---
|
|
@@ -131,6 +131,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
131
131
|
|
|
132
132
|
## AskUserQuestion
|
|
133
133
|
|
|
134
|
+
**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.
|
|
135
|
+
|
|
134
136
|
**Contract:**
|
|
135
137
|
1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
|
|
136
138
|
2. **Simplify:** Plain English a smart 16-year-old could follow.
|
|
@@ -152,9 +154,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
152
154
|
Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
|
|
153
155
|
Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
|
|
154
156
|
|
|
157
|
+
**Pre-call checklist (verify before every AskUserQuestion invocation):**
|
|
158
|
+
- ☐ Completeness scores in every option label
|
|
159
|
+
- ☐ Recommended option listed first
|
|
160
|
+
- ☐ One decision per question (split if multiple)
|
|
161
|
+
- ☐ Analysis/reasoning already presented in message text above
|
|
162
|
+
|
|
155
163
|
**Formatting:**
|
|
156
164
|
- *Italics* for emphasis, not **bold** (bold for headers only).
|
|
157
|
-
- After each answer: `✔ Decision {N} recorded
|
|
165
|
+
- After each answer: `✔ Decision {N} recorded`
|
|
158
166
|
- Previews under 8 lines. Full mockups go in conversation text before the question.
|
|
159
167
|
|
|
160
168
|
---
|
|
@@ -428,6 +436,36 @@ Do NOT form Hypothesis 4. Instead:
|
|
|
428
436
|
|
|
429
437
|
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.
|
|
430
438
|
|
|
439
|
+
### 2D. WebSearch for Error Patterns
|
|
440
|
+
|
|
441
|
+
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.
|
|
442
|
+
|
|
443
|
+
**Sanitization protocol — MANDATORY before any web search:**
|
|
444
|
+
Strip all of the following from the search query:
|
|
445
|
+
- Hostnames, IP addresses, and port numbers
|
|
446
|
+
- Full file paths (use only the filename, not the path)
|
|
447
|
+
- SQL queries or database schema details
|
|
448
|
+
- Customer data, user IDs, or account identifiers
|
|
449
|
+
- API keys, tokens, secrets, or credentials
|
|
450
|
+
- Internal service names (replace with generic terms like "microservice" or "API")
|
|
451
|
+
|
|
452
|
+
**Search strategy:**
|
|
453
|
+
```
|
|
454
|
+
Search query format: "[error message pattern]" + [technology/framework name] + [version if known]
|
|
455
|
+
|
|
456
|
+
Examples:
|
|
457
|
+
BAD: "ECONNREFUSED 10.0.1.42:5432 in /home/deploy/myapp/src/db/pool.ts"
|
|
458
|
+
GOOD: "ECONNREFUSED" postgres connection pool node.js
|
|
459
|
+
|
|
460
|
+
BAD: "TypeError: Cannot read property 'userId' of undefined at /srv/api/auth/session.ts:47"
|
|
461
|
+
GOOD: "TypeError: Cannot read property of undefined" session restore supabase auth
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
**Using search results:**
|
|
465
|
+
- 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).
|
|
466
|
+
- If the search reveals a framework bug with a specific version, check whether the project uses that version.
|
|
467
|
+
- 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.
|
|
468
|
+
|
|
431
469
|
---
|
|
432
470
|
|
|
433
471
|
## PHASE 3: Isolate
|
|
@@ -491,6 +529,16 @@ ROOT CAUSE:
|
|
|
491
529
|
- If the fix requires refactoring an adjacent function: **do not refactor it**. Fix only what is broken. Schedule the refactor separately.
|
|
492
530
|
- Scope lock is not about being timid. It is about keeping the fix reviewable, git blame meaningful, and the regression test focused.
|
|
493
531
|
|
|
532
|
+
**Scope lock enforcement:**
|
|
533
|
+
1. **Announce the scope lock boundary explicitly:**
|
|
534
|
+
```
|
|
535
|
+
SCOPE LOCK ACTIVE:
|
|
536
|
+
Allowed: [file path(s) that may be edited]
|
|
537
|
+
Blocked: everything else
|
|
538
|
+
```
|
|
539
|
+
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.
|
|
540
|
+
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.
|
|
541
|
+
|
|
494
542
|
### 3C. Minimal Reproduction Case
|
|
495
543
|
|
|
496
544
|
Before writing the fix, create the minimal reproduction as a failing test:
|
|
@@ -537,6 +585,26 @@ You know the exact root cause. Write the minimum change that addresses it.
|
|
|
537
585
|
| Missing error propagation | Propagate the error; add a test for the error path |
|
|
538
586
|
| Wrong data shape assumed | Fix the assumption; add a type or schema check |
|
|
539
587
|
|
|
588
|
+
### 4A-Gate. 5-File Blast Radius Check
|
|
589
|
+
|
|
590
|
+
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.
|
|
591
|
+
|
|
592
|
+
Present via AskUserQuestion:
|
|
593
|
+
|
|
594
|
+
> 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.
|
|
595
|
+
>
|
|
596
|
+
> Files affected:
|
|
597
|
+
> {list of files}
|
|
598
|
+
>
|
|
599
|
+
> - **A) Proceed** — the fix genuinely needs all these files (e.g., renaming a widely-used function, fixing a type that propagates)
|
|
600
|
+
> - **B) Split** — break the fix into smaller, independently committable changes that can each be verified
|
|
601
|
+
> - **C) Rethink** — the fix is too broad, go back to Phase 2 (Hypothesize) and consider whether the root cause is actually narrower than assumed
|
|
602
|
+
|
|
603
|
+
If B: plan the split before writing any code. Each sub-fix should have its own regression test and commit.
|
|
604
|
+
If C: return to Phase 2 with the observation that "fix breadth suggests the root cause may be a symptom of a deeper issue."
|
|
605
|
+
|
|
606
|
+
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.
|
|
607
|
+
|
|
540
608
|
### 4B. Regression Test Passes
|
|
541
609
|
|
|
542
610
|
```bash
|
|
@@ -600,6 +668,54 @@ Verification:
|
|
|
600
668
|
- [ ] Fix does not change behavior for previously working cases
|
|
601
669
|
|
|
602
670
|
Scope notes: [any adjacent issues noted but NOT fixed — filed separately]
|
|
671
|
+
|
|
672
|
+
Status: [DONE | DONE_WITH_CONCERNS | BLOCKED]
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### 4D-Status. Completion Status Taxonomy
|
|
676
|
+
|
|
677
|
+
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.
|
|
678
|
+
|
|
679
|
+
| Status | Meaning | Required Information |
|
|
680
|
+
|--------|---------|---------------------|
|
|
681
|
+
| **DONE** | Root cause found, fix applied, regression test passes, full suite green. | Root cause statement, commit hash, regression test name. |
|
|
682
|
+
| **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. |
|
|
683
|
+
| **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. |
|
|
684
|
+
|
|
685
|
+
**DONE example:**
|
|
686
|
+
```
|
|
687
|
+
STATUS: DONE
|
|
688
|
+
Root cause: Missing `session` dependency in useEffect array (useTrips.ts:31)
|
|
689
|
+
Fix: commit abc1234
|
|
690
|
+
Regression test: "refetches trips when session changes" in useTrips.test.ts
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
**DONE_WITH_CONCERNS example:**
|
|
694
|
+
```
|
|
695
|
+
STATUS: DONE_WITH_CONCERNS
|
|
696
|
+
Root cause: Missing `session` dependency in useEffect array (useTrips.ts:31)
|
|
697
|
+
Fix: commit abc1234
|
|
698
|
+
Regression test: "refetches trips when session changes" in useTrips.test.ts
|
|
699
|
+
Concerns:
|
|
700
|
+
1. useFlights.ts has the same missing dependency pattern (medium risk)
|
|
701
|
+
2. Session restore takes 200ms+ which causes a visible flash of empty state (low, UX)
|
|
702
|
+
3. No error boundary around the trips fetch — a network failure would crash the screen (high)
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
**BLOCKED example:**
|
|
706
|
+
```
|
|
707
|
+
STATUS: BLOCKED
|
|
708
|
+
Hypotheses tested:
|
|
709
|
+
1. Race condition in auth flow → falsified (timing is correct per logs)
|
|
710
|
+
2. RLS policy misconfigured → falsified (direct query returns correct data)
|
|
711
|
+
3. Cache serving stale data → falsified (cache is empty on first launch)
|
|
712
|
+
Evidence collected:
|
|
713
|
+
- Logs show fetch completes with 0 rows before session restore
|
|
714
|
+
- Database contains correct data for the user
|
|
715
|
+
- Issue only occurs on first launch, never on subsequent opens
|
|
716
|
+
Needed to continue:
|
|
717
|
+
- Access to Supabase real-time subscription logs (not available locally)
|
|
718
|
+
- Reproduction on a physical device (currently only reproducible in simulator)
|
|
603
719
|
```
|
|
604
720
|
|
|
605
721
|
### 4E. Commit
|
|
@@ -135,6 +135,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
135
135
|
|
|
136
136
|
## AskUserQuestion
|
|
137
137
|
|
|
138
|
+
**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.
|
|
139
|
+
|
|
138
140
|
**Contract:**
|
|
139
141
|
1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
|
|
140
142
|
2. **Simplify:** Plain English a smart 16-year-old could follow.
|
|
@@ -156,9 +158,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
|
|
|
156
158
|
Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
|
|
157
159
|
Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
|
|
158
160
|
|
|
161
|
+
**Pre-call checklist (verify before every AskUserQuestion invocation):**
|
|
162
|
+
- ☐ Completeness scores in every option label
|
|
163
|
+
- ☐ Recommended option listed first
|
|
164
|
+
- ☐ One decision per question (split if multiple)
|
|
165
|
+
- ☐ Analysis/reasoning already presented in message text above
|
|
166
|
+
|
|
159
167
|
**Formatting:**
|
|
160
168
|
- *Italics* for emphasis, not **bold** (bold for headers only).
|
|
161
|
-
- After each answer: `✔ Decision {N} recorded
|
|
169
|
+
- After each answer: `✔ Decision {N} recorded`
|
|
162
170
|
- Previews under 8 lines. Full mockups go in conversation text before the question.
|
|
163
171
|
|
|
164
172
|
---
|
|
@@ -295,6 +303,28 @@ Via AskUserQuestion, ask:
|
|
|
295
303
|
|
|
296
304
|
**Goal:** Understand what was built, what was tested, and what changed since the last QA pass.
|
|
297
305
|
|
|
306
|
+
### 1-Pre. Clean Working Tree Check
|
|
307
|
+
|
|
308
|
+
Before any testing, verify the working tree is clean:
|
|
309
|
+
|
|
310
|
+
```bash
|
|
311
|
+
git status --porcelain
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
If the output is non-empty (uncommitted changes exist), present via AskUserQuestion:
|
|
315
|
+
|
|
316
|
+
> Your working tree has uncommitted changes. Test results may reflect code that is not committed, making them harder to reproduce later.
|
|
317
|
+
>
|
|
318
|
+
> - **A) Commit first** — commit the current changes, then run QA against the committed state
|
|
319
|
+
> - **B) Stash changes** — stash uncommitted work (`git stash`), run QA against the last commit, restore after
|
|
320
|
+
> - **C) Proceed anyway** — run QA as-is (risk: results may include uncommitted changes that are lost later)
|
|
321
|
+
>
|
|
322
|
+
> RECOMMENDATION: Choose A. QA results should always be reproducible from a specific commit.
|
|
323
|
+
|
|
324
|
+
If A: guide the user through a commit (or defer to `/warp-release-update` if they want a full ship flow).
|
|
325
|
+
If B: run `git stash`, proceed with QA, and remind the user to `git stash pop` after QA completes.
|
|
326
|
+
If C: note in the QA report header: `⚠ QA ran against dirty working tree — results may not be reproducible.`
|
|
327
|
+
|
|
298
328
|
### 1A. Read Pipeline Artifacts
|
|
299
329
|
|
|
300
330
|
From `.warp/reports/planning/testspec.md`:
|
|
@@ -353,6 +383,35 @@ ENVIRONMENT CHECK:
|
|
|
353
383
|
|
|
354
384
|
If any environment check fails, report as a blocking bug. Do not proceed with manual testing against a broken build.
|
|
355
385
|
|
|
386
|
+
### 1D. Diff-Aware Mode
|
|
387
|
+
|
|
388
|
+
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:
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Detect base branch (try main, then master, then fall back to HEAD~10)
|
|
392
|
+
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"))
|
|
393
|
+
|
|
394
|
+
# Get changed files since branching
|
|
395
|
+
git diff ${BASE_BRANCH}...HEAD --name-only
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Use the changed file list to:
|
|
399
|
+
1. **Prioritize testing** — test areas touched by the diff first, before broader regression checks.
|
|
400
|
+
2. **Scope edge cases** — focus negative testing and edge case testing on the changed code paths.
|
|
401
|
+
3. **Identify blast radius** — determine which features could be affected by the changes (adjacent modules, shared utilities, downstream consumers).
|
|
402
|
+
|
|
403
|
+
```
|
|
404
|
+
DIFF-AWARE SCOPE:
|
|
405
|
+
Branch: [current branch name]
|
|
406
|
+
Base: [base branch]
|
|
407
|
+
Files changed: [N]
|
|
408
|
+
Packages affected: [list]
|
|
409
|
+
Primary test focus: [areas directly changed]
|
|
410
|
+
Blast radius: [areas indirectly affected]
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
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.
|
|
414
|
+
|
|
356
415
|
---
|
|
357
416
|
|
|
358
417
|
## PHASE 2: Smoke Test
|
|
@@ -410,6 +469,48 @@ If PASS:
|
|
|
410
469
|
|
|
411
470
|
---
|
|
412
471
|
|
|
472
|
+
## FIX-DURING-QA MODE (Optional)
|
|
473
|
+
|
|
474
|
+
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.
|
|
475
|
+
|
|
476
|
+
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.
|
|
477
|
+
|
|
478
|
+
**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.
|
|
479
|
+
|
|
480
|
+
### Report Mode (default)
|
|
481
|
+
Document the bug using the standard bug format. Continue testing. All bugs are fixed in the next phase.
|
|
482
|
+
|
|
483
|
+
### Fix Mode
|
|
484
|
+
When a bug is found:
|
|
485
|
+
|
|
486
|
+
1. **Pause testing.** Do not continue to the next test case.
|
|
487
|
+
2. **Fix the bug** with an atomic commit: `fix(qa): [one-line description of root cause]`
|
|
488
|
+
3. **Write a regression test** that reproduces the bug and verifies the fix.
|
|
489
|
+
4. **Re-verify** the fix does not break any previously passing tests.
|
|
490
|
+
5. **Resume testing** from where you left off.
|
|
491
|
+
|
|
492
|
+
### WTF-Likelihood Heuristic (Fix Mode Only)
|
|
493
|
+
|
|
494
|
+
Track a rolling risk score that measures how likely the fix-during-QA approach is going off the rails:
|
|
495
|
+
|
|
496
|
+
| Event | Score Impact |
|
|
497
|
+
|-------|-------------|
|
|
498
|
+
| Fix requires a revert of a previous fix-during-QA commit | +15% |
|
|
499
|
+
| Fix touches more than 3 files | +5% |
|
|
500
|
+
| Fix touches files unrelated to the feature under test | +20% |
|
|
501
|
+
| Fix passes all tests on first attempt | -5% |
|
|
502
|
+
| Fix is a one-line change | -3% |
|
|
503
|
+
|
|
504
|
+
**Soft gate at 20%:** Present via AskUserQuestion:
|
|
505
|
+
> Fix-during-QA risk score is {score}%. Fixes are getting complex or reverting each other. Options:
|
|
506
|
+
> - **A) Switch to report mode** — stop fixing, document remaining bugs for the next phase
|
|
507
|
+
> - **B) Continue fixing** — you understand the risk and want to keep going
|
|
508
|
+
> - **C) Revert all fix-during-QA commits** — undo all QA fixes, switch to report mode, start fresh
|
|
509
|
+
|
|
510
|
+
**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.
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
413
514
|
## PHASE 3: Functional Test
|
|
414
515
|
|
|
415
516
|
**Goal:** Systematically verify every AC from the testspec. This is the core of QA.
|
|
@@ -438,6 +539,40 @@ AC VERIFICATION:
|
|
|
438
539
|
...
|
|
439
540
|
```
|
|
440
541
|
|
|
542
|
+
### Test Stub Suggestions
|
|
543
|
+
|
|
544
|
+
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.
|
|
545
|
+
|
|
546
|
+
**Extended bug report format:**
|
|
547
|
+
|
|
548
|
+
```
|
|
549
|
+
BUG: [description]
|
|
550
|
+
Severity: [critical/high/medium/low/cosmetic]
|
|
551
|
+
Repro:
|
|
552
|
+
1. [step]
|
|
553
|
+
2. [step]
|
|
554
|
+
3. [observe: what happens]
|
|
555
|
+
Expected: [what should happen]
|
|
556
|
+
Actual: [what actually happens]
|
|
557
|
+
Suggested test:
|
|
558
|
+
```[language]
|
|
559
|
+
test('[description in past tense — e.g., displayed stale data after reconnect]', () => {
|
|
560
|
+
// Setup: [describe the precondition]
|
|
561
|
+
// Action: [describe the trigger]
|
|
562
|
+
// Assert: [describe what to verify]
|
|
563
|
+
});
|
|
564
|
+
```
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
**Guidelines for test stubs:**
|
|
568
|
+
- Name the test in past tense describing the bug (e.g., `"crashed when input was empty"`)
|
|
569
|
+
- Include setup, action, and assertion comments even if the implementation is not filled in
|
|
570
|
+
- Match the project's existing test patterns (file location, import style, assertion library)
|
|
571
|
+
- For visual bugs, suggest a screenshot comparison test if Playwright or similar is available
|
|
572
|
+
- For accessibility bugs, suggest an axe-core assertion
|
|
573
|
+
|
|
574
|
+
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.
|
|
575
|
+
|
|
441
576
|
### 3B. Edge Case Testing
|
|
442
577
|
|
|
443
578
|
For each edge case enumerated in the testspec, test it:
|
|
@@ -1063,6 +1198,37 @@ Create the file if it doesn't exist. Append to it if it does (other QA skills ma
|
|
|
1063
1198
|
|
|
1064
1199
|
---
|
|
1065
1200
|
|
|
1201
|
+
## TODOS.md INTEGRATION
|
|
1202
|
+
|
|
1203
|
+
After QA completes and the report is written, check for a `TODOS.md` file in the project root.
|
|
1204
|
+
|
|
1205
|
+
### Cross-reference existing TODOs
|
|
1206
|
+
|
|
1207
|
+
If `TODOS.md` exists, read it and cross-reference against bugs found:
|
|
1208
|
+
- 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`).
|
|
1209
|
+
- Are any TODOs already fixed by the current build? If so, suggest marking them complete.
|
|
1210
|
+
|
|
1211
|
+
### Offer to add deferred bugs
|
|
1212
|
+
|
|
1213
|
+
After the QA report is approved, present via AskUserQuestion if there are medium or low severity bugs that are not ship-blockers:
|
|
1214
|
+
|
|
1215
|
+
> QA found {N} medium/low severity bugs that do not block shipping. Want to add them to TODOS.md for future fixes?
|
|
1216
|
+
>
|
|
1217
|
+
> - **A) Yes — add all deferred bugs** to TODOS.md with severity and QA date
|
|
1218
|
+
> - **B) Let me pick** — show the list and I will choose which to add
|
|
1219
|
+
> - **C) No** — the QA report is sufficient, skip TODOS.md
|
|
1220
|
+
|
|
1221
|
+
**Format for TODOS.md entries:**
|
|
1222
|
+
```
|
|
1223
|
+
- [ ] [severity] [bug description] — from qa-test ({date})
|
|
1224
|
+
```
|
|
1225
|
+
|
|
1226
|
+
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.
|
|
1227
|
+
|
|
1228
|
+
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.
|
|
1229
|
+
|
|
1230
|
+
---
|
|
1231
|
+
|
|
1066
1232
|
## NEXT STEP
|
|
1067
1233
|
|
|
1068
1234
|
After `.warp/reports/qatesting/qa-report.md` is APPROVED:
|