prjct-cli 0.18.2 → 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 (243) hide show
  1. package/CHANGELOG.md +40 -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/commands/done.md +57 -258
  11. package/templates/commands/now.md +72 -277
  12. package/templates/commands/ship.md +55 -261
  13. package/templates/commands/test.md +328 -21
  14. package/templates/global/CLAUDE.md +40 -205
  15. package/templates/global/docs/agents.md +88 -0
  16. package/templates/global/docs/architecture.md +103 -0
  17. package/templates/global/docs/commands.md +98 -0
  18. package/templates/global/docs/validation.md +95 -0
  19. package/templates/mcp-config.json +36 -0
  20. package/bin/dev.js +0 -216
  21. package/bin/serve.js +0 -361
  22. package/packages/web/README.md +0 -36
  23. package/packages/web/app/api/claude/sessions/route.ts +0 -44
  24. package/packages/web/app/api/claude/status/route.ts +0 -34
  25. package/packages/web/app/api/projects/[id]/icon/route.ts +0 -33
  26. package/packages/web/app/api/projects/[id]/momentum/route.ts +0 -257
  27. package/packages/web/app/api/projects/[id]/route.ts +0 -29
  28. package/packages/web/app/api/projects/[id]/stats/route.ts +0 -41
  29. package/packages/web/app/api/projects/[id]/status/route.ts +0 -21
  30. package/packages/web/app/api/projects/route.ts +0 -16
  31. package/packages/web/app/api/sessions/current/route.ts +0 -132
  32. package/packages/web/app/api/sessions/history/route.ts +0 -204
  33. package/packages/web/app/error.tsx +0 -34
  34. package/packages/web/app/favicon.ico +0 -0
  35. package/packages/web/app/globals.css +0 -198
  36. package/packages/web/app/layout.tsx +0 -53
  37. package/packages/web/app/loading.tsx +0 -7
  38. package/packages/web/app/not-found.tsx +0 -25
  39. package/packages/web/app/page.tsx +0 -12
  40. package/packages/web/app/project/[id]/code/layout.tsx +0 -18
  41. package/packages/web/app/project/[id]/code/page.tsx +0 -408
  42. package/packages/web/app/project/[id]/error.tsx +0 -41
  43. package/packages/web/app/project/[id]/loading.tsx +0 -9
  44. package/packages/web/app/project/[id]/not-found.tsx +0 -27
  45. package/packages/web/app/project/[id]/page.tsx +0 -384
  46. package/packages/web/app/project/[id]/reports/page.tsx +0 -59
  47. package/packages/web/app/project/[id]/reports/print/page.tsx +0 -58
  48. package/packages/web/app/sessions/page.tsx +0 -165
  49. package/packages/web/app/settings/page.tsx +0 -151
  50. package/packages/web/components/ActivityTimeline/ActivityTimeline.constants.ts +0 -2
  51. package/packages/web/components/ActivityTimeline/ActivityTimeline.tsx +0 -49
  52. package/packages/web/components/ActivityTimeline/ActivityTimeline.types.ts +0 -8
  53. package/packages/web/components/ActivityTimeline/hooks/index.ts +0 -2
  54. package/packages/web/components/ActivityTimeline/hooks/useExpandable.ts +0 -9
  55. package/packages/web/components/ActivityTimeline/hooks/useGroupedEvents.ts +0 -23
  56. package/packages/web/components/ActivityTimeline/index.ts +0 -2
  57. package/packages/web/components/AgentsCard/AgentsCard.tsx +0 -93
  58. package/packages/web/components/AgentsCard/AgentsCard.types.ts +0 -14
  59. package/packages/web/components/AgentsCard/index.ts +0 -2
  60. package/packages/web/components/AppSidebar/AppSidebar.tsx +0 -316
  61. package/packages/web/components/AppSidebar/index.ts +0 -1
  62. package/packages/web/components/BackLink/BackLink.tsx +0 -18
  63. package/packages/web/components/BackLink/BackLink.types.ts +0 -5
  64. package/packages/web/components/BackLink/index.ts +0 -2
  65. package/packages/web/components/BentoCard/BentoCard.constants.ts +0 -16
  66. package/packages/web/components/BentoCard/BentoCard.tsx +0 -48
  67. package/packages/web/components/BentoCard/BentoCard.types.ts +0 -15
  68. package/packages/web/components/BentoCard/index.ts +0 -2
  69. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.constants.ts +0 -9
  70. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.tsx +0 -18
  71. package/packages/web/components/BentoCardSkeleton/BentoCardSkeleton.types.ts +0 -5
  72. package/packages/web/components/BentoCardSkeleton/index.ts +0 -2
  73. package/packages/web/components/BentoGrid/BentoGrid.tsx +0 -18
  74. package/packages/web/components/BentoGrid/BentoGrid.types.ts +0 -4
  75. package/packages/web/components/BentoGrid/index.ts +0 -2
  76. package/packages/web/components/BlockersCard/BlockersCard.tsx +0 -75
  77. package/packages/web/components/BlockersCard/BlockersCard.types.ts +0 -12
  78. package/packages/web/components/BlockersCard/index.ts +0 -2
  79. package/packages/web/components/CommandBar/CommandBar.tsx +0 -67
  80. package/packages/web/components/CommandBar/index.ts +0 -1
  81. package/packages/web/components/CommandButton/CommandButton.tsx +0 -46
  82. package/packages/web/components/CommandButton/index.ts +0 -1
  83. package/packages/web/components/ConnectionStatus/ConnectionStatus.tsx +0 -29
  84. package/packages/web/components/ConnectionStatus/index.ts +0 -1
  85. package/packages/web/components/DashboardContent/DashboardContent.tsx +0 -284
  86. package/packages/web/components/DashboardContent/index.ts +0 -1
  87. package/packages/web/components/DateGroup/DateGroup.tsx +0 -18
  88. package/packages/web/components/DateGroup/DateGroup.types.ts +0 -6
  89. package/packages/web/components/DateGroup/DateGroup.utils.ts +0 -11
  90. package/packages/web/components/DateGroup/index.ts +0 -2
  91. package/packages/web/components/EmptyState/EmptyState.tsx +0 -76
  92. package/packages/web/components/EmptyState/EmptyState.types.ts +0 -11
  93. package/packages/web/components/EmptyState/index.ts +0 -2
  94. package/packages/web/components/EventRow/EventRow.constants.ts +0 -10
  95. package/packages/web/components/EventRow/EventRow.tsx +0 -49
  96. package/packages/web/components/EventRow/EventRow.types.ts +0 -7
  97. package/packages/web/components/EventRow/EventRow.utils.ts +0 -49
  98. package/packages/web/components/EventRow/index.ts +0 -2
  99. package/packages/web/components/ExpandButton/ExpandButton.tsx +0 -18
  100. package/packages/web/components/ExpandButton/ExpandButton.types.ts +0 -6
  101. package/packages/web/components/ExpandButton/index.ts +0 -2
  102. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.tsx +0 -14
  103. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.types.ts +0 -5
  104. package/packages/web/components/HealthGradientBackground/HealthGradientBackground.utils.ts +0 -13
  105. package/packages/web/components/HealthGradientBackground/index.ts +0 -2
  106. package/packages/web/components/HeroSection/HeroSection.tsx +0 -92
  107. package/packages/web/components/HeroSection/HeroSection.types.ts +0 -14
  108. package/packages/web/components/HeroSection/HeroSection.utils.ts +0 -11
  109. package/packages/web/components/HeroSection/hooks/index.ts +0 -2
  110. package/packages/web/components/HeroSection/hooks/useCountUp.ts +0 -45
  111. package/packages/web/components/HeroSection/hooks/useWeeklyActivity.ts +0 -18
  112. package/packages/web/components/HeroSection/index.ts +0 -2
  113. package/packages/web/components/IdeasCard/IdeasCard.tsx +0 -115
  114. package/packages/web/components/IdeasCard/IdeasCard.types.ts +0 -10
  115. package/packages/web/components/IdeasCard/index.ts +0 -2
  116. package/packages/web/components/InsightMessage/InsightMessage.tsx +0 -9
  117. package/packages/web/components/InsightMessage/InsightMessage.types.ts +0 -3
  118. package/packages/web/components/InsightMessage/index.ts +0 -2
  119. package/packages/web/components/Logo/Logo.tsx +0 -65
  120. package/packages/web/components/Logo/index.ts +0 -1
  121. package/packages/web/components/MarkdownContent/MarkdownContent.tsx +0 -123
  122. package/packages/web/components/MarkdownContent/index.ts +0 -1
  123. package/packages/web/components/MasonryGrid/MasonryGrid.tsx +0 -18
  124. package/packages/web/components/MasonryGrid/index.ts +0 -1
  125. package/packages/web/components/MomentumWidget/MomentumWidget.tsx +0 -119
  126. package/packages/web/components/MomentumWidget/MomentumWidget.types.ts +0 -16
  127. package/packages/web/components/MomentumWidget/index.ts +0 -2
  128. package/packages/web/components/NowCard/NowCard.tsx +0 -118
  129. package/packages/web/components/NowCard/NowCard.types.ts +0 -16
  130. package/packages/web/components/NowCard/index.ts +0 -2
  131. package/packages/web/components/PageHeader/PageHeader.tsx +0 -24
  132. package/packages/web/components/PageHeader/index.ts +0 -1
  133. package/packages/web/components/ProgressRing/ProgressRing.constants.ts +0 -20
  134. package/packages/web/components/ProgressRing/ProgressRing.tsx +0 -51
  135. package/packages/web/components/ProgressRing/ProgressRing.types.ts +0 -11
  136. package/packages/web/components/ProgressRing/index.ts +0 -2
  137. package/packages/web/components/ProjectAvatar/ProjectAvatar.tsx +0 -54
  138. package/packages/web/components/ProjectAvatar/index.ts +0 -1
  139. package/packages/web/components/ProjectColorDot/ProjectColorDot.tsx +0 -37
  140. package/packages/web/components/ProjectColorDot/index.ts +0 -1
  141. package/packages/web/components/ProjectSelectorModal/ProjectSelectorModal.tsx +0 -104
  142. package/packages/web/components/ProjectSelectorModal/index.ts +0 -1
  143. package/packages/web/components/Providers/Providers.tsx +0 -48
  144. package/packages/web/components/Providers/index.ts +0 -1
  145. package/packages/web/components/QueueCard/QueueCard.tsx +0 -125
  146. package/packages/web/components/QueueCard/QueueCard.types.ts +0 -12
  147. package/packages/web/components/QueueCard/QueueCard.utils.ts +0 -12
  148. package/packages/web/components/QueueCard/index.ts +0 -2
  149. package/packages/web/components/RecoverCard/RecoverCard.tsx +0 -72
  150. package/packages/web/components/RecoverCard/RecoverCard.types.ts +0 -16
  151. package/packages/web/components/RecoverCard/index.ts +0 -2
  152. package/packages/web/components/RoadmapCard/RoadmapCard.tsx +0 -145
  153. package/packages/web/components/RoadmapCard/RoadmapCard.types.ts +0 -16
  154. package/packages/web/components/RoadmapCard/index.ts +0 -2
  155. package/packages/web/components/ShipsCard/ShipsCard.tsx +0 -95
  156. package/packages/web/components/ShipsCard/ShipsCard.types.ts +0 -14
  157. package/packages/web/components/ShipsCard/ShipsCard.utils.ts +0 -4
  158. package/packages/web/components/ShipsCard/index.ts +0 -2
  159. package/packages/web/components/SparklineChart/SparklineChart.tsx +0 -40
  160. package/packages/web/components/SparklineChart/SparklineChart.types.ts +0 -6
  161. package/packages/web/components/SparklineChart/index.ts +0 -2
  162. package/packages/web/components/StatsMasonry/StatsMasonry.tsx +0 -95
  163. package/packages/web/components/StatsMasonry/index.ts +0 -1
  164. package/packages/web/components/StreakCard/StreakCard.constants.ts +0 -2
  165. package/packages/web/components/StreakCard/StreakCard.tsx +0 -55
  166. package/packages/web/components/StreakCard/StreakCard.types.ts +0 -4
  167. package/packages/web/components/StreakCard/index.ts +0 -2
  168. package/packages/web/components/TasksCounter/TasksCounter.tsx +0 -14
  169. package/packages/web/components/TasksCounter/TasksCounter.types.ts +0 -3
  170. package/packages/web/components/TasksCounter/index.ts +0 -2
  171. package/packages/web/components/TechStackBadges/TechStackBadges.tsx +0 -28
  172. package/packages/web/components/TechStackBadges/index.ts +0 -1
  173. package/packages/web/components/TerminalDock/DockToggleTab.tsx +0 -29
  174. package/packages/web/components/TerminalDock/TerminalDock.tsx +0 -386
  175. package/packages/web/components/TerminalDock/TerminalDockTab.tsx +0 -130
  176. package/packages/web/components/TerminalDock/TerminalTabBar.tsx +0 -142
  177. package/packages/web/components/TerminalDock/index.ts +0 -2
  178. package/packages/web/components/TerminalTabs/TerminalTab.tsx +0 -95
  179. package/packages/web/components/TerminalTabs/TerminalTabs.tsx +0 -211
  180. package/packages/web/components/TerminalTabs/index.ts +0 -1
  181. package/packages/web/components/VelocityBadge/VelocityBadge.tsx +0 -32
  182. package/packages/web/components/VelocityBadge/VelocityBadge.types.ts +0 -3
  183. package/packages/web/components/VelocityBadge/index.ts +0 -2
  184. package/packages/web/components/VelocityCard/VelocityCard.tsx +0 -73
  185. package/packages/web/components/VelocityCard/VelocityCard.types.ts +0 -7
  186. package/packages/web/components/VelocityCard/index.ts +0 -2
  187. package/packages/web/components/WeeklyReports/PrintableReport.tsx +0 -259
  188. package/packages/web/components/WeeklyReports/ReportPreviewCard.tsx +0 -187
  189. package/packages/web/components/WeeklyReports/WeekCalendar.tsx +0 -288
  190. package/packages/web/components/WeeklyReports/WeeklyReports.tsx +0 -149
  191. package/packages/web/components/WeeklyReports/index.ts +0 -4
  192. package/packages/web/components/WeeklySparkline/WeeklySparkline.tsx +0 -25
  193. package/packages/web/components/WeeklySparkline/WeeklySparkline.types.ts +0 -4
  194. package/packages/web/components/WeeklySparkline/index.ts +0 -2
  195. package/packages/web/components/charts/SessionsChart.tsx +0 -175
  196. package/packages/web/components/ui/alert-dialog.tsx +0 -157
  197. package/packages/web/components/ui/badge.tsx +0 -46
  198. package/packages/web/components/ui/button.tsx +0 -60
  199. package/packages/web/components/ui/card.tsx +0 -92
  200. package/packages/web/components/ui/chart.tsx +0 -385
  201. package/packages/web/components/ui/dialog.tsx +0 -143
  202. package/packages/web/components/ui/drawer.tsx +0 -135
  203. package/packages/web/components/ui/dropdown-menu.tsx +0 -257
  204. package/packages/web/components/ui/input.tsx +0 -21
  205. package/packages/web/components/ui/scroll-area.tsx +0 -58
  206. package/packages/web/components/ui/select.tsx +0 -187
  207. package/packages/web/components/ui/sheet.tsx +0 -139
  208. package/packages/web/components/ui/tabs.tsx +0 -66
  209. package/packages/web/components/ui/tooltip.tsx +0 -61
  210. package/packages/web/components.json +0 -22
  211. package/packages/web/context/GlobalTerminalContext.tsx +0 -538
  212. package/packages/web/context/TerminalContext.tsx +0 -45
  213. package/packages/web/context/TerminalTabsContext.tsx +0 -181
  214. package/packages/web/eslint.config.mjs +0 -18
  215. package/packages/web/hooks/useClaudeTerminal.ts +0 -425
  216. package/packages/web/hooks/useProjectStats.ts +0 -93
  217. package/packages/web/hooks/useProjects.ts +0 -73
  218. package/packages/web/lib/actions/projects.ts +0 -15
  219. package/packages/web/lib/commands.ts +0 -81
  220. package/packages/web/lib/format.ts +0 -23
  221. package/packages/web/lib/generate-week-report.ts +0 -285
  222. package/packages/web/lib/parse-prjct-files.ts +0 -1123
  223. package/packages/web/lib/project-colors.ts +0 -58
  224. package/packages/web/lib/projects.ts +0 -506
  225. package/packages/web/lib/pty.ts +0 -101
  226. package/packages/web/lib/query-config.ts +0 -44
  227. package/packages/web/lib/services/index.ts +0 -9
  228. package/packages/web/lib/services/projects.server.ts +0 -66
  229. package/packages/web/lib/services/stats.server.ts +0 -562
  230. package/packages/web/lib/unified-loader.ts +0 -396
  231. package/packages/web/lib/utils.ts +0 -6
  232. package/packages/web/next-env.d.ts +0 -6
  233. package/packages/web/next.config.ts +0 -7
  234. package/packages/web/package.json +0 -57
  235. package/packages/web/postcss.config.mjs +0 -7
  236. package/packages/web/public/file.svg +0 -1
  237. package/packages/web/public/globe.svg +0 -1
  238. package/packages/web/public/next.svg +0 -1
  239. package/packages/web/public/vercel.svg +0 -1
  240. package/packages/web/public/window.svg +0 -1
  241. package/packages/web/server.ts +0 -312
  242. package/packages/web/tsconfig.json +0 -34
  243. 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`