@kennethsolomon/shipkit 3.10.1 → 3.10.2

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 (33) hide show
  1. package/README.md +29 -45
  2. package/commands/sk/autopilot.md +2 -2
  3. package/commands/sk/security-check.md +2 -2
  4. package/commands/sk/status.md +4 -9
  5. package/package.json +1 -1
  6. package/skills/sk:accessibility/SKILL.md +10 -1
  7. package/skills/sk:autopilot/SKILL.md +26 -45
  8. package/skills/sk:context/SKILL.md +11 -15
  9. package/skills/sk:dashboard/SKILL.md +3 -4
  10. package/skills/sk:dashboard/server.js +0 -65
  11. package/skills/sk:e2e/SKILL.md +3 -3
  12. package/skills/sk:fast-track/SKILL.md +0 -9
  13. package/skills/sk:frontend-design/SKILL.md +232 -0
  14. package/skills/sk:gates/SKILL.md +2 -3
  15. package/skills/sk:lint/SKILL.md +3 -3
  16. package/skills/sk:perf/SKILL.md +3 -3
  17. package/skills/sk:retro/SKILL.md +1 -2
  18. package/skills/sk:review/SKILL.md +2 -2
  19. package/skills/sk:setup-claude/SKILL.md +1 -2
  20. package/skills/sk:setup-claude/scripts/__pycache__/apply_setup_claude.cpython-314.pyc +0 -0
  21. package/skills/sk:setup-claude/scripts/apply_setup_claude.py +0 -1
  22. package/skills/sk:setup-claude/templates/.claude/statusline.sh +1 -15
  23. package/skills/sk:setup-claude/templates/CLAUDE.md.template +61 -137
  24. package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +2 -13
  25. package/skills/sk:setup-claude/templates/hooks/pre-compact.sh +1 -12
  26. package/skills/sk:setup-claude/templates/hooks/session-start.sh +0 -11
  27. package/skills/sk:setup-claude/templates/hooks/session-stop.sh +0 -7
  28. package/skills/sk:setup-claude/tests/__pycache__/test_apply_setup_claude.cpython-314.pyc +0 -0
  29. package/skills/sk:setup-claude/tests/test_apply_setup_claude.py +2 -33
  30. package/skills/sk:setup-optimizer/SKILL.md +9 -7
  31. package/skills/sk:start/SKILL.md +9 -11
  32. package/skills/sk:test/SKILL.md +3 -3
  33. package/skills/sk:setup-claude/templates/tasks/workflow-status.md.template +0 -28
package/README.md CHANGED
@@ -55,8 +55,8 @@ That's it. `/sk:setup-claude` creates your project scaffolding: planning files,
55
55
  | I want to... | Run this | What happens |
56
56
  |--------------|----------|-------------|
57
57
  | **Not sure — let ShipKit decide** | `/sk:start` | Classifies your task, routes to optimal flow/mode/agents |
58
- | **Build a new feature** | `/sk:brainstorm` | Full workflow: plan → TDD → 6 quality gates → PR |
59
- | **Build hands-free** | `/sk:autopilot` | All 21 steps, auto-skip, auto-advance, auto-commit |
58
+ | **Build a new feature** | `/sk:brainstorm` | Full workflow: plan → TDD → quality gates → PR |
59
+ | **Build hands-free** | `/sk:autopilot` | All 8 steps, auto-skip, auto-advance, auto-commit |
60
60
  | **Full-stack feature (parallel)** | `/sk:team` | Parallel domain agents (backend + frontend + QA) |
61
61
  | **Make a small change** | `/sk:fast-track` | Skip planning, keep all quality gates |
62
62
  | **Fix a bug** | `/sk:debug` | Investigate → regression test → fix → gates → PR |
@@ -74,20 +74,13 @@ That's it. `/sk:setup-claude` creates your project scaffolding: planning files,
74
74
  | Step | Command | What it does | Phase |
75
75
  |------|---------|-------------|-------|
76
76
  | 1 | `/sk:brainstorm` | Explore requirements, propose approaches | Think |
