prjct-cli 0.18.1 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/CLAUDE.md +74 -211
  3. package/core/agentic/prompt-builder.ts +3 -7
  4. package/core/command-registry/optional-commands.ts +0 -20
  5. package/core/infrastructure/command-installer/command-installer.ts +8 -1
  6. package/core/infrastructure/command-installer/global-config.ts +31 -1
  7. package/core/infrastructure/command-installer/index.ts +1 -1
  8. package/core/infrastructure/setup.ts +3 -0
  9. package/package.json +3 -17
  10. package/templates/agentic/subagent-generation.md +8 -6
  11. package/templates/commands/done.md +57 -258
  12. package/templates/commands/now.md +72 -277
  13. package/templates/commands/ship.md +55 -261
  14. package/templates/commands/sync.md +7 -7
  15. package/templates/commands/test.md +328 -21
  16. package/templates/global/CLAUDE.md +40 -205
  17. package/templates/global/docs/agents.md +88 -0
  18. package/templates/global/docs/architecture.md +103 -0
  19. package/templates/global/docs/commands.md +98 -0
  20. package/templates/global/docs/validation.md +95 -0
  21. package/templates/mcp-config.json +36 -0
  22. package/bin/dev.js +0 -216
  23. package/bin/serve.js +0 -361
  24. package/packages/web/README.md +0 -36
  25. package/packages/web/app/api/claude/sessions/route.ts +0 -44
  26. package/packages/web/app/api/claude/status/route.ts +0 -34
  27. package/packages/web/app/api/projects/[id]/icon/route.ts +0 -33
  28. package/packages/web/app/api/projects/[id]/momentum/route.ts +0 -257
  29. package/packages/web/app/api/projects/[id]/route.ts +0 -29
  30. package/packages/web/app/api/projects/[id]/stats/route.ts +0 -41
  31. package/packages/web/app/api/projects/[id]/status/route.ts +0 -21
  32. package/packages/web/app/api/projects/route.ts +0 -16
  33. package/packages/web/app/api/sessions/current/route.ts +0 -132
  34. package/packages/web/app/api/sessions/history/route.ts +0 -204
  35. package/packages/web/app/error.tsx +0 -34
  36. package/packages/web/app/favicon.ico +0 -0
  37. package/packages/web/app/globals.css +0 -198
  38. package/packages/web/app/layout.tsx +0 -53
  39. package/packages/web/app/loading.tsx +0 -7
  40. package/packages/web/app/not-found.tsx +0 -25
  41. package/packages/web/app/page.tsx +0 -12
  42. package/packages/web/app/project/[id]/code/layout.tsx +0 -18
  43. package/packages/web/app/project/[id]/code/page.tsx +0 -408
  44. package/packages/web/app/project/[id]/error.tsx +0 -41
  45. package/packages/web/app/project/[id]/loading.tsx +0 -9
  46. package/packages/web/app/project/[id]/not-found.tsx +0 -27
  47. package/packages/web/app/project/[id]/page.tsx +0 -384
  48. package/packages/web/app/project/[id]/reports/page.tsx +0 -59
  49. package/packages/web/app/project/[id]/reports/print/page.tsx +0 -58
  50. package/packages/web/app/sessions/page.tsx +0 -165
  51. package/packages/web/app/settings/page.tsx +0 -151
  52. package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +0 -2
  53. package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +0 -49
  54. package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +0 -8
  55. package/packages/web/components/ActivityTimeline/hooks/index.ts +0 -2
  56. package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +0 -9
  57. package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +0 -23
  58. package/packages/web/components/ActivityTimeline/index.ts +0 -2
  59. package/packages/web/components/AgentsCard/AgentsCard.tsx +0 -93
  60. package/packages/web/components/AgentsCard/AgentsCard.types.ts +0 -14
  61. package/packages/web/components/AgentsCard/index.ts +0 -2
  62. package/packages/web/components/AppSidebar/AppSidebar.tsx +0 -316
  63. package/packages/web/components/AppSidebar/index.ts +0 -1
  64. package/packages/web/components/BackLink/BackLink.tsx +0 -18
  65. package/packages/web/components/BackLink/BackLink.types.ts +0 -5
  66. package/packages/web/components/BackLink/index.ts +0 -2
  67. package/packages/web/components/BentoCard/BentoCard.constants.ts +0 -16
  68. package/packages/web/components/BentoCard/BentoCard.tsx +0 -48
  69. package/packages/web/components/BentoCard/BentoCard.types.ts +0 -15
  70. package/packages/web/components/BentoCard/index.ts +0 -2
  71. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +0 -9
  72. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +0 -18
  73. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +0 -5
  74. package/packages/web/components/BentoCardSkeleton/index.ts +0 -2
  75. package/packages/web/components/BentoGrid/BentoGrid.tsx +0 -18
  76. package/packages/web/components/BentoGrid/BentoGrid.types.ts +0 -4
  77. package/packages/web/components/BentoGrid/index.ts +0 -2
  78. package/packages/web/components/BlockersCard/BlockersCard.tsx +0 -75
  79. package/packages/web/components/BlockersCard/BlockersCard.types.ts +0 -12
  80. package/packages/web/components/BlockersCard/index.ts +0 -2
  81. package/packages/web/components/CommandBar/CommandBar.tsx +0 -67
  82. package/packages/web/components/CommandBar/index.ts +0 -1
  83. package/packages/web/components/CommandButton/CommandButton.tsx +0 -46
  84. package/packages/web/components/CommandButton/index.ts +0 -1
  85. package/packages/web/components/ConnectionStatus/ConnectionStatus.tsx +0 -29
  86. package/packages/web/components/ConnectionStatus/index.ts +0 -1
  87. package/packages/web/components/DashboardContent/DashboardContent.tsx +0 -284
  88. package/packages/web/components/DashboardContent/index.ts +0 -1
  89. package/packages/web/components/DateGroup/DateGroup.tsx +0 -18
  90. package/packages/web/components/DateGroup/DateGroup.types.ts +0 -6
  91. package/packages/web/components/DateGroup/DateGroup.utils.ts +0 -11
  92. package/packages/web/components/DateGroup/index.ts +0 -2
  93. package/packages/web/components/EmptyState/EmptyState.tsx +0 -76
  94. package/packages/web/components/EmptyState/EmptyState.types.ts +0 -11
  95. package/packages/web/components/EmptyState/index.ts +0 -2
  96. package/packages/web/components/EventRow/EventRow.constants.ts +0 -10
  97. package/packages/web/components/EventRow/EventRow.tsx +0 -49
  98. package/packages/web/components/EventRow/EventRow.types.ts +0 -7
  99. package/packages/web/components/EventRow/EventRow.utils.ts +0 -49
  100. package/packages/web/components/EventRow/index.ts +0 -2
  101. package/packages/web/components/ExpandButton/ExpandButton.tsx +0 -18
  102. package/packages/web/components/ExpandButton/ExpandButton.types.ts +0 -6
  103. package/packages/web/components/ExpandButton/index.ts +0 -2
  104. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +0 -14
  105. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +0 -5
  106. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +0 -13
  107. package/packages/web/components/HealthGradientBackground/index.ts +0 -2
  108. package/packages/web/components/HeroSection/HeroSection.tsx +0 -92
  109. package/packages/web/components/HeroSection/HeroSection.types.ts +0 -14
  110. package/packages/web/components/HeroSection/HeroSection.utils.ts +0 -11
  111. package/packages/web/components/HeroSection/hooks/index.ts +0 -2
  112. package/packages/web/components/HeroSection/hooks/useCountUp.ts +0 -45
  113. package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +0 -18
  114. package/packages/web/components/HeroSection/index.ts +0 -2
  115. package/packages/web/components/IdeasCard/IdeasCard.tsx +0 -115
  116. package/packages/web/components/IdeasCard/IdeasCard.types.ts +0 -10
  117. package/packages/web/components/IdeasCard/index.ts +0 -2
  118. package/packages/web/components/InsightMessage/InsightMessage.tsx +0 -9
  119. package/packages/web/components/InsightMessage/InsightMessage.types.ts +0 -3
  120. package/packages/web/components/InsightMessage/index.ts +0 -2
  121. package/packages/web/components/Logo/Logo.tsx +0 -65
  122. package/packages/web/components/Logo/index.ts +0 -1
  123. package/packages/web/components/MarkdownContent/MarkdownContent.tsx +0 -123
  124. package/packages/web/components/MarkdownContent/index.ts +0 -1
  125. package/packages/web/components/MasonryGrid/MasonryGrid.tsx +0 -18
  126. package/packages/web/components/MasonryGrid/index.ts +0 -1
  127. package/packages/web/components/MomentumWidget/MomentumWidget.tsx +0 -119
  128. package/packages/web/components/MomentumWidget/MomentumWidget.types.ts +0 -16
  129. package/packages/web/components/MomentumWidget/index.ts +0 -2
  130. package/packages/web/components/NowCard/NowCard.tsx +0 -118
  131. package/packages/web/components/NowCard/NowCard.types.ts +0 -16
  132. package/packages/web/components/NowCard/index.ts +0 -2
  133. package/packages/web/components/PageHeader/PageHeader.tsx +0 -24
  134. package/packages/web/components/PageHeader/index.ts +0 -1
  135. package/packages/web/components/ProgressRing/ProgressRing.constants.ts +0 -20
  136. package/packages/web/components/ProgressRing/ProgressRing.tsx +0 -51
  137. package/packages/web/components/ProgressRing/ProgressRing.types.ts +0 -11
  138. package/packages/web/components/ProgressRing/index.ts +0 -2
  139. package/packages/web/components/ProjectAvatar/ProjectAvatar.tsx +0 -54
  140. package/packages/web/components/ProjectAvatar/index.ts +0 -1
  141. package/packages/web/components/ProjectColorDot/ProjectColorDot.tsx +0 -37
  142. package/packages/web/components/ProjectColorDot/index.ts +0 -1
  143. package/packages/web/components/ProjectSelectorModal/ProjectSelectorModal.tsx +0 -104
  144. package/packages/web/components/ProjectSelectorModal/index.ts +0 -1
  145. package/packages/web/components/Providers/Providers.tsx +0 -48
  146. package/packages/web/components/Providers/index.ts +0 -1
  147. package/packages/web/components/QueueCard/QueueCard.tsx +0 -125
  148. package/packages/web/components/QueueCard/QueueCard.types.ts +0 -12
  149. package/packages/web/components/QueueCard/QueueCard.utils.ts +0 -12
  150. package/packages/web/components/QueueCard/index.ts +0 -2
  151. package/packages/web/components/RecoverCard/RecoverCard.tsx +0 -72
  152. package/packages/web/components/RecoverCard/RecoverCard.types.ts +0 -16
  153. package/packages/web/components/RecoverCard/index.ts +0 -2
  154. package/packages/web/components/RoadmapCard/RoadmapCard.tsx +0 -145
  155. package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +0 -16
  156. package/packages/web/components/RoadmapCard/index.ts +0 -2
  157. package/packages/web/components/ShipsCard/ShipsCard.tsx +0 -95
  158. package/packages/web/components/ShipsCard/ShipsCard.types.ts +0 -14
  159. package/packages/web/components/ShipsCard/ShipsCard.utils.ts +0 -4
  160. package/packages/web/components/ShipsCard/index.ts +0 -2
  161. package/packages/web/components/SparklineChart/SparklineChart.tsx +0 -40
  162. package/packages/web/components/SparklineChart/SparklineChart.types.ts +0 -6
  163. package/packages/web/components/SparklineChart/index.ts +0 -2
  164. package/packages/web/components/StatsMasonry/StatsMasonry.tsx +0 -95
  165. package/packages/web/components/StatsMasonry/index.ts +0 -1
  166. package/packages/web/components/StreakCard/StreakCard.constants.ts +0 -2
  167. package/packages/web/components/StreakCard/StreakCard.tsx +0 -55
  168. package/packages/web/components/StreakCard/StreakCard.types.ts +0 -4
  169. package/packages/web/components/StreakCard/index.ts +0 -2
  170. package/packages/web/components/TasksCounter/TasksCounter.tsx +0 -14
  171. package/packages/web/components/TasksCounter/TasksCounter.types.ts +0 -3
  172. package/packages/web/components/TasksCounter/index.ts +0 -2
  173. package/packages/web/components/TechStackBadges/TechStackBadges.tsx +0 -28
  174. package/packages/web/components/TechStackBadges/index.ts +0 -1
  175. package/packages/web/components/TerminalDock/DockToggleTab.tsx +0 -29
  176. package/packages/web/components/TerminalDock/TerminalDock.tsx +0 -386
  177. package/packages/web/components/TerminalDock/TerminalDockTab.tsx +0 -130
  178. package/packages/web/components/TerminalDock/TerminalTabBar.tsx +0 -142
  179. package/packages/web/components/TerminalDock/index.ts +0 -2
  180. package/packages/web/components/TerminalTabs/TerminalTab.tsx +0 -95
  181. package/packages/web/components/TerminalTabs/TerminalTabs.tsx +0 -211
  182. package/packages/web/components/TerminalTabs/index.ts +0 -1
  183. package/packages/web/components/VelocityBadge/VelocityBadge.tsx +0 -32
  184. package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +0 -3
  185. package/packages/web/components/VelocityBadge/index.ts +0 -2
  186. package/packages/web/components/VelocityCard/VelocityCard.tsx +0 -73
  187. package/packages/web/components/VelocityCard/VelocityCard.types.ts +0 -7
  188. package/packages/web/components/VelocityCard/index.ts +0 -2
  189. package/packages/web/components/WeeklyReports/PrintableReport.tsx +0 -259
  190. package/packages/web/components/WeeklyReports/ReportPreviewCard.tsx +0 -187
  191. package/packages/web/components/WeeklyReports/WeekCalendar.tsx +0 -288
  192. package/packages/web/components/WeeklyReports/WeeklyReports.tsx +0 -149
  193. package/packages/web/components/WeeklyReports/index.ts +0 -4
  194. package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +0 -25
  195. package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +0 -4
  196. package/packages/web/components/WeeklySparkline/index.ts +0 -2
  197. package/packages/web/components/charts/SessionsChart.tsx +0 -175
  198. package/packages/web/components/ui/alert-dialog.tsx +0 -157
  199. package/packages/web/components/ui/badge.tsx +0 -46
  200. package/packages/web/components/ui/button.tsx +0 -60
  201. package/packages/web/components/ui/card.tsx +0 -92
  202. package/packages/web/components/ui/chart.tsx +0 -385
  203. package/packages/web/components/ui/dialog.tsx +0 -143
  204. package/packages/web/components/ui/drawer.tsx +0 -135
  205. package/packages/web/components/ui/dropdown-menu.tsx +0 -257
  206. package/packages/web/components/ui/input.tsx +0 -21
  207. package/packages/web/components/ui/scroll-area.tsx +0 -58
  208. package/packages/web/components/ui/select.tsx +0 -187
  209. package/packages/web/components/ui/sheet.tsx +0 -139
  210. package/packages/web/components/ui/tabs.tsx +0 -66
  211. package/packages/web/components/ui/tooltip.tsx +0 -61
  212. package/packages/web/components.json +0 -22
  213. package/packages/web/context/GlobalTerminalContext.tsx +0 -538
  214. package/packages/web/context/TerminalContext.tsx +0 -45
  215. package/packages/web/context/TerminalTabsContext.tsx +0 -181
  216. package/packages/web/eslint.config.mjs +0 -18
  217. package/packages/web/hooks/useClaudeTerminal.ts +0 -425
  218. package/packages/web/hooks/useProjectStats.ts +0 -93
  219. package/packages/web/hooks/useProjects.ts +0 -73
  220. package/packages/web/lib/actions/projects.ts +0 -15
  221. package/packages/web/lib/commands.ts +0 -81
  222. package/packages/web/lib/format.ts +0 -23
  223. package/packages/web/lib/generate-week-report.ts +0 -285
  224. package/packages/web/lib/parse-prjct-files.ts +0 -1123
  225. package/packages/web/lib/project-colors.ts +0 -58
  226. package/packages/web/lib/projects.ts +0 -506
  227. package/packages/web/lib/pty.ts +0 -101
  228. package/packages/web/lib/query-config.ts +0 -44
  229. package/packages/web/lib/services/index.ts +0 -9
  230. package/packages/web/lib/services/projects.server.ts +0 -66
  231. package/packages/web/lib/services/stats.server.ts +0 -562
  232. package/packages/web/lib/unified-loader.ts +0 -396
  233. package/packages/web/lib/utils.ts +0 -6
  234. package/packages/web/next-env.d.ts +0 -6
  235. package/packages/web/next.config.ts +0 -7
  236. package/packages/web/package.json +0 -57
  237. package/packages/web/postcss.config.mjs +0 -7
  238. package/packages/web/public/file.svg +0 -1
  239. package/packages/web/public/globe.svg +0 -1
  240. package/packages/web/public/next.svg +0 -1
  241. package/packages/web/public/vercel.svg +0 -1
  242. package/packages/web/public/window.svg +0 -1
  243. package/packages/web/server.ts +0 -312
  244. package/packages/web/tsconfig.json +0 -34
  245. package/templates/commands/serve.md +0 -121
