@kennethsolomon/shipkit 3.10.1 → 3.11.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.
Files changed (57) hide show
  1. package/README.md +121 -49
  2. package/commands/sk/autopilot.md +2 -2
  3. package/commands/sk/context-budget.md +5 -0
  4. package/commands/sk/eval.md +5 -0
  5. package/commands/sk/health.md +5 -0
  6. package/commands/sk/help.md +32 -8
  7. package/commands/sk/learn.md +5 -0
  8. package/commands/sk/resume-session.md +5 -0
  9. package/commands/sk/safety-guard.md +5 -0
  10. package/commands/sk/save-session.md +5 -0
  11. package/commands/sk/security-check.md +2 -2
  12. package/commands/sk/set-profile.md +8 -0
  13. package/commands/sk/status.md +4 -9
  14. package/package.json +1 -1
  15. package/skills/sk:accessibility/SKILL.md +10 -1
  16. package/skills/sk:autopilot/SKILL.md +26 -45
  17. package/skills/sk:brainstorming/SKILL.md +13 -0
  18. package/skills/sk:context/SKILL.md +11 -15
  19. package/skills/sk:context-budget/SKILL.md +126 -0
  20. package/skills/sk:dashboard/SKILL.md +3 -4
  21. package/skills/sk:dashboard/server.js +0 -65
  22. package/skills/sk:e2e/SKILL.md +3 -3
  23. package/skills/sk:eval/SKILL.md +188 -0
  24. package/skills/sk:fast-track/SKILL.md +0 -9
  25. package/skills/sk:frontend-design/SKILL.md +232 -0
  26. package/skills/sk:gates/SKILL.md +2 -3
  27. package/skills/sk:health/SKILL.md +146 -0
  28. package/skills/sk:learn/SKILL.md +138 -0
  29. package/skills/sk:lint/SKILL.md +3 -3
  30. package/skills/sk:perf/SKILL.md +3 -3
  31. package/skills/sk:resume-session/SKILL.md +95 -0
  32. package/skills/sk:retro/SKILL.md +1 -2
  33. package/skills/sk:review/SKILL.md +2 -2
  34. package/skills/sk:safety-guard/SKILL.md +134 -0
  35. package/skills/sk:save-session/SKILL.md +84 -0
  36. package/skills/sk:setup-claude/SKILL.md +40 -4
  37. package/skills/sk:setup-claude/scripts/__pycache__/apply_setup_claude.cpython-314.pyc +0 -0
  38. package/skills/sk:setup-claude/scripts/apply_setup_claude.py +0 -1
  39. package/skills/sk:setup-claude/templates/.claude/settings.json.template +110 -26
  40. package/skills/sk:setup-claude/templates/.claude/statusline.sh +1 -15
  41. package/skills/sk:setup-claude/templates/CLAUDE.md.template +69 -138
  42. package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +2 -13
  43. package/skills/sk:setup-claude/templates/hooks/config-protection.sh +71 -0
  44. package/skills/sk:setup-claude/templates/hooks/console-log-warning.sh +42 -0
  45. package/skills/sk:setup-claude/templates/hooks/cost-tracker.sh +26 -0
  46. package/skills/sk:setup-claude/templates/hooks/post-edit-format.sh +53 -0
  47. package/skills/sk:setup-claude/templates/hooks/pre-compact.sh +1 -12
  48. package/skills/sk:setup-claude/templates/hooks/safety-guard.sh +72 -0
  49. package/skills/sk:setup-claude/templates/hooks/session-start.sh +0 -11
  50. package/skills/sk:setup-claude/templates/hooks/session-stop.sh +0 -7
  51. package/skills/sk:setup-claude/templates/hooks/suggest-compact.sh +35 -0
  52. package/skills/sk:setup-claude/tests/__pycache__/test_apply_setup_claude.cpython-314.pyc +0 -0
  53. package/skills/sk:setup-claude/tests/test_apply_setup_claude.py +2 -33
  54. package/skills/sk:setup-optimizer/SKILL.md +68 -15
  55. package/skills/sk:start/SKILL.md +34 -11
  56. package/skills/sk:test/SKILL.md +3 -3
  57. package/skills/sk:setup-claude/templates/tasks/workflow-status.md.template +0 -28
@@ -15,19 +15,12 @@ BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
15
15
  # Count commits in this session (last hour)
