tracerkit 1.9.2 → 1.9.4

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
@@ -8,11 +8,11 @@
8
8
  [![npm version](https://img.shields.io/npm/v/tracerkit)](https://www.npmjs.com/package/tracerkit)
9
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
10
 
11
- Replace ad-hoc AI prompts with a repeatable spec-driven workflow: from idea to verified, archived code.
11
+ Replace ad-hoc AI prompts with a repeatable spec-driven workflow: from idea to verified, archived spec.
12
12
 
13
13
  Named after the tracer-bullet technique from _The Pragmatic Programmer_: **Tracer** + **Kit**.
14
14
 
15
- **Zero runtime dependencies.** Pure Markdown skills, no build step.
15
+ **Markdown skills, one CLI.** No build step, no project dependencies.
16
16
 
17
17
  </div>
18
18
 
@@ -30,26 +30,11 @@ TracerKit takes a different approach: **tracer-bullet vertical slices**. Each ph
30
30
  npx tracerkit init
31
31
  ```
32
32
 
33
- Skills are installed globally to `~/.claude/skills/`, available in every project. No per-project setup needed.
33
+ Skills are installed globally to `~/.claude/skills/`, available in every project. Safe to re-run adds missing skills without overwriting ones you've modified.
34
34
 
35
35
  ### Workflow
36
36
 
37
37
  ```
38
- You: /tk:brief
39
- AI: | Feature | Status | Age | Progress | Next |
40
- |-------------------|-------------|-----|----------|------------------------------|
41
- | dark-mode-support | in_progress | 3d | 3/7 | Toggle component renders ... |
42
-
43
- **Focus → dark-mode-support**
44
-
45
- You: # continue working on dark-mode-support...
46
-
47
- You: /tk:check dark-mode-support
48
- AI: Status: done | Total: 7/7
49
- Archived to .tracerkit/archives/dark-mode-support/
50
-
51
- ---
52
-
53
38
  You: /tk:prd add dark mode support
54
39
  AI: Written .tracerkit/prds/dark-mode-support.md
55
40
  Run `/tk:plan dark-mode-support` next?
@@ -67,6 +52,17 @@ AI: Status: done | Total: 5/5
67
52
  Archived to .tracerkit/archives/dark-mode-support/
68
53
  ```
69
54
 
55
+ Use `/tk:brief` at the start of any session to see active features and pick up where you left off:
56
+
57
+ ```
58
+ You: /tk:brief
59
+ AI: | Feature | Status | Age | Progress | Next |
60
+ |-------------------|-------------|-----|----------|------------------------------|
61
+ | dark-mode-support | in_progress | 3d | 3/7 | Toggle component renders ... |
62
+
63
+ **Focus → dark-mode-support**
64
+ ```
65
+
70
66
  See [Examples](docs/examples.md) for full walkthroughs.
71
67
 
72
68
  <details>
@@ -86,27 +82,27 @@ npx tracerkit uninstall . # remove project-scoped skills
86
82
 
87
83
  TracerKit ships three skills that take a feature from idea to verified archive.
88
84
 
89
- #### `/tk:prd <idea>`: Write a PRD
85
+ ### `/tk:prd <idea>`: Write a PRD
90
86
 
91
87
  Interactive interview that explores your codebase, asks scoping questions one at a time, designs deep modules, and writes a structured PRD.
92
88
 
93
89
  **Output:** `.tracerkit/prds/<slug>.md`
94
90
 
95
- #### `/tk:plan <slug>`: Create an implementation plan
91
+ ### `/tk:plan <slug>`: Create an implementation plan
96
92
 
97
93
  Reads a PRD and breaks it into phased **tracer-bullet vertical slices**. Each phase is a thin but complete path through every layer (schema, service, API, UI, tests), demoable on its own.
98
94
 
99
95
  **Output:** `.tracerkit/plans/<slug>.md`
100
96
 
101
- #### `/tk:brief`: Session briefing
97
+ ### `/tk:brief`: Session briefing
102
98
 
103
99
  Shows active features, their progress, and suggested focus. Use at the start of a session to orient.
104
100
 
105
101
  **Output:** Feature dashboard in the terminal — no files written.
106
102
 
107
- #### `/tk:check [slug]`: Check and archive
103
+ ### `/tk:check [slug]`: Verify and archive
108
104
 
109
- Checks the codebase against the plan's done-when checkboxes. Runs tests, validates user stories, updates check progress, and transitions the PRD status. On `done`, archives the PRD and plan to `.tracerkit/archives/<slug>/` automatically.
105
+ Verifies the codebase against the plan's done-when checkboxes. Runs tests, validates user stories, updates phase progress, and transitions the PRD status. On `done`, archives the PRD and plan to `.tracerkit/archives/<slug>/` automatically.
110
106
 
111
107
  Without arguments, shows a feature dashboard with status and progress before asking which feature to check.
112
108
 
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { c as e, i as t, n, o as r, r as i, t as a } from "./uninstall-CyVs_ZgH.js";
2
+ import { c as e, i as t, n, o as r, r as i, t as a } from "./uninstall-C4dWMK0k.js";
3
3
  import { existsSync as o, mkdirSync as s, readFileSync as c, readdirSync as l, rmSync as u, unlinkSync as d, writeFileSync as f } from "node:fs";
4
4
  import { dirname as p, join as m, resolve as h } from "node:path";
5
5
  import { fileURLToPath as g } from "node:url";
@@ -172,9 +172,9 @@ function L(e) {
172
172
  let t = e[0], o = e.slice(1);
173
173
  switch (t) {
174
174
  case "brief": return A(F(o, process.cwd()));
175
- case "init": return i(F(o));
175
+ case "init": return n(F(o));
176
176
  case "update": {
177
- let e = o.includes(r.force), t = n(F(o.filter((e) => e !== r.force)), { force: e });
177
+ let e = o.includes(r.force), t = i(F(o.filter((e) => e !== r.force)), { force: e });
178
178
  return t.push("", "Updated to the latest TracerKit."), t.push("If using Claude Code, restart your session to load changes."), t;
179
179
  }
180
180
  case "uninstall": return a(F(o));
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, s as i, t as a } from "./uninstall-CyVs_ZgH.js";
2
- export { t as COMMANDS, e as DEPRECATED_SKILLS, i as SKILL_NAMES, r as init, a as uninstall, n as update };
1
+ import { a as e, i as t, n, r, s as i, t as a } from "./uninstall-C4dWMK0k.js";
2
+ export { t as COMMANDS, e as DEPRECATED_SKILLS, i as SKILL_NAMES, n as init, a as uninstall, r as update };
@@ -104,15 +104,8 @@ function x(t, r) {
104
104
  };
105
105
  }
106
106
  //#endregion
107
- //#region src/commands/init.ts
108
- function S(t) {
109
- for (let n of f) if (e(s(t, ".claude", "skills", n))) throw Error(`.claude/skills/${n}/ already exists — run \`tracerkit update\` to add new skills, or \`tracerkit update --force\` to replace all skills`);
110
- let { copied: n } = y(t, d(t));
111
- return n.map((e) => `✓ ${e}`);
112
- }
113
- //#endregion
114
107
  //#region src/commands/update.ts