@@ -1,277 +1,98 @@
1
1
  ---
2
2
  allowed-tools: [Read, Write, Bash]
3
3
  description: 'Ship feature with automated workflow'
4
- timestamp-rule: 'GetTimestamp() and GetDate() for ALL timestamps'
5
- architecture: 'Write-Through (JSON → MD → Events)'
6
- storage-layer: true
7
- source-of-truth: 'storage/shipped.json'
8
- claude-context: 'context/shipped.md'
9
- backend-sync: 'sync/pending.json'
10
4
  ---
11
5
 
12
- # /p:ship - Ship Feature Workflow
6
+ # /p:ship - Ship Feature
13
7
 
14
- ## Architecture: Write-Through Pattern
8
+ Ship completed work with quality checks, version bump, and git commit.
15
9
 
10
+ ## Usage
16
11
  ```
17
- User Action → Storage (JSON) → Context (MD) → Sync Events
12
+ /p:ship [feature] [--blocking]
18
13
  ```
14
+ - `feature`: Name of the feature being shipped (required)
15
+ - `--blocking`: Abort if lint/tests fail
19
16
 
20
- **Source of Truth**: `storage/shipped.json`
21
- **Claude Context**: `context/shipped.md` (generated)
22
- **Backend Sync**: `sync/pending.json` (events)
17
+ ## Flow
23
18
 
