@specship/specship-win32-arm64 0.11.7 → 0.11.9

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 (100) hide show
  1. package/lib/dist/bin/specship.js +139 -13
  2. package/lib/dist/bin/specship.js.map +1 -1
  3. package/lib/dist/commands/{ss-check.md → specship/check.md} +5 -0
  4. package/lib/dist/commands/specship/spec.md +338 -0
  5. package/lib/dist/db/migrations.d.ts.map +1 -1
  6. package/lib/dist/db/migrations.js +1 -0
  7. package/lib/dist/db/migrations.js.map +1 -1
  8. package/lib/dist/enforce/enforce.d.ts +15 -0
  9. package/lib/dist/enforce/enforce.d.ts.map +1 -1
  10. package/lib/dist/enforce/enforce.js +43 -1
  11. package/lib/dist/enforce/enforce.js.map +1 -1
  12. package/lib/dist/extraction/index.d.ts +6 -0
  13. package/lib/dist/extraction/index.d.ts.map +1 -1
  14. package/lib/dist/extraction/index.js.map +1 -1
  15. package/lib/dist/index.d.ts +10 -2
  16. package/lib/dist/index.d.ts.map +1 -1
  17. package/lib/dist/index.js +54 -10
  18. package/lib/dist/index.js.map +1 -1
  19. package/lib/dist/installer/index.d.ts.map +1 -1
  20. package/lib/dist/installer/index.js +35 -0
  21. package/lib/dist/installer/index.js.map +1 -1
  22. package/lib/dist/installer/instructions-template.d.ts +2 -2
  23. package/lib/dist/installer/instructions-template.js +5 -5
  24. package/lib/dist/installer/instructions-template.js.map +1 -1
  25. package/lib/dist/installer/targets/claude.d.ts +16 -4
  26. package/lib/dist/installer/targets/claude.d.ts.map +1 -1
  27. package/lib/dist/installer/targets/claude.js +99 -21
  28. package/lib/dist/installer/targets/claude.js.map +1 -1
  29. package/lib/dist/mcp/designer-tools.js +1 -1
  30. package/lib/dist/mcp/designer-tools.js.map +1 -1
  31. package/lib/dist/mcp/server-instructions.d.ts +1 -1
  32. package/lib/dist/mcp/server-instructions.d.ts.map +1 -1
  33. package/lib/dist/mcp/server-instructions.js +1 -1
  34. package/lib/dist/mcp/spec-tools.d.ts +10 -0
  35. package/lib/dist/mcp/spec-tools.d.ts.map +1 -1
  36. package/lib/dist/mcp/spec-tools.js +231 -5
  37. package/lib/dist/mcp/spec-tools.js.map +1 -1
  38. package/lib/dist/mcp/tools.d.ts +12 -0
  39. package/lib/dist/mcp/tools.d.ts.map +1 -1
  40. package/lib/dist/mcp/tools.js +34 -1
  41. package/lib/dist/mcp/tools.js.map +1 -1
  42. package/lib/dist/resolution/brief-link-resolver.d.ts +20 -0
  43. package/lib/dist/resolution/brief-link-resolver.d.ts.map +1 -1
  44. package/lib/dist/resolution/brief-link-resolver.js +65 -1
  45. package/lib/dist/resolution/brief-link-resolver.js.map +1 -1
  46. package/lib/dist/resolution/domain-gap-seed.d.ts +1 -1
  47. package/lib/dist/resolution/domain-gap-seed.js +1 -1
  48. package/lib/dist/resolution/spec-link-resolver.d.ts +16 -2
  49. package/lib/dist/resolution/spec-link-resolver.d.ts.map +1 -1
  50. package/lib/dist/resolution/spec-link-resolver.js +19 -1
  51. package/lib/dist/resolution/spec-link-resolver.js.map +1 -1
  52. package/lib/dist/server/chat/classify.js +28 -8
  53. package/lib/dist/server/ingest/ingestor.js +17 -17
  54. package/lib/dist/server/ingest/pricing-backfill.js +55 -0
  55. package/lib/dist/server/ingest/pricing.js +3 -0
  56. package/lib/dist/server/ingest/project-paths.js +152 -0
  57. package/lib/dist/server/project-registry.js +15 -2
  58. package/lib/dist/server/routes/chat-answer.js +11 -0
  59. package/lib/dist/server/routes/claude.js +34 -13
  60. package/lib/dist/server/routes/events.js +20 -1
  61. package/lib/dist/server/routes/projects.js +6 -3
  62. package/lib/dist/server/routes/spec.js +22 -2
  63. package/lib/dist/server/server.js +21 -2
  64. package/lib/dist/web/chunk-AHI5XEVX.js +1 -0
  65. package/lib/dist/web/chunk-AS2GV63A.js +1 -0
  66. package/lib/dist/web/chunk-CGVC666W.js +1 -0
  67. package/lib/dist/web/chunk-KYSTCHAH.js +1 -0
  68. package/lib/dist/web/{chunk-E27QAKAB.js → chunk-M42QOYAE.js} +1 -1
  69. package/lib/dist/web/chunk-ML5ULGHY.js +1 -0
  70. package/lib/dist/web/{chunk-HPKNOV45.js → chunk-OTQR5VFM.js} +1 -1
  71. package/lib/dist/web/chunk-PS6HRYQQ.js +3 -0
  72. package/lib/dist/web/chunk-S5J5WQXB.js +6 -0
  73. package/lib/dist/web/chunk-W5TEIONI.js +2 -0
  74. package/lib/dist/web/chunk-XKG5X37F.js +1 -0
  75. package/lib/dist/web/index.html +2 -2
  76. package/lib/dist/web/main-JT2RR3JS.js +1 -0
  77. package/lib/dist/web/styles-ATJUD7TT.css +1 -0
  78. package/lib/dist/workflows/defaults/claude-design-implement.yaml +6 -6
  79. package/lib/dist/workflows/defaults/spec-author.yaml +1 -1
  80. package/lib/dist/workflows/defaults/spec-implement.yaml +41 -9
  81. package/lib/node_modules/.package-lock.json +1 -1
  82. package/lib/package.json +1 -1
  83. package/package.json +1 -1
  84. package/lib/dist/commands/ss-behaviour.md +0 -116
  85. package/lib/dist/commands/ss-design-implement.md +0 -84
  86. package/lib/dist/commands/ss-design-loop.md +0 -125
  87. package/lib/dist/commands/ss-spec.md +0 -118
  88. package/lib/dist/web/chunk-7MUNFW56.js +0 -1
  89. package/lib/dist/web/chunk-CYXQILZI.js +0 -1
  90. package/lib/dist/web/chunk-F5TBUYDH.js +0 -1
  91. package/lib/dist/web/chunk-JPSYO24K.js +0 -1
  92. package/lib/dist/web/chunk-LIFS4XH2.js +0 -6
  93. package/lib/dist/web/chunk-MADMRWIK.js +0 -3
  94. package/lib/dist/web/chunk-N5WSFE4J.js +0 -2
  95. package/lib/dist/web/chunk-UYOKO7C5.js +0 -1
  96. package/lib/dist/web/chunk-YNYVOPWF.js +0 -1
  97. package/lib/dist/web/chunk-YXYPTZ6E.js +0 -1
  98. package/lib/dist/web/main-5B4RR3BC.js +0 -1
  99. package/lib/dist/web/styles-KSOPUVDA.css +0 -1
  100. /package/lib/dist/commands/{ss-explore.md → specship/explore.md} +0 -0