77
- | 2 | `/sk:frontend-design` | *Optional* — UI mockup (`--pencil` for visual) | Think |
78
- | 3 | `/sk:api-design` | *Optional* API contracts | Think |
79
- | 4 | `/sk:accessibility` | *Optional* WCAG 2.1 AA audit on design | Think |
80
- | 5 | `/sk:write-plan` | Write decision-complete plan | Think |
81
- | 6 | `/sk:branch` | Create feature branch | Build |
82
- | 7 | `/sk:schema-migrate` | *Optional* auto-skips if no migrations | Build |
83
- | 8 | `/sk:write-tests` | TDD red write failing tests | Build |
84
- | 9 | `/sk:execute-plan` | TDD green — make tests pass | Build |
85
- | 10 | `/sk:smart-commit` | Conventional commit | Build |
86
- | 11 | `/sk:gates` | All 6 quality gates (parallel) | Verify |
87
- | 12 | `/sk:update-task` | Mark done | Ship |
88
- | 13 | `/sk:finish-feature` | Changelog + PR | Ship |
89
- | 14 | `/sk:features` | Sync feature specs | Ship |
90
- | 15 | `/sk:release` | *Optional* — version bump + tag | Ship |
77
+ | 2 | `/sk:frontend-design` or `/sk:api-design` | *Optional* — UI mockup or API contracts (includes accessibility) | Think |
78
+ | 3 | `/sk:write-plan` | Write decision-complete plan | Think |
79
+ | 4 | `/sk:branch` | Create feature branch | Build |
80
+ | 5 | `/sk:write-tests` + `/sk:execute-plan` | TDD: write failing tests, then implement | Build |
81
+ | 6 | `/sk:smart-commit` | Conventional commit | Build |
82
+ | 7 | `/sk:gates` | All 6 quality gates (parallel batches) | Verify |
83
+ | 8 | `/sk:finish-feature` | Update task, changelog, PR, feature sync, release | Ship |
91
84
 
92
85
  ---
93
86
 
@@ -97,14 +90,11 @@ That's it. `/sk:setup-claude` creates your project scaffolding: planning files,
97
90
 
98
91
  | Step | Command | What it does | Phase |
99
92
  |------|---------|-------------|-------|
100
- | ~~1~~ | ~~/sk:brainstorm~~ | **Skipped** | |
101
- | ~~2~~ | ~~/sk:write-plan~~ | **Skipped** | — |
102
- | ~~3~~ | ~~/sk:write-tests~~ | **Skipped** | |
103
- | 4 | `/sk:branch` | Create feature branch | Build |
104
- | 5 | implement directly | No TDD write code | Build |
105
- | 6 | `/sk:smart-commit` | Conventional commit | Build |
106
- | 7 | `/sk:gates` | All 6 quality gates (parallel) | Verify |
107
- | 8 | `/sk:finish-feature` | Changelog + PR | Ship |
93
+ | 1 | `/sk:branch` | Create feature branch | Build |
94
+ | 2 | implement directly | No TDDwrite code | Build |
95
+ | 3 | `/sk:smart-commit` | Conventional commit | Build |
96
+ | 4 | `/sk:gates` | All quality gates (parallel batches) | Verify |
97
+ | 5 | `/sk:finish-feature` | Changelog + PR | Ship |
108
98
 
109
99
  Guard rails: warns if diff > 300 lines or > 5 new files.
110
100
 
@@ -116,15 +106,13 @@ Guard rails: warns if diff > 300 lines or > 5 new files.
116
106
 
117
107
  | Step | Command | What it does | Phase |
118
108
  |------|---------|-------------|-------|
119
- | ~~1~~ | ~~/sk:brainstorm~~ | **Skipped** | |
120
- | ~~2~~ | ~~/sk:write-plan~~ | **Skipped** | |
121
- | 3 | `/sk:debug` | Reproduce, isolate, hypothesize, verify | Think |
122
- | 4 | `/sk:branch` | Create fix branch | Build |
123
- | 5 | `/sk:write-tests` | Regression test that reproduces the bug | Build |
124
- | 6 | implement the fix | Make regression test pass | Build |
125
- | 7 | `/sk:smart-commit` | Commit fix + test | Build |
126
- | 8 | `/sk:gates` | All 6 quality gates (parallel) | Verify |
127
- | 9 | `/sk:finish-feature` | Changelog + PR | Ship |
109
+ | 1 | `/sk:debug` | Reproduce, isolate, hypothesize, verify | Think |
110
+ | 2 | `/sk:branch` | Create fix branch | Build |
111
+ | 3 | `/sk:write-tests` | Regression test that reproduces the bug | Build |
112
+ | 4 | implement the fix | Make regression test pass | Build |
113
+ | 5 | `/sk:smart-commit` | Commit fix + test | Build |
114
+ | 6 | `/sk:gates` | All quality gates (parallel batches) | Verify |
115
+ | 7 | `/sk:finish-feature` | Changelog + PR | Ship |
128
116
 
129
117
  ---
130
118
 
@@ -134,16 +122,12 @@ Guard rails: warns if diff > 300 lines or > 5 new files.
134
122
 
135
123
  | Step | Command | What it does | Phase |
136
124
  |------|---------|-------------|-------|
