product-spec 0.3.0 → 0.4.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +24 -17
  3. package/assets/claude/commands/product-spec-align.md +10 -6
  4. package/assets/claude/commands/product-spec-domain.md +8 -6
  5. package/assets/claude/commands/product-spec-faq.md +11 -9
  6. package/assets/claude/commands/product-spec-narrative.md +36 -0
  7. package/assets/claude/commands/product-spec-press.md +11 -6
  8. package/assets/claude/commands/product-spec-roadmap.md +35 -0
  9. package/assets/codex/commands/product-spec-align.md +17 -2
  10. package/assets/codex/commands/product-spec-domain.md +13 -1
  11. package/assets/codex/commands/product-spec-faq.md +18 -4
  12. package/assets/codex/commands/product-spec-narrative.md +34 -0
  13. package/assets/codex/commands/product-spec-press.md +18 -1
  14. package/assets/codex/commands/product-spec-roadmap.md +34 -0
  15. package/assets/product/templates/current-truth-template.md +48 -0
  16. package/assets/product/templates/domain-template.md +21 -1
  17. package/assets/product/templates/faq-template.md +20 -2
  18. package/assets/product/templates/history/current-truth-history-template.md +5 -0
  19. package/assets/product/templates/history/domain-history-template.md +5 -0
  20. package/assets/product/templates/history/faq-history-template.md +5 -0
  21. package/assets/product/templates/history/narrative-history-template.md +5 -0
  22. package/assets/product/templates/history/press-history-template.md +5 -0
  23. package/assets/product/templates/history/roadmap-history-template.md +5 -0
  24. package/assets/product/templates/narrative-template.md +49 -0
  25. package/assets/product/templates/press-template.md +24 -3
  26. package/assets/product/templates/requirements-template.md +3 -32
  27. package/assets/product/templates/roadmap-template.md +49 -0
  28. package/dist/adapters/claude.js +1 -1
  29. package/dist/adapters/claude.js.map +1 -1
  30. package/dist/adapters/codex.js +1 -1
  31. package/dist/adapters/codex.js.map +1 -1
  32. package/dist/core/assets/registry.d.ts +4 -0
  33. package/dist/core/assets/registry.js +35 -7
  34. package/dist/core/assets/registry.js.map +1 -1
  35. package/dist/core/orchestration/add.js +5 -1
  36. package/dist/core/orchestration/add.js.map +1 -1
  37. package/dist/core/orchestration/check.js +28 -2
  38. package/dist/core/orchestration/check.js.map +1 -1
  39. package/dist/core/orchestration/doctor.js +2 -1
  40. package/dist/core/orchestration/doctor.js.map +1 -1
  41. package/dist/core/orchestration/shared-assets.d.ts +6 -0
  42. package/dist/core/orchestration/shared-assets.js +43 -3
  43. package/dist/core/orchestration/shared-assets.js.map +1 -1
  44. package/dist/core/state/manifest.js +1 -1
  45. package/dist/core/state/manifest.js.map +1 -1
  46. package/dist/types/index.d.ts +1 -1
  47. package/package.json +1 -1
