@devshop/crew 0.8.0 → 0.9.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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [0.9.0](https://github.com/devshop-software/crew/compare/v0.8.1...v0.9.0) (2026-05-07)
2
+
3
+
4
+ ### Features
5
+
6
+ * **prep:** simplify input handling and rephrase boundary question ([2679e32](https://github.com/devshop-software/crew/commit/2679e3208a36aaca816e3997914707874ff5709f))
7
+
8
+ ## [0.8.1](https://github.com/devshop-software/crew/compare/v0.8.0...v0.8.1) (2026-04-30)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * don't rewrite users' version range on self-update ([a85a3c3](https://github.com/devshop-software/crew/commit/a85a3c38485f9613bb5a3f679dff08d472601568))
14
+
1
15
  # [0.8.0](https://github.com/devshop-software/crew/compare/v0.7.0...v0.8.0) (2026-04-30)
2
16
 
3
17
 
package/README.md CHANGED
@@ -19,7 +19,7 @@ pnpm exec crew init
19
19
 
20
20
  To pull newer skill content later, run `pnpm exec crew update`. The flow:
21
21
 
22
- 1. Auto-detects the package manager (pnpm / npm / yarn / bun) from your lockfile and runs `<pm> update @devshop/crew --latest` to bump the package.
22
+ 1. Auto-detects the package manager (pnpm / npm / yarn / bun) from your lockfile and runs `<pm> update @devshop/crew` to bump the package within the range you've pinned in `package.json`. To always pull the absolute newest (including across major versions), set the range to `"latest"`; for "any 0.x" use `"0.x"`.
23
23
  2. Re-execs the freshly-installed CLI.
24
24
  3. Computes the diff and prints a plan: which skills will be added, updated, replaced (had local edits), or removed (no longer in the package).
25
25
  4. Prompts `Apply these changes? [Y/n]`. Default Y. Press `n` to abort with no writes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devshop/crew",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Project-agnostic Claude Code skills for spec → implement → qa → review → ship",
5
5
  "bin": {
6
6
  "crew": "scripts/cli.js"
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "license": "MIT",
40
40
  "devDependencies": {
41
- "@devshop/crew": "0.x",
41
+ "@devshop/crew": "~0.8.0",
42
42
  "@semantic-release/changelog": "^6.0.3",
43
43
  "@semantic-release/exec": "^7.1.0",
44
44
  "@semantic-release/git": "^10.0.1",
@@ -38,11 +38,16 @@ function isLocalDep(projectRoot) {
38
38
  } catch { return false; }
39
39
  }
40
40
 
41
+ // Range-respecting update so we don't rewrite the user's package.json
42
+ // version specifier. To always pull the absolute latest across majors,
43
+ // users can pin "@devshop/crew": "latest" in their package.json (a dist-tag,
44
+ // not a semver range — never gets rewritten); for "all 0.x but never 1.x"
45
+ // use "0.x". Any caret/tilde range will be honored as written.
41
46
  const UPDATE_ARGS = {
42
- pnpm: ['update', PACKAGE_NAME, '--latest'],
43
- npm: ['install', `${PACKAGE_NAME}@latest`],
44
- yarn: ['upgrade', PACKAGE_NAME, '--latest'],
45
- bun: ['update', PACKAGE_NAME, '--latest']
47
+ pnpm: ['update', PACKAGE_NAME],
48
+ npm: ['update', PACKAGE_NAME],
49
+ yarn: ['upgrade', PACKAGE_NAME],
50
+ bun: ['update', PACKAGE_NAME]
46
51
  };
47
52
 
48
53
  // Returns one of:
@@ -25,8 +25,7 @@ Activate when called from the `/prep` command. Otherwise ignore.
25
25
 
26
26
  - **Empty** — ask: *"What's the feature? A one-sentence description works."*
27
27
  - **Free text** — a rough description. Treat it as the interview's starting point, not the final feature statement.
28
- - **Path to an existing `*-BRIEF.md`** — enter **edit mode**: read it, ask what should change, update in place.
29
- - Contains `--quick` — skip the interview and produce the brief in one pass from whatever context the user gave. Use this only when the user has already stated the feature clearly enough to write the brief without follow-up.
28
+ - **Path to an existing `*-BRIEF.md`** — read it, identify which sections are empty or thin, run the interview only for those gaps.
30
29
 
31
30
  ---
32
31
 
@@ -54,14 +53,14 @@ Before asking questions, spend a few minutes verifying the feature maps to real
54
53
 
55
54
  ---
56
55
 
57
- ## Step 3 — Interview (skip if `--quick`)
56
+ ## Step 3 — Interview
58
57
 
59
58
  Ask targeted questions in **one batch** (not drip-fed). Choose 3–6 from:
60
59
 
61
60
  1. **What's broken / needed** — one sentence in the user's own words, if the rough description was vague.
62
61
  2. **Concrete motivating source** — a PR, bug report, dated incident, workflow folder, ticket. "Why now?" This often becomes the brief's strongest paragraph.
63
62
  3. **Decisions already made** — what has the user already ruled in or out? These are the non-obvious constraints no code-reading will reveal (e.g. *"we're nuking both DBs before this lands"*).
64
- 4. **Out of scope** what's tempting but explicitly excluded? Ask even if the user didn't mention it; out-of-scope is where briefs silently fail.
63
+ 4. **Boundary** — where's the edge of this feature? What's adjacent that we want to deliberately leave alone — something a developer might be tempted to also fix here? Ask even if the user didn't mention it; this is where briefs silently fail.
65
64
  5. **Acceptance shape** — what must be observably true when this is done? 1–3 items, not exhaustive. You'll flesh them out when drafting.
66
65
  6. **Post-merge manual steps** — anything a human has to do after the PR merges (DB operations, flag flips, smoke checks)?
67
66
 
@@ -91,8 +90,6 @@ Consequence for downstream skills: **ingest the brief's content, do not cite its
91
90
 
92
91
  `<SLUG>-BRIEF.md` — uppercase kebab-case slug derived from the feature title (e.g. `MIGRATION-CONSOLIDATION-BRIEF.md`, `DARK-MODE-BRIEF.md`). The `-BRIEF.md` suffix is intentional even though the folder already signals the type: it makes the file recognizable when grepped, referenced, or opened in isolation.
93
92
 
94
- An optional second argument to `/prep` may override the full output path. Default follows the rule above.
95
-
96
93
  ### Structure
97
94
 
98
95
  The brief has two clearly-delimited sections. The human section comes first so a reader can stop there.
@@ -201,17 +198,6 @@ If the user requests changes, update in place. Re-present only the changed secti
201
198
 
202
199
  ---
203
200
 
204
- ## Edit mode
205
-
206
- When invoked with a path to an existing brief:
207
-
208
- 1. Read it.
209
- 2. Ask what should change (or act on the user's input if they already said).
210
- 3. Update in place; preserve the two-section structure.
211
- 4. Re-present the changed section only.
212
-
213
- ---
214
-
215
201
  ## Constraints
216
202
 
217
203
  **DO:**
@@ -225,7 +211,7 @@ When invoked with a path to an existing brief:
225
211
  - Embed project-specific tool names, framework names, or conventions into the skill file itself. This skill must work in any codebase that has a `CLAUDE.md`.
226
212
  - Duplicate content across the two sections — state each thing once, in the section where it belongs.
227
213
  - Pad the human section with mechanical detail. If it's longer than one screen, it's failing.
228
- - Skip the interview in default mode. The point of `/prep` is to extract what only the user knows.
214
+ - Skip the interview. The point of `/prep` is to extract what only the user knows.
229
215
  - Explore the codebase to spec-writer depth. This is *pre-spec* work.
230
216
  - Prescribe mechanisms (hooks, CSS utilities, component layout, file-level changes) unless the user explicitly committed to one during the interview. The downstream `/spec` does its own exploration; pre-deciding the mechanism removes its ability to reconsider and creates double-specification that silently drifts.
231
217
  - Pre-stamp the spec's depth. `/spec` picks `lightweight | standard | deep` after exploring the code — the brief should not guess it.