product-spec 0.4.2 → 0.5.1

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
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.5.1] - 2026-04-11
8
+
9
+ ### Added
10
+
11
+ - New `/product-spec-help` assistant command for both Claude Code and Codex, with overview mode for the full workflow and focused question mode for artifact- or handoff-specific explanations
12
+
13
+ ### Changed
14
+
15
+ - README command listings and workflow guidance now document `/product-spec-help` and the fuller spec-kit handoff chain from `/speckit.specify` through `/speckit.implement`
16
+ - The npm publish workflow now uses GitHub Actions OIDC trusted publishing instead of a long-lived npm publish PAT/token, and the release docs now call out the trusted publisher requirement
17
+
18
+ ### Fixed
19
+
20
+ - Managed asset verification now treats a missing installed `product-spec-help` command like any other drifted assistant asset
21
+ - npm package ignore rules now also exclude `build/` output and `.env.*` files from release artifacts
22
+
23
+ ## [0.5.0] - 2026-04-03
24
+
25
+ ### Changed
26
+
27
+ - New installs now place managed product docs and shared templates under `docs/product/` instead of `product/`
28
+ - `product-spec add` now migrates an existing `product/` or `/.product/` directory to `docs/product/` when no conflicting canonical `docs/product/` directory already exists
29
+ - Health checks, doctor guidance, README documentation, and packaged assistant assets now guide users toward `docs/product/` consistently
30
+
31
+ ### Fixed
32
+
33
+ - Overlap scenarios where `docs/product/` already exists alongside a legacy product-doc directory now stay non-destructive and report manual reconciliation guidance instead of risking silent overwrites
34
+ - Git and npm ignore rules now cover generated `docs/product/` output in addition to legacy generated product-doc locations
35
+
7
36
  ## [0.4.2] - 2026-04-02
8
37
 
9
38
  ### Fixed
package/README.md CHANGED
@@ -77,6 +77,7 @@ product-spec help
77
77
  After adding an integration, use the installed slash commands inside the assistant:
78
78
 