137
- | ~~1~~ | ~~/sk:brainstorm~~ | **Skipped** | |
138
- | ~~2~~ | ~~/sk:write-plan~~ | **Skipped** | |
139
- | ~~3~~ | ~~/sk:write-tests~~ | **Skipped** | |
140
- | 4 | `/sk:debug` | Root-cause analysis | Think |
141
- | 5 | `/sk:branch` | Create hotfix branch | Build |
142
- | 6 | implement directly | Fix the issue | Build |
143
- | 7 | run existing tests | Must still pass | Build |
144
- | 8 | `/sk:smart-commit` | Commit the fix | Build |
145
- | 9 | `/sk:gates` | All 6 quality gates (parallel) | Verify |
146
- | 10 | `/sk:finish-feature` | Changelog + PR (marked as hotfix) | Ship |
125
+ | 1 | `/sk:debug` | Root-cause analysis | Think |
126
+ | 2 | `/sk:branch` | Create hotfix branch | Build |
127
+ | 3 | implement directly | Fix the issue | Build |
128
+ | 4 | `/sk:smart-commit` | Commit the fix | Build |
129
+ | 5 | `/sk:gates` | All quality gates (parallel batches) | Verify |
130
+ | 6 | `/sk:finish-feature` | Changelog + PR (marked as hotfix) | Ship |
147
131
 
148
132
  After merging: add regression test + lesson to `tasks/lessons.md`.
149
133
 
@@ -172,7 +156,7 @@ One command runs all 6 gates in parallel batches:
172
156
  | **3** | code review | Needs deep understanding |
173
157
  | **4** | E2E Tests | Needs review fixes |
174
158
 
175
- Each gate auto-fixes, auto-commits, and re-runs until clean. If a gate fails 3 times, it stops and asks for help.
159
+ Each gate auto-fixes and re-runs until clean. Fixes are squashed into one commit per gate pass. If a gate fails 3 times, it stops and asks for help.
176
160
 
177
161
  Pre-existing issues are logged to `tasks/tech-debt.md` — not fixed inline.
178
162
 
@@ -265,7 +249,7 @@ Use these anytime — they're not part of any workflow.
265
249
 
266
250
  | Topic | Where |
267
251
  |-------|-------|
268
- | Detailed workflow steps (21-step table) | [DOCUMENTATION.md](.claude/docs/DOCUMENTATION.md) |
252
+ | Detailed workflow steps (8-step flow) | [DOCUMENTATION.md](.claude/docs/DOCUMENTATION.md) |
269
253
  | Feature specifications | [docs/FEATURES.md](docs/FEATURES.md) |