@@ -0,0 +1,5 @@
1
+ # Current Truth History: [PROJECT_NAME]
2
+
3
+ | Date | Change | Why It Changed | Evidence |
4
+ |------|--------|----------------|----------|
5
+ | [DATE] | [Summary of current-truth update] | [Reason] | [Spec or alignment source] |
@@ -0,0 +1,5 @@
1
+ # Domain History: [PROJECT_NAME]
2
+
3
+ | Date | Change | Why It Changed | Source |
4
+ |------|--------|----------------|--------|
5
+ | [DATE] | [Summary of domain update] | [Reason] | [Artifact or insight] |
@@ -0,0 +1,5 @@
1
+ # FAQ History: [PROJECT_NAME]
2
+
3
+ | Date | Change | Why It Changed | Source |
4
+ |------|--------|----------------|--------|
5
+ | [DATE] | [Summary of FAQ update] | [Reason] | [Artifact or insight] |
@@ -0,0 +1,5 @@
1
+ # Narrative History: [PROJECT_NAME]
2
+
3
+ | Date | Change | Why It Changed | Source |
4
+ |------|--------|----------------|--------|
5
+ | [DATE] | [Summary of narrative update] | [Reason] | [Artifact or insight] |
@@ -0,0 +1,5 @@
1
+ # Press History: [PROJECT_NAME]
2
+
3
+ | Date | Release | Change | Why It Changed |
4
+ |------|---------|--------|----------------|
5
+ | [DATE] | [Release] | [Summary of press update] | [Reason] |
@@ -0,0 +1,5 @@
1
+ # Roadmap History: [PROJECT_NAME]
2
+
3
+ | Date | Change | Why It Changed | Source |
4
+ |------|--------|----------------|--------|
5
+ | [DATE] | [Summary of roadmap change] | [Reason] | [Artifact or insight] |
@@ -0,0 +1,49 @@
1
+ # Product Narrative: [PROJECT_NAME]
2
+
3
+ **Last Updated**: [DATE]
4
+ **Companion History**: [product/history/narrative-history.md](product/history/narrative-history.md)
5
+
6
+ ## Customer
7
+
8
+ [Who is the primary customer or user this story is for? What situation are they in?]
9
+
10
+ ## Core Tension
11
+
12
+ [What painful or high-stakes problem keeps showing up for this customer? Why does it matter now?]
13
+
14
+ ## Future State
15
+
16
+ [What changed future are you trying to create for the customer? Describe it in customer terms.]
17
+
18
+ ## Product Promise
19
+
20
+ [What promise is the product making if it succeeds?]
21
+
22
+ ## Guiding Principles
23
+
24
+ - [Principle that should influence roadmap tradeoffs]
25
+ - [Principle that should remain true across releases]
26
+
27
+ ## Non-Goals
28
+
29
+ - [What this product or initiative is explicitly not trying to do]
30
+ - [What tempting adjacent area is out of scope for now]
31
+
32
+ ## Assumptions
33
+
34
+ - [Important assumption behind the narrative]
35
+ - [Assumption that could change the story if proven wrong]
36
+
37
+ ## Key Decisions
38
+
39
+ | Decision | Why It Matters | Current Direction |
40
+ |----------|----------------|-------------------|
41
+ | [Decision] | [Why it shapes the product story] | [Current choice] |
42
+
43
+ ## Related Artifacts
44
+
45
+ - [Domain](../domain.md)
46
+ - [Press Release](../press.md)
47
+ - [FAQ](../faq.md)
48
+ - [Roadmap](../roadmap.md)
49
+ - [Current Truth](../current-truth.md)
@@ -1,11 +1,13 @@
1
1
  # Press Releases: [PROJECT_NAME]
2
2
 
3
+ **Last Updated**: [DATE]
4
+ **Companion History**: [product/history/press-history.md](product/history/press-history.md)
5
+
3
6
  <!--
4
- This document contains all press releases for this project, ordered reverse-chronologically.
7
+ Keep the main document focused on the active upcoming or current press release.
8
+ Use the companion history file for deeper archival notes and superseded drafts.
5
9
  -->
6
10
 
7
- ---
8
-
9
11
  ## [RELEASE_NAME] — [TARGET_DATE] *(upcoming)*
10
12
 
11
13
  **[CITY, STATE]** — [One-sentence opening that names the customer segment and the key benefit they now have. This is the hook.]
@@ -24,3 +26,22 @@
24
26
  - **[Benefit 1]**: [One sentence explaining the customer value]
25
27
  - **[Benefit 2]**: [One sentence explaining the customer value]
26
28
  - **[Benefit 3]**: [One sentence explaining the customer value]
29
+
30
+ ## Assumptions
31
+
32
+ - [Assumption about customer need, urgency, or launch context]
33
+ - [Assumption that should be revisited during FAQ or alignment]
34
+
35
+ ## Key Decisions
36
+
37
+ | Decision | Why It Matters | Current Direction |
38
+ |----------|----------------|-------------------|
39
+ | [Decision] | [Why it shapes the press release promise] | [Current choice] |
40
+
41
+ ## Related Artifacts
42
+
43
+ - [Domain](../domain.md)
44
+ - [FAQ](../faq.md)
45
+ - [Narrative](../narrative.md)
46
+ - [Roadmap](../roadmap.md)
47
+ - [Current Truth](../current-truth.md)
@@ -1,34 +1,5 @@
1
- # Product Requirements: [PROJECT_NAME]
1
+ # Legacy Notice: requirements-template
2
2
 