79
79
  ```text
80
+ /product-spec-help [optional question]
80
81
  /product-spec-domain ...
81
82
  /product-spec-press ...
82
83
  /product-spec-narrative ...
@@ -87,30 +88,40 @@ After adding an integration, use the installed slash commands inside the assista
87
88
 
88
89
  | Target | Command directory | Slash commands |
89
90
  |--------|-------------------|----------------|
90
- | Claude Code | `.claude/commands/` | `/product-spec-domain`, `/product-spec-press`, `/product-spec-faq`, `/product-spec-narrative`, `/product-spec-roadmap`, `/product-spec-align` |
91
- | Codex | `.Codex/commands/` | `/product-spec-domain`, `/product-spec-press`, `/product-spec-faq`, `/product-spec-narrative`, `/product-spec-roadmap`, `/product-spec-align` |
91
+ | Claude Code | `.claude/commands/` | `/product-spec-help`, `/product-spec-domain`, `/product-spec-press`, `/product-spec-faq`, `/product-spec-narrative`, `/product-spec-roadmap`, `/product-spec-align` |
92
+ | Codex | `.Codex/commands/` | `/product-spec-help`, `/product-spec-domain`, `/product-spec-press`, `/product-spec-faq`, `/product-spec-narrative`, `/product-spec-roadmap`, `/product-spec-align` |
92
93
 
93
94
  ## How It Works
94
95
 
95
- product-spec creates a `product/` folder in your project that maintains a living view of the product across releases. Primary documents stay focused on the current state of thinking, while companion history documents preserve notable changes over time.
96
+ product-spec creates a `docs/product/` folder in your project that maintains a living view of the product across releases. Primary documents stay focused on the current state of thinking, while companion history documents preserve notable changes over time. Existing projects that still use `product/` or `.product/` are migrated toward `docs/product/` during normal `product-spec add` refreshes when the move is safe.
97
+
98
+ Use `/product-spec-help` anytime when you want an overview or a focused explanation of one artifact. It explains the workflow but is not itself a workflow step.
96
99
 
97
100
  ### Documents
98
101
 
99
102
  | File | Purpose |
100
103
  |------|---------|
101
- | `product/domain.md` | Industry context, target users, terminology, competitive landscape |
102
- | `product/press.md` | Current press release and customer-facing promise |
103
- | `product/faq.md` | Current external and internal FAQs that challenge the promise |
104
- | `product/narrative.md` | Durable internal story: customer, tension, future state, and principles |
105
- | `product/roadmap.md` | Forward-looking sequencing of bets, phases, and dependencies |
106
- | `product/current-truth.md` | Maintained current-state product specification grounded by alignment |
107
- | `product/history/*.md` | Companion history files for key product artifacts |
104
+ | `docs/product/domain.md` | Industry context, target users, terminology, competitive landscape |
105
+ | `docs/product/press.md` | Current press release and customer-facing promise |
106
+ | `docs/product/faq.md` | Current external and internal FAQs that challenge the promise |
107
+ | `docs/product/narrative.md` | Durable internal story: customer, tension, future state, and principles |
108
+ | `docs/product/roadmap.md` | Forward-looking sequencing of bets, phases, and dependencies |
109
+ | `docs/product/current-truth.md` | Maintained current-state product specification grounded by alignment |
110
+ | `docs/product/history/*.md` | Companion history files for key product artifacts |
108
111
 
109
112
  ### Workflow
110
113
 
111
114
  ```text
112
- /product-spec-domain --> /product-spec-press --> /product-spec-faq --> /product-spec-narrative --> /product-spec-roadmap --> /speckit.specify --> /product-spec-align
113
- (context) (promise) (challenge) (story) (bets) (engineer) (reconcile)
115
+ /product-spec-domain --> /product-spec-press --> /product-spec-faq --> /product-spec-narrative --> /product-spec-roadmap
116
+ (context) (promise) (challenge) (story) (bets)
117
+ |
118
+ v
119
+ /speckit.specify --> /speckit.clarify --> /speckit.plan --> /speckit.tasks --> /speckit.implement
120
+ (scope) (refine) (design) (break down) (build)
121
+ |
122
+ v
123
+ /product-spec-align --> docs/product/current-truth.md
124
+ (reconcile) (current state)
114
125
  ```
115
126
 
116
127
  1. `/product-spec-domain` establishes the domain context: who the users are, what problem matters, and who the alternatives are.
@@ -118,8 +129,9 @@ product-spec creates a `product/` folder in your project that maintains a living
118
129
  3. `/product-spec-faq` challenges the press release with hard questions from customers and stakeholders.
119
130
  4. `/product-spec-narrative` turns the promise and challenge into a durable internal product story.
120
131
  5. `/product-spec-roadmap` sequences future bets and dependencies without replacing current truth.
121
- 6. `/speckit.specify` hands off the next bet to spec-kit for engineering specifications.
122
- 7. `/product-spec-align` reconciles product docs with the evolving engineering scope and maintains `product/current-truth.md`.
132
+ 6. `/speckit.specify` creates the engineering feature specification for the next bet.
133
+ 7. `/speckit.clarify`, `/speckit.plan`, `/speckit.tasks`, and `/speckit.implement` refine that bet into an execution-ready plan and working implementation.
134
+ 8. `/product-spec-align` reconciles product docs with the evolving engineering scope and maintains `docs/product/current-truth.md`.
123
135
 
124
136
  ## Key Concepts
125
137
 
@@ -129,7 +141,7 @@ product-spec creates a `product/` folder in your project that maintains a living
129
141
 
130
142
  ### Companion History
131
143
 
132
- Primary product docs stay focused on the current state. Companion files under `product/history/` preserve important prior decisions, revisions, and reasoning.
144
+ Primary product docs stay focused on the current state. Companion files under `docs/product/history/` preserve important prior decisions, revisions, and reasoning.
133
145
 
134
146
  ### Working Backwards
135
147
 
@@ -144,6 +156,11 @@ GitHub Actions now handles:
144
156
  - CI validation on pushes and pull requests
145
157
  - packaging tagged releases
146
158
  - publishing the npm package when a `v*` tag is pushed
159
+ - publishing through npm trusted publishing from GitHub Actions instead of a long-lived PAT/token secret
160
+
161
+ The publish workflow now uses npm trusted publishing from GitHub Actions via OIDC instead of a long-lived `NPM_TOKEN` or PAT-style publish credential. The workflow runs on Node 24 so the bundled npm satisfies trusted publishing requirements, requests `id-token: write`, and publishes with `npm publish` without writing token credentials into `.npmrc`.
162
+
163
+ For public releases published through trusted publishing, npm automatically generates provenance attestations. The npm package must have a trusted publisher configured for this repository and `.github/workflows/publish.yml` before release publishing will succeed.
147
164
 
148
165
  ## Rename Notes
149
166
 
@@ -153,7 +170,7 @@ GitHub Actions now handles:
153
170
 
154
171
  - Node.js and npm
155
172
  - [Claude Code](https://claude.ai/code) and/or Codex for assistant integration targets
156
- - [spec-kit](https://github.com/github/spec-kit) for the `/speckit.specify` portion of the workflow
173
+ - [spec-kit](https://github.com/github/spec-kit) for the `/speckit.specify` through `/speckit.implement` portion of the workflow
157
174
 
158
175
  ## Changelog
159
176
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Reconcile the product folder with changes made in .specify specs — update product-facing docs and maintain current truth.
2
+ description: Reconcile the docs/product folder with changes made in .specify specs — update product-facing docs and maintain current truth.
3
3
  handoffs:
4
4
  - label: Update Press Release
5
5
  agent: product-spec-press
@@ -25,13 +25,13 @@ You **MUST** consider the user input before proceeding (if not empty).
25
25
 
26
26
  ## Outline
27
27
 
28
- You are reconciling the product documents in `product/` with the engineering specifications in `.specify/`.
28
+ You are reconciling the product documents in `docs/product/` with the engineering specifications in `.specify/`.
29
29
 
30
30
  ### Pre-Execution
31
31
 
32
- 1. Load `product/domain.md`, `product/press.md`, `product/faq.md`, `product/narrative.md`, `product/roadmap.md`, and `product/current-truth.md` when present.
32
+ 1. Load `docs/product/domain.md`, `docs/product/press.md`, `docs/product/faq.md`, `docs/product/narrative.md`, `docs/product/roadmap.md`, and `docs/product/current-truth.md` when present.
33
33
  2. Discover all `spec.md` files under `.specify/`.
34
- 3. Use `product/templates/current-truth-template.md` if `current-truth.md` does not yet exist.
34
+ 3. Use `docs/product/templates/current-truth-template.md` if `current-truth.md` does not yet exist.
35
35
 
36
36
  ### Execution Flow
37
37
 
@@ -16,19 +16,19 @@ You **MUST** consider the user input before proceeding (if not empty).
16
16
 
17
17
  ## Outline
18
18
 
19
- You are creating or updating the domain knowledge document at `product/domain.md`. This document captures the industry context, problem space, target users, terminology, and competitive landscape that inform all product decisions.
19
+ You are creating or updating the domain knowledge document at `docs/product/domain.md`. This document captures the industry context, problem space, target users, terminology, and competitive landscape that inform all product decisions.
20
20
 
21
21
  ### Pre-Execution
22
22
 
23
- 1. **Ensure `product/` exists**: If the `product/` directory does not exist, create it.
24
- 2. **Check for existing domain doc**: Read `product/domain.md` if it exists.
23
+ 1. **Ensure `docs/product/` exists**: If the `docs/product/` directory does not exist, create it.
24
+ 2. **Check for existing domain doc**: Read `docs/product/domain.md` if it exists.
25
25
  - If it exists and has content beyond the template, this is an **update** — preserve existing content and merge new information.
26
- - If it does not exist, load `product/templates/domain-template.md` as the starting structure.
27
- 3. **Load related artifacts when present**: Read `product/press.md`, `product/faq.md`, `product/narrative.md`, and `product/current-truth.md` when they exist so the domain stays aligned with the rest of the product record.
26
+ - If it does not exist, load `docs/product/templates/domain-template.md` as the starting structure.
27
+ 3. **Load related artifacts when present**: Read `docs/product/press.md`, `docs/product/faq.md`, `docs/product/narrative.md`, and `docs/product/current-truth.md` when they exist so the domain stays aligned with the rest of the product record.
28
28
 
29
29
  ### Execution Flow
30
30
 
31
31
  1. **Parse user input**: The text after `/product-spec-domain` is the domain context the user wants to capture.
32
- 2. Create or update `product/domain.md` using the domain template's shared structure for current context, assumptions, key decisions, related artifacts, and references to companion history.
32
+ 2. Create or update `docs/product/domain.md` using the domain template's shared structure for current context, assumptions, key decisions, related artifacts, and references to companion history.
33
33
  3. Preserve useful current-state content and direct older historical material into the companion history document when appropriate.
34
34
  4. Suggest `/product-spec-press` as the next step when appropriate.
@@ -19,14 +19,14 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the FAQ document at `product/faq.md`.
22
+ You are creating or updating the FAQ document at `docs/product/faq.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/domain.md` and `product/press.md` when available.
28
- 3. Load `product/narrative.md`, `product/roadmap.md`, and `product/current-truth.md` when available so the FAQ work stays consistent with the rest of the product record.
29
- 4. If `product/faq.md` is missing, start from `product/templates/faq-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/domain.md` and `docs/product/press.md` when available.
28
+ 3. Load `docs/product/narrative.md`, `docs/product/roadmap.md`, and `docs/product/current-truth.md` when available so the FAQ work stays consistent with the rest of the product record.
29
+ 4. If `docs/product/faq.md` is missing, start from `docs/product/templates/faq-template.md`.
30
30
 
31
31
  ### Execution Flow
32
32
 
@@ -0,0 +1,84 @@
1
+ ---
2
+ description: Explain the product-spec workflow and answer questions about steps, artifacts, and handoffs.
3
+ handoffs:
4
+ - label: Start with Domain
5
+ agent: product-spec-domain
6
+ prompt: Help me capture the domain context for this project
7
+ - label: Write the Next Spec
8
+ agent: speckit.specify
9
+ prompt: Create a technical spec for the next roadmap bet. I want to build...
10
+ ---
11
+
12
+ ## User Input
13
+
14
+ ```text
15
+ $ARGUMENTS
16
+ ```
17
+
18
+ You **MUST** consider the user input before proceeding (if not empty).
19
+
20
+ ## Outline
21
+
22
+ You are explaining how `product-spec` and `spec-kit` fit together. `/product-spec-help` does **not** create or update a managed product artifact of its own. Its job is to explain the workflow clearly, answer focused questions, and point the user to the right next step.
23
+
24
+ ### Canonical Workflow Reference
25
+
26
+ Use this workflow as the primary source of truth, even if the current project has not created these files yet:
27
+
28
+ | Step | Usually Needs | Creates or Updates | Why It Matters |
29
+ |------|---------------|-------------------|----------------|
30
+ | `/product-spec-domain` | A project idea, market context, or customer problem | `docs/product/domain.md` | Defines the users, problem space, terminology, and competitive context that the rest of the product work builds on. |
31
+ | `/product-spec-press` | Usually `docs/product/domain.md` | `docs/product/press.md` | Turns the product idea into a customer-facing promise written as if it already shipped. |
32
+ | `/product-spec-faq` | Usually `docs/product/press.md` | `docs/product/faq.md` | Pressure-tests the promise with hard customer and stakeholder questions before engineering commits to it. |
33
+ | `/product-spec-narrative` | Usually `docs/product/domain.md`, `docs/product/press.md`, and `docs/product/faq.md` | `docs/product/narrative.md` | Synthesizes the context, promise, and objections into a durable internal product story. |
34
+ | `/product-spec-roadmap` | Usually `docs/product/narrative.md` | `docs/product/roadmap.md` | Turns the durable story into sequenced future bets without confusing future intent with current truth. |
35
+ | `/speckit.specify` | Usually a scoped roadmap bet or clearly defined next feature | `specs/<feature>/spec.md` | Converts the next bet into an engineering-ready feature specification. |
36
+ | `/speckit.clarify` | Usually `specs/<feature>/spec.md` | Updates `specs/<feature>/spec.md` | Resolves important scope, UX, or security uncertainties without inventing a new primary artifact. |
37
+ | `/speckit.plan` | `specs/<feature>/spec.md` | `specs/<feature>/plan.md` | Turns the approved feature specification into a technical implementation plan. |
38
+ | `/speckit.tasks` | `specs/<feature>/plan.md` | `specs/<feature>/tasks.md` | Breaks the plan into an ordered implementation checklist. |
39
+ | `/speckit.implement` | `specs/<feature>/tasks.md` | Updates source code and project files | Executes the task plan and turns the spec into working changes. |
40
+ | `/product-spec-align` | Updated specs, implementation changes, or newly shipped reality | `docs/product/current-truth.md` and related product docs | Reconciles product language with what is actually true in the product today. |
41
+
42
+ ### Response Mode Selection
43
+
44
+ 1. **If the user input is empty or whitespace only, use overview mode**:
45
+ - Start with a one-sentence framing that `/product-spec-help` explains the workflow but is not itself a production step.
46
+ - Show a compact workflow diagram such as:
47
+
48
+ ```text
49
+ /product-spec-domain -> /product-spec-press -> /product-spec-faq -> /product-spec-narrative -> /product-spec-roadmap
50
+ |
51
+ v
52
+ /speckit.specify -> /speckit.plan -> /speckit.tasks -> /speckit.implement
53
+ |
54
+ v
55
+ /product-spec-align -> docs/product/current-truth.md
56
+ ```
57
+
58
+ - After the diagram, include a scan-friendly table or bullets that keep the same four ideas visible for each step:
59
+ - what usually comes before it
60
+ - what it creates or updates
61
+ - what the artifact is
62
+ - why that artifact matters
63
+ - Keep the answer compact enough that a first-time user can understand the flow in under a minute.
64
+
65
+ 2. **If the user input is not empty, use question mode**:
66
+ - Answer the question directly first in plain language.
67
+ - Then add focused workflow context using a compact structure such as:
68
+ - `Usually needs: ...`
69
+ - `Creates/updates: ...`
70
+ - `Why it matters: ...`
71
+ - `Next: ...`
72
+ - Only include the surrounding steps needed to make the answer clear. Do **not** dump the whole workflow unless it helps answer the question.
73
+ - Treat prompts like `what is domain.md and why is it needed?` and `what comes after roadmap?` as representative examples of the level of detail the user wants.
74
+
75
+ ### Answering Rules
76
+
77
+ 1. Use canonical product artifact paths under `docs/product/`.
78
+ 2. If the user mentions a legacy path such as `product/domain.md` or `.product/domain.md`, explain that the canonical location now lives under `docs/product/` and treat the older path as legacy migration context.
79
+ 3. If the user asks about an ambiguous or unknown term, make the best reasonable mapping to the closest canonical concept and say what you are assuming.
80
+ 4. If the user asks about `roadmap.md` versus `current-truth.md`, make the distinction explicit:
81
+ - `roadmap.md` is future-facing and sequences bets
82
+ - `current-truth.md` describes what is actually true in the product today
83
+ 5. If the user asks about a refinement or execution step such as `/speckit.clarify` or `/speckit.implement`, be explicit that those steps usually update an existing artifact or the codebase rather than creating a new primary planning document.
84
+ 6. Suggest the next logical workflow step when it naturally follows from the answer.
@@ -19,18 +19,18 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the durable narrative document at `product/narrative.md`.
22
+ You are creating or updating the durable narrative document at `docs/product/narrative.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/domain.md`, `product/press.md`, and `product/faq.md` when available.
28
- 3. Load `product/roadmap.md` and `product/current-truth.md` when present so the narrative stays grounded.
29
- 4. If `product/narrative.md` does not exist, start from `product/templates/narrative-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/domain.md`, `docs/product/press.md`, and `docs/product/faq.md` when available.
28
+ 3. Load `docs/product/roadmap.md` and `docs/product/current-truth.md` when present so the narrative stays grounded.
29
+ 4. If `docs/product/narrative.md` does not exist, start from `docs/product/templates/narrative-template.md`.
30
30
 
31
31
  ### Execution Flow
32
32
 
33
33
  1. Use the supplied input plus the available product artifacts to explain the customer, the problem, the future state, and the product promise in a durable way.
34
- 2. Write or update `product/narrative.md` using the shared structure for assumptions, key decisions, related artifacts, and companion history references.
34
+ 2. Write or update `docs/product/narrative.md` using the shared structure for assumptions, key decisions, related artifacts, and companion history references.
35
35
  3. Keep the main narrative focused on the current strategic story and move historical detail into the companion history document when appropriate.
36
36
  4. Suggest `/product-spec-roadmap` as the next step when the story is ready to be sequenced into bets.
@@ -19,14 +19,14 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the press release document at `product/press.md`.
22
+ You are creating or updating the press release document at `docs/product/press.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/domain.md` if it exists.
28
- 3. Load `product/faq.md`, `product/narrative.md`, and `product/current-truth.md` when present to keep the current press release aligned with the broader product record.
29
- 4. Read `product/press.md` if it exists; otherwise use `product/templates/press-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/domain.md` if it exists.
28
+ 3. Load `docs/product/faq.md`, `docs/product/narrative.md`, and `docs/product/current-truth.md` when present to keep the current press release aligned with the broader product record.
29
+ 4. Read `docs/product/press.md` if it exists; otherwise use `docs/product/templates/press-template.md`.
30
30
 
31
31
  ### Execution Flow
32
32
 
@@ -19,17 +19,17 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the roadmap document at `product/roadmap.md`.
22
+ You are creating or updating the roadmap document at `docs/product/roadmap.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/narrative.md`, `product/faq.md`, `product/current-truth.md`, and any relevant specs when available.
28
- 3. If `product/roadmap.md` does not exist, start from `product/templates/roadmap-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/narrative.md`, `docs/product/faq.md`, `docs/product/current-truth.md`, and any relevant specs when available.
28
+ 3. If `docs/product/roadmap.md` does not exist, start from `docs/product/templates/roadmap-template.md`.
29
29
 
30
30
  ### Execution Flow
31
31
 
32
32
  1. Use the narrative and supporting artifacts to organize work into phased customer outcomes, committed bets, exploratory work, and deferred opportunities.
33
- 2. Write or update `product/roadmap.md` using the shared structure for assumptions, key decisions, related artifacts, and companion history references.
33
+ 2. Write or update `docs/product/roadmap.md` using the shared structure for assumptions, key decisions, related artifacts, and companion history references.
34
34
  3. Keep the roadmap future-facing and do not let it replace the current-state role of `current-truth.md`.
35
35
  4. Suggest `/speckit.specify` when the next bet is ready for engineering specification.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Reconcile the product folder with changes made in .specify specs — update product-facing docs and maintain current truth.
2
+ description: Reconcile the docs/product folder with changes made in .specify specs — update product-facing docs and maintain current truth.
3
3
  handoffs:
4
4
  - label: Update Press Release
5
5
  agent: product-spec-press
@@ -25,13 +25,13 @@ You **MUST** consider the user input before proceeding (if not empty).
25
25
 
26
26
  ## Outline
27
27
 
28
- You are reconciling `product/` with `.specify/` specs so product-facing documents stay aligned with the engineering scope.
28
+ You are reconciling `docs/product/` with `.specify/` specs so product-facing documents stay aligned with the engineering scope.
29
29
 
30
30
  ### Pre-Execution
31
31
 
32
- 1. Load `product/domain.md`, `product/press.md`, `product/faq.md`, `product/narrative.md`, `product/roadmap.md`, and `product/current-truth.md` when present.
32
+ 1. Load `docs/product/domain.md`, `docs/product/press.md`, `docs/product/faq.md`, `docs/product/narrative.md`, `docs/product/roadmap.md`, and `docs/product/current-truth.md` when present.
33
33
  2. Discover relevant engineering specs and implementation outputs.
34
- 3. Use `product/templates/current-truth-template.md` if `current-truth.md` does not yet exist.
34
+ 3. Use `docs/product/templates/current-truth-template.md` if `current-truth.md` does not yet exist.
35
35
 
36
36
  ### Execution Flow
37
37
 
@@ -16,16 +16,16 @@ You **MUST** consider the user input before proceeding (if not empty).
16
16
 
17
17
  ## Outline
18
18
 
19
- You are creating or updating the domain knowledge document at `product/domain.md`. This document captures the industry context, problem space, target users, terminology, and competitive landscape that inform all product decisions.
19
+ You are creating or updating the domain knowledge document at `docs/product/domain.md`. This document captures the industry context, problem space, target users, terminology, and competitive landscape that inform all product decisions.
20
20
 
21
21
  ### Pre-Execution
22
22
 
23
- 1. Ensure `product/` exists.
24
- 2. Read `product/domain.md` if it exists; otherwise start from `product/templates/domain-template.md`.
25
- 3. Load `product/press.md`, `product/faq.md`, `product/narrative.md`, and `product/current-truth.md` when present.
23
+ 1. Ensure `docs/product/` exists.
24
+ 2. Read `docs/product/domain.md` if it exists; otherwise start from `docs/product/templates/domain-template.md`.
25
+ 3. Load `docs/product/press.md`, `docs/product/faq.md`, `docs/product/narrative.md`, and `docs/product/current-truth.md` when present.
26
26
 
27
27
  ### Execution Flow
28
28
 
29
29
  1. Use the user input as new market or customer context.
30
- 2. Update `product/domain.md` with current context, assumptions, key decisions, related artifacts, and companion history references.
30
+ 2. Update `docs/product/domain.md` with current context, assumptions, key decisions, related artifacts, and companion history references.
31
31
  3. Preserve still-valid current-state content and suggest `/product-spec-press` as the next step.
@@ -19,14 +19,14 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the FAQ document at `product/faq.md`.
22
+ You are creating or updating the FAQ document at `docs/product/faq.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/domain.md` and `product/press.md` when available.
28
- 3. Load `product/narrative.md`, `product/roadmap.md`, and `product/current-truth.md` when available so the FAQ work stays consistent with the rest of the product record.
29
- 4. If `product/faq.md` is missing, start from `product/templates/faq-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/domain.md` and `docs/product/press.md` when available.
28
+ 3. Load `docs/product/narrative.md`, `docs/product/roadmap.md`, and `docs/product/current-truth.md` when available so the FAQ work stays consistent with the rest of the product record.
29
+ 4. If `docs/product/faq.md` is missing, start from `docs/product/templates/faq-template.md`.
30
30
 
31
31
  ### Execution Flow
32
32
 
@@ -0,0 +1,71 @@
1
+ ---
2
+ description: Explain the product-spec workflow and answer questions about steps, artifacts, and handoffs.
3
+ handoffs:
4
+ - label: Start with Domain
5
+ agent: product-spec-domain
6
+ prompt: Help me capture the domain context for this project
7
+ - label: Write the Next Spec
8
+ agent: speckit.specify
9
+ prompt: Create a technical spec for the next roadmap bet. I want to build...
10
+ ---
11
+
12
+ ## User Input
13
+
14
+ ```text
15
+ $ARGUMENTS
16
+ ```
17
+
18
+ You **MUST** consider the user input before proceeding (if not empty).
19
+
20
+ ## Outline
21
+
22
+ You are explaining how `product-spec` and `spec-kit` fit together. `/product-spec-help` never creates a managed product artifact. It explains the workflow, answers focused questions, and helps the user find the right next step.
23
+
24
+ ### Canonical Workflow Reference
25
+
26
+ Use this workflow as the default source of truth:
27
+
28
+ | Step | Usually Needs | Creates or Updates | Why It Matters |
29
+ |------|---------------|-------------------|----------------|
30
+ | `/product-spec-domain` | A project idea, market context, or customer problem | `docs/product/domain.md` | Defines the users, problem space, terminology, and competitive context. |
31
+ | `/product-spec-press` | Usually `docs/product/domain.md` | `docs/product/press.md` | Turns the idea into a customer-facing promise. |
32
+ | `/product-spec-faq` | Usually `docs/product/press.md` | `docs/product/faq.md` | Challenges the promise before engineering commits to it. |
33
+ | `/product-spec-narrative` | Usually `docs/product/domain.md`, `docs/product/press.md`, and `docs/product/faq.md` | `docs/product/narrative.md` | Creates the durable internal product story. |
34
+ | `/product-spec-roadmap` | Usually `docs/product/narrative.md` | `docs/product/roadmap.md` | Sequences future bets without replacing current truth. |
35
+ | `/speckit.specify` | Usually a scoped roadmap bet or clearly defined next feature | `specs/<feature>/spec.md` | Creates the engineering-ready feature specification. |
36
+ | `/speckit.clarify` | Usually `specs/<feature>/spec.md` | Updates `specs/<feature>/spec.md` | Resolves important open questions without inventing a new primary artifact. |
37
+ | `/speckit.plan` | `specs/<feature>/spec.md` | `specs/<feature>/plan.md` | Turns the spec into a technical implementation plan. |
38
+ | `/speckit.tasks` | `specs/<feature>/plan.md` | `specs/<feature>/tasks.md` | Breaks the plan into an execution checklist. |
39
+ | `/speckit.implement` | `specs/<feature>/tasks.md` | Updates source code and project files | Executes the plan and produces working changes. |
40
+ | `/product-spec-align` | Updated specs, implementation changes, or newly shipped reality | `docs/product/current-truth.md` and related product docs | Reconciles product language with what is actually true today. |
41
+
42
+ ### Response Modes
43
+
44
+ 1. **Overview mode**: if the user input is empty or whitespace only.
45
+ - Start with a one-sentence framing that `/product-spec-help` explains the workflow but is not itself a production step.
46
+ - Show a compact workflow diagram.
47
+ - Follow with a scan-friendly table or bullets covering:
48
+ - what usually comes before each step
49
+ - what it creates or updates
50
+ - what the artifact is
51
+ - why it matters
52
+ - Keep the answer compact enough to scan quickly.
53
+
54
+ 2. **Question mode**: if the user input is not empty.
55
+ - Answer the question directly first.
56
+ - Then add focused context:
57
+ - `Usually needs: ...`
58
+ - `Creates/updates: ...`
59
+ - `Why it matters: ...`
60
+ - `Next: ...`
61
+ - Only include the surrounding workflow needed to make the answer clear.
62
+ - Treat prompts like `what is domain.md and why is it needed?` and `what comes after roadmap?` as representative examples of the depth the user wants.
63
+
64
+ ### Answering Rules
65
+
66
+ 1. Use canonical product artifact paths under `docs/product/`.
67
+ 2. If the user mentions `product/` or `.product/`, explain that those are legacy paths and normalize to `docs/product/`.
68
+ 3. If the user asks about an unknown or ambiguous term, make the best reasonable mapping to the closest canonical concept and say what you are assuming.
69
+ 4. If the user asks about `roadmap.md` and `current-truth.md`, be explicit that roadmap is future-facing and current truth describes what is true today.
70
+ 5. If the user asks about `/speckit.clarify` or `/speckit.implement`, explain that those usually update an existing artifact or the codebase rather than creating a new primary planning document.
71
+ 6. Suggest the next logical step when it naturally follows from the answer.
@@ -19,16 +19,16 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the durable product narrative at `product/narrative.md`.
22
+ You are creating or updating the durable product narrative at `docs/product/narrative.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/domain.md`, `product/press.md`, `product/faq.md`, `product/roadmap.md`, and `product/current-truth.md` when available.
28
- 3. If `product/narrative.md` is missing, start from `product/templates/narrative-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/domain.md`, `docs/product/press.md`, `docs/product/faq.md`, `docs/product/roadmap.md`, and `docs/product/current-truth.md` when available.
28
+ 3. If `docs/product/narrative.md` is missing, start from `docs/product/templates/narrative-template.md`.
29
29
 
30
30
  ### Execution Flow
31
31
 
32
32
  1. Synthesize the available product artifacts into a durable internal story.
33
- 2. Update `product/narrative.md` with current context, assumptions, key decisions, related artifacts, and history references.
33
+ 2. Update `docs/product/narrative.md` with current context, assumptions, key decisions, related artifacts, and history references.
34
34
  3. Suggest `/product-spec-roadmap` when the narrative is ready to become a roadmap.
@@ -19,14 +19,14 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the press release document at `product/press.md`.
22
+ You are creating or updating the press release document at `docs/product/press.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/domain.md` if it exists.
28
- 3. Load `product/faq.md`, `product/narrative.md`, and `product/current-truth.md` when present to keep the current press release aligned with the broader product record.
29
- 4. Read `product/press.md` if it exists; otherwise use `product/templates/press-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/domain.md` if it exists.
28
+ 3. Load `docs/product/faq.md`, `docs/product/narrative.md`, and `docs/product/current-truth.md` when present to keep the current press release aligned with the broader product record.
29
+ 4. Read `docs/product/press.md` if it exists; otherwise use `docs/product/templates/press-template.md`.
30
30
 
31
31
  ### Execution Flow
32
32
 
@@ -19,16 +19,16 @@ You **MUST** consider the user input before proceeding (if not empty).
19
19
 
20
20
  ## Outline
21
21
 
22
- You are creating or updating the roadmap document at `product/roadmap.md`.
22
+ You are creating or updating the roadmap document at `docs/product/roadmap.md`.
23
23
 
24
24
  ### Pre-Execution
25
25
 
26
- 1. Ensure `product/` exists.
27
- 2. Load `product/narrative.md`, `product/faq.md`, `product/current-truth.md`, and relevant specs when available.
28
- 3. If `product/roadmap.md` is missing, start from `product/templates/roadmap-template.md`.
26
+ 1. Ensure `docs/product/` exists.
27
+ 2. Load `docs/product/narrative.md`, `docs/product/faq.md`, `docs/product/current-truth.md`, and relevant specs when available.
28
+ 3. If `docs/product/roadmap.md` is missing, start from `docs/product/templates/roadmap-template.md`.
29
29
 
30
30
  ### Execution Flow
31
31
 
32
32
  1. Turn the narrative into phased, outcome-oriented bets.
33
- 2. Update `product/roadmap.md` with assumptions, key decisions, related artifacts, and history references.
33
+ 2. Update `docs/product/roadmap.md` with assumptions, key decisions, related artifacts, and history references.
34
34
  3. Keep the roadmap future-facing and suggest `/speckit.specify` when the next bet is ready.
@@ -1,7 +1,9 @@
1
1
  import type { AssetCategory, AssistantTarget } from "../../types/index.js";
2
- export declare const PRODUCT_DOCS_DIR = "product";
2
+ export declare const PRODUCT_DOCS_DIR = "docs/product";
3
+ export declare const PREVIOUS_PRODUCT_DOCS_DIR = "product";
3
4
  export declare const LEGACY_PRODUCT_DOCS_DIR = ".product";
4
- export declare const PRODUCT_TEMPLATES_DIR = "product/templates";
5
+ export declare const PRODUCT_TEMPLATES_DIR = "docs/product/templates";
6
+ export declare const PREVIOUS_PRODUCT_TEMPLATES_DIR = "product/templates";
5
7
  export declare const LEGACY_PRODUCT_TEMPLATES_DIR = ".product/templates";
6
8
  export interface AssetDefinition {
7
9
  id: string;
@@ -1,8 +1,11 @@
1
- export const PRODUCT_DOCS_DIR = "product";
1
+ export const PRODUCT_DOCS_DIR = "docs/product";
2
+ export const PREVIOUS_PRODUCT_DOCS_DIR = "product";
2
3
  export const LEGACY_PRODUCT_DOCS_DIR = ".product";
3
4
  export const PRODUCT_TEMPLATES_DIR = `${PRODUCT_DOCS_DIR}/templates`;
5
+ export const PREVIOUS_PRODUCT_TEMPLATES_DIR = `${PREVIOUS_PRODUCT_DOCS_DIR}/templates`;
4
6
  export const LEGACY_PRODUCT_TEMPLATES_DIR = `${LEGACY_PRODUCT_DOCS_DIR}/templates`;
5
7
  const assistantCommands = [
8
+ "product-spec-help.md",
6
9
  "product-spec-domain.md",
7
10
  "product-spec-press.md",
8
11
  "product-spec-faq.md",
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/assets/registry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,gBAAgB,YAAY,CAAC;AACrE,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,uBAAuB,YAAY,CAAC;AAUnF,MAAM,iBAAiB,GAAG;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,qBAAqB;IACrB,2BAA2B;IAC3B,yBAAyB;IACzB,uBAAuB;CACxB,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;IACvB,qBAAqB;IACrB,2BAA2B;CAC5B,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,4BAA4B;IAC5B,2BAA2B;IAC3B,yBAAyB;IACzB,+BAA+B;IAC/B,6BAA6B;IAC7B,mCAAmC;CACpC,CAAC;AAEF,SAAS,oBAAoB,CAAC,MAAuB,EAAE,UAAkB;IACvE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1C,EAAE,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;QAChD,QAAQ,EAAE,mBAAmB;QAC7B,MAAM;QACN,UAAU,EAAE,UAAU,MAAM,aAAa,QAAQ,EAAE;QACnD,UAAU,EAAE,GAAG,UAAU,IAAI,QAAQ,EAAE;KACxC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxG,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtD,gBAAgB,CAAC,QAAQ,EAAE,0BAA0B,EAAE,SAAS,CAAC,CAClE,CAAC;IAEF,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAgB,EAChB,QAAuB,EACvB,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC;IAC/F,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,qBAAqB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAExF,OAAO;QACL,EAAE,EAAE,UAAU,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;QAC7C,QAAQ;QACR,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,GAAG,WAAW,IAAI,QAAQ,EAAE;QACxC,UAAU,EAAE,GAAG,SAAS,IAAI,QAAQ,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAA+C;IAChF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IAC1D,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,EAAE,CAAC;AAEvD,MAAM,UAAU,yBAAyB,CAAC,MAAuB;IAC/D,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/assets/registry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,SAAS,CAAC;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,gBAAgB,YAAY,CAAC;AACrE,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,yBAAyB,YAAY,CAAC;AACvF,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,uBAAuB,YAAY,CAAC;AAUnF,MAAM,iBAAiB,GAAG;IACxB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,qBAAqB;IACrB,2BAA2B;IAC3B,yBAAyB;IACzB,uBAAuB;CACxB,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;IACvB,qBAAqB;IACrB,2BAA2B;CAC5B,CAAC;AAEF,MAAM,gBAAgB,GAAG;IACvB,4BAA4B;IAC5B,2BAA2B;IAC3B,yBAAyB;IACzB,+BAA+B;IAC/B,6BAA6B;IAC7B,mCAAmC;CACpC,CAAC;AAEF,SAAS,oBAAoB,CAAC,MAAuB,EAAE,UAAkB;IACvE,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC1C,EAAE,EAAE,GAAG,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;QAChD,QAAQ,EAAE,mBAAmB;QAC7B,MAAM;QACN,UAAU,EAAE,UAAU,MAAM,aAAa,QAAQ,EAAE;QACnD,UAAU,EAAE,GAAG,UAAU,IAAI,QAAQ,EAAE;KACxC,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACxG,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtD,gBAAgB,CAAC,QAAQ,EAAE,0BAA0B,EAAE,SAAS,CAAC,CAClE,CAAC;IAEF,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,gBAAgB,CACvB,QAAgB,EAChB,QAAuB,EACvB,MAAe;IAEf,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC;IAC/F,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,qBAAqB,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAExF,OAAO;QACL,EAAE,EAAE,UAAU,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;QAC7C,QAAQ;QACR,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,GAAG,WAAW,IAAI,QAAQ,EAAE;QACxC,UAAU,EAAE,GAAG,SAAS,IAAI,QAAQ,EAAE;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAA+C;IAChF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IAC1D,KAAK,EAAE,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,CAAC;CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,EAAE,CAAC;AAEvD,MAAM,UAAU,yBAAyB,CAAC,MAAuB;IAC/D,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC"}
@@ -60,7 +60,7 @@ export async function runAdd(options) {
60
60
  notes: [
61
61
  ...sharedInstall.notes,
62
62
  "Run `product-spec check` to validate the installed integrations.",
63
- "Installed workflow: domain -> press -> faq -> narrative -> roadmap -> speckit* -> align -> current-truth."
63
+ "Installed workflow: domain -> press -> faq -> narrative -> roadmap -> speckit* -> align -> current-truth under `docs/product/`."
64
64
  ]
65
65
  };
66
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/core/orchestration/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/core/orchestration/add.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { LEGACY_PRODUCT_DOCS_DIR, LEGACY_PRODUCT_TEMPLATES_DIR, PRODUCT_DOCS_DIR, PRODUCT_TEMPLATES_DIR, getTargetAssetDefinitions, sharedAssetRegistry } from "../assets/registry.js";
1
+ import { LEGACY_PRODUCT_DOCS_DIR, LEGACY_PRODUCT_TEMPLATES_DIR, PREVIOUS_PRODUCT_DOCS_DIR, PREVIOUS_PRODUCT_TEMPLATES_DIR, PRODUCT_DOCS_DIR, PRODUCT_TEMPLATES_DIR, getTargetAssetDefinitions, sharedAssetRegistry } from "../assets/registry.js";
2
2
  import { joinProjectPath, pathExists } from "../fs/project.js";
3
3
  import { loadManifest } from "../state/manifest.js";
4
4
  import { getAdapter, resolveTargets } from "./targets.js";
@@ -51,30 +51,54 @@ export async function runCheck(options) {
51
51
  }
52
52
  const legacyProductDir = joinProjectPath(options.rootDir, LEGACY_PRODUCT_DOCS_DIR);
53
53
  const productDir = joinProjectPath(options.rootDir, PRODUCT_DOCS_DIR);
54
+ const previousProductDir = joinProjectPath(options.rootDir, PREVIOUS_PRODUCT_DOCS_DIR);
54
55
  const legacyTemplatesDir = joinProjectPath(options.rootDir, LEGACY_PRODUCT_TEMPLATES_DIR);
56
+ const previousTemplatesDir = joinProjectPath(options.rootDir, PREVIOUS_PRODUCT_TEMPLATES_DIR);
55
57
  const productTemplatesDir = joinProjectPath(options.rootDir, PRODUCT_TEMPLATES_DIR);
56
58
  const hasLegacyProductDir = await pathExists(legacyProductDir);
57
59
  const hasProductDir = await pathExists(productDir);
60
+ const hasPreviousProductDir = await pathExists(previousProductDir);
58
61
  const hasLegacyTemplatesDir = await pathExists(legacyTemplatesDir);
62
+ const hasPreviousTemplatesDir = await pathExists(previousTemplatesDir);
59
63
  const hasProductTemplatesDir = await pathExists(productTemplatesDir);
60
64
  if (hasLegacyProductDir) {
61
65
  issues.push({
62
66
  code: "LEGACY_PRODUCT_DIRECTORY",
63
- severity: hasProductDir ? "warning" : "error",
67
+ severity: hasProductDir || hasPreviousProductDir ? "warning" : "error",
64
68
  message: hasProductDir
65
- ? "Legacy /.product directory still exists. product-spec now writes docs to /product."
66
- : "Legacy /.product directory detected. product-spec now writes docs to /product.",
69
+ ? `Legacy /.product directory still exists. product-spec now writes docs to /${PRODUCT_DOCS_DIR}.`
70
+ : hasPreviousProductDir
71
+ ? `Legacy /.product directory still exists alongside /${PREVIOUS_PRODUCT_DOCS_DIR}. product-spec now writes docs to /${PRODUCT_DOCS_DIR}.`
72
+ : `Legacy /.product directory detected. product-spec now writes docs to /${PRODUCT_DOCS_DIR}.`,
67
73
  path: LEGACY_PRODUCT_DOCS_DIR
68
74
  });
69
75
  }
76
+ if (hasPreviousProductDir) {
77
+ issues.push({
78
+ code: "PREVIOUS_PRODUCT_DIRECTORY",
79
+ severity: hasProductDir ? "warning" : "error",
80
+ message: hasProductDir
81
+ ? `Legacy /${PREVIOUS_PRODUCT_DOCS_DIR} directory still exists. product-spec now writes docs to /${PRODUCT_DOCS_DIR}.`
82
+ : `Legacy /${PREVIOUS_PRODUCT_DOCS_DIR} directory detected. product-spec now writes docs to /${PRODUCT_DOCS_DIR}.`,
83
+ path: PREVIOUS_PRODUCT_DOCS_DIR
84
+ });
85
+ }
70
86
  if (hasLegacyTemplatesDir && !hasProductTemplatesDir) {
71
87
  issues.push({
72
88
  code: "LEGACY_TEMPLATE_DIRECTORY",
73
89
  severity: "warning",
74
- message: "Shared templates are still stored in /.product/templates; rerun `product-spec add` to migrate them to /product/templates.",
90
+ message: `Shared templates are still stored in /.product/templates; rerun \`product-spec add\` to migrate them to /${PRODUCT_TEMPLATES_DIR}.`,
75
91
  path: LEGACY_PRODUCT_TEMPLATES_DIR
76
92
  });
77
93
  }
94
+ if (hasPreviousTemplatesDir && !hasProductTemplatesDir) {
95
+ issues.push({
96
+ code: "PREVIOUS_TEMPLATE_DIRECTORY",
97
+ severity: "warning",
98
+ message: `Shared templates are still stored in /${PREVIOUS_PRODUCT_TEMPLATES_DIR}; rerun \`product-spec add\` to migrate them to /${PRODUCT_TEMPLATES_DIR}.`,
99
+ path: PREVIOUS_PRODUCT_TEMPLATES_DIR
100
+ });
101
+ }
78
102
  if (!manifest && presentCount > 0) {
79
103
  issues.push({
80
104
  code: "MANIFEST_MISSING",
@@ -92,7 +116,7 @@ export async function runCheck(options) {
92
116
  ? "No action needed."
93
117
  : status === "missing"
94
118
  ? `Run \`product-spec add ${target}\` to install this integration.`
95
- : `Run \`product-spec add ${target}\` to refresh managed files and migrate legacy /.product content into /product when possible, then \`product-spec check ${target}\` again. The canonical workflow ends with \`current-truth.md\` maintained by \`align\`.`;
119
+ : `Run \`product-spec add ${target}\` to refresh managed files and migrate legacy /product or /.product content into /${PRODUCT_DOCS_DIR} when possible, then \`product-spec check ${target}\` again. The canonical workflow ends with \`current-truth.md\` maintained by \`align\`.`;
96
120
  reports.push({
97
121
  target,
98
122
  status,
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/core/orchestration/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/core/orchestration/check.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { rename } from "node:fs/promises";
3
- import { LEGACY_PRODUCT_DOCS_DIR, LEGACY_PRODUCT_TEMPLATES_DIR, PRODUCT_DOCS_DIR, sharedAssetRegistry } from "../assets/registry.js";
3
+ import { LEGACY_PRODUCT_DOCS_DIR, LEGACY_PRODUCT_TEMPLATES_DIR, PREVIOUS_PRODUCT_DOCS_DIR, PREVIOUS_PRODUCT_TEMPLATES_DIR, PRODUCT_DOCS_DIR, sharedAssetRegistry } from "../assets/registry.js";
4
4
  import { assertInsideRoot, ensureDirectory, hashFile, joinProjectPath, pathExists, readText, removeIfExists, writeText } from "../fs/project.js";
5
5
  export async function installSharedAssets(rootDir, packageRoot) {
6
6
  const migration = await migrateLegacyProductDirectory(rootDir);
@@ -42,24 +42,63 @@ export async function removeSharedAssets(rootDir, manifest) {
42
42
  }
43
43
  return files;
44
44
  }
45
+ async function reportConflict(rootDir, sources) {
46
+ const sourceList = sources.map((source) => `/${source}`).join(" and ");
47
+ const templateSources = await Promise.all([
48
+ LEGACY_PRODUCT_TEMPLATES_DIR,
49
+ PREVIOUS_PRODUCT_TEMPLATES_DIR
50
+ ]
51
+ .filter((templateDir) => sources.some((source) => templateDir.startsWith(source)))
52
+ .map(async (templateDir) => ((await pathExists(joinProjectPath(rootDir, templateDir))) ? `/${templateDir}` : null)));
53
+ const existingTemplateSources = templateSources.filter((value) => value !== null);
54
+ return {
55
+ files: [],
56
+ notes: [
57
+ existingTemplateSources.length > 0
58
+ ? `Legacy product docs still exist in ${sourceList} alongside /${PRODUCT_DOCS_DIR}. Existing /${PRODUCT_DOCS_DIR} content was left untouched; review and merge any remaining files manually, including templates in ${existingTemplateSources.join(" and ")}.`
59
+ : `Legacy product docs still exist in ${sourceList} alongside /${PRODUCT_DOCS_DIR}. Existing /${PRODUCT_DOCS_DIR} content was left untouched; review and merge any remaining files manually.`
60
+ ]
61
+ };
62
+ }
45
63
  export async function migrateLegacyProductDirectory(rootDir) {
46
64
  const legacyDir = joinProjectPath(rootDir, LEGACY_PRODUCT_DOCS_DIR);
65
+ const previousDir = joinProjectPath(rootDir, PREVIOUS_PRODUCT_DOCS_DIR);
47
66
  const productDir = joinProjectPath(rootDir, PRODUCT_DOCS_DIR);
48
- if (!(await pathExists(legacyDir))) {
67
+ const hasLegacyDir = await pathExists(legacyDir);
68
+ const hasPreviousDir = await pathExists(previousDir);
69
+ const hasCanonicalDir = await pathExists(productDir);
70
+ if (!hasLegacyDir && !hasPreviousDir) {
49
71
  return { files: [], notes: [] };
50
72
  }
51
- if (await pathExists(productDir)) {
52
- const legacyTemplatesDir = joinProjectPath(rootDir, LEGACY_PRODUCT_TEMPLATES_DIR);
73
+ if (hasCanonicalDir) {
74
+ const sources = [hasPreviousDir ? PREVIOUS_PRODUCT_DOCS_DIR : null, hasLegacyDir ? LEGACY_PRODUCT_DOCS_DIR : null].filter((value) => value !== null);
75
+ return reportConflict(rootDir, sources);
76
+ }
77
+ if (hasLegacyDir && hasPreviousDir) {
53
78
  return {
54
79
  files: [],
55
80
  notes: [
56
- await pathExists(legacyTemplatesDir)
57
- ? "Legacy /.product content still exists alongside /product. Existing /product content was left untouched; review and merge any remaining files manually."
58
- : "Legacy /.product content still exists alongside /product. Existing /product content was left untouched."
81
+ `Legacy product docs exist in /${LEGACY_PRODUCT_DOCS_DIR} and /${PREVIOUS_PRODUCT_DOCS_DIR}. product-spec now writes docs to /${PRODUCT_DOCS_DIR}; review and merge these directories manually before rerunning \`product-spec add\`.`
59
82
  ]
60
83
  };
61
84
  }
62
85
  await ensureDirectory(path.dirname(productDir));
86
+ if (hasPreviousDir) {
87
+ await rename(previousDir, productDir);
88
+ return {
89
+ files: [
90
+ {
91
+ path: PREVIOUS_PRODUCT_DOCS_DIR,
92
+ action: "removed"
93
+ },
94
+ {
95
+ path: PRODUCT_DOCS_DIR,
96
+ action: "created"
97
+ }
98
+ ],
99
+ notes: [`Migrated legacy /${PREVIOUS_PRODUCT_DOCS_DIR} content to /${PRODUCT_DOCS_DIR}.`]
100
+ };
101
+ }
63
102
  await rename(legacyDir, productDir);
64
103
  return {
65
104
  files: [
@@ -72,7 +111,7 @@ export async function migrateLegacyProductDirectory(rootDir) {
72
111
  action: "created"
73
112
  }
74
113
  ],
75
- notes: ["Migrated legacy /.product content to /product."]
114
+ notes: [`Migrated legacy /${LEGACY_PRODUCT_DOCS_DIR} content to /${PRODUCT_DOCS_DIR}.`]
76
115
  };
77
116
  }
78
117
  //# sourceMappingURL=shared-assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared-assets.js","sourceRoot":"","sources":["../../../src/core/orchestration/shared-assets.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,eAAe,EACf,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,kBAAkB,CAAC;AAQ1B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,WAAmB;IAEnB,MAAM,SAAS,GAAG,MAAM,6BAA6B,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,MAAM,KAAK,GAA0B,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,mBAAmB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9D,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;QAExD,YAAY,CAAC,IAAI,CAAC;YAChB,GAAG,KAAK;YACR,QAAQ,EAAE,MAAM,QAAQ,CAAC,UAAU,CAAC;YACpC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACxC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,YAAY;QACZ,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC;QACrC,KAAK,EAAE,SAAS,CAAC,KAAK;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe,EACf,QAAyB;IAEzB,MAAM,KAAK,GAA0B,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9D,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACxC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,OAAe;IACjE,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAE9D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,kBAAkB,GAAG,eAAe,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QAClF,OAAO;YACL,KAAK,EAAE,EAAE;YACT,KAAK,EAAE;gBACL,MAAM,UAAU,CAAC,kBAAkB,CAAC;oBAClC,CAAC,CAAC,wJAAwJ;oBAC1J,CAAC,CAAC,yGAAyG;aAC9G;SACF,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAChD,MAAM,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEpC,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,SAAS;aAClB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,SAAS;aAClB;SACF;QACD,KAAK,EAAE,CAAC,gDAAgD,CAAC;KAC1D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"shared-assets.js","sourceRoot":"","sources":["../../../src/core/orchestration/shared-assets.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "product-spec",
3
- "version": "0.4.2",
3
+ "version": "0.5.1",
4
4
  "description": "product-spec CLI for installing product-management command assets into Claude Code and Codex projects",
5
5
  "license": "MIT",
6
6
  "repository": {