270
254
  | Model routing profiles & config | [DOCUMENTATION.md — Config](.claude/docs/DOCUMENTATION.md#config-reference) |
271
255
  | Infrastructure (hooks, agents, rules) | [DOCUMENTATION.md — Setup](.claude/docs/DOCUMENTATION.md#what-gets-created) |
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "Hands-free workflow — all 21 steps, auto-skip, auto-advance, auto-commit. Stops only for direction approval and PR push."
2
+ description: "Hands-free workflow — all 8 steps, auto-skip, auto-advance, auto-commit. Stops only for direction approval and PR push."
3
3
  ---
4
4
 
5
5
  # /sk:autopilot
@@ -8,7 +8,7 @@ Run the full ShipIt workflow in hands-free mode.
8
8
 
9
9
  Usage: `/sk:autopilot <task description>`
10
10
 
11
- Executes all 21 workflow steps with:
11
+ Executes all 8 workflow steps with:
12
12
  - **Auto-skip** — optional steps skipped when clearly not needed
13
13
  - **Auto-advance** — no manual step transitions
14
14
  - **Auto-commit** — conventional format, no approval prompt
@@ -12,7 +12,7 @@ By default, this checks only files changed on the current branch. Use `--all` to
12
12
 
13
13
  ## Hard Rules
14
14
 
15
- - **Fix all in-scope findings** (files in `git diff main..HEAD --name-only`) immediately after the audit. auto-commit with `fix(security): resolve [severity] security findings`. Re-run the audit until 0 findings remain.
15
+ - **Fix all in-scope findings** (files in `git diff main..HEAD --name-only`) immediately after the audit. Re-run the audit until 0 findings remain. Once clean, make ONE squash commit: `fix(security): resolve security findings`.
16
16
  - **Pre-existing findings** (files outside the current branch diff): log to `tasks/tech-debt.md` using this format — do NOT fix inline:
17
17
  ```
18
18
  ### [YYYY-MM-DD] Found during: sk:security-check
@@ -20,7 +20,7 @@ By default, this checks only files changed on the current branch. Use `--all` to
20
20
  Issue: description of the vulnerability
21
21
  Severity: critical | high | medium | low
22
22
  ```
23
- - **Gates own their commits** — the fix-commit-rerun loop is fully internal. No manual commit step needed after this gate.
23
+ - **Squash gate commits** — collect all fixes for the pass, then one commit. Do not commit after each individual fix.
24
24
  - **DO NOT skip checks** because the project is small or simple. Production is production.
25
25
  - **Every finding must cite a specific file and line number.**
26
26
  - **Every finding must reference the standard it violates** (OWASP, CWE, NIST, etc.).
@@ -1,25 +1,20 @@
1
1
  ---
2
- description: Show planning and workflow status at a glance.”
2
+ description: "Show planning and workflow status at a glance."
3
3
  ---
4
4
 
5
5
  <!-- Generated by /sk:setup-claude -->
6
6
 
7
7
  # /sk:status
8
8
 
9
- Read `tasks/todo.md` and `tasks/workflow-status.md`, then display a compact status summary.
9
+ Read `tasks/todo.md`, then display a compact status summary.
10
10
 
11
11
  ## What to show
12
12
 
13
- ### Workflow Status (from `tasks/workflow-status.md`)
14
- - Current step: show the step marked `>> next <<`
15
- - Completed steps: count of `done` steps vs total
16
- - Any steps marked `partial` or with notable Notes
17
- - If no workflow file exists, say “No active workflow”
18
-
19
13
  ### Task Status (from `tasks/todo.md`)
20
14
  - Total plan items vs completed plan items (checkbox count)
15
+ - Current git branch
21
16
  - Errors count (if the file has an Errors section/table)
22
17
  - Whether `tasks/findings.md` and `tasks/progress.md` exist
23
18
 
24
- Keep it brief: answer where am I?” and whats next?”.
19
+ Keep it brief: answer "where am I?" and "what's next?".
25
20
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kennethsolomon/shipkit",
3
- "version": "3.10.1",
3
+ "version": "3.10.2",
4
4
  "description": "A structured workflow toolkit for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",
@@ -43,6 +43,8 @@ Run this skill:
43
43
  - Visible focus indicator on all interactive elements (not removed with `outline: none` without replacement)
44
44
  - Modal/dialog focus management: focus moves into modal on open, returns to trigger on close
45
45
  - Skip navigation link present for pages with repeated navigation
46
+ - Modals and multi-step flows must have a visible cancel/back affordance — no dead ends (WCAG 3.2.2)
47
+ - Do not override or intercept system/platform keyboard shortcuts (Tab, arrow keys, Escape, VoiceOver gestures)
46
48
 
47
49
  ### 3. ARIA & Semantics (WCAG 4.1.2, 1.3.1)
48
50
  - Semantic HTML first (`<button>`, `<nav>`, `<main>`, `<header>`) — ARIA only when HTML is insufficient
@@ -70,7 +72,14 @@ Run this skill:
70
72
  - All non-essential animations respect `prefers-reduced-motion` media query
71
73
  - Auto-playing animations can be paused, stopped, or hidden
72
74
 
73
- ### 7. Content & Structure (WCAG 1.3.1, 2.4.6, 2.4.2)
75
+ ### 7. iOS Dynamic Type (Apple HIG)
76
+ - UI must remain fully readable and usable when system font size is at the largest accessibility setting
77
+ - No text truncation at large sizes — prefer wrapping over ellipsis
78
+ - All layouts must reflow correctly without overlapping or clipping at Dynamic Type XXL
79
+ - Avoid fixed heights on elements that contain text — use dynamic sizing
80
+ - Test at: Settings → Accessibility → Display & Text Size → Larger Text (max slider)
81
+
82
+ ### 8. Content & Structure (WCAG 1.3.1, 2.4.6, 2.4.2)
74
83
  - Single `<h1>` per page; heading hierarchy is logical (no skipped levels)
75
84
  - Page has a descriptive `<title>`
76
85
  - Link text is descriptive standalone ("Read the docs" not "Click here")
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: sk:autopilot
3
- description: Hands-free workflow — runs all 21 steps with auto-skip, auto-advance, auto-commit. Stops only for direction approval, 3-strike failures, and PR push.
3
+ description: Hands-free workflow — runs all 8 steps with auto-skip, auto-advance, auto-commit. Stops only for direction approval, 3-strike failures, and PR push.
4
4
  user_invocable: true
5
5
  allowed_tools: Read, Write, Bash, Glob, Grep, Agent, Skill
6
6
  ---
7
7
 
8
8
  # Autopilot Mode
9
9
 
10
- Hands-free workflow that executes all 21 steps of the ShipIt workflow with minimal interruptions. Same quality gates, same fix loops, same 100% coverage — just fewer stops.
10
+ Hands-free workflow that executes all 8 steps of the ShipIt workflow with minimal interruptions. Same quality gates, same fix loops, same 100% coverage — just fewer stops.
11
11
 
12
12
  ## When to Use
13
13
 
@@ -23,30 +23,19 @@ Hands-free workflow that executes all 21 steps of the ShipIt workflow with minim
23
23
 
24
24
  ## Quality Guarantee
25
25
 
26
- Autopilot runs the EXACT same 21 steps as manual mode:
26
+ Autopilot runs the EXACT same 8 steps as manual mode:
27
27
  - ALL quality gates enforced (lint, test, security, perf, review, e2e)
28
- - ALL fix-commit-rerun loops active
28
+ - ALL fix-rerun loops active
29
29
  - 100% test coverage required on new code
30
30
  - 0 security issues required
31
31
  - The ONLY difference: auto-advance between steps instead of stopping
32
32
 
33
33
  ## Steps
34
34
 
35
- ### 0. Reset Tracker
35
+ ### 1. Load Context + Brainstorm + Direction Approval (STOP — requires user input)
36
36
 
37
- Read `tasks/workflow-status.md`. If it has done/skipped steps from a different task, auto-reset all steps to `not yet`.
38
-
39
- ### 1. Load Context (auto — no prompt)
40
-
41
- - Read `tasks/todo.md`
42
- - Read `tasks/lessons.md` (apply all active lessons as constraints)
43
- - Read `tasks/findings.md` (if exists)
44
- - Read `tasks/tech-debt.md` (if exists)
45
-
46
- ### 2. Brainstorm + Direction Approval (STOP — requires user input)
47
-
48
- Run brainstorm internally:
49
- - Explore the codebase (3 parallel Explore agents)
37
+ - Read `tasks/todo.md`, `tasks/lessons.md`, `tasks/findings.md`, `tasks/tech-debt.md`
38
+ - Run brainstorm internally (3 parallel Explore agents)
50
39
  - Propose 2-3 approaches with trade-offs
51
40
 
52
41
  **Present ONE direction summary and ask:**
@@ -57,40 +46,33 @@ Run brainstorm internally:
57
46
 
58
47
  Wait for explicit `y` before continuing. This is the ONLY planning stop.
59
48
 
49
+ ### 2. Design (auto-skip if no frontend/API keywords)
50
+
51
+ Run `/sk:frontend-design` or `/sk:api-design` if applicable. Auto-skip if no frontend/API keywords detected. Log: `Auto-skipped: Design ([reason])`
52
+
60
53
  ### 3. Plan (auto-advance)
61
54
 
62
- Write the implementation plan to `tasks/todo.md`. Do NOT ask for plan approval — the direction approval in step 2 covers this.
55
+ Write the implementation plan to `tasks/todo.md`. Do NOT ask for plan approval — the direction approval in step 1 covers this.
63
56
 
64
57
  ### 4. Branch (auto-advance)
65
58
 
66
59
  Create feature branch auto-named from the task. Do NOT ask for confirmation.
67
60
 
68
- ### 5. Auto-Skip Detection
61
+ ### 5. Write Tests + Implement (auto-advance)
69
62
 
70
- Scan `tasks/todo.md` for frontend/backend/database keywords. For each optional step:
71
- - **Design (step 4)**: auto-skip if no frontend keywords
72
- - **Accessibility (step 5)**: auto-skip if no frontend keywords
73
- - **Migrate (step 8)**: auto-skip if no database keywords
74
- - **Performance (step 15)**: auto-skip if no frontend AND no database keywords
63
+ - Run `/sk:write-tests` (TDD red phase)
64
+ - Run `/sk:schema-migrate` if database keywords detected
65
+ - Run `/sk:execute-plan` (TDD green phase)
66
+ - Auto-advance when done
75
67
 
76
- Log each auto-skip: `Auto-skipped: [Step Name] ([reason])`
77
-
78
- ### 6. Write Tests (auto-advance)
79
-
80
- Write failing tests based on the plan (TDD red phase). Auto-advance when done.
81
-
82
- ### 7. Implement (auto-advance)
83
-
84
- Execute the plan — make failing tests pass. Use wave-based sub-agents for parallel work where possible.
85
-
86
- ### 8. Commit (auto-commit)
68
+ ### 6. Commit (auto-commit)
87
69
 
88
70
  Auto-commit with conventional commit format. Do NOT ask for commit message approval.
89
71
  Format: `type(scope): description`
90
72
 
91
- ### 9. Gates (auto-advance on clean pass)
73
+ ### 7. Gates (auto-advance on clean pass)
92
74
 
93
- Run all quality gates. Use `/sk:gates` if available, otherwise run sequentially:
75
+ Run all quality gates via `/sk:gates`:
94
76
  1. Lint + dep audit
95
77
  2. Test (100% coverage)
96
78
  3. Security (0 issues)
@@ -98,9 +80,9 @@ Run all quality gates. Use `/sk:gates` if available, otherwise run sequentially:
98
80
  5. Review + simplify
99
81
  6. E2E
100
82
 
101
- Each gate auto-fixes and re-runs internally. Auto-advance to next gate on clean pass.
83
+ Each gate auto-fixes and re-runs internally. Squash gate commits one commit per gate pass.
102
84
 
103
- ### 10. PR Push (STOP — requires user confirmation)
85
+ ### 8. PR Push (STOP — requires user confirmation)
104
86
 
105
87
  **This is the second mandatory stop.** Present:
106
88
  > "All gates passed. Ready to create PR.
@@ -110,11 +92,10 @@ Each gate auto-fixes and re-runs internally. Auto-advance to next gate on clean
110
92
 
111
93
  Wait for explicit confirmation — pushing is visible to others.
112
94
 
113
- ### 11. Finalize (auto-advance)
114
-
95
+ After confirmation:
115
96
  - Create PR
116
97
  - Sync features (`/sk:features`)
117
- - Ask about release (step 21 is never auto-skipped)
98
+ - Ask about release (never auto-skipped)
118
99
 
119
100
  ## 3-Strike Protocol
120
101
 
@@ -128,9 +109,9 @@ If any step fails 3 times:
128
109
 
129
110
  | Stop | When | Why |
130
111
  |------|------|-----|
131
- | Direction approval | After brainstorm (step 2) | User must approve the approach |
112
+ | Direction approval | After brainstorm (step 1) | User must approve the approach |
132
113
  | 3-strike failure | Any step fails 3x | Needs human judgment |
133
- | PR push | Before creating PR (step 10) | Visible to others — always confirm |
114
+ | PR push | Before creating PR (step 8) | Visible to others — always confirm |
134
115
 
135
116
  Everything else auto-advances.
136
117
 
@@ -26,21 +26,19 @@ Load all project context files into the conversation and output a formatted sess
26
26
  | # | File | What to Extract |
27
27
  |---|------|-----------------|
28
28
  | 1 | `tasks/todo.md` | Task name (from `# TODO —` heading), milestone progress, count of `- [x]` (done) vs `- [ ]` (pending) checkboxes |
29
- | 2 | `tasks/workflow-status.md` | Current step (row with `>> next <<`), step name, command to run |
30
- | 3 | `tasks/progress.md` | Last 5 entries only (most recent work). If file is large, read only the last 50 lines. |
31
- | 4 | `tasks/findings.md` | Current decisions, chosen approach, open questions |
32
- | 5 | `tasks/lessons.md` | All active lessons read in full, apply as constraints for this session |
33
- | 6 | `docs/decisions.md` | If exists: last 3 ADR entries. If missing: note "no decisions log yet" |
34
- | 7 | `docs/vision.md` | If exists: product name + value proposition. If missing: note "no vision.md found" |
35
- | 8 | `tasks/tech-debt.md` | If exists: count entries with no `Resolved:` line (unresolved), highest severity among unresolved |
29
+ | 2 | `tasks/progress.md` | Last 5 entries only (most recent work). If file is large, read only the last 50 lines. |
30
+ | 3 | `tasks/findings.md` | Current decisions, chosen approach, open questions |
31
+ | 4 | `tasks/lessons.md` | All active lessons — read in full, apply as constraints for this session |
32
+ | 5 | `docs/decisions.md` | If exists: last 3 ADR entries. If missing: note "no decisions log yet" |
33
+ | 6 | `docs/vision.md` | If exists: product name + value proposition. If missing: note "no vision.md found" |
34
+ | 7 | `tasks/tech-debt.md` | If exists: count entries with no `Resolved:` line (unresolved), highest severity among unresolved |
36
35
 
37
36
  ### Reading Strategy
38
37
 
39
- - Read files 1-5 first (these are the core context).
40
- - Files 6-7 are optional — check if they exist before reading.
38
+ - Read files 1-4 first (these are the core context).
39
+ - Files 5-6 are optional — check if they exist before reading.
41
40
  - For `tasks/progress.md`: only read the last 50 lines to avoid loading a huge file.
42
41
  - If `tasks/todo.md` is missing: the project has no active task.
43
- - If `tasks/workflow-status.md` is missing: the workflow hasn't started.
44
42
 
45
43
  ---
46
44
 
@@ -54,9 +52,8 @@ After reading all files, output this session brief:
54
52
  ╚══════════════════════════════════════════╝
55
53
  Branch: [current git branch]
56
54
  Task: [task name from todo.md, or "No active task"]
57
- Step: [step #] [step name] run `/sk:[command]`
55
+ Progress: [N done] / [M total] checkboxes in todo.md
58
56
  Last done: [last progress.md entry summary, 1 line]
59
- Pending: [N] checkboxes remaining in todo.md
60
57
  Lessons: [count] active — [most critical 1-liner from lessons.md]
61
58
  Open Qs: [open questions from findings.md, or "none"]
62
59
  Tech Debt: [N] unresolved — highest: [severity] ([file:line])
@@ -68,9 +65,8 @@ Product: [value prop from vision.md, or "no vision.md found"]
68
65
 
69
66
  - **Branch:** Run `git branch --show-current` to get the current branch name.
70
67
  - **Task:** Extract from the first `# TODO —` line in `tasks/todo.md`. If the file doesn't exist or all checkboxes are done, show "No active task — ready to start fresh".
71
- - **Step:** Find the row containing `>> next <<` in `tasks/workflow-status.md`. Extract step number, name, and command. If no `>> next <<` found, show "Workflow complete" or "Not started".
68
+ - **Progress:** Count `- [x]` (done) and `- [ ]` (pending) lines in `tasks/todo.md`. Stop counting at the first `## Verification`, `## Acceptance Criteria`, or `## Risks` heading (these are meta-sections, not tasks). Show `N done / M total`.
72
69
  - **Last done:** The most recent entry from `tasks/progress.md`. Summarize in one line.
73
- - **Pending:** Count `- [ ]` lines in `tasks/todo.md`. Stop counting at the first `## Verification`, `## Acceptance Criteria`, or `## Risks` heading (these are meta-sections, not tasks).
74
70
  - **Lessons:** Count `### [` headings in `tasks/lessons.md` (each lesson starts with `### [YYYY-MM-DD]`). Show the count + the **Prevention:** line from the most recent lesson.
75
71
  - **Open Qs:** Check for an "## Open Questions" section in `tasks/findings.md`. List them or say "none".
76
72
  - **Tech Debt:** Read `tasks/tech-debt.md` if it exists. Count entries that have no `Resolved:` line — each entry starts with `### [`. For unresolved entries, find the highest severity. Show `N unresolved — highest: [severity] ([file])`. If file missing or 0 unresolved, show `none`.
@@ -93,7 +89,7 @@ After outputting the session brief:
93
89
  | Scenario | Behavior |
94
90
  |----------|----------|
95
91
  | No `tasks/todo.md` | Show "No active task — ready to start fresh" |
96
- | No `tasks/workflow-status.md` | Show "Workflow not started" for Step field |
92
+ | All checkboxes done in todo.md | Show "Task complete — 0 pending" for Progress field |
97
93
  | No `tasks/progress.md` | Show "No progress logged yet" for Last done |
98
94
  | No `tasks/findings.md` | Show "none" for Open Qs |
99
95
  | No `tasks/lessons.md` | Show "0 active" for Lessons |
@@ -29,9 +29,8 @@ PORT=4000 node skills/sk:dashboard/server.js
29
29
  ## What It Shows
30
30
 
31
31
  - **Swimlanes per worktree** — one row per worktree discovered via `git worktree list`
32
- - **Phase timeline** — workflow steps laid out as columns (Read, Explore, Plan, Branch, Tests, Implement, Lint, Verify, Security, Review, E2E, Finalize)
33
- - **Status indicators** — done, skipped, partial, in-progress, not yet
34
- - **Progress bars** — percentage of steps completed per worktree
32
+ - **Phase timeline** — workflow steps laid out as columns (Explore, Design, Plan, Branch, Tests+Implement, Commit, Gates, Finalize)
33
+ - **Progress bars** — percentage of todo.md checkboxes completed per worktree
35
34
  - **Current task** — the active task name from `tasks/todo.md`
36
35
 
37
36
  ## Architecture
@@ -39,7 +38,7 @@ PORT=4000 node skills/sk:dashboard/server.js
39
38
  Zero-dependency Node.js server. Uses only built-in modules (`http`, `fs`, `path`, `child_process`).
40
39
 
41
40
  - `server.js` serves the dashboard HTML and exposes `/api/status`
42
- - `/api/status` reads `tasks/workflow-status.md` and `tasks/todo.md` from each worktree, parses step statuses, and returns JSON
41
+ - `/api/status` reads `tasks/todo.md` from each worktree, parses checkbox progress, and returns JSON
43
42
  - `dashboard.html` is a single-file UI (HTML + embedded CSS + JS) that polls `/api/status` every 3 seconds
44
43
  - Worktree discovery via `git worktree list`
45
44
 
@@ -7,9 +7,6 @@ const { execSync } = require("child_process");
7
7
  const PORT =
8
8
  parseInt(process.argv.find((_, i, a) => a[i - 1] === "--port") || process.env.PORT, 10) || 3333;
9
9
 
10
- const HARD_GATES = new Set([12, 14, 16, 20, 22]);
11
- const OPTIONALS = new Set([4, 5, 8, 18, 27]);
12
-
13
10
  function stripMd(s) {
14
11
  return (s || "").replace(/\*\*/g, "").replace(/`/g, "").trim();
15
12
  }
@@ -34,53 +31,6 @@ function discoverWorktrees() {
34
31
  }
35
32
  }
36
33
 
37
- function parseWorkflowStatus(worktreePath) {
38
- const filePath = path.join(worktreePath, "tasks", "workflow-status.md");
39
- try {
40
- const lines = fs.readFileSync(filePath, "utf8").split("\n");
41
-
42
- let headerFound = false;
43
- let separatorSkipped = false;
44
- const steps = [];
45
-
46
- for (const line of lines) {
47
- if (!headerFound) {
48
- if (line.includes("| # |")) headerFound = true;
49
- continue;
50
- }
51
- if (!separatorSkipped) {
52
- separatorSkipped = true;
53
- continue;
54
- }
55
- const cells = line.split("|").slice(1, -1).map((c) => c.trim());
56
- if (cells.length < 3) continue;
57
-
58
- const number = parseInt(cells[0], 10);
59
- if (isNaN(number)) continue;
60
-
61
- const rawStep = stripMd(cells[1]);
62
- const cmdMatch = rawStep.match(/\((.+?)\)/);
63
- const command = cmdMatch ? cmdMatch[1].trim() : "";
64
- const name = rawStep.replace(/\s*\(.+?\)\s*/, "").trim();
65
-
66
- steps.push({
67
- number,
68
- name,
69
- command,
70
- status: stripMd(cells[2]),
71
- notes: stripMd(cells[3]),
72
- isHardGate: HARD_GATES.has(number),
73
- isOptional: OPTIONALS.has(number),
74
- });
75
- }
76
- return steps;
77
- } catch (err) {
78
- if (err.code === "ENOENT") return [];
79
- process.stderr.write(`Error parsing workflow-status.md: ${err.message}\n`);
80
- return [];
81
- }
82
- }
83
-
84
34
  const STOP_HEADERS = new Set(["Verification", "Acceptance Criteria", "Risks", "Change Log", "Summary"]);
85
35
 
86
36
  function parseTodo(worktreePath) {
@@ -137,18 +87,8 @@ function parseTodo(worktreePath) {
137
87
  function buildStatus() {
138
88
  const worktrees = discoverWorktrees();
139
89
  return worktrees.map((wt) => {
140
- const steps = parseWorkflowStatus(wt.path);
141
90
  const todo = parseTodo(wt.path);
142
91
 
143
- let currentStep = 0;
144
- let totalDone = 0;
145
- let totalSkipped = 0;
146
- for (const s of steps) {
147
- if (s.status === ">> next <<") currentStep = s.number;
148
- if (s.status === "done") totalDone++;
149
- if (s.status === "skipped") totalSkipped++;
150
- }
151
-
152
92
  return {
153
93
  path: wt.path,
154
94
  branch: wt.branch,
@@ -156,11 +96,6 @@ function buildStatus() {
156
96
  todosDone: todo.todosDone,
157
97
  todosTotal: todo.todosTotal,
158
98
  todoItems: todo.todoItems,
159
- currentStep,
160
- totalDone,
161
- totalSkipped,
162
- totalSteps: steps.length,
163
- steps,
164
99
  };
165
100
  });
166
101
  }
@@ -184,17 +184,17 @@ If any fail → apply Fix & Retest Protocol.
184
184
 
185
185
  When this gate requires a fix, classify it before committing:
186
186
 
187
- **a. Style/config/wording change** (CSS tweak, copy change, selector fix) → auto-commit with `fix(e2e): resolve failing E2E scenarios` and re-run `/sk:e2e`. Do not ask the user.
187
+ **a. Style/config/wording change** (CSS tweak, copy change, selector fix) → include in the gate's squash commit and re-run `/sk:e2e`. Do not ask the user.
188
188
 
189
189
  **b. Logic change** (new branch, modified condition, new data path, query change, new function, API change) → trigger protocol:
190
190
  1. Update or add failing unit tests for the new behavior
191
191
  2. Re-run `/sk:test` — must pass at 100% coverage
192
- 3. Auto-commit tests + fix together with `fix(e2e): [description]`.
192
+ 3. Commit tests + fix together with `fix(e2e): [description]`.
193
193
  4. Re-run `/sk:e2e` from scratch
194
194
 
195
195
  **Exception:** Formatter auto-fixes are never logic changes — bypass protocol automatically.
196
196
 
197
- Gates own their commits — the fix-commit-rerun loop is fully internal. No manual commit step needed after this gate.
197
+ > Squash gate commits — collect all fixes for the pass, then one commit: `fix(e2e): resolve failing E2E scenarios`. Do not commit after each individual fix.
198
198
 
199
199
  **This gate cannot be skipped.** All scenarios must pass before proceeding to `/sk:update-task`.
200
200
 
@@ -61,15 +61,6 @@ Before proceeding, check the scope of planned changes:
61
61
  ### 6. Finalize
62
62
  - Run `/sk:finish-feature` for changelog + PR
63
63
 
64
- ## Workflow Status
65
-
66
- Fast-track updates `tasks/workflow-status.md` with abbreviated steps:
67
- - Steps 1-2 (read): done
68
- - Steps 3-6 (explore, design, accessibility, plan): skipped (fast-track)
69
- - Steps 7-11 (branch, implement, commit): done
70
- - Steps 12-17 (gates): handled by `/sk:gates`
71
- - Steps 18-21 (update, finalize, sync, release): done as applicable
72
-
73
64
  ## Model Routing
74
65
 
75
66
  | Profile | Model |