24
- ## Context Variables
25
- - `{projectId}`: From `.prjct/prjct.config.json`
26
- - `{globalPath}`: `~/.prjct-cli/projects/{projectId}`
27
- - `{shippedStoragePath}`: `{globalPath}/storage/shipped.json`
28
- - `{shippedContextPath}`: `{globalPath}/context/shipped.md`
29
- - `{syncPath}`: `{globalPath}/sync/pending.json`
30
- - `{memoryPath}`: `{globalPath}/memory/events.jsonl`
31
- - `{snapshotDir}`: `{globalPath}/snapshots`
32
- - `{feature}`: User-provided feature name
33
- - `{outcome}`: User-provided outcome status (optional)
19
+ ### Step 1: Validate
20
+ READ: `.prjct/prjct.config.json` → extract `projectId`
21
+ IF missing: "No prjct project. Run /p:init first." → STOP
34
22
 
35
- ## Outcome Categories
36
-
37
- Track what happened after shipping:
38
-
39
- | Outcome | Meaning | Use When |
40
- |---------|---------|----------|
41
- | `validated` | Confirmed working in production | Feature verified by users/tests |
42
- | `monitoring` | Deployed, needs observation | Just shipped, watching metrics |
43
- | `known-issues` | Working with caveats | Minor issues known, acceptable |
44
-
45
- If no outcome provided, default to `monitoring`.
46
-
47
- ## Step 1: Read Config
48
-
49
- READ: `.prjct/prjct.config.json`
50
- EXTRACT: `projectId`
51
-
52
- IF file not found:
53
- OUTPUT: "No prjct project. Run /p:init first."
54
- STOP
55
-
56
- ## Step 2: Validate Prerequisites
23
+ SET: `{globalPath}` = `~/.prjct-cli/projects/{projectId}`
57
24
 