115
- function C(t, n) {
108
+ function S(t, n) {
116
109
  if (!f.some((n) => e(s(t, ".claude", "skills", n)))) throw Error("TracerKit not initialized — run `tracerkit init` first");
117
110
  let r = d(t), { unchanged: a, modified: o, missing: c } = x(t, r), l = [];
118
111
  for (let n of p) {
@@ -140,6 +133,13 @@ function C(t, n) {
140
133
  return l;
141
134
  }
142
135
  //#endregion
136
+ //#region src/commands/init.ts
137
+ function C(t) {
138
+ if (f.some((n) => e(s(t, ".claude", "skills", n)))) return S(t);
139
+ let { copied: n } = y(t, d(t));
140
+ return n.map((e) => `✓ ${e}`);
141
+ }
142
+ //#endregion
143
143
  //#region src/commands/uninstall.ts
144
144
  function w(t) {
145
145
  if (!f.some((n) => e(s(t, ".claude", "skills", n)))) throw Error("TracerKit not initialized — nothing to uninstall");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tracerkit",
3
- "version": "1.9.2",
3
+ "version": "1.9.4",
4
4
  "description": "Spec-driven workflow for Claude Code: replace ad-hoc prompts with PRD → plan → verify.",
5
5
  "license": "MIT",
6
6
  "author": {