@kennethsolomon/shipkit 3.4.0 → 3.6.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.
package/README.md CHANGED
@@ -243,6 +243,8 @@ Requirement changes → /sk:change → re-enter at correct step
243
243
  |---------|-------------|
244
244
  | `/sk:help` | Show all commands and workflow overview |
245
245
  | `/sk:status` | Show workflow and task status at a glance |
246
+ | `/sk:dashboard` | Read-only workflow Kanban board — localhost server, multi-worktree |
247
+ | `/sk:context` | Load all context files + output session brief for fast session start |
246
248
  | `/sk:skill-creator` | Create or improve ShipKit skills |
247
249
 
248
250
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kennethsolomon/shipkit",
3
- "version": "3.4.0",
3
+ "version": "3.6.0",
4
4
  "description": "A structured workflow toolkit for Claude Code.",
5
5
  "keywords": [
6
6
  "claude",
@@ -32,6 +32,7 @@ You MUST create a task for each of these items and complete them in order:
32
32
  - Key decisions made
33
33
  - Chosen approach + rationale
34
34
  - Open questions (if any remain)
35
+ Additionally, **append** an ADR entry to `docs/decisions.md` (see "Decisions Log" section below).
35
36
  (Optionally also write a full design doc to docs/plans/YYYY-MM-DD-<topic>-design.md)
36
37
  6. **Transition to implementation** — invoke writing-plans skill to create implementation plan
37
38
 
@@ -89,13 +90,49 @@ digraph brainstorming {
89
90
 
90
91
  **Documentation:**
91
92
  - Write the findings to `tasks/findings.md` (required — captures problem, decisions, approach, rationale)
93
+ - Append an ADR entry to `docs/decisions.md` (required — see "Decisions Log" section below)
92
94
  - Optionally: Create a full design doc at `docs/plans/YYYY-MM-DD-<topic>-design.md` for complex projects
93
- - Commit the findings and any design document to git
95
+ - Commit the findings, decisions log entry, and any design document to git
94
96
 
95
97
  **Implementation:**
96
98
  - Invoke the writing-plans skill to create a detailed implementation plan
97
99
  - Do NOT invoke any other skill. writing-plans is the next step.
98
100
 
101
+ ## Decisions Log
102
+
103
+ After writing findings to `tasks/findings.md`, also **append** an Architecture Decision Record (ADR) entry to `docs/decisions.md`. This file is **cumulative and append-only** — never overwrite or remove existing entries.
104
+
105
+ ### If `docs/decisions.md` does not exist
106
+
107
+ Create it with this header before the first entry:
108
+
109
+ ```markdown
110
+ # Architecture Decision Records
111
+
112
+ A cumulative log of key design decisions made across features. Append-only — never overwrite.
113
+ ```
114
+
115
+ ### ADR Entry Format
116
+
117
+ Append this template for each brainstorm decision:
118
+
119
+ ```markdown
120
+ ## [YYYY-MM-DD] [Feature/Task Name]
121
+
122
+ **Context:** [problem being solved — 1-2 sentences]
123
+ **Decision:** [chosen approach — 1 sentence]
124
+ **Rationale:** [why this approach over alternatives]
125
+ **Consequences:** [trade-offs accepted]
126
+ **Status:** accepted
127
+ ```
128
+
129
+ ### Rules
130
+
131
+ - **Append-only** — never edit or delete existing entries in `docs/decisions.md`
132
+ - **One entry per brainstorm** — each completed brainstorm adds exactly one ADR entry
133
+ - **Use absolute dates** — always `YYYY-MM-DD`, never relative dates
134
+ - Entries accumulate across features — this is a project-level historical record
135
+
99
136
  ## Key Principles
100
137
 
101
138
  - **One question at a time** - Don't overwhelm with multiple questions
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: sk:context
3
+ description: "Session initializer — loads all project context files and outputs a formatted session brief. Run this at the start of every conversation to orient the AI and yourself."
4
+ ---
5
+
6
+ # /sk:context — Session Brief + Context Loader
7
+
8
+ Load all project context files into the conversation and output a formatted session brief. Designed to be run at the **start of every session** for instant orientation.
9
+
10
+ ## What It Does
11
+
12
+ 1. **Reads** all context files (listed below) to load project state into the conversation
13
+ 2. **Outputs** a formatted SESSION BRIEF the user can read at a glance
14
+ 3. **Applies** all active lessons from `tasks/lessons.md` as standing constraints for the session
15
+
16
+ ## Hard Rules
17
+
18
+ - **Read-only.** This skill does not modify any files.
19
+ - **Graceful fallback.** Missing files are noted in the brief, not treated as errors.
20
+ - **No questions.** This skill runs silently — it does not ask the user anything.
21
+
22
+ ---
23
+
24
+ ## Files to Read (in order)
25
+
26
+ | # | File | What to Extract |
27
+ |---|------|-----------------|
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
+
36
+ ### Reading Strategy
37
+
38
+ - Read files 1-5 first (these are the core context).
39
+ - Files 6-7 are optional — check if they exist before reading.
40
+ - For `tasks/progress.md`: only read the last 50 lines to avoid loading a huge file.
41
+ - If `tasks/todo.md` is missing: the project has no active task.
42
+ - If `tasks/workflow-status.md` is missing: the workflow hasn't started.
43
+
44
+ ---
45
+
46
+ ## Output Format
47
+
48
+ After reading all files, output this session brief:
49
+
50
+ ```
51
+ ╔══════════════════════════════════════════╗
52
+ ║ SESSION BRIEF ║
53
+ ╚══════════════════════════════════════════╝
54
+ Branch: [current git branch]
55
+ Task: [task name from todo.md, or "No active task"]
56
+ Step: [step #] [step name] → run `/sk:[command]`
57
+ Last done: [last progress.md entry summary, 1 line]
58
+ Pending: [N] checkboxes remaining in todo.md
59
+ Lessons: [count] active — [most critical 1-liner from lessons.md]
60
+ Open Qs: [open questions from findings.md, or "none"]
61
+ Product: [value prop from vision.md, or "no vision.md found"]
62
+ ════════════════════════════════════════════
63
+ ```
64
+
65
+ ### Field Rules
66
+
67
+ - **Branch:** Run `git branch --show-current` to get the current branch name.
68
+ - **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".
69
+ - **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".
70
+ - **Last done:** The most recent entry from `tasks/progress.md`. Summarize in one line.
71
+ - **Pending:** Count `- [ ]` lines in `tasks/todo.md`. Stop counting at the first `## Verification`, `## Acceptance Criteria`, or `## Risks` heading (these are meta-sections, not tasks).
72
+ - **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.
73
+ - **Open Qs:** Check for an "## Open Questions" section in `tasks/findings.md`. List them or say "none".
74
+ - **Product:** From `docs/vision.md`, extract the value proposition. If file doesn't exist, say "no vision.md found".
75
+
76
+ ---
77
+
78
+ ## After the Brief
79
+
80
+ After outputting the session brief:
81
+
82
+ 1. **State the active lessons** that apply as constraints. List each prevention rule as a bullet.
83
+ 2. **State what's next** — tell the user the next step and the command to run.
84
+ 3. If the user has a specific request, proceed with it (the context is now loaded).
85
+
86
+ ---
87
+
88
+ ## Edge Cases
89
+
90
+ | Scenario | Behavior |
91
+ |----------|----------|
92
+ | No `tasks/todo.md` | Show "No active task — ready to start fresh" |
93
+ | No `tasks/workflow-status.md` | Show "Workflow not started" for Step field |
94
+ | No `tasks/progress.md` | Show "No progress logged yet" for Last done |
95
+ | No `tasks/findings.md` | Show "none" for Open Qs |
96
+ | No `tasks/lessons.md` | Show "0 active" for Lessons |
97
+ | No `docs/decisions.md` | Show "no decisions log yet" — do not error |
98
+ | No `docs/vision.md` | Show "no vision.md found" — do not error |
99
+ | All checkboxes done in todo.md | Show "Task complete — 0 pending" |
100
+
101
+ ---
102
+
103
+ ## Model Routing
104
+
105
+ Read `.shipkit/config.json` from the project root if it exists.
106
+
107
+ - If `model_overrides["sk:context"]` is set, use that model — it takes precedence.
108
+ - Otherwise use the `profile` field. Default: `balanced`.
109
+
110
+ | Profile | Model |
111
+ |---------|-------|
112
+ | `full-sail` | sonnet |
113
+ | `quality` | sonnet |
114
+ | `balanced` | sonnet |
115
+ | `budget` | haiku |
116
+
117
+ > This skill is lightweight (read-only file operations + brief output). Sonnet is sufficient for all quality profiles. Haiku for budget.
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: sk:dashboard
3
+ description: Read-only workflow Kanban board — localhost server showing workflow status across git worktrees
4
+ license: Complete terms in LICENSE.txt
5
+ ---
6
+
7
+ # /sk:dashboard
8
+
9
+ ## Purpose
10
+
11
+ Read-only Kanban board that visualizes workflow progress across all git worktrees in a project. Runs as a standalone localhost server — no workflow integration required. Use it anytime you want a visual overview of where each worktree stands in the workflow.
12
+
13
+ ## How to Start
14
+
15
+ ```bash
16
+ node skills/sk:dashboard/server.js
17
+ ```
18
+
19
+ Opens on `http://localhost:3333`. Stop with `Ctrl+C`.
20
+
21
+ Override the port:
22
+
23
+ ```bash
24
+ node skills/sk:dashboard/server.js --port 4000
25
+ # or
26
+ PORT=4000 node skills/sk:dashboard/server.js
27
+ ```
28
+
29
+ ## What It Shows
30
+
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
35
+ - **Current task** — the active task name from `tasks/todo.md`
36
+
37
+ ## Architecture
38
+
39
+ Zero-dependency Node.js server. Uses only built-in modules (`http`, `fs`, `path`, `child_process`).
40
+
41
+ - `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
43
+ - `dashboard.html` is a single-file UI (HTML + embedded CSS + JS) that polls `/api/status` every 3 seconds
44
+ - Worktree discovery via `git worktree list`
45
+
46
+ ## Key Details
47
+
48
+ - Read-only — does not modify any files
49
+ - Auto-discovers worktrees via `git worktree list`
50
+ - Graceful degradation: missing files show empty state, offline falls back to system fonts
51
+ - Default port 3333, configurable via `--port` flag or `PORT` env var
52
+ - Uses only Node.js built-in modules (http, fs, path, child_process)
53
+
54
+ ## Files
55
+
56
+ - `server.js` — Node.js HTTP server (~150 lines)
57
+ - `dashboard.html` — Single-file Kanban UI (HTML + embedded CSS + JS)
58
+
59
+ ## Model Routing
60
+
61
+ Read `.shipkit/config.json` from the project root if it exists.
62
+
63
+ - If `model_overrides["sk:dashboard"]` is set, use that model — it takes precedence.
64
+ - Otherwise use the `profile` field. Default: `balanced`.
65
+
66
+ | Profile | Model |
67
+ |---------|-------|
68
+ | `full-sail` | sonnet |
69
+ | `quality` | sonnet |
70
+ | `balanced` | sonnet |
71
+ | `budget` | haiku |