3
- **Last Updated**: [DATE]
3
+ This template has been superseded by `current-truth-template.md`.
4
4
 
5
- ## Product Overview
6
-
7
- [2-3 sentences describing what the product does, who it's for, and the core value proposition.]
8
-
9
- ## Use Cases
10
-
11
- ### UC-001: [Use Case Name]
12
-
13
- - **Actor**: [Who performs this]
14
- - **Goal**: [What they want to accomplish]
15
- - **Description**: [How the product supports this goal, end to end]
16
- - **Status**: [Complete | Partial | Planned]
17
-
18
- ## Functional Summary
19
-
20
- ### [Functional Area 1]
21
-
22
- | Capability | Description | Status |
23
- |-----------|-------------|--------|
24
- | [Capability] | [What it does from the user's perspective] | [Shipped / In Progress / Planned] |
25
-
26
- ## Cross-Cutting Concerns
27
-
28
- - **[Concern]**: [How it's handled across the product]
29
-
30
- ## Changelog
31
-
32
- | Date | Change | Source |
33
- |------|--------|--------|
34
- | [DATE] | [What changed in this document] | [Which spec or release triggered the update] |
5
+ Use `product/current-truth.md` as the living current-state product specification maintained by alignment work. Keep future sequencing and prioritization in `product/roadmap.md`.
@@ -0,0 +1,49 @@
1
+ # Product Roadmap: [PROJECT_NAME]
2
+
3
+ **Last Updated**: [DATE]
4
+ **Companion History**: [product/history/roadmap-history.md](product/history/roadmap-history.md)
5
+
6
+ ## Roadmap Summary
7
+
8
+ [2-3 sentences describing what customer outcomes the roadmap is pursuing and why now.]
9
+
10
+ ## Committed Bets
11
+
12
+ | Initiative | Customer Outcome | Phase | Confidence | Dependencies |
13
+ |------------|------------------|-------|------------|--------------|
14
+ | [Initiative] | [Outcome] | [Now / Next] | [High / Medium / Low] | [Dependency] |
15
+
16
+ ## Exploratory Work
17
+
18
+ | Initiative | Question Being Explored | Confidence | Trigger for Commitment |
19
+ |------------|--------------------------|------------|------------------------|
20
+ | [Initiative] | [Unknown to resolve] | [Medium / Low] | [What would make this real] |
21
+
22
+ ## Deferred Opportunities
23
+
24
+ | Opportunity | Why Deferred | Revisit Signal |
25
+ |-------------|--------------|----------------|
26
+ | [Opportunity] | [Why now is not the time] | [What would prompt reconsideration] |
27
+
28
+ ## Sequencing Rationale
29
+
30
+ - [Why this order makes sense for customer value]
31
+ - [Key tradeoff or dependency influencing the sequence]
32
+
33
+ ## Assumptions
34
+
35
+ - [Assumption behind roadmap sequencing]
36
+ - [Assumption that could reorder priorities]
37
+
38
+ ## Key Decisions
39
+
40
+ | Decision | Why It Matters | Current Direction |
41
+ |----------|----------------|-------------------|
42
+ | [Decision] | [Why it shapes prioritization] | [Current choice] |
43
+
44
+ ## Related Artifacts
45
+
46
+ - [Narrative](../narrative.md)
47
+ - [FAQ](../faq.md)
48
+ - [Current Truth](../current-truth.md)
49
+ - [Engineering Specs](../../specs/)
@@ -7,7 +7,7 @@ async function describeHealthIssues(context) {
7
7
  issues.push({
8
8
  code: "CLAUDE_MISSING_FILE",
9
9
  severity: "error",
10
- message: `Missing Claude Code asset ${asset.targetPath}`,
10
+ message: `Missing Claude Code workflow asset ${asset.targetPath}`,
11
11
  path: asset.targetPath
12
12
  });
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpE,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IAC/D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,6BAA6B,KAAK,CAAC,UAAU,EAAE;gBACxD,IAAI,EAAE,KAAK,CAAC,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,kBAAkB;IAC9B,oBAAoB,CAAC,QAAgB;QACnC,OAAO,oBAAoB,QAAQ,EAAE,CAAC;IACxC,CAAC;IACD,oBAAoB;CACrB,CAAC"}
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpE,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IAC/D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,sCAAsC,KAAK,CAAC,UAAU,EAAE;gBACjE,IAAI,EAAE,KAAK,CAAC,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAqB;IAC7C,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,kBAAkB;IAC9B,oBAAoB,CAAC,QAAgB;QACnC,OAAO,oBAAoB,QAAQ,EAAE,CAAC;IACxC,CAAC;IACD,oBAAoB;CACrB,CAAC"}
@@ -7,7 +7,7 @@ async function describeHealthIssues(context) {
7
7
  issues.push({
8
8
  code: "CODEX_MISSING_FILE",
9
9
  severity: "error",
10
- message: `Missing Codex asset ${asset.targetPath}`,
10
+ message: `Missing Codex workflow asset ${asset.targetPath}`,
11
11
  path: asset.targetPath
12
12
  });
13
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpE,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IAC/D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,uBAAuB,KAAK,CAAC,UAAU,EAAE;gBAClD,IAAI,EAAE,KAAK,CAAC,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,GAAG,EAAE,OAAO;IACZ,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,iBAAiB;IAC7B,oBAAoB,CAAC,QAAgB;QACnC,OAAO,mBAAmB,QAAQ,EAAE,CAAC;IACvC,CAAC;IACD,oBAAoB;CACrB,CAAC"}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEpE,KAAK,UAAU,oBAAoB,CAAC,OAA6B;IAC/D,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACxE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,gCAAgC,KAAK,CAAC,UAAU,EAAE;gBAC3D,IAAI,EAAE,KAAK,CAAC,UAAU;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAqB;IAC5C,GAAG,EAAE,OAAO;IACZ,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,iBAAiB;IAC7B,oBAAoB,CAAC,QAAgB;QACnC,OAAO,mBAAmB,QAAQ,EAAE,CAAC;IACvC,CAAC;IACD,oBAAoB;CACrB,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import type { AssetCategory, AssistantTarget } from "../../types/index.js";
2
+ export declare const PRODUCT_DOCS_DIR = "product";
3
+ export declare const LEGACY_PRODUCT_DOCS_DIR = ".product";
4
+ export declare const PRODUCT_TEMPLATES_DIR = "product/templates";
5
+ export declare const LEGACY_PRODUCT_TEMPLATES_DIR = ".product/templates";
2
6
  export interface AssetDefinition {
3
7
  id: string;
4
8
  category: AssetCategory;
@@ -1,9 +1,30 @@
1
- const assistantCommands = ["product-spec-domain.md", "product-spec-press.md", "product-spec-faq.md", "product-spec-align.md"];
1
+ export const PRODUCT_DOCS_DIR = "product";
2
+ export const LEGACY_PRODUCT_DOCS_DIR = ".product";
3
+ export const PRODUCT_TEMPLATES_DIR = `${PRODUCT_DOCS_DIR}/templates`;
4
+ export const LEGACY_PRODUCT_TEMPLATES_DIR = `${LEGACY_PRODUCT_DOCS_DIR}/templates`;
5
+ const assistantCommands = [
6
+ "product-spec-domain.md",
7
+ "product-spec-press.md",
8
+ "product-spec-faq.md",
9
+ "product-spec-narrative.md",
10
+ "product-spec-roadmap.md",
11
+ "product-spec-align.md"
12
+ ];
2
13
  const sharedTemplates = [
3
14
  "domain-template.md",
4
15
  "press-template.md",
5
16
  "faq-template.md",
6
- "requirements-template.md"
17
+ "narrative-template.md",
18
+ "roadmap-template.md",
19
+ "current-truth-template.md"
20
+ ];
21
+ const historyTemplates = [
22
+ "domain-history-template.md",
23
+ "press-history-template.md",
24
+ "faq-history-template.md",
25
+ "narrative-history-template.md",
26
+ "roadmap-history-template.md",
27
+ "current-truth-history-template.md"
7
28
  ];
8
29
  function buildAssistantAssets(target, commandDir) {
9
30
  return assistantCommands.map((fileName) => ({
@@ -15,13 +36,20 @@ function buildAssistantAssets(target, commandDir) {
15
36
  }));
16
37
  }
17
38
  function buildSharedAssets() {
18
- return sharedTemplates.map((fileName) => ({
39
+ const primaryAssets = sharedTemplates.map((fileName) => buildSharedAsset(fileName, "product-template"));
40
+ const historyAssets = historyTemplates.map((fileName) => buildSharedAsset(fileName, "product-history-template", "history"));
41
+ return [...primaryAssets, ...historyAssets];
42
+ }
43
+ function buildSharedAsset(fileName, category, subdir) {
44
+ const relativeDir = subdir ? `assets/product/templates/${subdir}` : "assets/product/templates";
45
+ const targetDir = subdir ? `${PRODUCT_TEMPLATES_DIR}/${subdir}` : PRODUCT_TEMPLATES_DIR;
46
+ return {
19
47
  id: `shared/${fileName.replace(/\.md$/, "")}`,
20
- category: "product-template",
48
+ category,
21
49
  target: "shared",
22
- sourcePath: `assets/product/templates/${fileName}`,
23
- targetPath: `.product/templates/${fileName}`
24
- }));
50
+ sourcePath: `${relativeDir}/${fileName}`,
51
+ targetPath: `${targetDir}/${fileName}`
52
+ };
25
53
  }
26
54
  export const assistantAssetRegistry = {
27
55
  claude: buildAssistantAssets("claude", ".claude/commands"),
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/core/assets/registry.ts"],"names":[],"mappings":"AAUA,MAAM,iBAAiB,GAAG,CAAC,wBAAwB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;AAC9H,MAAM,eAAe,GAAG;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,0BAA0B;CAC3B,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,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxC,EAAE,EAAE,UAAU,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE;QAC7C,QAAQ,EAAE,kBAAkB;QAC5B,MAAM,EAAE,QAAQ;QAChB,UAAU,EAAE,4BAA4B,QAAQ,EAAE;QAClD,UAAU,EAAE,sBAAsB,QAAQ,EAAE;KAC7C,CAAC,CAAC,CAAC;AACN,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,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"}
@@ -57,7 +57,11 @@ export async function runAdd(options) {
57
57
  changedTargets,
58
58
  skippedTargets,
59
59
  files,
60
- notes: ["Run `product-spec check` to validate the installed integrations."]
60
+ notes: [
61
+ ...sharedInstall.notes,
62
+ "Run `product-spec check` to validate the installed integrations.",
63
+ "Installed workflow: domain -> press -> faq -> narrative -> roadmap -> speckit* -> align -> current-truth."
64
+ ]
61
65
  };
62
66
  }
63
67
  //# sourceMappingURL=add.js.map
@@ -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 { getTargetAssetDefinitions, sharedAssetRegistry } from "../assets/registry.js";
1
+ import { LEGACY_PRODUCT_DOCS_DIR, LEGACY_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";
@@ -49,6 +49,32 @@ export async function runCheck(options) {
49
49
  });
50
50
  }
51
51
  }
52
+ const legacyProductDir = joinProjectPath(options.rootDir, LEGACY_PRODUCT_DOCS_DIR);
53
+ const productDir = joinProjectPath(options.rootDir, PRODUCT_DOCS_DIR);
54
+ const legacyTemplatesDir = joinProjectPath(options.rootDir, LEGACY_PRODUCT_TEMPLATES_DIR);
55
+ const productTemplatesDir = joinProjectPath(options.rootDir, PRODUCT_TEMPLATES_DIR);
56
+ const hasLegacyProductDir = await pathExists(legacyProductDir);
57
+ const hasProductDir = await pathExists(productDir);
58
+ const hasLegacyTemplatesDir = await pathExists(legacyTemplatesDir);
59
+ const hasProductTemplatesDir = await pathExists(productTemplatesDir);
60
+ if (hasLegacyProductDir) {
61
+ issues.push({
62
+ code: "LEGACY_PRODUCT_DIRECTORY",
63
+ severity: hasProductDir ? "warning" : "error",
64
+ 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.",
67
+ path: LEGACY_PRODUCT_DOCS_DIR
68
+ });
69
+ }
70
+ if (hasLegacyTemplatesDir && !hasProductTemplatesDir) {
71
+ issues.push({
72
+ code: "LEGACY_TEMPLATE_DIRECTORY",
73
+ severity: "warning",
74
+ message: "Shared templates are still stored in /.product/templates; rerun `product-spec add` to migrate them to /product/templates.",
75
+ path: LEGACY_PRODUCT_TEMPLATES_DIR
76
+ });
77
+ }
52
78
  if (!manifest && presentCount > 0) {
53
79
  issues.push({
54
80
  code: "MANIFEST_MISSING",
@@ -66,7 +92,7 @@ export async function runCheck(options) {
66
92
  ? "No action needed."
67
93
  : status === "missing"
68
94
  ? `Run \`product-spec add ${target}\` to install this integration.`
69
- : `Run \`product-spec add ${target}\` to refresh managed files, then \`product-spec check ${target}\` again.`;
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\`.`;
70
96
  reports.push({
71
97
  target,
72
98
  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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"}
@@ -10,7 +10,8 @@ export async function runDoctor(options) {
10
10
  `Status: ${report.status}`,
11
11
  `Manifest aligned: ${report.manifestAligned ? "yes" : "no"}`,
12
12
  issueList,
13
- `Recommended action: ${report.recommendedAction}`
13
+ `Recommended action: ${report.recommendedAction}`,
14
+ "Workflow reminder: domain -> press -> faq -> narrative -> roadmap -> speckit* -> align -> current-truth"
14
15
  ].join("\n");
15
16
  });
16
17
  return { details };
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/core/orchestration/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWtC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACjD,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACxB,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExF,OAAO;YACL,MAAM,MAAM,CAAC,MAAM,EAAE;YACrB,WAAW,MAAM,CAAC,MAAM,EAAE;YAC1B,qBAAqB,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAC5D,SAAS;YACT,uBAAuB,MAAM,CAAC,iBAAiB,EAAE;SAClD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/core/orchestration/doctor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAWtC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACjD,MAAM,SAAS,GACb,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YACxB,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExF,OAAO;YACL,MAAM,MAAM,CAAC,MAAM,EAAE;YACrB,WAAW,MAAM,CAAC,MAAM,EAAE;YAC1B,qBAAqB,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAC5D,SAAS;YACT,uBAAuB,MAAM,CAAC,iBAAiB,EAAE;YACjD,yGAAyG;SAC1G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}
@@ -2,7 +2,13 @@ import type { AssetRecord, ManagedManifest, OperationFileResult } from "../../ty
2
2
  interface SharedAssetInstallResult {
3
3
  sharedAssets: AssetRecord[];
4
4
  files: OperationFileResult[];
5
+ notes: string[];
5
6
  }
6
7
  export declare function installSharedAssets(rootDir: string, packageRoot: string): Promise<SharedAssetInstallResult>;
7
8
  export declare function removeSharedAssets(rootDir: string, manifest: ManagedManifest): Promise<OperationFileResult[]>;
9
+ interface ProductDirectoryMigrationResult {
10
+ files: OperationFileResult[];
11
+ notes: string[];
12
+ }
13
+ export declare function migrateLegacyProductDirectory(rootDir: string): Promise<ProductDirectoryMigrationResult>;
8
14
  export {};
@@ -1,6 +1,9 @@
1
- import { sharedAssetRegistry } from "../assets/registry.js";
1
+ import path from "node:path";
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";
2
4
  import { assertInsideRoot, ensureDirectory, hashFile, joinProjectPath, pathExists, readText, removeIfExists, writeText } from "../fs/project.js";
3
5
  export async function installSharedAssets(rootDir, packageRoot) {
6
+ const migration = await migrateLegacyProductDirectory(rootDir);
4
7
  const sharedAssets = [];
5
8
  const files = [];
6
9
  for (const asset of sharedAssetRegistry) {
@@ -8,7 +11,7 @@ export async function installSharedAssets(rootDir, packageRoot) {
8
11
  const targetPath = joinProjectPath(rootDir, asset.targetPath);
9
12
  assertInsideRoot(rootDir, targetPath);
10
13
  const existed = await pathExists(targetPath);
11
- await ensureDirectory(joinProjectPath(rootDir, ".product/templates"));
14
+ await ensureDirectory(path.dirname(targetPath));
12
15
  await writeText(targetPath, await readText(sourcePath));
13
16
  sharedAssets.push({
14
17
  ...asset,
@@ -20,7 +23,11 @@ export async function installSharedAssets(rootDir, packageRoot) {
20
23
  action: existed ? "updated" : "created"
21
24
  });
22
25
  }
23
- return { sharedAssets, files };
26
+ return {
27
+ sharedAssets,
28
+ files: [...migration.files, ...files],
29
+ notes: migration.notes
30
+ };
24
31
  }
25
32
  export async function removeSharedAssets(rootDir, manifest) {
26
33
  const files = [];
@@ -35,4 +42,37 @@ export async function removeSharedAssets(rootDir, manifest) {
35
42
  }
36
43
  return files;
37
44
  }
45
+ export async function migrateLegacyProductDirectory(rootDir) {
46
+ const legacyDir = joinProjectPath(rootDir, LEGACY_PRODUCT_DOCS_DIR);
47
+ const productDir = joinProjectPath(rootDir, PRODUCT_DOCS_DIR);
48
+ if (!(await pathExists(legacyDir))) {
49
+ return { files: [], notes: [] };
50
+ }
51
+ if (await pathExists(productDir)) {
52
+ const legacyTemplatesDir = joinProjectPath(rootDir, LEGACY_PRODUCT_TEMPLATES_DIR);
53
+ return {
54
+ files: [],
55
+ 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."
59
+ ]
60
+ };
61
+ }
62
+ await ensureDirectory(path.dirname(productDir));
63
+ await rename(legacyDir, productDir);
64
+ return {
65
+ files: [
66
+ {
67
+ path: LEGACY_PRODUCT_DOCS_DIR,
68
+ action: "removed"
69
+ },
70
+ {
71
+ path: PRODUCT_DOCS_DIR,
72
+ action: "created"
73
+ }
74
+ ],
75
+ notes: ["Migrated legacy /.product content to /product."]
76
+ };
77
+ }
38
78
  //# sourceMappingURL=shared-assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared-assets.js","sourceRoot":"","sources":["../../../src/core/orchestration/shared-assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,eAAe,EACf,UAAU,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,kBAAkB,CAAC;AAO1B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,WAAmB;IAEnB,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,eAAe,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACtE,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,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACjC,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"}
1
+ {"version":3,"file":"shared-assets.js","sourceRoot":"","sources":["../../../src/core/orchestration/shared-assets.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export const MANIFEST_VERSION = "1";
5
5
  export const MANIFEST_RELATIVE_PATH = ".product-spec/manifest.json";
6
6
  const assetRecordSchema = z.object({
7
7
  id: z.string(),
8
- category: z.enum(["assistant-command", "product-template"]),
8
+ category: z.enum(["assistant-command", "product-template", "product-history-template"]),
9
9
  sourcePath: z.string(),
10
10
  targetPath: z.string(),
11
11
  target: z.enum(["claude", "codex", "shared"]),
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/state/manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/core/state/manifest.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export type AssistantTarget = "claude" | "codex";
2
2
  export type RequestedTarget = AssistantTarget | "both";
3
- export type AssetCategory = "assistant-command" | "product-template";
3
+ export type AssetCategory = "assistant-command" | "product-template" | "product-history-template";
4
4
  export type HealthStatus = "healthy" | "missing" | "partial" | "unhealthy";
5
5
  export type LastOperation = "add" | "remove" | "check" | "doctor";
6
6
  export interface AssetRecord {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "product-spec",
3
- "version": "0.3.0",
3
+ "version": "0.4.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": {