16
16
  RECENT_COMMITS=$(git log --since="1 hour ago" --oneline 2>/dev/null | wc -l | tr -d ' ')
17
17
 
18
- # Get current workflow step
19
- CURRENT_STEP=""
20
- if [ -f "tasks/workflow-status.md" ]; then
21
- CURRENT_STEP=$(grep -E ">>\s*next\s*<<" "tasks/workflow-status.md" 2>/dev/null | head -1 | sed 's/.*| //' | sed 's/ |.*//')
22
- fi
23
-
24
18
  # Append session end to progress.md
25
19
  {
26
20
  echo ""
27
21
  echo "### [$TIMESTAMP] Session ended"
28
22
  echo "- Branch: $BRANCH"
29
23
  echo "- Commits this session: $RECENT_COMMITS"
30
- [ -n "$CURRENT_STEP" ] && echo "- Next step: $CURRENT_STEP"
31
24
  } >> "tasks/progress.md" 2>/dev/null
32
25
 
33
26
  exit 0
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ # suggest-compact.sh — PreToolUse hook for Edit/Write
3
+ # Tracks tool call count and suggests /compact at threshold.
4
+
5
+ set -uo pipefail
6
+
7
+ THRESHOLD="${SHIPKIT_COMPACT_THRESHOLD:-50}"
8
+ REPEAT_INTERVAL=25
9
+
10
+ # Use a session-scoped counter file
11
+ COUNTER_FILE="/tmp/shipkit-tool-count-${PPID:-$$}"
12
+
13
+ # Read current count
14
+ COUNT=0
15
+ if [[ -f "$COUNTER_FILE" ]]; then
16
+ COUNT=$(cat "$COUNTER_FILE" 2>/dev/null || echo "0")
17
+ fi
18
+
19
+ COUNT=$((COUNT + 1))
20
+ echo "$COUNT" > "$COUNTER_FILE"
21
+
22
+ # Check if we should suggest compaction
23
+ if [[ $COUNT -eq $THRESHOLD ]]; then
24
+ echo ""
25
+ echo "HINT: You've made $COUNT+ tool calls this session."
26
+ echo "Consider running /compact if context feels heavy."
27
+ elif [[ $COUNT -gt $THRESHOLD ]]; then
28
+ PAST_THRESHOLD=$((COUNT - THRESHOLD))
29
+ if [[ $((PAST_THRESHOLD % REPEAT_INTERVAL)) -eq 0 ]]; then
30
+ echo ""
31
+ echo "HINT: $COUNT tool calls this session. Consider /compact."
32
+ fi
33
+ fi
34
+
35
+ exit 0
@@ -129,40 +129,9 @@ class TestApplySetupClaude(unittest.TestCase):
129
129
  )
130
130
  self.assertEqual(rc, 0)
131
131
 
132
+ # workflow-status.md should NOT be created (removed from workflow)
132
133
  wf_path = repo_root / "tasks" / "workflow-status.md"
133
- self.assertTrue(wf_path.exists())
134
- content = wf_path.read_text(encoding="utf-8")
135
- self.assertIn(">> next <<", content)
136
- self.assertIn("/brainstorm", content)
137
- self.assertIn("/finish-feature", content)
138
- self.assertIn("/release", content)
139
- # All 14 steps present
140
- self.assertIn("| 14 |", content)
141
-
142
- def test_workflow_status_not_overwritten_on_rerun(self):
143
- mod = _load_apply_module()
144
- skill_root = Path(__file__).resolve().parents[1]
145
-
146
- with tempfile.TemporaryDirectory() as td:
147
- repo_root = Path(td)
148
- (repo_root / "package.json").write_text(json.dumps({"name": "demo"}), encoding="utf-8")
149
-
150
- # First run creates the file
151
- buf = io.StringIO()
152
- with contextlib.redirect_stdout(buf):
153
- mod.apply(repo_root, skill_root, update_generated=False, dry_run=False, detection=mod.detect(repo_root))
154
-
155
- # Simulate user progress by modifying the file
156
- wf_path = repo_root / "tasks" / "workflow-status.md"
157
- custom_content = wf_path.read_text(encoding="utf-8").replace(">> next <<", "done")
158
- wf_path.write_text(custom_content, encoding="utf-8")
159
-
160
- # Second run should NOT overwrite
161
- buf = io.StringIO()
162
- with contextlib.redirect_stdout(buf):
163
- mod.apply(repo_root, skill_root, update_generated=False, dry_run=False, detection=mod.detect(repo_root))
164
-
165
- self.assertEqual(wf_path.read_text(encoding="utf-8"), custom_content)
134
+ self.assertFalse(wf_path.exists())
166
135
 