@@ -0,0 +1,338 @@
1
+ ---
2
+ description: Intent door — view, list, capture or review ideas, author, fast-path, design, implement, review, or extend a spec. No arg = the spec funnel; a SPEC_ID = that spec's detail; `idea`/`ideas`/`list`/`new`/`fast`/`design`/`implement`/`review`/`triage`/`behaviour`/`domain` run the matching flow.
3
+ argument-hint: "<SPEC_ID> | idea <one-liner> | ideas | list | new <desc> | fast <desc> | design <URL | intent> | implement <ID> | review <ID> | triage <prompt> | behaviour <ID> | domain"
4
+ allowed-tools: Read, Edit, Write, Bash, mcp__specship__specship_spec, mcp__specship__specship_node, mcp__specship__specship_explore, mcp__specship__specship_search, mcp__specship__specship_link_assert, mcp__specship__specship_link_verify, mcp__specship__specship_drifted, mcp__specship__designer_session, mcp__specship__designer_prompt, mcp__specship__designer_ask, mcp__specship__designer_list, mcp__specship__designer_snapshot, mcp__specship__designer_handoff
5
+ ---
6
+
7
+ # SpecShip Spec: `$ARGUMENTS`
8
+
9
+ The **intent door** — one entry for the whole spec lifecycle. Route on the first
10
+ token of `$ARGUMENTS`; everything the old `ss-spec*` / `ss-implement` / `ss-triage`
11
+ / `ss-behaviour` / `ss-domain` commands did is reachable here, with no capability
12
+ lost.
13
+
14
+ ## Dispatch
15
+
16
+ - **(no argument)** → call `mcp__specship__specship_spec` with no `spec_id`: the
17
+ project's spec lifecycle funnel (brainstormed ideas → specs → implemented).
18
+ - **a bare `SPEC_ID`** (e.g. `REQ-AUTH-005`) → call `specship_spec` with that
19
+ `spec_id`: the body, parent/siblings, and linked code with state. Use this
20
+ before Read-ing the spec file. Jump into linked code via `specship_node`; if
21
+ nothing is linked yet, `specship_explore` on terms from the spec's title.
22
+ - **`idea <one-liner>`** → park the thought as an idea brief and return to the
23
+ interrupted work, without breaking flow (see *Idea* below). Append-only: no
24
+ gap-fill questions, no review pass, one confirmation line.
25
+ - **`list`** → call `specship_spec` with `list: true`: the flat spec inventory —
26
+ idea briefs, then every document's requirements, each carrying exactly one
27
+ rolled-up status (`authored · in-progress · implemented · verified ·
28
+ needs-attention`), closing with per-status totals (REQ-DOORS-008). ONE call;
29
+ render what it returns — no per-spec follow-up calls, no file reading. For
30
+ pipeline-health rollups use the no-argument funnel instead.
31
+ - **`ideas`** → call `specship_spec` with `ideas: true`: the ideas review view —
32
+ exactly the idea-state briefs (parked, unpromoted brainstorms), each showing
33
+ id, title, age since capture, and labels, closing with the promotion hand-off
34
+ (`/specship:spec new <brief-id>`) (REQ-IDEAS-002). ONE call; render what it
35
+ returns as-is — no per-idea follow-up calls, no file reading. An empty lane is
36
+ reported cleanly, not as an error. Promote a listed idea with
37
+ `/specship:spec new <brief-id>`.
38
+ - **`new <description>`** → the full, gated authoring loop (see *Author* below).
39
+ Use when the design isn't settled. A first token shaped `brief:<slug>` (a
40
+ parked idea's id) instead opens the **brief-seeded** loop: the interview
41
+ starts pre-filled from that brief and asks only what it leaves open, and the
42
+ written spec points back at the brief. Plain text still opens a blank
43
+ interview — the seeded path is additive.
44
+ - **`fast <description>`** → the **fast-path** (see below).
45
+ - **`design <URL | intent>`** → author from visually-expressed intent: a
46
+ `claude.ai/design` URL, a `figma.com` URL, or no URL (taste loop first). See
47
+ *Design* below.
48
+ - **`implement <SPEC_ID>`** → run the bundled workflow:
49
+ `specship workflow run spec-implement --input SPEC_ID=<ID>` (plan → approve →
50
+ implement → verify → link, in an isolated worktree). **If the session is in
51
+ plan mode, exit it first** (present the spec + the workflow's own gates as
52
+ the plan) — the spec IS the plan, the workflow carries its own plan→approve
53
+ gate, and plan mode blocks the `specship workflow run` launch
54
+ (REQ-DOORS-007).
55
+ - **`review <SPEC_ID>`** → a read-only rubric pass (see *Review* below); no edits.
56
+ - **`triage <prompt>`** → the triage flow (route a bug / error / one-line
57
+ enhancement to the existing spec it belongs to and append to it): see below.
58
+ - **`behaviour <SPEC_ID>`** → author + run E2E tests from the requirement's
59
+ acceptance criteria; see below.
60
+ - **`domain`** → capture a human-confirmed domain fact; see below.
61
+ - **any other free text** (not empty, not a `SPEC_ID`, not a known sub-route
62
+ verb — the known verbs are `idea`, `ideas`, `list`, `new`, `fast`, `design`,
63
+ `implement`, `review`, `triage`, `behaviour`, `domain`, so `idea …` routes to
64
+ the capture flow above and `ideas` to the review view, never reaching this
65
+ disambiguation — REQ-IDEAS-001.A6, REQ-IDEAS-002.A5)
66
+ → don't fall through to undefined behaviour. Ask **one** clarifying
67
+ question offering `new`, `fast`, and `triage`, **leading with an inferred
68
+ recommendation** from the input's shape: error-log-shaped input (a stack
69
+ trace, `file:line`, an exception/failure message) → recommend `triage`;
70
+ feature-shaped input (a capability the user wants) → recommend `new` (or
71
+ `fast` if it reads as a quick, settled change). Route to the chosen sub-route
72
+ once answered. The no-argument funnel and bare-`SPEC_ID` detail behaviours
73
+ above are unchanged.
74
+
75
+ ## Idea (`idea <one-liner>`)
76
+
77
+ The **five-second capture verb** (REQ-IDEAS-001). An idea arrives mid-flow; park
78
+ it and get back to what you were doing. This path is deliberately dumb — **no
79
+ brainstorm, no gap-fill questions, no diverge, no Post-write review** (those are
80
+ for authoring; parking is not authoring). Enrichment is what promotion
81
+ (`new <brief-id>`) is for.
82
+
83
+ **This path SKIPS both authoring gates below.** It does *not* run the "Plan mode
84
+ at the write/hand-off boundary" exit dance and it does *not* run the "Post-write
85
+ review" pass — capture is append-only. (If the session happens to be in plan
86
+ mode, exit it only so the one `Write` can land, nothing more — there is no plan
87
+ to present; the whole point is not to interrupt.)
88
+
89
+ Steps:
90
+
91
+ 1. **Empty guard (A5).** If the one-liner is empty (bare `idea`, or only
92
+ whitespace), **write nothing** — print the one-line usage hint
93
+ `Usage: /specship:spec idea <one-liner>` and return. No file, no sync.
94
+ 2. **Label prefix (A3).** If the one-liner begins with a bare `word:` prefix
95
+ (a single leading word immediately followed by a colon, e.g.
96
+ `idea perf: cache the snapshots`), take that word as the **label** and the
97
+ remainder (trimmed) as the one-liner. Match only a single leading
98
+ `^(\w+):\s*` — `we should: cache X` has no label (its first word isn't
99
+ colon-terminated). If stripping the label leaves an empty remainder, fall
100
+ back to the empty guard (A5).
101
+ 3. **Slug.** Kebab-case the one-liner (lowercase, non-alphanumeric → `-`,
102
+ collapse repeats, trim `-`), truncated to a sane length. If
103
+ `specs/<slug>/brief.md` already exists, append `-2`, `-3`, … until the path
104
+ is free — never overwrite an existing brief.
105
+ 4. **Grounding (A4), opportunistic — never blocking.** If the current
106
+ conversation already makes the code under discussion obvious (files just
107
+ read/edited, symbols named in the exchange), record them as a `## Grounding`
108
+ body section of `file:symbol` / `file` bullets so future review can
109
+ re-ground. If nothing is clearly in scope, **skip it silently** — absence of
110
+ context never blocks or delays capture. Do **not** go search for grounding.
111
+ 5. **Write the brief (A1).** `Write` `specs/<slug>/brief.md`:
112
+ ```markdown
113
+ ---
114
+ slug: <slug>
115
+ created: <YYYY-MM-DD> # today, from `date +%F`
116
+ label: <label> # only when a prefix label was parsed (A3)
117
+ ---
118
+ # <one-liner>
119
+
120
+ <one-liner>
121
+
122
+ ## Grounding # only when step 4 captured something (A4)
123
+ - <file>:<symbol>
124
+ ```
125
+ There is **no `spec:` key** — a brief without one reconciles to the `idea`
126
+ state, so it indexes as an `idea`-state `brief:<slug>` on the next sync (A1).
127
+ 6. **Sync + confirm (A2).** Run `specship sync`, then print exactly **one**
128
+ confirmation line naming the brief — e.g. `Parked as brief:<slug>.` — and
129
+ return to the interrupted work. Ask nothing.
130
+
131
+ ## Plan mode at the write/hand-off boundary (every authoring path)
132
+
133
+ Plan mode is fine — even natural — for the authoring *conversation* (the
134
+ diverge phase is read-only exploration). But the moment the human confirms,
135
+ plan mode has served its purpose: **exit it before the confirmed `Write` of
136
+ `specs/<slug>.md`, and before launching `implement`** (REQ-DOORS-007). The
137
+ human's confirmation inside this flow is the approval plan mode was waiting
138
+ for; staying in plan mode past it just blocks the write and stalls the
139
+ hand-off. Don't re-plan the spec in the exit — the spec is the plan.
140
+
141
+ ## Author (`new <description | brief:<slug>>`)
142
+
143
+ The gated authoring loop, run conversationally — diverge, then formalize. Write
144
+ NOTHING to disk until the human explicitly confirms.
145
+
146
+ **Seeded from a brief (`new brief:<slug>`).** A first token shaped `brief:<slug>`
147
+ means this is the promotion of a parked idea, not a blank author. This path is
148
+ purely additive — a plain description still falls straight to the loop below
149
+ (A4). When the argument is `brief:`-shaped:
150
+
151
+ - **Resolve** the brief first: call `specship_spec` with `spec_id:
152
+ "brief:<slug>"` (or `Read specs/<slug>/brief.md`).
153
+ - **Not found (A3):** if `specship_spec` reports no such brief, **stop** — print
154
+ a one-line not-found notice pointing at `/specship:spec ideas` to browse the
155
+ parked ideas (and offer plain `new <description>`). Never fall through to a
156
+ blank interview.
157
+ - **Found (A1):** treat the brief's problem statement, evidence, and code
158
+ grounding as **already-answered** interview inputs. Pre-fill step 1's
159
+ scope/ground and step 2's diverge from the brief, and interview **only** on
160
+ what the brief leaves open (UX, edge cases, non-goals). Still run
161
+ `specship_explore` on the brief's terms in step 1 — the brief's captured
162
+ grounding may be stale.
163
+
164
+ Then run the loop below, skipping every question the brief already answers; on
165
+ the write (step 3) the spec points back at the brief so the funnel promotes it.
166
+
167
+ 1. **Scope + ground.** Confirm it's one feature area (refuse "spec the whole
168
+ app"). Call `specship_explore` on terms from the description to find where
169
+ similar features live and which files the work will touch.
170
+ 2. **Diverge.** Propose 2–3 distinct approaches with trade-offs, lead with a
171
+ recommendation, and clarify the things the graph can't tell you (UX, edge
172
+ cases, non-goals) **one question at a time**. Iterate until the direction is
173
+ settled.
174
+ 3. **Draft + write.** On confirmation, `Write` `specs/<slug>.md` in the
175
+ `spec-author` format: frontmatter (id/title/owner/priority), `<!-- id: -->`
176
+ markers above every heading, an RFC-2119 keyword per requirement title, one
177
+ concern per requirement, `## Acceptance` with `.A<N>` bullets (happy +
178
+ failure). Mark genuinely-unknowable points `[needs review]`. **Seeded from a
179
+ brief:** the frontmatter MUST also carry `brief: <brief-slug>/brief.md` — the
180
+ value is relative to the spec file's own directory, so a spec at
181
+ `specs/<slug>.md` names `<brief-slug>/brief.md` (A2). After the step-4 sync,
182
+ the funnel's brief↔spec reconciliation flips that brief to `specified` and it
183
+ drops out of the `ideas` view automatically — no extra bookkeeping.
184
+ 4. **Sync + review:** `specship sync`, then run the shared **Post-write review**
185
+ (see below) — it is automatic, not optional. Then hand off with
186
+ `/specship:spec implement <ID>`.
187
+
188
+ (If a richer authoring skill — e.g. `spec-author` — is available in this
189
+ environment, prefer it; this inline flow is the always-present fallback.)
190
+
191
+ ## Review (`review <SPEC_ID>`)
192
+
193
+ Read-only — do NOT modify the file. Fetch the spec (`specship_spec`), verify each
194
+ `implementations:` path exists (`specship_node`), then walk the rubric and output
195
+ a numbered findings list grouped **STRUCTURAL** (embedded id markers, no stranded
196
+ ids, unique ids, valid frontmatter, valid `implementations:`), **QUALITY**
197
+ (RFC-2119 keywords, no weasel words, no implementation leak, testable acceptance,
198
+ one concern per REQ, failure-path coverage), **HYGIENE** (owner/priority set, no
199
+ stale `[needs review]`/TODO). End with a one-line verdict.
200
+
201
+ ## Post-write review (automatic, every authoring path)
202
+
203
+ The uniform review backstop — **no spec reaches disk unreviewed**. After **any**
204
+ authoring path (`new`, `fast`, `design`) has written and `specship sync`-ed a
205
+ spec, run the same rubric pass automatically. This is not a separate interview
206
+ and not the opt-in `review <SPEC_ID>` route; it always runs, once, on the
207
+ just-written spec:
208
+
209
+ 1. Walk the **STRUCTURAL / QUALITY / HYGIENE** rubric defined in *Review* above
210
+ against the new spec.
211
+ 2. **Fix STRUCTURAL findings automatically** — missing/stranded/duplicate id
212
+ markers, invalid frontmatter, broken `implementations:` paths — then re-`sync`.
213
+ 3. For **QUALITY findings that would change implementation behaviour** (a vague
214
+ or untestable acceptance criterion, a leaked implementation detail, a missing
215
+ failure path), surface them as **one** proceed/adjust prompt — apply the
216
+ adjustments or proceed as-is on the user's call. No extra gap-fill interview.
217
+ 4. HYGIENE nits are noted in passing; they don't block the hand-off.
218
+
219
+ This is what enforces REQ-DOORS-002.A3 ("speed does not sacrifice correctness")
220
+ for the fast-path rather than leaving it aspirational.
221
+
222
+ ## Fast-path (`fast <description>`)
223
+
224
+ For a solo dev who wants to record intent and move, **without** the brainstorm /
225
+ gap-question interview (REQ-DOORS-002):
226
+
227
+ 1. Ground briefly with `specship_explore` on terms from the description (one call).
228
+ 2. Draft a complete spec in memory following the `spec-author` format — frontmatter
229
+ (id/title/owner/priority), `<!-- id: -->` markers above every heading, an
230
+ RFC-2119 keyword per requirement, `## Acceptance` with `.A<N>` bullets (happy +
231
+ failure). Pick sensible defaults instead of asking; mark only genuinely
232
+ unknowable points `[needs review]`.
233
+ 3. `Write` it to `specs/<slug>.md` and tell the user the path.
234
+ 4. `specship sync`, then run the shared **Post-write review** (below) — it is
235
+ part of the single guided step, so speed doesn't skip the backstop. Then hand
236
+ off with `/specship:spec implement <ID>` when ready.
237
+
238
+ The fast-path still produces a well-formed spec that indexes cleanly and is ready
239
+ for implementation + linking — it trades the interview for speed, not correctness.
240
+
241
+ ## Design (`design <URL | intent>`)
242
+
243
+ Author from **visually-expressed intent** — a third authoring modality alongside
244
+ `new` and `fast`. Route on the argument's shape; each path ends by feeding the
245
+ bundled `claude-design-implement` workflow, which snapshots the design byte-for-byte,
246
+ extracts tokens, drafts a spec (contract only — no hex/pixels), and pauses at a
247
+ gap-fill approval gate before writing. Keep this entry thin: delegate to the
248
+ workflow and the `designer-loop` skill rather than re-explaining either.
249
+
250
+ - **`claude.ai/design` URL** → the import path. The URL is of the form
251
+ `https://claude.ai/design/p/<project-id>/?file=<File+Name>.html`; derive `SLUG`
252
+ from the `file=` query param (`Data+Flow.html` → `data-flow`) unless a second
253
+ token overrides it. Run:
254
+ ```bash
255
+ specship workflow run claude-design-implement \
256
+ --input CONNECTOR_URL="<URL>" \
257
+ --input FILE_LABEL="<File Name>" \
258
+ --input SLUG="<slug>"
259
+ ```
260
+ Add `--input OWNER="<team>"` / `--input PRIORITY="high|medium|low"` to populate
261
+ frontmatter; otherwise they surface as `[needs review]` at the gap-fill gate.
262
+ - **`figma.com` URL** → the Figma import path via the remote Figma MCP. **Probe
263
+ for the Figma MCP first.** If it is **not** installed, tell the user to run
264
+ `claude mcp add --transport http figma https://mcp.figma.com/mcp` and **stop** —
265
+ never blind-`fetch` the URL. If it **is** present, snapshot/import the Figma
266
+ design through it, then feed the same `claude-design-implement` workflow with
267
+ the imported bundle (`--input HANDOFF_DIR=…`).
268
+ - **no URL (bare intent, or empty)** → run the **taste loop first**, then import.
269
+ Follow the **`designer-loop` skill** (`~/.claude/skills/designer-loop/SKILL.md`)
270
+ — it is the authority. In brief: probe the designer runtime with
271
+ `designer_session({ action: "status" })` (if it errors "CDP not up"/"Not signed
272
+ in", tell the user to run `designer setup` and stop — the loop needs the live
273
+ browser, never a blind fetch); survey the repo's capabilities with
274
+ `specship_explore`/`specship_search` and relay them verbatim into the prompt;
275
+ drive `claude.ai/design` through `designer_prompt`/`designer_ask` while the
276
+ **human tastes** the variants (you relay, you don't propose your own); iterate
277
+ until the human says **"that's it"** (Gate 1). Then `designer_handoff` the
278
+ chosen variant and feed its bundle into the same workflow via its `HANDOFF_DIR`
279
+ input:
280
+ ```bash
281
+ specship workflow run claude-design-implement \
282
+ --input HANDOFF_DIR="<absolute path to handoff-<ts>/>" \
283
+ --input CHOSEN_FILE="<chosen variant>.html" \
284
+ --input FILE_LABEL="<File Label>" \
285
+ --input SLUG="<slug>"
286
+ ```
287
+
288
+ When the workflow finishes it hands off with `/specship:spec implement <first REQ ID>`;
289
+ the implementer reads `specs/<slug>/snapshot.html` for visual fidelity. After the
290
+ spec is written and synced, the shared **Post-write review** (above) runs like any
291
+ other authoring path.
292
+
293
+ ## Triage (`triage <prompt>`)
294
+
295
+ Triage is the **single intake for anything broken** — the user can't be expected
296
+ to know whether their failing behaviour is a "bug" (append a criterion) or "drift"
297
+ (a stale spec↔code link); triage decides.
298
+
299
+ Classify the input (bug / error log / enhancement). Retrieve candidates: prose →
300
+ `specship_spec` with a `query`; an error log → parse the `file:line`/symbol →
301
+ `specship_explore`/`specship_node` → the owning requirement. Present the ranked
302
+ match + recommended target.
303
+
304
+ **Before proposing an append, consult the drift queue** (`specship_drifted`): if
305
+ the matched spec has links in the `drifted` or `broken` state, its real problem is
306
+ a stale link, not a missing criterion — recommend the gate door's fix flow,
307
+ `/specship:check fix <SPEC_ID>`, instead of appending. When the matched spec's
308
+ links are healthy, proceed with the append:
309
+
310
+ **Preview the exact diff → confirm** (offer edit / new-spec / cancel), then append
311
+ a new requirement (new concern) or a new `.A<N>` acceptance criterion (a regression
312
+ an existing requirement should have covered), auto-deriving the next
313
+ collision-checked id, and `specship_link_assert` it. When nothing clears the match
314
+ floor, say so and offer `/specship:spec new` instead — never auto-create. Write
315
+ nothing until confirmed.
316
+
317
+ ## Behaviour tests (`behaviour <SPEC_ID>`)
318
+
319
+ Pull the requirement's acceptance criteria and its behaviour surface
320
+ (`specship_spec` with `spec_id` + `behaviour_surface: true` → UI tier / backend
321
+ tier). For **each** acceptance criterion, author a Playwright test when a UI
322
+ exists and/or a backend test, mirroring the repo's existing test conventions.
323
+ **Preview the files → confirm → write**, then `specship_link_assert … kind:tests`
324
+ at the `.A<N>`, run the suite, and `specship_link_verify` each (pass→verified,
325
+ fail→broken; a suite that can't run is reported unrun, never marked broken).
326
+
327
+ ## Domain fact (`domain`)
328
+
329
+ Run `specship domain-gaps --json` for the real undocumented entities/specs, ask
330
+ targeted per-type questions, and **only on explicit confirmation** `Write` a
331
+ `domain`-kind fact under `specs/domain/` (frontmatter `id: DOM-<AREA>-NNN`,
332
+ `type:` one of term/rule/decision/constraint, linked via `depends_on`/`parent_id`).
333
+ Then `specship sync`.
334
+
335
+ ## After editing code for a spec
336
+
337
+ Call `mcp__specship__specship_link_assert` before reporting done — idempotent, and
338
+ it supersedes the `// @implements REQ-X` comment backstop.
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;GAEG;AACH,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,IAAI,CAAC;CAClC;AA2aD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAU5D;AAWD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAiB3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAG1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,EAAE,CAKpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,GACjB,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAU3E"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;GAEG;AACH,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,IAAI,CAAC;CAClC;AA4aD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAU5D;AAWD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAiB3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAG1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,SAAS,EAAE,CAKpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,cAAc,GACjB,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAU3E"}
@@ -343,6 +343,7 @@ const migrations = [
343
343
  VALUES (?, ?, ?, ?, ?, ?)
344
344
  `);
345
345
  const rates = [
346
+ ['claude-fable-5', 10.0, 50.0, 12.5, 1.0],
346
347
  ['claude-opus-4-7', 15.0, 75.0, 18.75, 1.5],
347
348
  ['claude-opus-4', 15.0, 75.0, 18.75, 1.5],
348
349
  ['claude-sonnet-4-6', 3.0, 15.0, 3.75, 0.3],
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"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"}
@@ -67,4 +67,19 @@ export declare const ENFORCE_CONFIG_FILE = "specship.config.json";
67
67
  * or unparseable → `{}` (all checks advisory — the opt-in default).
68
68
  */
69
69
  export declare function loadEnforceConfig(projectRoot: string): EnforceConfig;
70
+ /** All check names, for `--strict` / `--enable-gate` validation. */
71
+ export declare const ALL_CHECKS: CheckName[];
72
+ /**
73
+ * The `--strict` override (REQ-ENFORCE-004.A2): every check gates for this
74
+ * run only. Nothing is read from or written to the project config.
75
+ */
76
+ export declare function strictEnforceConfig(): EnforceConfig;
77
+ /**
78
+ * Persist gating for the named checks into `specship.config.json`
79
+ * (REQ-ENFORCE-004.A1 — the command writes the config; the user is never
80
+ * told to hand-edit JSON). Merges into an existing file, preserving every
81
+ * other key (including other `enforce` settings like `behaviour.exclude`).
82
+ * Returns the checks newly enabled (already-gating checks are skipped).
83
+ */
84
+ export declare function enableGateChecks(projectRoot: string, checks: CheckName[]): CheckName[];
70
85
  //# sourceMappingURL=enforce.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enforce.d.ts","sourceRoot":"","sources":["../../src/enforce/enforce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAE9E,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qFAAqF;IACrF,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACpC;AAED,oFAAoF;AACpF,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,qBAAqB,CAAC;IACvC,YAAY,EAAE,uBAAuB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,0CAA0C;IAC1C,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAE,aAAkB,GAAG,aAAa,CAoDhG;AAED,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CASpE"}
1
+ {"version":3,"file":"enforce.d.ts","sourceRoot":"","sources":["../../src/enforce/enforce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAE9E,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,qFAAqF;IACrF,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACpC;AAED,oFAAoF;AACpF,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,EAAE,qBAAqB,CAAC;IACvC,YAAY,EAAE,uBAAuB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,0CAA0C;IAC1C,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,yDAAyD;IACzD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAE,aAAkB,GAAG,aAAa,CAoDhG;AAED,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CASpE;AAED,oEAAoE;AACpE,eAAO,MAAM,UAAU,EAAE,SAAS,EAAyD,CAAC;AAE5F;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAmBtF"}
@@ -49,9 +49,11 @@ var __importStar = (this && this.__importStar) || (function () {
49
49
  };
50
50
  })();
51
51
  Object.defineProperty(exports, "__esModule", { value: true });
52
- exports.ENFORCE_CONFIG_FILE = void 0;
52
+ exports.ALL_CHECKS = exports.ENFORCE_CONFIG_FILE = void 0;
53
53
  exports.evaluateEnforcement = evaluateEnforcement;
54
54
  exports.loadEnforceConfig = loadEnforceConfig;
55
+ exports.strictEnforceConfig = strictEnforceConfig;
56
+ exports.enableGateChecks = enableGateChecks;
55
57
  const fs = __importStar(require("fs"));
56
58
  const path = __importStar(require("path"));
57
59
  function evaluateEnforcement(deps, config = {}) {
@@ -122,4 +124,44 @@ function loadEnforceConfig(projectRoot) {
122
124
  }
123
125
  return {};
124
126
  }
127
+ /** All check names, for `--strict` / `--enable-gate` validation. */
128
+ exports.ALL_CHECKS = ['drift', 'fitness', 'maintainability', 'behaviour'];
129
+ /**
130
+ * The `--strict` override (REQ-ENFORCE-004.A2): every check gates for this
131
+ * run only. Nothing is read from or written to the project config.
132
+ */
133
+ function strictEnforceConfig() {
134
+ return { gate: { drift: true, fitness: true, maintainability: true, behaviour: true } };
135
+ }
136
+ /**
137
+ * Persist gating for the named checks into `specship.config.json`
138
+ * (REQ-ENFORCE-004.A1 — the command writes the config; the user is never
139
+ * told to hand-edit JSON). Merges into an existing file, preserving every
140
+ * other key (including other `enforce` settings like `behaviour.exclude`).
141
+ * Returns the checks newly enabled (already-gating checks are skipped).
142
+ */
143
+ function enableGateChecks(projectRoot, checks) {
144
+ const file = path.join(projectRoot, exports.ENFORCE_CONFIG_FILE);
145
+ let cfg = {};
146
+ try {
147
+ cfg = JSON.parse(fs.readFileSync(file, 'utf-8'));
148
+ }
149
+ catch {
150
+ // missing / unparseable → start fresh
151
+ }
152
+ if (!cfg.enforce || typeof cfg.enforce !== 'object')
153
+ cfg.enforce = {};
154
+ if (!cfg.enforce.gate || typeof cfg.enforce.gate !== 'object')
155
+ cfg.enforce.gate = {};
156
+ const enabled = [];
157
+ for (const check of checks) {
158
+ if (cfg.enforce.gate[check] !== true) {
159
+ cfg.enforce.gate[check] = true;
160
+ enabled.push(check);
161
+ }
162
+ }
163
+ if (enabled.length > 0)
164
+ fs.writeFileSync(file, JSON.stringify(cfg, null, 2) + '\n', 'utf-8');
165
+ return enabled;
166
+ }
125
167
  //# sourceMappingURL=enforce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enforce.js","sourceRoot":"","sources":["../../src/enforce/enforce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enforce.js","sourceRoot":"","sources":["../../src/enforce/enforce.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,12 @@ export interface SyncResult {
40
40
  nodesUpdated: number;
41
41
  durationMs: number;
42
42
  changedFilePaths?: string[];
43
+ /**
44
+ * Spec links that transitioned into `drifted` during this sync's spec
45
+ * pass (DRIFT-PUSH-DOC). Populated by SpecShip.sync(); absent when no
46
+ * files changed or the spec pass didn't run.
47
+ */
48
+ driftedTransitions?: import('../resolution/spec-link-resolver').DriftTransition[];
43
49
  }
44
50
  /**
45
51
  * Calculate SHA256 hash of file contents
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extraction/index.ts"],"names":[],"mappings":"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"}