58
25
  BASH: `git status --porcelain`
26
+ IF empty: "No changes to ship." → STOP
59
27
 
60
- IF output empty (no changes):
61
- OUTPUT: "⚠️ No changes to ship. Make some commits first."
62
- STOP
63
-
64
- BASH: `git rev-parse --is-inside-work-tree`
65
-
66
- IF not a git repo:
67
- OUTPUT: "⚠️ Not a git repository. Initialize git first."
68
- STOP
69
-
70
- ## Step 3: Quality Checks (Non-Blocking)
71
-
72
- ### Lint Check
28
+ ### Step 2: Quality Checks (optional)
73
29
  BASH: `npm run lint 2>&1 || echo "LINT_SKIP"`
74
- CAPTURE output as {lintResult}
75
-
76
- IF contains "LINT_SKIP" OR contains "missing script":
77
- {lintStatus} = "skipped"
78
- ELSE IF contains "error":
79
- {lintStatus} = "warnings"
80
- ELSE:
81
- {lintStatus} = "passed"
82
-
83
- ### Test Check
84
30
  BASH: `npm test 2>&1 || echo "TEST_SKIP"`
85
- CAPTURE output as {testResult}
86
-
87
- IF contains "TEST_SKIP" OR contains "missing script":
88
- {testStatus} = "skipped"
89
- ELSE IF contains "failed" OR contains "FAIL":
90
- {testStatus} = "failed"
91
- ELSE:
92
- {testStatus} = "passed"
93
-
94
- **Note**: These are NON-BLOCKING. Continue even if they fail.
95
31
 