167
136
  def test_existing_custom_claude_md_writes_sidecar(self):
168
137
  mod = _load_apply_module()
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sk:setup-optimizer
3
- description: "Diagnose, update workflow, enrich, and maintain CLAUDE.md. The single command to keep any CLAUDE.md current."
3
+ description: "Diagnose, update workflow, deploy hooks, enrich CLAUDE.md, and keep project infrastructure current. The single command for ongoing ShipKit maintenance."
4
4
  triggers:
5
5
  - optimize claude
6
6
  - optimize setup
@@ -20,14 +20,15 @@ allowed-tools:
20
20
 
21
21
  ## Overview
22
22
 
23
- The single command to keep your CLAUDE.md current. Diagnoses problems, updates the workflow to the latest version, scans your codebase, and enriches with project context — all while preserving your customizations.
23
+ The single command to keep your entire ShipKit project infrastructure current. Diagnoses problems, updates the workflow, deploys missing hooks, scans your codebase, and enriches CLAUDE.md with project context — all while preserving your customizations.
24
24
 
25
25
  ### What It Does
26
26
 
27
27
  1. **Diagnoses** — finds missing sections, stale info, inconsistencies, and gaps
28
28
  2. **Updates workflow** — refreshes the workflow section to the latest template version
29
- 3. **Discovers** — scans project structure, docs, and workflows
30
- 4. **Enriches** — merges discoveries into CLAUDE.md while preserving your edits
29
+ 3. **Deploys hooks** — installs missing hooks and updates settings.json wiring
30
+ 4. **Discovers** — scans project structure, docs, and workflows
31
+ 5. **Enriches** — merges discoveries into CLAUDE.md while preserving your edits
31
32
 
32
33
  ## Usage
33
34
 
@@ -43,9 +44,11 @@ Before making any changes, runs a diagnostic pass on the existing CLAUDE.md:
43
44
  - **Stale content** — detects outdated info (stale model/route counts, removed dependencies, old command names like `/laravel-lint` instead of `/sk:lint`)
44
45
  - **Inconsistencies** — compares documented vs actual project state (directories, scripts, workflows)
45
46
  - **Section completeness** — flags sections that exist but are empty or have only placeholder text
46
- - **Outdated workflow** — checks if the workflow matches the current 21-step TDD flow with hard gates
47
- - **Missing commands** — checks for `sk:start`, `sk:autopilot`, `sk:team` in the Commands table
47
+ - **Outdated workflow** — checks if the workflow matches the current 8-step flow with `/sk:gates` as single gate step
48
+ - **Missing commands** — checks for `sk:start`, `sk:autopilot`, `sk:team`, `sk:learn`, `sk:context-budget`, `sk:health`, `sk:save-session`, `sk:resume-session`, `sk:safety-guard`, `sk:eval` in the Commands table
48
49
  - **Auto-skip rules** — checks for auto-skip detection rules in the workflow section
50
+ - **Stale tracker references** — checks for `tasks/workflow-status.md` references (removed — progress tracked via git branch + todo.md checkboxes)
51
+ - **Missing hooks** — checks if `.claude/hooks/` exists and contains both core and enhanced hooks
49
52
 
50
53
  Reports findings before proceeding. If issues are found, they inform subsequent steps.
51
54
 
@@ -53,17 +56,17 @@ Reports findings before proceeding. If issues are found, they inform subsequent
53
56
 
54
57
  If the workflow section is outdated or missing, replace it with the latest version:
55
58
 
56
- **Current workflow (21 steps, TDD with hard gates):**
59
+ **Current workflow (8 steps, TDD with `/sk:gates` as single gate step):**
57
60
  ```
58
- Read → Explore → Design → Accessibility → Plan → Branch → Migrate → Write Tests Implement → LintVerify Tests Security → Performance → Review → E2E Tests → Finish → Sync Features
61
+ Explore → Design → Plan → Branch → Write Tests + Implement → CommitGatesFinalize
59
62
  ```
60
63
 
61
64
  **What gets updated:**
