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.
Files changed (45) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +6 -4
  3. package/VERSION +1 -1
  4. package/agents/warp-annotate.md +394 -0
  5. package/agents/warp-browse.md +9 -1
  6. package/agents/warp-build-code.md +9 -1
  7. package/agents/warp-orchestrator.md +10 -1
  8. package/agents/warp-plan-architect.md +120 -1
  9. package/agents/warp-plan-brainstorm.md +93 -2
  10. package/agents/warp-plan-design.md +97 -4
  11. package/agents/warp-plan-onboarding.md +9 -1
  12. package/agents/warp-plan-optimize.md +9 -1
  13. package/agents/warp-plan-scope.md +67 -1
  14. package/agents/warp-plan-security.md +576 -35
  15. package/agents/warp-plan-testdesign.md +9 -1
  16. package/agents/warp-qa-debug.md +117 -1
  17. package/agents/warp-qa-test.md +167 -1
  18. package/agents/warp-release-update.md +290 -4
  19. package/agents/warp-setup.md +9 -1
  20. package/agents/warp-upgrade.md +21 -4
  21. package/bin/hooks/CLAUDE.md +24 -0
  22. package/bin/hooks/_warp_json.sh +4 -2
  23. package/bin/hooks/identity-briefing.sh +20 -13
  24. package/bin/hooks/validate-askuser.sh +41 -0
  25. package/bin/migrate-sessions.js +284 -173
  26. package/dist/warp-annotate/SKILL.md +404 -0
  27. package/dist/warp-browse/SKILL.md +9 -1
  28. package/dist/warp-build-code/SKILL.md +9 -1
  29. package/dist/warp-orchestrator/SKILL.md +10 -1
  30. package/dist/warp-plan-architect/SKILL.md +120 -1
  31. package/dist/warp-plan-brainstorm/SKILL.md +93 -2
  32. package/dist/warp-plan-design/SKILL.md +97 -4
  33. package/dist/warp-plan-onboarding/SKILL.md +9 -1
  34. package/dist/warp-plan-optimize/SKILL.md +9 -1
  35. package/dist/warp-plan-scope/SKILL.md +67 -1
  36. package/dist/warp-plan-security/SKILL.md +578 -35
  37. package/dist/warp-plan-testdesign/SKILL.md +9 -1
  38. package/dist/warp-qa-debug/SKILL.md +117 -1
  39. package/dist/warp-qa-test/SKILL.md +167 -1
  40. package/dist/warp-release-update/SKILL.md +290 -4
  41. package/dist/warp-setup/SKILL.md +9 -1
  42. package/dist/warp-upgrade/SKILL.md +21 -4
  43. package/package.json +2 -2
  44. package/shared/project-hooks.json +7 -0
  45. package/shared/tier1-engineering-constitution.md +9 -1
@@ -141,6 +141,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
141
141
 
142
142
  ## AskUserQuestion
143
143
 
144
+ **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.
145
+
144
146
  **Contract:**
145
147
  1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
146
148
  2. **Simplify:** Plain English a smart 16-year-old could follow.
@@ -162,9 +164,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
162
164
  Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
163
165
  Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
164
166
 
167
+ **Pre-call checklist (verify before every AskUserQuestion invocation):**
168
+ - ☐ Completeness scores in every option label
169
+ - ☐ Recommended option listed first
170
+ - ☐ One decision per question (split if multiple)
171
+ - ☐ Analysis/reasoning already presented in message text above
172
+
165
173
  **Formatting:**
166
174
  - *Italics* for emphasis, not **bold** (bold for headers only).
167
- - After each answer: `✔ Decision {N} recorded [quicksave updated]`
175
+ - After each answer: `✔ Decision {N} recorded`
168
176
  - Previews under 8 lines. Full mockups go in conversation text before the question.
169
177
 
170
178
  ---
@@ -323,12 +331,29 @@ npx turbo run test 2>&1 | tail -30
323
331
  TEST SUITE STATUS:
324
332
  Total tests: [N]
325
333
  Passing: [N]
326
- Failing: [N] (MUST be 0 to proceed)
334
+ Failing: [N]
327
335
  Skipped: [N] (each must have documented reason in build-log)
328
336
  Runtime: [X]s