96
- ## Step 4: Version Bump (MANDATORY)
97
-
98
- ### Read Current Version
99
- Detect project type and read version:
32
+ IF `--blocking` AND (lint failed OR tests failed):
33
+ OUTPUT: "Quality checks failed. Ship blocked."
34
+ STOP
100
35
 
101
- | File | Language | Version Location |
102
- |------|----------|------------------|
103
- | `package.json` | Node.js | `"version": "X.Y.Z"` |
104
- | `Cargo.toml` | Rust | `version = "X.Y.Z"` |
105
- | `pyproject.toml` | Python | `version = "X.Y.Z"` |
106
- | `VERSION` | Any | Plain text `X.Y.Z` |
36
+ ### Step 3: Version Bump
37
+ READ: `package.json` (or Cargo.toml, pyproject.toml)
38
+ EXTRACT: current version
107
39
 
108
- ### Determine Bump Type
109
40
  BASH: `git log --oneline -10`
41
+ Determine bump type:
42
+ - "BREAKING" or "major:" → major
43
+ - "feat:" or "feature:" → minor
44
+ - else → patch
110
45
 
111
- IF any commit contains "BREAKING" OR "major:":
112
- {bumpType} = "major"
113
- ELSE IF any commit contains "feat:" OR "feature:":
114
- {bumpType} = "minor"
115
- ELSE:
116
- {bumpType} = "patch"
46
+ UPDATE version file with new version
117
47
 