62
- - Workflow table (21 steps with correct commands: `/sk:write-tests`, `/sk:lint`, `/sk:test`, `/sk:accessibility`, `/sk:perf`, `/sk:e2e`, `/sk:start`, `/sk:autopilot`, `/sk:team`)
65
+ - Workflow table (8 steps `/sk:brainstorm`, `/sk:frontend-design` or `/sk:api-design`, `/sk:write-plan`, `/sk:branch`, `/sk:write-tests` + `/sk:execute-plan`, `/sk:smart-commit`, `/sk:gates`, `/sk:finish-feature`)
63
66
  - Step details (TDD red/green/verify descriptions)
64
- - Tracker rules (hard gates at 12, 14, 16, 20, 17; optional steps 4, 5, 8, 18, 21)
65
- - Step completion summary rule (NON-NEGOTIABLE)
66
- - Bug fix flow section
67
+ - Workflow rules (auto-advance, conditional summary, auto-skip, squash gate commits)
68
+ - Bug fix flow section (7 steps)
69
+ - Hotfix flow section (6 steps)
67
70
  - Sub-Agent Patterns section (if missing)
68
71
  - Cross-Platform Tracking section (if missing)
69
72
  - Project Memory section (if missing)
@@ -73,6 +76,7 @@ Read → Explore → Design → Accessibility → Plan → Branch → Migrate
73
76
  - Fix & Retest Protocol section (if missing)
74
77
  - Requirement Change Flow section (if missing)
75
78
  - Auto-skip detection rules (if missing)
79
+ - Remove `tasks/workflow-status.md` references (tracker removed)
76
80
 
77
81
  **What gets preserved:**
78
82
  - Everything marked with `<!-- LOCK -->` is never touched
@@ -87,6 +91,54 @@ Read → Explore → Design → Accessibility → Plan → Branch → Migrate
87
91
  4. Insert missing sections (Sub-Agent Patterns, Project Memory, etc.) in their correct positions
88
92
  5. Preserve all `<!-- LOCK -->` and project-specific sections
89
93
 
94
+ ### Step 1.5: Hooks Deployment
95
+
96
+ After updating the workflow, check and deploy hooks:
97
+
98
+ 1. **Check if `.claude/hooks/` exists** — if not, create it
99
+ 2. **Check for core hooks** — `session-start.sh`, `session-stop.sh`, `pre-compact.sh`, `validate-commit.sh`, `validate-push.sh`, `log-agent.sh`
100
+ 3. **Check for enhanced hooks** — `config-protection.sh`, `post-edit-format.sh`, `console-log-warning.sh`, `cost-tracker.sh`, `suggest-compact.sh`, `safety-guard.sh`
101
+ 4. **Check `.claude/settings.json`** — verify hooks are wired correctly
102
+
103
+ **Report status and prompt:**
104
+
105
+ > "Hooks: [X/6 core, Y/6 enhanced] installed
106
+ > Install missing hooks? [y/n]"
107
+
108
+ **If yes:**
109
+
110
+ 1. **Locate templates** — resolve the ShipKit templates directory:
111
+ - `~/.claude/skills/sk:setup-claude/templates/hooks/` (symlinked install)
112
+ - Or the npm global path if installed via `npm install -g`
113
+
114
+ 2. **Deploy missing hook scripts** (create-if-missing, never overwrite existing):
115
+ ```bash
116
+ # For each missing hook file:
117
+ cp "$TEMPLATE_DIR/hooks/<hook>.sh" ".claude/hooks/<hook>.sh"
118
+ chmod +x ".claude/hooks/<hook>.sh"
119
+ ```
120
+
121
+ 3. **Update `.claude/settings.json`** — read the latest `settings.json.template` and merge new hook entries into the existing settings.json:
122
+ - **Preserve** existing hooks, permissions, statusline config
123
+ - **Add** only missing hook entries (new PreToolUse, PostToolUse, Stop entries)
124
+ - **Never remove** existing entries — additive merge only
125
+
126
+ 4. **Report what was deployed:**
127
+ ```
128
+ Deployed hooks:
129
+ + config-protection.sh (PreToolUse — blocks linter config edits)
130
+ + post-edit-format.sh (PostToolUse — auto-format after edits)
131
+ + console-log-warning.sh (Stop — warn on debug statements)
132
+ + cost-tracker.sh (Stop — session metadata logging)
133
+ + suggest-compact.sh (PreToolUse — compact suggestions)
134
+ + safety-guard.sh (PreToolUse — freeze/careful mode)
135
+ ~ Updated .claude/settings.json with new hook wiring
136
+ ```
137
+
138
+ **If no:** skip hook deployment, continue to Step 2.
139
+
140
+ **Idempotency:** Never overwrite existing hook files — the user may have customized them. Only deploy hooks that don't exist yet. For settings.json, merge additively.
141
+
90
142
  ### Step 2: Scan & Enrich