329
337
  ```
330
338
 
331
- **HARD GATE: If any test fails, stop. Do not ship with failing tests. Fix the test or the code, then re-run.**
339
+ If any tests fail, triage before blocking. Not all failures are equal failures you introduced are blockers, pre-existing failures are decisions.
340
+
341
+ ```bash
342
+ # Identify pre-existing failures by checking the test against the base branch
343
+ git stash && npx turbo run test 2>&1 | tail -30 # run tests on base state
344
+ git stash pop
345
+ ```
346
+
347
+ ```
348
+ TEST FAILURE TRIAGE:
349
+ In-branch failures (introduced by this diff): [N] — MUST fix before ship
350
+ Pre-existing failures (existed before this work): [N] — Handle each:
351
+ - Fix now, OR
352
+ - Add to TODOS.md with rationale, OR
353
+ - Document as known issue in PR body
354
+ ```
355
+
356
+ **HARD GATE: In-branch failures (failures introduced by your diff) MUST be fixed before shipping. Pre-existing failures must be handled — fix, defer to TODOS.md with rationale, or document as known issue in the PR body — but each must have an explicit decision, not silent acceptance.**
332
357
 
333
358
  ### 1C. Security Recency Check
334
359
 
@@ -368,6 +393,69 @@ QA READINESS:
368
393
 
369
394
  **HARD GATE: If QA readiness is NO-GO, stop. Return to /warp-qa-test or /warp-qa-debug. If CONDITIONAL, present the remaining issues to the user and get explicit approval to proceed.**
370
395
 
396
+ ### 1E. Verification Gate
397
+
398
+ If ANY code was changed after the initial test run in Phase 1B (e.g., fixing diff review findings, addressing review comments, last-minute polish), re-run the full test suite before proceeding to commit.
399
+
400
+ The Iron Law: "Should work now" is not evidence. Run it. "I'm confident the fix is correct" — confidence is not a test result.
401
+
402
+ ```
403
+ VERIFICATION GATE:
404
+ Code changed after initial test run: [yes | no]
405
+ If yes:
406
+ Files modified: [list]
407
+ Reason: [review fix | polish | bug fix | other]
408
+ Re-run result: [N] passing, [N] failing
409
+ Gate: [PASS — all green | FAIL — fix and re-run]
410
+ ```
411
+
412
+ This gate re-triggers whenever code changes. There is no limit to how many times it runs. The only exit is a clean test suite with zero changes after the last run.
413
+
414
+ ### 1F. Plan Completion Audit
415
+
416
+ Read scope.md acceptance criteria and compare against what was actually built. Every AC gets an explicit status.
417
+
418
+ ```bash
419
+ # Read scope acceptance criteria
420
+ cat .warp/reports/planning/scope.md 2>/dev/null | head -100
421
+ ```
422
+
423
+ ```
424
+ PLAN COMPLETION AUDIT:
425
+ Acceptance Criteria from scope.md:
426
+ 1. [AC description] — DONE (evidence: [test name, file, or behavior])
427
+ 2. [AC description] — NOT DONE (reason: [why] + user approved to ship without)
428
+ 3. [AC description] — PARTIAL (what's done, what's missing)
429
+ ...
430
+
431
+ Summary: [N] DONE / [N] NOT DONE / [N] PARTIAL out of [N] total
432
+ ```
433
+
434
+ **HARD GATE: User must explicitly approve shipping without any NOT DONE or PARTIAL items.** Present each incomplete AC and ask: "Ship without this? [Y/n]". If the user says no, return to build.
435
+
436
+ ### 1G. Distribution Pipeline Check
437
+
438
+ If the architecture introduces a new standalone artifact (CLI binary, npm package, library, Docker image), check whether a release/publish workflow exists.
439
+
440
+ ```bash
441
+ # Check for publish workflows
442
+ ls -la .github/workflows/*publish* .github/workflows/*release* 2>/dev/null
443
+ cat package.json 2>/dev/null | grep -E '"(name|publishConfig|bin|main|module|exports)"' || true
444
+ ls -la Dockerfile* docker-compose* 2>/dev/null
445
+ ```
446
+
447
+ ```
448
+ DISTRIBUTION CHECK:
449
+ Publishable artifacts detected: [list or "none"]
450
+ For each artifact:
451
+ Artifact: [name]
452
+ Registry: [npm | PyPI | crates.io | Docker Hub | etc.]
453
+ Publish workflow exists: [yes — path | no — FLAG]
454
+ Version in package file matches VERSION: [yes | no — FLAG]
455
+ ```
456
+
457
+ If a publishable artifact has no release workflow, flag it: "No publish workflow detected for {artifact}. Create one before shipping, or document why manual publish is acceptable."
458
+
371
459
  ---
372
460
 
373
461
  ## PHASE 2: Diff Review
@@ -490,6 +578,25 @@ DIFF REVIEW SUMMARY:
490
578
 
491
579
  ### 3A. Version Bump
492
580
 
581
+ Before bumping, run an idempotency check. This makes `/warp-release-update` safe to re-run after a partial failure (e.g., version was bumped but push failed, or PR was created but tests were re-run).
582
+
583
+ ```bash
584
+ # Check current version state
585
+ cat VERSION 2>/dev/null || echo "no VERSION file"
586
+ git log --oneline -1 -- VERSION
587
+ git rev-list --count @{u}..HEAD 2>/dev/null || echo "no upstream"
588
+ gh pr list --head "$(git branch --show-current)" --json number,url --jq '.[0]' 2>/dev/null || echo "no PR"
589
+ ```
590
+
591
+ ```
592
+ IDEMPOTENCY CHECK:
593
+ Version already bumped: [yes — skip bump | no — proceed]
594
+ Branch already pushed: [yes — skip push | no — proceed]
595
+ PR already exists: [yes — update body | no — create new]
596
+ ```
597
+
598
+ If version is already bumped (VERSION file shows the target version), skip the bump and proceed to changelog verification. If branch is already pushed, skip push in Phase 4C. If a PR already exists, update the PR body in Phase 5 instead of creating a new one (`gh pr edit` instead of `gh pr create`).
599
+
493
600
  Determine the appropriate version bump:
494
601
 
495
602
  ```
@@ -567,6 +674,27 @@ STAGING REVIEW:
567
674
 
568
675
  ### 4B. Commit
569
676
 
677
+ Analyze the diff and consider whether it should be split into logical, independently-valid commits. Each commit should pass tests on its own and be ordered by dependency:
678
+
679
+ ```
680
+ COMMIT SPLIT ANALYSIS:
681
+ Total files changed: [N]
682
+ Suggested split:
683
+ 1. [type]: [description] — [N] files (infrastructure / config)
684
+ 2. [type]: [description] — [N] files (models / data layer)
685
+ 3. [type]: [description] — [N] files (business logic / services)
686
+ 4. [type]: [description] — [N] files (UI / components)
687
+ 5. [type]: [description] — [N] files (tests)
688
+ 6. [type]: [description] — [N] files (docs / VERSION)
689
+
690
+ Recommended: [split into N commits | single commit is fine]
691
+ Rationale: [why — e.g., "all changes are tightly coupled" or "infra + feature + tests are independent concerns"]
692
+ ```
693
+
694
+ Dependency order for split commits: infrastructure → models → business logic → UI → tests → docs → VERSION. Each commit in the sequence should pass the test suite independently, making `git bisect` useful when tracking down regressions.
695
+
696
+ If the user prefers a single commit, that is fine — but always offer the split for non-trivial diffs (5+ files or 3+ logical concerns).
697
+
570
698
  Create a meaningful commit (or verify commits are already clean from the polish phase):
571
699
 
572
700
  ```bash
@@ -856,7 +984,31 @@ API DOCS UPDATE CHECK:
856
984
  ☐ Error codes updated
857
985
  ```
858
986
 
859
- ### 7E. Documentation Commit
987
+ ### 7E. TODOS.md Auto-Update
988
+
989
+ After shipping, scan the diff against TODOS.md to keep the backlog honest.
990
+
991
+ ```bash
992
+ # Read current TODOS
993
+ cat TODOS.md 2>/dev/null || echo "no TODOS.md"
994
+ ```
995
+
996
+ ```
997
+ TODOS.MD UPDATE:
998
+ Completed items detected from diff: [N]
999
+ - [item description] — completed by [commit/file evidence]
1000
+ - [item description] — completed by [commit/file evidence]
1001
+ Action: [check boxes | move to Completed section | leave as-is if none]
1002
+
1003
+ New TODO-worthy work created by this diff: [N]
1004
+ - [description] — [why this is a TODO, not a bug]
1005
+ - [description]
1006
+ Action: [add to TODOS.md | skip if none]
1007
+ ```
1008
+
1009
+ Mark completed items (check the box or move to a Completed section, matching the project's TODOS.md format). Add new items only if the diff genuinely creates deferred work — do not manufacture TODOs.
1010
+
1011
+ ### 7F. Documentation Commit
860
1012
 
861
1013
  If any documentation was updated:
862
1014
 
@@ -1143,6 +1295,28 @@ git log --format="%cd" --date=short --since="7 days ago" | sort | uniq -c
1143
1295
 
1144
1296
  Collect: commit history, files changed, hotspots (most-modified files), test file changes, new/deleted files.
1145
1297
 
1298
+ **Work Session Detection:** Detect coding sessions using a 45-minute gap threshold between consecutive commits. Two commits within 45 minutes of each other belong to the same session. A gap larger than 45 minutes starts a new session.
1299
+
1300
+ ```bash
1301
+ # Get commit timestamps for session detection
1302
+ git log --format="%H %ai" --since="7 days ago" | sort -k2,3
1303
+ ```
1304
+
1305
+ Classify each session:
1306
+ - **Deep** (>2 hours): sustained focus work, likely feature development or complex debugging
1307
+ - **Medium** (30 min — 2 hours): standard work sessions
1308
+ - **Micro** (<30 min): quick fixes, one-off commits, config changes
1309
+
1310
+ ```
1311
+ WORK SESSIONS:
1312
+ Total sessions: [N]
1313
+ Deep (>2hr): [N] sessions, [N] total hours
1314
+ Medium (30min-2hr): [N] sessions, [N] total hours
1315
+ Micro (<30min): [N] sessions
1316
+ Total active hours: [N]
1317
+ LOC per active hour: [N] (lines added + removed / active hours)
1318
+ ```
1319
+
1146
1320
  ### R2. Work Pattern Analysis
1147
1321
 
1148
1322
  **Commit pacing:** Distributed across the week (healthy) vs. burst-and-crash (warning). Flag 3+ day gaps or all commits on 1-2 days.
@@ -1151,6 +1325,63 @@ Collect: commit history, files changed, hotspots (most-modified files), test fil
1151
1325
 
1152
1326
  **Scope adherence:** Compare work done to TODOS.md priorities. Note emergent work (normal), scope creep (worth naming), distraction (address).
1153
1327
 
1328
+ **Hourly Commit Histogram:** Produce an ASCII bar chart of commits by hour of day. Identify peak hours, dead zones, and bimodal patterns (e.g., morning burst + late night session).
1329
+
1330
+ ```bash
1331
+ # Commits by hour
1332
+ git log --format="%H %ai" --since="7 days ago" | awk '{split($3,t,":"); print t[1]}' | sort | uniq -c | sort -k2 -n
1333
+ ```
1334
+
1335
+ ```
1336
+ COMMIT HISTOGRAM (by hour):
1337
+ 00 |
1338
+ 01 |
1339
+ ...
1340
+ 09 | ████████ (8)
1341
+ 10 | ████████████ (12)
1342
+ 11 | ██████ (6)
1343
+ 12 | ██ (2)
1344
+ ...
1345
+ 21 | ██████████ (10)
1346
+ 22 | ████████████████ (16)
1347
+ 23 | ████ (4)
1348
+
1349
+ Peak hours: [list — e.g., 10:00, 22:00]
1350
+ Dead zones: [list — e.g., 00:00-08:00, 12:00-14:00]
1351
+ Pattern: [single peak | bimodal | distributed | nocturnal]
1352
+ ```
1353
+
1354
+ **Streak Tracking:** Count consecutive days with at least 1 commit. A streak is broken by a calendar day with zero commits.
1355
+
1356
+ ```bash
1357
+ # Commits per day (all time for streak, period for current)
1358
+ git log --format="%cd" --date=short | sort -u
1359
+ ```
1360
+
1361
+ ```
1362
+ STREAK:
1363
+ Current streak: [N] days (since [date])
1364
+ Longest streak: [N] days ([start date] — [end date])
1365
+ Days active this period: [N] / [N] total days
1366
+ Activity rate: [N]%
1367
+ ```
1368
+
1369
+ **TODOS/Backlog Health:** Read TODOS.md and assess backlog health for the retro period.
1370
+
1371
+ ```bash
1372
+ cat TODOS.md 2>/dev/null || echo "no TODOS.md"
1373
+ ```
1374
+
1375
+ ```
1376
+ BACKLOG HEALTH:
1377
+ Total open items: [N]
1378
+ P1 (critical/urgent) items: [N]
1379
+ Items added this period: [N]
1380
+ Items completed this period: [N]
1381
+ Net change: [+N | -N | 0] (positive = backlog growing)
1382
+ Health: [healthy (shrinking or stable) | warning (growing) | critical (P1 count > 3)]
1383
+ ```
1384
+
1154
1385
  ### R3. Code Quality Metrics
1155
1386
 
1156
1387
  ```bash
@@ -1190,6 +1421,61 @@ RETROSPECTIVE: {period}
1190
1421
  Actions: {3-5 assigned items}
1191
1422
  ```
1192
1423
 
1424
+ **JSON Snapshot Persistence:** Save retro metrics as JSON to `.warp/reports/releasing/retro-history.json` for trend comparison across retros. Append to the array — do not overwrite previous entries.
1425
+
1426
+ ```bash
1427
+ # Read existing history (or initialize)
1428
+ cat .warp/reports/releasing/retro-history.json 2>/dev/null || echo "[]"
1429
+ ```
1430
+
1431
+ Append a snapshot with this shape:
1432
+
1433
+ ```json
1434
+ {
1435
+ "date": "YYYY-MM-DD",
1436
+ "period": "YYYY-MM-DD to YYYY-MM-DD",
1437
+ "commits": N,
1438
+ "loc_added": N,
1439
+ "loc_removed": N,
1440
+ "files_changed": N,
1441
+ "test_count": N,
1442
+ "test_coverage_pct": N,
1443
+ "quality_score": N,
1444
+ "sessions": { "deep": N, "medium": N, "micro": N },
1445
+ "active_hours": N,
1446
+ "streak_current": N,
1447
+ "streak_longest": N,
1448
+ "backlog_open": N,
1449
+ "backlog_p1": N,
1450
+ "actions_completed": N,
1451
+ "actions_total": N
1452
+ }
1453
+ ```
1454
+
1455
+ **Compare Mode:** If prior retro data exists in `retro-history.json`, show period-over-period deltas for key metrics. Use arrows to indicate direction.
1456
+
1457
+ ```
1458
+ TREND COMPARISON (vs. previous retro):
1459
+ Commits: [N] [↑ +3 | ↓ -2 | → same]
1460
+ LOC (net): [N] [↑ | ↓ | →]
1461
+ Test count: [N] [↑ | ↓ | →]
1462
+ Coverage: [N]% [↑ | ↓ | →]
1463
+ Quality score: [N]/10 [↑ | ↓ | →]
1464
+ Active hours: [N] [↑ | ↓ | →]
1465
+ Streak: [N]d [↑ | ↓ | →]
1466
+ Backlog (open): [N] [↑ growing | ↓ shrinking | → stable]
1467
+
1468
+ Overall trajectory: [improving | stable | declining | mixed]
1469
+ ```
1470
+
1471
+ If no prior data exists, skip the comparison and note: "First retro — no prior data for comparison. Trends will appear after the next retro."
1472
+
1473
+ **Tweetable Summary:** Produce a single-line summary suitable for a status update, team standup, or personal log.
1474
+
1475
+ ```
1476
+ TWEETABLE: Week of {date}: {N} commits, {N} LOC, {N}% tests, {N} files | Streak: {N}d | Quality: {N}/10
1477
+ ```
1478
+
1193
1479
  ---
1194
1480
 
1195
1481
  ## PUSH GATE
@@ -132,6 +132,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
132
132
 
133
133
  ## AskUserQuestion
134
134
 
135
+ **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.
136
+
135
137
  **Contract:**
136
138
  1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
137
139
  2. **Simplify:** Plain English a smart 16-year-old could follow.
@@ -153,9 +155,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
153
155
  Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
154
156
  Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
155
157
 
158
+ **Pre-call checklist (verify before every AskUserQuestion invocation):**
159
+ - ☐ Completeness scores in every option label
160
+ - ☐ Recommended option listed first
161
+ - ☐ One decision per question (split if multiple)
162
+ - ☐ Analysis/reasoning already presented in message text above
163
+
156
164
  **Formatting:**
157
165
  - *Italics* for emphasis, not **bold** (bold for headers only).
158
- - After each answer: `✔ Decision {N} recorded [quicksave updated]`
166
+ - After each answer: `✔ Decision {N} recorded`
159
167
  - Previews under 8 lines. Full mockups go in conversation text before the question.
160
168
 
161
169
  ---
@@ -128,6 +128,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
128
128
 
129
129
  ## AskUserQuestion
130
130
 
131
+ **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.
132
+
131
133
  **Contract:**
132
134
  1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
133
135
  2. **Simplify:** Plain English a smart 16-year-old could follow.
@@ -149,9 +151,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
149
151
  Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
150
152
  Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
151
153
 
154
+ **Pre-call checklist (verify before every AskUserQuestion invocation):**
155
+ - ☐ Completeness scores in every option label
156
+ - ☐ Recommended option listed first
157
+ - ☐ One decision per question (split if multiple)
158
+ - ☐ Analysis/reasoning already presented in message text above
159
+
152
160
  **Formatting:**
153
161
  - *Italics* for emphasis, not **bold** (bold for headers only).
154
- - After each answer: `✔ Decision {N} recorded [quicksave updated]`
162
+ - After each answer: `✔ Decision {N} recorded`
155
163
  - Previews under 8 lines. Full mockups go in conversation text before the question.
156
164
 
157
165
  ---
@@ -320,11 +328,20 @@ WARP │ UPGRADE
320
328
  Hooks: patched ✓
321
329
  claude-mem: installed ✓
322
330
  Stale: {N items cleaned / none}
323
- Restart: required
331
+ Restart: {context-aware — see below}
324
332
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
325
333
  ```
326
334
 
327
- **Always remind:** "Restart Claude Code to pick up the new skills and hooks."
335
+ ### Restart guidance (context-aware)
336
+
337
+ Skills are discovered dynamically — new skills are available immediately after install, no restart needed. Hooks fire on session lifecycle events (SessionStart, Stop, PreToolUse) — if hook *scripts* changed in this upgrade, a restart picks up the new behavior.
338
+
339
+ Determine restart need:
340
+ - **Hooks changed** (new hooks added, existing hooks modified) → `Restart: recommended (hooks updated)`
341
+ - **Only skills/agents changed** → `Restart: not needed — new skills available now`
342
+ - **Already current** (same version) → `Restart: not needed`
343
+
344
+ When hooks changed, say: "Restart Claude Code to pick up updated hooks." When they didn't, say: "No restart needed — new skills are available now."
328
345
 
329
346
  ---
330
347
 
@@ -336,7 +353,7 @@ WARP │ UPGRADE
336
353
  - Check for and offer to clean stale artifacts
337
354
  - Verify claude-mem is installed
338
355
  - Show changelog summary
339
- - Remind user to restart Claude Code
356
+ - Give context-aware restart guidance (hooks changed → recommend restart; skills only → no restart needed)
340
357
 
341
358
  **MUST NOT:**
342
359
  - Use git clone/pull to upgrade (npm handles distribution now)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "warp-os",
3
- "version": "1.1.2",
4
- "description": "A development operating system for Claude Code. 16 skills compiled into a pipeline that thinks through every step of building a product.",
3
+ "version": "1.2.1",
4
+ "description": "A development operating system for Claude Code. 17 skills compiled into a pipeline that thinks through every step of building a product.",
5
5
  "author": "WolfOnWings",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -26,6 +26,13 @@
26
26
  "hooks": [
27
27
  {"type": "command", "command": "echo 'Warp requires the Bash tool. All hooks and scripts are bash.' >&2; exit 2", "timeout": 5}
28
28
  ]
29
+ },
30
+ {
31
+ "matcher": "AskUserQuestion",
32
+ "description": "Warp: enforce completeness scores in option labels",
33
+ "hooks": [
34
+ {"type": "command", "command": "bash ~/.warp/hooks/validate-askuser.sh", "timeout": 5}
35
+ ]
29
36
  }
30
37
  ]
31
38
  }
@@ -113,6 +113,8 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
113
113
 
114
114
  ## AskUserQuestion
115
115
 
116
+ **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.
117
+
116
118
  **Contract:**
117
119
  1. **Re-ground:** Project name, branch, current task. (1-2 sentences.)
118
120
  2. **Simplify:** Plain English a smart 16-year-old could follow.
@@ -134,9 +136,15 @@ Shell commands use Unix syntax (Git Bash). Never use CMD (`dir`, `type`, `del`)
134
136
  Format: `"Option name — X/10 🟢"` (or 🟡 or 🔴). In the label, not the description.
135
137
  Rate: 🟢 9-10 complete, 🟡 6-8 adequate, 🔴 1-5 shortcuts.
136
138
 
139
+ **Pre-call checklist (verify before every AskUserQuestion invocation):**
140
+ - ☐ Completeness scores in every option label
141
+ - ☐ Recommended option listed first
142
+ - ☐ One decision per question (split if multiple)
143
+ - ☐ Analysis/reasoning already presented in message text above
144
+
137
145
  **Formatting:**
138
146
  - *Italics* for emphasis, not **bold** (bold for headers only).
139
- - After each answer: `✔ Decision {N} recorded [quicksave updated]`
147
+ - After each answer: `✔ Decision {N} recorded`
140
148
  - Previews under 8 lines. Full mockups go in conversation text before the question.
141
149
 
142
150
  ---