118
- ### Update Version File
119
- Update the version file with {newVersion}
120
-
121
- ## Step 5: Update CHANGELOG (MANDATORY)
122
-
123
- ### Get Recent Commits
48
+ ### Step 4: Update CHANGELOG
124
49
  BASH: `git log --oneline -20 --pretty=format:"- %s"`
125
- CAPTURE as {commitList}
126
-
127
- ### Create/Update CHANGELOG.md
128
- INSERT new entry after header.
129
-
130
- ## Step 6: Git Commit
50
+ INSERT new entry in CHANGELOG.md
131
51
 
52
+ ### Step 5: Git Commit & Push
132
53
  BASH: `git add .`
133
-
134
- BASH: `git commit -m "$(cat <<'EOF'
135
- feat: Ship {feature} v{newVersion}
54
+ BASH: `git commit -m "feat: Ship {feature} v{newVersion}
136
55
 
137
56
  🤖 Generated with [p/](https://www.prjct.app/)
138
57
  Designed for [Claude](https://www.anthropic.com/claude)
139
- EOF
140
- )"`
58
+ "`
59
+ BASH: `git push`
141
60
 
142
- ## Step 7: Git Push
61
+ ### Step 6: Update Storage
62
+ GET timestamp: `bun -e "console.log(new Date().toISOString())" 2>/dev/null || node -e "console.log(new Date().toISOString())"`
63
+ GET uuid: `bun -e "console.log(crypto.randomUUID())" 2>/dev/null || node -e "console.log(require('crypto').randomUUID())"`
143
64
 
144
- BASH: `git push 2>&1`
145
-
146
- IF contains "rejected" OR contains "failed":
147
- OUTPUT: "⚠️ Push failed. Try: git pull --rebase && git push"
148
- CONTINUE
149
-
150
- ## Step 8: Update Storage (SOURCE OF TRUTH)
151
-
152
- SET: {now} = GetTimestamp()
153
- GENERATE: {shipId} = UUID v4
154
-
155
- ### Read existing shipped
156
- READ: `{shippedStoragePath}` or create default:
65
+ READ: `{globalPath}/storage/shipped.json` (or create default)
66
+ PREPEND new ship object:
157
67
  ```json
158
68
  {
159
- "shipped": [],
160
- "lastUpdated": null
161
- }
162
- ```
163
-
164
- ### Create ship object
165
- ```json
166
- {
167
- "id": "{shipId}",
69
+ "id": "{uuid}",
168
70
  "name": "{feature}",
169
71
  "version": "{newVersion}",
170
- "outcome": "{outcome}",
171
- "shippedAt": "{now}",
72
+ "shippedAt": "{timestamp}",
172
73
  "lint": "{lintStatus}",
173
- "tests": "{testStatus}",
174
- "commits": {commits}
175
- }
176
- ```
177
-
178
- ### Update shipped.json
179
- PREPEND new ship to shipped array
180
- SET: lastUpdated = {now}
181
- WRITE: `{shippedStoragePath}`
182
-
183
- ## Step 9: Generate Context (FOR CLAUDE)
184
-
185
- WRITE: `{shippedContextPath}`
186
-
187
- ```markdown
188
- # SHIPPED 🚀
189
-
190
- ## {Month Year}
191
-
192
- {FOR EACH ship in shipped WHERE month matches:}
193
- - **{ship.name}** v{ship.version} - {ship.shippedAt}
194
- {END FOR}
195
-
196
- ---
197
-
198
- **Total shipped:** {shipped.length}
199
- ```
200
-
201
- ## Step 10: Queue Sync Event (FOR BACKEND)
202
-
203
- READ: `{syncPath}` or create empty array
204
- APPEND event:
205
- ```json
206
- {
207
- "type": "feature.shipped",
208
- "path": ["shipped"],
209
- "data": {
210
- "shipId": "{shipId}",
211
- "name": "{feature}",
212
- "version": "{newVersion}",
213
- "outcome": "{outcome}",
214
- "shippedAt": "{now}"
215
- },
216
- "timestamp": "{now}",
217
- "projectId": "{projectId}"
74
+ "tests": "{testStatus}"
218
75
  }
219
76
  ```
220
- WRITE: `{syncPath}`
221
-
222
- ## Step 11: Log to Daily Session
223
-
224
- GET: {date} = YYYY-MM-DD from {now}
225
- GET: {yearMonth} = YYYY-MM from {now}
226
- SET: {dailySessionPath} = `{globalPath}/progress/sessions/{yearMonth}/{date}.jsonl`
77
+ WRITE: `{globalPath}/storage/shipped.json`
227
78
 
228
- BASH: `mkdir -p {globalPath}/progress/sessions/{yearMonth}`
79
+ Generate context:
80
+ WRITE: `{globalPath}/context/shipped.md`
229
81
 
230
- APPEND to: `{dailySessionPath}`
231
- ```json
232
- {"ts":"{now}","type":"feature_ship","name":"{feature}","version":"{newVersion}"}
233
- ```
82
+ Queue sync event:
83
+ APPEND to `{globalPath}/sync/pending.json`
234
84
 
235
- ## Step 12: Log to Memory (AUDIT TRAIL)
85
+ Log to memory:
86
+ APPEND to `{globalPath}/memory/events.jsonl`
236
87
 
237
- APPEND to: `{memoryPath}`
238
- ```json
239
- {"timestamp":"{now}","action":"feature_shipped","shipId":"{shipId}","feature":"{feature}","version":"{newVersion}","outcome":"{outcome}"}
240
- ```
241
-
242
- ## Step 13: Update project.json
243
-
244
- SET: {projectJsonPath} = `{globalPath}/project.json`
245
-
246
- READ: `{projectJsonPath}`
247
- UPDATE:
248
- - `"version"`: Set to `{newVersion}`
249
- - `"hasUncommittedChanges"`: Set to `false`
250
- - `"lastSync"`: Set to `{now}`
251
- WRITE: `{projectJsonPath}`
252
-
253
- ## Step 14: Run Deep Sync
254
-
255
- Execute `/p:sync` logic to update all context files.
256
-
257
- ## Output
258
-
259
- SUCCESS:
88
+ ### Step 7: Output
260
89
  ```
261
90
  🚀 Shipped: {feature}
262
91
 
263
- Version: {currentVersion} → {newVersion}
264
- Outcome: {outcome}
265
- Lint: {lintStatus}
266
- Tests: {testStatus}
267
- Commit: {commitHash}
268
-
269
- 🔄 Synced project data
92
+ Version: {oldVersion} → {newVersion}
93
+ Lint: {lintStatus} | Tests: {testStatus}
270
94
 
271
- Next:
272
- • /p:undo - Revert this ship if needed
273
- • /p:feature - Plan next feature
274
- • /p:recap - See progress
95
+ Next: /p:feature | /p:recap
275
96
  ```
276
97
 
277
98
  ## Error Handling
@@ -280,37 +101,10 @@ Next:
280
101
  |-------|----------|--------|
281
102
  | No git repo | "Not a git repository" | STOP |
282
103
  | No changes | "No changes to ship" | STOP |
283
- | Lint fails | Show warning | CONTINUE |
284
- | Tests fail | Show warning | CONTINUE |
285
- | Push fails | Show fix command | CONTINUE |
286
- | Version bump fails | "Failed to update version" | STOP |
287
-
288
- ## Examples
289
-
290
- ### Example 1: Full Success
291
- ```
292
- 🚀 Shipped: user authentication
293
-
294
- Version: 1.2.0 → 1.3.0
295
- Outcome: validated
296
- Lint: passed
297
- Tests: passed
298
- Commit: abc1234
104
+ | Lint/test fails (blocking) | "Quality checks failed" | STOP |
105
+ | Lint/test fails (non-blocking) | Show warning | CONTINUE |
106
+ | Push fails | "Push failed. Try: git pull --rebase" | CONTINUE |
299
107
 
300
- Next: /p:feature | /p:recap
301
- ```
302
-
303
- ### Example 2: With Warnings
304
- ```
305
- 🚀 Shipped: bug fixes
306
-
307
- Version: 1.2.0 → 1.2.1
308
- Outcome: monitoring
309
- Lint: warnings (non-blocking)
310
- Tests: skipped
311
- Commit: def5678
312
-
313
- ⚠️ Consider fixing lint warnings
314
-
315
- Next: /p:feature | /p:recap
316
- ```
108
+ ## References
109
+ - Architecture details: `~/.prjct-cli/docs/architecture.md`
110
+ - Validation patterns: `~/.prjct-cli/docs/validation.md`
@@ -374,12 +374,12 @@ WRITE: `{globalPath}/project.json`
374
374
 
375
375
  ## Step 7: Generate Claude Code Sub-Agents (AGENTIC)
376
376
 
377
- Generate sub-agents for Claude Code in the PROJECT's `.claude/agents/` directory.
377
+ Generate sub-agents for Claude Code in the GLOBAL storage `{globalPath}/agents/` directory.
378
378
 
379
379
  ### 7.1 Create Directory
380
380
 
381
381
  ```bash
382
- mkdir -p {cwd}/.claude/agents
382
+ mkdir -p {globalPath}/agents
383
383
  ```
384
384
 
385
385
  ### 7.2 Read Generation Instructions
@@ -398,17 +398,17 @@ These 3 agents are ALWAYS created for every prjct project:
398
398
  **prjct-workflow.md** - Handles: /p:now, /p:done, /p:next, /p:pause, /p:resume
399
399
  READ template: `templates/subagents/workflow/prjct-workflow.md`
400
400
  ADAPT with: projectId, projectPath
401
- WRITE to: `{cwd}/.claude/agents/prjct-workflow.md`
401
+ WRITE to: `{globalPath}/agents/prjct-workflow.md`
402
402
 
403
403
  **prjct-planner.md** - Handles: /p:feature, /p:idea, /p:spec, /p:bug
404
404
  READ template: `templates/subagents/workflow/prjct-planner.md`
405
405
  ADAPT with: projectId, projectPath
406
- WRITE to: `{cwd}/.claude/agents/prjct-planner.md`
406
+ WRITE to: `{globalPath}/agents/prjct-planner.md`
407
407
 
408
408
  **prjct-shipper.md** - Handles: /p:ship
409
409
  READ template: `templates/subagents/workflow/prjct-shipper.md`
410
410
  ADAPT with: projectId, projectPath, detected test/lint commands
411
- WRITE to: `{cwd}/.claude/agents/prjct-shipper.md`
411
+ WRITE to: `{globalPath}/agents/prjct-shipper.md`
412
412
 
413
413
  ### 7.4 Generate Domain Agents (Based on Stack)
414
414
 
@@ -425,7 +425,7 @@ Analyze `{techStack}` from Step 3 and generate ONLY relevant domain agents:
425
425
  For EACH detected stack:
426
426
  1. READ template from `templates/subagents/domain/{name}.md`
427
427
  2. ADAPT description with detected frameworks (e.g., "React specialist" not just "frontend")
428
- 3. WRITE to `{cwd}/.claude/agents/{name}.md`
428
+ 3. WRITE to `{globalPath}/agents/{name}.md`
429
429
 
430
430
  ### 7.5 Report Generated Agents
431
431
 
@@ -573,7 +573,7 @@ Next: /p:now to start a new task
573
573
  │ └── events.jsonl
574
574
  └── project.json # Metadata
575
575
 
576
- {cwd}/.claude/agents/ # Claude Code Sub-Agents (PER PROJECT)
576
+ # Sub-Agents are in {globalPath}/agents/ (NOT in project .claude/)
577
577
  ├── prjct-workflow.md # /p:now, /p:done, /p:next
578
578
  ├── prjct-planner.md # /p:feature, /p:idea, /p:spec
579
579
  ├── prjct-shipper.md # /p:ship