91
143
 
92
144
  After workflow update, proceeds with codebase discovery and enrichment:
@@ -181,10 +233,11 @@ This content will never be regenerated.
181
233
 
182
234
  ## When to Use
183
235
 
184
- ✅ **Use `/optimize-claude` when:**
236
+ ✅ **Use `/sk:setup-optimizer` when:**
237
+ - ShipKit was updated and your project needs the latest hooks/commands
185
238
  - You've added new directories to your project
186
239
  - You've created documentation files
187
240
  - You want to refresh project context
188
- - Monthly maintenance of CLAUDE.md
241
+ - Monthly maintenance of CLAUDE.md and hooks
189
242
 
190
- ✅ **Safe to run multiple times during development** - Your customizations are always preserved!
243
+ ✅ **Safe to run multiple times** existing customizations and hook files are never overwritten.
@@ -30,10 +30,10 @@ Read the task description from arguments. Scan for signal keywords to determine
30
30
 
31
31
  | Signal Keywords | Detected Flow |
32
32
  |----------------|---------------|
33
- | bug, fix, broken, error, regression, failing, crash, wrong | `debug` (11 steps) |
34
- | urgent, prod down, hotfix, emergency, critical, production, incident | `hotfix` (11 steps) |
35
- | config, bump, typo, copy, rename, dependency, upgrade, version, docs | `fast-track` (10 steps) |
36
- | *(default — no special signals)* | `feature` (21 steps) |
33
+ | bug, fix, broken, error, regression, failing, crash, wrong | `debug` (7 steps) |
34
+ | urgent, prod down, hotfix, emergency, critical, production, incident | `hotfix` (6 steps) |
35
+ | config, bump, typo, copy, rename, dependency, upgrade, version, docs | `fast-track` (5 steps) |
36
+ | *(default — no special signals)* | `feature` (8 steps) |
37
37
 
38
38
  **Scope detection:**
39
39
 
@@ -53,6 +53,31 @@ Read the task description from arguments. Scan for signal keywords to determine
53
53
  | `backend` only | `solo` |
54
54
  | `unknown` | `solo` (default) |
55
55
 
56
+ ### Step 1.5 — Missing Context Detection (automatic, no prompt)
57
+
58
+ After classification, scan the task description for gaps. This is informational only — does NOT block.
59
+
60
+ **Critical context checks:**
61
+
62
+ | Check | How to detect | Auto-resolve |
63
+ |-------|--------------|--------------|
64
+ | Tech stack specified? | Look for framework/language keywords | Auto-detect from package.json, composer.json, go.mod, Cargo.toml |
65
+ | Acceptance criteria present? | Look for "should", "must", "when", "given" | Cannot auto-resolve — flag for user |
66
+ | Scope boundaries stated? | Look for "only", "not", "exclude", "just" | Cannot auto-resolve — flag for user |
67
+ | Security requirements? | Check if task involves auth, user data, payments, tokens | Flag: "This touches auth/user data — consider security requirements" |
68
+ | Testing expectations? | Look for "test", "coverage", "spec" | Default: 100% coverage on new code (per workflow) |
69
+
70
+ **If 3+ critical items are missing**, include in the recommendation output:
71
+
72
+ ```
73
+ Missing Context (3 items — consider clarifying):
74
+ - No acceptance criteria detected
75
+ - No scope boundaries stated (what should NOT change?)
76
+ - Task involves user data but no security requirements mentioned
77
+ ```
78
+
79
+ This check runs silently. If <3 items missing, no output.
80
+
56
81
  ### Step 2 — Recommend (one prompt, user confirms or overrides)
57
82
 
58
83
  Present the classification and recommendation:
@@ -60,7 +85,7 @@ Present the classification and recommendation:
60
85
  ```
61
86
  Detected: [Full-stack feature / Backend bug fix / Frontend hotfix / Small config change / etc.]
62
87
  Recommended:
63
- Flow: [feature (21 steps) / debug (11 steps) / hotfix (11 steps) / fast-track (10 steps)]
88
+ Flow: [feature (8 steps) / debug (7 steps) / hotfix (6 steps) / fast-track (5 steps)]
64
89
  Mode: [autopilot / manual]
65
90
  Agents: [team (backend + frontend + QA) / solo]
66
91
 
@@ -84,12 +109,10 @@ Wait for user response:
84
109
 
85
110
  ### Step 3 — Route (enters the chosen flow)
86
111
 
87
- 1. Reset `tasks/workflow-status.md`:
88
- - Set all steps to `not yet`
89
- - Add metadata to the tracker header:
90
- ```
91
- > Mode: [autopilot/manual] | Agents: [team/solo] | Flow: [feature/debug/hotfix/fast-track]
92
- ```
112
+ 1. Log the routing decision to terminal:
113
+ ```
114
+ Mode: [autopilot/manual] | Agents: [team/solo] | Flow: [feature/debug/hotfix/fast-track]
115
+ ```
93
116
 
94
117
  2. Dispatch to the chosen flow:
95
118
 
@@ -126,12 +126,12 @@ Sub-agent 3: [FE command]
126
126
  - Read the failure output carefully — identify the root cause
127
127
  - Fix the failing **implementation code** or test setup, not the test assertions (tests define expected behavior)
128
128
  - Do NOT skip, mark incomplete, or delete failing tests
129
- - Auto-commit with message `fix(test): resolve failing tests` — do NOT ask the user
130
129
  - Re-run the failing suite
131
130
  - Loop until all pass
132
- - Fix the implementation and auto-commit. If the fix is a logic change (new behavior, changed contract), update the relevant tests to reflect the new behavior before committing.
131
+ - If the fix is a logic change (new behavior, changed contract), update the relevant tests to reflect the new behavior.
132
+ - Once all tests pass, make ONE squash commit: `fix(test): resolve failing tests` — do NOT ask the user
133
133
 
134
- > Gates own their commits — the fix-commit-rerun loop is fully internal. No manual commit step needed after this gate.
134
+ > Squash gate commits — collect all fixes for the pass, then one commit. Do not commit after each individual fix.
135
135
 
136
136
  ### 5. Verify Coverage
137
137
 
@@ -1,28 +0,0 @@
1
- # Workflow Status
2
-
3
- > Tracks progress through the development workflow. Reset this file when starting a new feature, bug fix, or task.
4
- > Updated automatically after every slash command. Do not edit manually.
5
-
6
- | # | Step | Status | Notes |
7
- |---|------|--------|-------|
8
- | 1 | Read Todo | >> next << | |
9
- | 2 | Read Lessons | not yet | |
10
- | 3 | Explore (`/sk:brainstorm`) | not yet | |
11
- | 4 | Design (`/sk:frontend-design` or `/sk:api-design`) | not yet | optional |
12
- | 5 | Accessibility (`/sk:accessibility`) | not yet | optional |
13
- | 6 | Plan (`/sk:write-plan`) | not yet | |
14
- | 7 | Branch (`/sk:branch`) | not yet | |
15
- | 8 | Migrate (`/sk:schema-migrate`) | not yet | optional |
16
- | 9 | Write Tests (`/sk:write-tests`) | not yet | |
17
- | 10 | Implement (`/sk:execute-plan`) | not yet | |
18
- | 11 | Commit (`/sk:smart-commit`) | not yet | |
19
- | 12 | **Lint + Dep Audit** (`/sk:lint`) | not yet | HARD GATE — loop until clean, gates own their commits |
20
- | 13 | **Verify Tests** (`/sk:test`) | not yet | HARD GATE — 100% coverage, gates own their commits |
21
- | 14 | **Security** (`/sk:security-check`) | not yet | HARD GATE — 0 issues, gates own their commits |
22
- | 15 | Performance (`/sk:perf`) | not yet | optional gate, gates own their commits |
23
- | 16 | **Review + Simplify** (`/sk:review`) | not yet | HARD GATE — 0 issues, gates own their commits |
24
- | 17 | **E2E** (`/sk:e2e`) | not yet | HARD GATE — all E2E scenarios must pass, gates own their commits |
25
- | 18 | Update (`/sk:update-task`) | not yet | |
26
- | 19 | Finalize (`/sk:finish-feature`) | not yet | |
27
- | 20 | Sync Features (`/sk:features`) | not yet | required — sync feature specs after ship |
28
- | 21 | Release (`/sk:release`) | not yet | optional |